diff options
Diffstat (limited to '2020/subtitles')
51 files changed, 52813 insertions, 0 deletions
diff --git a/2020/subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt b/2020/subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt new file mode 100644 index 00000000..3dfb9f5b --- /dev/null +++ b/2020/subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt @@ -0,0 +1,604 @@ +WEBVTT + +00:00:03.919 --> 00:00:05.279 +all right + +00:00:05.279 --> 00:00:08.400 +hello and uh welcome to EmacsConf + +00:00:08.400 --> 00:00:11.920 +2020. um I'm Amin Bandali + +00:00:11.920 --> 00:00:14.920 +and I have with me my fellow + +00:00:14.920 --> 00:00:16.560 +co-organizers uh + +00:00:16.560 --> 00:00:20.720 +Leo Vivier and Sacha Chua + +00:00:20.720 --> 00:00:24.160 +and we're very excited to be doing this + +00:00:24.160 --> 00:00:25.439 +conference again this year + +00:00:25.439 --> 00:00:28.240 +it's already been a year since the last + +00:00:28.240 --> 00:00:28.560 +one + +00:00:28.560 --> 00:00:32.079 +gosh the time flies by but + +00:00:32.079 --> 00:00:35.680 +um yeah so I guess + +00:00:35.680 --> 00:00:38.960 +without further ado let's get into + +00:00:38.960 --> 00:00:41.520 +the conference so hello again and + +00:00:41.520 --> 00:00:43.520 +welcome to EmacsConf 2020. + +00:00:43.520 --> 00:00:47.039 +we're very happy to have you here um + +00:00:47.039 --> 00:00:49.360 +so we're gonna start right off the bat + +00:00:49.360 --> 00:00:50.239 +with + +00:00:50.239 --> 00:00:53.600 +um a huge series of thank yous to um + +00:00:53.600 --> 00:00:56.000 +free software foundation especially the + +00:00:56.000 --> 00:00:57.120 +tech team + +00:00:57.120 --> 00:00:59.760 +for um you know their continued support + +00:00:59.760 --> 00:01:01.600 +and for letting us use + +00:01:01.600 --> 00:01:04.559 +um their big blue button instance uh for + +00:01:04.559 --> 00:01:05.360 +this very + +00:01:05.360 --> 00:01:07.840 +um presentation that you're watching um + +00:01:07.840 --> 00:01:09.680 +to for us to be able to deliver it using + +00:01:09.680 --> 00:01:10.720 +only free software + +00:01:10.720 --> 00:01:14.640 +um that's very generous of them + +00:01:14.640 --> 00:01:18.240 +thank you so much next up I want to + +00:01:18.240 --> 00:01:19.920 +thank all my co-organizers and + +00:01:19.920 --> 00:01:21.600 +volunteers um + +00:01:21.600 --> 00:01:24.640 +so this list is in alphabetical or order + +00:01:24.640 --> 00:01:26.880 +but um yeah so there's myself there's + +00:01:26.880 --> 00:01:28.479 +bobbin 192. + +00:01:28.479 --> 00:01:31.360 +there's david bremner um david o'toole + +00:01:31.360 --> 00:01:32.159 +um + +00:01:32.159 --> 00:01:35.360 +mpls corbin or corbin bruce public + +00:01:35.360 --> 00:01:38.560 +voigt which is carl boyd um + +00:01:38.560 --> 00:01:41.759 +sasha chu of course and zeph which is + +00:01:41.759 --> 00:01:44.799 +uh who is leo vva um thank you all so + +00:01:44.799 --> 00:01:45.520 +much + +00:01:45.520 --> 00:01:48.399 +so now I'll pass it on to sasha chua for + +00:01:48.399 --> 00:01:48.880 +a + +00:01:48.880 --> 00:01:52.000 +quick um overview of the schedule + +00:01:52.000 --> 00:01:54.640 +we have a lot of fun fun talks scheduled + +00:01:54.640 --> 00:01:56.640 +for today and tomorrow + +00:01:56.640 --> 00:01:59.280 +you can find it at the Emacs con + +00:01:59.280 --> 00:02:01.520 +schedule which I will open up in the tab + +00:02:01.520 --> 00:02:03.600 +and here we go so I'll give you a quick + +00:02:03.600 --> 00:02:04.880 +overview of the schedule + +00:02:04.880 --> 00:02:06.960 +you can drop in of course all the times + +00:02:06.960 --> 00:02:09.039 +are approximate despite the misleading + +00:02:09.039 --> 00:02:11.280 +these specific time stamps so please + +00:02:11.280 --> 00:02:13.760 +check back in on the Emacs comp channel + +00:02:13.760 --> 00:02:14.800 +or + +00:02:14.800 --> 00:02:16.160 +or keep checking the schedule throughout + +00:02:16.160 --> 00:02:18.400 +the day as things things get updated + +00:02:18.400 --> 00:02:20.400 +we'll start off with some user stories + +00:02:20.400 --> 00:02:22.000 +and uh and then we'll dive + +00:02:22.000 --> 00:02:24.400 +right into how Emacs can be used for + +00:02:24.400 --> 00:02:26.080 +lots of different things + +00:02:26.080 --> 00:02:28.000 +uh emax configuration of course is a + +00:02:28.000 --> 00:02:29.840 +huge part of using Emacs like a tinker + +00:02:29.840 --> 00:02:31.120 +with it and so we've got a couple of + +00:02:31.120 --> 00:02:31.760 +talks + +00:02:31.760 --> 00:02:35.040 +about that in the afternoon it's a lot + +00:02:35.040 --> 00:02:36.160 +of org talks + +00:02:36.160 --> 00:02:39.280 +so if if you're into org + +00:02:39.280 --> 00:02:40.879 +the whole afternoon you've got these + +00:02:40.879 --> 00:02:43.040 +things to play with next day + +00:02:43.040 --> 00:02:44.800 +so sunday we have a lot of development + +00:02:44.800 --> 00:02:46.239 +oriented talks we have + +00:02:46.239 --> 00:02:48.400 +a development update from john weekly + +00:02:48.400 --> 00:02:50.480 +and a number of talks about Emacs list + +00:02:50.480 --> 00:02:52.640 +or packages that that help you with + +00:02:52.640 --> 00:02:54.160 +working with code + +00:02:54.160 --> 00:02:56.239 +you also have some talks that need to be + +00:02:56.239 --> 00:02:57.920 +moved to the second day for + +00:02:57.920 --> 00:03:00.000 +uh for scheduling reasons but overall + +00:03:00.000 --> 00:03:01.680 +the second day is mostly about + +00:03:01.680 --> 00:03:03.040 +development + +00:03:03.040 --> 00:03:05.599 +no matter what uh what uh you're + +00:03:05.599 --> 00:03:06.879 +interested in I hope you'll find + +00:03:06.879 --> 00:03:07.360 +something + +00:03:07.360 --> 00:03:11.760 +in the schedule for you + +00:03:11.760 --> 00:03:13.760 +and then how do you actually participate + +00:03:13.760 --> 00:03:15.200 +how do you actually watch and + +00:03:15.200 --> 00:03:16.720 +ask questions and all of that let's turn + +00:03:16.720 --> 00:03:18.319 +it over to leo + +00:03:18.319 --> 00:03:19.920 +sure so hi there everyone it's a + +00:03:19.920 --> 00:03:21.280 +pleasure to meet you all I'm really + +00:03:21.280 --> 00:03:23.040 +happy to be part of the team this year + +00:03:23.040 --> 00:03:25.280 +so uh this year we've decided to change + +00:03:25.280 --> 00:03:26.159 +things a little + +00:03:26.159 --> 00:03:28.799 +uh compared to what we did last year so + +00:03:28.799 --> 00:03:29.440 +um + +00:03:29.440 --> 00:03:31.519 +everything is on the link that will + +00:03:31.519 --> 00:03:32.480 +pre-paste + +00:03:32.480 --> 00:03:34.400 +in the chat right now but to participate + +00:03:34.400 --> 00:03:36.560 +I suppose if you're hearing us right now + +00:03:36.560 --> 00:03:38.480 +you found the link to follow us which is + +00:03:38.480 --> 00:03:43.120 +very good so it's live.emacsconf.org + +00:03:43.120 --> 00:03:46.080 +for the questions uh we use a pad where + +00:03:46.080 --> 00:03:47.200 +you can both + +00:03:47.200 --> 00:03:48.959 +add your questions and if you feel like + +00:03:48.959 --> 00:03:50.480 +adding notes as well you know you are + +00:03:50.480 --> 00:03:51.920 +completely free to do so + +00:03:51.920 --> 00:03:54.480 +I believe you already have 42 people + +00:03:54.480 --> 00:03:56.319 +which are on there so + +00:03:56.319 --> 00:03:58.239 +if someone one of the other organizers + +00:03:58.239 --> 00:03:59.680 +could paste the link there that would be + +00:03:59.680 --> 00:04:00.799 +splendid + +00:04:00.799 --> 00:04:02.959 +uh for chatting with us or with the + +00:04:02.959 --> 00:04:04.640 +other people attending the conference + +00:04:04.640 --> 00:04:07.920 +we are using isc and there are three + +00:04:07.920 --> 00:04:09.599 +channels that you need to pay attention + +00:04:09.599 --> 00:04:10.959 +to the first one + +00:04:10.959 --> 00:04:13.120 +is #emacsconf where the general + +00:04:13.120 --> 00:04:14.239 +discussion will be + +00:04:14.239 --> 00:04:16.560 +happening so if you have any reactions + +00:04:16.560 --> 00:04:18.000 +to what you're hearing if you are + +00:04:18.000 --> 00:04:19.199 +excited about + +00:04:19.199 --> 00:04:20.400 +the new things you've discovered you + +00:04:20.400 --> 00:04:22.400 +know that's the channel to be using + +00:04:22.400 --> 00:04:25.440 +we also have #emacsconf-accessible + +00:04:25.440 --> 00:04:27.520 +which is community-run and it's for + +00:04:27.520 --> 00:04:28.960 +people who + +00:04:28.960 --> 00:04:30.320 +you know if you want to volunteer and + +00:04:30.320 --> 00:04:32.400 +describe to uh + +00:04:32.400 --> 00:04:33.680 +people what is going on during the + +00:04:33.680 --> 00:04:34.960 +conference either because they can't + +00:04:34.960 --> 00:04:36.479 +hear because they can't see you know + +00:04:36.479 --> 00:04:38.240 +feel free to do so that would be a nice + +00:04:38.240 --> 00:04:40.720 +help to us and for the speakers more + +00:04:40.720 --> 00:04:42.960 +specifically if you have + +00:04:42.960 --> 00:04:44.800 +any problem whatsoever or if you need to + +00:04:44.800 --> 00:04:46.320 +check something with us + +00:04:46.320 --> 00:04:49.680 +we will be in iEmacsConff.org and + +00:04:49.680 --> 00:04:51.759 +feel free to message us there and we'll + +00:04:51.759 --> 00:04:54.000 +try to take care of your problem as soon + +00:04:54.000 --> 00:04:55.360 +as possible + +00:04:55.360 --> 00:04:58.160 +we also have another thing this year so + +00:04:58.160 --> 00:04:59.120 +as we will be + +00:04:59.120 --> 00:05:02.160 +having talks one after the other if you + +00:05:02.160 --> 00:05:03.520 +happen to be + +00:05:03.520 --> 00:05:05.120 +if you want to continue the discussion + +00:05:05.120 --> 00:05:07.840 +basically we invite you to use + +00:05:07.840 --> 00:05:09.360 +jitsi to be able to continue the + +00:05:09.360 --> 00:05:11.280 +discussion either with the speaker if + +00:05:11.280 --> 00:05:12.720 +the speaker is willing to do so + +00:05:12.720 --> 00:05:14.400 +or just with the community of users and + +00:05:14.400 --> 00:05:15.759 +for that will leave you + +00:05:15.759 --> 00:05:18.880 +organize yourself on isc okay I believe + +00:05:18.880 --> 00:05:19.520 +that's me + +00:05:19.520 --> 00:05:23.360 +uh should I hand you back the + +00:05:23.360 --> 00:05:25.759 +uh speech I can't find a way to say this + +00:05:25.759 --> 00:05:26.960 +in english so + +00:05:26.960 --> 00:05:30.000 +just say yeah I mean go go take it away + +00:05:30.000 --> 00:05:33.120 +sure thank you okay sure + +00:05:33.120 --> 00:05:36.240 +thank you um so first off let me address + +00:05:36.240 --> 00:05:37.039 +this um + +00:05:37.039 --> 00:05:39.600 +the webcam placement on this laptop is + +00:05:39.600 --> 00:05:40.400 +very weird + +00:05:40.400 --> 00:05:43.039 +it's right at the bottom and if you see + +00:05:43.039 --> 00:05:44.800 +me looking up like this I'm actually + +00:05:44.800 --> 00:05:45.600 +looking at the + +00:05:45.600 --> 00:05:47.759 +um my second monitor which has the + +00:05:47.759 --> 00:05:48.720 +stream + +00:05:48.720 --> 00:05:52.800 +um so yeah sorry about that um + +00:05:52.800 --> 00:05:55.600 +but yeah so we have a mailing list um + +00:05:55.600 --> 00:05:56.720 +which of course + +00:05:56.720 --> 00:05:58.400 +isn't going to be super active at this + +00:05:58.400 --> 00:06:00.639 +very moment because everyone's watching + +00:06:00.639 --> 00:06:03.280 +but before and after the conference um + +00:06:03.280 --> 00:06:03.680 +you know + +00:06:03.680 --> 00:06:05.600 +please feel free to subscribe to uh + +00:06:05.600 --> 00:06:07.520 +emacsconf-discuss + +00:06:07.520 --> 00:06:10.240 +um for various updates and posts about + +00:06:10.240 --> 00:06:11.199 +the conference + +00:06:11.199 --> 00:06:14.240 +um follow-ups um like announcements for + +00:06:14.240 --> 00:06:15.280 +example when we + +00:06:15.280 --> 00:06:16.800 +put out the videos after the conference + +00:06:16.800 --> 00:06:18.160 +we will make an announcement on that + +00:06:18.160 --> 00:06:20.240 +list + +00:06:20.240 --> 00:06:24.560 +and next up we have conduct guidelines + +00:06:24.560 --> 00:06:28.240 +which are a series of + +00:06:28.240 --> 00:06:30.240 +basically guidelines that we would very + +00:06:30.240 --> 00:06:32.479 +much appreciate everyone + +00:06:32.479 --> 00:06:34.720 +participating in the conference abide by + +00:06:34.720 --> 00:06:36.240 +and um + +00:06:36.240 --> 00:06:38.240 +to to help make you know the event a + +00:06:38.240 --> 00:06:40.000 +great experience for everyone + +00:06:40.000 --> 00:06:43.120 +um yeah I think that's about it + +00:06:43.120 --> 00:06:48.000 +do you guys have anything else to add + +00:06:48.000 --> 00:06:51.440 +gonna get so good alrighty um + +00:06:51.440 --> 00:06:54.479 +so if you're just joining us once again + +00:06:54.479 --> 00:06:57.840 +hello and welcome to EmacsConf 2020. + +00:06:57.840 --> 00:07:00.960 +um I guess we'll go ahead and uh start + +00:07:00.960 --> 00:07:01.599 +with + +00:07:01.599 --> 00:07:05.840 +queueing up the talks diff --git a/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.srt b/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.srt new file mode 100644 index 00000000..9dd804ea --- /dev/null +++ b/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.srt @@ -0,0 +1,503 @@ +1 +0:00:00,000 --> 0:00:04,000 +I'm Sacha Chua, and welcome to EmacsConf 2020. + + +2 +0:00:04,000 --> 0:00:07,000 +To kick things off, here are ten cool things + + +3 +0:00:07,000 --> 0:00:08,000 +that people have been working on + + +4 +0:00:08,000 --> 0:00:10,000 +since the conference last year. + + +5 +0:00:10,000 --> 0:00:11,000 +If you want to follow the links + + +6 +0:00:11,000 --> 0:00:14,000 +or if you'd like to add something I've missed, + + +7 +0:00:14,000 --> 0:00:16,000 +add them to the collaborative pad + + +8 +0:00:16,000 --> 0:00:17,000 +if you're watching this live + + +9 +0:00:17,000 --> 0:00:20,000 +or check out the EmacsConf wiki page for this talk. + + +10 +0:00:20,000 --> 0:00:24,000 +The big news this year was the release of Emacs 27.1, + + +11 +0:00:24,000 --> 0:00:27,000 +a little over two years after Emacs 26. + + +12 +0:00:27,000 --> 0:00:31,000 +Mickey Petersen's notes on the release are a great way + + +13 +0:00:31,000 --> 0:00:32,000 +to find out what's new, + + +14 +0:00:32,000 --> 0:00:34,000 +and John Wiegley's development update tomorrow + + +15 +0:00:34,000 --> 0:00:36,000 +will probably give more details. + + +16 +0:00:36,000 --> 0:00:39,000 +What's coming up for Emacs 28 and beyond? + + +17 +0:00:39,000 --> 0:00:40,000 +One of the branches that people are + + +18 +0:00:40,000 --> 0:00:44,000 +excited about is gccemacs, which compiles + + +19 +0:00:44,000 --> 0:00:48,000 +Emacs Lisp to native code so that it runs faster. + + +20 +0:00:48,000 --> 0:00:50,000 +To learn more, check out the Bringing GNU Emacs to Native Code + + +21 +0:00:50,000 --> 0:00:55,000 +presentation from the European Lisp Symposium. + + +22 +0:00:55,000 --> 0:00:56,000 +There was a huge conversation about + + +23 +0:00:56,000 --> 0:00:59,000 +modernizing Emacs on emacs-devel and other places. + + +24 +0:00:59,000 --> 0:01:02,000 +Linux Weekly News has a good summary. + + +25 +0:01:02,000 --> 0:01:04,000 +One of the interesting sub-threads on emacs-devel + + +26 +0:01:04,000 --> 0:01:06,000 +was about using more variable-width fonts, + + +27 +0:01:06,000 --> 0:01:08,000 +which would probably go a long way to + + +28 +0:01:08,000 --> 0:01:11,000 +making Emacs look pretty fancy once people + + +29 +0:01:11,000 --> 0:01:13,000 +sort out the alignment issues. + + +30 +0:01:13,000 --> 0:01:15,000 +It looks like core Emacs will probably + + +31 +0:01:15,000 --> 0:01:18,000 +change slowly in terms of functionality and documentation, + + +32 +0:01:18,000 --> 0:01:21,000 +but starter kits and configuration give people + + +33 +0:01:21,000 --> 0:01:22,000 +a great way to experiment. + + +34 +0:01:22,000 --> 0:01:24,000 +Speaking of starter kits, + + +35 +0:01:24,000 --> 0:01:27,000 +Doom Emacs seems to be growing in popularity. + + +36 +0:01:27,000 --> 0:01:28,000 +It got a big boost thanks to DoomCasts and + + +37 +0:01:28,000 --> 0:01:32,000 +DistroTube videos. So if you're curious, + + +38 +0:01:32,000 --> 0:01:35,000 +go ahead and check those out. + + +39 +0:01:35,000 --> 0:01:37,000 +And for general Emacs topics, + + +40 +0:01:37,000 --> 0:01:38,000 +there have been a ton of other great videos + + +41 +0:01:38,000 --> 0:01:42,000 +from Protesilaos Stavrou, Mike Zamansky, System Crafters, + + +42 +0:01:42,000 --> 0:01:45,000 +and other folks. Good stuff. + + +43 +0:01:45,000 --> 0:01:46,000 +Org continues to be a big reason + + +44 +0:01:46,000 --> 0:01:48,000 +for people to get into Emacs. + + +45 +0:01:48,000 --> 0:01:50,000 +This year, Zettelkasten-based workflows + + +46 +0:01:50,000 --> 0:01:52,000 +became popular as people played around + + +47 +0:01:52,000 --> 0:01:55,000 +with organizing ideas into small chunks + + +48 +0:01:55,000 --> 0:01:57,000 +that are linked to each other. + + +49 +0:01:57,000 --> 0:01:59,000 +org-roam is one of the packages for doing that + + +50 +0:01:59,000 --> 0:02:02,000 +and there are three presentations about it this year. + + +51 +0:02:02,000 --> 0:02:04,000 +There are also non-Org ways to do it, + + +52 +0:02:04,000 --> 0:02:07,000 +such as zetteldeft, neuron-mode, and more. + + +53 +0:02:07,000 --> 0:02:08,000 +People have been experimenting + + +54 +0:02:08,000 --> 0:02:09,000 +with Org's appearance. + + +55 +0:02:09,000 --> 0:02:12,000 +Check these screenshots out for some ideas. + + +56 +0:02:12,000 --> 0:02:14,000 +Coding: Faster JSON processing + + +57 +0:02:14,000 --> 0:02:15,000 +is going to make working with + + +58 +0:02:15,000 --> 0:02:17,000 +code analysis tools better. + + +59 +0:02:17,000 --> 0:02:21,000 +LSP-mode released version 7 and gained more contributors, too, + + +60 +0:02:21,000 --> 0:02:23,000 +so there are probably exciting times ahead + + +61 +0:02:23,000 --> 0:02:24,000 +for making Emacs even more of an + + +62 +0:02:24,000 --> 0:02:26,000 +integrated development environment. + + +63 +0:02:26,000 --> 0:02:30,000 +EAF: The Emacs Application Framework + + +64 +0:02:30,000 --> 0:02:32,000 +has some pretty interesting demos of + + +65 +0:02:32,000 --> 0:02:34,000 +embedded Qt programs in Emacs on Linux. + + +66 +0:02:34,000 --> 0:02:37,000 +Matthew Zeng will give a presentation + + +67 +0:02:37,000 --> 0:02:39,000 +on its architecture and walk through some demos, + + +68 +0:02:39,000 --> 0:02:41,000 +so check that one out too if you want. + + +69 +0:02:41,000 --> 0:02:43,000 +The big real-world change this year + + +70 +0:02:43,000 --> 0:02:47,000 +was COVID-19, of course. It sucks. A lot. + + +71 +0:02:47,000 --> 0:02:49,000 +One good thing that's come out of it + + +72 +0:02:49,000 --> 0:02:52,000 +is that many Emacs meetups have moved online, + + +73 +0:02:52,000 --> 0:02:54,000 +so it's easier to connect with people + + +74 +0:02:54,000 --> 0:02:56,000 +no matter where you are in the world. + + +75 +0:02:56,000 --> 0:03:01,000 +There's one hosted by EmacsATX on December 2 + + +76 +0:03:01,000 --> 0:03:03,000 +and it's about re-builder, leaf, and feather. + + +77 +0:03:03,000 --> 0:03:06,000 +EmacsNYC's next meetup is on December 7 + + +78 +0:03:06,000 --> 0:03:08,000 +and it's about literate programming with Org Mode. + + +79 +0:03:08,000 --> 0:03:10,000 +The Berlin remote meetup was + + +80 +0:03:10,000 --> 0:03:12,000 +just a few days ago on November 25, + + +81 +0:03:12,000 --> 0:03:15,000 +and EmacsSF and Asia-Pacific + + +82 +0:03:15,000 --> 0:03:17,000 +probably have some coming up, too. + + +83 +0:03:17,000 --> 0:03:18,000 +People generally announce the meetups + + +84 +0:03:18,000 --> 0:03:21,000 +on reddit.com/r/emacs, so you can + + +85 +0:03:21,000 --> 0:03:23,000 +look there for updates. + + +86 +0:03:23,000 --> 0:03:24,000 +If you organize one of these, + + +87 +0:03:24,000 --> 0:03:25,000 +please let me know so that + + +88 +0:03:25,000 --> 0:03:28,000 +I can include it in Emacs News. + + +89 +0:03:28,000 --> 0:03:31,000 +Lastly, there's an unofficial survey of the Emacs community. + + +90 +0:03:31,000 --> 0:03:33,000 +It closes on November 30, + + +91 +0:03:33,000 --> 0:03:34,000 +so if you'd like to participate, + + +92 +0:03:34,000 --> 0:03:37,000 +you can fill out the form at emacssurvey.org + + +93 +0:03:37,000 --> 0:03:39,000 +or send it in via e-mail. + + +94 +0:03:39,000 --> 0:03:42,000 +So those were 10 quick highlights from this year. + + +95 +0:03:42,000 --> 0:03:46,000 +If you're curious, check out the EmacsConf 2020 wiki page + + +96 +0:03:46,000 --> 0:03:47,000 +for this talk so that you can follow the links. + + +97 +0:03:47,000 --> 0:03:49,000 +If you'd like to get updates every week, + + +98 +0:03:49,000 --> 0:03:52,000 +you can check out the Emacs News I put together. + + +99 +0:03:52,000 --> 0:03:55,000 +Feel free to send me cool stuff to include. + + +100 +0:03:55,000 --> 0:03:57,000 +Now on to the rest of EmacsConf! + +101 +0:03:57,000 --> 0:03:58,000 +Have fun, and thanks for joining us! + diff --git a/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt b/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt new file mode 100644 index 00000000..99ebf96c --- /dev/null +++ b/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt @@ -0,0 +1,304 @@ +WEBVTT + +00:00:00.000 --> 00:00:04.000 +I'm Sacha Chua, and welcome to EmacsConf 2020. + +00:00:04.000 --> 00:00:07.000 +To kick things off, here are ten cool things + +00:00:07.000 --> 00:00:08.000 +that people have been working on + +00:00:08.000 --> 00:00:10.000 +since the conference last year. + +00:00:10.000 --> 00:00:11.000 +If you want to follow the links + +00:00:11.000 --> 00:00:14.000 +or if you'd like to add something I've missed, + +00:00:14.000 --> 00:00:16.000 +add them to the collaborative pad + +00:00:16.000 --> 00:00:17.000 +if you're watching this live + +00:00:17.000 --> 00:00:20.000 +or check out the EmacsConf wiki page for this talk. + +00:00:20.000 --> 00:00:24.000 +The big news this year was the release of Emacs 27.1, + +00:00:24.000 --> 00:00:27.000 +a little over two years after Emacs 26. + +00:00:27.000 --> 00:00:31.000 +Mickey Petersen's notes on the release are a great way + +00:00:31.000 --> 00:00:32.000 +to find out what's new, + +00:00:32.000 --> 00:00:34.000 +and John Wiegley's development update tomorrow + +00:00:34.000 --> 00:00:36.000 +will probably give more details. + +00:00:36.000 --> 00:00:39.000 +What's coming up for Emacs 28 and beyond? + +00:00:39.000 --> 00:00:40.000 +One of the branches that people are + +00:00:40.000 --> 00:00:44.000 +excited about is gccemacs, which compiles + +00:00:44.000 --> 00:00:48.000 +Emacs Lisp to native code so that it runs faster. + +00:00:48.000 --> 00:00:50.000 +To learn more, check out the Bringing GNU Emacs to Native Code + +00:00:50.000 --> 00:00:55.000 +presentation from the European Lisp Symposium. + +00:00:55.000 --> 00:00:56.000 +There was a huge conversation about + +00:00:56.000 --> 00:00:59.000 +modernizing Emacs on emacs-devel and other places. + +00:00:59.000 --> 00:01:02.000 +Linux Weekly News has a good summary. + +00:01:02.000 --> 00:01:04.000 +One of the interesting sub-threads on emacs-devel + +00:01:04.000 --> 00:01:06.000 +was about using more variable-width fonts, + +00:01:06.000 --> 00:01:08.000 +which would probably go a long way to + +00:01:08.000 --> 00:01:11.000 +making Emacs look pretty fancy once people + +00:01:11.000 --> 00:01:13.000 +sort out the alignment issues. + +00:01:13.000 --> 00:01:15.000 +It looks like core Emacs will probably + +00:01:15.000 --> 00:01:18.000 +change slowly in terms of functionality and documentation, + +00:01:18.000 --> 00:01:21.000 +but starter kits and configuration give people + +00:01:21.000 --> 00:01:22.000 +a great way to experiment. + +00:01:22.000 --> 00:01:24.000 +Speaking of starter kits, + +00:01:24.000 --> 00:01:27.000 +Doom Emacs seems to be growing in popularity. + +00:01:27.000 --> 00:01:28.000 +It got a big boost thanks to DoomCasts and + +00:01:28.000 --> 00:01:32.000 +DistroTube videos. So if you're curious, + +00:01:32.000 --> 00:01:35.000 +go ahead and check those out. + +00:01:35.000 --> 00:01:37.000 +And for general Emacs topics, + +00:01:37.000 --> 00:01:38.000 +there have been a ton of other great videos + +00:01:38.000 --> 00:01:42.000 +from Protesilaos Stavrou, Mike Zamansky, System Crafters, + +00:01:42.000 --> 00:01:45.000 +and other folks. Good stuff. + +00:01:45.000 --> 00:01:46.000 +Org continues to be a big reason + +00:01:46.000 --> 00:01:48.000 +for people to get into Emacs. + +00:01:48.000 --> 00:01:50.000 +This year, Zettelkasten-based workflows + +00:01:50.000 --> 00:01:52.000 +became popular as people played around + +00:01:52.000 --> 00:01:55.000 +with organizing ideas into small chunks + +00:01:55.000 --> 00:01:57.000 +that are linked to each other. + +00:01:57.000 --> 00:01:59.000 +org-roam is one of the packages for doing that + +00:01:59.000 --> 00:02:02.000 +and there are three presentations about it this year. + +00:02:02.000 --> 00:02:04.000 +There are also non-Org ways to do it, + +00:02:04.000 --> 00:02:07.000 +such as zetteldeft, neuron-mode, and more. + +00:02:07.000 --> 00:02:08.000 +People have been experimenting + +00:02:08.000 --> 00:02:09.000 +with Org's appearance. + +00:02:09.000 --> 00:02:12.000 +Check these screenshots out for some ideas. + +00:02:12.000 --> 00:02:14.000 +Coding: Faster JSON processing + +00:02:14.000 --> 00:02:15.000 +is going to make working with + +00:02:15.000 --> 00:02:17.000 +code analysis tools better. + +00:02:17.000 --> 00:02:21.000 +LSP-mode released version 7 and gained more contributors, too, + +00:02:21.000 --> 00:02:23.000 +so there are probably exciting times ahead + +00:02:23.000 --> 00:02:24.000 +for making Emacs even more of an + +00:02:24.000 --> 00:02:26.000 +integrated development environment. + +00:02:26.000 --> 00:02:30.000 +EAF: The Emacs Application Framework + +00:02:30.000 --> 00:02:32.000 +has some pretty interesting demos of + +00:02:32.000 --> 00:02:34.000 +embedded Qt programs in Emacs on Linux. + +00:02:34.000 --> 00:02:37.000 +Matthew Zeng will give a presentation + +00:02:37.000 --> 00:02:39.000 +on its architecture and walk through some demos, + +00:02:39.000 --> 00:02:41.000 +so check that one out too if you want. + +00:02:41.000 --> 00:02:43.000 +The big real-world change this year + +00:02:43.000 --> 00:02:47.000 +was COVID-19, of course. It sucks. A lot. + +00:02:47.000 --> 00:02:49.000 +One good thing that's come out of it + +00:02:49.000 --> 00:02:52.000 +is that many Emacs meetups have moved online, + +00:02:52.000 --> 00:02:54.000 +so it's easier to connect with people + +00:02:54.000 --> 00:02:56.000 +no matter where you are in the world. + +00:02:56.000 --> 00:03:01.000 +There's one hosted by EmacsATX on December 2 + +00:03:01.000 --> 00:03:03.000 +and it's about re-builder, leaf, and feather. + +00:03:03.000 --> 00:03:06.000 +EmacsNYC's next meetup is on December 7 + +00:03:06.000 --> 00:03:08.000 +and it's about literate programming with Org Mode. + +00:03:08.000 --> 00:03:10.000 +The Berlin remote meetup was + +00:03:10.000 --> 00:03:12.000 +just a few days ago on November 25, + +00:03:12.000 --> 00:03:15.000 +and EmacsSF and Asia-Pacific + +00:03:15.000 --> 00:03:17.000 +probably have some coming up, too. + +00:03:17.000 --> 00:03:18.000 +People generally announce the meetups + +00:03:18.000 --> 00:03:21.000 +on reddit.com/r/emacs, so you can + +00:03:21.000 --> 00:03:23.000 +look there for updates. + +00:03:23.000 --> 00:03:24.000 +If you organize one of these, + +00:03:24.000 --> 00:03:25.000 +please let me know so that + +00:03:25.000 --> 00:03:28.000 +I can include it in Emacs News. + +00:03:28.000 --> 00:03:31.000 +Lastly, there's an unofficial survey of the Emacs community. + +00:03:31.000 --> 00:03:33.000 +It closes on November 30, + +00:03:33.000 --> 00:03:34.000 +so if you'd like to participate, + +00:03:34.000 --> 00:03:37.000 +you can fill out the form at emacssurvey.org + +00:03:37.000 --> 00:03:39.000 +or send it in via e-mail. + +00:03:39.000 --> 00:03:42.000 +So those were 10 quick highlights from this year. + +00:03:42.000 --> 00:03:46.000 +If you're curious, check out the EmacsConf 2020 wiki page + +00:03:46.000 --> 00:03:47.000 +for this talk so that you can follow the links. + +00:03:47.000 --> 00:03:49.000 +If you'd like to get updates every week, + +00:03:49.000 --> 00:03:52.000 +you can check out the Emacs News I put together. + +00:03:52.000 --> 00:03:55.000 +Feel free to send me cool stuff to include. + +00:03:55.000 --> 00:03:57.000 +Now on to the rest of EmacsConf! + +00:03:57.000 --> 00:03:58.000 +Have fun, and thanks for joining us! diff --git a/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt b/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt new file mode 100644 index 00000000..37114bf0 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt @@ -0,0 +1,1758 @@ +WEBVTT + +00:00:00.000 --> 00:00:03.760 +(Amin: Alrighty, Leo Vivier, take it away.) + +00:00:03.760 --> 00:00:05.319 +Okay, well, thank you. I'm in. + +00:00:05.319 --> 00:00:08.393 +So you've just had a little roundup of +the news, + +00:00:08.393 --> 00:00:11.120 +and we're going to get started now with +some presentations. + +00:00:11.120 --> 00:00:15.920 +We're starting with user +developer stories. + +00:00:15.920 --> 00:00:18.568 +I was extremely interested in +this section + +00:00:18.568 --> 00:00:21.133 +because I wanted to get +a chance, basically, + +00:00:21.133 --> 00:00:24.160 +to tell you a little more about +who I am and + +00:00:24.160 --> 00:00:28.160 +how I got from basically being +a user of Emacs + +00:00:28.160 --> 00:00:31.279 +to being nowadays a package maintainer, + +00:00:31.279 --> 00:00:34.156 +and maybe more in the future. I don't +know. + +00:00:34.156 --> 00:00:36.954 +So, just for the organizers, I'm +planning to speak for 15 minutes, + +00:00:36.954 --> 00:00:39.680 +and I'll have five more minutes of +questions at the end. + +00:00:39.680 --> 00:00:41.880 +As I told you before, if you want to have +questions, + +00:00:41.880 --> 00:00:43.440 +you know you can use the pad, + +00:00:43.440 --> 00:00:45.871 +and I'll be reading the questions from +there. + +00:00:45.871 --> 00:00:49.600 +Okay. So hi there, as Amin introduced me +before, + +00:00:49.600 --> 00:00:51.280 +my name is Leo Vivier. + +00:00:51.280 --> 00:00:55.662 +I'm a freelance software engineer +in France, + +00:00:55.662 --> 00:00:59.359 +and I have been using Emacs now for + +00:00:59.359 --> 00:01:00.885 +I believe close to eight years. + +00:01:00.885 --> 00:01:03.039 +I can't believe it's been so long. + +00:01:03.039 --> 00:01:09.967 +But yes, it's been a journey because, +in a way, + +00:01:09.967 --> 00:01:13.255 +nothing made me go for Emacs. + +00:01:13.255 --> 00:01:17.011 +You know I'm an-- sorry, I was about to +say Emacs major, + +00:01:17.011 --> 00:01:18.638 +but no, I'm an English major. + +00:01:18.638 --> 00:01:23.990 +I went to university to study English +literature and linguistics, + +00:01:23.990 --> 00:01:26.159 +and I just got started in Emacs + +00:01:26.159 --> 00:01:28.240 +because I was looking for ways to take + +00:01:28.240 --> 00:01:31.340 +better notes. I was looking for ways to + +00:01:32.640 --> 00:01:34.640 +structure the way I was learning, + +00:01:34.640 --> 00:01:38.084 +structure the way I was taking notes. + +00:01:38.084 --> 00:01:40.079 +I stumbled one day + +00:01:40.079 --> 00:01:42.032 +upon this weird piece of software + +00:01:42.032 --> 00:01:43.759 +which was called Emacs, + +00:01:43.759 --> 00:01:46.479 +and I've been trapped forever since, + +00:01:46.479 --> 00:01:48.328 +basically, because eight years ago, + +00:01:48.328 --> 00:01:49.515 +when I discovered Emacs, + +00:01:49.515 --> 00:01:50.632 +I just couldn't let go. + +00:01:50.632 --> 00:01:52.720 +There was just something very + +00:01:52.720 --> 00:01:54.487 +interesting about the way + +00:01:54.487 --> 00:01:56.320 +you configured your setup, + +00:01:56.320 --> 00:01:59.759 +and I just wanted to +dive deeper and deeper. + +00:01:59.759 --> 00:02:04.320 +So the title is of this talk exactly is + +00:02:04.320 --> 00:02:07.637 +how I went from user to package +maintainer, + +00:02:07.637 --> 00:02:09.686 +and the package now that I'm maintaining + +00:02:09.686 --> 00:02:12.080 +is called org-roam. I'm not the only one +doing this. + +00:02:12.080 --> 00:02:18.720 +I'm helped with many lovely people +working on org-roam. + +00:02:18.720 --> 00:02:22.149 +I got started as a maintainer +only this year, + +00:02:22.149 --> 00:02:23.360 +so that means that for + +00:02:23.360 --> 00:02:24.720 +the eight years I've been + +00:02:24.720 --> 00:02:27.360 +an Emacs user, seven of those years were + +00:02:27.360 --> 00:02:29.200 +spent merely being a user + +00:02:29.200 --> 00:02:31.040 +trying to be a sponge for knowledge, + +00:02:31.040 --> 00:02:33.920 +trying to learn as much as I could. + +00:02:33.920 --> 00:02:36.800 +I believe it would be + +00:02:36.800 --> 00:02:39.040 +interesting for me to share my story + +00:02:39.040 --> 00:02:40.959 +because I believe that I'm far from + +00:02:40.959 --> 00:02:42.160 +being the only user + +00:02:42.160 --> 00:02:44.327 +who can make the jump to being a +maintainer. + +00:02:44.327 --> 00:02:47.572 +A lot of you have a lot of knowledge +when it comes to Emacs. + +00:02:47.572 --> 00:02:51.040 +Some of you are at different steps in +your journey. + +00:02:51.040 --> 00:02:52.720 +Some of you, for instance, are just + +00:02:52.720 --> 00:02:55.680 +starting to copy stuff out of + +00:02:55.680 --> 00:02:59.058 +StackExchange into your Emacs +configuration. + +00:02:59.058 --> 00:03:01.599 +Let's say you want to do something very +particular + +00:03:01.599 --> 00:03:04.480 +and you haven't found a way to do so. + +00:03:04.480 --> 00:03:05.527 +You go on StackExchange. + +00:03:05.527 --> 00:03:07.930 +You find something that's interesting. + +00:03:07.930 --> 00:03:10.077 +You add it to your Emacs configuration. + +00:03:10.077 --> 00:03:11.680 +You barely understand anything that's +going on. + +00:03:11.680 --> 00:03:14.800 +You know that it's supposed to be Emacs +Lisp. + +00:03:14.800 --> 00:03:17.200 +"I hardly know Emacs and + +00:03:17.200 --> 00:03:19.440 +I know even less what is Lisp supposed +to be." + +00:03:19.440 --> 00:03:22.172 +But you paste it in, and it does what +you want it to do, + +00:03:22.172 --> 00:03:26.682 +and you say "Great, I'll move on to my +work now." + +00:03:26.682 --> 00:03:28.821 +So that's how I got started. + +00:03:28.821 --> 00:03:33.888 +I had a very spartan setup for Emacs, +which a lot of you must know... + +00:03:33.888 --> 00:03:36.000 +The first time you launch Emacs, + +00:03:36.000 --> 00:03:36.920 +you have this feeling + +00:03:36.920 --> 00:03:38.852 +that you're jumping 20 years +back in time, + +00:03:38.852 --> 00:03:43.260 +as far as the user interface is +concerned. + +00:03:43.260 --> 00:03:46.959 +But as you get to spend more time with +Emacs... + +00:03:46.959 --> 00:03:49.120 +Some would call it Stockholm syndrome + +00:03:49.120 --> 00:03:50.959 +insofar as you can't see + +00:03:50.959 --> 00:03:52.929 +how spartan the entire thing is, + +00:03:52.929 --> 00:03:58.400 +but it actually is a lovely prison, +so to speak. + +00:03:58.400 --> 00:04:00.400 +That's how I got started eight years ago. + +00:04:00.400 --> 00:04:04.319 +I just wanted to find a way to do my +research properly. + +00:04:04.319 --> 00:04:05.699 +I wanted to have a tool + +00:04:05.699 --> 00:04:07.280 +that I could use to write my notes + +00:04:07.280 --> 00:04:08.959 +in plain text, because I was already + +00:04:08.959 --> 00:04:16.320 +fairly averse to Microsoft solutions +when it came to taking notes. + +00:04:16.320 --> 00:04:19.180 +So yeah, I got started in Emacs. + +00:04:19.180 --> 00:04:21.651 +I read a little bit about what plain +text was about. + +00:04:21.651 --> 00:04:24.364 +Just to be clear, at the time, yes, + +00:04:24.364 --> 00:04:27.120 +I was very good with computers, + +00:04:27.120 --> 00:04:30.160 +but I was not a computer science student. + +00:04:30.160 --> 00:04:34.302 +I had barely any experience with +programming and coding, + +00:04:34.302 --> 00:04:39.919 +and I was even less of a hacker +back then. + +00:04:39.919 --> 00:04:43.052 +It just goes to show you that +at the beginning, + +00:04:43.052 --> 00:04:44.479 +I had close to no knowledge, + +00:04:44.479 --> 00:04:45.840 +whether it be about + +00:04:45.840 --> 00:04:47.457 +the free software world, + +00:04:47.457 --> 00:04:48.880 +whether it be about... + +00:04:48.880 --> 00:04:50.290 +Sacha, do you want to say something? + +00:04:50.290 --> 00:04:52.479 +(Sacha: just confirming, you're not +sharing anything + +00:04:52.479 --> 00:04:54.080 +on the screen at the moment, right?) + +00:04:54.080 --> 00:04:55.204 +No, I'm not sharing anything, + +00:04:55.204 --> 00:04:59.040 +I'm just presenting. + +00:04:59.040 --> 00:05:01.173 +So when I started, + +00:05:01.173 --> 00:05:03.680 +I had no experience whatsoever. + +00:05:03.680 --> 00:05:07.199 +I was just a literature major + +00:05:07.199 --> 00:05:11.039 +trying to get better at taking notes. + +00:05:11.039 --> 00:05:12.466 +I stumbled upon LaTeX. + +00:05:12.466 --> 00:05:15.280 +As many people who stumble upon +LaTeX know, + +00:05:15.280 --> 00:05:17.519 +you don't just stumble upon LaTeX, + +00:05:17.519 --> 00:05:21.950 +you embroil yourself in the turmoil of +suffering, + +00:05:21.950 --> 00:05:24.560 +of late nights tweaking, + +00:05:24.560 --> 00:05:26.923 +so that your document is exactly + +00:05:26.923 --> 00:05:33.440 +in the perfect shape you want it to be. + +00:05:33.440 --> 00:05:36.639 +Soon after, when I got started with +Emacs and LaTeX, + +00:05:36.639 --> 00:05:39.334 +I discovered something that truly +changed my life, + +00:05:39.334 --> 00:05:40.560 +and it was Org Mode. + +00:05:40.560 --> 00:05:44.479 +As you'll get a lot of presentations + +00:05:44.479 --> 00:05:46.960 +this afternoon about Org Mode, + +00:05:46.960 --> 00:05:49.360 +I won't be spending too much time on it. + +00:05:49.360 --> 00:05:53.680 +But Org Mode, for me, was a +revelation. It's... + +00:05:53.680 --> 00:05:55.869 +There was something that, + +00:05:55.869 --> 00:05:59.039 +upon reading articles on +how to use Org Mode, + +00:05:59.039 --> 00:06:02.453 +especially one of the key +articles + +00:06:02.453 --> 00:06:04.160 +that I'd read which really made + +00:06:04.160 --> 00:06:06.000 +a huge impact on me + +00:06:06.000 --> 00:06:09.199 +was the "Organize Your Life in Plain +Text" one, + +00:06:09.199 --> 00:06:12.240 +which I'm sure many of you must have +stumbled upon + +00:06:12.240 --> 00:06:15.919 +in your Emacs journey... + +00:06:15.919 --> 00:06:20.307 +For me, when I stumbled upon this +document, + +00:06:20.307 --> 00:06:22.488 +I was starting to get interested + +00:06:22.488 --> 00:06:24.240 +in Getting Things Done and + +00:06:24.240 --> 00:06:26.560 +all the nitty-gritty stuff about + +00:06:26.560 --> 00:06:29.199 +organization and self-organization. + +00:06:29.199 --> 00:06:32.960 +It just felt like everything was under +my fingertips + +00:06:32.960 --> 00:06:36.960 +to make the perfect workflow. + +00:06:36.960 --> 00:06:44.080 +There was something incredibly +satisfying about + +00:06:44.080 --> 00:06:45.834 +having a system that gave you + +00:06:45.834 --> 00:06:48.319 +so many options to configure your +experience + +00:06:48.319 --> 00:06:50.160 +exactly how you wanted. + +00:06:50.160 --> 00:06:54.479 +You had this feeling that + +00:06:54.479 --> 00:06:57.599 +the people behind Org Mode had thought +of everything, + +00:06:57.599 --> 00:07:00.479 +whichever small adjustment + +00:07:00.479 --> 00:07:02.000 +that you needed in workflow + +00:07:02.000 --> 00:07:05.440 +whether it be more states for your +TODOs, + +00:07:05.440 --> 00:07:07.520 +whether it be, oh, I want my weeks to + +00:07:07.520 --> 00:07:09.360 +start on Monday and not on Saturday, + +00:07:09.360 --> 00:07:13.520 +oh, it's half past one and I need to... + +00:07:13.520 --> 00:07:15.280 +in the morning, I mean, and I need to make + +00:07:15.280 --> 00:07:17.680 +sure that the item that I'm marking as done + +00:07:17.680 --> 00:07:18.759 +is done for the day before + +00:07:18.759 --> 00:07:20.233 +and not for the current day. + +00:07:20.233 --> 00:07:21.919 +You see what I'm talking about. + +00:07:21.919 --> 00:07:25.280 +So many details that were already + +00:07:25.280 --> 00:07:27.235 +present in Org Mode. + +00:07:27.235 --> 00:07:31.335 +At first you're really impressed, +because you think, wow, + +00:07:31.335 --> 00:07:33.470 +they thought of everything, + +00:07:33.470 --> 00:07:36.378 +but then you realize that it's just a +matter of experience, + +00:07:36.378 --> 00:07:39.712 +just a matter of people +contributing code, + +00:07:39.712 --> 00:07:42.171 +because the development of Org Mode, +Emacs, + +00:07:42.171 --> 00:07:44.455 +and everything is just +open to the public. + +00:07:44.455 --> 00:07:45.440 +You know, it's like + +00:07:45.440 --> 00:07:47.685 +everything is being done +with the garage door opened. + +00:07:47.685 --> 00:07:50.402 +You can just go on Org Mode on Savannah + +00:07:50.402 --> 00:07:54.800 +and see everything that is being +developed. + +00:07:54.800 --> 00:08:01.586 +For me, the shift that occurred in my +mind was + +00:08:01.586 --> 00:08:04.139 +when I was reading all the options, + +00:08:04.139 --> 00:08:05.881 +I was looking at all the variables + +00:08:05.881 --> 00:08:08.160 +that I could modify for Org Mode, + +00:08:08.160 --> 00:08:12.560 +and there came a time, maybe two to +three years ago, + +00:08:12.560 --> 00:08:15.599 +where I thought, oh wow, + +00:08:15.599 --> 00:08:17.759 +maybe for the first time in a while, + +00:08:17.759 --> 00:08:19.260 +there is no option for me to do + +00:08:19.260 --> 00:08:21.440 +what I want to be doing with Org Mode. + +00:08:21.440 --> 00:08:23.668 +I believe at the time, + +00:08:23.668 --> 00:08:29.199 +the key issue that triggered +this reflex for me was + +00:08:29.199 --> 00:08:31.039 +I wanted to do something with the agenda. + +00:08:31.039 --> 00:08:34.159 +I wanted to have a super category so, +you know, in the... + +00:08:34.159 --> 00:08:36.606 +for those of you who know, +in your agenda, + +00:08:36.606 --> 00:08:38.376 +you have the ability to +have many files, + +00:08:38.376 --> 00:08:41.200 +and you have the ability to have +categories. + +00:08:41.200 --> 00:08:47.920 +I wanted somehow to group my + +00:08:47.920 --> 00:08:51.680 +TODOs in smaller groups, or bigger + +00:08:51.680 --> 00:08:52.560 +groups, I should say, + +00:08:52.560 --> 00:08:53.780 +so that, for instance, I could have + +00:08:53.780 --> 00:08:55.131 +one group for my professional life, + +00:08:55.131 --> 00:08:57.462 +I could have a group for one work, + +00:08:57.462 --> 00:08:59.600 +the second work... + +00:08:59.600 --> 00:09:02.800 +I could have something for university +and all this. + +00:09:02.800 --> 00:09:09.600 +I thought, yeah, I think I'd like this. + +00:09:09.600 --> 00:09:12.959 +After having spent so long working + +00:09:12.959 --> 00:09:15.519 +with Emacs and working with Org Mode, + +00:09:15.519 --> 00:09:16.766 +I had some ideas about + +00:09:16.766 --> 00:09:19.292 +what was within the realm of possibility +and what wasn't. + +00:09:19.292 --> 00:09:21.120 +Here I thought to myself, + +00:09:21.120 --> 00:09:24.320 +this is definitely something that I can do. + +00:09:24.320 --> 00:09:27.839 +And so thus started my journey + +00:09:27.839 --> 00:09:31.360 +into the Org Mode libraries. + +00:09:31.360 --> 00:09:33.222 +I won't go too much into details +right now, + +00:09:33.222 --> 00:09:34.959 +because right now, the main objective + +00:09:34.959 --> 00:09:37.040 +that I have is just to show you + +00:09:37.040 --> 00:09:40.240 +how simple it is to become a maintainer, + +00:09:40.240 --> 00:09:42.800 +how to become more involved with the +development. + +00:09:42.800 --> 00:09:46.320 +The libraries in Org Mode, + +00:09:46.320 --> 00:09:50.320 +they're written in Elisp, which is a very... + +00:09:50.320 --> 00:09:52.080 +It might seem like an obscure language, + +00:09:52.080 --> 00:09:54.080 +and it certainly is, + +00:09:54.080 --> 00:09:57.279 +but as soon as you get the logic of the +language--and + +00:09:57.279 --> 00:10:00.136 +what I'm telling you is coming from +someone + +00:10:00.136 --> 00:10:01.760 +who's never studied programming-- + +00:10:01.760 --> 00:10:04.399 +it made sense. + +00:10:04.399 --> 00:10:05.534 +Everything is so verbose + +00:10:05.534 --> 00:10:07.279 +when you get into the code. + +00:10:07.279 --> 00:10:11.065 +When you learn the rudiments +of Elisp, + +00:10:11.065 --> 00:10:13.360 +you start getting to the code, + +00:10:13.360 --> 00:10:15.229 +and you start thinking, wow, + +00:10:15.229 --> 00:10:17.120 +okay that makes sense, + +00:10:17.120 --> 00:10:21.360 +and you start developing a logic +for all this. + +00:10:21.360 --> 00:10:24.720 +So, equipped as I was with this + +00:10:24.720 --> 00:10:27.760 +new knowledge, I went on my project, + +00:10:27.760 --> 00:10:30.000 +I went into the Org agenda code, + +00:10:30.000 --> 00:10:30.880 +and I thought, okay, + +00:10:30.880 --> 00:10:34.640 +is there anything that I can use to do +my bidding? + +00:10:34.640 --> 00:10:39.733 +Fast forward maybe two to three weeks of +intense turmoil + +00:10:39.733 --> 00:10:46.079 +and many nights which were spent +single-mindedly working on this project, + +00:10:46.079 --> 00:10:48.781 +two weeks after, I had something +that was working, + +00:10:48.781 --> 00:10:51.680 +and I was pretty happy about it. + +00:10:51.680 --> 00:10:54.849 +That was a key landmark for me, + +00:10:54.849 --> 00:10:56.800 +because when that happened, + +00:10:56.800 --> 00:10:58.860 +it just felt like, okay, + +00:10:58.860 --> 00:11:01.335 +I can contribute something to Org Mode, + +00:11:01.335 --> 00:11:07.600 +and I can do something that would +benefit as many people as possible. + +00:11:07.600 --> 00:11:08.970 +And to me, that was the click. + +00:11:08.970 --> 00:11:10.530 +That's when it occurred. + +00:11:10.530 --> 00:11:14.640 +That's when I went on my first project +and I did something + +00:11:14.640 --> 00:11:18.079 +that felt useful to the community. + +00:11:18.079 --> 00:11:19.945 +And nowadays, as I told you, + +00:11:19.945 --> 00:11:22.640 +I maintain packages, but really, nothing +has changed. + +00:11:22.640 --> 00:11:24.399 +The only thing, maybe, that has changed + +00:11:24.399 --> 00:11:28.320 +is that I've turned my mind onto other +problems. + +00:11:28.320 --> 00:11:32.000 +Maybe I've got three more minutes, + +00:11:32.000 --> 00:11:35.279 +and I'd like to finish by + +00:11:35.279 --> 00:11:38.399 +maybe something a little different. + +00:11:38.399 --> 00:11:39.449 +I've told you my Emacs story + +00:11:39.449 --> 00:11:42.924 +and I hope I've stressed how little +effort it took me + +00:11:42.924 --> 00:11:46.560 +to move from steps to steps on the +ladder. + +00:11:46.560 --> 00:11:48.959 +The ladder implies a sense of hierarchy, +but it really isn't. + +00:11:48.959 --> 00:11:53.920 +Whatever your step on the journey of +Emacs is... + +00:11:53.920 --> 00:11:55.830 +Some of you might be at the step + +00:11:55.830 --> 00:11:57.440 +where you're really worried + +00:11:57.440 --> 00:11:59.360 +about learning Elisp because it feels + +00:11:59.360 --> 00:12:02.399 +like such a monumental task to be +undertaking + +00:12:02.399 --> 00:12:04.720 +and you have no experience whatsoever, + +00:12:04.720 --> 00:12:06.079 +but the thing is, + +00:12:06.079 --> 00:12:07.839 +maybe you could try climbing this first + +00:12:07.839 --> 00:12:09.600 +step on the ladder. Maybe you could try, + +00:12:09.600 --> 00:12:11.200 +if you have any project, + +00:12:11.200 --> 00:12:13.120 +if you've been using Org Mode, + +00:12:13.120 --> 00:12:15.600 +maybe one day you thought, "oh, yes, + +00:12:15.600 --> 00:12:18.160 +I wish I could do this but I can't," + +00:12:18.160 --> 00:12:19.920 +or maybe do try to do this, + +00:12:19.920 --> 00:12:21.442 +maybe do try to change something + +00:12:21.442 --> 00:12:23.279 +in a major mode that you're using + +00:12:23.279 --> 00:12:26.560 +and which you feel might be better. + +00:12:26.560 --> 00:12:28.722 +I think Emacs, Org Mode, + +00:12:28.722 --> 00:12:31.040 +and all free software in general + +00:12:31.040 --> 00:12:34.720 +has this tendency to give you this idea + +00:12:34.720 --> 00:12:38.720 +that I can be a hacker + +00:12:38.720 --> 00:12:41.360 +in the sense of the term + +00:12:41.360 --> 00:12:43.200 +that you're modifying things + +00:12:43.200 --> 00:12:46.320 +to do your bidding. + +00:12:46.320 --> 00:12:48.042 +For me, I believe this to be + +00:12:48.042 --> 00:12:50.320 +a very healthy attitude towards +software. + +00:12:50.320 --> 00:12:54.079 +As Amin said in the very beginning, + +00:12:54.079 --> 00:12:57.279 +we are doing this entire presentation-- + +00:12:57.279 --> 00:13:00.800 +sorry, this entire conference with +free software. + +00:13:00.800 --> 00:13:01.686 +Just see all the things + +00:13:01.686 --> 00:13:03.920 +we've been able to do in free software. + +00:13:03.920 --> 00:13:10.399 +For me, Emacs was my gateway, +so to speak, + +00:13:10.399 --> 00:13:14.399 +into how to contribute to free software, + +00:13:14.399 --> 00:13:18.639 +about the philosophy that surrounds it. + +00:13:18.639 --> 00:13:20.003 +What I would like to do... + +00:13:20.003 --> 00:13:21.375 +I'll finish on this note and then + +00:13:21.375 --> 00:13:23.360 +I'll be taking your questions. + +00:13:23.360 --> 00:13:26.480 +Just try. + +00:13:26.480 --> 00:13:28.592 +You've read on Reddit + +00:13:28.592 --> 00:13:31.807 +that you need to go through the Elisp +manual in Emacs. + +00:13:31.807 --> 00:13:35.920 +You might be scared, but just do it. +Just give it a shot. + +00:13:35.920 --> 00:13:38.560 +Just give it maybe one afternoon. + +00:13:38.560 --> 00:13:39.199 +Try to read it. + +00:13:39.199 --> 00:13:43.120 +Try to see if this appeals to your mind. + +00:13:43.120 --> 00:13:44.230 +If you've been interested enough + +00:13:44.230 --> 00:13:45.241 +in my presentation right now, + +00:13:45.241 --> 00:13:47.199 +and if you're interested enough in any +of the talks + +00:13:47.199 --> 00:13:49.519 +you're going to have during the entire +conference, + +00:13:49.519 --> 00:13:50.747 +do give it a shot. + +00:13:50.747 --> 00:13:52.959 +I'm pretty sure you will like +the journey + +00:13:52.959 --> 00:13:55.418 +on which you will be embarking upon. + +00:13:55.418 --> 00:13:57.120 +So I believe I'm finishing +one minute early, + +00:13:57.120 --> 00:14:01.040 +but I see quite a bit of questions already. + +00:14:01.040 --> 00:14:04.320 +I'm not sure. Sacha, should I + +00:14:04.320 --> 00:14:05.847 +just be reading the questions, + +00:14:05.847 --> 00:14:08.639 +or do you want to be feeding me the +questions? + +00:14:08.639 --> 00:14:10.755 +(Amin: It's really up to you. + +00:14:10.755 --> 00:14:12.320 +It's completely up to you. + +00:14:12.320 --> 00:14:13.600 +If you've got the questions + +00:14:13.600 --> 00:14:15.839 +open and can take them or read them, + +00:14:15.839 --> 00:14:18.320 +by all means, please.) + +00:14:18.320 --> 00:14:19.420 +Okay, well, I'm going to read them + +00:14:19.420 --> 00:14:20.581 +because I've got them on the side. + +00:14:20.581 --> 00:14:22.800 +I'm going to start with the one at the +bottom. + +00:14:22.800 --> 00:14:24.959 +"Do you feel that being a white male + +00:14:24.959 --> 00:14:26.959 +contributed to your experience?" + +00:14:26.959 --> 00:14:29.165 +Yeah. I mean, I do believe... + +00:14:29.165 --> 00:14:30.771 +There's an idea of privilege. + +00:14:30.771 --> 00:14:33.250 +I mean, I'm French. I live in... + +00:14:33.250 --> 00:14:36.959 +I'm lucky enough to be here at +university, okay, + +00:14:36.959 --> 00:14:40.714 +and I'm fairly aware of the +discrepancies that happen, + +00:14:40.714 --> 00:14:41.600 +even in France, + +00:14:41.600 --> 00:14:42.880 +according to this... + +00:14:42.880 --> 00:14:46.320 +So, yes, I believe my journey + +00:14:46.320 --> 00:14:51.199 +was heavily influenced by this. + +00:14:51.199 --> 00:14:53.547 +If you would like to specify the +question, please do, + +00:14:53.547 --> 00:14:56.560 +but I don't have really all that much to +ask on this. + +00:14:56.560 --> 00:14:59.839 +"What is your advice to start learning + +00:14:59.839 --> 00:15:01.279 +Elisp language? Any particularly good + +00:15:01.279 --> 00:15:03.421 +resource or any other tips?" + +00:15:03.421 --> 00:15:07.760 +I finished my presentation by telling +you about + +00:15:07.760 --> 00:15:10.937 +the Elisp introduction which is built +into Emacs. + +00:15:10.937 --> 00:15:13.936 +What I might do... I'm going to +share my screen + +00:15:13.936 --> 00:15:17.819 +just to show you how this works. + +00:15:17.819 --> 00:15:22.880 +I will be sharing this window. + +00:15:22.880 --> 00:15:24.234 +I believe it's frozen on my end, + +00:15:24.234 --> 00:15:27.199 +so I can't see anything. + +00:15:27.199 --> 00:15:28.597 +I'm not sure if you can see me + +00:15:28.597 --> 00:15:32.560 +or if my camera is moving. + +00:15:32.560 --> 00:15:34.387 +Okay, so my Firefox is frozen. + +00:15:34.387 --> 00:15:35.361 +So I'll answer the question, + +00:15:35.361 --> 00:15:40.000 +but I won't be able to show you what I +wanted to show you. + +00:15:40.000 --> 00:15:44.320 +There's a built-in guide inside Emacs to +learn Elisp. + +00:15:44.320 --> 00:15:46.880 +Maybe the best chance that you have + +00:15:46.880 --> 00:15:49.040 +is just to go open these info pages. + +00:15:49.040 --> 00:15:50.959 +I'm sure someone will be kind enough to + +00:15:50.959 --> 00:15:54.880 +mention this to you in the #emacsconf +channel on IRC + +00:15:54.880 --> 00:15:56.880 +but it's probably the best way + +00:15:56.880 --> 00:15:59.040 +to get started with Elisp. + +00:15:59.040 --> 00:16:00.991 +You know, we tend to get obsessed, + +00:16:00.991 --> 00:16:03.013 +with software and with programming, + +00:16:03.013 --> 00:16:04.880 +about what's the best way to get +started. + +00:16:04.880 --> 00:16:08.399 +You see so many people who are heavily +interested + +00:16:08.399 --> 00:16:10.409 +in getting started with programming + +00:16:10.409 --> 00:16:12.320 +but they never managed to get started + +00:16:12.320 --> 00:16:14.320 +because there's so much choice. + +00:16:14.320 --> 00:16:16.320 +My advice would be to just get started. + +00:16:16.320 --> 00:16:18.800 +Don't get so worried about the first step. + +00:16:18.800 --> 00:16:22.493 +Well, if I may still recommend +the first step, + +00:16:22.493 --> 00:16:23.920 +even after saying this, + +00:16:23.920 --> 00:16:27.073 +do try to start with the built-in +guides. + +00:16:27.073 --> 00:16:29.600 +I believe they're pretty, pretty good. + +00:16:29.600 --> 00:16:31.691 +There was another question. + +00:16:31.691 --> 00:16:33.055 +It's the last question that I can read + +00:16:33.055 --> 00:16:34.564 +and after that, you will have to + +00:16:34.564 --> 00:16:37.920 +read the questions for me because +everything is frozen on my end. + +00:16:37.920 --> 00:16:43.935 +I hope I'm not frozen in a very bad +position, + +00:16:43.935 --> 00:16:47.406 +so please excuse me if my mouth is open +or anything. + +00:16:47.406 --> 00:16:51.120 +(Amin: no, we just completely lost the +video feed, so no worries.) + +00:16:51.120 --> 00:16:54.800 +Oh, splendid, so I won't have to make a +fool out of myself. + +00:16:54.800 --> 00:16:56.800 +So the last question I wanted to answer was + +00:16:56.800 --> 00:16:59.199 +"Have you read Dirk Gently's Holistic +Detective Agency?" + +00:16:59.199 --> 00:17:05.741 +No, I haven't. I hope it's not a jab at +the way I'm dressing for the conference, + +00:17:05.741 --> 00:17:10.559 +but yeah, I haven't read it. Was there +any other question? + +00:17:10.559 --> 00:17:15.919 +(Amin: I see one other question. + +00:17:15.919 --> 00:17:19.679 +"Any recommendation for good packaging +guides or places to start? + +00:17:19.679 --> 00:17:23.199 +I get a bit overwhelmed by some things. + +00:17:23.199 --> 00:17:26.799 +For example, the choice of different test +frameworks.") + +00:17:26.799 --> 00:17:29.263 +Right. Okay. So that's a very good +question. + +00:17:29.263 --> 00:17:33.840 +I believe alphapapa is in the chat right +now. + +00:17:33.840 --> 00:17:36.314 +As myself a new Lisp developer for +org-roam, + +00:17:36.314 --> 00:17:38.320 +I'd really recommend you to look into + +00:17:38.320 --> 00:17:40.032 +his package developers' guide, + +00:17:40.032 --> 00:17:42.507 +because you have a list of +all the softwares + +00:17:42.507 --> 00:17:44.559 +that are extremely useful to +be using when + +00:17:44.559 --> 00:17:45.760 +you're getting started. + +00:17:45.760 --> 00:17:48.347 +If you're looking into a first step + +00:17:48.347 --> 00:17:50.947 +for how to develop elisp packages, + +00:17:50.947 --> 00:17:52.640 +I'd really advise you to + +00:17:52.640 --> 00:17:53.520 +look into edebug. + +00:17:53.520 --> 00:17:56.559 +It's one word, edebug, + +00:17:56.559 --> 00:17:58.400 +and you have a section in the +manual for this, + +00:17:58.400 --> 00:18:00.799 +because for me, it was the key step to + +00:18:00.799 --> 00:18:03.791 +getting to develop good packages. + +00:18:03.791 --> 00:18:06.160 +It was understanding basically +what the code did + +00:18:06.160 --> 00:18:08.866 +and having us something like + +00:18:08.866 --> 00:18:09.919 +a REPL (read-evaluate-print-loop) + +00:18:09.919 --> 00:18:11.760 +that allows you to step through the code + +00:18:11.760 --> 00:18:13.210 +and see exactly which states + +00:18:13.210 --> 00:18:15.643 +the variables are at which at this point + +00:18:15.643 --> 00:18:20.080 +in the program. That's really my biggest +advice to you. + +00:18:21.200 --> 00:18:26.160 +Any other question? Thanks. Yeah, I see +one or two more. + +00:18:26.160 --> 00:18:33.120 +So there's one. They ask, "How did the +freedom of Emacs help you on your way?" + +00:18:33.120 --> 00:18:35.507 +So the freedom of Emacs... + +00:18:35.507 --> 00:18:38.080 +I mentioned that Emacs, for me, +was my gateway + +00:18:38.080 --> 00:18:39.216 +into free software + +00:18:39.216 --> 00:18:40.652 +and the freedom of Emacs + +00:18:40.652 --> 00:18:42.551 +was that you could maybe... + +00:18:42.551 --> 00:18:43.840 +First and foremost, + +00:18:43.840 --> 00:18:46.385 +compared to other software, + +00:18:46.385 --> 00:18:49.003 +was that you had behind Emacs, Elisp, + +00:18:49.003 --> 00:18:51.039 +which allows you to read the code, + +00:18:51.039 --> 00:18:53.039 +read whatever is going on in the +background. + +00:18:53.039 --> 00:18:54.380 +Surely, if you go deep enough, + +00:18:54.380 --> 00:18:58.172 +you'll end up in C functions that you +might not be able to read + +00:18:58.172 --> 00:18:59.679 +if you do not have the experience. + +00:18:59.679 --> 00:19:03.520 +But for Org Mode, which was my gateway +into Emacs, + +00:19:03.520 --> 00:19:05.883 +most of it is written in Elisp, + +00:19:05.883 --> 00:19:08.546 +and all the commands have a +very verbose name, + +00:19:08.546 --> 00:19:10.080 +like something simple as + +00:19:10.080 --> 00:19:13.440 +org go to next subtree or + +00:19:13.440 --> 00:19:16.880 +org go to a parent subtree. You know, +things like this. + +00:19:16.880 --> 00:19:20.240 +It's so elegant. It's verbose. + +00:19:20.240 --> 00:19:22.799 +That's a sense of freedom + +00:19:22.799 --> 00:19:24.491 +insofar as you can go into +the code and see, + +00:19:24.491 --> 00:19:26.160 +oh, okay, that's how it's implemented. + +00:19:26.160 --> 00:19:28.640 +I believe in a way that's the freedom + +00:19:28.640 --> 00:19:30.264 +and the liberty that is given to you + +00:19:30.264 --> 00:19:31.600 +to look into the code + +00:19:31.600 --> 00:19:32.670 +is something that invites you + +00:19:32.670 --> 00:19:34.460 +to do the same with your life. + +00:19:34.460 --> 00:19:36.776 +As someone who does a little bit of +philosophy on the side, + +00:19:36.776 --> 00:19:38.799 +I believe it's a very healthy message + +00:19:38.799 --> 00:19:42.320 +to be gathering from a piece of software. + +00:19:42.320 --> 00:19:45.440 +(Amin: Awesome, thank you. + +00:19:45.440 --> 00:19:50.960 +Let's see... So we have... + +00:19:50.960 --> 00:19:57.200 +I think I saw another question pop up.) + +00:19:57.200 --> 00:19:58.559 +I'm not sure how we're doing as far + +00:19:58.559 --> 00:19:59.760 +as time is concerned... I believe we + +00:19:59.760 --> 00:20:02.080 +have like one or two minutes more. + +00:20:02.080 --> 00:20:04.240 +(Amin: Yeah, actually, we're quite a bit + +00:20:04.240 --> 00:20:05.679 +ahead of the schedule, so if we take a + +00:20:05.679 --> 00:20:07.840 +little bit longer, we're fine. + +00:20:07.840 --> 00:20:10.225 +If you do have more questions, please +do.) + +00:20:10.225 --> 00:20:12.880 +I'm just sorry that my video is not +working anymore. + +00:20:12.880 --> 00:20:17.120 +(Amin: No problem. Someone was actually +saying... + +00:20:17.120 --> 00:20:24.159 +What's the most recent... Actually, yeah +well before that. + +00:20:24.159 --> 00:20:27.440 +"Please show off your three-piece suit +before you end your talk, + +00:20:27.440 --> 00:20:30.080 +which requires fixing your frozen camera. + +00:20:30.080 --> 00:20:31.306 +If this is not possible, + +00:20:31.306 --> 00:20:36.240 +please post suit selfies in an easily +accessible location." + +00:20:36.240 --> 00:20:38.143 +Okay, I'll make sure to do this. + +00:20:38.143 --> 00:20:41.200 +But yes, I wanted to hype things up for +the conference, + +00:20:41.200 --> 00:20:43.039 +so yes, I did get the three-piece suit out. + +00:20:43.039 --> 00:20:44.563 +I'm very glad you like it. + +00:20:44.563 --> 00:20:45.919 +By the way, when you get + +00:20:45.919 --> 00:20:47.760 +a chance to see me live again, + +00:20:47.760 --> 00:20:50.080 +do appreciate that my tie has both the + +00:20:50.080 --> 00:20:51.280 +colors of Emacs purple + +00:20:51.280 --> 00:20:53.679 +and also Org Mode green. + +00:20:53.679 --> 00:20:55.556 +It took me a while to find this one, + +00:20:55.556 --> 00:21:00.840 +so I hope you will appreciate this. + +00:21:00.840 --> 00:21:03.094 +(Amin: Awesome. Let's see. + +00:21:03.094 --> 00:21:06.880 +We have one other question. "What's the + +00:21:06.880 --> 00:21:08.960 +most recent Emacs package or tool that + +00:21:08.960 --> 00:21:14.480 +you've discovered that you've added to +your repertoire?") + +00:21:14.480 --> 00:21:17.600 +Very interesting question. + +00:21:17.600 --> 00:21:22.614 +The thing is, when you've spent as long +as I have on Emacs-- + +00:21:22.614 --> 00:21:23.919 +and I know that I've only spent + +00:21:23.919 --> 00:21:25.120 +eight years and some of you + +00:21:25.120 --> 00:21:27.901 +might have spent maybe 10, 20, + +00:21:27.901 --> 00:21:30.000 +maybe even more years on Emacs-- + +00:21:30.000 --> 00:21:34.926 +but for me, I believe the coolest neat +trick that I found in Emacs + +00:21:34.926 --> 00:21:40.080 +was a mode which is called beacon-mode. + +00:21:40.080 --> 00:21:43.679 +It's something that allows you to show + +00:21:43.679 --> 00:21:45.006 +when you're jumping between buffers + +00:21:45.006 --> 00:21:46.960 +or when you're dropping between windows, + +00:21:46.960 --> 00:21:50.681 +it shows exactly where your point is in +that buffer + +00:21:50.681 --> 00:21:55.440 +by making a slight ray of light which +looks like a beacon, hence the name. + +00:21:55.440 --> 00:21:57.760 +It really helps you navigate buffers + +00:21:57.760 --> 00:21:58.986 +because it always shows + +00:21:58.986 --> 00:22:01.760 +in a very visual way +where your point is. + +00:22:01.760 --> 00:22:04.640 +I'll get a chance to show this to you +later today + +00:22:04.640 --> 00:22:10.159 +when I'll be presenting my other talks. + +00:22:10.159 --> 00:22:20.880 +(Amin: Awesome. We have one question +from Jonas, the maintainer of Magit. + +00:22:20.880 --> 00:22:25.128 +He asks, "When you touched your webcam, + +00:22:25.128 --> 00:22:26.880 +that blew a fuse at my place. + +00:22:26.880 --> 00:22:29.760 +How did you do that?") + +00:22:29.760 --> 00:22:31.242 +Well, I'm very sorry, Jonas, + +00:22:31.242 --> 00:22:36.960 +that it happened to you, but I'll make +sure not to touch my webcam again. + +00:22:36.960 --> 00:22:41.600 +(Amin: Do we have any other questions?) + +00:22:41.600 --> 00:22:43.919 +I have to trust you on this one. + +00:22:43.919 --> 00:22:46.960 +I'm really sorry. Everything is frozen +on my end. + +00:22:46.960 --> 00:22:49.940 +(Amin: No problem.) Yeah I'm more +talking to the audience, I guess. + +00:22:51.520 --> 00:22:56.018 +I hope my lack of slides didn't bother +you. + +00:22:56.018 --> 00:23:00.481 +I really wanted to have this verbose +time with people, + +00:23:00.481 --> 00:23:01.600 +to be able to... + +00:23:01.600 --> 00:23:04.880 +It's a message that I've been trying + +00:23:04.880 --> 00:23:08.640 +to share with as many people as possible. + +00:23:08.640 --> 00:23:11.760 +In France, we do have an Emacs workshop + +00:23:11.760 --> 00:23:14.159 +that we have on a monthly basis. + +00:23:14.159 --> 00:23:16.000 +I've been learning a lot + +00:23:16.000 --> 00:23:18.960 +with those people and I felt like + +00:23:18.960 --> 00:23:20.400 +doing the same with Emacs conference + +00:23:20.400 --> 00:23:22.713 +would be good. That's why I'm +really happy, + +00:23:22.713 --> 00:23:24.000 +and I'm really lucky to have had + +00:23:24.000 --> 00:23:26.418 +the chance to do this today. + +00:23:26.418 --> 00:23:29.200 +I hope some of you, I've convinced you + +00:23:29.200 --> 00:23:31.472 +of climbing up a step on a ladder + +00:23:31.472 --> 00:23:34.480 +or making a step in a journey. + +00:23:34.480 --> 00:23:38.080 +(Amin: Absolutely. Thank you so much, Leo. + +00:23:38.080 --> 00:23:41.279 +I happen to completely agree + +00:23:41.279 --> 00:23:43.600 +with your not necessarily using a slide + +00:23:43.600 --> 00:23:45.600 +when it's not really needed + +00:23:45.600 --> 00:23:49.200 +and to help give some face-to-face time + +00:23:49.200 --> 00:23:50.685 +with the audience. + +00:23:50.685 --> 00:23:52.923 +Unfortunately, your webcam cut out, + +00:23:52.923 --> 00:23:55.200 +but I mean before that.) + +00:23:55.200 --> 00:23:57.914 +Yes, I'll make sure to fix +the problems later on, + +00:23:57.914 --> 00:23:59.679 +so don't worry about it. + +00:23:59.679 --> 00:24:02.240 +(Amin: Awesome. Alrighty. I guess we're + +00:24:02.240 --> 00:24:08.000 +wrapping up for your talk and getting +ready for the next talk.) + +00:24:08.000 --> 00:24:09.538 +Sure. Well, thank you so much. + +00:24:09.538 --> 00:24:11.760 +I'll see you all later, I suppose! + +00:24:11.760 --> 00:24:16.799 +(Amin: Sounds good. Thank you again, Leo. Bye-bye) diff --git a/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt new file mode 100644 index 00000000..d3c34a79 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt @@ -0,0 +1,124 @@ +WEBVTT + +00:00:03.559 --> 00:00:09.200 +No, there is nothing wrong with your mobile +device or your computer. This was how my world  + +00:00:09.200 --> 00:00:15.040 +was when my kid was born 11 years ago. + +00:00:15.040 --> 00:00:29.280 +Hello, I am Bala Ramadurai, author, professor +and consultant. 11 years ago in Bangalore,  + +00:00:29.280 --> 00:00:41.120 +my son was born. My wife and I had hardly slept +through those days. That's when my grandma  + +00:00:41.120 --> 00:00:48.560 +visited us to take a look at her great grandson. +As joyous as that sounded, it came with a peril.  + +00:00:48.560 --> 00:00:55.840 +My grandma was a Scrabble addict. She hardly +spent any time at all with her great grandson,  + +00:00:55.840 --> 00:01:02.720 +but she spent most of her time playing Scrabble. +She insisted that my wife and I join her.  + +00:01:02.720 --> 00:01:07.840 +That's when an idea dawned on me to write about +my Scrabble obsessed grandma. What if I could  + +00:01:07.840 --> 00:01:13.760 +make it into a novel. Not many people have +Scrabble obsessed grandmothers, after all. + +00:01:13.760 --> 00:01:19.280 +I wanted to expand this to a novel, but did +not know how. I bumped into Dan Wells' video  + +00:01:19.280 --> 00:01:28.960 +on 7-point story structure. I was now convinced +that a seed idea could indeed be converted into  + +00:01:28.960 --> 00:01:34.480 +a novel, so I tried out many tools at the +time - million dollar tools like MS Word,  + +00:01:34.480 --> 00:01:37.991 +Excel, Scrivener and the lot. In my research of +tools, I found that George RR Martin famously  + +00:01:37.991 --> 00:01:40.320 +had used Wordstar for typing out Game of +Thrones. At that point, I remembered about  + +00:01:40.320 --> 00:01:43.840 +an old editor - Emacs. I knew about Emacs from +my undergrad days and my earlier software days.  + +00:01:43.840 --> 00:01:49.040 +Thanks to the emacs community and particularly +the orgmode community, I had what I wanted. + +00:01:49.040 --> 00:01:55.680 +Now, it was time to put the idea into action. +I used another method called snowflake and also  + +00:01:55.680 --> 00:02:05.360 +Tony Ballantyne's emacs writing template. The main +features from org-mode that I used - fold, unfold,  + +00:02:05.360 --> 00:02:17.920 +columnview, tags, distraction-free writing +experience, clocking, project tracking and export. + +00:02:17.920 --> 00:02:33.317 +Now, the demo. We start with the plotline (a one +line summary of the story). Then we write out the  + +00:02:33.317 --> 00:02:34.160 +characters, describing them in detail. Write +the main story arc, followed by the secondary  + +00:02:34.160 --> 00:02:35.920 +character story arcs. Here is where org-mode +really scores. Move the points in the story  + +00:02:35.920 --> 00:02:43.920 +structure to form a coherent story. We +get into location research. Write them  + +00:02:43.920 --> 00:02:56.800 +all out in the columns. Once you are satisfied, +now scene design. Each point in the story  + +00:02:56.800 --> 00:04:09.040 +requires at least one scene. In columnview, +you can see many things - Act, scene,  + +00:04:09.040 --> 00:05:09.680 +story point, location, POV or point of +view. Make sure you finish this and read  + +00:05:09.680 --> 00:05:10.896 +the whole story if it makes sense. Now, create +a project file to track your project and clock  + +00:05:10.896 --> 00:05:18.880 +your project to see how long it takes. I used +a similar structure for my non-fiction book,  + +00:05:18.880 --> 00:05:25.520 +which I published recently, all +written and edited in emacs-org-mode. + +00:05:25.520 --> 00:05:30.480 +Thanks to you guys at the community, I +am now a published author and I plan to  + +00:05:30.480 --> 00:05:36.560 +publish and help other authors publish using this +wonderful tool called emacs-org-mode. Thank You. diff --git a/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt new file mode 100644 index 00000000..6a8d12b2 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt @@ -0,0 +1,470 @@ +WEBVTT + +00:00:00.000 --> 00:00:05.333 +I have the pad open. So, I can start. + +00:00:05.333 --> 00:00:11.333 +Do you have occasions to use Emacs for +multilingual text composition? + +00:00:11.333 --> 00:00:15.333 +How do you deal with spell-checking? + +00:00:15.333 --> 00:00:15.333 +I have written only in English. For +English, Emacs works great. + +00:00:15.333 --> 00:00:23.767 +Spell-check works great. + +00:00:23.767 --> 00:00:29.300 +I have not used it for any other languages. + +00:00:29.300 --> 00:00:40.333 +I have indeed tried local South Indian +language, but only the script + +00:00:40.333 --> 00:00:47.567 +I could get, but not the spell-checker, +really. I've not really figured it out. + +00:00:47.567 --> 00:00:51.067 +So that was my trial to answer +the first question. + +00:00:51.067 --> 00:00:57.031 +The second question is: "is it possible +to align the subcolumns + +00:00:57.031 --> 00:00:59.967 +and headings and subheadings?" + +00:00:59.967 --> 00:01:04.967 +Oh boy. That's a good one. I actually +felt the lack of having the... + +00:01:04.967 --> 00:01:11.100 +The theme I had was great for... It +looked like a novel + +00:01:11.100 --> 00:01:14.533 +when I'm typing on the novel itself, + +00:01:14.533 --> 00:01:19.800 +but when I expand into the subtrees, + +00:01:19.800 --> 00:01:22.233 +it sort of goes haywire. It's a bit hacky. + +00:01:22.233 --> 00:01:24.900 +You can probably switch to a monospace font, + +00:01:24.900 --> 00:01:27.133 +and that works better than + +00:01:27.133 --> 00:01:30.967 +the font that I have demoed it. + +00:01:30.967 --> 00:01:36.033 +You can perhaps try monospace font + +00:01:36.033 --> 00:01:37.700 +and it should work, I think, + +00:01:37.700 --> 00:01:39.600 +as far as I know. + +00:01:39.600 --> 00:01:42.667 +So, that's the second question. + +00:01:42.667 --> 00:01:47.600 +The third question is maybe there should +be an Emacs for Writing + +00:01:47.600 --> 00:01:50.433 +mailing list, an online writer's workshop? + +00:01:50.433 --> 00:01:51.300 +This is a great one. + +00:01:51.300 --> 00:01:54.433 +I have conducted an online writer's workshop + +00:01:54.433 --> 00:01:58.000 +here in India. Of course, it wasn't + +00:01:58.000 --> 00:02:05.467 +an Emacs-focused workshop. We used +Notion as the tool. It worked pretty good. + +00:02:05.467 --> 00:02:12.633 +for people who are not aware of Emacs +and how to use Emacs, the keystrokes, + +00:02:12.633 --> 00:02:16.200 +the fact that I wasn't using the mouse +unnerved them. + +00:02:16.200 --> 00:02:19.267 +It was a scary experience for most people. + +00:02:19.267 --> 00:02:22.333 +I had to switch to Notion. + +00:02:22.333 --> 00:02:23.567 +People used that as a template + +00:02:23.567 --> 00:02:28.233 +and then they could type it out. + +00:02:28.233 --> 00:02:33.633 +It wasn't my perfect experience. I liked +the Emacs Org Mode experience much better. + +00:02:33.633 --> 00:02:41.300 +The next question is, "How do you share +drafts of your novel? + +00:02:41.300 --> 00:02:44.867 +If you use pandoc to export to Word, +etc., how do you incorporate feedback + +00:02:44.867 --> 00:02:46.867 +on the document back into Org?" + +00:02:46.867 --> 00:02:50.767 +Thank you for the kind words. + +00:02:50.767 --> 00:02:53.100 +Yes, it is a problem. + +00:02:53.100 --> 00:03:02.033 +This is my ??, and I have a dedication +to Spacemacs also and the Emacs Org Mode + +00:03:02.033 --> 00:03:04.433 +community in there. I don't know if you +can see it. + +00:03:04.433 --> 00:03:05.467 +Probably not. + +00:03:05.467 --> 00:03:10.600 +I did export it to Word. + +00:03:10.600 --> 00:03:13.333 +My editor did complain that there were a +whole bunch of things, + +00:03:13.333 --> 00:03:16.633 +that it wasn't convenient for her. + +00:03:16.633 --> 00:03:20.933 +So I tried having the raw Org Mode +itself in a DOC embedded, + +00:03:20.933 --> 00:03:26.067 +and I will do a copy and paste. + +00:03:26.067 --> 00:03:27.867 +Didn't work so well either. + +00:03:27.867 --> 00:03:31.267 +So I'm still on the edge on +how do I do this. + +00:03:31.267 --> 00:03:34.933 +Should I train my editor +to use Org Mode + +00:03:34.933 --> 00:03:37.167 +in Gitlab or one of those + +00:03:37.167 --> 00:03:39.833 +other tools, which is not a great +experience? + +00:03:39.833 --> 00:03:47.633 +But... I don't know. It could be +tricky for working with people + +00:03:47.633 --> 00:03:50.867 +who are not well-versed with Emacs. + +00:03:50.867 --> 00:04:02.000 +Pandoc is very, very useful in +converting it to PDF + +00:04:02.000 --> 00:04:02.000 +and integrating it with LaTeX, the +styling, formatting into e-reader, + +00:04:02.000 --> 00:04:13.133 +EPUB format. For all that, Pandoc works +great. You can customize it + +00:04:13.133 --> 00:04:16.233 +and of course there's a lot of support +in the community + +00:04:16.233 --> 00:04:20.133 +for any style changes that you want to +make, any images that you want to add. + +00:04:20.133 --> 00:04:22.967 +It works great. + +00:04:22.967 --> 00:04:28.367 +That was my trial to answer the pandoc question. + +00:04:28.367 --> 00:04:35.100 +"Can you show exported PDF of +any of your novels?" + +00:04:35.100 --> 00:04:38.600 +Unfortunately, it's still +not published, so I'm... + +00:04:38.600 --> 00:04:42.067 +I will put it and +share it on the community, + +00:04:42.067 --> 00:04:48.067 +or part of this in the schedule itself. +Thank you for the question. + +00:04:48.067 --> 00:04:55.000 +Unfortunately, it's not yet published, +so I'm unable to publish the exported PDF. + +00:04:55.000 --> 00:05:01.300 +But I'll make a test of an open-source +novel that I'm working on + +00:05:01.300 --> 00:05:05.767 +I will definitely publish that so that +you can see + +00:05:05.767 --> 00:05:10.433 +how it works also. + +00:05:10.433 --> 00:05:13.167 +Can you text-wrap in the columns? + +00:05:13.167 --> 00:05:19.667 +I have not found a way to do +text-wrap in the columns. + +00:05:19.667 --> 00:05:23.633 +That only shows my limitation +in config setup, + +00:05:23.633 --> 00:05:27.033 +but I'm sure people can figure this out + +00:05:27.033 --> 00:05:29.900 +That's a good one. I would have loved to +have it. + +00:05:29.900 --> 00:05:34.000 +Every time I want to write more on the +headline, + +00:05:34.000 --> 00:05:42.467 +I would get out of the column-view mode +and I would do the typing and expand it, + +00:05:42.467 --> 00:05:46.700 +and then come back into the column view +when I want to set the other meta parameters. + +00:05:46.700 --> 00:05:54.133 +So that's how I manage without the +text-wrapping feature built into column. + +00:05:54.133 --> 00:05:58.000 +But I think it's a great idea to +have text wrap. + +00:05:58.000 --> 00:06:05.333 +Did I leave out any questions? +I don't think so. + +00:06:05.333 --> 00:06:10.600 +[Amin]: I think there's at least one +question on IRC, + +00:06:10.600 --> 00:06:14.500 +which I shall read to you. + +00:06:14.500 --> 00:06:17.300 +[Bala]: Please, can you do that? Thank you. + +00:06:17.300 --> 00:06:21.278 +[Amin]: So they asked, "How do you collaborate +with others while writing your novel? + +00:06:21.278 --> 00:06:28.100 +For example, sharing your file and +getting feedback." + +00:06:28.100 --> 00:06:37.100 +Okay. Good question. So far, I have +used... Let's see... + +00:06:37.100 --> 00:06:40.833 +What did I use... +This is a crazy hack. + +00:06:40.833 --> 00:06:44.667 +But it's a long-winded way of... + +00:06:44.667 --> 00:06:50.300 +Right now we're working on an e-book for +sustainability + +00:06:50.300 --> 00:06:57.767 +and kids contribute their stories into +this long Org Mode file + +00:06:57.767 --> 00:07:00.233 +and I want my editors to see it + +00:07:00.233 --> 00:07:05.333 +so what we have done, actually, is with +the tags and all that, I have actually + +00:07:05.333 --> 00:07:08.167 +pasted it into Google Docs + +00:07:08.167 --> 00:07:11.833 +so that my collaborators and + +00:07:11.833 --> 00:07:14.000 +editors can see it. + +00:07:14.000 --> 00:07:16.667 +That's my current solution. +It's not elegant. + +00:07:16.667 --> 00:07:23.900 +I'm trying to see if I can use Python +code to make the copy and paste work, + +00:07:23.900 --> 00:07:26.900 +but it's not so elegant for now. + +00:07:26.900 --> 00:07:28.933 +I don't know how to work this out, + +00:07:28.933 --> 00:07:31.100 +but this is my hack. That is, + +00:07:31.100 --> 00:07:34.300 +the entire Org Mode text, I would paste +it into + +00:07:34.300 --> 00:07:35.433 +Google Docs + +00:07:35.433 --> 00:07:37.700 +so that my collaborators and editors + +00:07:37.700 --> 00:07:41.667 +can see it. Whenever they edit it, I ask +them not to make any changes + +00:07:41.667 --> 00:07:43.500 +to the Org Mode tags. + +00:07:43.500 --> 00:07:45.633 +So just copy the entire text + +00:07:45.633 --> 00:07:51.167 +and put it back into my Org Mode file + +00:07:51.167 --> 00:07:53.300 +and export it using Pandoc into a PDF + +00:07:53.300 --> 00:07:56.000 +and since it's synced to Google Drive + +00:07:56.000 --> 00:07:58.600 +it shows up in the Google Drive + +00:07:58.600 --> 00:08:03.633 +and then the collaborators can see +the PDF/EPUB + +00:08:03.633 --> 00:08:05.333 +if they want to open it up + +00:08:05.333 --> 00:08:06.200 +in their own space. + +00:08:06.200 --> 00:08:11.467 +It's very very hacky and I think +primitive, Stone Age sort of solution. + +00:08:11.467 --> 00:08:15.567 +I did see a Python solution. + +00:08:15.567 --> 00:08:18.967 +to at least help me with +the copying and paste. + +00:08:18.967 --> 00:08:21.574 +I'm still working on +how do I convert this. + +00:08:21.574 --> 00:08:24.300 +Interconvertability is +driving me nuts. + +00:08:24.300 --> 00:08:26.533 +I think most of the questions + +00:08:26.533 --> 00:08:29.333 +are around interconvertability. + +00:08:29.333 --> 00:08:34.767 +This is sort of what I have right now. + +00:08:34.767 --> 00:08:37.567 +Any other questions, Amin, + +00:08:37.567 --> 00:08:40.233 +on IRC or not? + +00:08:40.233 --> 00:08:46.433 +[Amin]: Let's see. I think that's about it. + +00:08:46.433 --> 00:08:50.033 +[Bala]: Okay. Cool. That was fun. + +00:08:50.033 --> 00:08:51.833 +Thank you so much to + +00:08:51.833 --> 00:08:54.577 +the organizers of Emacs conference, + +00:08:54.577 --> 00:08:57.100 +and the community at large, + +00:08:57.100 --> 00:09:01.303 +the Org Mode community and the Emacs +community for helping me out. + +00:09:01.303 --> 00:09:02.900 +Thank you so much. + +00:09:02.900 --> 00:09:05.233 +Thanks for the opportunity +as well. + +00:09:05.233 --> 00:09:07.300 +[Amin]: And thank you, Bala, for your +awesome talk. + +00:09:07.300 --> 00:09:14.000 +[Bala]: Thanks. Thanks a lot, Amin. diff --git a/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt b/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt new file mode 100644 index 00000000..b2722c99 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt @@ -0,0 +1,559 @@ +WEBVTT + +00:00:02.000 --> 00:00:04.799 +Hello, everyone, and welcome to the EmacsConf. + +00:00:04.799 --> 00:00:06.631 +I am Jonathan. In this talk, + +00:00:06.631 --> 00:00:10.880 +I'm going to demonstrate ways of +producing sheet music in Emacs + +00:00:10.880 --> 00:00:14.636 +using Lilypond, and maybe also +convince you + +00:00:14.636 --> 00:00:18.640 +to use Emacs for writing your scores. + +00:00:18.640 --> 00:00:20.698 +I'll start with an overview +of the syntax + +00:00:20.698 --> 00:00:22.240 +for those who are new to using + +00:00:22.240 --> 00:00:24.400 +text-based notation + +00:00:24.400 --> 00:00:26.615 +as a shallow dive into the deep pond + +00:00:26.615 --> 00:00:28.800 +of lilies and Lilypond, + +00:00:28.800 --> 00:00:30.171 +and move on to showcase + +00:00:30.171 --> 00:00:34.723 +some of its functionalities +using Org Mode and lilypond-mode. + +00:00:34.723 --> 00:00:37.173 +One disclaimer, however: + +00:00:37.173 --> 00:00:40.480 +I am not a Lilypond developer. + +00:00:40.480 --> 00:00:42.841 +So what is Lilypond? + +00:00:42.841 --> 00:00:46.800 +Lilypond is a file format and music +engraving system + +00:00:46.800 --> 00:00:50.000 +for producing high-quality sheet music. + +00:00:50.000 --> 00:00:52.442 +It translates textual representations + +00:00:52.442 --> 00:00:55.120 +of music to graphical objects. + +00:00:55.120 --> 00:00:57.520 +It's similar to LaTeX in that + +00:00:57.520 --> 00:00:59.329 +its input format describes + +00:00:59.329 --> 00:01:01.600 +the visual layouts of the score, + +00:01:01.600 --> 00:01:05.119 +using commands to define musical +expressions. + +00:01:05.119 --> 00:01:07.760 +Commands begin with a backslash. + +00:01:07.760 --> 00:01:10.791 +For example, the formatter command, +as shown on the left, + +00:01:10.791 --> 00:01:13.920 +yields its graphical equivalents +on the right, + +00:01:13.920 --> 00:01:16.345 +the fermata symbol over the low B + +00:01:16.345 --> 00:01:19.119 +and so on and so forth. + +00:01:19.119 --> 00:01:21.600 +It's also fully extensible, like Emacs, + +00:01:21.600 --> 00:01:23.119 +allowing users to extend + +00:01:23.119 --> 00:01:25.600 +and override Lilypond's functionalities + +00:01:25.600 --> 00:01:28.452 +using the Scheme scripting language. + +00:01:28.452 --> 00:01:32.422 +It can be used for early and +contemporary music tablature, + +00:01:32.422 --> 00:01:35.200 +vocal music lead sheets, and so on. + +00:01:35.200 --> 00:01:38.000 +Above all, it works with Emacs. + +00:01:38.000 --> 00:01:41.040 +In fact, Lilypond ships with +Emacs Lisp libraries, + +00:01:41.040 --> 00:01:47.360 +including a major mode for editing +Lilypond files. + +00:01:47.360 --> 00:01:50.560 +So the input files are similar to source +files. + +00:01:50.560 --> 00:01:54.079 +They contain expressions formed with +curly braces, + +00:01:54.079 --> 00:01:56.549 +comments that start with +the percent sign, + +00:01:56.549 --> 00:02:00.240 +and the code is indented. + +00:02:00.240 --> 00:02:02.903 +Notes are entered using lowercase +letters, + +00:02:02.903 --> 00:02:05.600 +and rests with the letter r. + +00:02:05.600 --> 00:02:08.800 +In this case, the lowercase r or r4 + +00:02:08.800 --> 00:02:11.039 +is the equivalence of a crotchet or + +00:02:11.039 --> 00:02:14.000 +quarter note rest. + +00:02:14.000 --> 00:02:15.938 +Durations are entered using numbers + +00:02:15.938 --> 00:02:18.480 +and dots after the note name. + +00:02:18.480 --> 00:02:20.196 +If you do not specify one, + +00:02:20.196 --> 00:02:22.640 +the previous duration is used. + +00:02:22.640 --> 00:02:27.360 +You can also tie notes together using +the tilde symbol (~). + +00:02:27.360 --> 00:02:30.000 +In fact, you can input chords, lyrics, + +00:02:30.000 --> 00:02:32.080 +embellishments, and a lot more. + +00:02:32.080 --> 00:02:36.160 +I encourage you to read the manual for +more information. + +00:02:36.160 --> 00:02:39.680 +Now let's switch to a terminal window. + +00:02:39.680 --> 00:02:41.247 +With Lilypond installed, + +00:02:41.247 --> 00:02:50.560 +let's create a test file with the +extension .ly and open it in Emacs. + +00:02:50.560 --> 00:02:53.048 +At the top of the file is +the version statement, + +00:02:53.048 --> 00:02:54.395 +which tells Lilypond + +00:02:54.395 --> 00:02:57.440 +which version to use when +compiling the file. + +00:02:57.440 --> 00:03:00.959 +Here I'm using version 2.20.0. + +00:03:00.959 --> 00:03:04.159 +I've added the clef and time signature. + +00:03:04.159 --> 00:03:09.280 +Let's add some notes. + +00:03:09.280 --> 00:03:12.098 +I'm going to close this now + +00:03:12.098 --> 00:03:13.765 +and compile the file + +00:03:13.765 --> 00:03:19.760 +by running lilypond followed +by the file name. + +00:03:19.760 --> 00:03:27.360 +So now let's view the output. + +00:03:27.360 --> 00:03:29.760 +Okay. So here's a more complex example + +00:03:29.760 --> 00:03:32.239 +for randomizing note sequences. + +00:03:32.239 --> 00:03:33.410 +The idea is to create + +00:03:33.410 --> 00:03:37.760 +new reading materials each time the code +blocks are evaluated. + +00:03:37.760 --> 00:03:40.640 +As usual, we begin with a header. + +00:03:40.640 --> 00:03:43.541 +I've added the title and composer. + +00:03:43.541 --> 00:03:47.920 +Then we add the note sequences to use in +the composition. + +00:03:47.920 --> 00:03:51.200 +In this case, sn is a note name just like + +00:03:51.200 --> 00:03:54.959 +a b c d and so on, and stands for snare drum, + +00:03:54.959 --> 00:03:58.879 +the percussion instruments. + +00:03:58.879 --> 00:04:00.720 +Now here's a function that's going to + +00:04:00.720 --> 00:04:04.080 +shuffle the notes in the table. + +00:04:04.080 --> 00:04:06.560 +Finally, we expand the notes inside + +00:04:06.560 --> 00:04:08.799 +the Lilypond source block. + +00:04:08.799 --> 00:04:10.684 +So whatever the function returns + +00:04:10.684 --> 00:04:13.680 +is expanded inside the drums block. + +00:04:13.680 --> 00:04:20.079 +Now let's press C-c C-c to view the +results. + +00:04:20.079 --> 00:04:26.840 +Okay. And if I run this again, it should +create a new composition. + +00:04:26.840 --> 00:04:31.360 +Great. You can also audition a piece +using the midi command, + +00:04:31.360 --> 00:04:34.320 +which creates a midi file of the score. + +00:04:34.320 --> 00:04:36.560 +Note also that the ob library-- + +00:04:36.560 --> 00:04:39.040 +sorry, the ob-lilypond library comes + +00:04:39.040 --> 00:04:40.400 +with two modes. + +00:04:40.400 --> 00:04:43.440 +The one I'm using now is called +arrange mode + +00:04:43.440 --> 00:04:47.120 +and is useful for assembling +complete scores. + +00:04:47.120 --> 00:04:49.015 +The basic mode, on the other hand, + +00:04:49.015 --> 00:04:51.199 +allows you to mix text and music + +00:04:51.199 --> 00:04:53.360 +by embedding Lilypond snippets and + +00:04:53.360 --> 00:05:00.240 +export them using typical Org Mode +commands. + +00:05:00.240 --> 00:05:02.661 +Now to demonstrate the basic mode in +action. + +00:05:02.661 --> 00:05:04.320 +I'm going to export this document + +00:05:04.320 --> 00:05:05.120 +to a PDF file. + +00:05:05.120 --> 00:05:10.077 +In this case, the :file header argument +is required, + +00:05:10.077 --> 00:05:11.919 +so you have to provide one + +00:05:11.919 --> 00:05:15.600 +and include the file name. + +00:05:15.600 --> 00:05:22.160 +Again, you can run the code and view the +results. + +00:05:22.160 --> 00:05:33.680 +Here it is. So now let's export this to +a PDF file. + +00:05:33.680 --> 00:05:39.680 +And here it is, what it generates. + +00:05:39.680 --> 00:05:41.716 +Now I'm going to show you +the workflow I used + +00:05:41.716 --> 00:05:44.000 +to produce music books in Emacs, + +00:05:44.000 --> 00:05:46.160 +combining Lilypond and LaTeX for a + +00:05:46.160 --> 00:05:48.000 +perfect marriage. + +00:05:48.000 --> 00:05:49.858 +I begin by sketching the first draft + +00:05:49.858 --> 00:05:53.039 +of the manuscript using +pencil and paper. + +00:05:53.039 --> 00:05:55.039 +Then I move to Emacs to input the notes + +00:05:55.039 --> 00:05:57.440 +in a git repository. + +00:05:57.440 --> 00:05:59.486 +This is a typical source file. + +00:05:59.486 --> 00:06:01.360 +It begins with a stylesheet + +00:06:01.360 --> 00:06:03.690 +where I set variables and layout settings, + +00:06:03.690 --> 00:06:04.875 +although in general, + +00:06:04.875 --> 00:06:07.039 +there's no need for tweaking the layout + +00:06:07.039 --> 00:06:11.199 +unless you have specific requirements to +do so. + +00:06:11.199 --> 00:06:15.520 +The easiest way to compile the file +from Emacs is by pressing C-c C-l, + +00:06:15.520 --> 00:06:19.280 +so let's do this now, + +00:06:19.280 --> 00:06:21.199 +and the compilation buffer will tell you + +00:06:21.199 --> 00:06:23.759 +if there were any errors in the file. + +00:06:23.759 --> 00:06:25.439 +Now to automate the process of + +00:06:25.439 --> 00:06:28.560 +compiling several files and +building the PDF, + +00:06:28.560 --> 00:06:31.280 +I use GNU Make, so all I have to do is + +00:06:31.280 --> 00:06:36.000 +open the shell and run the make command. +Don't worry, + +00:06:36.000 --> 00:06:37.840 +I'll provide a link to the source code + +00:06:37.840 --> 00:06:41.600 +on the last slide. + +00:06:41.600 --> 00:06:43.494 +As I moved forward with the project, + +00:06:43.494 --> 00:06:46.000 +I found at least two things missing. + +00:06:46.000 --> 00:06:48.720 +One, I had no access to a metronome, + +00:06:48.720 --> 00:06:50.479 +at least not from the editor, + +00:06:50.479 --> 00:06:52.437 +so I built one for casual use + +00:06:52.437 --> 00:06:55.919 +and made it available in the MELPA +repository. + +00:06:55.919 --> 00:06:59.039 +I also missed bar numbers in the +source file. + +00:06:59.039 --> 00:07:00.880 +This is useful when going back and forth + +00:07:00.880 --> 00:07:04.479 +between input and output files without +getting lost. + +00:07:04.479 --> 00:07:07.290 +So I wrote a command for toggling bar +numbers, + +00:07:07.290 --> 00:07:10.000 +which I hope you can see on the left. + +00:07:10.000 --> 00:07:12.080 +Also, some expressions are difficult or + +00:07:12.080 --> 00:07:14.160 +slow to write on the keyboard-- + +00:07:14.160 --> 00:07:16.490 +accents and tuplets, for example-- + +00:07:16.490 --> 00:07:20.160 +so I use template expansion extensively +for this purpose, + +00:07:20.160 --> 00:07:23.440 +mainly yasnippet. + +00:07:23.440 --> 00:07:24.797 +So what do I think? + +00:07:24.797 --> 00:07:28.080 +Well, I think Lilypond can be a sharp +paradigm shift + +00:07:28.080 --> 00:07:30.817 +for people used to GUI alternatives, + +00:07:30.817 --> 00:07:32.720 +but the results are impressive. + +00:07:32.720 --> 00:07:34.639 +You don't have to dive too deeply to + +00:07:34.639 --> 00:07:36.960 +start using Lilypond. + +00:07:36.960 --> 00:07:39.635 +Likewise, the ability to extend the +software, +I think, + +00:07:39.635 --> 00:07:42.400 +is especially appealing for music +professionals, + +00:07:42.400 --> 00:07:46.560 +enthusiasts, composers, and the academic +community: + +00:07:46.560 --> 00:07:48.400 +for example, allowing users to create + +00:07:48.400 --> 00:07:50.187 +alternative notation systems + +00:07:50.187 --> 00:07:53.120 +required in non-Western music traditions + +00:07:53.120 --> 00:07:56.160 +and other non-conventional requirements. + +00:07:56.160 --> 00:07:58.400 +Also, Lilypond and Emacs both have + +00:07:58.400 --> 00:08:00.720 +extensive and well-written manuals + +00:08:00.720 --> 00:08:04.639 +and active communities of users. + +00:08:04.639 --> 00:08:05.971 +But if you're still not sure + +00:08:05.971 --> 00:08:10.475 +where to start and when to wedge your +feet in the deep but warm pond + +00:08:10.475 --> 00:08:13.680 +of lilies, Lilypond, and Lilypond users, + +00:08:13.680 --> 00:08:16.960 +I invite you to contribute to my +Lilypond projects, + +00:08:16.960 --> 00:08:20.720 +which you can do so from the links on +the screen. + +00:08:20.720 --> 00:08:23.271 +So, thank you all. I look forward to +your comments, + +00:08:23.271 --> 00:08:27.840 +and I hope you enjoy the rest of the +conference. diff --git a/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt new file mode 100644 index 00000000..24e598d5 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt @@ -0,0 +1,1062 @@ +WEBVTT + +00:00:01.360 --> 00:00:04.480 +Hello, my name is Grant Shangreaux. + +00:00:04.480 --> 00:00:09.519 +This is my talk titled Bard Bivou(m)acs: +Publishing Music with Emacs. + +00:00:09.519 --> 00:00:14.400 +I'm a software developer with Unabridged +Software in Lincoln, Nebraska. + +00:00:14.400 --> 00:00:18.720 +Long time Emacs user, relatively new +Emacs hacker. + +00:00:18.720 --> 00:00:22.487 +Hopefully, I'll be able to show you +my workflow, + +00:00:22.487 --> 00:00:30.480 +with how I publish music with Emacs. + +00:00:30.480 --> 00:00:35.520 +All right. So as a musician, I would +like to publish my music online. + +00:00:35.520 --> 00:00:39.040 +I could publish with popular online +music services, + +00:00:39.040 --> 00:00:41.061 +but I'm more of a DIY-type, + +00:00:41.061 --> 00:00:44.719 +so I chose to go ahead and +publish with Emacs. + +00:00:44.719 --> 00:00:48.160 +What's the motivation behind this? + +00:00:48.160 --> 00:00:51.600 +A lot of it comes down to some +fundamental freedoms + +00:00:51.600 --> 00:00:57.178 +that Emacs and GNU software +represent to me, + +00:00:57.178 --> 00:01:01.840 +as well as my ideas on culture and my +background. + +00:01:01.840 --> 00:01:04.080 +I don't believe that music is +a consumer good. + +00:01:04.080 --> 00:01:08.320 +It's a form of knowledge, like an +algorithm. + +00:01:08.320 --> 00:01:11.036 +And it's just such a part of culture, + +00:01:11.036 --> 00:01:12.780 +like in tribal cultures, + +00:01:12.780 --> 00:01:17.405 +music was seen as a gift from the cosmos +or the gods. + +00:01:17.405 --> 00:01:20.288 +It was a gift maybe through an +individual vessel, + +00:01:20.288 --> 00:01:21.920 +but was shared with the people + +00:01:21.920 --> 00:01:23.520 +and shared with everyone, + +00:01:23.520 --> 00:01:26.799 +kept alive by the culture itself. + +00:01:26.799 --> 00:01:29.840 +So to me, music is something that + +00:01:29.840 --> 00:01:31.520 +should be shared and should be + +00:01:31.520 --> 00:01:33.818 +freely enjoyed by everyone. + +00:01:33.818 --> 00:01:36.560 +Of course, artists should be +compensated as well, + +00:01:36.560 --> 00:01:39.040 +but that's a whole different topic. + +00:01:39.040 --> 00:01:41.040 +So when I want to share my music, + +00:01:41.040 --> 00:01:43.520 +I want to do it without impacting +anyone's freedom. + +00:01:43.520 --> 00:01:45.425 +Using GNU software like Emacs + +00:01:45.425 --> 00:01:49.200 +is a good way that I can ensure that + +00:01:49.200 --> 00:01:52.597 +I won't be requiring people + +00:01:52.597 --> 00:01:55.840 +to sign away their freedoms for +anything. + +00:01:55.840 --> 00:01:57.367 +There's a lot more I could say +about this + +00:01:57.367 --> 00:01:58.799 +but I don't have time. + +00:01:58.799 --> 00:02:03.439 +Feel free to reach out to me by +email or IRC. + +00:02:03.439 --> 00:02:06.479 +Part of the motivation for me, + +00:02:06.479 --> 00:02:08.775 +personally, is that Emacs is super +magical. + +00:02:08.775 --> 00:02:10.720 +It's an all-in-one solution. + +00:02:10.720 --> 00:02:12.720 +Like I said, the GNU software aligns with + +00:02:12.720 --> 00:02:14.480 +Creative Commons' ideas. + +00:02:14.480 --> 00:02:16.067 +I can do file management. + +00:02:16.067 --> 00:02:20.239 +I can author HTML, all the web stuff +I need even, literate-style. + +00:02:20.239 --> 00:02:22.171 +I can handle media and metadata. + +00:02:22.171 --> 00:02:24.640 +I've got version control, remote server +access... + +00:02:24.640 --> 00:02:28.080 +All the tools I need are right under my +fingertips with this tool + +00:02:28.080 --> 00:02:30.000 +that I use every day for a long time. + +00:02:30.000 --> 00:02:31.440 +I don't need to look elsewhere. + +00:02:31.440 --> 00:02:34.319 +It was a challenge. + +00:02:34.319 --> 00:02:36.319 +I wanted to see if I could do this + +00:02:36.319 --> 00:02:39.440 +all within Emacs itself. + +00:02:39.440 --> 00:02:41.680 +So, how do you use Emacs to publish music? + +00:02:41.680 --> 00:02:43.440 +Well, for me, I needed + +00:02:43.440 --> 00:02:44.258 +a couple of things. + +00:02:44.258 --> 00:02:47.564 +I needed to be able to audition and +label unlabeled audio tracks. + +00:02:47.564 --> 00:02:50.320 +I have a lot of files that +I don't know where they came from. + +00:02:50.320 --> 00:02:51.213 +I don't know what they are. + +00:02:51.213 --> 00:02:53.840 +I need to be able to listen to them, + +00:02:53.840 --> 00:02:56.800 +and I need to be able to add metadata to + +00:02:56.800 --> 00:02:58.480 +whatever audio format it is + +00:02:58.480 --> 00:03:00.800 +and rename the files based on that + +00:03:00.800 --> 00:03:03.200 +metadata, potentially. + +00:03:03.200 --> 00:03:05.120 +And in the end, I wanted to take those + +00:03:05.120 --> 00:03:08.319 +files and programmatically produce a web page + +00:03:08.319 --> 00:03:10.442 +for people to consume. + +00:03:10.442 --> 00:03:14.879 +I found out that Emacs scores a hundred +percent on all of + +00:03:14.879 --> 00:03:17.709 +these requirements that I had for this, + +00:03:17.709 --> 00:03:22.640 +and a lot of that came from EMMS, the +Emacs multimedia system. + +00:03:22.640 --> 00:03:26.080 +EMMS is great. + +00:03:26.080 --> 00:03:27.760 +If you haven't checked it out, please do. + +00:03:27.760 --> 00:03:29.736 +It's a little bit unintuitive, + +00:03:29.736 --> 00:03:34.000 +but once you get into it, you know it +works. + +00:03:34.000 --> 00:03:36.420 +Basically, what EMMS gave me was + +00:03:36.420 --> 00:03:38.720 +the ability to listen to the tracks, + +00:03:38.720 --> 00:03:39.680 +organize playlists. + +00:03:39.680 --> 00:03:41.280 +On top of that, it gave me + +00:03:41.280 --> 00:03:42.959 +super-powered metadata authoring. + +00:03:42.959 --> 00:03:45.040 +I'm going to demonstrate that to you. + +00:03:45.040 --> 00:03:47.200 +So in order to do this, + +00:03:47.200 --> 00:03:50.879 +you have to require markable playlists, + +00:03:50.879 --> 00:03:54.879 +so (require 'emms-mark). I'm going to + +00:03:54.879 --> 00:03:59.680 +go through, and I'm going to open the red... + +00:03:59.680 --> 00:04:02.092 +I've got this. These files here. + +00:04:02.092 --> 00:04:04.480 +So you can see these files are mp3s. + +00:04:04.480 --> 00:04:07.599 +They're recorded on a digital recorder. + +00:04:07.599 --> 00:04:09.920 +If I had the choice, I would have a + +00:04:09.920 --> 00:04:12.319 +recorder that used a different format, + +00:04:12.319 --> 00:04:14.640 +but so be it. I can mark all these files + +00:04:14.640 --> 00:04:27.040 +and I can do EMMS add to .., and now +they've been loaded into a playlist. + +00:04:27.040 --> 00:04:28.698 +So you can see the playlist here. + +00:04:28.698 --> 00:04:30.400 +There's some leftover files. + +00:04:30.400 --> 00:04:31.771 +So I've got these three files + +00:04:31.771 --> 00:04:33.361 +in my playlist, and as you can see, + +00:04:33.361 --> 00:04:35.194 +it's just the file name, the path. + +00:04:35.194 --> 00:04:38.560 +I don't have any metadata associated +with them. + +00:04:38.560 --> 00:04:41.360 +In this playlist, I can hit E, + +00:04:41.360 --> 00:04:43.440 +and it'll bring up a buffer showing + +00:04:43.440 --> 00:04:47.360 +the tag information that I have. + +00:04:47.360 --> 00:04:49.840 +I could edit these here. + +00:04:49.840 --> 00:04:51.129 +I could edit them one at a time, + +00:04:51.129 --> 00:05:03.101 +but that's not really great. I want +superpower metadata authoring. + +00:05:03.101 --> 00:05:07.159 +So, by marking them, I can then hit E, + +00:05:07.159 --> 00:05:12.639 +and I have all three of the tracks +loaded up in this tags buffer. + +00:05:12.639 --> 00:05:16.912 +On top of that, I can do EMMS tag +editor, + +00:05:16.912 --> 00:05:22.840 +set all, C-c C-r, and I want to +set the artist. + +00:05:22.840 --> 00:05:26.320 +so these are some recordings of my +family. + +00:05:26.320 --> 00:05:31.039 +So, Shangreaux, set all three of them. + +00:05:31.039 --> 00:05:35.600 +I want to set the album: + +00:05:35.600 --> 00:05:40.160 +Spring Walk with Lap Harp. + +00:05:40.160 --> 00:05:45.520 +I want to set the year. + +00:05:45.520 --> 00:05:53.759 +And then I'm going to go ahead and put +these in manually, + +00:05:53.759 --> 00:05:56.759 +but with the power of Emacs +keyboard macros + +00:05:56.759 --> 00:05:59.600 +and registers and so on. I could do this + +00:05:59.600 --> 00:06:02.319 +programmatically as well, + +00:06:02.319 --> 00:06:03.818 +which would make it a lot easier + +00:06:03.818 --> 00:06:07.440 +if I had much more than three files to +do this with. + +00:06:07.440 --> 00:06:09.919 +Submit the changes with C-c C-c, + +00:06:09.919 --> 00:06:11.232 +and now we've got the playlist. + +00:06:11.232 --> 00:06:15.039 +You can see the artist and track number +have been updated here. + +00:06:15.039 --> 00:06:17.360 +And then the final piece of this is that + +00:06:17.360 --> 00:06:18.875 +if you look at this, you can see that + +00:06:18.875 --> 00:06:20.479 +the file name is still the same. + +00:06:20.479 --> 00:06:22.639 +So if I were looking at the directory, + +00:06:22.639 --> 00:06:24.560 +I would still have this file name. + +00:06:24.560 --> 00:06:26.479 +When packaging these up for a release, + +00:06:26.479 --> 00:06:28.000 +for people to download, + +00:06:28.000 --> 00:06:30.319 +it's nice to be able to have that + +00:06:30.319 --> 00:06:32.044 +filename reflect the track number + +00:06:32.044 --> 00:06:33.609 +and the artist and so on. + +00:06:33.609 --> 00:06:40.250 +So there's another command, + +00:06:40.250 --> 00:06:42.970 +EMMS rename tag editor, rename, + +00:06:42.970 --> 00:06:45.120 +so it could be just capital R. + +00:06:45.120 --> 00:06:46.991 +I think I need to mark all of these, + +00:06:46.991 --> 00:06:50.000 +hit capital R, and then it's going to +ask me to confirm + +00:06:50.000 --> 00:06:54.400 +and say yes to all of them. + +00:06:54.400 --> 00:07:02.720 +And now, if you look in the-- + +00:07:02.720 --> 00:07:04.319 +whoops I have to update it--you'll see + +00:07:04.319 --> 00:07:06.319 +it's been updated with the artist, + +00:07:06.319 --> 00:07:11.120 +track number and track name. + +00:07:11.120 --> 00:07:14.432 +This format is a format string, + +00:07:14.432 --> 00:07:17.360 +so it's customizable of course. + +00:07:17.360 --> 00:07:21.039 +I just decided to go with the default. + +00:07:21.039 --> 00:07:24.948 +So that's pretty great, this workflow +just with EMMS. + +00:07:24.948 --> 00:07:27.585 +I didn't have to do anything. This is +all there. + +00:07:27.585 --> 00:07:31.673 +It's all built in. It gave me exactly +what I was looking for + +00:07:31.673 --> 00:07:35.599 +in terms of being able to process a lot +of raw audio files, + +00:07:35.599 --> 00:07:39.280 +add metadata to them, and get them ready +for publishing. + +00:07:39.280 --> 00:07:41.599 +And this is for publishing for playback + +00:07:41.599 --> 00:07:44.026 +in any media player. It'll be useful. + +00:07:44.026 --> 00:07:47.639 +Not just for the web page that I'm +building. + +00:07:47.639 --> 00:07:51.440 +So the final part, of course, is to +build the web page. + +00:07:51.440 --> 00:07:54.960 +Emacs makes authoring HTML trivial. + +00:07:54.960 --> 00:07:57.357 +As I was going through this, + +00:07:57.357 --> 00:07:59.701 +I wanted to challenge myself and just +be, like, + +00:07:59.701 --> 00:08:03.520 +can I do this just all with Emacs? +Can I just make this? + +00:08:03.520 --> 00:08:05.134 +I don't need a... I don't need Ruby. + +00:08:05.134 --> 00:08:06.707 +I don't need Rails. I don't need Node. + +00:08:06.707 --> 00:08:08.528 +I don't need any of this other stuff. + +00:08:08.528 --> 00:08:10.560 +I have my tool right here. It's a +fully... + +00:08:10.560 --> 00:08:12.560 +It's a whole operating system, basically, + +00:08:12.560 --> 00:08:15.039 +plus programming languages. + +00:08:15.039 --> 00:08:17.171 +So the first thing I started with + +00:08:17.171 --> 00:08:19.919 +was buffer scripting for +manipulating text. + +00:08:19.919 --> 00:08:22.560 +That's kind of the easiest way to do it. + +00:08:22.560 --> 00:08:24.692 +Basically, anything you can do in +a buffer, + +00:08:24.692 --> 00:08:27.834 +you can do programmatically with Elisp. + +00:08:27.834 --> 00:08:30.217 +So this might be a good example for +beginners. + +00:08:30.217 --> 00:08:33.919 +If you haven't done any Elisp yet, + +00:08:33.919 --> 00:08:39.557 +a simple example is to create this div +output here. + +00:08:39.557 --> 00:08:41.581 +You can use this with-temp-buffer, + +00:08:41.581 --> 00:08:44.240 +so basically creating an imaginary +buffer. + +00:08:44.240 --> 00:08:45.945 +insert is just like typing, + +00:08:45.945 --> 00:08:48.800 +so you put strings in, +you put new lines in, + +00:08:48.800 --> 00:08:50.959 +you can build some strings together. + +00:08:50.959 --> 00:08:53.551 +Here you can see I'm doing a random +number, + +00:08:53.551 --> 00:08:55.360 +so every time I execute this, + +00:08:55.360 --> 00:08:56.790 +my content changes. + +00:08:56.790 --> 00:09:03.685 +I can generate dynamic content in HTML +blocks with Elisp. + +00:09:03.685 --> 00:09:06.493 +For my web page builder, it's a little +more complex. + +00:09:06.493 --> 00:09:08.000 +I'm pulling data out + +00:09:08.000 --> 00:09:12.080 +using EMMS data structures, + +00:09:12.080 --> 00:09:16.080 +so it's pulling that out from +the track data. + +00:09:16.080 --> 00:09:19.440 +And then I'm using some program to + +00:09:19.440 --> 00:09:21.440 +generate list elements, so each track is + +00:09:21.440 --> 00:09:24.086 +going to have the title and +track number, + +00:09:24.086 --> 00:09:25.869 +and then a button for playing it, + +00:09:25.869 --> 00:09:28.206 +plus the source of the audio file, + +00:09:28.206 --> 00:09:30.480 +which will get added here. + +00:09:30.480 --> 00:09:32.485 +Right now, this is hard coded for Opus, + +00:09:32.485 --> 00:09:37.200 +so it won't work for my MP3s. + +00:09:37.200 --> 00:09:38.867 +I'm going to skip over snippets. + +00:09:38.867 --> 00:09:42.017 +Turns out format strings were good +enough for me. + +00:09:42.017 --> 00:09:45.035 +Snippets could be useful, + +00:09:45.035 --> 00:09:47.267 +but format is super powerful, + +00:09:47.267 --> 00:09:49.839 +and I didn't really even need +all that much power, + +00:09:49.839 --> 00:09:52.187 +basically, just doing string +interpolation. + +00:09:52.187 --> 00:09:54.560 +So if you haven't seen format before, + +00:09:54.560 --> 00:09:56.720 +you basically put these control strings + +00:09:56.720 --> 00:09:59.120 +or control characters inside of a string, + +00:09:59.120 --> 00:10:05.040 +and you can generate an output string +that you want. + +00:10:05.040 --> 00:10:07.344 +So in my generator code, basically, + +00:10:07.344 --> 00:10:08.720 +it's down here, + +00:10:08.720 --> 00:10:12.800 +I'm calling format with this Bard +Bivou(m)acs template, + +00:10:12.800 --> 00:10:17.491 +and that's basically a big string of +HTML. + +00:10:17.491 --> 00:10:21.200 +It's just my whole page of HTML + +00:10:21.200 --> 00:10:24.399 +with those control characters in just +four places. + +00:10:24.399 --> 00:10:26.399 +One of them populates the track list. + +00:10:26.399 --> 00:10:29.760 +That's really the meat of the program. + +00:10:29.760 --> 00:10:34.746 +Again, this is a combination of using +buffer scripting, using HTML mode, + +00:10:34.746 --> 00:10:37.279 +inserting text format strings, + +00:10:37.279 --> 00:10:39.251 +and then I can indent-region + +00:10:39.251 --> 00:10:41.920 +so the HTML actually looks pretty + +00:10:41.920 --> 00:10:45.200 +when it comes out of it as well. + +00:10:45.200 --> 00:10:54.000 +I will show that, just really quick +actually. + +00:10:54.000 --> 00:10:57.540 +So you can see, this is the HTML that +got generated. + +00:10:57.540 --> 00:10:58.800 +I've got my template. + +00:10:58.800 --> 00:11:02.193 +I inserted the title here, the style, + +00:11:02.193 --> 00:11:05.760 +the font was all inserted, + +00:11:05.760 --> 00:11:07.920 +and then this whole list of of tracks here. + +00:11:07.920 --> 00:11:11.200 +It's kind of messy to look at, + +00:11:11.200 --> 00:11:14.399 +but this track list, this whole div here, + +00:11:14.399 --> 00:11:22.480 +is all generated by my generator code, +and it works. It's great. + +00:11:22.480 --> 00:11:27.120 +Okay, moving on. + +00:11:27.120 --> 00:11:30.945 +So the other thing was that as I was +developing this, + +00:11:30.945 --> 00:11:32.547 +I decided to use Org Babel + +00:11:32.547 --> 00:11:35.588 +and some of its features for +multi-language things + +00:11:35.588 --> 00:11:37.839 +because I needed to style it with CSS + +00:11:37.839 --> 00:11:39.835 +and put actions in Javascript, + +00:11:39.835 --> 00:11:42.480 +and also I used SVG for authoring stuff. + +00:11:42.480 --> 00:11:46.079 +It was a little bit complicated. + +00:11:46.079 --> 00:11:47.484 +It probably would have been simpler + +00:11:47.484 --> 00:11:48.680 +had I not used Org Babel, + +00:11:48.680 --> 00:11:49.894 +but it's also really fun. + +00:11:49.894 --> 00:11:53.663 +I think it's a cool, cool idea to use +literate programming. + +00:11:53.663 --> 00:11:57.001 +My idea was to create HTML +components. + +00:11:57.001 --> 00:11:59.519 +I could name it like this, + +00:11:59.519 --> 00:12:00.959 +put a format string inside it, + +00:12:00.959 --> 00:12:02.800 +and build a function + +00:12:02.800 --> 00:12:04.302 +in Elisp to format it + +00:12:04.302 --> 00:12:07.120 +and spit out the HTML that I want. + +00:12:07.120 --> 00:12:09.581 +By doing this, then, + +00:12:09.581 --> 00:12:12.388 +I can just change things in my Org file, + +00:12:12.388 --> 00:12:14.814 +which, not getting a whole lot of time +to work on it, + +00:12:14.814 --> 00:12:16.615 +I can come back to it + +00:12:16.615 --> 00:12:19.335 +and I have a lot of notes. + +00:12:19.335 --> 00:12:21.695 +I can kind of generate things as I'm +going + +00:12:21.695 --> 00:12:24.399 +and keep notes for myself, +and keep the... + +00:12:24.399 --> 00:12:25.308 +I don't know. It's cool. + +00:12:25.308 --> 00:12:26.672 +Literate programming is fun. + +00:12:26.672 --> 00:12:27.519 +So I don't need to + +00:12:27.519 --> 00:12:29.279 +go into that too much, but you can see if + +00:12:29.279 --> 00:12:31.040 +I execute this here, + +00:12:31.040 --> 00:12:32.983 +I get the the div that I want. + +00:12:32.983 --> 00:12:34.013 +It's a little bit funny. + +00:12:34.013 --> 00:12:35.786 +You'll see I have the string like this, + +00:12:35.786 --> 00:12:40.000 +the way that noweb expands, I can't do +this on a single line. + +00:12:40.000 --> 00:12:43.839 +It looks funny when you do that, + +00:12:43.839 --> 00:12:45.931 +so that might be something +to work out later. + +00:12:45.931 --> 00:12:48.959 +CSS blocks can either be tangled out + +00:12:48.959 --> 00:12:52.639 +and referenced in the HTML source, +or inlined. + +00:12:52.639 --> 00:12:54.639 +Here's an example I have of inlining it. + +00:12:54.639 --> 00:12:57.609 +So I've got my little CSS block +named style, + +00:12:57.609 --> 00:13:00.320 +Javascript named script, + +00:13:00.320 --> 00:13:03.040 +and then I've got this HTML source block + +00:13:03.040 --> 00:13:04.839 +with noweb expansion. + +00:13:04.839 --> 00:13:07.920 +These double angle brackets here + +00:13:07.920 --> 00:13:09.396 +are where I'm going to expand + +00:13:09.396 --> 00:13:12.639 +the block named style. I'm actually +calling a function, + +00:13:12.639 --> 00:13:14.737 +so I want the result of the +function here, + +00:13:14.737 --> 00:13:18.881 +and then the script will just get +expanded here. + +00:13:18.881 --> 00:13:22.959 +So org-babel-expand-src-block, + +00:13:22.959 --> 00:13:25.360 +you can see what it looks like. + +00:13:25.360 --> 00:13:28.160 +I've got my style here. I've got my title. + +00:13:28.160 --> 00:13:31.279 +I've got that main content class I +showed before, + +00:13:31.279 --> 00:13:34.480 +and the script as well. +So that's kind of cool. + +00:13:34.480 --> 00:13:37.527 +I could just run org-babel-tangle and +get my thing out + +00:13:37.527 --> 00:13:40.480 +and just edit one file instead of +multiple files. + +00:13:40.480 --> 00:13:46.455 +Not for everyone, but I thought it was +kind of fun. All right. + +00:13:46.455 --> 00:13:48.807 +Oh, and the final thing is +that in Emacs, + +00:13:48.807 --> 00:13:51.320 +you can author and view SVG. + +00:13:51.320 --> 00:13:58.297 +So this is just an Org. This SVG, I used +to make the play and pause buttons. + +00:13:58.297 --> 00:13:59.519 +I didn't know this, + +00:13:59.519 --> 00:14:02.162 +but if you edit an SVG file, + +00:14:02.162 --> 00:14:08.800 +you can toggle back and forth + +00:14:08.800 --> 00:14:13.199 +between the code and the image. + +00:14:13.199 --> 00:14:17.360 +It's pretty sweet. So I can iteratively + +00:14:17.360 --> 00:14:20.560 +work through this +because of how Emacs is. + +00:14:20.560 --> 00:14:24.959 +Final considerations here, + +00:14:24.959 --> 00:14:26.247 +like when doing this, + +00:14:26.247 --> 00:14:27.606 +I want it to be all free, + +00:14:27.606 --> 00:14:30.079 +so I want to use fonts that use a free +license. + +00:14:30.079 --> 00:14:32.800 +I found GNU Unifont. It's kind of cool. + +00:14:32.800 --> 00:14:34.333 +The content license... + +00:14:34.333 --> 00:14:37.600 +I chose Creative Commons Attribution +ShareAlike, + +00:14:37.600 --> 00:14:39.920 +which is kind of like the GPL. + +00:14:39.920 --> 00:14:42.663 +Ideally, I could serve it with Emacs. + +00:14:42.663 --> 00:14:46.320 +I'd like to remove idiosyncrasy so other +people can use it. + +00:14:46.320 --> 00:14:48.720 +It's pretty much just my tool right now. + +00:14:48.720 --> 00:14:50.734 +Not requiring the web browser... + +00:14:50.734 --> 00:14:56.648 +I can ship playlists so that you can +just click or link to a playlist + +00:14:56.648 --> 00:15:00.068 +on your favorite player, even EMMS if +you want, + +00:15:00.068 --> 00:15:04.320 +and then packing up those albums in like +a ZIP or .tar file. + +00:15:04.320 --> 00:15:08.639 +So you can go to churls.world . + +00:15:08.639 --> 00:15:10.644 +It just has a link to this album. + +00:15:10.644 --> 00:15:14.000 +I'll display it here in just a second. + +00:15:14.000 --> 00:15:17.519 +You can contact me. I'm shoshin on #emacs + +00:15:17.519 --> 00:15:21.040 +in IRC and on sourcehut. You can email me: + +00:15:21.040 --> 00:15:23.680 +grant@churls.world, personal, or + +00:15:23.680 --> 00:15:26.800 +grant@unabridgedsoftware.com. +All right, now. + +00:15:26.800 --> 00:15:32.079 +Let's see about this... + +00:15:32.079 --> 00:15:34.316 +This is up online, so if you +want to listen + +00:15:34.316 --> 00:15:39.199 +to my college band's album from +20 years ago, + +00:15:39.199 --> 00:15:43.040 +here it is: Cassiopeia Basement Days. + +00:15:43.040 --> 00:15:46.887 +Whoops. I made this art in Krita. + +00:15:46.887 --> 00:15:51.199 +You can press play. You can skip around. + +00:15:51.199 --> 00:15:55.040 +I do have the playlist up here too. + +00:15:55.040 --> 00:15:58.560 +So yeah, thanks for listening. + +00:15:58.560 --> 00:16:07.360 +I hope you enjoyed it, and enjoy the +rest of EmacsConf. Goodbye! diff --git a/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt new file mode 100644 index 00000000..4d7bfede --- /dev/null +++ b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt @@ -0,0 +1,719 @@ +WEBVTT + +00:00:03.360 --> 00:00:07.440 +So first question, what does +Bard Bivou(m)acs mean? Good question. + +00:00:07.440 --> 00:00:10.800 +In one version of my talk, I spent too +long explaining it, + +00:00:10.800 --> 00:00:14.559 +and decided to cut it out. + +00:00:14.559 --> 00:00:20.960 +It's basically a bad pun on band camp. + +00:00:20.960 --> 00:00:22.480 +A bivouac--I don't even know if I'm + +00:00:22.480 --> 00:00:25.199 +pronouncing that correctly--it's like + +00:00:25.199 --> 00:00:29.199 +a tent or a camp that you put up hastily, + +00:00:29.199 --> 00:00:32.239 +and a bard is a musician, of course. + +00:00:32.239 --> 00:00:36.480 +Yeah, I don't know. I like puns. I'm a dad. + +00:00:36.480 --> 00:00:40.960 +That's the best I could come up with. + +00:00:40.960 --> 00:00:42.879 +I'll probably find a different name for + +00:00:42.879 --> 00:00:45.039 +it but I liked that "bivoaucs," + +00:00:45.039 --> 00:00:48.719 +if you stick an m in there, it becomes +Bivou(m)acs. + +00:00:48.719 --> 00:01:00.160 +It's kind of like editor macros for +generating some HTML. + +00:01:00.160 --> 00:01:07.782 +Yes, it is confusing, chatting on IRC at +the same time. Great question. + +00:01:07.782 --> 00:01:11.398 +(Amin: Grant, so right now, you're +sharing your screen. + +00:01:11.398 --> 00:01:14.479 +Are you planning on showing something +with it, or for example, + +00:01:14.479 --> 00:01:16.036 +should I maximize you?) + +00:01:16.036 --> 00:01:20.400 +I don't know. I can turn it off for now. +Okay. + +00:01:20.400 --> 00:01:22.299 +(Amin: You can turn on the webcam.) + +00:01:22.299 --> 00:01:22.880 +Yeah, okay. + +00:01:22.880 --> 00:01:25.694 +(Amin: I'll maximize your webcam.) + +00:01:25.694 --> 00:01:28.240 +Okay, thanks. + +00:01:28.240 --> 00:01:30.000 +I'll get to the answer for my color + +00:01:30.000 --> 00:01:31.360 +theme here in a bit in IRC. + +00:01:31.360 --> 00:01:35.105 +Next question on the Etherpad, + +00:01:35.105 --> 00:01:38.479 +does this metadata workflow also support + +00:01:38.479 --> 00:01:41.360 +unsynchronized lyrics within ID3 tags, + +00:01:41.360 --> 00:01:42.720 +multi-line metadata? + +00:01:42.720 --> 00:01:45.920 +I don't know, actually. + +00:01:45.920 --> 00:01:47.920 +It's funny because I was trying out + +00:01:47.920 --> 00:01:49.280 +different things with metadata, + +00:01:49.280 --> 00:01:52.640 +and really the biggest thing was to + +00:01:52.640 --> 00:01:55.360 +figure out how to do mass tag editing. + +00:01:55.360 --> 00:01:56.399 +And that was like... + +00:01:56.399 --> 00:01:59.600 +It wasn't very intuitive, like I said, +with EMMS. + +00:01:59.600 --> 00:02:03.040 +I think EMMS is really great, but its +interface is huge. + +00:02:03.040 --> 00:02:07.040 +like if you do M-x and type emms, +you get, + +00:02:07.040 --> 00:02:10.160 +I don't know, 270-some candidates. + +00:02:10.160 --> 00:02:13.200 +There's a lot of functions going on. + +00:02:13.200 --> 00:02:18.879 +I basically found the features that I +needed to get this workflow working. + +00:02:18.879 --> 00:02:22.160 +I would guess that you probably can do +it, and if you don't, + +00:02:22.160 --> 00:02:24.026 +if you can't do it out of the box, + +00:02:24.026 --> 00:02:28.160 +I think you could script EMMS +to do that. + +00:02:28.160 --> 00:02:33.268 +I'd like to know more, and I'm certainly +going to be investigating it. + +00:02:33.268 --> 00:02:39.519 +I will try and post my findings +somewhere online. + +00:02:39.519 --> 00:02:42.080 +Is it possible to import batch metadata? + +00:02:42.080 --> 00:02:46.496 +I'm not sure. I would guess yes is the +answer. + +00:02:46.496 --> 00:02:50.712 +EMMS can connect to metadata services. + +00:02:50.712 --> 00:02:53.040 +I haven't done that because I was just + +00:02:53.040 --> 00:02:56.959 +using audio files that I created myself. + +00:02:56.959 --> 00:03:00.165 +I know that on the back end, it calls out + +00:03:00.165 --> 00:03:02.319 +to shell programs for tagging things. + +00:03:02.319 --> 00:03:06.165 +There's a lot of different options that can +shell out too. + +00:03:06.165 --> 00:03:12.239 +I was using the vorbis tools to tag the +particular files I was working with. + +00:03:12.239 --> 00:03:15.840 +You can also use tiny tag, and there's +some other... + +00:03:15.840 --> 00:03:17.498 +That might be the python library. + +00:03:17.498 --> 00:03:20.971 +I can't remember. There's two other +libraries that I can shell out to + +00:03:20.971 --> 00:03:24.400 +for doing metadata. + +00:03:24.400 --> 00:03:26.400 +My current workflow for tagging music is + +00:03:26.400 --> 00:03:29.040 +to first apply replay gain in fubar 2000, + +00:03:29.040 --> 00:03:31.119 +fix egregious mistakes, + +00:03:31.119 --> 00:03:35.118 +use beats to apply metadata from music +brains or discogs, + +00:03:35.118 --> 00:03:38.400 +go over remaining albums with fubar 2000 +again. + +00:03:38.400 --> 00:03:43.280 +Is there a chance textual tagging +could allow doing it all in one program? + +00:03:43.280 --> 00:03:46.400 +Have I experimented with mass tag +update queries? + +00:03:46.400 --> 00:03:47.280 +I have not. + +00:03:47.280 --> 00:03:49.120 +Again, I was just doing this workflow, + +00:03:49.120 --> 00:03:54.799 +taking raw files with no tags and doing that. + +00:03:54.799 --> 00:03:58.159 +I believe because it calls out to + +00:03:58.159 --> 00:04:00.811 +the programs in the back end, + +00:04:00.811 --> 00:04:03.040 +I'm sure you could work that out. + +00:04:03.040 --> 00:04:06.159 +I think EMMS would benefit from + +00:04:06.159 --> 00:04:08.239 +having something like that because + +00:04:08.239 --> 00:04:11.280 +we work with text, and being able + +00:04:11.280 --> 00:04:14.000 +to use Emacs as a front end for those + +00:04:14.000 --> 00:04:16.647 +updates would be really fantastic. + +00:04:16.647 --> 00:04:18.560 +So really, it's just a matter of + +00:04:18.560 --> 00:04:22.720 +writing the interface to the external tool. + +00:04:22.720 --> 00:04:24.560 +Is there a link to some info expanding + +00:04:24.560 --> 00:04:28.479 +philosophy of how to compensate +musicians? + +00:04:28.479 --> 00:04:31.199 +No, I don't really have a lot of + +00:04:31.199 --> 00:04:32.052 +philosophy around that. + +00:04:32.052 --> 00:04:33.919 +I guess the first thing +I could say would be + +00:04:33.919 --> 00:04:36.378 +something like a universal income. + +00:04:36.378 --> 00:04:38.960 +I feel like that would solve +a lot of problems, + +00:04:38.960 --> 00:04:41.772 +if musicians could just be musicians + +00:04:41.772 --> 00:04:44.742 +and not have to worry about their pay. + +00:04:44.742 --> 00:04:46.240 +I will think about it more. + +00:04:46.240 --> 00:04:52.015 +This is one of my first forays into +getting public with some of these ideas, + +00:04:52.015 --> 00:04:53.360 +so I will try to do more + +00:04:53.360 --> 00:04:55.187 +and let the community know. + +00:04:55.187 --> 00:04:57.199 +What Emacs theme am I using? + +00:04:57.199 --> 00:05:02.240 +Can't remember. It's one of the Kaolin themes. + +00:05:02.240 --> 00:05:05.680 +I think it was Aurora + +00:05:05.680 --> 00:05:09.120 +or Bubble Gum, maybe, but the + +00:05:09.120 --> 00:05:12.880 +Kaolin themes are nice. I recommend them. + +00:05:12.880 --> 00:05:16.000 +Not using Doom Emacs, Doom mode line though. + +00:05:16.000 --> 00:05:17.296 +It's very pretty. + +00:05:17.296 --> 00:05:20.080 +SVG support built into Emacs? + +00:05:20.080 --> 00:05:25.520 +I'm using Emacs 27.1, and yes, SVG +support is built in. + +00:05:25.520 --> 00:05:30.639 +I may have had to compile it with some +Cairo support. + +00:05:30.639 --> 00:05:33.840 +I don't remember for sure. + +00:05:33.840 --> 00:05:41.199 +But yes, you can even take screenshots +of your Emacs from within Emacs, in SVG. + +00:05:41.199 --> 00:05:44.320 +It's pretty great. + +00:05:44.320 --> 00:05:46.160 +I don't know how much more time we have + +00:05:46.160 --> 00:05:48.000 +left for questions. + +00:05:48.000 --> 00:05:52.639 +That's most of the things on the etherpad. + +00:05:52.639 --> 00:05:54.320 +(Amin: I think we have like 10 more minutes to + +00:05:54.320 --> 00:05:56.479 +catch up with the schedule. + +00:05:56.479 --> 00:05:59.120 +If there are more questions, + +00:05:59.120 --> 00:06:01.919 +feel free to answer them.) + +00:06:01.919 --> 00:06:05.440 +I'll start looking through IRC. + +00:06:05.440 --> 00:06:09.680 +(Amin: And keep an eye on the pad too.) + +00:06:09.680 --> 00:06:12.688 +Thank you all for listening + +00:06:12.688 --> 00:06:19.440 +and for enjoying the talk. I'm glad it +turned out well. + +00:06:19.440 --> 00:06:36.000 +Awesome. Yeah, it's been fun so far. + +00:06:36.000 --> 00:06:40.015 +How did I manage? I can post +a snippet of that, + +00:06:40.015 --> 00:06:46.319 +or actually I can share my screen, +can't I... + +00:06:46.319 --> 00:06:49.599 +Okay. I actually have it up right here. + +00:06:49.599 --> 00:06:53.440 +So I think I got this from alphapapa, to +be honest. + +00:06:53.440 --> 00:07:00.960 +I define screenshot-svg. + +00:07:00.960 --> 00:07:04.960 +It's an interactive command. Oh yeah, +there's alphapapa. + +00:07:04.960 --> 00:07:08.560 +Okay, there we go. + +00:07:08.560 --> 00:07:13.249 +I would like to change this so that I +can get it into the copy-paste buffer + +00:07:13.249 --> 00:07:20.560 +so I don't have to copy the file in, but +I haven't really hacked on it yet. + +00:07:20.560 --> 00:07:24.400 +Okay, org heading colors. + +00:07:24.400 --> 00:07:26.319 +That might be a good question. + +00:07:26.319 --> 00:07:33.199 +I know, the presentation... + +00:07:33.199 --> 00:07:35.520 +Sorry, it's hard to think and type at + +00:07:35.520 --> 00:07:36.479 +the same time. + +00:07:36.479 --> 00:07:41.680 +Think and talk and type. + +00:07:41.680 --> 00:07:45.120 +So the presentation is just a + +00:07:45.120 --> 00:07:48.960 +normal org file, right, so I have my headers, + +00:07:48.960 --> 00:07:50.466 +and the author--you can even stick + +00:07:50.466 --> 00:07:52.560 +your email and other headers in there. + +00:07:52.560 --> 00:07:57.599 +But there's a package called org-tree-slide. + +00:07:57.599 --> 00:08:01.440 +Whoops, why is it not... + +00:08:01.440 --> 00:08:03.618 +I must have not required it. + +00:08:03.618 --> 00:08:04.594 +Good question. + +00:08:04.594 --> 00:08:09.599 +(Amin: Grant, can you try sharing your +screen maybe?) + +00:08:09.599 --> 00:08:13.199 +Oh, is it not shared? I'm sorry. + +00:08:13.199 --> 00:08:17.039 +(Amin: Thank you.) + +00:08:17.039 --> 00:08:22.000 +There we go, should be coming up. + +00:08:22.000 --> 00:08:26.720 +(Amin: It's coming up. Yep, we see it.) + +00:08:26.720 --> 00:08:38.800 +Awesome. All right. Okay. I don't know +why this isn't working. + +00:08:38.800 --> 00:08:56.080 +It was working. + +00:08:56.080 --> 00:09:01.839 +Okay, you want to see the screenshot. + +00:09:01.839 --> 00:09:06.839 +Whoops. Okay, I just took a screenshot. + +00:09:06.839 --> 00:09:09.760 +So, org-tree-slide. + +00:09:09.760 --> 00:09:12.800 +I don't know why it's not launching. + +00:09:12.800 --> 00:09:16.000 +I thought that I had required it, but I +must not have. + +00:09:16.000 --> 00:09:30.959 +Maybe I'll try. Okay. + +00:09:30.959 --> 00:09:34.560 +So there we go. So org-tree-slide is a +way that basically uses + +00:09:34.560 --> 00:09:38.880 +narrowing and some kind of font tricks to... + +00:09:38.880 --> 00:09:42.640 +it changes your titles +or your metadata into + +00:09:42.640 --> 00:09:44.560 +this banner for the title here, + +00:09:44.560 --> 00:09:46.560 +and it automatically sets the +faces for you. + +00:09:46.560 --> 00:09:53.938 +You can customize that, of course. And +then, as you go through the Org file, + +00:09:53.938 --> 00:09:59.600 +you get these kind of nice animations +and-- + +00:09:59.600 --> 00:10:04.160 +what's it called--breadcrumbs up at the top. + +00:10:04.160 --> 00:10:06.399 +So org-tree-slide. I highly recommend it. + +00:10:06.399 --> 00:10:10.024 +It's really nice because you can give +your presentation and practice it, + +00:10:10.024 --> 00:10:12.560 +and while you're practicing it, you can +edit things as well, + +00:10:12.560 --> 00:10:16.160 +because it's still just an Org document +using narrowing, you know. + +00:10:16.160 --> 00:10:20.079 +It doesn't actually change anything. + +00:10:20.079 --> 00:10:24.079 +Definitely recommend org-tree-slide mode. + +00:10:24.079 --> 00:10:29.760 +Okay, let's see, what else... + +00:10:29.760 --> 00:10:32.880 +Share my screen to demo. Oh, that's the SVG. + +00:10:32.880 --> 00:10:39.519 +Let's see. + +00:10:39.519 --> 00:10:41.279 +Okay, so I don't know if you can see this now, + +00:10:41.279 --> 00:10:49.360 +but I'm actually viewing the SVG +screenshot that I took with Emacs. + +00:10:49.360 --> 00:10:52.720 +See here's the source of it. So Emacs +made that. + +00:10:52.720 --> 00:10:58.160 +And here's the image. + +00:10:58.160 --> 00:11:01.570 +It's cool because you can even do it +again and again, + +00:11:01.570 --> 00:11:05.360 +and open more screenshots of +screenshots. + +00:11:05.360 --> 00:11:14.880 +Yeah, definitely Emacsception. +Fun stuff. + +00:11:14.880 --> 00:11:18.079 +Anything else in chat? + +00:11:18.079 --> 00:11:20.160 +Heading colors? Oh, yeah. I talked about the + +00:11:20.160 --> 00:11:24.800 +themes. This is another Kaolin theme. + +00:11:24.800 --> 00:11:34.959 +I think the one in the talk was +maybe this one, Aurora. + +00:11:34.959 --> 00:11:36.560 +Oh, here, there's something funny when + +00:11:36.560 --> 00:11:37.785 +you start org-tree-slide + +00:11:37.785 --> 00:11:38.880 +with a different theme. + +00:11:38.880 --> 00:11:41.823 +This top header bar gets the faces + +00:11:41.823 --> 00:11:43.395 +from that previous theme. + +00:11:43.395 --> 00:11:47.760 +I have not figured out how to +fix that yet. + +00:11:47.760 --> 00:11:49.200 +Did I have to compile to get the + +00:11:49.200 --> 00:11:51.120 +screenshot? I think maybe I did. + +00:11:51.120 --> 00:11:54.480 +Yes, if I'm remembering correctly. + +00:11:54.480 --> 00:11:58.399 +I got Emacs 27. I'm not on a Mac. + +00:11:58.399 --> 00:12:01.424 +I saw alphapapa's comment on reddit, + +00:12:01.424 --> 00:12:08.839 +and then I recompiled it with Cairo +support. + +00:12:08.839 --> 00:12:18.000 +Yes. + +00:12:18.000 --> 00:12:21.920 +Okay, lots of good conversation on here. + +00:12:21.920 --> 00:12:25.839 +Yep, I have like one or two more minutes. + +00:12:25.839 --> 00:12:34.240 +Okay. I guess while I'm here, I might as + +00:12:34.240 --> 00:12:36.993 +well say thank you to the organizers. + +00:12:36.993 --> 00:12:40.320 +I really appreciate everybody's +work on this. + +00:12:40.320 --> 00:12:42.720 +It's fun to be a part of this community. + +00:12:42.720 --> 00:12:45.929 +I'm enjoying the other talks I've seen +so far today, + +00:12:45.929 --> 00:12:48.560 +and I'm looking forward to +to the rest. + +00:12:48.560 --> 00:12:53.570 +It's really interesting, just from being +on Emacs in IRC for a few months, + +00:12:53.570 --> 00:12:54.720 +I've already connected + +00:12:54.720 --> 00:12:56.959 +with a lot of interesting people + +00:12:56.959 --> 00:13:04.079 +and have a lot of cool connections +already. + +00:13:04.079 --> 00:13:07.519 +(Amin: Thank you for being a part of the +community, Grant.) + +00:13:07.519 --> 00:13:08.883 +That's good to be here. + +00:13:08.883 --> 00:13:16.560 +I have another talk tomorrow as well. + +00:13:16.560 --> 00:13:18.399 +Oh, thanks for everyone in the Etherpad + +00:13:18.399 --> 00:13:21.680 +for putting more comments on these +questions here + +00:13:21.680 --> 00:13:29.360 +and taking the notes. + +00:13:29.360 --> 00:13:31.680 +(Amin: I think that's about all the time + +00:13:31.680 --> 00:13:33.040 +that we have for the Q&A. + +00:13:33.040 --> 00:13:36.720 +Okay. Thank you again so much, Grant, + +00:13:36.720 --> 00:13:39.920 +for your awesome talk and for popping in +for questions.) + +00:13:39.920 --> 00:13:46.800 +Yeah, thanks again for hosting. See you +later. Cheers! diff --git a/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt b/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt new file mode 100644 index 00000000..588cf43a --- /dev/null +++ b/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt @@ -0,0 +1,792 @@ +WEBVTT + +00:00:00.399 --> 00:00:02.683 +My name is Corwin Brust + +00:00:02.683 --> 00:00:08.960 +and I will be talking about getting +started with Emacs today. + +00:00:08.960 --> 00:00:11.448 +I have been an Emacs user for a long +time. + +00:00:11.448 --> 00:00:15.360 +First of all, thanks and a huge welcome +to the conference + +00:00:15.360 --> 00:00:22.400 +from me and and on behalf + +00:00:22.400 --> 00:00:24.368 +and back to the other people + +00:00:24.368 --> 00:00:26.080 +that have been helping to organize. + +00:00:26.080 --> 00:00:30.480 +It's been amazing just to be involved + +00:00:30.480 --> 00:00:36.399 +with that and just, kind of, see +backstage. + +00:00:36.399 --> 00:00:42.281 +So I've used a lot of different editors +in my time. + +00:00:42.281 --> 00:00:52.399 +That's about 25 years as a professional +software engineer. + +00:00:52.399 --> 00:00:54.247 +And most of that time I've been using +Emacs. + +00:00:54.247 --> 00:00:56.160 +I'll talk a little bit in a minute + +00:00:56.160 --> 00:01:00.960 +(if I can ever find my slides) + +00:01:00.960 --> 00:01:04.479 +about how I got into Emacs, + +00:01:04.479 --> 00:01:07.200 +but I think if you've used Emacs and a + +00:01:07.200 --> 00:01:10.240 +lot of other editors for a long time, + +00:01:10.240 --> 00:01:14.410 +something that you notice right away + +00:01:14.410 --> 00:01:18.560 +is that you get good with it in a way +that stays meaningful. + +00:01:18.560 --> 00:01:24.199 +You learn new things. Those things +stick with you. + +00:01:24.199 --> 00:01:33.759 +You learn how to make it do new tricks +and then keep doing those tricks. + +00:01:33.759 --> 00:01:39.439 +I want to mention that this +conference--oops, + +00:01:39.439 --> 00:01:44.829 +this talk isn't about how to adjust + +00:01:44.829 --> 00:01:46.802 +your configuration specifically. + +00:01:46.802 --> 00:01:50.000 +I don't have a bunch of good code +samples in here. + +00:01:50.000 --> 00:01:52.451 +There are other great talks at the +conference, + +00:01:52.451 --> 00:01:56.411 +particularly Andrew's, that I looked at, + +00:01:56.411 --> 00:01:59.920 +that looked like they might be more +aimed at that + +00:01:59.920 --> 00:02:02.240 +"hey, I'm just getting started with Emacs, + +00:02:02.240 --> 00:02:05.280 +what are some things to try to make + +00:02:05.280 --> 00:02:07.017 +it more comfortable for me starting?" + +00:02:07.017 --> 00:02:09.759 +This is about how to think about the +problem space. + +00:02:09.759 --> 00:02:13.337 +Hopefully, a good warm up as we start +thinking about + +00:02:13.337 --> 00:02:17.200 +some of the lightning talks a little +later on. + +00:02:17.200 --> 00:02:19.835 +I'm just gonna quickly make sure + +00:02:19.835 --> 00:02:21.789 +I can see my IRC buffer in case + +00:02:21.789 --> 00:02:25.680 +I run into time. I didn't get my +stopwatch started for this one. + +00:02:25.680 --> 00:02:29.680 +So all right, let's dive in. + +00:02:29.680 --> 00:02:33.840 +We assume that we want to +install packages + +00:02:33.840 --> 00:02:36.281 +and maybe configure some features. + +00:02:36.281 --> 00:02:38.319 +This is particularly from the +perspective of + +00:02:38.319 --> 00:02:39.120 +where we're working + +00:02:39.120 --> 00:02:40.541 +with a bunch of people on a team + +00:02:40.541 --> 00:02:42.160 +and we want to get something done. + +00:02:42.160 --> 00:02:44.800 +Some of us probably already have mature + +00:02:44.800 --> 00:02:46.560 +Emacs workflows. + +00:02:46.560 --> 00:02:53.519 +Others are installing it for the first +time. + +00:02:53.519 --> 00:02:57.889 +So the first question is, you know, in +that context: + +00:02:57.889 --> 00:02:59.784 +what's the value proposition? + +00:02:59.784 --> 00:03:01.532 +Why should I mess with my machine, + +00:03:01.532 --> 00:03:04.219 +my mature Emacs configuration, + +00:03:04.219 --> 00:03:09.815 +and impose my ideas over the way +somebody else is learning Emacs? + +00:03:09.815 --> 00:03:13.840 +Well, it can be.. I'm off my slides here +a little bit. + +00:03:13.840 --> 00:03:16.959 +It can be a little bit tricky + +00:03:16.959 --> 00:03:21.440 +to learn Emacs. One thing that +helps us a lot + +00:03:21.440 --> 00:03:24.720 +is if people that we're working with + +00:03:24.720 --> 00:03:27.301 +can tell us, kinda, keystroke for +keystroke at times, + +00:03:27.301 --> 00:03:30.480 +what to do and explain what everything +is doing. + +00:03:30.480 --> 00:03:35.840 +Using the same packages can really help +us working together on a project. + +00:03:35.840 --> 00:03:40.720 +Speaking from my personal experience, + +00:03:40.720 --> 00:03:42.959 +it took me decades to get to the point + +00:03:42.959 --> 00:03:45.226 +where I was excited to program +in Emacs Lisp. + +00:03:45.226 --> 00:03:47.840 +I've programmed in a lot of programming +languages, + +00:03:47.840 --> 00:03:50.252 +but Lisp wasn't on my list. + +00:03:50.252 --> 00:03:53.680 +I looked at my config that I was +copy-pasting around + +00:03:53.680 --> 00:03:57.279 +from generation after generation of +.emacs file, + +00:03:57.279 --> 00:04:00.799 +or recrafting it from hand and from +Internet searches, + +00:04:00.799 --> 00:04:03.519 +to get the things that I needed when + +00:04:03.519 --> 00:04:05.680 +I would quickly go install Emacs at some + +00:04:05.680 --> 00:04:07.680 +new job or contract, + +00:04:07.680 --> 00:04:14.016 +and be able to to quickly get through +that workflow + +00:04:14.016 --> 00:04:17.440 +that caused me to install the program. + +00:04:17.440 --> 00:04:24.049 +You know, just little simple one-liners +that got committed to memory + +00:04:24.049 --> 00:04:27.675 +over decades eventually just led me to a +sort of "hey what's going on here." + +00:04:27.675 --> 00:04:33.520 +And I credit Jeff Goff, my good friend +who died earlier in 2020, + +00:04:33.520 --> 00:04:37.759 +for my lifelong love of Emacs. + +00:04:37.759 --> 00:04:39.280 +Perhaps Erik and I will talk about that + +00:04:39.280 --> 00:04:42.000 +a little bit more in another talk we +have scheduled, + +00:04:42.000 --> 00:04:44.400 +but Jeff was a huge influence on us + +00:04:44.400 --> 00:04:46.027 +in a number of ways, + +00:04:46.027 --> 00:04:47.732 +and a huge contributor + +00:04:47.732 --> 00:04:54.840 +to the Raku programming language, +which is very cool. + +00:04:54.840 --> 00:05:00.153 +So, understanding how to make +a good decision + +00:05:00.153 --> 00:05:03.680 +about splitting up configuration in a +way to share it across + +00:05:03.680 --> 00:05:06.292 +people with really different uses of +Emacs... + +00:05:06.292 --> 00:05:08.546 +That's actually a complicated topic + +00:05:08.546 --> 00:05:12.639 +and I want to sort of back off and stare +at it for a second. + +00:05:12.639 --> 00:05:18.720 +I think Emacs is about people, so that +means it's about community. + +00:05:18.720 --> 00:05:24.960 +And community means we're going to +invite disagreement. + +00:05:24.960 --> 00:05:32.687 +In fact, that disagreement isn't +necessarily a road-block to our project. + +00:05:32.687 --> 00:05:37.759 +In fact, some of the work that a +community project can invite us to do + +00:05:37.759 --> 00:05:39.505 +is to get closer to each other + +00:05:39.505 --> 00:05:40.840 +by inviting those disagreements, + +00:05:40.840 --> 00:05:42.080 +by learning from them--learning from + +00:05:42.080 --> 00:05:46.880 +different people's styles and from how +they argue, + +00:05:46.880 --> 00:05:50.058 +and thinking about why they have that +perspective + +00:05:50.058 --> 00:05:53.227 +and what technical benefits + +00:05:53.227 --> 00:05:55.800 +that perhaps radical point of view might +carry away. + +00:05:55.800 --> 00:05:58.266 +Some people are really aggressive +arguers, + +00:05:58.266 --> 00:06:01.919 +and others are very passive and really + +00:06:01.919 --> 00:06:05.824 +couch their ideas in distancing terms, +to say, + +00:06:05.824 --> 00:06:07.906 +"well probably, this is a good idea" + +00:06:07.906 --> 00:06:12.479 +or "please double check me." + +00:06:12.479 --> 00:06:15.520 +Those don't always necessarily indicate + +00:06:15.520 --> 00:06:17.497 +how certain a person is, +because we're different. + +00:06:17.497 --> 00:06:19.520 +We have different ways of communicating + +00:06:19.520 --> 00:06:23.380 +ideas like certainty or excitement. + +00:06:24.560 --> 00:06:26.235 +When we think about a bunch of + +00:06:26.235 --> 00:06:30.000 +really diverse programmers +approaching Emacs, + +00:06:30.000 --> 00:06:36.479 +probably one of our first really big +challenges is just + +00:06:36.479 --> 00:06:40.085 +to pick what we're going +to go after. + +00:06:40.085 --> 00:06:49.599 +There are a lot of existing kit installs +and things like this. + +00:06:49.599 --> 00:06:54.400 +My argument is that you could actually +get pretty far + +00:06:54.400 --> 00:06:56.020 +just trading files around. + +00:06:56.020 --> 00:07:03.698 +Maybe the more valuable conversation +to have + +00:07:03.698 --> 00:07:06.080 +is making the hard decisions +about, well, + +00:07:06.080 --> 00:07:08.000 +"should we have vertical completion," + +00:07:08.000 --> 00:07:10.080 +should that be the out of the box, + +00:07:10.080 --> 00:07:11.759 +and the people that want + +00:07:11.759 --> 00:07:17.440 +the traditional splayed out over a +single line completion, + +00:07:17.440 --> 00:07:19.428 +for example in the mode line, + +00:07:19.428 --> 00:07:29.039 +those people are going to add a line of +config to their own setup? + +00:07:29.039 --> 00:07:30.979 +The way to get there? + +00:07:30.979 --> 00:07:33.344 +I mean, how do we find out what works? + +00:07:33.344 --> 00:07:38.587 +We don't want to slow down the people +that are super productive with Emacs + +00:07:38.587 --> 00:07:40.879 +by asking them to completely +break their workflows + +00:07:40.879 --> 00:07:42.560 +and make it easier for new folks. + +00:07:42.560 --> 00:07:48.673 +At the same time, we do want to make +sure those new people + +00:07:48.673 --> 00:07:52.720 +are excited by Emacs and not turned off +by having to learn + +00:07:52.720 --> 00:08:00.363 +the entire jungle of Emacs history in +the form of its unique + +00:08:00.363 --> 00:08:07.610 +technical stylings for things like +frames, buffers, + +00:08:07.610 --> 00:08:11.668 +and other unique Emacs viewpoints + +00:08:11.668 --> 00:08:16.240 +on important interface concepts, +especially. + +00:08:16.240 --> 00:08:19.520 +The encouragement here is to keep + +00:08:19.520 --> 00:08:21.680 +the initialization for a project team + +00:08:21.680 --> 00:08:23.280 +together as a crucible. + +00:08:23.280 --> 00:08:25.117 +Rather than necessarily following + +00:08:25.117 --> 00:08:33.279 +our defaults of finding the simplest +configurations + +00:08:33.279 --> 00:08:37.440 +that generally work and letting people +customize it, + +00:08:37.440 --> 00:08:40.479 +what if we tried to look + +00:08:40.479 --> 00:08:42.346 +for fairly specific configurations + +00:08:42.346 --> 00:08:44.159 +that we'll expect essentially all of our + +00:08:44.159 --> 00:08:46.320 +developers to be using, + +00:08:46.320 --> 00:08:52.839 +at least when they submit bug reports. + +00:08:52.839 --> 00:08:55.920 +In particular, with this, + +00:08:55.920 --> 00:08:59.839 +I think that degree of experimentation + +00:08:59.839 --> 00:09:02.584 +can drive back into the Emacs +development process. + +00:09:02.584 --> 00:09:04.800 +In the development mailing list... + +00:09:04.800 --> 00:09:15.120 +I'm hoping I'll get a timing cue here. + +00:09:15.120 --> 00:09:18.835 +In the context of Emacs development as a +greater entity, + +00:09:18.835 --> 00:09:20.959 +we see some of these struggles. + +00:09:20.959 --> 00:09:22.399 +Should we change this default? + +00:09:22.399 --> 00:09:27.146 +Sometimes we can have the sense that +defaults in Emacs will never change. + +00:09:27.146 --> 00:09:29.279 +The conversation is too difficult. + +00:09:29.279 --> 00:09:32.560 +I think one thing that can help us get +there is evidence + +00:09:32.560 --> 00:09:36.160 +that says, "hey my 30- to 40-person project + +00:09:36.160 --> 00:09:38.560 +is using this set of bindings, + +00:09:38.560 --> 00:09:40.111 +and here's what we learned + +00:09:40.111 --> 00:09:42.240 +about brand new Emacs users +trying to come in + +00:09:42.240 --> 00:09:46.800 +and get work done with that." + +00:09:46.800 --> 00:09:49.360 +(Amin: Yeah you still have + +00:09:49.360 --> 00:09:50.720 +a couple more minutes.) + +00:09:50.720 --> 00:09:51.984 +Oh, beautiful. Okay, great. + +00:09:51.984 --> 00:09:54.720 +I will try to get through my last few +slides that I cut + +00:09:54.720 --> 00:09:56.320 +in my last walkthrough, but I think I'm + +00:09:56.320 --> 00:09:58.320 +going quicker today, thank you. + +00:09:58.320 --> 00:10:02.000 +Thank you. + +00:10:02.000 --> 00:10:05.120 +So let's just recap real quick: + +00:10:05.120 --> 00:10:08.760 +in theory, Emacs works out of the box. + +00:10:08.760 --> 00:10:12.853 +That means we're free to experiment. + +00:10:12.853 --> 00:10:17.120 +We can throw it all away and start over. + +00:10:17.120 --> 00:10:26.000 +As an organizational principle... + +00:10:26.000 --> 00:10:30.079 +I don't know what I was thinking on that +slide, excuse me. + +00:10:30.079 --> 00:10:33.440 +Bringing it back around to the free + +00:10:33.440 --> 00:10:35.680 +and open source software community, + +00:10:35.680 --> 00:10:39.519 +our goal is to enable users + +00:10:39.519 --> 00:10:41.440 +to unlock their computers, to do as much + +00:10:41.440 --> 00:10:43.040 +with them as possible. + +00:10:43.040 --> 00:10:47.680 +That's the context to take with project +initialization, but sometimes + +00:10:47.680 --> 00:10:49.560 +it could make sense + +00:10:50.800 --> 00:10:52.032 +to put some gloves on. + +00:10:52.032 --> 00:10:53.766 +I've thrown up on the screen here + +00:10:53.766 --> 00:10:55.276 +just a couple of other ideas, + +00:10:55.276 --> 00:10:57.920 +ways to maybe think outside of the box. + +00:10:57.920 --> 00:11:01.440 +As you're putting together project nets, + +00:11:01.440 --> 00:11:05.519 +my words of encouragement are to +experiment with it, + +00:11:05.519 --> 00:11:09.941 +try different things, and think really +specifically + +00:11:09.941 --> 00:11:17.010 +about how different the development +users might be from each other + +00:11:17.010 --> 00:11:21.680 +as you define standards for configuring + +00:11:21.680 --> 00:11:23.519 +the user environment of Emacs + +00:11:23.519 --> 00:11:26.552 +specifically for developing on a +project. + +00:11:26.552 --> 00:11:29.120 +That's pretty much my talk. + +00:11:29.120 --> 00:11:32.959 +If there's any time, I would take a +couple questions. + +00:11:32.959 --> 00:11:36.480 +(Amin: Thank you for your +awesome talk, Corwin. + +00:11:36.480 --> 00:11:49.519 +I think we have one or two minutes for a +few questions. + +00:11:49.519 --> 00:11:52.000 +Do you have the pad open or would you + +00:11:52.000 --> 00:11:53.839 +like me to read the questions for you?) + +00:11:53.839 --> 00:11:58.000 +Corwin: Oh, I managed to close the pad + +00:11:58.000 --> 00:12:00.352 +and I am trying to open it again. + +00:12:00.352 --> 00:12:03.519 +All right, there it opened. + +00:12:03.519 --> 00:12:05.500 +Bringing it onto a screen where I can +see it. + +00:12:05.500 --> 00:12:09.360 +Will you read me the first question +while I drag windows around, please? + +00:12:09.360 --> 00:12:15.600 +(Amin: Sure. It says, "do you use Emacs +as a community building tool?") + +00:12:15.600 --> 00:12:19.760 +Do I use Emacs as a community building +tool, or how do I? + +00:12:19.760 --> 00:12:23.519 +(Amin: It just says do you.) Yes, absolutely. + +00:12:23.519 --> 00:12:29.920 +I think Emacs is an ambassador to the +GNU tool chain. + +00:12:29.920 --> 00:12:33.027 +I think that in the fullness of time, + +00:12:33.027 --> 00:12:36.558 +we will see an Emacs + +00:12:36.558 --> 00:12:43.760 +that makes iOS and Android and other +closed-source tools dream. + +00:12:43.760 --> 00:12:46.689 +That's why they mock us and call Emacs + +00:12:46.689 --> 00:12:49.200 +an operating system. It's because + +00:12:49.200 --> 00:12:51.440 +it could be, if we cared for it to be. + +00:12:51.440 --> 00:12:55.680 +It's quite a threatening product + +00:12:55.680 --> 00:12:57.440 +from the perspective of how many problem + +00:12:57.440 --> 00:12:58.540 +spaces it can address, + +00:12:58.540 --> 00:13:01.519 +how many types of users it can satisfy, + +00:13:01.519 --> 00:13:04.399 +the things that we can do to make + +00:13:04.399 --> 00:13:06.456 +it robust in those environments. + +00:13:06.456 --> 00:13:09.524 +I mean, we're always thinking about the +weak points, + +00:13:09.524 --> 00:13:14.639 +but is Emacs a community building tool? +Heck yeah. + +00:13:14.639 --> 00:13:18.480 +(Amin: There's like one or two more +questions. + +00:13:18.480 --> 00:13:22.480 +I think they're more long-form so it +might be better + +00:13:22.480 --> 00:13:26.880 +if you took them off stream so you could +keep the schedule on time.) + +00:13:26.880 --> 00:13:29.463 +I would love to take those questions +offline. + +00:13:29.463 --> 00:13:30.908 +I will respond to you + +00:13:30.908 --> 00:13:32.237 +in writing if we don't get to it + +00:13:32.237 --> 00:13:33.360 +in a breakout room. + +00:13:33.360 --> 00:13:35.451 +Thanks so much for joining us. + +00:13:35.451 --> 00:13:36.639 +I can't wait to see the rest of the + +00:13:36.639 --> 00:13:38.000 +conference. See you there! + +00:13:38.000 --> 00:13:42.800 +(Amin: Awesome. Thank you again so much, Corwin.) diff --git a/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt new file mode 100644 index 00000000..ebe18254 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt @@ -0,0 +1,353 @@ +WEBVTT + +00:00:00.080 --> 00:00:01.680 +(Amin: ... for the list of questions in whatever + +00:00:01.680 --> 00:00:03.520 +order you like.) + +00:00:03.520 --> 00:00:06.160 +Okay, so I see what package is used, + +00:00:06.160 --> 00:00:08.000 +probably symex-mode... + +00:00:08.000 --> 00:00:10.400 +Right. So the main package that was + +00:00:10.400 --> 00:00:11.360 +being demoed, + +00:00:11.360 --> 00:00:14.480 +that is not yet on MELPA. In fact, I + +00:00:14.480 --> 00:00:16.720 +haven't even decided on a name for it. + +00:00:16.720 --> 00:00:19.359 +I've alternately called + +00:00:19.359 --> 00:00:22.080 +it epistemic-mode, I've called it + +00:00:22.080 --> 00:00:26.000 +england, I called it + +00:00:26.000 --> 00:00:28.560 +all kinds of things, but at the moment + +00:00:28.560 --> 00:00:31.439 +you can find it on my Github. There's a link + +00:00:31.439 --> 00:00:32.960 +in the presentation itself, if you go to + +00:00:32.960 --> 00:00:35.600 +https://github.com/countvajhula, you'll see + +00:00:35.600 --> 00:00:38.879 +the package there. It's currently + +00:00:38.879 --> 00:00:39.840 +named Indra, but + +00:00:39.840 --> 00:00:42.879 +I'm not sure. (Organizer: Package is +called rigpa.) + +00:00:42.879 --> 00:00:46.800 +Actually, yes, the second one is + +00:00:46.800 --> 00:00:49.920 +correct. That was the name that I selected + +00:00:49.920 --> 00:00:53.280 +last night. That's because it... + +00:00:53.920 --> 00:00:55.760 +There's a concept in Tibetan Buddhism + +00:00:55.760 --> 00:00:57.520 +that seems like it might have something + +00:00:57.520 --> 00:00:58.480 +to do with + +00:00:58.480 --> 00:00:59.840 +the kinds of concepts we're talking + +00:00:59.840 --> 00:01:01.600 +about with this package, so I just + +00:01:01.600 --> 00:01:04.000 +thought it would be a good name for it. + +00:01:04.000 --> 00:01:05.760 +You can look up that concept + +00:01:05.760 --> 00:01:09.920 +and get a sense of it on Wikipedia. + +00:01:09.920 --> 00:01:13.119 +Next question is "how to deal with Dvorak + +00:01:13.119 --> 00:01:15.759 +or however that's pronounced. + +00:01:15.759 --> 00:01:16.960 +This has always bugged me. + +00:01:16.960 --> 00:01:20.400 +Is there an Xmodmap mode?" So the thing + +00:01:20.400 --> 00:01:22.400 +with this is it's kind of surprising, but + +00:01:22.400 --> 00:01:23.360 +although Vim + +00:01:23.360 --> 00:01:26.000 +was originally developed + +00:01:26.000 --> 00:01:27.200 +with the idea of + +00:01:27.200 --> 00:01:29.520 +the key bindings being on the home row, + +00:01:29.520 --> 00:01:32.000 +it turns out that that is actually not a + +00:01:32.000 --> 00:01:33.119 +major aspect + +00:01:33.119 --> 00:01:36.400 +of the Vim editing experience, so + +00:01:36.400 --> 00:01:38.560 +people who use the Dvorak layout + +00:01:38.560 --> 00:01:40.720 +actually end up using the same keys as + +00:01:40.720 --> 00:01:42.640 +they do on the normal QWERTY layout, so + +00:01:42.640 --> 00:01:44.720 +they don't remap anything, + +00:01:44.720 --> 00:01:48.159 +because + +00:01:48.159 --> 00:01:51.040 +the power that Vim--or the + +00:01:51.040 --> 00:01:52.240 +flexibility, the + +00:01:52.240 --> 00:01:55.600 +spiral that Vim enables on QWERTY-layout + +00:01:55.600 --> 00:01:56.880 +keyboards is exactly + +00:01:56.880 --> 00:01:58.719 +preserved, even on a Dvorak keyboard, + +00:01:58.719 --> 00:01:59.920 +even though your + +00:01:59.920 --> 00:02:01.920 +fingers are not in the same positions. + +00:02:01.920 --> 00:02:04.399 +It's not a big deal, actually. + +00:02:04.399 --> 00:02:09.119 +"I mostly use default model + +00:02:09.119 --> 00:02:10.879 +provided by vanilla Emacs and work and + +00:02:10.879 --> 00:02:12.319 +Org Mode for text editing. Can you give + +00:02:12.319 --> 00:02:13.840 +me some examples + +00:02:13.840 --> 00:02:15.920 +of how the user can use the concept of + +00:02:15.920 --> 00:02:17.280 +"mode of mode" + +00:02:17.280 --> 00:02:20.840 +to do some interesting editing? + +00:02:20.840 --> 00:02:24.640 +Probably the main thing would be + +00:02:25.120 --> 00:02:27.920 +the keystrokes would be less + +00:02:27.920 --> 00:02:28.959 +contrived. + +00:02:28.959 --> 00:02:32.080 +The fewer modes you have, + +00:02:32.080 --> 00:02:36.560 +the more modifiers you need + +00:02:36.560 --> 00:02:39.840 +in order to do whatever it is that + +00:02:39.840 --> 00:02:41.280 +you're trying to do, because you've got, + +00:02:41.280 --> 00:02:44.800 +essentially, with the Emacs model, you've got + +00:02:44.800 --> 00:02:48.080 +a completely flat + +00:02:48.080 --> 00:02:50.959 +keyboard structure. So all of the + +00:02:50.959 --> 00:02:52.160 +different things that you might + +00:02:52.160 --> 00:02:55.680 +want to express are all mapped to a flat + +00:02:55.680 --> 00:02:58.720 +keyboard, a set of keys. + +00:02:58.720 --> 00:03:02.840 +With this kind of + +00:03:02.840 --> 00:03:06.400 +modal structure, the more modes you have, + +00:03:06.400 --> 00:03:09.200 +the more the individual keystrokes + +00:03:09.200 --> 00:03:10.400 +become + +00:03:10.400 --> 00:03:13.200 +shorter and shorter. That could be one + +00:03:13.200 --> 00:03:14.959 +benefit that would be provided. + +00:03:14.959 --> 00:03:17.519 +With many modes, your keystrokes would + +00:03:17.519 --> 00:03:18.000 +generally + +00:03:18.000 --> 00:03:20.080 +be a single keystroke long for even + +00:03:20.080 --> 00:03:22.080 +relatively complex tasks, + +00:03:22.080 --> 00:03:24.159 +because you're setting the context + +00:03:24.159 --> 00:03:25.440 +beforehand. + +00:03:25.440 --> 00:03:27.200 +So you already say, "Oh, I'm going to be + +00:03:27.200 --> 00:03:30.840 +talking about this Org buffer + +00:03:30.840 --> 00:03:33.440 +agenda," and then + +00:03:33.440 --> 00:03:36.319 +all the keystrokes that you do at + +00:03:36.319 --> 00:03:39.599 +that point would be in relation to that. + +00:03:39.599 --> 00:03:42.159 +(Amin: I think we have time for like + +00:03:42.159 --> 00:03:44.080 +one more short question.) + +00:03:44.080 --> 00:03:46.879 +One more short question... Okay, let's see. + +00:03:46.879 --> 00:03:48.879 +"How do new modes come into existence?" You + +00:03:48.879 --> 00:03:50.400 +can make them yourself, + +00:03:50.400 --> 00:03:53.040 +and you can specify them in Emacs + +00:03:53.040 --> 00:03:53.760 +Lisp + +00:03:53.760 --> 00:03:56.159 +if you like, but there's also a simple way. + +00:03:56.159 --> 00:03:59.040 +You can also do it visually as we did. + +00:03:59.040 --> 00:04:02.720 +But yeah, defining them + +00:04:02.720 --> 00:04:04.799 +is essentially built on top of Hydra, but + +00:04:04.799 --> 00:04:07.519 +it could also be built on top of Evil or + +00:04:07.519 --> 00:04:09.120 +any other modal interface provider. + +00:04:09.120 --> 00:04:12.840 +There's an abstraction layer. + +00:04:12.840 --> 00:04:15.920 +(Amin: Okay. Thank you so much for your talk and + +00:04:15.920 --> 00:04:17.919 +for the live Q&A.) + +00:04:17.919 --> 00:04:21.440 +Sure, thank you. (Amin: Feel free to take + +00:04:21.440 --> 00:04:22.880 +up the rest of the questions either via + +00:04:22.880 --> 00:04:23.759 +IRC or + +00:04:23.759 --> 00:04:25.680 +on the pad on on your own time off the + +00:04:25.680 --> 00:04:26.960 +stream.) + +00:04:26.960 --> 00:04:28.639 +Perfect. Yeah, I'll go ahead and put in + +00:04:28.639 --> 00:04:30.000 +some answers there. + +00:04:30.000 --> 00:04:32.240 +(Amin: Awesome, thank you.) All right, thank you. + +00:04:32.240 --> 00:04:33.120 +Have a good one. + +00:04:33.120 --> 00:04:36.880 +(Amin: Thanks you too) diff --git a/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt new file mode 100644 index 00000000..8bb1e882 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt @@ -0,0 +1,1067 @@ +WEBVTT + +00:00:02.960 --> 00:00:04.644 +"Far away in the heavenly abode + +00:00:04.644 --> 00:00:06.560 +of the great god Indra, + +00:00:06.560 --> 00:00:07.688 +there is a wonderful net + +00:00:07.688 --> 00:00:10.160 +which has been hung +by some cunning artificer + +00:00:10.160 --> 00:00:12.080 +in such a manner that it stretches out + +00:00:12.080 --> 00:00:14.320 +infinitely in all directions. + +00:00:14.320 --> 00:00:16.938 +In accordance with the extravagant +tastes of deities, + +00:00:16.938 --> 00:00:18.240 +the artificer has hung + +00:00:18.240 --> 00:00:20.277 +a single glittering jewel + +00:00:20.277 --> 00:00:22.080 +in each eye of the net, + +00:00:22.080 --> 00:00:23.859 +and since the net itself is infinite, + +00:00:23.859 --> 00:00:26.480 +the jewels are infinite in number. + +00:00:26.480 --> 00:00:27.642 +There hang the jewels, + +00:00:27.642 --> 00:00:30.480 +glittering like stars in the first +magnitude, + +00:00:30.480 --> 00:00:32.681 +a wonderful sight to behold. + +00:00:32.681 --> 00:00:35.680 +Were we to select one of these jewels +for inspection, + +00:00:35.680 --> 00:00:38.216 +we would discover that in +its polished surface + +00:00:38.216 --> 00:00:39.520 +there are reflected + +00:00:39.520 --> 00:00:41.451 +all the other jewels in the net, + +00:00:41.451 --> 00:00:43.360 +infinite in number. + +00:00:43.360 --> 00:00:45.140 +If we look still more closely, + +00:00:45.140 --> 00:00:48.960 +we would see that each of the jewels +reflected in this one jewel + +00:00:48.960 --> 00:00:51.264 +reflects all the others." + +00:00:51.264 --> 00:00:54.000 +This is the metaphor of Indra's Net, + +00:00:54.000 --> 00:00:57.615 +which is told in some schools of +philosophy. + +00:00:57.615 --> 00:01:00.160 +Let's keep this metaphor in mind, + +00:01:00.160 --> 00:01:01.773 +because it'll help us understand + +00:01:01.773 --> 00:01:06.960 +the Emacs extension that we're about to +discuss. + +00:01:06.960 --> 00:01:12.810 +In editing text, there's two main +paradigms: + +00:01:12.810 --> 00:01:16.880 +one is editing at the ground level, + +00:01:16.880 --> 00:01:19.439 +where the characters that we type + +00:01:19.439 --> 00:01:22.159 +actually appear on the screen, + +00:01:22.159 --> 00:01:25.960 +the changes we make actually occur. + +00:01:28.479 --> 00:01:30.126 +The other editing paradigm + +00:01:30.126 --> 00:01:33.439 +is where we escape to a higher level + +00:01:33.439 --> 00:01:36.479 +and now the characters that we type are +not... + +00:01:36.479 --> 00:01:39.040 +They don't actually appear on the screen + +00:01:39.040 --> 00:01:42.748 +because we're not at the ground level +with the text, + +00:01:42.748 --> 00:01:44.799 +we are at a higher level + +00:01:44.799 --> 00:01:48.479 +looking down at the text + +00:01:48.479 --> 00:01:50.773 +and regarding the text, + +00:01:50.773 --> 00:01:56.159 +referring to this world of text in terms +of a language. + +00:01:56.159 --> 00:01:57.920 +For instance, we could describe this + +00:01:57.920 --> 00:02:03.404 +world as having words and paragraphs and +sentences and lines and so on. + +00:02:03.404 --> 00:02:05.985 +We could reason about this text + +00:02:05.985 --> 00:02:13.120 +in terms of these textual entities and +this textual language. + +00:02:13.120 --> 00:02:18.640 +This is the second paradigm of text +editing. + +00:02:18.640 --> 00:02:22.800 +When we're in the second paradigm, + +00:02:22.800 --> 00:02:25.304 +there is a way to go down to ground +level. + +00:02:25.304 --> 00:02:28.997 +You hit Enter now--or we'll hit Enter to +go down to the ground level, + +00:02:28.997 --> 00:02:30.480 +and you can hit Escape + +00:02:30.480 --> 00:02:33.200 +to go back out to the referential level. + +00:02:33.200 --> 00:02:35.200 +Enter to go down to ground level + +00:02:35.200 --> 00:02:40.160 +and Escape to go up to the +referential level. + +00:02:40.160 --> 00:02:47.565 +Now, in Vim, the nouns in this +world of text + +00:02:47.565 --> 00:02:52.319 +all share the same referential plane +which we call normal mode. + +00:02:52.319 --> 00:02:54.959 +So in normal mode, all of the nouns + +00:02:54.959 --> 00:02:57.360 +of the world of text are available, + +00:02:57.360 --> 00:03:00.959 +whether it's words or sentences or +paragraphs, + +00:03:00.959 --> 00:03:08.319 +and they all share this same referential +plane. + +00:03:08.319 --> 00:03:12.720 +They compete for space on the keyboard. + +00:03:12.720 --> 00:03:17.037 +An alternative way to structure these +modes is + +00:03:17.037 --> 00:03:21.840 +instead of having a single mode where +all the nouns coexist, + +00:03:21.840 --> 00:03:24.005 +peacefully or otherwise, + +00:03:24.005 --> 00:03:30.400 +you instead have a dedicated mode for +every noun. + +00:03:30.400 --> 00:03:32.540 +In that case, what happens is + +00:03:32.540 --> 00:03:35.440 +because your modal spaces are +now much smaller, + +00:03:35.440 --> 00:03:40.593 +you're just talking about words or +paragraphs or lines or something, + +00:03:40.593 --> 00:03:42.560 +the keys that you use + +00:03:42.560 --> 00:03:45.760 +can be much more targeted. + +00:03:45.760 --> 00:03:48.560 +You can use the same keystrokes + +00:03:48.560 --> 00:03:50.400 +in all of your modes and they would have + +00:03:50.400 --> 00:03:51.845 +the same ideas behind them, + +00:03:51.845 --> 00:03:53.280 +but they would have different effects + +00:03:53.280 --> 00:03:55.519 +depending on which context you're using. + +00:03:55.519 --> 00:03:59.120 +It's the same keystrokes, different +contexts. + +00:03:59.120 --> 00:04:04.244 +The advantage of that is it's often +easier to change context + +00:04:04.244 --> 00:04:07.888 +than it is to learn new key bindings. + +00:04:07.888 --> 00:04:11.289 +So let's see an example of how +that works. + +00:04:11.289 --> 00:04:14.039 +We go into character mode, and if you +look at the mode line + +00:04:14.039 --> 00:04:15.439 +at the bottom of the screen there, + +00:04:15.439 --> 00:04:18.720 +you'll see that we're in character mode. + +00:04:18.720 --> 00:04:21.955 +Now, when we move up, down, +left, and right, + +00:04:21.955 --> 00:04:23.919 +we're moving by character. + +00:04:23.919 --> 00:04:28.088 +We can also transform the text, + +00:04:28.088 --> 00:04:32.400 +and the transformations occur in terms +of character. + +00:04:32.400 --> 00:04:34.207 +You can also go into word mode. + +00:04:34.207 --> 00:04:40.000 +In word mode, the transformations that +you do are on words. + +00:04:40.000 --> 00:04:43.440 +and you try... Your movement is also in +terms of words. + +00:04:43.440 --> 00:04:46.560 +So that's the level of granularity that +you have. + +00:04:46.560 --> 00:04:49.191 +You could also go to line mode. + +00:04:49.191 --> 00:04:50.720 +When you're in line mode, + +00:04:50.720 --> 00:04:52.901 +you go up and down by line, + +00:04:52.901 --> 00:04:54.240 +and you can move lines + +00:04:54.240 --> 00:04:57.520 +up and down left and right and so on. + +00:04:59.120 --> 00:05:00.880 +The transformations you do are in + +00:05:00.880 --> 00:05:02.800 +terms of lines. + +00:05:02.800 --> 00:05:07.682 +You could also go to window mode, + +00:05:07.682 --> 00:05:11.695 +where now the objects that you're +referring to are windows. + +00:05:11.695 --> 00:05:15.578 +You can move spatially +amongst the windows + +00:05:15.578 --> 00:05:17.520 +or do transformations on the windows + +00:05:17.520 --> 00:05:20.850 +using the same keystrokes. + +00:05:25.360 --> 00:05:28.720 +So let's go to... + +00:05:28.720 --> 00:05:32.800 +Right. One of the things, + +00:05:32.800 --> 00:05:35.114 +the principles at play here + +00:05:35.114 --> 00:05:37.266 +is something called the +Rumpelstiltskin principle, + +00:05:37.266 --> 00:05:40.720 +which is something that's known in +computer science. + +00:05:40.720 --> 00:05:42.113 +If you can name something, + +00:05:42.113 --> 00:05:45.824 +then you have power over it. + +00:05:45.824 --> 00:05:48.560 +This is kind of an adaptation of that +principle + +00:05:48.560 --> 00:05:51.123 +which says that if you can name +something + +00:05:51.123 --> 00:05:52.572 +and if you can talk about it, + +00:05:52.572 --> 00:05:56.334 +then it's a noun in your editing +language. + +00:05:56.334 --> 00:05:58.960 +If it's a noun, then it has... + +00:05:58.960 --> 00:06:02.319 +It's a mode. So if we can talk about it, +it's a noun. + +00:06:02.319 --> 00:06:04.818 +If it's a noun, then it's a mode. + +00:06:04.818 --> 00:06:08.919 +One of the things we've been talking a +lot about is modes. + +00:06:08.919 --> 00:06:12.699 +In fact, by this principle, + +00:06:12.699 --> 00:06:17.280 +modes also should be a mode. + +00:06:17.280 --> 00:06:19.039 +You should have a mode that can reason + +00:06:19.039 --> 00:06:20.639 +in terms of modes as objects, + +00:06:20.639 --> 00:06:22.300 +just like you have modes + +00:06:22.300 --> 00:06:23.759 +where you can reason in terms of + +00:06:23.759 --> 00:06:26.560 +words or lines as objects. + +00:06:26.560 --> 00:06:30.479 +So let's do that. Let's go to mode mode. + +00:06:30.479 --> 00:06:34.000 +When you go to mode mode, you see that + +00:06:34.000 --> 00:06:35.915 +the objects that are depicted here + +00:06:35.915 --> 00:06:40.960 +are the modes that are present +in the buffer, + +00:06:40.960 --> 00:06:44.500 +which we knew about because + +00:06:44.500 --> 00:06:46.797 +the style of editing that we had +in this buffer + +00:06:46.797 --> 00:06:48.720 +was the Vim style of editing + +00:06:48.720 --> 00:06:51.143 +where there's an insert mode at the +ground level + +00:06:51.143 --> 00:06:53.039 +and a normal mode that +you can escape to. + +00:06:53.039 --> 00:06:57.280 +You insert, enter the ground level. + +00:06:57.280 --> 00:07:01.352 +Enter to the insert mode and escape to +normal mode. + +00:07:01.352 --> 00:07:04.647 +When you look at the mode mode +representation, + +00:07:04.647 --> 00:07:06.160 +you see that in fact that + +00:07:06.160 --> 00:07:10.479 +is the structure that's depicted. + +00:07:10.479 --> 00:07:14.080 +But in different situations, +you might find + +00:07:14.080 --> 00:07:16.080 +that these modes are not the + +00:07:16.080 --> 00:07:16.922 +ones that you want. + +00:07:16.922 --> 00:07:20.880 +You want something more tailored for the +specific application. + +00:07:20.880 --> 00:07:25.065 +For instance, if you're editing +Lisp code + +00:07:25.065 --> 00:07:27.360 +(or code in general, but + +00:07:27.360 --> 00:07:30.880 +Lisp code is a particular example), + +00:07:30.880 --> 00:07:32.640 +you might want to take advantage + +00:07:32.640 --> 00:07:34.852 +of the structure of the code. + +00:07:34.852 --> 00:07:37.599 +For Lisp code in particular, + +00:07:37.599 --> 00:07:40.960 +we have a mode called symex-mode + +00:07:40.960 --> 00:07:45.414 +which is able to reason about your code + +00:07:45.414 --> 00:07:47.919 +in terms of its tree structure. + +00:07:47.919 --> 00:07:52.397 +So you can use the same keystrokes: hjkl +goes left, right, up, and down, + +00:07:52.397 --> 00:07:58.080 +but you also have other keystrokes that +are more specialized to the application. + +00:07:58.080 --> 00:08:01.520 +You can run the code. + +00:08:01.520 --> 00:08:06.960 +We'll see that happen here in a minute. + +00:08:06.960 --> 00:08:12.240 +You can make changes to it +really quickly + +00:08:12.240 --> 00:08:18.000 +and see the effects of those changes. + +00:08:18.000 --> 00:08:19.440 +You're doing this all in a mode + +00:08:19.440 --> 00:08:22.625 +that's convenient for this particular +application, + +00:08:22.625 --> 00:08:25.039 +which is editing Lisp code, + +00:08:25.039 --> 00:08:28.960 +and that is, in this case, symex-mode. + +00:08:28.960 --> 00:08:31.631 +Typically, when you're editing code +like this, + +00:08:31.631 --> 00:08:33.435 +you'd want to be in insert mode + +00:08:33.435 --> 00:08:36.640 +actually typing out the code, + +00:08:36.640 --> 00:08:40.959 +and then you'd want to escape to symex +mode rather than normal mode, + +00:08:40.959 --> 00:08:42.021 +and then you could escape again + +00:08:42.021 --> 00:08:44.080 +and you'd end up in normal mode. + +00:08:44.080 --> 00:08:48.000 +So this, if we go to mode mode, we see +is depicted + +00:08:48.000 --> 00:08:51.040 +as this tower where insert is at the + +00:08:51.040 --> 00:08:52.604 +bottom and normal is at the top, + +00:08:52.604 --> 00:08:55.305 +but symex-mode is in between the two. + +00:08:55.305 --> 00:08:57.551 +You could also change that if you like. + +00:08:57.551 --> 00:08:59.566 +If you don't want symex-mode +to be there, + +00:08:59.566 --> 00:09:02.187 +you could just move it to the top. + +00:09:02.187 --> 00:09:04.392 +Now you find symex is at the top + +00:09:04.392 --> 00:09:06.160 +and you enter down to normal. + +00:09:06.160 --> 00:09:08.848 +You can see it on the status bar at the +bottom there. + +00:09:08.848 --> 00:09:13.839 +Enter to insert, escape to normal, +escape to symex. + +00:09:13.839 --> 00:09:16.344 +In fact, you can even add more modes + +00:09:16.344 --> 00:09:19.380 +if you don't like the existing ones. + +00:09:21.519 --> 00:09:23.839 +Now we have an additional mode here. + +00:09:23.839 --> 00:09:25.855 +We have window mode. It goes +down to symex, + +00:09:25.855 --> 00:09:27.519 +it goes down to normal. + +00:09:27.519 --> 00:09:29.919 +Enter the insert, escape to normal, + +00:09:29.919 --> 00:09:33.600 +escape to symex, escape to window. + +00:09:33.600 --> 00:09:41.232 +So we've talked... Okay, so another thing +actually to note here + +00:09:41.232 --> 00:09:45.360 +is that in editing modes, + +00:09:45.360 --> 00:09:46.486 +if you look at the mode line + +00:09:46.486 --> 00:09:48.399 +at the bottom of the screen, + +00:09:48.399 --> 00:09:50.257 +you'll see that we are currently, + +00:09:50.257 --> 00:09:51.519 +in this buffer, + +00:09:51.519 --> 00:09:54.560 +we are currently in line mode. + +00:09:54.560 --> 00:09:57.296 +I'm going to hit Enter now + +00:09:57.296 --> 00:09:59.119 +and you'll see that when I hit Enter, + +00:09:59.119 --> 00:10:00.627 +nothing is happening. + +00:10:00.627 --> 00:10:02.160 +It's still in line mode. + +00:10:02.160 --> 00:10:05.120 +If you hit Escape, it's still in line mode. + +00:10:05.120 --> 00:10:07.200 +You can find out the reason for that + +00:10:07.200 --> 00:10:10.640 +by taking another meta jump out of this. + +00:10:10.640 --> 00:10:12.800 +You'll see that, in fact, the reason + +00:10:12.800 --> 00:10:15.279 +is that we're currently in line mode, + +00:10:15.279 --> 00:10:17.360 +and line mode is the only one available + +00:10:17.360 --> 00:10:19.519 +in this tower + +00:10:19.519 --> 00:10:21.556 +for editing the modes that are + +00:10:21.556 --> 00:10:24.880 +in operation in your ground level. + +00:10:24.880 --> 00:10:26.898 +In fact, line mode is all you need +here, + +00:10:26.898 --> 00:10:32.796 +because this is just the nature of how +these modes are laid out is in rows. + +00:10:32.796 --> 00:10:36.399 +So line mode is the most appropriate +thing here. + +00:10:36.399 --> 00:10:39.740 +But you could change it to something +else if you like. + +00:10:40.959 --> 00:10:43.659 +Now we've seen two towers. + +00:10:43.659 --> 00:10:53.680 +We've seen the Vim tower and we've seen +also the symex tower, the Lisp tower. + +00:10:53.680 --> 00:10:58.880 +It turns out that, because we've been +talking about towers now, + +00:10:58.880 --> 00:11:06.399 +by the Rumpelstiltskin principle, towers +also can be talked about, + +00:11:06.399 --> 00:11:09.127 +and therefore they also are a mode. + +00:11:09.127 --> 00:11:11.200 +So how do we go to tower mode? + +00:11:11.200 --> 00:11:14.640 +The way we go to tower mode is + +00:11:14.640 --> 00:11:19.200 +we go in a slightly different direction, + +00:11:19.200 --> 00:11:23.360 +and we find that we are now in tower +mode. + +00:11:23.360 --> 00:11:29.279 +We see that there are many towers +available. We're now... + +00:11:29.279 --> 00:11:33.440 +We're seeing several possible towers + +00:11:33.440 --> 00:11:40.344 +that we have written to be available and +for use in different buffers. + +00:11:40.344 --> 00:11:42.110 +You can edit them on the fly. + +00:11:42.110 --> 00:11:46.630 +For instance, let's enter this tower. + +00:11:48.000 --> 00:11:50.180 +Now you see that in the bottom of +the... + +00:11:50.180 --> 00:11:51.519 +In the mode line, you see that we're + +00:11:51.519 --> 00:11:53.944 +going across all of these +different modes + +00:11:53.944 --> 00:11:56.480 +that were in the tower. + +00:11:56.480 --> 00:11:59.724 +You could escape and you could even move +things around. + +00:11:59.724 --> 00:12:00.880 +You could put window mode + +00:12:00.880 --> 00:12:02.573 +all the way at the bottom, + +00:12:02.573 --> 00:12:04.079 +right above insert mode. + +00:12:04.079 --> 00:12:06.479 +Let's see that happen. There it is, + +00:12:06.479 --> 00:12:10.444 +window is right above insert, and +so on. + +00:12:10.444 --> 00:12:14.240 +The tower always reflects your current +position, + +00:12:14.240 --> 00:12:17.600 +so if you're in buffer mode here and you +go down to line mode, + +00:12:17.600 --> 00:12:22.480 +when you go back to mode mode, you see +that we are in line mode. + +00:12:22.480 --> 00:12:25.620 +But in practice, you wouldn't have a +tower this elaborate + +00:12:25.620 --> 00:12:29.440 +because you'd rather have several +smaller towers you enter, + +00:12:29.440 --> 00:12:33.360 +that you alternate between. + +00:12:33.360 --> 00:12:39.839 +Okay. So one other thing of interest +here is that + +00:12:39.839 --> 00:12:42.240 +when you're in tower mode, + +00:12:42.240 --> 00:12:44.740 +if you look at the status line at the +bottom there, + +00:12:44.740 --> 00:12:49.839 +we are currently in buffer mode while we +are in tower mode. + +00:12:49.839 --> 00:12:53.151 +Tower mode actually isn't a mode really. +Neither is mode mode. + +00:12:53.151 --> 00:12:58.000 +They're really referential planes or +meta planes. + +00:12:58.000 --> 00:13:01.679 +In any case, you can see that we're in +buffer mode. + +00:13:01.679 --> 00:13:03.840 +We can take a meta jump out of this + +00:13:03.840 --> 00:13:08.000 +to confirm that buffer mode is the only +mode available + +00:13:08.000 --> 00:13:09.664 +when we're editing towers + +00:13:09.664 --> 00:13:11.915 +because that's the one we need, + +00:13:11.915 --> 00:13:23.200 +given that our towers are represented in +individual buffers. + +00:13:23.200 --> 00:13:26.320 +Right. So let's see where we're at. + +00:13:26.320 --> 00:13:27.785 +Rumpelstiltskin principle... + +00:13:27.785 --> 00:13:30.160 +We talked about mode mode. + +00:13:30.160 --> 00:13:32.240 +We talked about the strange loop + +00:13:32.240 --> 00:13:37.820 +application of ground level modes in +meta levels. + +00:13:39.600 --> 00:13:41.992 +We saw the different towers, + +00:13:41.992 --> 00:13:50.720 +and in fact, we're currently +in Vim tower, + +00:13:50.720 --> 00:13:52.860 +where you can go to Emacs tower. + +00:13:52.860 --> 00:13:54.720 +Now, with a single keystroke, you can + +00:13:54.720 --> 00:13:59.695 +alternate between Emacs and Vim, + +00:13:59.695 --> 00:14:01.638 +which are represented-- + +00:14:01.638 --> 00:14:05.519 +which are modeled as towers. + +00:14:13.360 --> 00:14:14.760 +So there's... One thing + +00:14:14.760 --> 00:14:18.160 +that we've sort of alluded to is that +there are two directions + +00:14:18.160 --> 00:14:19.494 +that you can travel in + +00:14:19.494 --> 00:14:22.399 +when you're going through this +framework. + +00:14:22.399 --> 00:14:33.760 +One direction is--and we'll visualize it +like so... + +00:14:33.760 --> 00:14:35.120 +There's two directions you can travel, + +00:14:35.120 --> 00:14:37.040 +and you can either go sideways or you + +00:14:37.040 --> 00:14:38.399 +can go up and down. + +00:14:38.399 --> 00:14:41.680 +If you go sideways, you're changing your +perspective. + +00:14:41.680 --> 00:14:45.440 +So normal mode, word mode, line mode, + +00:14:45.440 --> 00:14:46.544 +window mode, and so on + +00:14:46.544 --> 00:14:51.680 +are all different perspectives on your +ground editing experience. + +00:14:51.680 --> 00:14:53.265 +The other direction you can travel in + +00:14:53.265 --> 00:14:56.811 +is up or down, which takes you through +meta levels. + +00:14:56.811 --> 00:14:59.600 +So you go from the ground level +editing experience, + +00:14:59.600 --> 00:15:07.040 +up to mode mode, and then up to the +tower plane, and so on, and so on. + +00:15:07.040 --> 00:15:12.568 +So this all sounds very complex, + +00:15:12.568 --> 00:15:18.160 +but the truth is it's not really that +complicated, + +00:15:18.160 --> 00:15:20.699 +even though it feels that way. + +00:15:20.699 --> 00:15:22.959 +The reason it isn't that complicated + +00:15:22.959 --> 00:15:26.480 +is because no matter how many levels + +00:15:26.480 --> 00:15:30.160 +up or down you go and no matter where +you are, + +00:15:30.160 --> 00:15:32.399 +whether you're in at the ground level + +00:15:32.399 --> 00:15:34.079 +editing the actual text + +00:15:34.079 --> 00:15:35.802 +or whether you're at a meta level, + +00:15:35.802 --> 00:15:39.279 +some unknown meta level and you don't +know where you are, + +00:15:39.279 --> 00:15:41.133 +no matter where you are, + +00:15:41.133 --> 00:15:44.399 +the way in which you interact with it + +00:15:44.399 --> 00:15:47.519 +is the same at every level. + +00:15:47.519 --> 00:15:54.751 +That is the great power of this +approach: + +00:15:54.751 --> 00:16:00.880 +that all of the different levels +are the same. + +00:16:00.880 --> 00:16:03.839 +In fact, the complexity of the whole + +00:16:03.839 --> 00:16:05.545 +is exactly identical to + +00:16:05.545 --> 00:16:07.657 +the complexity of each part, + +00:16:07.657 --> 00:16:10.000 +so if you know how to edit words + +00:16:10.000 --> 00:16:12.048 +in the ground level buffer + +00:16:12.048 --> 00:16:15.378 +and you know how to move lines around +using line mode, + +00:16:15.378 --> 00:16:22.800 +then you know how to edit any aspect of +your editing experience at any level. + +00:16:30.079 --> 00:16:31.780 +So this is a pre-release demo. + +00:16:31.780 --> 00:16:40.079 +This doesn't exist on MELPA yet, but you +can follow updates at this repo on +github. + +00:16:40.079 --> 00:16:43.850 +If you can also be a beta tester + +00:16:43.850 --> 00:16:46.775 +or something like that, if you like, +that would be very helpful. + +00:16:46.775 --> 00:16:50.560 +You can learn more about this at + +00:16:50.560 --> 00:16:53.920 +drym.org, which is where I house + +00:16:53.920 --> 00:16:55.726 +the research that I work on. + +00:16:55.726 --> 00:17:00.154 +In particular, the research on epistemic +levels + +00:17:00.154 --> 00:17:03.600 +is what inspired this particular Emacs +extension. + +00:17:03.600 --> 00:17:05.600 +You can also learn about + +00:17:05.600 --> 00:17:10.880 +dialectical inheritance attribution, +which is the basis of + +00:17:10.880 --> 00:17:14.559 +a new economic system that could be fair + +00:17:14.559 --> 00:17:19.439 +and could lead to a prosperous and happy +world. + +00:17:19.439 --> 00:17:26.319 +You can follow me on Twitter at +@countvajhula. + +00:17:26.319 --> 00:17:31.919 +That's it! Thank you. diff --git a/2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt b/2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt new file mode 100644 index 00000000..c0dc4397 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt @@ -0,0 +1,839 @@ +WEBVTT + +00:00:00.000 --> 00:00:04.556 +Hello, everyone. I am Andrew Tropin. + +00:00:04.556 --> 00:00:06.622 +I am a professional software engineer + +00:00:06.622 --> 00:00:11.622 +I was playing with NixOS + +00:00:11.622 --> 00:00:15.322 +It's an operating system based on the +Nix package manager. + +00:00:15.322 --> 00:00:21.089 +I came up with this interesting +approach for configuring Emacs. + +00:00:21.089 --> 00:00:24.056 +I want to share it with you. + +00:00:24.056 --> 00:00:27.756 +I will start with the bold statement that + +00:00:27.756 --> 00:00:30.822 +Emacs configuration is almost the same + +00:00:30.822 --> 00:00:33.022 +as system configuration. + +00:00:33.022 --> 00:00:37.262 +It's not related to that Emacs joke + +00:00:37.262 --> 00:00:39.922 +about Emacs being an operating system. + +00:00:39.922 --> 00:00:44.489 +It's more about Emacs being integrated + +00:00:44.489 --> 00:00:48.589 +with so many tools inside the environment. + +00:00:48.589 --> 00:00:53.089 +For example, if you don't even use any +fancy workflows, + +00:00:53.089 --> 00:00:57.256 +you use only plain Emacs without any +configuration, + +00:00:57.256 --> 00:01:02.556 +dired uses ls, grep.el uses grep, + +00:01:02.556 --> 00:01:09.356 +and info files placed +somewhere in your system. + +00:01:09.356 --> 00:01:15.489 +Also Emacs can interact with gpg, git, +make, and other stuff. + +00:01:15.489 --> 00:01:20.789 +When you grow your Emacs Lisp + +00:01:20.789 --> 00:01:23.189 +init.el file + +00:01:23.189 --> 00:01:27.222 +or other files in your .emacs.d directory, + +00:01:27.222 --> 00:01:29.989 +you get much more integration + +00:01:29.989 --> 00:01:31.389 +with underlying operating system. + +00:01:31.389 --> 00:01:36.922 +The question is: how to manage such configuration? + +00:01:36.922 --> 00:01:40.922 +Because you can't just take a bunch of +.el files + +00:01:40.922 --> 00:01:43.456 +and move to a different machine + +00:01:43.456 --> 00:01:47.122 +and be sure that everything will work. + +00:01:47.122 --> 00:01:50.577 +Because you didn't move your +executables. + +00:01:50.577 --> 00:01:53.522 +You didn't move configuration +of other programs. + +00:01:53.522 --> 00:01:55.089 +You didn't move your service configurations. + +00:01:55.089 --> 00:02:01.889 +And you can't even just create dotfiles +for each program + +00:02:01.889 --> 00:02:05.022 +and move it with your .el files. + +00:02:05.022 --> 00:02:08.622 +The approach would be a little broader. + +00:02:08.622 --> 00:02:13.056 +Everything that I am showing today + +00:02:13.056 --> 00:02:15.322 +is available on Github. + +00:02:15.322 --> 00:02:18.022 +Any source code, you can find here. + +00:02:18.022 --> 00:02:21.589 +but my copy of the repository + +00:02:21.589 --> 00:02:23.722 +is on my local machine. + +00:02:23.722 --> 00:02:27.722 +As you can see, the font is a little small. + +00:02:27.722 --> 00:02:31.122 +And also, my terminal font is also a +little small. + +00:02:31.122 --> 00:02:36.756 +I can do a quick fix and increase the font. + +00:02:36.756 --> 00:02:40.789 +But imagine how cool it will be + +00:02:40.789 --> 00:02:45.756 +if you can have a file which contains +the configuration for a system. + +00:02:45.756 --> 00:02:52.489 +You change some value. Here, for +example, fontSize = 16 + +00:02:52.489 --> 00:02:54.589 +and run some command + +00:02:54.589 --> 00:02:58.489 +and based on this file + +00:02:58.489 --> 00:03:00.322 +and some other includes + +00:03:00.322 --> 00:03:02.422 +your operating system is built + +00:03:02.422 --> 00:03:06.389 +and all your environment is set up + +00:03:06.389 --> 00:03:07.656 +and ready for use. + +00:03:07.656 --> 00:03:11.622 +For example here, we already built +the new operating system, + +00:03:11.622 --> 00:03:17.856 +and everything is already installed in +my SSD. + +00:03:17.856 --> 00:03:21.322 +Now I can run the program and you can +see that + +00:03:21.322 --> 00:03:29.422 +my alacrity terminal has much bigger font + +00:03:29.422 --> 00:03:31.789 +and also if I restart my Emacs instance + +00:03:31.789 --> 00:03:34.089 +it by default uses + +00:03:34.089 --> 00:03:36.889 +a much bigger font for any buffer. + +00:03:36.889 --> 00:03:41.089 +Practical, and as you can see, it's +already working, + +00:03:41.089 --> 00:03:45.889 +thanks to Nix and NixOS. + +00:03:45.889 --> 00:03:50.722 +I will explain a little later how it +works inside, + +00:03:50.722 --> 00:03:57.089 +but for now, let's specify a little more + +00:03:57.089 --> 00:04:00.789 +what happened right now. + +00:04:00.789 --> 00:04:08.156 +I fed my... Oh. It doesn't work. Sorry. +I want... + +00:04:08.156 --> 00:04:13.056 +I have my whole operating system + +00:04:13.056 --> 00:04:15.589 +defined in a few Nix files. + +00:04:15.589 --> 00:04:18.689 +For example, here you saw the file + +00:04:18.689 --> 00:04:22.522 +which defines some variables for my environment + +00:04:22.522 --> 00:04:24.256 +and then a few more files + +00:04:24.256 --> 00:04:25.722 +for different programs. + +00:04:25.722 --> 00:04:30.056 +There is a folder which contains all +Emacs-related configuration. + +00:04:30.056 --> 00:04:36.989 +Also, there are package definitions +defined in Nix package repositories + +00:04:36.989 --> 00:04:42.522 +which is also included for the function +which generates + +00:04:42.522 --> 00:04:44.556 +the operating system. + +00:04:44.556 --> 00:04:47.622 +Getting all my configurations +written in Nix language + +00:04:47.622 --> 00:04:51.174 +and a few firewalls in ?? languages, + +00:04:51.174 --> 00:04:54.700 +everything is gathered together, + +00:04:54.700 --> 00:04:56.722 +and from that input + +00:04:56.722 --> 00:04:58.322 +and only from that input, + +00:04:58.322 --> 00:05:00.489 +the new operating system is built. + +00:05:00.489 --> 00:05:03.856 +Emacs now is a part of this operating system. + +00:05:03.856 --> 00:05:08.422 +I can distribute this Emacs configuration + +00:05:08.422 --> 00:05:11.689 +with all the environment that I want. + +00:05:11.689 --> 00:05:18.389 +Practical so far. Let's clarify which +problems does it solve. + +00:05:18.389 --> 00:05:21.756 +First of all, the integration problem. + +00:05:21.756 --> 00:05:27.389 +For example, a few minutes ago, you saw +that I changed one variable. + +00:05:27.389 --> 00:05:31.348 +That was to update... The first one, for +my terminal, + +00:05:31.348 --> 00:05:33.889 +and the second one, for my Emacs. + +00:05:33.889 --> 00:05:40.322 +It's pretty good that a few different +programs can share some data. + +00:05:40.322 --> 00:05:43.822 +For example, you can have one of them +for every application, + +00:05:43.822 --> 00:05:45.222 +or something like that + +00:05:45.222 --> 00:05:48.356 +and you change only one value in one place + +00:05:48.356 --> 00:05:50.789 +and the whole operating system is updated. + +00:05:50.789 --> 00:05:56.422 +Also, another problem is reproducibility. + +00:05:56.422 --> 00:06:00.156 + + +00:06:00.156 --> 00:06:06.600 +For example, when you install +your new instance of Emacs + +00:06:06.600 --> 00:06:11.089 +on your laptop or something like that, + +00:06:11.089 --> 00:06:14.289 +you can be sure that you will get the +same package versions + +00:06:14.289 --> 00:06:17.189 +and you can be sure that the +configuration of your work + +00:06:17.189 --> 00:06:20.856 +results in newly-updated or +newly-installed packages. + +00:06:20.856 --> 00:06:25.056 +Also, if you update packages + +00:06:25.056 --> 00:06:27.656 +sometimes it's hard to revert, + +00:06:27.656 --> 00:06:36.289 +because it's the way your package +manager almost every time works. + +00:06:36.289 --> 00:06:38.722 +You're just getting the latest +available packages. + +00:06:38.722 --> 00:06:43.256 +If they are broken, you need to wait for +the maintainer to update them. + +00:06:43.256 --> 00:06:50.989 +And also, your basic configuration +almost always doesn't contain + +00:06:50.989 --> 00:06:56.156 +any native dependencies, like +executables or something else. + +00:06:56.156 --> 00:07:00.689 +Recently, I saw some attempts to make it +possible to + +00:07:00.689 --> 00:07:03.089 +use use-package for those needs, + +00:07:03.089 --> 00:07:06.356 +like ensuring native dependencies +or something like that. + +00:07:06.356 --> 00:07:11.134 +It's obviously... If +your configuration isn't reproducible + +00:07:11.134 --> 00:07:15.322 +and it doesn't have +your whole environment, + +00:07:15.322 --> 00:07:19.522 +placed in one repository, + +00:07:19.522 --> 00:07:22.322 +it's very hard to share such +configuration. + +00:07:22.322 --> 00:07:27.089 +You can share part of your configuration +and some instruction + +00:07:27.089 --> 00:07:32.222 +how to get a similar environment, +but it doesn't always work. + +00:07:32.222 --> 00:07:39.656 +Let's go closer to actually Emacs +configuration itself. + +00:07:39.656 --> 00:07:45.306 +I had some experience with Spacemacs and +Doom Emacs distributions. + +00:07:45.306 --> 00:07:50.414 +I also watched a lot of videos and +articles by Protesilaos + +00:07:50.414 --> 00:07:56.756 +and a lot of other custom configurations +of many different cool people. + +00:07:56.756 --> 00:08:03.039 +And also I was inspired by use-package + +00:08:03.039 --> 00:08:10.839 +and decided that I will create a folding +structure for my Emacs configuration. + +00:08:10.839 --> 00:08:16.172 +I will be using subconfigs. It's almost +the same as layers in Spacemacs, + +00:08:16.172 --> 00:08:20.972 +or modules in Doom Emacs, which are +self-contained. + +00:08:20.972 --> 00:08:26.287 +They contain Emacs Lisp code which +configures all packages necessary + +00:08:26.287 --> 00:08:28.789 +for this part of configuration. + +00:08:28.789 --> 00:08:33.493 +It contains all Emacs dependencies like +Emacs packages. + +00:08:33.493 --> 00:08:36.572 +It contains all native dependencies + +00:08:36.572 --> 00:08:40.039 +like binaries or maybe info pages or +something like that. + +00:08:40.039 --> 00:08:45.115 +It also contains variables +that can be shared between + +00:08:45.115 --> 00:08:47.989 +Emacs and other applications, + +00:08:47.989 --> 00:08:52.072 +and it can contain service +or system definitions + +00:08:52.072 --> 00:08:56.072 +which configure your systemd service or +something like that + +00:08:56.072 --> 00:09:01.306 +that you use in your workflow. For +example, for synchronizing your e-mails. + +00:09:01.306 --> 00:09:06.239 +Let's start from just the example + +00:09:06.239 --> 00:09:16.618 +that I already am... I have a folding +structure for my configuration. + +00:09:16.618 --> 00:09:25.789 +I have some files here. +early-init just has this. + +00:09:25.789 --> 00:09:33.006 +Nothing changes. It will be copied to +that .emacs.d directory later + +00:09:33.006 --> 00:09:37.306 +with some exceptions that + +00:09:37.306 --> 00:09:40.789 +it will replace the Nix dir and a +symlink will be created to it. + +00:09:40.789 --> 00:09:47.889 +I have use-package-init.el. +It's part of configuration + +00:09:47.889 --> 00:09:51.522 +that will be on top of everything + +00:09:51.522 --> 00:09:55.589 +to be able to use use-package in my +subconfigurations. + +00:09:55.589 --> 00:10:01.156 +And actually some Nix code to glue +everything up + +00:10:01.156 --> 00:10:06.922 +and config dirs which contain all my subconfigs. + +00:10:06.922 --> 00:10:11.389 +Let's start from faces subconfig. + +00:10:11.389 --> 00:10:14.556 +Let's start from config.el + +00:10:14.556 --> 00:10:20.022 +which can be familiar for many people. + +00:10:20.022 --> 00:10:23.556 +Just use-package definition +for faces package + +00:10:23.556 --> 00:10:24.122 +and some configuration for it + +00:10:24.122 --> 00:10:29.589 +which are setting some attributes. + +00:10:29.589 --> 00:10:32.156 +It reads some variables. + +00:10:32.156 --> 00:10:36.922 +Those variables are actually defined in +a different place. + +00:10:36.922 --> 00:10:44.422 +If I open default.nix file, you can see +that it contains + +00:10:44.422 --> 00:10:52.689 +the definition or subconfig, and it +should contain a definition of variables + +00:10:52.689 --> 00:10:55.322 +that it uses by... I forgot to move it from + +00:10:55.322 --> 00:11:01.889 +my original default.nix file somewhere +here. + +00:11:01.889 --> 00:11:10.105 +You probably can find definition of +those variables just right here. + +00:11:10.105 --> 00:11:13.722 +I took values from my +Nix expressions. + +00:11:13.722 --> 00:11:23.956 +Those values will be shared across my +alacrity, Emacs, and other applications. + +00:11:23.956 --> 00:11:27.789 +Later, they will be placed in generated +Emacs configuration. + +00:11:27.789 --> 00:11:32.856 +They will be available for faces config. + +00:11:32.856 --> 00:11:38.422 +Here I will be referencing them just +like Emacs variables. + +00:11:38.422 --> 00:11:43.356 +Let's take a look at another more +complicated example. + +00:11:43.356 --> 00:11:45.922 +For example, org-roam package. + +00:11:45.922 --> 00:11:49.922 +Just a basic use-package configuration + +00:11:49.922 --> 00:11:54.607 +which uses a variable and +the definition. + +00:11:54.607 --> 00:12:00.322 +It's a little more complex than the +previous one. + +00:12:00.322 --> 00:12:04.222 +Elisp configuration in the same file. + +00:12:04.222 --> 00:12:08.856 +emacsPackages specified here. + +00:12:08.856 --> 00:12:12.289 +Those two packages: org-roam and company-org-roam. + +00:12:12.289 --> 00:12:16.956 +systemPackages: it's something that +should be available + +00:12:16.956 --> 00:12:18.456 +on your host operating system. + +00:12:18.456 --> 00:12:24.756 +And for emacsPackages, you need sqlite +package, + +00:12:24.756 --> 00:12:27.922 +and also the definition of the variable + +00:12:27.922 --> 00:12:31.556 +which will be passed in my Emacs +configuration later. + +00:12:31.556 --> 00:12:37.722 +It's equal to my workDir, which is +defined in my environment, + +00:12:37.722 --> 00:12:39.222 +and a subdirectory of it. + +00:12:39.222 --> 00:12:43.222 +([Amin:] Andrew, you have about five +minutes including questions.) + +00:12:43.222 --> 00:12:50.822 +Oh, okay. I'm almost finished. It was +last example. + +00:12:50.822 --> 00:12:56.556 +Let me open my Org file. Okay. + +00:12:56.556 --> 00:13:02.222 +Right here. I won't give you an +introduction to Nix itself + +00:13:02.222 --> 00:13:06.922 +and the underlying mechanism, + +00:13:06.922 --> 00:13:11.140 +but I can say that there's already a +proof of concept framework + +00:13:11.140 --> 00:13:14.622 +for utilizing Nix and NixOS + +00:13:14.622 --> 00:13:18.389 +for configuring Emacs +and making a very complex workflow + +00:13:18.389 --> 00:13:22.056 +reproducible on other machines. + +00:13:22.056 --> 00:13:26.222 +It gives everything that we +saw right now. + +00:13:26.222 --> 00:13:31.522 +For the future work, I plan to +reimplement it in Guile, + +00:13:31.522 --> 00:13:36.189 +which is a Scheme dialect, +which is another Lisp language, + +00:13:36.189 --> 00:13:39.199 +for the GNU Guix operating system, + +00:13:39.199 --> 00:13:41.856 +because I like Lisp languages + +00:13:41.856 --> 00:13:46.822 +a little more than Nix languages and I +want to make + +00:13:46.822 --> 00:13:50.089 +this project from proof of concept +to some state which + +00:13:50.089 --> 00:13:54.189 +will be user-friendly and +available for other people. + +00:13:54.189 --> 00:13:59.156 +If I will have a lot of time, +I will make an operating system + +00:13:59.156 --> 00:14:01.356 +which will be inspired by Lisp machines + +00:14:01.356 --> 00:14:05.389 +to make the whole experience very Lispy. + +00:14:05.389 --> 00:14:08.556 +Thank you for your attention + +00:14:08.556 --> 00:14:12.189 +and now I will answer questions. + +00:14:12.189 --> 00:14:22.622 +Oh. There is a lot of... Okay. I see +some questions. + +00:14:22.622 --> 00:14:29.222 +Did you release some config files such +as Emacs custom.el, some of which have +sensitive data? + +00:14:29.222 --> 00:14:39.922 +Ideally, in the folding way, I create a +separate directory called local/share/emacs, + +00:14:39.922 --> 00:14:45.089 +and I place custom el files here. It's +not synchronized in any way, + +00:14:45.089 --> 00:14:48.922 +and it will be just lost in case you +move to a separate machine. + +00:14:48.922 --> 00:14:52.456 +I do it for a purpose, because I don't +use custom.el. + +00:14:52.456 --> 00:14:59.456 +It's hard to make it reproducible if +you're using such mechanism as custom.el. + +00:14:59.456 --> 00:15:06.656 +How do you learn the Nix language +basics? Just from the manual? + +00:15:06.656 --> 00:15:10.141 +I read a lot of documentation. + +00:15:10.141 --> 00:15:15.989 +Also, I saw the course like Learn Nix in +15 minutes. + +00:15:15.989 --> 00:15:19.289 +And also there was another resource. + +00:15:19.289 --> 00:15:25.689 +Better to ask this question in Nix or +NixOS channel in IRC, + +00:15:25.689 --> 00:15:32.989 +which will be treated in more details. + +00:15:32.989 --> 00:15:36.656 +What are the main advantages besides +switching computers, + +00:15:36.656 --> 00:15:38.909 +which most people rarely do? + +00:15:38.909 --> 00:15:44.422 +For example, the original idea was to +make part of configurations + +00:15:44.422 --> 00:15:46.422 +available for projects. + +00:15:46.422 --> 00:15:48.156 +For example, you have some project, + +00:15:48.156 --> 00:15:51.914 +you made the setup, +and want other developers + +00:15:51.914 --> 00:15:55.256 +to use the same setup +on their machine, + +00:15:55.256 --> 00:15:58.122 +but you implement only the part of +stuff, + +00:15:58.122 --> 00:16:01.156 +like one subconfig especially for +this language + +00:16:01.156 --> 00:16:05.389 +for this project. With such approach, +you can easily + +00:16:05.389 --> 00:16:10.556 +share such subconfig with other people. + +00:16:10.556 --> 00:16:15.239 +Have you tried Guix in place of Nix? + +00:16:15.239 --> 00:16:22.272 +Yes, I tried it, and currently I am in +the state of switching from Nix to Guix. + +00:16:22.272 --> 00:16:26.739 +You can follow my Youtube channel, I think, + +00:16:26.739 --> 00:16:32.522 +I do streams twice in a month + +00:16:32.522 --> 00:16:35.922 +talking about reproducibility and +related stuff. + +00:16:35.922 --> 00:16:39.306 +Probably soon I will be talking +about installation of Guix + +00:16:39.306 --> 00:16:41.239 +and configuration of it. + +00:16:41.239 --> 00:16:44.956 +In case you're watching this video later, + +00:16:44.956 --> 00:16:47.972 +you can find me somewhere on the network +using those contacts. + +00:16:47.972 --> 00:16:50.406 +It's my nickname and my e-mail address. + +00:16:54.072 --> 00:16:56.556 +([Amin:] Awesome. I think we're wrapping +up just on time. + +00:16:56.556 --> 00:17:00.889 +Thank you so much, Andrew, for your +great talk, + +00:17:00.889 --> 00:17:04.622 +and for hanging out to answer the +questions live.) + +00:17:04.622 --> 00:17:08.022 +[Andrew:] Thank you for organizing the +conference + +00:17:08.022 --> 00:17:11.572 +and thank you all participants for +questions and participation. + +00:17:11.572 --> 00:17:18.000 +See you soon! diff --git a/2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt b/2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt new file mode 100644 index 00000000..0d69ba0e --- /dev/null +++ b/2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt @@ -0,0 +1,385 @@ +WEBVTT + +00:00:02.480 --> 00:00:06.240 +Hi there, this is Rainer. I have + +00:00:06.240 --> 00:00:08.559 +a 10-minute time slot at the EmacsConf + +00:00:08.559 --> 00:00:11.759 +and I will show you a quick walk + +00:00:11.759 --> 00:00:17.039 +through my GTD system in Org mode, so + +00:00:17.039 --> 00:00:19.520 +let's start with capturing. We want to + +00:00:19.520 --> 00:00:24.080 +capture what we do here. So the idea + +00:00:24.080 --> 00:00:27.279 +is I press F6 and I say: "I want to make a + +00:00:27.279 --> 00:00:29.599 +small project because this video + +00:00:29.599 --> 00:00:33.120 +will be a small project," so the thing is: + +00:00:33.120 --> 00:00:42.000 +"Record a video for Emacs Conf 2020." + +00:00:42.000 --> 00:00:45.920 +Video is recorded, edited, + +00:00:45.920 --> 00:00:49.360 +and uploaded. We can also + +00:00:49.360 --> 00:00:52.160 +set the timeline because we want to + +00:00:52.160 --> 00:00:53.680 +upload it. The time, + +00:00:53.680 --> 00:00:56.640 +the deadline for uploads is--we know it + +00:00:56.640 --> 00:00:59.440 +already--the 14th of November. + +00:00:59.440 --> 00:01:03.600 +so let me put this in here. See, this is +done. + +00:01:03.600 --> 00:01:05.760 +Now, because it's a project... I mean, I + +00:01:05.760 --> 00:01:07.600 +could say just one task to record a + +00:01:07.600 --> 00:01:12.159 +video, but it's too much, so let's split +it down in a few + +00:01:12.159 --> 00:01:40.400 +small tasks. The next one... + +00:01:40.400 --> 00:01:43.439 +So you see, I've just typed a few + +00:01:43.439 --> 00:01:46.159 +quick tasks. We can see them if we look + +00:01:46.159 --> 00:01:50.240 +in the capture file. + +00:01:50.240 --> 00:01:52.399 +You see, there's my project entry and + +00:01:52.399 --> 00:01:54.479 +there are all my tasks. Since it's a + +00:01:54.479 --> 00:01:56.799 +project, I can now + +00:01:56.799 --> 00:02:05.360 +make it easy. I just indent every +task by one + +00:02:05.360 --> 00:02:18.560 +and then, so... + +00:02:18.560 --> 00:02:23.120 +Okay, so you see we have one + +00:02:23.120 --> 00:02:27.360 +project here, and this one we refile now + +00:02:27.360 --> 00:02:36.160 +to our backlog. + +00:02:36.160 --> 00:02:42.000 +So if we look in our backlog, + +00:02:42.000 --> 00:02:45.599 +you see my project with all the tasks. + +00:02:45.599 --> 00:02:52.480 +So now, next one. + +00:02:52.480 --> 00:02:56.720 +I pretend now I'm doing a weekly review. + +00:02:56.720 --> 00:03:01.040 +C-c x b. + +00:03:01.040 --> 00:03:04.080 +And I already did some things, and now + +00:03:04.080 --> 00:03:07.120 +the point where I am + +00:03:07.120 --> 00:03:10.319 +is scheduled tasks with no date. + +00:03:10.319 --> 00:03:15.200 +Those are all those tasks. So I have a + +00:03:15.200 --> 00:03:17.519 +weekly review helper that says, okay, + +00:03:17.519 --> 00:03:19.040 +show me everything + +00:03:19.040 --> 00:03:22.080 +that I need to schedule, plan. + +00:03:22.080 --> 00:03:30.879 +So schedule this class. We do +everything. + +00:03:30.879 --> 00:03:35.040 +So everything is scheduled now, + +00:03:35.040 --> 00:03:38.239 +and we can check off that and so on. + +00:03:38.239 --> 00:03:42.000 +We can... I have a plan + +00:03:42.000 --> 00:03:44.959 +for every day. That's my free plan. + +00:03:44.959 --> 00:03:46.879 +I press F6, + +00:03:46.879 --> 00:03:50.239 +and I say p p plan. + +00:03:50.239 --> 00:03:53.439 +Private things. You see there is the + +00:03:53.439 --> 00:03:57.360 +first day, 12th of November, German. + +00:03:57.360 --> 00:04:03.200 +And now I can look at what I have to do +today. + +00:04:04.239 --> 00:04:07.040 +My agenda view is very long, and I just want + +00:04:07.040 --> 00:04:09.360 +to focus on a few tasks, so + +00:04:09.360 --> 00:04:22.639 +I copied them to my daily plan. + +00:04:22.639 --> 00:04:25.680 +I just want to show you. So I have a + +00:04:25.680 --> 00:04:29.919 +daily plan for every day, and that means + +00:04:29.919 --> 00:04:33.919 +this one is what I see, + +00:04:33.919 --> 00:04:37.680 +and this one is gone. + +00:04:37.680 --> 00:04:41.360 +So now, let's pretend we are working on + +00:04:41.360 --> 00:04:43.600 +the first: we find the requirements for + +00:04:43.600 --> 00:04:44.960 +the video. + +00:04:44.960 --> 00:04:48.320 +We had a look. Okay, + +00:04:48.320 --> 00:04:51.520 +I can mark this task as done here + +00:04:51.520 --> 00:04:53.520 +because I knew the requirements. C-c t. + +00:04:54.840 --> 00:05:05.199 +Done. Format is 720p, webm codec. + +00:05:05.199 --> 00:05:09.440 +So this one is done and I can mark it + +00:05:09.440 --> 00:05:14.560 +off here as well. So now I have marked it off + +00:05:14.560 --> 00:05:17.600 +everywhere. The good thing of my + +00:05:17.600 --> 00:05:19.600 +daily plan is that I can + +00:05:19.600 --> 00:05:21.600 +really see it all the day. I stick to + +00:05:21.600 --> 00:05:23.520 +this, what I decided in the morning what + +00:05:23.520 --> 00:05:24.639 +I want to do. + +00:05:24.639 --> 00:05:28.080 +So let's go to the next one. Make +a quick test. + +00:05:28.080 --> 00:05:38.000 +Yeah, I did the test already. + +00:05:38.000 --> 00:05:40.720 +I will do a small trick. I say, okay, I + +00:05:40.720 --> 00:05:42.639 +record the video here. + +00:05:42.639 --> 00:05:46.960 +Video recorded. Then let me do + +00:05:46.960 --> 00:05:55.120 +what to show. + +00:05:55.120 --> 00:05:58.319 +Now I'm recording the video. + +00:05:58.319 --> 00:06:02.240 +Let's see. What we do: we had +capture, we had + +00:06:02.240 --> 00:06:05.440 +weekly review, we had daily planning. + +00:06:05.440 --> 00:06:09.919 +How are we processing this? Very nice. + +00:06:09.919 --> 00:06:12.319 +So let's pretend the video is recorded + +00:06:12.319 --> 00:06:17.520 +C-c t done. + +00:06:17.520 --> 00:06:20.479 +Let me put this to NEXT again. Start + +00:06:20.479 --> 00:06:27.280 +kdenlive to time lapse. + +00:06:27.280 --> 00:06:30.319 +After recording it, + +00:06:30.319 --> 00:06:33.759 +I pretend this is done now. + +00:06:33.759 --> 00:06:39.039 +C-c t done. + +00:06:39.039 --> 00:06:42.400 +Then I have a video ready. + +00:06:42.400 --> 00:06:44.639 +Let's pretend I did the upload + +00:06:44.639 --> 00:06:50.639 +as well. Done. Video uploaded. + +00:06:50.639 --> 00:06:55.280 +So I can say everything now is done. + +00:06:55.280 --> 00:06:59.199 +Save it, so tomorrow I see what I did +yesterday. + +00:06:59.199 --> 00:07:02.560 +Here I'm completely done. + +00:07:02.560 --> 00:07:06.000 +We have the weekly review. + +00:07:06.000 --> 00:07:09.680 +We put another + +00:07:09.680 --> 00:07:12.639 +buffer here because I want to show you + +00:07:12.639 --> 00:07:15.199 +the final step of my weekly review. + +00:07:16.960 --> 00:07:19.199 +If you see, there's a final step that + +00:07:19.199 --> 00:07:21.599 +says: select finished tasks and make a bulk + +00:07:21.599 --> 00:07:24.160 +archive action. So if you look at my + +00:07:24.160 --> 00:07:26.560 +EmacsConf thing, okay, the project is + +00:07:26.560 --> 00:07:27.440 +done as well. + +00:07:27.440 --> 00:07:31.360 +Project C-c t done. + +00:07:31.360 --> 00:07:34.880 +And then, what I can do is now see + +00:07:34.880 --> 00:07:38.160 +a weekly review helper. + +00:07:38.160 --> 00:07:41.680 +Finished tasks. I could + +00:07:41.680 --> 00:07:48.639 +make a bulk operation that says +archive everything, + +00:07:48.639 --> 00:07:50.639 +but at the moment I don't need to do + +00:07:50.639 --> 00:07:52.720 +that because we have + +00:07:52.720 --> 00:07:56.720 +a tree structure, so it's C-c x a I have this + +00:07:56.720 --> 00:08:00.080 +task away, and the task is done. So that's + +00:08:00.080 --> 00:08:02.800 +it. That's my system you see: from + +00:08:02.800 --> 00:08:06.080 +capturing tasks, to scheduling tasks, + +00:08:06.080 --> 00:08:08.000 +to putting it on the daily plan, + +00:08:08.000 --> 00:08:09.759 +performing it, and at the end, when + +00:08:09.759 --> 00:08:11.120 +everything is done, + +00:08:11.120 --> 00:08:13.199 +the next weekly review they will go + +00:08:13.199 --> 00:08:14.879 +to the archive file, + +00:08:14.879 --> 00:08:17.199 +because it's finished. Thank you for + +00:08:17.399 --> 00:08:21.959 +watching. That's it. diff --git a/2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt b/2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt new file mode 100644 index 00000000..e6eb21a7 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt @@ -0,0 +1,349 @@ +WEBVTT + +00:00:00.220 --> 00:00:03.400 +Welcome to my talk, Lead Your Future with +Org. + +00:00:03.400 --> 00:00:04.680 +Who am I? + +00:00:04.680 --> 00:00:05.680 +I'm Andrea. + +00:00:05.680 --> 00:00:10.060 +I work as a Scala software engineer somewhere +in the Netherlands, and I inherited my passion + +00:00:10.060 --> 00:00:12.340 +for Emacs from my PhD supervisor. + +00:00:12.340 --> 00:00:15.050 +From that moment on, I got in synergy with +it. + +00:00:15.050 --> 00:00:19.830 +You can find more about me and my interests +at https://ag91.github.io. + +00:00:19.830 --> 00:00:27.150 +That is the place where I keep my blog and +I blog on a weekly basis. + +00:00:27.150 --> 00:00:29.449 +Let's get into the bulk of the talk. + +00:00:29.449 --> 00:00:31.679 +Why I needed a vision. + +00:00:31.679 --> 00:00:34.360 +The main, main problem is that I have too +many interests. + +00:00:34.360 --> 00:00:37.740 +I like a lot of things, and these things take +time. + +00:00:37.740 --> 00:00:44.000 +Then I have too little time to do other things +that are very important as well. + +00:00:44.000 --> 00:00:46.430 +And so I need priority. + +00:00:46.430 --> 00:00:51.750 +And the vision in my mind is both an ambition, +something that I want to do with my life, + +00:00:51.750 --> 00:00:59.220 +and at the same time, it's a way to focus +my efforts and get rid of some stuff that + +00:00:59.220 --> 00:01:03.350 +fundamentally is not something I really care +so much about. + +00:01:03.350 --> 00:01:09.400 +Even if you come up with a vision and so with +a smaller scope of things that you want to + +00:01:09.400 --> 00:01:17.150 +do, even then, you have to take this ambition +of yours, this vision, and disassemble it + +00:01:17.150 --> 00:01:19.310 +in very small steps. + +00:01:19.310 --> 00:01:28.950 +Org Mode is very good at taking care of this +because you can keep track of TODOs in Org + +00:01:28.950 --> 00:01:29.950 +Mode. + +00:01:29.950 --> 00:01:36.740 +So let me show you how I keep an agenda that +also keeps track of my vision. + +00:01:36.740 --> 00:01:40.250 +For this talk, I have a running example. + +00:01:40.250 --> 00:01:42.990 +Vision will be "I want to bring joy to people." + +00:01:42.990 --> 00:01:45.730 +and "I want to live in synergy with the planet." + +00:01:45.730 --> 00:01:49.740 +Okay, so, given these two visions, let's open +the agenda. + +00:01:49.740 --> 00:01:59.560 +You will see on the right that now I have +some tasks, both on Tuesday and on Friday. + +00:01:59.560 --> 00:02:04.560 +Things to notice is that we said one of our +visions is synergy with the planet, so some + +00:02:04.560 --> 00:02:13.010 +tasks are annotated on the left with this +category and some with "Bring joy to people." + +00:02:13.010 --> 00:02:16.730 +In this way, you can distinguish where are +my... + +00:02:16.730 --> 00:02:20.100 +In this day, where my effort is going in this +day. + +00:02:20.100 --> 00:02:27.950 +The other thing is the specification of these +tasks, and then at the end, you can notice + +00:02:27.950 --> 00:02:42.690 +a tag on the right that is essentially a guess +of how long this task will have an effect + +00:02:42.690 --> 00:02:43.750 +over the future. + +00:02:43.750 --> 00:02:53.970 +So, for example, installing solar panel onto +my roof is going to have an effect of 10 years + +00:02:53.970 --> 00:02:57.180 +over my life, if I manage to achieve that. + +00:02:57.180 --> 00:03:01.230 +That is my rough guess. + +00:03:01.230 --> 00:03:08.180 +You will notice that the ones that have a +bigger amount, so 10 years over the 5 year + +00:03:08.180 --> 00:03:15.879 +one, because I order my day so that the tasks +that are more important or that I believe + +00:03:15.879 --> 00:03:21.540 +are more effective over my future, I sort +them so that they appear at the top. + +00:03:21.540 --> 00:03:26.420 +In this way, I can basically decide, okay, +today, what should I... + +00:03:26.420 --> 00:03:36.379 +Find a video on Youtube, but I should take +into consideration when I look at my agenda + +00:03:36.379 --> 00:03:42.379 +that I've traded that small fun for today +with something that could have had an effect + +00:03:42.379 --> 00:03:45.890 +over a longer period of time. + +00:03:45.890 --> 00:04:03.909 +Let me show you how I also exploit the facilities +that Org Mode comes with. + +00:04:03.909 --> 00:04:05.190 +I will... + +00:04:05.190 --> 00:04:07.830 +I have two templates available to me. + +00:04:07.830 --> 00:04:09.330 +I will choose one. + +00:04:09.330 --> 00:04:13.970 +The first thing that it asks to me is "How +long will this affect your life?" + +00:04:13.970 --> 00:04:20.660 +So I like ... It will affect a long time, +if I manage to produce only for myself. + +00:04:20.660 --> 00:04:23.400 +So I choose 10 years. + +00:04:23.400 --> 00:04:24.750 +And then I specify the task. + +00:04:24.750 --> 00:04:29.080 +So, "Learn how to keep bees." + +00:04:29.080 --> 00:04:30.080 +I collect this task. + +00:04:30.080 --> 00:04:35.870 +It will now appear in the middle because 10 +years is between 20 years and 5 years. + +00:04:35.870 --> 00:04:40.860 +So I know that if I put some effort in learning +how to keep bees, I should be quite happy + +00:04:40.860 --> 00:04:41.979 +for today. + +00:04:41.979 --> 00:04:43.060 +Okay. + +00:04:43.060 --> 00:04:50.470 +So, say that I do it, say that that's it... + +00:04:50.470 --> 00:04:52.490 +Once I've done this task, how can I be... + +00:04:52.490 --> 00:04:58.000 +How do I know how much progress I am doing? + +00:04:58.000 --> 00:05:07.100 +The way I can do that is by retrospecting +weekly or monthly about the successes or the + +00:05:07.100 --> 00:05:09.520 +progress that I am doing. + +00:05:09.520 --> 00:05:14.949 +How I do it is simply by running this kind +of snippet that shows me that for this month, + +00:05:14.949 --> 00:05:23.350 +I have done three tasks for bringing joy to +people and three tasks for synergy with planet. + +00:05:23.350 --> 00:05:30.300 +This is useful because you can repeat it and +it will be appended, so every time you run + +00:05:30.300 --> 00:05:38.040 +it again, you can compare if you are... how +you are working towards your goal and if you're + +00:05:38.040 --> 00:05:43.830 +focusing more on bringing joy to people or +if you're focusing more on synergy. + +00:05:43.830 --> 00:05:45.990 +Balance the effort. + +00:05:45.990 --> 00:05:51.850 +A thing that I want to share that I think +will be useful to you is this function I use + +00:05:51.850 --> 00:05:55.789 +that I made for myself to create these statistics. + +00:05:55.789 --> 00:06:04.509 +It's a wrapper around the very enjoyable library +org-ql, which allows you to query and group + +00:06:04.509 --> 00:06:13.650 +headings, do analysis on headings, or restructuring +and view headings in a SQL fashion. + +00:06:13.650 --> 00:06:19.120 +The syntax is very similar to SQL. + +00:06:19.120 --> 00:06:25.390 +You can manipulate your headings and visualize +them or just get statistics as I have done + +00:06:25.390 --> 00:06:26.390 +here. + +00:06:26.390 --> 00:06:36.540 +Finally, for this talk, say that you are doing +progress, that progress most likely will generate + +00:06:36.540 --> 00:06:39.950 +some useful knowledge for yourself. + +00:06:39.950 --> 00:06:46.050 +My way to store this knowledge is through +org-roam, another interesting mode that is + +00:06:46.050 --> 00:06:54.759 +very... that is becoming very relevant and +known today. + +00:06:54.759 --> 00:06:56.020 +The idea is that I simply... + +00:06:56.020 --> 00:07:08.470 +If I learn how to make, how to install solar +panels, that can be useful knowledge. + +00:07:08.470 --> 00:07:15.800 +I can link to some other knowledge that I +have and so create my own knowledgebase, and + +00:07:15.800 --> 00:07:19.020 +save it for later use. + +00:07:19.020 --> 00:07:25.160 +My later use is typically, in this case, my +blog. + +00:07:25.160 --> 00:07:31.630 +In here, I have a few notes that are basically +a synthesis of knowledge that I have collected + +00:07:31.630 --> 00:07:34.550 +doing my tasks towards my vision. + +00:07:34.550 --> 00:07:39.440 +With this, this is all I wanted to show you +for this talk. + +00:07:39.440 --> 00:07:47.490 +You can follow me on my blog at https://ag91.github.io +. That is also where I am going to share a + +00:07:47.490 --> 00:07:55.370 +version of this Org Mode file that allows +you basically to create the same kind of configuration + +00:07:55.370 --> 00:08:02.950 +I have here, and you can create an instance +by running this snippet of Emacs in which + +00:08:02.950 --> 00:08:04.790 +you can just run this example. + +00:08:04.790 --> 00:08:11.890 +An extended example I will also add, to just +play around safely with this kind of configuration. + +00:08:11.890 --> 00:08:13.300 +So enjoy the rest of the conference. + +00:08:13.300 --> 00:08:14.460 +Catch you later! + +00:08:14.460 --> 00:08:15.650 +Nice to meet you! diff --git a/2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt b/2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt new file mode 100644 index 00000000..f3c3133d --- /dev/null +++ b/2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt @@ -0,0 +1,1066 @@ +WEBVTT + +00:00:01.680 --> 00:00:03.439 +Hello, and welcome + +00:00:03.439 --> 00:00:07.200 +to my Org GTD talk. + +00:00:07.200 --> 00:00:10.400 +I wrote this package because I was + +00:00:10.400 --> 00:00:12.719 +overwhelmed with all the stuff I had to + +00:00:12.719 --> 00:00:14.320 +manage working at home. + +00:00:14.320 --> 00:00:17.359 +I'd heard about GTD. I saw someone + +00:00:17.359 --> 00:00:18.720 +using it with + +00:00:18.720 --> 00:00:22.320 +just a small notebook. + +00:00:22.320 --> 00:00:24.720 +I wanted to do it in Emacs because, + +00:00:24.720 --> 00:00:29.199 +well, Emacs can do everything, right? + +00:00:29.199 --> 00:00:31.359 +I'm going to jump in quickly. Just so + +00:00:31.359 --> 00:00:34.559 +you know, here's kind of a list of the + +00:00:34.559 --> 00:00:36.960 +resources. Obviously, org-gtd, which you + +00:00:36.960 --> 00:00:38.719 +can find there. You can open an issue, ask + +00:00:38.719 --> 00:00:41.120 +me questions there about it. + +00:00:41.120 --> 00:00:43.280 +I use org-edna, a package for state + +00:00:43.280 --> 00:00:45.360 +triggers. I'm going to show this briefly + +00:00:45.360 --> 00:00:49.840 +when I finish item in a project. + +00:00:49.840 --> 00:00:52.000 +org-agenda-property, you will see in the + +00:00:52.000 --> 00:00:53.440 +agenda. It's going to show + +00:00:53.440 --> 00:00:57.360 +to whom an action has been delegated to. + +00:00:57.360 --> 00:01:00.960 +You will see org-roam briefly as a + +00:01:00.960 --> 00:01:02.559 +reference because that is what I have + +00:01:02.559 --> 00:01:06.960 +chosen for my knowledge archival tool. + +00:01:06.960 --> 00:01:07.360 +You can choose + +00:01:07.360 --> 00:01:12.640 +whatever you prefer. + +00:01:12.640 --> 00:01:15.520 +This is a quick, quick reminder on + +00:01:15.520 --> 00:01:18.479 +what GTD is and how it works. +This is not a + +00:01:18.479 --> 00:01:22.640 +lesson on--a presentation on gtd +because that would + +00:01:22.640 --> 00:01:27.920 +be... Well, other people have done it +better than me. + +00:01:27.920 --> 00:01:31.280 +In short, everything goes into +the inbox. + +00:01:31.280 --> 00:01:34.320 +Then you process the inbox, and you + +00:01:34.320 --> 00:01:35.600 +decide what to do, if + +00:01:35.600 --> 00:01:37.200 +it could be actionable or not. If it's + +00:01:37.200 --> 00:01:39.119 +actionable, it could be a project + +00:01:39.119 --> 00:01:40.799 +or it could be a single action, which you + +00:01:40.799 --> 00:01:42.159 +could delegate + +00:01:42.159 --> 00:01:45.759 +or schedule or just + +00:01:45.759 --> 00:01:48.079 +do it. If it's not actionable, you could + +00:01:48.079 --> 00:01:49.680 +just throw it away, + +00:01:49.680 --> 00:01:51.759 +incubate it for later, or move it into + +00:01:51.759 --> 00:01:57.520 +your files, reference. + +00:01:57.520 --> 00:02:05.119 +Over here, you can see the +global bindings + +00:02:05.119 --> 00:02:08.959 +for org-gtd. Those are the actions, + +00:02:08.959 --> 00:02:11.599 +the functions I have made available. + +00:02:11.599 --> 00:02:14.000 +This is in progress. There's more to come. + +00:02:14.000 --> 00:02:15.760 +Some stuff is probably missing. + +00:02:15.760 --> 00:02:17.360 +It's grown mostly from my own personal + +00:02:17.360 --> 00:02:22.400 +use so far, so it doesn't have things. + +00:02:22.400 --> 00:02:27.200 +In the bottom right, you can see the +agenda. + +00:02:27.200 --> 00:02:28.560 +One thing I wanted to do with +this package + +00:02:28.560 --> 00:02:32.959 +was leverage Org Mode as much as +possible. + +00:02:32.959 --> 00:02:36.319 +So I tried to not reinvent + +00:02:36.319 --> 00:02:40.160 +the wheel as much as I could. That meant + +00:02:40.160 --> 00:02:43.599 +reusing the agenda. You can see here + +00:02:43.599 --> 00:02:45.599 +a couple of the things that are made + +00:02:45.599 --> 00:02:47.920 +available or kind of + +00:02:47.920 --> 00:02:49.760 +customized or configured for you, + +00:02:49.760 --> 00:02:54.319 +some of the opinions that org-gtd has. + +00:02:54.319 --> 00:02:56.400 +Up here, for instance, you can see a + +00:02:56.400 --> 00:02:57.840 +delegated action. + +00:02:57.840 --> 00:03:01.040 +So a delegated action + +00:03:01.040 --> 00:03:03.200 +has someone to whom it's delegated. It's + +00:03:03.200 --> 00:03:04.720 +my parents in this case. + +00:03:04.720 --> 00:03:06.080 +It has the name of the action: ask + +00:03:06.080 --> 00:03:08.239 +parents what gift they want. + +00:03:08.239 --> 00:03:11.599 +It's marked as the state + +00:03:11.599 --> 00:03:14.800 +of WAIT because I'm waiting. + +00:03:14.800 --> 00:03:17.280 +It is scheduled because you should + +00:03:17.280 --> 00:03:20.239 +ping people or check on the status +status of a task + +00:03:20.239 --> 00:03:21.840 +when you're waiting for it, so you don't + +00:03:21.840 --> 00:03:25.680 +forget about it or it gets lost forever. + +00:03:25.680 --> 00:03:27.599 +I have a scheduled action to give a talk. + +00:03:27.599 --> 00:03:30.560 +That's what I'm doing right now. + +00:03:30.560 --> 00:03:33.440 +I have an incubated action which is + +00:03:33.440 --> 00:03:36.640 +also scheduled: to make money through the +lottery. + +00:03:36.640 --> 00:03:38.640 +This is a thing to take a look at + +00:03:38.640 --> 00:03:41.120 +for later, decide later what I want to do. + +00:03:41.120 --> 00:03:42.560 +It might be actionable, it might not be. + +00:03:42.560 --> 00:03:44.560 +I don't know right now, or I didn't + +00:03:44.560 --> 00:03:49.280 +know when I processed it, so I +incubated it. + +00:03:49.280 --> 00:03:52.319 +Underneath, we have all the things that + +00:03:52.319 --> 00:03:59.360 +are direct actions for me to take. + +00:03:59.360 --> 00:04:01.439 +All right. You see a little bit of the + +00:04:01.439 --> 00:04:04.080 +preparation seeps through the +actual talk. + +00:04:04.080 --> 00:04:05.519 +I have here two... I have a single + +00:04:05.519 --> 00:04:07.920 +action of "Steal Andrea's + +00:04:07.920 --> 00:04:09.840 +GTD configuration" + +00:04:09.840 --> 00:04:12.879 +and an action to read the GTD book. + +00:04:12.879 --> 00:04:16.320 +It's part of a project. + +00:04:16.320 --> 00:04:21.680 +So most of the day-to-day operation with + +00:04:21.680 --> 00:04:23.840 +with this package should come through + +00:04:23.840 --> 00:04:26.000 +just having the agenda open + +00:04:26.000 --> 00:04:29.600 +and having it be your source + +00:04:29.600 --> 00:04:31.199 +for the information you need to know, so + +00:04:31.199 --> 00:04:34.960 +that you can do the right thing. +So let's take a look + +00:04:34.960 --> 00:04:37.440 +at what's underneath all of this + +00:04:37.440 --> 00:04:39.600 +really quickly. + +00:04:39.600 --> 00:04:42.320 +We have--There's three primary files. + +00:04:42.320 --> 00:04:43.360 +We have the inbox. + +00:04:43.360 --> 00:04:45.759 +I'm gonna process it in a second + +00:04:45.759 --> 00:04:48.880 +because there's two things here. +One thing to cancel, like + +00:04:48.880 --> 00:04:51.919 +an action to not take. It's nothing. +And then something + +00:04:51.919 --> 00:04:53.919 +I will just put into org-roam, just so + +00:04:53.919 --> 00:04:58.960 +you can see that there is the +incubate file. + +00:04:58.960 --> 00:05:02.000 +You can see here: make money through +the lottery, + +00:05:02.000 --> 00:05:04.800 +captured, refiled here, and scheduled + +00:05:04.800 --> 00:05:06.560 +so it would show up in the agenda + +00:05:06.560 --> 00:05:10.000 +right at a given time. On the right, + +00:05:10.000 --> 00:05:13.039 +you have the actionable file. This is + +00:05:13.039 --> 00:05:14.560 +the one that has the most information, + +00:05:14.560 --> 00:05:18.960 +where most things should go. + +00:05:18.960 --> 00:05:20.560 +So I have the single actions. They all go + +00:05:20.560 --> 00:05:22.720 +underneath here. + +00:05:22.720 --> 00:05:24.479 +This is marked as next because it's an + +00:05:24.479 --> 00:05:26.240 +action for me to take. + +00:05:26.240 --> 00:05:28.240 +Delegated is marked as WAIT. It is + +00:05:28.240 --> 00:05:29.600 +not an action for me to take. It's an + +00:05:29.600 --> 00:05:31.199 +action for somebody else to take, but it + +00:05:31.199 --> 00:05:32.400 +is scheduled because + +00:05:32.400 --> 00:05:37.919 +I may wanna... I can check in at some point. + +00:05:38.400 --> 00:05:39.759 +Things that are scheduled, like "give a + +00:05:39.759 --> 00:05:43.120 +talk," do not have a TODO or NEXT or WAIT + +00:05:43.120 --> 00:05:44.960 +state because they are not bound that + +00:05:44.960 --> 00:05:46.400 +way. They are time-bound, + +00:05:46.400 --> 00:05:48.080 +so they will show up in the agenda when + +00:05:48.080 --> 00:05:50.320 +the time comes. I shouldn't act on them + +00:05:50.320 --> 00:05:53.840 +or I can't act on them beforehand. + +00:05:53.840 --> 00:05:55.280 +You can see here, I have two projects: a + +00:05:55.280 --> 00:05:56.880 +test project (and I will + +00:05:56.880 --> 00:05:58.880 +do something with this in a second) + +00:05:58.880 --> 00:06:00.080 +and then there's this + +00:06:00.080 --> 00:06:01.919 +package "Make a GTD package." There's a + +00:06:01.919 --> 00:06:04.000 +project here for me to create this. + +00:06:04.000 --> 00:06:07.520 +It's made of a bunch of actions. + +00:06:07.520 --> 00:06:09.759 +I'm going to show you two things here. + +00:06:09.759 --> 00:06:14.639 +One is: since I was trying to leverage + +00:06:14.639 --> 00:06:16.400 +Org Mode as much as possible, + +00:06:16.400 --> 00:06:20.479 +I didn't try to create very clever + +00:06:20.479 --> 00:06:24.080 +operations, because Org Mode has a lot of + +00:06:24.080 --> 00:06:27.199 +very powerful tools already. + +00:06:27.199 --> 00:06:29.600 +There's automations I can add, + +00:06:29.600 --> 00:06:31.039 +but I thought it might be + +00:06:31.039 --> 00:06:34.240 +better to leave more things in the + +00:06:34.240 --> 00:06:35.680 +hands of the user. + +00:06:35.680 --> 00:06:38.000 +So here, in this case, this test project + +00:06:38.000 --> 00:06:39.199 +we can just archive. + +00:06:39.199 --> 00:06:42.479 +Right. That's just + +00:06:42.479 --> 00:06:45.680 +C-c C-x C-a is the + +00:06:45.680 --> 00:06:52.000 +org-archive action. Save this. + +00:06:52.000 --> 00:06:54.479 +So now if we go to... + +00:06:54.479 --> 00:06:56.160 +This will create an archive file + +00:06:56.160 --> 00:06:59.440 +which will have this information + +00:06:59.440 --> 00:07:00.560 +for later perusal + +00:07:00.560 --> 00:07:03.840 +if you're interested. + +00:07:03.840 --> 00:07:05.360 +That's one thing. If we go back to the + +00:07:05.360 --> 00:07:07.199 +agenda for a second, + +00:07:07.199 --> 00:07:10.479 +you can see + +00:07:10.479 --> 00:07:14.080 +these things here. Org. So by the way, + +00:07:14.080 --> 00:07:16.479 +this "parents" here was the org + +00:07:16.479 --> 00:07:19.120 +agenda property. This is what shows here, + +00:07:19.120 --> 00:07:23.680 +right? And here, if I finish "Read +the GTD book," + +00:07:23.680 --> 00:07:27.680 +I mark it as done. Now refresh. + +00:07:27.680 --> 00:07:31.919 +You'll see that another item shows up, + +00:07:31.919 --> 00:07:34.720 +and that is where org-edna comes in. + +00:07:34.720 --> 00:07:37.280 +When an action is marked as done in a project, + +00:07:37.280 --> 00:07:39.759 +the next to do action is + +00:07:39.759 --> 00:07:41.360 +automatically marked as next, so your + +00:07:41.360 --> 00:07:43.759 +agenda is automatically updated. + +00:07:43.759 --> 00:07:46.400 +This was one of the nice things for me + +00:07:46.400 --> 00:07:48.400 +because I didn't want to have to + +00:07:48.400 --> 00:07:50.400 +open my file, go find the action, mark it + +00:07:50.400 --> 00:07:51.919 +as done, find the next one, mark it as + +00:07:51.919 --> 00:07:53.440 +next, and so forth. + +00:07:53.440 --> 00:07:57.280 +I didn't want to bother with it. + +00:07:57.280 --> 00:07:58.960 +Oh, actually, you know what, let me show + +00:07:58.960 --> 00:08:00.960 +you something else. + +00:08:00.960 --> 00:08:07.120 +This simple project... I don't need this +timestamp to + +00:08:07.120 --> 00:08:09.680 +be here but I like having a capture +timestamp here, + +00:08:09.680 --> 00:08:13.039 +so I'm gonna make one up. + +00:08:13.039 --> 00:08:15.919 +So this is the most convenient thing + +00:08:15.919 --> 00:08:16.879 +that I think... + +00:08:16.879 --> 00:08:17.919 +This is one of the most convenient + +00:08:17.919 --> 00:08:20.720 +things that I get out of this binding. + +00:08:20.720 --> 00:08:22.960 +The next really convenient thing is the + +00:08:22.960 --> 00:08:24.400 +way this gets processed. + +00:08:24.400 --> 00:08:27.440 +Let me show you this. + +00:08:27.440 --> 00:08:30.080 +When you process the entire inbox, + +00:08:30.080 --> 00:08:31.440 +what you see is + +00:08:31.440 --> 00:08:33.440 +the items one at a time, so you can work + +00:08:33.440 --> 00:08:34.560 +with them. + +00:08:34.560 --> 00:08:36.320 +You can see at the bottom... You can + +00:08:36.320 --> 00:08:38.320 +work with them without being distracted. + +00:08:38.320 --> 00:08:40.320 +You can see at the bottom the list + +00:08:40.320 --> 00:08:42.399 +of things you can do, which are all the + +00:08:42.399 --> 00:08:45.120 +decisions you can take from GTD, right? + +00:08:45.120 --> 00:08:45.760 +In this case, + +00:08:45.760 --> 00:08:48.959 +this is one to throw out, so press t. + +00:08:48.959 --> 00:08:50.959 +You have the option to make modifications to + +00:08:50.959 --> 00:08:52.320 +this if you want to. + +00:08:52.320 --> 00:08:55.200 +If you have any reason to store it, then + +00:08:55.200 --> 00:08:56.240 +you finish editing. + +00:08:56.240 --> 00:08:58.160 +You can add a tag if you want to, because + +00:08:58.160 --> 00:09:00.080 +this might still be interesting, + +00:09:00.080 --> 00:09:02.720 +and then enter and it's done. + +00:09:02.720 --> 00:09:03.920 +Important knowledge, + +00:09:03.920 --> 00:09:06.959 +I'm going to hit a for archive it. + +00:09:06.959 --> 00:09:12.160 +I'm gonna start looking at +org-roam. + +00:09:12.160 --> 00:09:20.800 +So this is important knowledge. + +00:09:20.800 --> 00:09:23.519 +I have to capture this. That's it. + +00:09:23.519 --> 00:09:24.640 +I've captured it. + +00:09:24.640 --> 00:09:27.920 +It is done. + +00:09:27.920 --> 00:09:30.959 +I go back to buffer, + +00:09:30.959 --> 00:09:34.080 +and I can mark it with C-c. + +00:09:34.080 --> 00:09:35.360 +There's no archiving because this is + +00:09:35.360 --> 00:09:37.279 +just knowledge. There's no + +00:09:37.279 --> 00:09:38.800 +tagging. It's just knowledge. But then the + +00:09:38.800 --> 00:09:40.320 +simple project... I want to show you this + +00:09:40.320 --> 00:09:42.800 +because there's some automation +that's pretty helpful. + +00:09:42.800 --> 00:09:50.000 +In the simple project, I have my first +action, + +00:09:50.000 --> 00:09:53.920 +second action, third action. + +00:09:53.920 --> 00:09:55.360 +and you see, this is all I'm writing. + +00:09:55.360 --> 00:09:56.720 +I'm not adding any of the states, any of the + +00:09:56.720 --> 00:10:00.399 +tags. They're going to be added by... + +00:10:00.399 --> 00:10:04.320 +Here, I can add a tag + +00:10:04.320 --> 00:10:05.839 +if I want to this project. + +00:10:05.839 --> 00:10:07.360 +I don't care + +00:10:07.360 --> 00:10:09.920 +right now, but you know... I leave the tags + +00:10:09.920 --> 00:10:11.279 +to the user, so they're not super + +00:10:11.279 --> 00:10:15.440 +relevant to me as a package provider. + +00:10:15.440 --> 00:10:19.600 +This is where we are. This is + +00:10:19.600 --> 00:10:21.200 +the whole thing. So now if we go back to + +00:10:21.200 --> 00:10:23.519 +the agenda, + +00:10:23.519 --> 00:10:27.600 +I have a first action, right. + +00:10:27.600 --> 00:10:30.720 +And if I go to the actionable file, and now + +00:10:30.720 --> 00:10:32.959 +see, I have a simple project that has my + +00:10:32.959 --> 00:10:34.079 +first action as NEXT, + +00:10:34.079 --> 00:10:38.079 +second option TODO, third action as TODO. + +00:10:38.079 --> 00:10:41.360 +So what I've... You know, + +00:10:41.360 --> 00:10:42.880 +as you can see... I hope what I've tried to + +00:10:42.880 --> 00:10:47.200 +do is take all of the + +00:10:47.200 --> 00:10:50.880 +tedium out of working with + +00:10:50.880 --> 00:10:52.560 +with Emacs and Org Mode when working + +00:10:52.560 --> 00:10:54.880 +with your actions so you could focus on + +00:10:54.880 --> 00:10:57.200 +what you want to do, what you need to do, + +00:10:57.200 --> 00:10:58.640 +what you care about, and the package + +00:10:58.640 --> 00:11:04.880 +would take care of the rest. + +00:11:04.880 --> 00:11:06.240 +So the last thing I wanted to take a quick + +00:11:06.240 --> 00:11:08.000 +look at was some of the the tests. + +00:11:08.640 --> 00:11:11.120 +The code is available here. You can + +00:11:11.120 --> 00:11:13.440 +see the code on... + +00:11:13.440 --> 00:11:16.880 +the code on Github if you want. + +00:11:16.880 --> 00:11:18.720 +I've had some trouble writing good tests + +00:11:18.720 --> 00:11:20.320 +for this because Org Mode was written at + +00:11:20.320 --> 00:11:26.000 +a time before testing was quite +as important, I think, + +00:11:26.000 --> 00:11:29.200 +or valued quite the same way, + +00:11:29.200 --> 00:11:31.440 +let's put it this way. + +00:11:31.440 --> 00:11:34.959 +And as a result, a number of things +actually... + +00:11:34.959 --> 00:11:37.200 +It might also be a feature of Emacs at + +00:11:37.200 --> 00:11:38.240 +the time, I don't know. + +00:11:38.240 --> 00:11:40.560 +But a lot of things in Org Mode aren't + +00:11:40.560 --> 00:11:42.480 +very testable, and so + +00:11:42.480 --> 00:11:45.519 +what I ended up doing was just having an + +00:11:45.519 --> 00:11:49.440 +actual directory in which I + +00:11:49.440 --> 00:11:53.360 +actually... with files, + +00:11:53.360 --> 00:11:55.279 +right? So I don't have much mocking + +00:11:55.279 --> 00:11:57.120 +I can do. I can't just do a bunch of fake + +00:11:57.120 --> 00:11:58.639 +files, fake directories. + +00:11:58.639 --> 00:12:01.200 +So I actually go through the process, + +00:12:01.200 --> 00:12:03.360 +actually create files, and then actually + +00:12:03.360 --> 00:12:05.040 +have Emacs pointing at this + +00:12:05.040 --> 00:12:10.240 +directory to process and get the +information. + +00:12:10.240 --> 00:12:12.240 +So I have to define the key to test that + +00:12:12.240 --> 00:12:13.920 +it gets bound properly. + +00:12:13.920 --> 00:12:18.160 +I have to set the capture templates. + +00:12:18.160 --> 00:12:19.839 +The capture templates are how + +00:12:19.839 --> 00:12:21.839 +things get added. I have a wrapper + +00:12:21.839 --> 00:12:25.600 +control... org-gtd-capture essentially is + +00:12:25.600 --> 00:12:27.279 +a wrapper around the capture that + +00:12:27.279 --> 00:12:29.920 +makes sure the inbox is there and then + +00:12:29.920 --> 00:12:32.000 +captures to the inbox. + +00:12:36.240 --> 00:12:39.360 +Making sure the items show in the agenda + +00:12:39.360 --> 00:12:41.519 +when I'm done with the processing + +00:12:41.519 --> 00:12:45.519 +was a little bit tricky. I had a bug and +I had to to fix it, + +00:12:45.519 --> 00:12:50.480 +so I just wrote this test, but it's +it's pretty convenient now + +00:12:50.480 --> 00:12:51.839 +to have that, because it gives me a + +00:12:51.839 --> 00:12:54.000 +bunch of sanity. So again, I have a + +00:12:54.000 --> 00:12:55.040 +capture, and this is... + +00:12:55.040 --> 00:12:56.000 +I wanted to be able to do this + +00:12:56.000 --> 00:12:59.680 +automatically but org-capture itself + +00:12:59.680 --> 00:13:02.079 +is not super testable right now, + +00:13:02.079 --> 00:13:03.200 +so the way it's... + +00:13:03.200 --> 00:13:04.480 +the way you test it is just by + +00:13:04.480 --> 00:13:07.519 +programmatically calling it, which + +00:13:07.519 --> 00:13:09.279 +is not exactly what I wanted, because I + +00:13:09.279 --> 00:13:10.639 +wanted something more like + +00:13:10.639 --> 00:13:13.200 +the user action, but I'll... You know, what I + +00:13:13.200 --> 00:13:15.519 +can get. + +00:13:15.519 --> 00:13:17.040 +And then I can... I'll just insert these + +00:13:17.040 --> 00:13:19.360 +words into the buffer and then + +00:13:19.360 --> 00:13:21.760 +I'll finalize the capture. Then I have + +00:13:21.760 --> 00:13:23.519 +another... I have a test package here + +00:13:23.519 --> 00:13:26.160 +called with simulated input which + +00:13:26.160 --> 00:13:29.920 +basically calls this and then enters + +00:13:29.920 --> 00:13:33.040 +these user actions. Right, so + +00:13:33.040 --> 00:13:34.800 +like the letter s, + +00:13:34.800 --> 00:13:39.040 +C-c c and then RET. And that is, + +00:13:39.040 --> 00:13:41.360 +you know, choosing a single action, + +00:13:41.360 --> 00:13:42.480 +then finishing the edit, + +00:13:42.480 --> 00:13:45.360 +and then adding zero and not adding tags. + +00:13:46.480 --> 00:13:48.639 +As you can tell, there's a strong layer + +00:13:48.639 --> 00:13:50.320 +of disconnect between the tests + +00:13:50.320 --> 00:13:56.560 +and what they represent. +That's a work in progress. + +00:13:56.560 --> 00:13:59.680 +I have four tests. + +00:13:59.680 --> 00:14:02.320 +It's not a lot, but I want to... I intend to + +00:14:02.320 --> 00:14:05.040 +add more as I keep on adding more +behavior. + +00:14:05.040 --> 00:14:09.519 +I would like this to be eventually + +00:14:09.519 --> 00:14:14.320 +a sane starting point for GTD. + +00:14:14.320 --> 00:14:16.079 +There's a lot of people like + +00:14:16.079 --> 00:14:18.720 +like Andrea, like Rainer, like... + +00:14:18.720 --> 00:14:20.959 +I mean, if you search for Org Mode and + +00:14:20.959 --> 00:14:22.160 +GTD, you'll find + +00:14:22.160 --> 00:14:25.279 +a lot of blog entries, a lot of + +00:14:25.279 --> 00:14:27.600 +entries, a lot of articles that explain + +00:14:27.600 --> 00:14:29.360 +how to connect it together, how to think + +00:14:29.360 --> 00:14:31.199 +that way, how to use all the tools that + +00:14:31.199 --> 00:14:34.880 +Org Mode makes available. + +00:14:34.880 --> 00:14:38.399 +Hopefully, this package is a way to + +00:14:38.399 --> 00:14:40.320 +get started without having to write + +00:14:40.320 --> 00:14:45.920 +too much of your own code. + +00:14:45.920 --> 00:14:47.279 +Then eventually, you can move away from + +00:14:47.279 --> 00:14:48.720 +the package if you want, if you realize + +00:14:48.720 --> 00:14:50.000 +that you are developing different opinions + +00:14:50.000 --> 00:14:52.000 +and you don't want to... + +00:14:52.000 --> 00:14:54.160 +If GTD doesn't work this way for you, if + +00:14:54.160 --> 00:14:55.519 +you have a different way, + +00:14:55.519 --> 00:14:57.839 +it is a better fit for the way you want + +00:14:57.839 --> 00:14:59.279 +to organize your life, + +00:14:59.279 --> 00:15:02.720 +then move away from the package. + +00:15:02.720 --> 00:15:05.920 +In the meanwhile, I welcome all thoughts. + +00:15:05.920 --> 00:15:07.839 +I welcome contributions. I welcome + +00:15:07.839 --> 00:15:10.079 +questions, bug reports, everything + +00:15:10.079 --> 00:15:13.920 +So, you know, come say hi. Try the package. + +00:15:13.920 --> 00:15:17.040 +And yeah, see you. + +00:15:17.040 --> 00:15:20.560 +I'll see you online! diff --git a/2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt b/2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt new file mode 100644 index 00000000..ba6afec0 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt @@ -0,0 +1,1342 @@ +WEBVTT + +00:00:00.240 --> 00:00:01.520 +([Amin Bandali]: I mean, we are ahead of +the schedule + +00:00:01.520 --> 00:00:03.679 +a little bit, but I mean we also were + +00:00:03.679 --> 00:00:05.680 +a little bit earlier in the day. + +00:00:05.680 --> 00:00:09.040 +Yeah, I'd say that's fine. Go for it. + +00:00:09.040 --> 00:00:10.800 +Take it away.) + +00:00:10.800 --> 00:00:14.240 +[Leo Vivier]: Sure. Thank you. So am I live already? + +00:00:14.240 --> 00:00:16.640 +[Amin]: Yep, you're live. + +00:00:16.640 --> 00:00:17.359 +[Leo]: Hello + +00:00:17.359 --> 00:00:18.880 +Splendid. So I'll just start the timer to + +00:00:18.880 --> 00:00:20.720 +make sure that I don't go overboard. + +00:00:20.720 --> 00:00:22.720 +All right. ([BBB:] you are now muted) Okay, good + +00:00:22.720 --> 00:00:24.160 +to go now. + +00:00:24.160 --> 00:00:26.960 +Hello again, everyone! I hope you had, + +00:00:26.960 --> 00:00:28.240 +well, quite a lot of talks + +00:00:28.240 --> 00:00:30.880 +ever since the last one I did, and all + +00:00:30.880 --> 00:00:32.000 +more interesting + +00:00:32.000 --> 00:00:35.040 +one after the other. + +00:00:35.040 --> 00:00:36.559 +You know, I'm a bit in a bit of a weird + +00:00:36.559 --> 00:00:38.239 +spot right now, because I'm supposed to + +00:00:38.239 --> 00:00:40.239 +be presenting to you (as you can see on +my screen) + +00:00:40.239 --> 00:00:42.879 +"One big-ass Org file or multiple tiny ones: + +00:00:42.879 --> 00:00:44.960 +finally, the end of the debate," + +00:00:44.960 --> 00:00:48.160 +and it sounds about as clickbaity + +00:00:48.160 --> 00:00:49.760 +as you can possibly get with those + +00:00:49.760 --> 00:00:51.280 +topics. By the way, + +00:00:51.280 --> 00:00:54.000 +credit where credit is due, the title + +00:00:54.000 --> 00:00:55.760 +is not mine. It's actually from Bastien + +00:00:55.760 --> 00:00:57.039 +Guerry, the current Org + +00:00:57.039 --> 00:01:00.719 +maintainer. Yeah, I wanted to + +00:01:00.719 --> 00:01:03.199 +talk to you a little bit today about + +00:01:03.199 --> 00:01:04.879 +this question because + +00:01:04.879 --> 00:01:07.600 +if you are used to going on +reddit.com/r/emacs , + +00:01:07.600 --> 00:01:09.600 +you know the subreddit that we +have, + +00:01:09.600 --> 00:01:11.840 +if you go on Hacker News often, you know + +00:01:11.840 --> 00:01:13.200 +it's a question that + +00:01:13.200 --> 00:01:16.000 +you see pop up every once in a while. + +00:01:16.000 --> 00:01:17.520 +"Should I be using + +00:01:17.520 --> 00:01:20.640 +one big file, or should I be using + +00:01:20.640 --> 00:01:24.799 +a lot of tiny files?" I believe you +know + +00:01:24.799 --> 00:01:27.600 +we've got defenders on both sides. If I + +00:01:27.600 --> 00:01:29.520 +just show you one example... + +00:01:29.520 --> 00:01:32.479 +We have Karl Voit. He's one + +00:01:32.479 --> 00:01:35.280 +of the organizers for the conference. + +00:01:35.280 --> 00:01:37.920 +He is the guy who probably has the + +00:01:37.920 --> 00:01:40.000 +biggest Org Mode files + +00:01:40.000 --> 00:01:42.000 +right now in all the people I know, and + +00:01:42.000 --> 00:01:43.759 +god knows I know plenty of people use + +00:01:43.759 --> 00:01:44.479 +Org Mode. + +00:01:44.479 --> 00:01:46.880 +But if you just look at this line--I hope + +00:01:46.880 --> 00:01:48.320 +it's not too small; you just + +00:01:48.320 --> 00:01:51.360 +make it a little larger--but + +00:01:51.360 --> 00:01:56.719 +Karl basically has a file with + +00:01:56.719 --> 00:02:01.759 +126,000 lines. I'm just going to pause + +00:02:01.759 --> 00:02:04.560 +and try to have you imagine how large a + +00:02:04.560 --> 00:02:06.399 +file it actually is. + +00:02:06.399 --> 00:02:08.399 +Just think about all of these lines + +00:02:08.399 --> 00:02:10.000 +being tasks in your days. + +00:02:10.000 --> 00:02:13.200 +Think about all those lines being about +little thoughts + +00:02:13.200 --> 00:02:14.400 +you know that you've had throughout the + +00:02:14.400 --> 00:02:17.200 +day or project that you were working on. + +00:02:17.200 --> 00:02:19.680 +It's massive. You know one of the + +00:02:19.680 --> 00:02:23.920 +problems that Karl Voit actually +approaches on + +00:02:23.920 --> 00:02:27.680 +this topic is that it takes him roughly + +00:02:27.680 --> 00:02:30.160 +20 seconds to get his Org agenda going, + +00:02:30.160 --> 00:02:32.400 +which is a massive amount of time. + +00:02:32.400 --> 00:02:35.680 +I mean, we have very fast computers now. + +00:02:35.680 --> 00:02:37.720 +You know, ever since Emacs was created in + +00:02:37.720 --> 00:02:42.319 +1976, computers... I have no idea how much faster + +00:02:42.319 --> 00:02:43.440 +they've gotten. + +00:02:43.440 --> 00:02:47.760 +And yet, you know, for 100,000 lines, + +00:02:47.760 --> 00:02:49.599 +Emacs seems to be choking. It's + +00:02:49.599 --> 00:02:51.120 +certainly not reasonable, in a way, to + +00:02:51.120 --> 00:02:52.720 +have to wait 20 seconds + +00:02:52.720 --> 00:02:55.360 +just for your entire file to be parsed. + +00:02:55.360 --> 00:02:57.040 +So basically what I want to do-- + +00:02:57.040 --> 00:02:58.480 +By the way, I forgot to introduce the + +00:02:58.480 --> 00:03:00.879 +presentation, but I'm Leo Vivier. I did this + +00:03:00.879 --> 00:03:02.879 +before, for those who were around. + +00:03:02.879 --> 00:03:05.519 +I help maintain a software which + +00:03:05.519 --> 00:03:06.640 +is called org-roam, + +00:03:06.640 --> 00:03:08.560 +and that's the expertise that I have on + +00:03:08.560 --> 00:03:09.840 +the topic. + +00:03:09.840 --> 00:03:11.760 +Actually, if you go online, I do have a + +00:03:11.760 --> 00:03:13.599 +Github page. I will make sure that you + +00:03:13.599 --> 00:03:15.440 +have all the links available afterwards. + +00:03:15.440 --> 00:03:18.640 +But I do publish my init files, + +00:03:18.640 --> 00:03:20.720 +and you can see, if you scroll at the + +00:03:20.720 --> 00:03:22.319 +bottom, I have a little demonstration + +00:03:22.319 --> 00:03:23.200 +which shows you + +00:03:23.200 --> 00:03:25.519 +the fancy things that I can do with my + +00:03:25.519 --> 00:03:28.159 +Org Mode setup. That might be even +interesting + +00:03:28.159 --> 00:03:30.720 +in light of the talk you've just had + +00:03:30.720 --> 00:03:32.319 +about GTD stuff, because + +00:03:32.319 --> 00:03:34.080 +the first one is about how I handle my + +00:03:34.080 --> 00:03:36.159 +projects, the second one is about + +00:03:36.159 --> 00:03:39.680 +the flow from a task as I work on it... + +00:03:39.680 --> 00:03:41.519 +So I won't spend too much time on +this, but + +00:03:41.519 --> 00:03:43.120 +basically that's my expertise. + +00:03:43.120 --> 00:03:45.440 +I have spent eight years + +00:03:45.440 --> 00:03:46.959 +working with Org Mode, + +00:03:46.959 --> 00:03:48.959 +three of them actually thinking about + +00:03:48.959 --> 00:03:50.720 +writing packages. + +00:03:50.720 --> 00:03:54.080 +The thing is, if I go into a little + +00:03:54.080 --> 00:03:55.680 +bit of detail (and obviously it's only a + +00:03:55.680 --> 00:03:57.760 +lighting talk, so I won't have time to + +00:03:57.760 --> 00:04:00.720 +actually go really in depth about it), but + +00:04:00.720 --> 00:04:01.840 +there is something + +00:04:01.840 --> 00:04:03.599 +in the Org Mode library which is + +00:04:03.599 --> 00:04:05.200 +called org-element. + +00:04:05.200 --> 00:04:07.000 +You have the name right there, + +00:04:07.000 --> 00:04:08.319 +org-element.el, + +00:04:08.319 --> 00:04:12.319 +.el being for Elisp file. As you +can see, + +00:04:12.319 --> 00:04:14.799 +the page is on the Worg wiki, so it's + +00:04:14.799 --> 00:04:16.239 +accessible by everyone. + +00:04:16.239 --> 00:04:19.280 +It's basically the API that + +00:04:19.280 --> 00:04:23.759 +Org Mode uses to parse Org Mode files. + +00:04:23.759 --> 00:04:26.400 +For those who don't know, parsing + +00:04:26.400 --> 00:04:27.199 +means basically + +00:04:27.199 --> 00:04:29.360 +checking a file, checking all the contents + +00:04:29.360 --> 00:04:30.880 +of the file, and extracting all the + +00:04:30.880 --> 00:04:32.880 +information that we need from that file. + +00:04:32.880 --> 00:04:34.960 +As you can imagine, you all have + +00:04:34.960 --> 00:04:36.560 +Org Mode files in your mind, + +00:04:36.560 --> 00:04:38.240 +well you know they can be fairly complex. + +00:04:38.240 --> 00:04:39.840 +You can have properties, + +00:04:39.840 --> 00:04:41.759 +you can have contextual information, like + +00:04:41.759 --> 00:04:43.040 +if you write a line + +00:04:43.040 --> 00:04:45.199 +which starts at column zero (which means + +00:04:45.199 --> 00:04:46.560 +at the left), + +00:04:46.560 --> 00:04:48.000 +it doesn't have the same + +00:04:48.000 --> 00:04:49.680 +meaning, whether or not it is + +00:04:49.680 --> 00:04:52.639 +before the beginning of a headline or if + +00:04:52.639 --> 00:04:54.160 +it is after the beginning of a headline. + +00:04:54.160 --> 00:04:55.199 +It's going to be + +00:04:55.199 --> 00:04:57.759 +relatively different, hierarchically + +00:04:57.759 --> 00:04:58.960 +speaking. + +00:04:58.960 --> 00:05:02.639 +So the problem, when it comes to the +question of + +00:05:02.639 --> 00:05:05.759 +many files versus one big file or + +00:05:05.759 --> 00:05:08.560 +few big files, is that we always have to + +00:05:08.560 --> 00:05:09.600 +keep in mind + +00:05:09.600 --> 00:05:12.880 +what org-element wants you to do. + +00:05:12.880 --> 00:05:15.680 +The thing is, there are plenty of + +00:05:15.680 --> 00:05:17.440 +problems when it comes to parsing files, + +00:05:17.440 --> 00:05:19.330 +the first one being obviously + +00:05:19.330 --> 00:05:22.160 +that Emacs is a single-thread + +00:05:22.160 --> 00:05:24.880 +process (or has some threading + +00:05:24.880 --> 00:05:26.400 +capabilities; we're not going to go into + +00:05:26.400 --> 00:05:28.639 +the details right now, that's not my goal). + +00:05:28.639 --> 00:05:32.400 +It makes it incredibly hard to + +00:05:32.400 --> 00:05:35.919 +parallelize parsing processes + +00:05:35.919 --> 00:05:39.280 +with the current technology. + +00:05:39.280 --> 00:05:42.320 +So you'd have to imagine that if you + +00:05:42.320 --> 00:05:44.080 +have a very large file--if you go back + +00:05:44.080 --> 00:05:46.479 +to the example of Karl Voit from before: + +00:05:46.479 --> 00:05:49.199 +100,000 lines--that means that you have + +00:05:49.199 --> 00:05:50.000 +to scan + +00:05:50.000 --> 00:05:52.320 +through every single line, basically. + +00:05:52.320 --> 00:05:53.759 +Because sometimes... Let's just say that + +00:05:53.759 --> 00:05:56.080 +you have a property drawer, for instance, + +00:05:56.080 --> 00:05:59.440 +which tells you, oh okay, this tree + +00:05:59.440 --> 00:06:03.520 +has the tag :foo:. So the problem is, there + +00:06:03.520 --> 00:06:05.120 +are multiple ways for you + +00:06:05.120 --> 00:06:08.720 +to define a tag. You can use the + +00:06:08.720 --> 00:06:11.840 +usual way, which is about wrapping in + +00:06:11.840 --> 00:06:14.000 +columns the :tag: at the end of a heading. + +00:06:14.000 --> 00:06:16.160 +For instance, if I... (I'm not going to + +00:06:16.160 --> 00:06:17.360 +switch to Emacs, that's going to waste too + +00:06:17.360 --> 00:06:18.240 +much time) + +00:06:18.240 --> 00:06:21.520 +That's one way to say your tag. +But say, + +00:06:21.520 --> 00:06:23.520 +you have tag inheritance, which means + +00:06:23.520 --> 00:06:25.360 +that when you have a parent with a tag, + +00:06:25.360 --> 00:06:28.160 +you also want the child to inherit the + +00:06:28.160 --> 00:06:29.520 +tag. If you have + +00:06:29.520 --> 00:06:32.400 +first heading with the tag :foo:, you have + +00:06:32.400 --> 00:06:33.680 +the first subheading, + +00:06:33.680 --> 00:06:37.520 +and the tag :foo: is implied. Now imagine + +00:06:37.520 --> 00:06:39.680 +having to do that with a file that is + +00:06:39.680 --> 00:06:41.039 +completely nested, + +00:06:41.039 --> 00:06:44.160 +a file that has maybe 9, 10, + +00:06:44.160 --> 00:06:47.280 +11 levels of depth to it. + +00:06:47.280 --> 00:06:49.039 +It's mind-bogglingly complicated for the + +00:06:49.039 --> 00:06:51.039 +software to do that, knowing that... I've + +00:06:51.039 --> 00:06:52.639 +told you about tags, + +00:06:52.639 --> 00:06:55.919 +but any property can be inheritable. + +00:06:55.919 --> 00:06:58.639 +Anything like priorities, even. Though why + +00:06:58.639 --> 00:07:00.240 +would you do this? + +00:07:00.240 --> 00:07:03.759 +You can have groups. You can have all this. + +00:07:03.759 --> 00:07:05.599 +And as someone who went through the trouble + +00:07:05.599 --> 00:07:07.199 +of optimizing his Org agenda... So + +00:07:07.199 --> 00:07:08.560 +basically, if we go back to the + +00:07:08.560 --> 00:07:12.160 +GIFs--oh god we've already had this +discussion + +00:07:12.160 --> 00:07:14.479 +between the "git" and "magit" and now I've + +00:07:14.479 --> 00:07:16.400 +started "gif" and "gif" and I only have one + +00:07:16.400 --> 00:07:18.080 +more minute left to do so, so let's just + +00:07:18.080 --> 00:07:19.599 +say I'm going to say "gif" + +00:07:19.599 --> 00:07:23.599 +just to spite people... So if you go on + +00:07:23.599 --> 00:07:26.880 +the way I organize my agenda, what I did + +00:07:26.880 --> 00:07:29.120 +in order to keep my agenda build time + +00:07:29.120 --> 00:07:30.960 +under two seconds, + +00:07:30.960 --> 00:07:33.440 +is that I've rewritten a whole lot of + +00:07:33.440 --> 00:07:36.560 +codes to be able to parse my Org agenda +files. + +00:07:36.560 --> 00:07:40.080 +So the thing is, I'm going to be talking + +00:07:40.080 --> 00:07:41.360 +more about this later. + +00:07:41.360 --> 00:07:43.440 +I only have, let's say, one minute to + +00:07:43.440 --> 00:07:44.479 +conclude. + +00:07:44.479 --> 00:07:47.440 +So as you've gathered, I'm not going to + +00:07:47.440 --> 00:07:48.479 +be giving you the answer right now. + +00:07:48.479 --> 00:07:51.039 +I'm going to be talking about + +00:07:51.039 --> 00:07:53.440 +org-roam a little later, which is about + +00:07:53.440 --> 00:07:55.680 +following the principle of having many + +00:07:55.680 --> 00:07:57.759 +small files. + +00:07:57.759 --> 00:08:01.120 +But as someone who has been using + +00:08:01.120 --> 00:08:02.960 +one large file to manage my life, + +00:08:02.960 --> 00:08:04.879 +you know, I'm sitting on the fence. + +00:08:04.879 --> 00:08:08.319 +I do not know which one is the best, + +00:08:08.319 --> 00:08:10.560 +but I hope that my presentation has + +00:08:10.560 --> 00:08:12.240 +given you a little idea + +00:08:12.240 --> 00:08:15.199 +of what goes on behind the principles. + +00:08:15.520 --> 00:08:16.560 +You also need to think about the + +00:08:16.560 --> 00:08:18.560 +philosophy behind the organization of + +00:08:18.560 --> 00:08:19.120 +your notes. + +00:08:19.120 --> 00:08:21.039 +I hope to be approaching this topic + +00:08:21.039 --> 00:08:23.280 +with you in about + +00:08:23.280 --> 00:08:25.360 +two hours or so (maybe one hour actually). + +00:08:25.360 --> 00:08:27.520 +I'm actually finished. I've decided to + +00:08:27.520 --> 00:08:28.960 +leave you two minutes of questions. + +00:08:28.960 --> 00:08:31.520 +If someone could feed me the + +00:08:31.520 --> 00:08:32.880 +questions, that might be best, + +00:08:32.880 --> 00:08:34.399 +because I don't want... oh actually I can + +00:08:34.399 --> 00:08:36.240 +just open the pad. + +00:08:36.240 --> 00:08:39.919 +I can just open it. Give me a second, okay. + +00:08:40.800 --> 00:08:43.039 +Just loading up. I might stop showing + +00:08:43.039 --> 00:08:43.839 +my screen. + +00:08:43.839 --> 00:08:46.959 +That might make it easier. So I mean if + +00:08:46.959 --> 00:08:47.519 +you can make + +00:08:47.519 --> 00:08:49.360 +myself big now on the screen, that would + +00:08:49.360 --> 00:08:52.000 +be splendid. ([Amin]: yeah sure) + +00:08:52.000 --> 00:08:55.839 +Thank you. Where are we... + +00:08:55.839 --> 00:08:58.720 +Question 12. Okay, so what's better, one + +00:08:58.720 --> 00:09:00.160 +big file or...? + +00:09:00.160 --> 00:09:02.160 +Is it a jab to tell me that I + +00:09:02.160 --> 00:09:03.120 +haven't answered the question because + +00:09:03.120 --> 00:09:04.240 +someone just + +00:09:04.240 --> 00:09:06.320 +asked me the question? Well, personally, if + +00:09:06.320 --> 00:09:08.080 +I were to give you a quick answer in + +00:09:08.560 --> 00:09:11.600 +20 seconds, personally, I think it's a + +00:09:11.600 --> 00:09:13.920 +question that is contextually based. + +00:09:13.920 --> 00:09:15.680 +Do you want something that is efficient + +00:09:15.680 --> 00:09:17.839 +as far as optimization is concerned? + +00:09:17.839 --> 00:09:21.200 +Then you need to think about + +00:09:21.200 --> 00:09:23.440 +this. Personally, for all the + +00:09:23.440 --> 00:09:24.640 +organization that I do, + +00:09:24.640 --> 00:09:27.760 +all this stuff, all the TODOs that I +handle, + +00:09:27.760 --> 00:09:30.080 +I like to do this in one simple big file + +00:09:30.080 --> 00:09:31.519 +because you benefit from all the + +00:09:31.519 --> 00:09:33.760 +refiling capabilities of Org Mode, + +00:09:33.760 --> 00:09:37.200 +so I would do that. But for knowledge +management, + +00:09:37.200 --> 00:09:40.080 +for note-taking and all this, well I'd + +00:09:40.080 --> 00:09:41.279 +much rather follow the + +00:09:41.279 --> 00:09:42.959 +org-roam way of doing things, which is + +00:09:42.959 --> 00:09:44.480 +about having many + +00:09:44.480 --> 00:09:48.240 +small files. I'm not getting any + +00:09:48.240 --> 00:09:50.000 +more questions. I'm not sure if there is + +00:09:50.000 --> 00:09:52.080 +one on IRC that could be fed to me. + +00:09:52.080 --> 00:09:57.040 +Otherwise, I'm happy to pass over to +the next speaker. + +00:09:57.040 --> 00:09:59.360 +By the way, just before I finish, your + +00:09:59.360 --> 00:10:01.360 +world is a lie. It's not a three-piece + +00:10:01.360 --> 00:10:04.399 +suit. I'm wearing jeans below, so I hope + +00:10:04.399 --> 00:10:06.520 +that satisfies your curiosity. + +00:10:10.640 --> 00:10:12.640 +Okay, there's one more question appearing. + +00:10:12.640 --> 00:10:15.040 +"but otherwise one big file to have + +00:10:15.040 --> 00:10:17.680 +everything..." So I'm putting you on the + +00:10:17.680 --> 00:10:19.760 +spot, I believe. It was such a short talk. + +00:10:19.760 --> 00:10:21.040 +You know the problem is, + +00:10:21.040 --> 00:10:24.720 +I just wanted to give you a little +answer. + +00:10:24.720 --> 00:10:26.959 +A little, you know, path of thinking on + +00:10:26.959 --> 00:10:27.920 +this topic. + +00:10:27.920 --> 00:10:29.839 +Obviously it's a topic I could be + +00:10:29.839 --> 00:10:31.600 +spending 40 minutes on, + +00:10:31.600 --> 00:10:33.200 +but I'm going to be drained, you're going to + +00:10:33.200 --> 00:10:35.120 +be drained, nobody's going to be happy + +00:10:35.120 --> 00:10:35.680 +if I do this. + +00:10:39.440 --> 00:10:41.200 +Someone asked me if I switch between + +00:10:41.200 --> 00:10:42.880 +British and French accents. + +00:10:42.880 --> 00:10:46.560 +A little secret for you: + +00:10:46.560 --> 00:10:48.480 +when I'm stressed, I tend to revert to a + +00:10:48.480 --> 00:10:49.760 +French accent, + +00:10:49.760 --> 00:10:53.760 +so you can measure the amount of stress + +00:10:53.760 --> 00:10:56.160 +that I'm feeling during this talk + +00:10:56.160 --> 00:10:58.880 +with the amount of h's that I drop and + +00:10:58.880 --> 00:11:02.720 +the amount of sheer fright that you can +see sometimes + +00:11:02.720 --> 00:11:04.399 +in my eyes, when I'm thinking about what + +00:11:04.399 --> 00:11:08.240 +to say next. + +00:11:08.240 --> 00:11:10.880 +All right sir. So, Amin, do you believe + +00:11:10.880 --> 00:11:14.240 +we can leave it at that? I'll be... + +00:11:14.240 --> 00:11:15.519 +People will see plenty more of me + +00:11:15.519 --> 00:11:17.040 +later on, anyway. + +00:11:17.040 --> 00:11:20.640 +([Amin:] So, looking at the schedule, +I think + +00:11:20.640 --> 00:11:23.920 +your talk has until like 2:02, meaning + +00:11:23.920 --> 00:11:27.120 +like five or six minutes from now.) + +00:11:27.120 --> 00:11:28.000 +Oh, right. + +00:11:28.000 --> 00:11:30.000 +([Amin:] So if you do like to take one + +00:11:30.000 --> 00:11:31.680 +or two questions, to add two more + +00:11:31.680 --> 00:11:33.920 +questions, by all means.) + +00:11:33.920 --> 00:11:37.040 +So someone has asked me what is + +00:11:37.040 --> 00:11:38.320 +the Emacs + +00:11:38.320 --> 00:11:40.640 +icon (sorry, see, another French accent) + +00:11:40.640 --> 00:11:42.880 +here in my status bar... + +00:11:42.880 --> 00:11:44.880 +Oh sorry, I'm not sharing any more. + +00:11:44.880 --> 00:11:46.640 +I might just share again just so that + +00:11:46.640 --> 00:11:49.200 +everyone can catch a glimpse of that. + +00:11:49.200 --> 00:11:53.120 +There we go. Allow... + +00:11:53.120 --> 00:11:54.880 +So it should be... So if you could make me + +00:11:54.880 --> 00:11:56.240 +small again, Amin, I'm not sure if it's + +00:11:56.240 --> 00:11:56.959 +going to do it + +00:11:56.959 --> 00:12:00.480 +by itself, but I do have a little icon + +00:12:00.480 --> 00:12:01.839 +here in my status bar + +00:12:01.839 --> 00:12:04.480 +which is basically a way to interact + +00:12:04.480 --> 00:12:05.760 +with org-protocol. + +00:12:05.760 --> 00:12:09.120 +I'm not going to look for it right now, + +00:12:09.120 --> 00:12:10.800 +but it's a browser extension that is + +00:12:10.800 --> 00:12:12.399 +developed by one of my friends + +00:12:12.399 --> 00:12:15.680 +over at Ranger whose name is Li Fong (??) and + +00:12:16.160 --> 00:12:18.240 +it's very useful. I'm someone who uses a + +00:12:18.240 --> 00:12:22.320 +lot of Org protocols. And by the way, + +00:12:22.320 --> 00:12:25.279 +I used to teach English to high +schoolers, and they + +00:12:25.279 --> 00:12:27.279 +were supremely worried + +00:12:27.279 --> 00:12:29.600 +when I showed them my status line and they + +00:12:29.600 --> 00:12:34.000 +saw "kill" and "explore" in my status +line. + +00:12:34.000 --> 00:12:36.560 +As fellow Emacs users, you know that + +00:12:36.560 --> 00:12:40.880 +obviously kill means to kill a selection +of text and + +00:12:40.880 --> 00:12:44.320 +keep it inside your clipboard, + +00:12:44.320 --> 00:12:47.279 +but for my students, they + +00:12:47.279 --> 00:12:48.320 +were very worried + +00:12:48.320 --> 00:12:51.600 +about what their professor was up to + +00:12:51.600 --> 00:12:53.600 +during his nights. + +00:12:53.600 --> 00:12:55.120 +So let's see if we've got more questions. + +00:12:55.120 --> 00:12:56.560 +I'm showing you the questions on the + +00:12:56.560 --> 00:12:57.920 +rainbow. Let's see if + +00:12:57.920 --> 00:13:00.560 +we've got more. People are posting a + +00:13:00.560 --> 00:13:01.920 +lot of questions now. + +00:13:01.920 --> 00:13:03.920 +So how do you feel about archiving files + +00:13:03.920 --> 00:13:06.399 +in Org Mode and how can that work? + +00:13:06.399 --> 00:13:09.360 +So one of the things when we think about + +00:13:09.360 --> 00:13:13.920 +optimization is: yes, archiving done trees + +00:13:13.920 --> 00:13:16.240 +is a good idea because it means that if + +00:13:16.240 --> 00:13:17.920 +we go back to the org-element, the way it + +00:13:17.920 --> 00:13:20.399 +works (and we'll get into technical details + +00:13:20.399 --> 00:13:22.079 +afterwards; I'm giving a presentation + +00:13:22.079 --> 00:13:24.079 +about org-roam technical + +00:13:24.079 --> 00:13:26.880 +aspects, sorry, so I'll have a chance to + +00:13:26.880 --> 00:13:28.399 +expand a little more on this) + +00:13:28.399 --> 00:13:31.360 +but basically, org-element needs to... + +00:13:31.360 --> 00:13:35.279 +Every time it sees a TODO, it has to +consider it, + +00:13:35.279 --> 00:13:38.320 +even though it is a done TODO. Why? + +00:13:38.320 --> 00:13:40.000 +Because let's say, for instance, that in + +00:13:40.000 --> 00:13:41.839 +your agenda you want to activate + +00:13:41.839 --> 00:13:45.519 +log mode, which is going to show the + +00:13:45.519 --> 00:13:48.959 +tasks which are done... Now you could be + +00:13:48.959 --> 00:13:51.440 +clever and say, oh okay, the Org agenda does not + +00:13:51.440 --> 00:13:53.360 +need to show done items, so it's not going + +00:13:53.360 --> 00:13:54.880 +to look for them, + +00:13:54.880 --> 00:13:56.959 +but the problem is that org-element is + +00:13:56.959 --> 00:13:59.519 +always called. It always needs to parse +the buffer. + +00:13:59.519 --> 00:14:01.839 +You know, Nicolas Goaziou, who is the + +00:14:01.839 --> 00:14:03.519 +French developer who's worked a whole + +00:14:03.519 --> 00:14:05.040 +lot on org-element + +00:14:05.040 --> 00:14:07.440 +has gone through a lot of trouble to + +00:14:07.440 --> 00:14:11.600 +optimize org-element, but the problem is + +00:14:11.600 --> 00:14:13.279 +there's just so much that we can do with + +00:14:13.279 --> 00:14:14.720 +a concurrent process. + +00:14:14.720 --> 00:14:18.560 +Right now it leaves somewhat + +00:14:18.560 --> 00:14:21.120 +things to be desired, but + +00:14:21.120 --> 00:14:22.079 +we're working on it. + +00:14:22.079 --> 00:14:24.800 +One more time... I feel like I spent + +00:14:24.800 --> 00:14:25.839 +half of this talk + +00:14:25.839 --> 00:14:28.000 +teasing my next talks, but I'll be + +00:14:28.000 --> 00:14:29.360 +talking more about this + +00:14:29.360 --> 00:14:31.279 +in my future talks in about one to two + +00:14:31.279 --> 00:14:32.639 +hours. + +00:14:32.639 --> 00:14:34.959 +So, continuing with questions, how big are + +00:14:34.959 --> 00:14:36.079 +my Org files? + +00:14:36.079 --> 00:14:37.760 +So in the background, I'm just going to + +00:14:37.760 --> 00:14:40.720 +check how many lines I have in my main +file. + +00:14:40.720 --> 00:14:42.959 +In my own file, so the one I told you + +00:14:42.959 --> 00:14:44.079 +about where I keep all + +00:14:44.079 --> 00:14:47.279 +my TODO GTD stuff, I have + +00:14:47.279 --> 00:14:50.720 +38,000 lines, which is... + +00:14:50.720 --> 00:14:54.000 +It's sizable, definitely. + +00:14:54.000 --> 00:14:57.040 +But I do archive a lot of stuff, + +00:14:57.040 --> 00:14:58.480 +so that might be a slight difference + +00:14:58.480 --> 00:15:00.880 +between myself and Karl Voit, + +00:15:00.880 --> 00:15:02.079 +even though I don't remember if they + +00:15:02.079 --> 00:15:04.880 +actually archive stuff. + +00:15:04.880 --> 00:15:06.639 +So does it not consume more resources + +00:15:06.639 --> 00:15:08.480 +and time to load multiple files + +00:15:08.480 --> 00:15:10.839 +files than a large file or the same + +00:15:10.839 --> 00:15:12.560 +content now? + +00:15:12.560 --> 00:15:15.839 +Theoretically, yes, having many files + +00:15:15.839 --> 00:15:19.279 +open concurrently is slightly slower + +00:15:19.279 --> 00:15:22.240 +than having one main file opened. + +00:15:22.240 --> 00:15:24.160 +Now the problem is for those of you who + +00:15:24.160 --> 00:15:25.279 +have large files, + +00:15:25.279 --> 00:15:27.199 +you may have noticed that when you are + +00:15:27.199 --> 00:15:29.360 +scrolling in a very large file, + +00:15:29.360 --> 00:15:32.560 +it starts taking quite a bit of time. Why? + +00:15:32.560 --> 00:15:34.480 +It's because in Org Mode, + +00:15:34.480 --> 00:15:35.920 +you have a lot of content + +00:15:35.920 --> 00:15:38.959 +that is hidden, so when you have + +00:15:38.959 --> 00:15:40.959 +the view mode which hides as much stuff + +00:15:40.959 --> 00:15:43.600 +as possible, meaning that you only see + +00:15:43.600 --> 00:15:45.360 +the top heading--and I'm checking the + +00:15:45.360 --> 00:15:46.880 +time, Amin, don't worry, I'm finished + +00:15:46.880 --> 00:15:50.240 +on this one-- + +00:15:50.240 --> 00:15:52.160 +when you're hiding a whole lot of stuff, + +00:15:52.160 --> 00:15:54.720 +Org Mode needs to keep track, or I +should say, + +00:15:54.720 --> 00:15:56.959 +Emacs needs to keep track of which areas + +00:15:56.959 --> 00:15:58.160 +of text to show + +00:15:58.160 --> 00:16:00.560 +and which areas of text to hide. + +00:16:00.560 --> 00:16:02.320 +The problem is that when you're hiding stuff-- + +00:16:02.320 --> 00:16:04.480 +let's say you're moving from the + +00:16:04.480 --> 00:16:06.320 +first heading to the second heading, + +00:16:06.320 --> 00:16:08.639 +but you've got like 10,000 lines between + +00:16:08.639 --> 00:16:09.839 +those two headings-- + +00:16:09.839 --> 00:16:11.519 +well, Emacs needs to compute the + +00:16:11.519 --> 00:16:13.680 +difference between the two passages, + +00:16:13.680 --> 00:16:15.680 +and that takes quite a lot of time. + +00:16:15.680 --> 00:16:18.560 +That's why you might realize that it's +a little + +00:16:18.560 --> 00:16:21.199 +choppy when you start scrolling in large +files. + +00:16:21.199 --> 00:16:22.560 +Anyway I could be answering questions + +00:16:22.560 --> 00:16:25.120 +about Org Mode for literally two hours +straight, + +00:16:25.120 --> 00:16:26.720 +so I'm gonna hand it over to the next + +00:16:26.720 --> 00:16:28.639 +speakers. I'll be seeing + +00:16:28.639 --> 00:16:31.759 +you guys a little later. ([Amin]: Thank you + +00:16:31.759 --> 00:16:33.440 +very much, Leo.) + +00:16:33.440 --> 00:16:36.959 +Oh, thank you. ([Amin:] Yes. Bye.) + +00:16:36.959 --> 00:16:39.839 +Bye. diff --git a/2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt b/2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt new file mode 100644 index 00000000..15513080 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt @@ -0,0 +1,968 @@ +WEBVTT + +00:00:00.320 --> 00:00:03.280 +Joe: Hi, I'm Joe Corneli. + +00:00:03.280 --> 00:00:06.879 +This is work I did with Ray Puzio and +Cameron Smith. + +00:00:06.879 --> 00:00:11.123 +They're the main protagonists in +this story. + +00:00:11.123 --> 00:00:14.960 +They are researchers who've been working + +00:00:14.960 --> 00:00:17.490 +on theoretical biology. + +00:00:17.490 --> 00:00:21.357 +In a typical project, they may use +Maxima and Julia. + +00:00:21.357 --> 00:00:24.800 +Their work combines biology, physics and +computer science. + +00:00:24.800 --> 00:00:29.439 +The latest work-in-progress is on +branching processes for + +00:00:29.439 --> 00:00:30.800 +cancer modeling. + +00:00:30.800 --> 00:00:34.719 +How can Emacs possibly help? + +00:00:34.719 --> 00:00:37.360 +Let's have a look. Moving code + +00:00:37.360 --> 00:00:38.399 +and data between these different + +00:00:38.399 --> 00:00:39.680 +programs by hand is + +00:00:39.680 --> 00:00:42.000 +annoying. Separate workflows for + +00:00:42.000 --> 00:00:44.399 +writing up notes and preparing +publications + +00:00:44.399 --> 00:00:46.000 +is perhaps even more annoying. All of + +00:00:46.000 --> 00:00:48.640 +it is time consuming and error-prone. + +00:00:48.640 --> 00:00:52.000 +So what about maybe using Jupyter? + +00:00:52.000 --> 00:00:53.760 +We found something called Script of + +00:00:53.760 --> 00:00:55.199 +Scripts. It solves some of those + +00:00:55.199 --> 00:00:58.399 +problems because you can use + +00:00:58.399 --> 00:01:01.120 +Maxima and Julia together, but we were + +00:01:01.120 --> 00:01:02.640 +quite happy to explore Emacs-based + +00:01:02.640 --> 00:01:04.890 +solutions, being Emcas enthusiasts + +00:01:04.890 --> 00:01:07.760 +We even got Cameron to be +enthusiastic about + +00:01:07.760 --> 00:01:10.057 +doing Emacs, so that went nice. + +00:01:10.057 --> 00:01:12.400 +Here's a little feature grid + +00:01:12.400 --> 00:01:15.360 +of Emacs + Org versus your + +00:01:15.360 --> 00:01:18.390 +generic tools that are in a + +00:01:18.390 --> 00:01:20.123 +different, more general ecosystem. + +00:01:20.123 --> 00:01:21.520 +As you can see, it's quite + +00:01:21.520 --> 00:01:22.957 +feature-complete. You've got your + +00:01:22.957 --> 00:01:25.520 +maxima-mode, julia-mode. You can use both of them + +00:01:25.520 --> 00:01:27.119 +inside of org-mode. + +00:01:27.119 --> 00:01:28.720 +You can present things with org-tree-slide. + +00:01:28.720 --> 00:01:31.490 +You can set up a wiki inside of org-roam. + +00:01:31.490 --> 00:01:33.680 +This is one I found + +00:01:33.680 --> 00:01:35.759 +rather recently. You can even use + +00:01:35.759 --> 00:01:37.759 +compatibly with org-roam, something called + +00:01:37.759 --> 00:01:42.159 +logseq, which is in the browser, so that's +nice. + +00:01:42.159 --> 00:01:44.957 +You can do real-time collaborative +editing, + +00:01:44.957 --> 00:01:47.657 +either in a kind of pairing style + +00:01:47.657 --> 00:01:49.280 +or in a more Etherpad style. + +00:01:49.280 --> 00:01:51.520 +Obviously, you can manage your references. + +00:01:51.520 --> 00:01:53.457 +You can typeset whatever you want. + +00:01:53.457 --> 00:01:55.759 +You can publish work in progress on +a blog. + +00:01:55.759 --> 00:01:57.439 +Firn is another one of these + +00:01:57.439 --> 00:01:59.790 +external Org Mode tools. + +00:01:59.790 --> 00:02:00.560 +It's not actually in Emacs, + +00:02:00.560 --> 00:02:03.557 +but works with Org Mode stuff. And, you know... + +00:02:03.557 --> 00:02:05.657 +So we're good to go with all of that. + +00:02:05.657 --> 00:02:07.423 +So what does that look like? Well, + +00:02:07.423 --> 00:02:09.423 +here's a little example from before + +00:02:09.423 --> 00:02:12.800 +they were doing... before we started +really thinking + +00:02:12.800 --> 00:02:13.890 +seriously about this stuff. + +00:02:13.890 --> 00:02:15.599 +So this is just Maxima. + +00:02:15.599 --> 00:02:17.440 +Well, Maxima doesn't have a long running + +00:02:17.440 --> 00:02:19.280 +process by default. If you've ever used + +00:02:19.280 --> 00:02:22.480 +Python, you have something called +sessions. + +00:02:22.480 --> 00:02:23.920 +They don't have that for Maxima, at least + +00:02:23.920 --> 00:02:24.959 +not by default. + +00:02:24.959 --> 00:02:27.599 +So how... What was the workaround? + +00:02:27.599 --> 00:02:29.360 +There's this thing called + +00:02:29.360 --> 00:02:32.480 +solve-for-u here + +00:02:32.480 --> 00:02:34.879 +that shows up down below again in these + +00:02:34.879 --> 00:02:36.319 +angle brackets, which you've seen maybe + +00:02:36.319 --> 00:02:37.360 +in someone else's talk, + +00:02:37.360 --> 00:02:40.480 +which means go to the previous + +00:02:40.480 --> 00:02:41.920 +thing that was named solve-for-u + +00:02:41.920 --> 00:02:43.920 +and do that all over again, so they do + +00:02:43.920 --> 00:02:45.280 +that over again. + +00:02:45.280 --> 00:02:47.440 +Here's the little Maxima code for + +00:02:47.440 --> 00:02:48.990 +defining usol, so you've now + +00:02:48.990 --> 00:02:51.723 +defined usol, and then you can use it + +00:02:51.723 --> 00:02:54.000 +in the next expression. You get out a +nice juicy + +00:02:54.000 --> 00:02:56.560 +zero at the end. It's a little bit + +00:02:57.200 --> 00:02:58.959 +like a partridge in a pear tree to have to + +00:02:58.959 --> 00:03:00.640 +redefine everything every time. + +00:03:00.640 --> 00:03:02.490 +So this is clearly at the level of + +00:03:02.490 --> 00:03:04.159 +work-around. Maybe just + +00:03:04.159 --> 00:03:06.223 +one more time looking through + +00:03:06.223 --> 00:03:11.599 +that stuff. + +00:03:11.599 --> 00:03:13.760 +Sorry. So, looking through that stuff, + +00:03:13.760 --> 00:03:15.280 +this is... We're going to need something + +00:03:15.280 --> 00:03:17.200 +like that, probably, for stitching + +00:03:17.200 --> 00:03:19.599 +Maxima and Julia together. so it's + +00:03:19.599 --> 00:03:20.890 +good to look a little bit + +00:03:20.890 --> 00:03:22.590 +about how that might work. + +00:03:22.590 --> 00:03:23.920 +First of all, you can cache + +00:03:23.920 --> 00:03:25.680 +results, so if you wanted to save the + +00:03:25.680 --> 00:03:28.480 +date out of block one at a certain +time and + +00:03:28.480 --> 00:03:30.990 +then use it again later... + +00:03:30.990 --> 00:03:33.280 +At the time when I ran this code, + +00:03:33.280 --> 00:03:34.640 +you can see I've got two slightly + +00:03:34.640 --> 00:03:36.623 +different time stamps down below. + +00:03:36.623 --> 00:03:38.323 +One's the cached result, and the other + +00:03:38.323 --> 00:03:40.319 +was the result of reevaluating + +00:03:40.319 --> 00:03:42.640 +the block. So you can move things around. + +00:03:43.760 --> 00:03:46.000 +That's going to be useful. But you know, + +00:03:46.000 --> 00:03:46.923 +that's not really the main problem. + +00:03:46.923 --> 00:03:48.080 +The main problem is + +00:03:48.080 --> 00:03:50.799 +making Maxima long-running. + +00:03:50.799 --> 00:03:53.920 +The core of this talk is a new observant + +00:03:53.920 --> 00:03:56.400 +facility, which is a general purpose + +00:03:56.400 --> 00:03:59.280 +way to do that kind of thing, which + +00:03:59.280 --> 00:04:01.823 +involves a very simple change to ob-core. + +00:04:01.823 --> 00:04:04.239 +We'll give a quick + +00:04:04.239 --> 00:04:05.360 +overview of that and show + +00:04:05.360 --> 00:04:08.480 +an example. So here's the example, + +00:04:08.480 --> 00:04:11.760 +a very simple sort of silly example. + +00:04:11.760 --> 00:04:12.957 +What does it mean to have + +00:04:12.957 --> 00:04:13.990 +a long-running process? + +00:04:13.990 --> 00:04:14.640 +Here, I've set this + +00:04:14.640 --> 00:04:18.560 +display2d to be false, which just +means that + +00:04:18.560 --> 00:04:19.440 +things are going to come + +00:04:19.440 --> 00:04:22.320 +come across in 1d. Then I ask it to + +00:04:22.320 --> 00:04:25.199 +expand something. I get LaTeX +by default. + +00:04:25.199 --> 00:04:27.280 +So that's what it means. It's that I've sent + +00:04:27.280 --> 00:04:28.639 +something in and it's going to come + +00:04:28.639 --> 00:04:30.240 +across in one view, which is great. + +00:04:30.240 --> 00:04:32.080 +Maybe you'll also notice that there's + +00:04:32.080 --> 00:04:34.560 +no semicolon, if you're a Maxima fan, + +00:04:34.560 --> 00:04:36.720 +and things are coming across as TeX. + +00:04:36.720 --> 00:04:38.400 +So those were some little bonus features. + +00:04:38.400 --> 00:04:40.320 +I'll show you how that works later. + +00:04:41.040 --> 00:04:45.440 +The change to ob-core is as follows. + +00:04:45.440 --> 00:04:48.880 +Actually, this should say... + +00:04:48.880 --> 00:04:51.520 +Instead of stream here, it should say + +00:04:51.520 --> 00:04:54.800 +servant. Sorry. We tried an experimental + +00:04:54.800 --> 00:04:56.160 +version which was called stream, so now it's + +00:04:56.160 --> 00:04:58.160 +called servant. But all it does is it + +00:04:58.160 --> 00:05:01.520 +overrides org-babel-execute lang for + +00:05:01.520 --> 00:05:02.639 +arbitrary lang + +00:05:02.639 --> 00:05:05.919 +if you have a servant + +00:05:05.919 --> 00:05:07.840 +in your params. So that's the + +00:05:07.840 --> 00:05:09.759 +change that hasn't been + +00:05:09.759 --> 00:05:11.919 +pushed out or sent as a patch to anybody, + +00:05:11.919 --> 00:05:13.759 +but it's a pretty minor change. + +00:05:13.759 --> 00:05:16.960 +Here's an overview without the code. + +00:05:16.960 --> 00:05:19.080 +Just a high level overview of + +00:05:19.080 --> 00:05:20.720 +observant.el. + +00:05:20.720 --> 00:05:22.160 +It stores information about these + +00:05:22.160 --> 00:05:24.479 +processes in a hash table. + +00:05:24.479 --> 00:05:26.080 +It can do pre-processing and + +00:05:26.080 --> 00:05:27.600 +post-processing. + +00:05:27.600 --> 00:05:29.759 +It does all these things. It stores + +00:05:29.759 --> 00:05:30.720 +the output. + +00:05:30.720 --> 00:05:32.479 +I mentioned here that, in principle, we + +00:05:32.479 --> 00:05:34.080 +could store lots of output and have a + +00:05:34.080 --> 00:05:35.657 +kind of browsable history, + +00:05:35.657 --> 00:05:37.790 +although we don't do that +presently. + +00:05:37.790 --> 00:05:38.790 +But that's what observant does. + +00:05:38.790 --> 00:05:40.639 +It does what you might expect. + +00:05:41.440 --> 00:05:46.190 +Here's the Maxima on-ramp + +00:05:46.190 --> 00:05:48.160 +to get Maxima brought in. + +00:05:48.160 --> 00:05:49.257 +You have to obviously have + +00:05:49.257 --> 00:05:51.360 +a Maxima process you can call. + +00:05:51.360 --> 00:05:54.960 +puthash... this is the preprocessing + +00:05:54.960 --> 00:05:57.840 +thing I mentioned, adding in some Tex + +00:05:57.840 --> 00:05:58.960 +and adding in-- + +00:05:58.960 --> 00:06:01.520 +or deleting, rather--a substring. + +00:06:01.520 --> 00:06:03.759 +Here is why you delete the +substring. + +00:06:03.759 --> 00:06:06.960 +It's because Maxima thinks it's a good + +00:06:06.960 --> 00:06:08.240 +idea to tell you false + +00:06:08.240 --> 00:06:10.080 +once you run check on things. + +00:06:10.080 --> 00:06:11.759 +You've got to delete that back out to + +00:06:11.759 --> 00:06:13.680 +get something coherent out of it. + +00:06:13.680 --> 00:06:16.960 +So this is how to set up Maxima. + +00:06:16.960 --> 00:06:19.157 +That's enough, really, of the demo. + +00:06:19.157 --> 00:06:20.000 +It's not really a demo for + +00:06:20.000 --> 00:06:21.919 +show and tell, but as this is an + +00:06:21.919 --> 00:06:23.600 +experience report, I wanted to talk about + +00:06:23.600 --> 00:06:25.440 +the experience of doing this. + +00:06:25.440 --> 00:06:28.080 +Some negatives, like we tried to + +00:06:28.080 --> 00:06:30.160 +get Emacs Jupyter working + +00:06:30.160 --> 00:06:34.190 +prior to working on observant. + +00:06:34.190 --> 00:06:36.000 +We couldn't get it doing + +00:06:36.000 --> 00:06:37.919 +everything we wanted, despite a bit of + +00:06:37.919 --> 00:06:40.160 +heavy lifting and debugging and stuff. + +00:06:40.160 --> 00:06:42.880 +So that's not finished. That was a bit +difficult. + +00:06:42.880 --> 00:06:45.360 +On the other hand, working on + +00:06:45.360 --> 00:06:47.759 +observant was fun, pretty lightweight, + +00:06:47.759 --> 00:06:48.479 +and easy. + +00:06:48.479 --> 00:06:50.400 +We got some experience co-editing + +00:06:50.400 --> 00:06:52.400 +things with these real-time tools. + +00:06:52.400 --> 00:06:55.919 +Obviously, the stack is somewhat work in +progress. + +00:06:55.919 --> 00:06:58.000 +I just wanted to give a shout out to + +00:06:58.000 --> 00:07:00.800 +crdt which was really fun, + +00:07:00.800 --> 00:07:03.919 +and Qiantan was making + +00:07:03.919 --> 00:07:06.057 +bug fixes for that as we go. + +00:07:06.057 --> 00:07:08.960 +Similarly, for firn and logseq, +the maintainers + +00:07:08.960 --> 00:07:10.160 +were really responsive, + +00:07:10.160 --> 00:07:12.960 +so that was nice. We did try to + +00:07:12.960 --> 00:07:14.560 +get Emacs running in the browser, + +00:07:14.560 --> 00:07:15.840 +thinking it would be really nice for + +00:07:15.840 --> 00:07:19.290 +people who didn't want to install it + +00:07:19.290 --> 00:07:21.120 +to get a chance to just try it, + +00:07:21.120 --> 00:07:23.120 +but actually, browsers capture things + +00:07:23.120 --> 00:07:27.120 +like C-n, so that was a bit annoying. + +00:07:27.120 --> 00:07:28.479 +But we did get lots of great feedback + +00:07:28.479 --> 00:07:29.759 +and interaction with people, including + +00:07:29.759 --> 00:07:31.599 +around this conference. Thank you + +00:07:31.599 --> 00:07:33.759 +to those who we've had discussions with. + +00:07:35.599 --> 00:07:37.680 +So, future work. Okay, so... Maybe you + +00:07:37.680 --> 00:07:41.039 +remember, I gave a talk a few years back +on Arxana. + +00:07:41.039 --> 00:07:44.479 +What might this have to do with Org +Mode? + +00:07:44.479 --> 00:07:45.919 +That's always the question one asks + +00:07:45.919 --> 00:07:47.039 +about Arxana. + +00:07:47.039 --> 00:07:48.720 +Arxana... One of the things it does + +00:07:48.720 --> 00:07:50.319 +is transclusions, and so that could be + +00:07:50.319 --> 00:07:51.680 +actually very helpful + +00:07:51.680 --> 00:07:54.000 +in connection with this "combined notes + +00:07:54.000 --> 00:07:55.520 +and write-up" workflow. So you might have + +00:07:55.520 --> 00:07:58.400 +an Org Mode. Some of these + +00:07:58.400 --> 00:08:00.800 +results we got back as raw results + +00:08:00.800 --> 00:08:03.199 +could go right into your write-up in a + +00:08:03.919 --> 00:08:07.520 +convenient way, at a level above-- + +00:08:07.520 --> 00:08:09.039 +transparently, a level above the notebook. + +00:08:09.039 --> 00:08:11.280 +So you'd have the notebook alongside the + +00:08:11.280 --> 00:08:13.440 +write-up in that case, + +00:08:13.440 --> 00:08:15.599 +which is a variation on the + +00:08:15.599 --> 00:08:17.423 +literate programming workflow. + +00:08:17.423 --> 00:08:19.120 +This is speculative. Who knows? + +00:08:19.120 --> 00:08:20.000 +The other thought is, + +00:08:20.000 --> 00:08:22.080 +it just relates to the idea of network + +00:08:22.080 --> 00:08:23.520 +programming. So we can imagine these + +00:08:23.520 --> 00:08:25.990 +networks of computational nodes + +00:08:25.990 --> 00:08:27.623 +sitting inside of org-roam, + +00:08:27.623 --> 00:08:28.800 +calling each other. + +00:08:28.800 --> 00:08:31.199 +You would want to maintain some + +00:08:31.199 --> 00:08:33.357 +kind of model of that process. + +00:08:33.357 --> 00:08:36.640 +A general question is: how do we have a +remote control for + +00:08:36.640 --> 00:08:37.957 +long-running processes? + +00:08:37.957 --> 00:08:38.320 +You could do that + +00:08:38.320 --> 00:08:39.857 +in Lisp or Clojure, + +00:08:39.857 --> 00:08:41.657 +but maybe we could have something + +00:08:41.657 --> 00:08:44.080 +a little bit like that here. + +00:08:44.080 --> 00:08:45.839 +Conclusions: what have we actually + +00:08:45.839 --> 00:08:48.080 +addressed? Well, we addressed + +00:08:48.080 --> 00:08:50.080 +accessing any long-running process with + +00:08:50.080 --> 00:08:51.600 +a simple Org Mode interface. + +00:08:51.600 --> 00:08:52.959 +Obviously, we're not the only people to + +00:08:52.959 --> 00:08:54.880 +think about notebooks, but we think that + +00:08:54.880 --> 00:08:56.880 +Emacs has some advantages + +00:08:56.880 --> 00:08:58.880 +related to reproducible research and + +00:08:58.880 --> 00:09:00.757 +interdisciplinary collaboration. + +00:09:00.757 --> 00:09:02.590 +Let's just say that we think + +00:09:02.590 --> 00:09:04.880 +something is reproducible if it's +actually teachable + +00:09:04.880 --> 00:09:07.200 +to someone new and they can do it. + +00:09:07.200 --> 00:09:09.190 +Org Mode seems very useful for that. + +00:09:09.190 --> 00:09:11.680 +Many of the other talks have touched +on this. + +00:09:11.680 --> 00:09:14.399 +Interdisciplinary collaboration is great. + +00:09:14.399 --> 00:09:16.000 +This was an interdisciplinary + +00:09:16.000 --> 00:09:17.839 +collaboration on some level, but + +00:09:17.839 --> 00:09:19.680 +what about future work for + +00:09:19.680 --> 00:09:21.190 +bringing in scenario planners, + +00:09:21.190 --> 00:09:22.320 +simulation scientists, + +00:09:22.320 --> 00:09:24.480 +and local farmers, and building something + +00:09:24.480 --> 00:09:26.023 +that they can all use + +00:09:26.023 --> 00:09:27.857 +that's more than the sum of the +parts? + +00:09:27.857 --> 00:09:30.720 +So a little future work for everybody +else here. + +00:09:30.720 --> 00:09:32.160 +We think science should be widely + +00:09:32.160 --> 00:09:34.560 +teachable, shareable, semi-automated, + +00:09:34.560 --> 00:09:36.720 +transdisciplinary, and real-time + +00:09:36.720 --> 00:09:40.399 +like EmacsConf. So you can get in touch + +00:09:40.399 --> 00:09:43.279 +via these methods. The code--which + +00:09:43.279 --> 00:09:45.200 +is very much early stage work in +progress, + +00:09:45.200 --> 00:09:46.640 +as this was meant to be an experience + +00:09:46.640 --> 00:09:48.800 +report, not a "it's all done, here, it is + +00:09:48.800 --> 00:09:49.920 +polished" report-- + +00:09:49.920 --> 00:09:51.680 +it's also online if you'd like to + +00:09:51.680 --> 00:09:53.360 +have a look. That's the end of the + +00:09:53.360 --> 00:09:54.560 +talk. I don't know if there's time + +00:09:54.560 --> 00:09:57.440 +for questions or not, but um I'm at your +disposal now. + +00:09:57.440 --> 00:10:00.240 +Thank you. + +00:10:00.240 --> 00:10:04.079 +(Amin: Many thanks for the tough job. + +00:10:04.079 --> 00:10:07.120 +Let's see. We have about I think four + +00:10:07.120 --> 00:10:08.880 +minutes for questions, + +00:10:08.880 --> 00:10:10.880 +and we have a couple of questions on + +00:10:10.880 --> 00:10:12.320 +the pad. Would you like to read them + +00:10:12.320 --> 00:10:14.240 +yourself or should I read them to you?) + +00:10:14.240 --> 00:10:16.423 +Just for the sake of easy management + +00:10:16.423 --> 00:10:18.079 +why don't you read them out, if +that's okay? + +00:10:18.079 --> 00:10:21.279 +(Amin: yeah, sure. They ask, "Have you looked + +00:10:21.279 --> 00:10:25.440 +into trying Sage Math? I've long wanted + +00:10:25.440 --> 00:10:33.760 +to use Sage Math in Org files.") + +00:10:33.760 --> 00:10:36.959 +Ray: Right. I wrote the answer that + +00:10:36.959 --> 00:10:39.279 +it should be possible because one can + +00:10:39.279 --> 00:10:44.839 +call it from a command. + +00:10:44.839 --> 00:10:48.190 +(Amin: okay, and I see there's + +00:10:48.190 --> 00:10:50.079 +another Sage Math question that you seem +to have answered + +00:10:50.079 --> 00:10:52.100 +as well, so I guess I won't repeat that. + +00:10:54.880 --> 00:10:56.959 +There's... "Let's not forget about embedded + +00:10:56.959 --> 00:11:00.640 +Calc in Emacs.") + +00:11:00.640 --> 00:11:05.040 +Joe: So the first demos actually were with +Calc. + +00:11:05.040 --> 00:11:06.640 +That's useful. Although I think it was a + +00:11:06.640 --> 00:11:08.240 +different--kind of a different command +line. + +00:11:08.240 --> 00:11:11.839 +Ray: Well, that was UNIX Calc. + +00:11:11.839 --> 00:11:13.839 +Joe: So, sure, there is calc, so that... + +00:11:15.680 --> 00:11:19.120 +Ray: Calc is already in Org Mode. + +00:11:25.680 --> 00:11:39.760 +(Amin: Still looking for questions. + +00:11:39.760 --> 00:11:41.760 +Okay, I think that's about it. I don't see + +00:11:41.760 --> 00:11:44.320 +any questions on the Etherpad. + +00:11:44.320 --> 00:11:47.440 +And let's see... + +00:11:47.440 --> 00:11:53.040 +Anything on irc? + +00:11:53.040 --> 00:11:55.760 +Nothing but praises and everyone + +00:11:55.760 --> 00:11:57.290 +thanking you. Thank you.) + +00:11:57.290 --> 00:11:59.120 +Ray: all right, you're welcome. + +00:11:59.120 --> 00:12:00.240 +Joe: Thanks a lot! + +00:12:00.240 --> 00:12:01.923 +We'll see you guys around then. + +00:12:01.923 --> 00:12:06.800 +Amin: Cheers, and see you around! diff --git a/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt b/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt new file mode 100644 index 00000000..78d044e8 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt @@ -0,0 +1,1250 @@ +WEBVTT + +00:00:03.600 --> 00:00:04.400 +Adam: Hello! + +00:00:04.400 --> 00:00:06.560 +Welcome to Readme Driven Design in Emacs + +00:00:06.560 --> 00:00:08.400 +by Adam Aard. + +00:00:08.400 --> 00:00:10.800 +If you're a programmer, you're accustomed + +00:00:10.800 --> 00:00:13.759 +to putting a README file at the root of your project. + +00:00:13.759 --> 00:00:15.845 +It's usually a Markdown file + +00:00:15.845 --> 00:00:20.579 +But if you use an Org Mode file instead, + +00:00:20.579 --> 00:00:22.560 +you can take advantage of the great features + +00:00:22.560 --> 00:00:24.898 +that Org Mode provides, + +00:00:24.898 --> 00:00:25.920 +including literate programming, + +00:00:25.920 --> 00:00:28.000 +which lets you generate your source code + +00:00:28.000 --> 00:00:31.840 +and Markdown documentation dynamically. + +00:00:31.840 --> 00:00:34.719 +I want to walk you through a little bit + +00:00:34.719 --> 00:00:37.120 +of what this looks like. + +00:00:37.120 --> 00:00:39.607 +When you start a project, + +00:00:39.607 --> 00:00:41.179 +especially if you use something like Github + +00:00:41.179 --> 00:00:45.913 +you begin with an automatically generated +README.md file. + +00:00:45.913 --> 00:00:47.039 +So just delete that + +00:00:47.039 --> 00:00:50.239 +and instead, create a README.org file. + +00:00:50.239 --> 00:00:51.712 +Starting with an empty Org file, + +00:00:51.712 --> 00:00:54.800 +like you see here, you can begin + +00:00:54.800 --> 00:00:56.295 +by recording important information + +00:00:56.295 --> 00:00:59.440 +about your project goals. You can add diagrams, + +00:00:59.440 --> 00:01:03.520 +code snippets, to-do lists, time +tracking, and much more. + +00:01:03.520 --> 00:01:05.360 +I'm going to drop in some documentation + +00:01:05.360 --> 00:01:07.760 +that I've written about + +00:01:07.760 --> 00:01:12.240 +about my project here, so you can see + +00:01:12.240 --> 00:01:15.280 +what this would look like. + +00:01:15.280 --> 00:01:17.870 +As you can see, I have a title, + +00:01:17.870 --> 00:01:20.320 +and a description, and then a subsection + +00:01:20.320 --> 00:01:23.840 +as well as some code snippets. + +00:01:23.840 --> 00:01:25.210 +You can see that Org Mode does + +00:01:25.210 --> 00:01:28.240 +a great job of formatting lists, + +00:01:28.240 --> 00:01:31.280 +code sections, diagrams, and so forth. + +00:01:31.280 --> 00:01:35.040 +It's as good or better than Markdown, + +00:01:35.040 --> 00:01:37.179 +but when you use it in Emacs, + +00:01:37.179 --> 00:01:38.880 +you can do a lot more. + +00:01:38.880 --> 00:01:43.360 +For example, you can dynamically create +diagrams using Graphviz + +00:01:43.360 --> 00:01:45.553 +from a text description. + +00:01:45.553 --> 00:01:48.266 +If you go to this source block here +and hit C-c C-c, + +00:01:48.266 --> 00:01:52.979 +you'll see that we generate a diagram +dynamically. + +00:01:55.439 --> 00:02:00.519 +You can run these code snippets in +place + +00:02:00.519 --> 00:02:00.799 +and get the results + +00:02:00.799 --> 00:02:03.040 +to show up inside of your file, + +00:02:03.040 --> 00:02:08.000 +which is a really powerful paradigm. + +00:02:08.000 --> 00:02:14.800 +But most importantly, for my purposes here, + +00:02:14.800 --> 00:02:19.520 +Org Mode provides you the ability to do literate programming. + +00:02:19.520 --> 00:02:21.440 +So take a quick look at this diagram + +00:02:21.440 --> 00:02:23.200 +that I generated here. + +00:02:23.200 --> 00:02:25.912 +It gives you a quick overview + +00:02:25.912 --> 00:02:27.520 +of what I mean by literate programming + +00:02:27.520 --> 00:02:30.973 +and how I'm using it. + +00:02:30.973 --> 00:02:34.720 +You can see that we start with a README.org file on top. + +00:02:34.720 --> 00:02:40.501 +At this point, we can do one of two things: +tangle or weave. + +00:02:40.501 --> 00:02:43.611 +Tangle is used to describe the process + +00:02:43.611 --> 00:02:45.463 +of generating source code, + +00:02:45.463 --> 00:02:48.495 +while weave is the process of generating +documentation. + +00:02:48.495 --> 00:02:51.920 +These are terms that Donald Knuth used. + +00:02:51.920 --> 00:02:53.388 +He's the one that came up + +00:02:53.388 --> 00:02:55.519 +with the idea of literate programming + +00:02:55.519 --> 00:02:59.920 +in the early 1980s. + +00:02:59.920 --> 00:03:01.945 +But this is really all that there is to it. + +00:03:01.945 --> 00:03:05.412 +You just... You are simply + +00:03:05.412 --> 00:03:07.840 +using a literate source file, + +00:03:07.840 --> 00:03:10.575 +in this case the README.org, + +00:03:10.575 --> 00:03:17.120 +to generate the rest of the project files, basically. + +00:03:17.120 --> 00:03:22.640 +So let's dig in to the details of how this works. + +00:03:22.640 --> 00:03:26.159 +I hope you... Hopefully you'll see how cool this is. + +00:03:26.159 --> 00:03:27.545 +So returning to the file here. + +00:03:27.545 --> 00:03:31.120 +Let's assume we have enough documentation now, + +00:03:31.120 --> 00:03:32.679 +that we want to get started coding. + +00:03:32.679 --> 00:03:34.159 +So maybe we'll just start with + +00:03:34.159 --> 00:03:35.845 +like a Hello World app, + +00:03:35.845 --> 00:03:38.159 +just so we can make sure that our + +00:03:38.159 --> 00:03:41.519 +environment is set up correctly. + +00:03:41.519 --> 00:03:47.120 +Let's get started with a code block. + +00:03:47.120 --> 00:03:49.519 +So I created a little snippet to help me + +00:03:49.519 --> 00:03:51.326 +add a source block + +00:03:51.326 --> 00:03:53.599 +for literate programming quickly. + +00:03:53.599 --> 00:03:56.959 +There's not much to it, + +00:03:56.959 --> 00:03:59.479 +but there are some important annotations here. + +00:04:01.599 --> 00:04:05.200 +Excuse me. There's a property called :tangle + +00:04:05.200 --> 00:04:09.360 +and that takes a value of a file name. + +00:04:09.360 --> 00:04:18.880 +Then there's also a :noweb property called no-export. + +00:04:23.759 --> 00:04:26.800 +Basically, the noexport--we'll explain + +00:04:26.800 --> 00:04:29.645 +that a little bit more later... + +00:04:29.645 --> 00:04:32.080 +It has to do with how + +00:04:32.080 --> 00:04:36.845 +the tangling is done in the tangle step + +00:04:36.845 --> 00:04:38.479 +versus the weave step. + +00:04:38.479 --> 00:04:40.212 +I'll explain that a little bit more. + +00:04:40.212 --> 00:04:46.719 +But the tangle field just simply tells +Emacs + +00:04:46.719 --> 00:04:48.320 +where it needs to generate the + +00:04:48.320 --> 00:04:49.951 +main.go file + +00:04:49.951 --> 00:04:55.360 +and where it needs to put it on the file system. + +00:04:55.360 --> 00:04:59.040 +You'll notice that we're going to use Go. + +00:04:59.040 --> 00:05:01.578 +That's just the language + +00:05:01.578 --> 00:05:03.379 +that I've been using the most lately, + +00:05:03.379 --> 00:05:06.845 +but this programming strategy + +00:05:06.845 --> 00:05:08.400 +is language-agnostic. + +00:05:08.400 --> 00:05:11.279 +You could use any language + +00:05:11.279 --> 00:05:13.145 +or any mix of languages. + +00:05:13.145 --> 00:05:15.377 +You could create some files +in Python, + +00:05:15.377 --> 00:05:16.560 +some files in Go, + +00:05:16.560 --> 00:05:19.179 +some files in Lisp, + +00:05:19.179 --> 00:05:21.520 +or whatever you want. + +00:05:24.720 --> 00:05:29.440 +Let's create just a little Hello World. + +00:05:29.440 --> 00:05:31.379 +Let's use another snippet here + +00:05:31.379 --> 00:05:36.560 +to generate the basics of a Go program. + +00:05:36.560 --> 00:05:44.960 +I'm just going to print Hello World. + +00:05:44.960 --> 00:05:52.779 +So that's... And then let's make it a section in our file. + +00:05:52.779 --> 00:05:56.400 +So now you can see, we've got this snippet. + +00:05:56.400 --> 00:06:01.600 +When you have a source block in +inside of Org Mode, + +00:06:01.600 --> 00:06:04.960 +you can easily pop into a +language-specific buffer by typing + +00:06:04.960 --> 00:06:07.680 +C-c ' (single quote). + +00:06:07.680 --> 00:06:10.240 +So you can see, now I have a + +00:06:10.240 --> 00:06:12.160 +buffer that's in go-mode + +00:06:12.160 --> 00:06:14.240 +and gives you all the ability to edit + +00:06:14.240 --> 00:06:15.520 +like you would + +00:06:15.520 --> 00:06:19.945 +normally. If you hit C-c ' +(single quote) + +00:06:19.945 --> 00:06:20.800 +again, it goes back and + +00:06:20.800 --> 00:06:25.045 +any changes you make will be +updated there. + +00:06:25.045 --> 00:06:26.160 +But you can do quite a bit + +00:06:26.160 --> 00:06:27.879 +just inside of here too. + +00:06:27.879 --> 00:06:29.199 +There's quite a bit of + +00:06:29.199 --> 00:06:34.479 +language-specific functionality + +00:06:34.479 --> 00:06:35.312 +just in place, + +00:06:35.312 --> 00:06:36.880 +so you don't always have to go over to a + +00:06:36.880 --> 00:06:38.080 +separate buffer. + +00:06:38.080 --> 00:06:42.319 +It's a nice option sometimes. + +00:06:42.319 --> 00:06:44.319 +Now that you have the code in here, + +00:06:44.319 --> 00:06:46.720 +you're going to want to run it. + +00:06:46.720 --> 00:06:48.179 +Right now, it just lives here + +00:06:48.179 --> 00:06:50.240 +in this documentation. + +00:06:50.240 --> 00:06:52.160 +You need to get a copy of it into a + +00:06:52.160 --> 00:06:53.840 +separate file, + +00:06:53.840 --> 00:06:57.440 +and that's the tangle process that you + +00:06:57.440 --> 00:07:01.360 +you need to follow there. So I'm gonna + +00:07:01.360 --> 00:07:03.360 +drop in a little bit more doc, a little + +00:07:03.360 --> 00:07:12.240 +bit more documentation really quick here. + +00:07:12.240 --> 00:07:19.112 +Okay, all right. So just as a side note, + +00:07:19.112 --> 00:07:22.845 +I like to follow this process. + +00:07:22.845 --> 00:07:26.639 +Whenever I have an operation to perform, + +00:07:26.639 --> 00:07:28.880 +I'd like to document it here with a + +00:07:28.880 --> 00:07:31.680 +snippet that can be executed inline. + +00:07:31.680 --> 00:07:33.280 +Then I don't have to leave Org Mode, and + +00:07:33.280 --> 00:07:34.639 +I don't have to try to remember what I + +00:07:34.639 --> 00:07:36.800 +did later. So instead of just + +00:07:36.800 --> 00:07:38.960 +trying to do an operation, the first time + +00:07:38.960 --> 00:07:40.319 +I do something, + +00:07:40.319 --> 00:07:41.680 +I take the time to figure out what it is + +00:07:41.680 --> 00:07:44.879 +and document it, so then it's +recorded. + +00:07:44.879 --> 00:07:49.120 +So here we find that to do a tangle +operation, + +00:07:49.120 --> 00:07:51.680 +you run the command org-babel-tangle, + +00:07:51.680 --> 00:07:53.779 +which is an Elisp command. + +00:07:53.779 --> 00:07:58.712 +If you hit C-c C-c to run it in place, + +00:07:58.712 --> 00:08:00.080 +you get the result + +00:08:00.080 --> 00:08:02.720 +of main.go, which basically is + +00:08:02.720 --> 00:08:03.759 +telling us that + +00:08:03.759 --> 00:08:07.680 +we've tangled one file called main.go. + +00:08:07.680 --> 00:08:11.039 +You can see that's true + +00:08:11.039 --> 00:08:12.879 +if you go to the file system + +00:08:12.879 --> 00:08:14.400 +and you look. + +00:08:14.400 --> 00:08:17.840 +Now in our demo directory, + +00:08:17.840 --> 00:08:19.712 +we have a README.org, + +00:08:19.712 --> 00:08:22.045 +we have that PNG that we generated, + +00:08:22.045 --> 00:08:23.440 +but we also have a main.go. + +00:08:23.440 --> 00:08:25.945 +If you visit that file, + +00:08:25.945 --> 00:08:27.045 +you'll see that it's just + +00:08:27.045 --> 00:08:28.212 +the source code that was + +00:08:28.212 --> 00:08:29.280 +in our documentation, which is + +00:08:29.280 --> 00:08:30.679 +exactly what we expected + +00:08:30.679 --> 00:08:32.880 +and what we wanted. So that's good. + +00:08:32.880 --> 00:08:41.120 +So if we return to where we were at... + +00:08:41.120 --> 00:08:42.959 +Now we're at the point where we + +00:08:42.959 --> 00:08:44.479 +have a file on the file system. + +00:08:45.760 --> 00:08:48.379 +Now we need to build it + +00:08:48.379 --> 00:08:49.612 +and to run it. + +00:08:49.612 --> 00:08:57.040 +So let's follow the same philosophy, +where let's document + +00:08:57.040 --> 00:09:00.160 +these operations that we're going to +perform. + +00:09:00.160 --> 00:09:04.560 +I'm dropping in a + +00:09:04.560 --> 00:09:07.112 +a build instruction section + +00:09:07.112 --> 00:09:13.360 +and a run instruction section. + +00:09:13.360 --> 00:09:15.279 +As you can see here, we have a little + +00:09:15.279 --> 00:09:17.839 +a bash source block, + +00:09:17.839 --> 00:09:19.245 +and another bash source block. + +00:09:19.245 --> 00:09:21.812 +This one compiles. The go build command + +00:09:21.812 --> 00:09:25.440 +is what compiles a file. Then + +00:09:25.440 --> 00:09:26.579 +the file that gets generated + +00:09:26.579 --> 00:09:30.080 +should be called demo. + +00:09:30.080 --> 00:09:32.412 +So we just run it here. + +00:09:32.412 --> 00:09:37.839 +If I type C-c C-c, we get an +empty results block. + +00:09:37.839 --> 00:09:38.979 +When you compile things, + +00:09:38.979 --> 00:09:41.360 +no news is good news. + +00:09:41.360 --> 00:09:43.012 +It means there's no errors + +00:09:43.012 --> 00:09:45.912 +So presumably, we've created + +00:09:45.912 --> 00:09:48.000 +an executable that's called demo. + +00:09:51.440 --> 00:09:53.312 +Let's look again at the file system + +00:09:53.312 --> 00:10:02.480 +and regenerate... + +00:10:02.480 --> 00:10:06.479 +Yep. What we have here is a demo +executable, + +00:10:06.479 --> 00:10:07.760 +which is exactly what we +wanted. + +00:10:07.760 --> 00:10:12.079 +Let's go back. + +00:10:12.079 --> 00:10:14.160 +Now we should be able to run it. + +00:10:14.160 --> 00:10:16.079 +C-c C-c, + +00:10:16.079 --> 00:10:20.399 +and we get Hello World as a result, + +00:10:20.399 --> 00:10:23.440 +which was exactly what we were expecting. + +00:10:23.440 --> 00:10:26.560 +So that's already pretty cool. + +00:10:26.560 --> 00:10:30.839 +You can do that much. + +00:10:33.040 --> 00:10:34.560 +That's really just the tip of + +00:10:34.560 --> 00:10:37.839 +the iceberg. To really + +00:10:41.040 --> 00:10:43.440 +use the more impressive features of + +00:10:43.440 --> 00:10:46.160 +literate programming, + +00:10:46.160 --> 00:10:49.920 +we need to do a little bit more + +00:10:53.200 --> 00:10:54.512 +at least. Really, + +00:10:54.512 --> 00:10:56.480 +to get the full benefit of it, + +00:10:56.480 --> 00:11:01.079 +we need to add some sections + +00:11:01.079 --> 00:11:04.412 +that will cause Emacs to have to + +00:11:04.412 --> 00:11:06.720 +tangle or assemble + +00:11:06.720 --> 00:11:09.760 +this file from different pieces. + +00:11:09.760 --> 00:11:13.120 +Imagine that we wanted to take this file + +00:11:13.120 --> 00:11:16.720 +and maybe kind of templatize it. + +00:11:16.720 --> 00:11:19.120 +So, using literature programming syntax, + +00:11:19.120 --> 00:11:21.279 +this angle bracket syntax, + +00:11:21.279 --> 00:11:24.399 +let's say that we want to create an + +00:11:24.399 --> 00:11:29.360 +imports section, + +00:11:29.360 --> 00:11:32.399 +a functions section, + +00:11:32.399 --> 00:11:35.040 +and then maybe just a main section. + +00:11:35.040 --> 00:11:36.240 +We'll get rid of this. + +00:11:36.240 --> 00:11:37.920 +So now you see, we've created something + +00:11:37.920 --> 00:11:39.760 +that looks a little bit like a + +00:11:39.760 --> 00:11:42.880 +template or a scaffolding or outline + +00:11:42.880 --> 00:11:45.812 +for what our file is going to be. + +00:11:45.812 --> 00:11:48.399 +It looks a little bit like pseudocode. + +00:11:48.399 --> 00:11:50.612 +What we're going to have + +00:11:50.612 --> 00:11:52.399 +literate programming do + +00:11:52.399 --> 00:11:54.800 +is dynamically insert those things into + +00:11:54.800 --> 00:11:56.639 +those slots. + +00:11:56.639 --> 00:12:00.079 +So the first thing we need to do + +00:12:00.079 --> 00:12:03.200 +is... So let's create a section + +00:12:03.200 --> 00:12:08.079 +called "Say Hello." + +00:12:08.079 --> 00:12:09.519 +We want to add some functionality that + +00:12:09.519 --> 00:12:12.720 +makes our program say hello. + +00:12:12.720 --> 00:12:15.680 +So using a different snippet that I have + +00:12:15.680 --> 00:12:17.600 +for creating something + +00:12:17.600 --> 00:12:20.800 +that I call like a literate section, + +00:12:20.800 --> 00:12:24.079 +basically, we create a + +00:12:24.079 --> 00:12:26.000 +another source block that's almost the + +00:12:26.000 --> 00:12:27.839 +same as the one for the file. + +00:12:27.839 --> 00:12:29.412 +It just has a few differences + +00:12:29.412 --> 00:12:34.079 +Say we want to drop code into the import +section + +00:12:34.079 --> 00:12:36.639 +and we want it to be in Go. + +00:12:36.639 --> 00:12:40.720 +Here we use the same :noweb no-export syntax, + +00:12:40.720 --> 00:12:44.560 +but then we've added this :noweb-ref imports, + +00:12:44.560 --> 00:12:48.240 +and this ties that slot + +00:12:48.240 --> 00:12:51.120 +to this reference. It tells + +00:12:51.120 --> 00:12:53.760 +Emacs that when you tangle, + +00:12:53.760 --> 00:12:55.479 +we want to stick whatever's in here + +00:12:55.479 --> 00:12:58.240 +in that spot. + +00:12:58.240 --> 00:13:02.079 +You skip the tangle file name section + +00:13:02.079 --> 00:13:03.279 +because you're not actually creating a + +00:13:03.279 --> 00:13:04.240 +file name. + +00:13:04.240 --> 00:13:06.160 +You're putting information into an + +00:13:06.160 --> 00:13:07.680 +existing file. + +00:13:07.680 --> 00:13:10.720 +So here, we would just add the "fmt" + +00:13:10.720 --> 00:13:14.399 +for the imports. + +00:13:14.399 --> 00:13:16.145 +Let's add another section + +00:13:16.145 --> 00:13:22.240 +for functions. + +00:13:22.240 --> 00:13:23.812 +Let's just create a function + +00:13:23.812 --> 00:13:28.079 +called sayHello + +00:13:28.079 --> 00:13:31.745 +that doesn't have any arguments. + +00:13:31.745 --> 00:13:34.000 +No return types. + +00:13:34.000 --> 00:13:35.760 +All it does is pretty much the + +00:13:35.760 --> 00:13:37.440 +same thing as we did before: + +00:13:37.440 --> 00:13:38.479 +just print something. + +00:13:38.479 --> 00:13:45.760 +Let's just say "Hello EmacsConf" +this time. + +00:13:45.760 --> 00:13:47.279 +Now we have a function, + +00:13:47.279 --> 00:13:50.779 +and now the function won't do anything + +00:13:50.779 --> 00:13:52.720 +unless we invoke it. Let's do + +00:13:52.720 --> 00:13:56.000 +one last literate section + +00:13:56.000 --> 00:13:59.920 +called main. Make that Go + +00:13:59.920 --> 00:14:03.519 +source block. Then let's + +00:14:03.519 --> 00:14:10.320 +invoke that function. + +00:14:10.320 --> 00:14:13.360 +Now you can see that we've got + +00:14:13.360 --> 00:14:15.600 +our scaffolding + +00:14:15.600 --> 00:14:17.199 +outline, and then we have + +00:14:17.199 --> 00:14:20.079 +the sections that we want to get tangled + +00:14:20.079 --> 00:14:21.360 +or inserted. + +00:14:21.360 --> 00:14:25.440 +I've used this syntax. + +00:14:25.440 --> 00:14:27.199 +It's kinda borrowed from + +00:14:27.199 --> 00:14:28.479 +literate programming a little bit + +00:14:28.479 --> 00:14:30.320 +with a +=, so really it's just saying + +00:14:30.320 --> 00:14:32.480 +that I want to append + +00:14:32.480 --> 00:14:35.760 +this item into the import section + +00:14:35.760 --> 00:14:37.600 +It's really just to make a little bit + +00:14:37.600 --> 00:14:39.839 +more clear what's going on. + +00:14:39.839 --> 00:14:41.445 +When you generate documentation, + +00:14:41.445 --> 00:14:43.519 +you won't see these + +00:14:43.519 --> 00:14:46.979 +particular property annotations, + +00:14:46.979 --> 00:14:50.145 +and so you won't know immediately + +00:14:50.145 --> 00:14:51.779 +that this section goes in the + +00:14:51.779 --> 00:14:53.839 +imports area. So I usually put + +00:14:53.839 --> 00:14:55.440 +a little bit of documentation on top + +00:14:55.440 --> 00:14:57.760 +there, so that it's easy to see. + +00:14:57.760 --> 00:15:01.120 +You would, probably, if this was very + +00:15:01.120 --> 00:15:03.040 +complicated, you'd put some + +00:15:03.040 --> 00:15:06.245 +documentation above to explain + +00:15:06.245 --> 00:15:07.360 +what you were doing, + +00:15:07.360 --> 00:15:11.519 +maybe right here. + +00:15:11.519 --> 00:15:13.279 +You could picture yourself + +00:15:13.279 --> 00:15:15.040 +maybe explaining + +00:15:15.040 --> 00:15:16.745 +a complicated algorithm + +00:15:16.745 --> 00:15:18.079 +or something up here + +00:15:18.079 --> 00:15:21.120 +and having a nice way to document it. + +00:15:21.120 --> 00:15:22.959 +So now that we've got that here in the + +00:15:22.959 --> 00:15:25.600 +documentation, we need to figure out... + +00:15:25.600 --> 00:15:27.040 +We need to make sure that it's going to + +00:15:27.040 --> 00:15:28.045 +tangle properly. + +00:15:28.045 --> 00:15:33.519 +Your best friend at this point + +00:15:33.519 --> 00:15:35.680 +is a keyboard shortcut that lets you + +00:15:35.680 --> 00:15:37.945 +preview the tangled operation. + +00:15:37.945 --> 00:15:42.560 +If you say C-c C-v C-v, + +00:15:42.560 --> 00:15:44.079 +it will create a new buffer + +00:15:44.079 --> 00:15:47.212 +with the tangled contents + +00:15:47.212 --> 00:15:49.179 +and so you can see here + +00:15:49.179 --> 00:15:52.345 +that the fmt import went to the right +place, + +00:15:52.345 --> 00:15:54.679 +that function went to the right place, + +00:15:54.679 --> 00:15:56.079 +the function invocation went to + +00:15:56.079 --> 00:15:58.480 +the right place. We're feeling good. + +00:15:58.480 --> 00:16:00.912 +You can nest these things + +00:16:00.912 --> 00:16:02.800 +many layers deep. + +00:16:02.800 --> 00:16:06.045 +If you came into the sayHello function, + +00:16:06.045 --> 00:16:10.560 +you could add more sections. + +00:16:10.560 --> 00:16:13.759 +It'll go through and it'll + +00:16:13.759 --> 00:16:15.345 +keep track of all that + +00:16:15.345 --> 00:16:16.212 +and tangle it for you + +00:16:16.212 --> 00:16:16.959 +so you really get a lot of freedom + +00:16:16.959 --> 00:16:18.320 +and flexibility for how you want to + +00:16:18.320 --> 00:16:20.479 +document things by doing this. + +00:16:20.479 --> 00:16:23.079 +So now that we've previewed it + +00:16:23.079 --> 00:16:25.839 +and we feel good about it, + +00:16:25.839 --> 00:16:28.639 +we need to tangle so + +00:16:28.639 --> 00:16:31.440 +we get the file on the file system. + +00:16:31.440 --> 00:16:34.979 +so C-c C-c and get... + +00:16:34.979 --> 00:16:37.199 +just main.go comes back again. + +00:16:37.199 --> 00:16:40.959 +C-c C-cc and no errors come back. + +00:16:40.959 --> 00:16:43.279 +Then if we did this right, + +00:16:43.279 --> 00:16:45.079 +when we run this, we should get + +00:16:45.079 --> 00:16:45.600 +"Hello, EmacsConf." + +00:16:45.600 --> 00:16:51.199 +So C-c C-c, Hello EmacsConf. + +00:16:54.800 --> 00:16:57.645 +I think that's pretty, pretty cool, +actually. + +00:16:57.645 --> 00:16:59.579 +So we've got the breadcrumbs + +00:16:59.579 --> 00:17:01.212 +of the process we've gone through + +00:17:01.212 --> 00:17:02.399 +to get to this point, + +00:17:02.399 --> 00:17:07.545 +this initial document that has some +tangling in it. + +00:17:07.545 --> 00:17:09.919 +We have documentation for how to tangle, + +00:17:09.919 --> 00:17:11.345 +how to build, how to run. + +00:17:11.345 --> 00:17:15.045 +We've really built a nice foundation + +00:17:15.045 --> 00:17:19.379 +for moving forward on our project + +00:17:19.379 --> 00:17:21.439 +and a nice way of breaking things +out + +00:17:21.439 --> 00:17:23.280 +and documenting further. + +00:17:23.280 --> 00:17:27.120 +The last piece that we need to + +00:17:27.120 --> 00:17:30.559 +take care of is the weave that + +00:17:30.559 --> 00:17:34.799 +I showed you in the diagram above. + +00:17:34.799 --> 00:17:38.640 +So one more time, we'll drop in + +00:17:38.640 --> 00:17:41.760 +some documentation, this time on how + +00:17:41.760 --> 00:17:42.400 +to weave. + +00:17:42.400 --> 00:17:44.400 +It's really just an export function. + +00:17:44.400 --> 00:17:46.245 +it's not... There's not a separate + +00:17:46.245 --> 00:17:49.012 +weave command going on here. + +00:17:49.012 --> 00:17:50.640 +we're just going to export + +00:17:50.640 --> 00:17:53.512 +what we've got here into a Markdown +format. + +00:17:53.512 --> 00:17:57.045 +We're using org-gfm-export-to-markdown, + +00:17:57.045 --> 00:17:59.745 +which is the Github style markdown. + +00:17:59.745 --> 00:18:02.160 +You can use the other, + +00:18:02.160 --> 00:18:03.812 +more standard type as well. + +00:18:03.812 --> 00:18:08.479 +Hit C-c C-c. Now you see + +00:18:08.479 --> 00:18:11.312 +we've got a README file, + +00:18:11.312 --> 00:18:16.512 +and if you look in the file system, + +00:18:16.512 --> 00:18:19.120 +we've got that right there. + +00:18:19.120 --> 00:18:23.120 +If you go to something like ghostwriter + +00:18:23.120 --> 00:18:31.679 +and open that file, + +00:18:31.679 --> 00:18:32.879 +now you can see that + +00:18:32.879 --> 00:18:35.520 +it's generated some documentation. + +00:18:35.520 --> 00:18:37.645 +It puts a index at top at the top. + +00:18:39.679 --> 00:18:41.145 +I usually turn that off. + +00:18:41.145 --> 00:18:42.379 +It's easy to do that by + +00:18:42.379 --> 00:18:43.179 +putting a property at the + +00:18:43.179 --> 00:18:46.145 +top of your Org file, + +00:18:46.145 --> 00:18:46.880 +but some people like to + +00:18:46.880 --> 00:18:48.559 +have an index. + +00:18:48.559 --> 00:18:50.799 +Here you can see that it has generated + +00:18:50.799 --> 00:18:55.200 +pretty nicely and formatted +snippets well, + +00:18:55.200 --> 00:18:56.880 +put the diagram in there, and then + +00:18:58.240 --> 00:19:02.799 +it's preserved this +literate programming syntax, + +00:19:02.799 --> 00:19:04.960 +which is important because that's how we + +00:19:04.960 --> 00:19:06.112 +want to view the documentation. + +00:19:06.112 --> 00:19:11.312 +That's what the no-exports property + +00:19:11.312 --> 00:19:13.360 +was trying to maintain. + +00:19:13.360 --> 00:19:15.979 +no-exports means when you export, + +00:19:15.979 --> 00:19:18.400 +do not try to tangle. + +00:19:18.400 --> 00:19:20.559 +Hopefully that makes more sense now. + +00:19:20.559 --> 00:19:22.240 +Now you can see all the documentation. + +00:19:22.240 --> 00:19:26.080 +I think it demonstrates a + +00:19:26.080 --> 00:19:33.520 +pretty useful feature that's inside of +Emacs. + +00:19:33.520 --> 00:19:34.979 +Hopefully you'll have as much fun + +00:19:34.979 --> 00:19:39.919 +using that as I have. + +00:19:39.919 --> 00:19:43.600 +So thanks! diff --git a/2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt b/2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt new file mode 100644 index 00000000..5d0b0b57 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt @@ -0,0 +1,1057 @@ +WEBVTT + +00:00:00.080 --> 00:00:03.120 +Adolfo: Okay, excellent. + +00:00:03.120 --> 00:00:06.960 +Hello, everyone and + +00:00:06.960 --> 00:00:10.080 +nice meeting you. Let me + +00:00:10.080 --> 00:00:12.400 +thank the the organizer for all the + +00:00:12.400 --> 00:00:13.920 +organization and all the work they are + +00:00:13.920 --> 00:00:15.200 +doing to support us. + +00:00:15.200 --> 00:00:18.400 +My name is Adolfo Villafiorita. + +00:00:18.400 --> 00:00:20.733 +I'm teaching at the University of +Trento. + +00:00:20.733 --> 00:00:24.480 +I will shortly be working at + +00:00:24.480 --> 00:00:26.240 +shared.tech, which is + +00:00:26.240 --> 00:00:29.359 +a non-profit organization developing + +00:00:29.359 --> 00:00:30.530 +applications to + +00:00:32.399 --> 00:00:35.680 +recover surplus food. + +00:00:35.680 --> 00:00:38.600 +The reason of the talk today + +00:00:38.600 --> 00:00:40.079 +and the reason I'm here today + +00:00:40.079 --> 00:00:42.719 +is to talk about my experience in moving + +00:00:42.719 --> 00:00:47.200 +from Jekyll static website generator to +Org Mode. + +00:00:47.200 --> 00:00:50.700 +The reason I moved to Org Mode + +00:00:50.700 --> 00:00:53.100 +is to have better support for + +00:00:53.100 --> 00:00:56.800 +literate programming on the websites + +00:00:56.800 --> 00:00:58.399 +at the University of Trento, where we + +00:00:58.399 --> 00:01:00.480 +make available the content for the + +00:01:00.480 --> 00:01:04.720 +the students. + +00:01:04.720 --> 00:01:08.900 +First of all, what is a static +website generator? + +00:01:08.900 --> 00:01:10.080 +It is basically a tool which + +00:01:10.080 --> 00:01:11.360 +allows you to + +00:01:11.360 --> 00:01:15.360 +generate HTML files out of text files + +00:01:15.360 --> 00:01:17.439 +containing basically two types of + +00:01:17.439 --> 00:01:20.700 +information: metadata and content. + +00:01:20.700 --> 00:01:23.119 +Metadata is a + +00:01:23.119 --> 00:01:26.159 +set of key pairs describing the + +00:01:26.159 --> 00:01:28.560 +content of the file, such as the title, + +00:01:28.560 --> 00:01:31.733 +author, tags, and so on and so forth. + +00:01:31.733 --> 00:01:34.560 +The content is what you actually +want to + +00:01:34.560 --> 00:01:37.040 +get published on the Internet in + +00:01:37.040 --> 00:01:38.880 +the HTML file. + +00:01:38.880 --> 00:01:41.439 +Usually the content is written in + +00:01:41.439 --> 00:01:45.800 +some kind of markup language, + +00:01:45.800 --> 00:01:49.759 +such as Markdown or possibly + +00:01:49.759 --> 00:01:53.200 +Org Mode. Jekyll is a very + +00:01:53.200 --> 00:01:57.900 +popular static website generator. + +00:01:57.900 --> 00:01:59.840 +It is written in Ruby. + +00:01:59.840 --> 00:02:03.280 +What it does: it systematically + +00:02:03.280 --> 00:02:06.840 +transforms all the input files + +00:02:06.840 --> 00:02:09.440 +by making the content into + +00:02:09.440 --> 00:02:11.599 +HTML and systematically applying a + +00:02:11.599 --> 00:02:14.000 +template in order to generate the + +00:02:14.000 --> 00:02:17.120 +HTML files, which you can then deploy + +00:02:17.120 --> 00:02:19.840 +on your server of choice to make them + +00:02:19.840 --> 00:02:22.160 +available on the Internet. + +00:02:22.160 --> 00:02:26.160 +One of the features most-- + +00:02:26.160 --> 00:02:27.500 +well, I would say all + +00:02:27.500 --> 00:02:30.239 +static website generators have + +00:02:30.239 --> 00:02:32.560 +is that of being able to + +00:02:32.560 --> 00:02:34.879 +collect the metadata information + +00:02:34.879 --> 00:02:38.400 +of the files being part of + +00:02:38.400 --> 00:02:39.440 +your project. + +00:02:39.440 --> 00:02:45.280 +The reason they do that is because + +00:02:45.280 --> 00:02:47.840 +you sometimes want to generate pages + +00:02:47.840 --> 00:02:49.280 +based on the content + +00:02:49.280 --> 00:02:53.200 +of your projects, + +00:02:53.200 --> 00:02:56.239 +such as, for instance, the list of + +00:02:56.239 --> 00:02:59.040 +posts you have recently published, or + +00:02:59.040 --> 00:03:00.400 +maybe the list of tags + +00:03:00.400 --> 00:03:03.840 +you have defined for your post, + +00:03:03.840 --> 00:03:07.280 +and so on and so forth. + +00:03:07.280 --> 00:03:09.760 +Jekyll gives the possibility of + +00:03:09.760 --> 00:03:12.400 +generating this kind of dynamic + +00:03:12.400 --> 00:03:14.400 +content by using Liquid, + +00:03:14.400 --> 00:03:18.800 +which is a templating language which + +00:03:18.800 --> 00:03:21.840 +looks like this. + +00:03:21.840 --> 00:03:24.879 +So basically, you have all the + +00:03:24.879 --> 00:03:26.879 +constructs you can + +00:03:26.879 --> 00:03:28.800 +expect in a programming language. + +00:03:28.800 --> 00:03:29.920 +This, for instance, + +00:03:29.920 --> 00:03:33.360 +is a for cycle which + +00:03:33.360 --> 00:03:37.440 +iterates over all the posts or the + +00:03:37.440 --> 00:03:39.599 +files in a specific directory of the + +00:03:39.599 --> 00:03:41.040 +Jekyll project. + +00:03:41.040 --> 00:03:45.040 +For each post, it takes the title + +00:03:45.040 --> 00:03:48.400 +and the URL and generates a link. + +00:03:48.400 --> 00:03:52.867 +So Jekyll is nice and sweet, + +00:03:52.867 --> 00:03:55.200 +but over the years + +00:03:55.200 --> 00:03:57.760 +I started using more and more + +00:03:57.760 --> 00:03:59.519 +systematically + +00:03:59.519 --> 00:04:02.000 +Org Mode to write all my files. + +00:04:02.000 --> 00:04:04.833 +I moved from Markdown to Org Mode + +00:04:04.833 --> 00:04:07.200 +I am a long time Emacs user. + +00:04:07.200 --> 00:04:09.167 +I've been using Emacs for 30 years now, + +00:04:09.167 --> 00:04:12.799 +so Org Mode is a more recent discovery, + +00:04:12.799 --> 00:04:17.033 +but it is a very nice discovery I made. + +00:04:17.033 --> 00:04:19.680 +The reason I like Org Mode + +00:04:19.680 --> 00:04:22.320 +is because, for instance, you can write + +00:04:22.320 --> 00:04:24.933 +formulas using MathJax + +00:04:24.933 --> 00:04:26.639 +and you can generate diagrams + +00:04:26.639 --> 00:04:30.320 +or plots with Gnuplot. + +00:04:30.320 --> 00:04:32.240 +Also important is the fact that you have + +00:04:32.240 --> 00:04:34.080 +the possibility of publishing + +00:04:34.080 --> 00:04:39.520 +your documents to multiple backends +such as PDF, + +00:04:39.520 --> 00:04:43.600 +or maybe a Reveal presentation, + +00:04:43.600 --> 00:04:47.199 +or HTML. This is all made possible + +00:04:47.199 --> 00:04:50.479 +by Babel, which is + +00:04:50.479 --> 00:04:52.560 +exactly what we just saw in the + +00:04:52.560 --> 00:04:54.639 +previous talk: + +00:04:54.639 --> 00:04:57.440 +Namely, the possibility of executing a + +00:04:57.440 --> 00:04:59.520 +snippet of code + +00:04:59.520 --> 00:05:02.560 +embedded in in your pages. + +00:05:02.560 --> 00:05:06.400 +Our model can also be used + +00:05:06.400 --> 00:05:09.600 +within Jekyll. In fact, + +00:05:09.600 --> 00:05:13.667 +there is a a nice gem, a nice library, + +00:05:13.667 --> 00:05:17.233 +called jekyll-org which allows you + +00:05:17.233 --> 00:05:19.680 +to use Org Mode files directly + +00:05:19.680 --> 00:05:22.880 +into jekyll. But when you start using + +00:05:22.880 --> 00:05:26.560 +Org Mode... When I started using + +00:05:26.560 --> 00:05:30.560 +Org Mode, I realized I could move + +00:05:30.560 --> 00:05:34.240 +all my workflow, all my publishing + +00:05:34.240 --> 00:05:36.840 +workflow to Emacs. + +00:05:36.840 --> 00:05:41.100 +In fact, Org Mode is also a + +00:05:41.100 --> 00:05:42.880 +static website generator because + +00:05:42.880 --> 00:05:46.240 +it has got the possibility of publishing + +00:05:46.240 --> 00:05:50.880 +projects made of Org Mode files. + +00:05:50.880 --> 00:05:53.840 +One of the nice things about + +00:05:53.840 --> 00:05:56.479 +the publishing features of Org Mode + +00:05:56.479 --> 00:05:58.880 +is that it allows you to define in the + +00:05:58.880 --> 00:06:01.300 +org-publish-project-alist, + +00:06:01.300 --> 00:06:03.199 +all the the components + +00:06:03.199 --> 00:06:05.367 +which are part of your project. + +00:06:05.367 --> 00:06:07.520 +In a sense, it is + +00:06:07.520 --> 00:06:10.479 +also more flexible than Jekyll, + +00:06:10.479 --> 00:06:12.880 +because it also allows you, for instance, + +00:06:12.880 --> 00:06:15.120 +to publish a single file rather + +00:06:15.120 --> 00:06:17.440 +than having to recompile everything + +00:06:17.440 --> 00:06:20.080 +every time you want to publish your + +00:06:20.080 --> 00:06:22.333 +your project to your website. + +00:06:22.333 --> 00:06:25.333 +However, there are some short comments + +00:06:25.333 --> 00:06:29.520 +I would say, or some areas +of improvement. + +00:06:30.400 --> 00:06:33.600 +The first is that support for +templating + +00:06:33.600 --> 00:06:36.639 +is not so obvious as it is + +00:06:36.639 --> 00:06:39.280 +in Jekyll, even though there are some + +00:06:40.560 --> 00:06:44.560 +nice extensions such as org-thtml, + +00:06:44.560 --> 00:06:48.400 +for instance, which allows you to use +templates. + +00:06:48.400 --> 00:06:51.840 +More important to me was the fact that + +00:06:51.840 --> 00:06:54.080 +apparently, there is little support for + +00:06:54.080 --> 00:06:56.133 +the creation of dynamic content + +00:06:56.133 --> 00:06:57.900 +So I was very curious + +00:06:57.900 --> 00:06:59.360 +and very keen to use + +00:06:59.360 --> 00:07:02.800 +Org Mode for publishing my blog + +00:07:02.800 --> 00:07:05.440 +and the courses at the university, + +00:07:05.440 --> 00:07:08.720 +but then I had to find a way + +00:07:08.720 --> 00:07:11.440 +to being able to publish these + +00:07:11.440 --> 00:07:13.599 +dynamic pages, finding some kind of + +00:07:13.599 --> 00:07:16.000 +replacement, so to speak, + +00:07:16.720 --> 00:07:17.900 +for the liquid engine. + +00:07:17.900 --> 00:07:24.160 +The solution was there at hand, +actually, because + +00:07:24.160 --> 00:07:27.280 +basically, I realized I could use Babel + +00:07:27.280 --> 00:07:30.800 +for exactly this purpose. Rather than + +00:07:30.800 --> 00:07:32.720 +using Babel for generating + +00:07:32.720 --> 00:07:35.759 +plots or my other computations + +00:07:35.759 --> 00:07:37.919 +or whatever I was using them for, + +00:07:37.919 --> 00:07:41.039 +I realized I could use Babel to + +00:07:41.039 --> 00:07:45.120 +generate HTML which could be + +00:07:45.120 --> 00:07:49.967 +then published in the project + +00:07:49.967 --> 00:07:53.680 +All I needed to do then + +00:07:53.680 --> 00:07:56.100 +was defining some kind of functions, + +00:07:56.100 --> 00:07:58.319 +some kind of code in order to read + +00:07:58.319 --> 00:08:01.840 +the metadata of all + +00:08:01.840 --> 00:08:04.767 +the Org Mode files of my web project, + +00:08:04.767 --> 00:08:09.680 +so that I could then publish-- + +00:08:09.680 --> 00:08:13.280 +generate the dynamic content. + +00:08:13.280 --> 00:08:18.080 +This is a snippet taken from + +00:08:18.080 --> 00:08:21.759 +one of my HTML projects, + +00:08:21.759 --> 00:08:24.800 +which basically shows the way in which + +00:08:24.800 --> 00:08:27.599 +I generate the list of posts on + +00:08:27.599 --> 00:08:32.560 +my page. It is exactly how the +Liquid that we saw + +00:08:32.560 --> 00:08:35.680 +a couple of slides earlier that +looks like + +00:08:35.680 --> 00:08:39.200 +in Org Mode. + +00:08:39.200 --> 00:08:42.320 +Basically, what I'm doing... +I'm using... + +00:08:42.320 --> 00:08:46.720 +I wrote a Ruby script which + +00:08:46.720 --> 00:08:49.680 +reads all the metadata. So this + +00:08:49.680 --> 00:08:51.040 +highlighted code + +00:08:51.040 --> 00:08:53.100 +basically loads the script + +00:08:53.100 --> 00:08:55.300 +which is stored externally. + +00:08:55.300 --> 00:08:56.800 +Then it collects all the + +00:08:56.800 --> 00:08:58.320 +metadata from the + +00:08:58.320 --> 00:09:00.880 +Org Mode files in the + +00:09:00.880 --> 00:09:02.240 +current directory. + +00:09:02.240 --> 00:09:04.800 +And then the following... The code + +00:09:04.800 --> 00:09:06.480 +you can see here + +00:09:06.480 --> 00:09:09.839 +basically iterates over all the + +00:09:09.839 --> 00:09:12.959 +posts read at the previous step. + +00:09:12.959 --> 00:09:16.399 +It generates + +00:09:16.399 --> 00:09:19.519 +a list with the title + +00:09:19.519 --> 00:09:22.959 +and the URLS, basically + +00:09:22.959 --> 00:09:27.440 +replicating what Jekyll does. + +00:09:27.440 --> 00:09:30.240 +There are some other things + +00:09:30.240 --> 00:09:32.399 +I have to deal with in order to + +00:09:33.200 --> 00:09:36.480 +accommodate my workflow. But that was + +00:09:36.480 --> 00:09:39.200 +relatively easy in the sense that one of + +00:09:39.200 --> 00:09:43.279 +the problems, one of the issues I had to + +00:09:43.279 --> 00:09:45.360 +solve was that of having + +00:09:45.360 --> 00:09:48.480 +a common navigation on all my + +00:09:48.480 --> 00:09:51.040 +pages. That was easily solved + +00:09:51.040 --> 00:09:53.867 +using the #+INCLUDE feature. + +00:09:53.867 --> 00:09:54.959 +So I basically + +00:09:54.959 --> 00:09:56.000 +made available + +00:09:56.000 --> 00:09:57.839 +an #+INCLUDE with all the navigation + +00:09:57.839 --> 00:10:00.560 +which is embedded in all the pages of + +00:10:00.560 --> 00:10:01.839 +my websites + +00:10:01.839 --> 00:10:03.733 +through the #+INCLUDE. + +00:10:03.733 --> 00:10:06.160 +Another nice feature which + +00:10:06.160 --> 00:10:08.560 +Jekyll has is the possibility of + +00:10:08.560 --> 00:10:12.800 +previewing a website before deploying it. + +00:10:13.200 --> 00:10:16.079 +Emacs also has got a node which allows + +00:10:16.079 --> 00:10:21.200 +you to launch a web server. In fact, + +00:10:21.200 --> 00:10:24.320 +I wrote a quick hack + +00:10:24.320 --> 00:10:26.959 +which allows you to + +00:10:26.959 --> 00:10:31.519 +invoke a node on an Org Mode + +00:10:31.519 --> 00:10:34.720 +project, start a local preview, + +00:10:34.720 --> 00:10:37.920 +and then use rsync + +00:10:37.920 --> 00:10:44.839 +in order to deploy the the website. + +00:10:46.240 --> 00:10:48.720 +Five minutes left. More than + +00:10:48.720 --> 00:10:51.200 +enough. Okay. + +00:10:51.200 --> 00:10:52.967 +Thanks. Thank you, thank you very much. + +00:10:52.967 --> 00:10:56.480 +I'm nearly done. So then I can take +some questions. + +00:10:56.480 --> 00:11:00.560 +Just to give you maybe + +00:11:00.560 --> 00:11:03.680 +a slightly more in-depth + +00:11:03.680 --> 00:11:06.480 +view of what the pages look like, + +00:11:06.480 --> 00:11:07.200 +so these are + +00:11:07.200 --> 00:11:11.120 +one of the pages, or the source files + +00:11:11.120 --> 00:11:14.720 +of one of the websites. It is + +00:11:14.720 --> 00:11:18.480 +in literate programming. Basically, + +00:11:18.480 --> 00:11:20.399 +you see there is some metadata here. + +00:11:20.399 --> 00:11:22.640 +I mean this is a regular Org Mode file. + +00:11:22.640 --> 00:11:26.640 +This part here + +00:11:26.640 --> 00:11:29.920 +basically defines some common options + +00:11:29.920 --> 00:11:31.519 +for publication. + +00:11:31.519 --> 00:11:35.920 +These two includes here + +00:11:35.920 --> 00:11:41.120 +put some extra HTML in the head part and + +00:11:41.120 --> 00:11:44.480 +the navigation. Here, as you can see, + +00:11:44.480 --> 00:11:48.079 +is the code generating the + +00:11:48.079 --> 00:11:50.160 +the list in chronological order. It is + +00:11:50.160 --> 00:11:52.240 +slightly more complex than the example I + +00:11:52.240 --> 00:11:53.839 +made in the slide + +00:11:53.839 --> 00:11:56.240 +because there is some more + +00:11:56.240 --> 00:11:59.760 +elaboration to do, including +putting some + +00:11:59.760 --> 00:12:01.839 +Javascript to identify + +00:12:01.839 --> 00:12:05.120 +according to the tags. + +00:12:05.120 --> 00:12:08.160 +To go back to the presentation... + +00:12:11.200 --> 00:12:13.067 +I managed this migration + +00:12:13.067 --> 00:12:14.560 +a few months ago, + +00:12:14.560 --> 00:12:17.680 +and then all my workflow is within + +00:12:17.680 --> 00:12:20.399 +Org Mode and within Emacs. + +00:12:20.399 --> 00:12:23.079 +I'm very happy with it because it's + +00:12:23.079 --> 00:12:26.800 +simplified quite a bit + +00:12:26.800 --> 00:12:28.480 +my publication process. + +00:12:28.480 --> 00:12:31.839 +One of the advantages... Another + +00:12:31.839 --> 00:12:34.240 +advantage... So the first advantage is that + +00:12:34.240 --> 00:12:36.959 +everything is in Org Mode and Emacs. + +00:12:36.959 --> 00:12:38.160 +Second advantage + +00:12:38.160 --> 00:12:41.680 +is that everything is based on the + +00:12:41.680 --> 00:12:44.880 +standard machinery provided by Org Mode. + +00:12:44.880 --> 00:12:47.760 +So in a sense, it is + +00:12:47.760 --> 00:12:50.079 +more robust with respect to + +00:12:50.079 --> 00:12:53.040 +dependencies, possible errors, and so + +00:12:53.040 --> 00:12:54.320 +on and so forth. + +00:12:54.320 --> 00:12:56.639 +The fact that Org Mode + +00:12:56.639 --> 00:12:58.240 +allows you to publish + +00:12:58.240 --> 00:13:00.880 +a single file in a project is also + +00:13:00.880 --> 00:13:03.839 +very interesting because + +00:13:03.839 --> 00:13:07.839 +it allows to be more robust to + +00:13:07.839 --> 00:13:11.040 +problems you might introduce when + +00:13:11.040 --> 00:13:14.959 +you're changing--when I'm changing the +setup. + +00:13:14.959 --> 00:13:16.880 +Another interesting thing which I + +00:13:16.880 --> 00:13:21.519 +realized that I could have is that + +00:13:21.519 --> 00:13:23.600 +in a sense, the specification of the + +00:13:23.600 --> 00:13:28.480 +website can be embedded in the website +itself. + +00:13:28.480 --> 00:13:30.800 +In a sense this is some kind of + +00:13:30.800 --> 00:13:31.839 +self-documenting... + +00:13:31.839 --> 00:13:35.120 +It's a way of self-documenting + +00:13:35.120 --> 00:13:36.600 +what I'm actually doing. + +00:13:36.600 --> 00:13:44.133 +For instance, here on my website, + +00:13:44.133 --> 00:13:46.399 +you can see the + +00:13:46.399 --> 00:13:48.240 +specification of the + +00:13:48.240 --> 00:13:51.519 +project which is loaded + +00:13:51.519 --> 00:13:53.933 +from my initialization file, + +00:13:53.933 --> 00:13:56.320 +but then it is also published + +00:13:56.320 --> 00:13:59.440 +together with my home page. It lives + +00:13:59.440 --> 00:14:01.360 +with the repository where + +00:14:01.360 --> 00:14:05.360 +I keep all the sources of my website, + +00:14:05.360 --> 00:14:08.079 +which is kind of nice because it + +00:14:08.079 --> 00:14:09.839 +basically isolates + +00:14:09.839 --> 00:14:14.079 +everything in a single place. + +00:14:14.079 --> 00:14:16.880 +So there are some examples. I'm + +00:14:16.880 --> 00:14:19.433 +showing them more because of the + +00:14:19.433 --> 00:14:21.760 +source code which + +00:14:21.760 --> 00:14:25.519 +you can grab from the git repositories + +00:14:25.519 --> 00:14:26.933 +if you are interested. + +00:14:26.933 --> 00:14:28.399 +Of course I'm also available + +00:14:28.399 --> 00:14:31.600 +to provide some support and help + +00:14:31.600 --> 00:14:32.959 +if you are interested + +00:14:32.959 --> 00:14:34.480 +in this kind of stuff. + +00:14:34.480 --> 00:14:37.760 +The the next step for me will be that of + +00:14:37.760 --> 00:14:41.600 +trying, making this kind of +machinery available + +00:14:41.600 --> 00:14:45.199 +for more general use at the moment. + +00:14:45.199 --> 00:14:47.120 +If you are interested in trying out my + +00:14:47.120 --> 00:14:48.800 +suggestion, grabbing the + +00:14:48.800 --> 00:14:51.933 +sources for one of the websites + +00:14:51.933 --> 00:14:54.700 +to seehow they look like, + +00:14:54.700 --> 00:14:56.720 +and maybe try and + +00:14:56.720 --> 00:15:00.160 +customize it for your purposes... + +00:15:00.160 --> 00:15:03.839 +This is basically the content of my talk. + +00:15:03.839 --> 00:15:06.959 +I'm open to questions and thank you + +00:15:06.959 --> 00:15:10.880 +for your attention. + +00:15:10.880 --> 00:15:12.880 +(Amin: Thank you very much, Adolfo, for your + +00:15:12.880 --> 00:15:14.480 +awesome presentation. + +00:15:14.480 --> 00:15:17.360 +I think we have time for maybe like + +00:15:17.360 --> 00:15:19.360 +one or two questions, + +00:15:19.360 --> 00:15:21.279 +and then the rest maybe you could + +00:15:21.279 --> 00:15:26.639 +take up after the stream.) + +00:15:26.639 --> 00:15:28.033 +Adolfo: What should we do? + +00:15:28.033 --> 00:15:30.000 +(Amin: Would you like me + +00:15:30.000 --> 00:15:31.839 +to read you the questions?) + +00:15:31.839 --> 00:15:35.199 +Adolfo: Yeah, probably better because + +00:15:35.199 --> 00:15:36.700 +I'm kind of lost there. + +00:15:36.700 --> 00:15:40.399 +(Amin: Okay, no problem. + +00:15:40.399 --> 00:15:42.480 +So someone asks, "Do you have any + +00:15:42.480 --> 00:15:45.440 +opinion on Firn?") + +00:15:45.440 --> 00:15:48.639 +Adolfo: Firn. I don't know Firn, + +00:15:48.639 --> 00:15:51.839 +so I'll give it a try + +00:15:51.839 --> 00:15:55.040 +and check it out. + +00:15:55.040 --> 00:15:57.839 +(Amin: Thanks. People are also asking, + +00:15:57.839 --> 00:15:59.680 +do you discuss this, for example, in a blog + +00:15:59.680 --> 00:16:01.279 +or anywhere else they could find more + +00:16:01.279 --> 00:16:02.800 +about it?) + +00:16:02.800 --> 00:16:05.600 +Adolfo: Oh yes. I'm going to publish the + +00:16:05.600 --> 00:16:08.560 +the talk and the content + +00:16:08.560 --> 00:16:11.120 +on my website, and then I'll link it from + +00:16:11.120 --> 00:16:13.067 +the EmacsConf conference + +00:16:13.067 --> 00:16:14.720 +so that it will be easier for + +00:16:14.720 --> 00:16:16.533 +people to to reach it + +00:16:16.533 --> 00:16:19.040 +I will shortly make it + +00:16:19.040 --> 00:16:22.880 +available right after the conference. + +00:16:22.880 --> 00:16:26.160 +(Amin: Wonderful. I think that's all +for the questions. + +00:16:26.160 --> 00:16:27.667 +Thank you very much.) + +00:16:27.667 --> 00:16:29.600 +Adolfo: Thank you very much. Thank you. + +00:16:29.600 --> 00:16:34.800 +(Amin: Cheers.) Adolfo: Bye, cheers. (Amin: Bye.) diff --git a/2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt b/2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt new file mode 100644 index 00000000..b5aeca75 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt @@ -0,0 +1,1674 @@ +WEBVTT + +00:00:00.000 --> 00:00:02.480 +Leo Vivier: I'm hoping to keep this +talk in + +00:00:02.480 --> 00:00:03.919 +15 minutes. I'll take five minutes of + +00:00:03.919 --> 00:00:05.279 +questions at the end. + +00:00:05.279 --> 00:00:07.520 +So, hello again! I suppose you're starting + +00:00:07.520 --> 00:00:09.200 +to get pretty familiar with me and my + +00:00:09.200 --> 00:00:10.719 +start(?) right now. + +00:00:10.719 --> 00:00:12.480 +We're getting into the nitty + +00:00:12.480 --> 00:00:14.719 +gritty. We started today, + +00:00:14.719 --> 00:00:17.039 +I told you about how I'd ventured from + +00:00:17.039 --> 00:00:18.480 +being a user + +00:00:18.480 --> 00:00:20.800 +to being a maintainer, and right now I'm + +00:00:20.800 --> 00:00:22.080 +going to get the chance to + +00:00:22.080 --> 00:00:24.240 +actually tell you more about the project + +00:00:24.240 --> 00:00:25.279 +that I'm maintaining, + +00:00:25.279 --> 00:00:28.480 +which is called org-roam. + +00:00:28.480 --> 00:00:30.560 +So even if I... It would have had a better + +00:00:30.560 --> 00:00:32.320 +impact if I + +00:00:32.320 --> 00:00:33.840 +didn't scroll the page, but you know, + +00:00:33.840 --> 00:00:35.520 +sadly, I'm out of tea, + +00:00:35.520 --> 00:00:37.120 +it's getting late in Europe and I'm + +00:00:37.120 --> 00:00:39.600 +starting to get tired. + +00:00:39.600 --> 00:00:43.360 +So what I'm gonna do during this talk + +00:00:43.360 --> 00:00:46.160 +is just to do, really, a survey for people who + +00:00:46.160 --> 00:00:48.079 +do not know what org-roam is about. + +00:00:48.079 --> 00:00:50.480 +Some of you might have, + +00:00:50.480 --> 00:00:52.320 +whilst browsing Reddit, + +00:00:52.320 --> 00:00:54.879 +found a topic about org-roam and thought + +00:00:54.879 --> 00:00:56.480 +to yourself, "Oh, that looks interesting, + +00:00:56.480 --> 00:00:58.967 +but you know, I have my own workflow + +00:00:58.967 --> 00:01:01.039 +and I kinda don't need to +change anything + +00:01:01.039 --> 00:01:03.199 +about it. I'm completely fine + +00:01:03.199 --> 00:01:05.680 +using my very very large file. Or I'm + +00:01:05.680 --> 00:01:07.520 +completely fine having my + +00:01:07.520 --> 00:01:10.960 +database of notes which I've been + +00:01:10.960 --> 00:01:14.560 +accruing for 10, 20, 30 years or so." + +00:01:14.560 --> 00:01:17.759 +So what I want to do during this talk + +00:01:17.759 --> 00:01:20.960 +is both to present to you what +org-roam is about, + +00:01:20.960 --> 00:01:23.439 +if you are in this group of people who + +00:01:23.439 --> 00:01:25.600 +do not know what org-roam is about +but would + +00:01:25.600 --> 00:01:27.520 +like to know more, but + +00:01:27.520 --> 00:01:30.560 +also for people who have close to no + +00:01:30.560 --> 00:01:33.360 +experience with Emacs and Org Mode and + +00:01:33.360 --> 00:01:35.040 +who have just found their way. They + +00:01:35.040 --> 00:01:36.880 +wanted to find the system to + +00:01:36.880 --> 00:01:39.840 +write their notes, basically, and + +00:01:39.840 --> 00:01:41.439 +they discovered this little tool which + +00:01:41.439 --> 00:01:42.960 +is called org-roam, + +00:01:42.960 --> 00:01:44.479 +and they'd like to know more about this. + +00:01:44.479 --> 00:01:49.360 +So I've got 13 minutes to convince you +to use org-roam. + +00:01:49.360 --> 00:01:53.360 +If we go in a very broad strokes, + +00:01:53.360 --> 00:01:56.799 +what is org-roam? org-roam + +00:01:56.799 --> 00:01:59.759 +is a way for you to manage backlinks + +00:01:59.759 --> 00:02:03.439 +inside Org Mode. The keyword + +00:02:03.439 --> 00:02:07.040 +in what I've just said is links. + +00:02:07.040 --> 00:02:10.080 +Now there is a principle behind org-roam + +00:02:10.080 --> 00:02:12.879 +which is called the Zettelkasten method, + +00:02:12.879 --> 00:02:14.239 +which you can see written right there. + +00:02:14.239 --> 00:02:15.440 +It's a German word + +00:02:15.440 --> 00:02:18.000 +which means a slip box. If you remember + +00:02:18.000 --> 00:02:19.280 +in old libraries, + +00:02:19.280 --> 00:02:22.080 +you had--actually, I believe if I scroll, I + +00:02:22.080 --> 00:02:23.440 +should have an example of this. + +00:02:23.440 --> 00:02:26.640 +Yes. So this is a slip box. Basically, in + +00:02:26.640 --> 00:02:28.879 +all libraries, you used to have all the + +00:02:28.879 --> 00:02:30.560 +references to the books that the library + +00:02:30.560 --> 00:02:31.599 +used to have + +00:02:31.599 --> 00:02:34.720 +inside those boxes. They're called + +00:02:34.720 --> 00:02:36.080 +slip boxes because you can + +00:02:36.080 --> 00:02:38.480 +insert stuff into the boxes and you can + +00:02:38.480 --> 00:02:41.200 +remove stuff out of the boxes. + +00:02:41.200 --> 00:02:44.720 +Now if I try + +00:02:44.720 --> 00:02:48.000 +to summarize as simply as I may what the + +00:02:48.000 --> 00:02:49.360 +Zettelkasten method + +00:02:49.360 --> 00:02:52.800 +is about, it's about having a way + +00:02:52.800 --> 00:02:56.560 +to work with your notes which considers + +00:02:56.560 --> 00:02:59.920 +elements of knowledge as atoms, + +00:02:59.920 --> 00:03:02.000 +as something that is individual, like + +00:03:02.000 --> 00:03:04.159 +a single file. + +00:03:04.159 --> 00:03:07.440 +You consider that in order to build +knowledge, + +00:03:07.440 --> 00:03:11.120 +you have to combine atoms together, +so that + +00:03:11.120 --> 00:03:14.720 +when you have one atom, another atom, + +00:03:14.720 --> 00:03:17.519 +if you link them together, you have a + +00:03:17.519 --> 00:03:22.000 +complex thought or a complex molecule. + +00:03:22.000 --> 00:03:24.000 +Don't quote me on the chemistry, by + +00:03:24.000 --> 00:03:25.360 +the way. I shall remind you I'm an + +00:03:25.360 --> 00:03:26.879 +English major I have no idea what I'm + +00:03:26.879 --> 00:03:28.239 +talking about. + +00:03:28.239 --> 00:03:31.360 +So, how does it work as far as a + +00:03:31.360 --> 00:03:35.280 +note-taking system is concerned? +To do so, + +00:03:35.280 --> 00:03:37.599 +I'm just going to switch really quickly + +00:03:37.599 --> 00:03:43.040 +to my Emacs, if I may. +So I'm just going to screenshare + +00:03:43.040 --> 00:03:44.959 +onto my Emacs. Just give me a second to get + +00:03:44.959 --> 00:03:47.840 +the windows all right. + +00:03:47.840 --> 00:03:52.080 +Okay, it's loading up. Oh no, + +00:03:52.080 --> 00:03:54.720 +I think Firefox has crashed again. Okay, + +00:03:54.720 --> 00:03:56.000 +so you're gonna have to give me a second. + +00:03:56.000 --> 00:03:58.840 +I need to figure this out. + +00:03:58.840 --> 00:04:01.680 +Okay. So everything is frozen right now. + +00:04:01.680 --> 00:04:03.120 +Just to tell you, so you're gonna have to + +00:04:03.120 --> 00:04:04.720 +deal with my lovely voice. + +00:04:04.720 --> 00:04:06.159 +Amin, can you confirm that if I + +00:04:06.159 --> 00:04:09.840 +switch to a new (tty?), you can +still hear me? + +00:04:09.840 --> 00:04:12.959 +So can you still hear me now? + +00:04:12.959 --> 00:04:14.879 +Okay. So I'm gonna have probably to kill + +00:04:14.879 --> 00:04:16.479 +firefox and log in again. + +00:04:16.479 --> 00:04:18.000 +I'm sorry. It's gonna cost us two + +00:04:18.000 --> 00:04:19.600 +minutes, but I'm gonna try to be as fast + +00:04:19.600 --> 00:04:20.560 +as I can. Okay + +00:04:20.560 --> 00:04:28.560 +(Amin: Okay. No problem, thanks. + +00:04:28.560 --> 00:04:35.199 +All right. + +00:04:35.199 --> 00:04:37.520 +I guess no event is a good one without + +00:04:37.520 --> 00:04:39.280 +one or two technical difficulties. + +00:04:39.280 --> 00:04:42.800 +I guess this is our share of + +00:04:42.800 --> 00:04:45.360 +technical difficulties this year. + +00:04:45.360 --> 00:05:04.800 +No problem.) + +00:05:04.800 --> 00:05:06.320 +Leo: All right. Guess who's back? It's not + +00:05:06.320 --> 00:05:08.160 +Britney. It's just me, sadly, so you're + +00:05:08.160 --> 00:05:10.800 +gonna have to make do with me. + +00:05:10.800 --> 00:05:11.667 +(Amin: Welcome back.) + +00:05:11.667 --> 00:05:12.880 +Leo: Well, thank you. I'm just + +00:05:12.880 --> 00:05:15.520 +gonna turn back on the camera, if I may. + +00:05:15.520 --> 00:05:19.919 +All righty. + +00:05:19.919 --> 00:05:22.400 +I'm going to make myself a presenter. + +00:05:22.400 --> 00:05:23.520 +I'm going to + +00:05:23.520 --> 00:05:26.160 +share my screen with you. + +00:05:29.919 --> 00:05:32.700 +So, if my calculations are correct, + +00:05:32.700 --> 00:05:34.800 +you should be able to see my +monitor right now. + +00:05:34.800 --> 00:05:38.160 +(Amin: Yep, but not your webcam feed.) + +00:05:38.160 --> 00:05:39.919 +Not my webcam feed. Okay. So I'm going to + +00:05:39.919 --> 00:05:42.800 +stop it. + +00:05:42.800 --> 00:05:46.000 +Sorry for the little delay, folks. You +know, it's... + +00:05:46.000 --> 00:05:49.039 +The show must go on. Can you see it now? + +00:05:49.039 --> 00:05:52.320 +(Amin: Not yet.) Leo: Still not? + +00:05:52.320 --> 00:06:00.080 +Damn it. Can I stop it? Okay, so I'm gonna... + +00:06:00.080 --> 00:06:32.960 +(Amin: yeah, maybe try like sharing a webcam +first.) + +00:06:32.960 --> 00:06:36.319 +Leo: All right, I'm back now. So I'm going to + +00:06:36.319 --> 00:06:37.759 +share my webcam first. + +00:06:37.759 --> 00:06:39.550 +(Amin: Okay.) + +00:06:43.440 --> 00:06:46.560 +Leo: All righty. So can you confirm whenever + +00:06:46.560 --> 00:06:49.360 +you've got my webcam working? + +00:06:49.360 --> 00:06:52.880 +(Amin: Let's see. I don't see it yet, + +00:06:52.880 --> 00:06:55.919 +unfortunately.) Leo: Is it loading up? +(Amin: yeah, + +00:06:55.919 --> 00:06:57.120 +it's coming up. + +00:06:57.120 --> 00:06:59.680 +Yep, I can see it.) Leo: Awesome. All right. Okay, + +00:06:59.680 --> 00:07:01.199 +we're back on track. I've got still eight + +00:07:01.199 --> 00:07:02.880 +minutes left to do, so I might have to + +00:07:02.880 --> 00:07:04.160 +have a couple of minutes to my talk, if + +00:07:04.160 --> 00:07:06.000 +you don't mind and shave off some + +00:07:06.000 --> 00:07:07.599 +questions. + +00:07:07.599 --> 00:07:10.800 +(Amin: Okay, do you want to share your +screen?) Leo: Okay, yeah, + +00:07:10.800 --> 00:07:13.759 +I'm on my way to. All right. So + +00:07:13.759 --> 00:07:14.639 +please forget + +00:07:14.639 --> 00:07:16.240 +whatever, whichever technical + +00:07:16.240 --> 00:07:18.000 +difficulties we might have had for + +00:07:18.000 --> 00:07:18.479 +the last + +00:07:18.479 --> 00:07:20.240 +three, four minutes, but we're back on + +00:07:20.240 --> 00:07:22.080 +track now. + +00:07:22.080 --> 00:07:24.960 +So org-roam: what is it and how does it + +00:07:24.960 --> 00:07:26.639 +work? I was telling you all about + +00:07:26.639 --> 00:07:28.720 +atoms and I was telling you about links, + +00:07:28.720 --> 00:07:30.720 +but how does it work concretely? + +00:07:30.720 --> 00:07:33.840 +Right now what you're seeing on your +screens + +00:07:33.840 --> 00:07:37.199 +is a slip box, which is what we... the fancy + +00:07:37.199 --> 00:07:39.520 +word that we use to designate your +folder + +00:07:39.520 --> 00:07:41.039 +where all your notes are going to be + +00:07:41.039 --> 00:07:43.280 +living. So you have here (and I hope you + +00:07:43.280 --> 00:07:44.000 +can see my + +00:07:44.000 --> 00:07:47.039 +cursor; yes you can)... So we have +a file + +00:07:47.039 --> 00:07:48.199 +which is called + +00:07:48.199 --> 00:07:51.120 +index.org and the good thing is, + +00:07:51.120 --> 00:07:52.960 +as you might have garnered by the fact + +00:07:52.960 --> 00:07:54.240 +that it finishes by + +00:07:54.240 --> 00:07:57.599 +.org is that it is just an Org Mode +file. + +00:07:57.599 --> 00:08:00.800 +I can create a heading. + +00:08:00.800 --> 00:08:03.520 +I can create another heading. + +00:08:03.520 --> 00:08:05.599 +everything works as you would expect it +to. + +00:08:05.599 --> 00:08:08.879 +It is completely... It's just an Org Mode + +00:08:08.879 --> 00:08:10.400 +file at the end of the day. + +00:08:10.400 --> 00:08:13.759 +Now, what can we do with this? + +00:08:13.759 --> 00:08:16.800 +I've told you about links. +You do know that + +00:08:16.800 --> 00:08:19.520 +Org Mode has links. What we're going + +00:08:19.520 --> 00:08:20.080 +to do + +00:08:20.080 --> 00:08:22.479 +is that we're going to create a new file. + +00:08:22.479 --> 00:08:23.440 +We're going to go back + +00:08:23.440 --> 00:08:26.240 +to our directory. What I'm going to + +00:08:26.240 --> 00:08:28.000 +do is that we have a special command... + +00:08:28.000 --> 00:08:28.879 +Actually, let me just + +00:08:28.879 --> 00:08:31.199 +show you my command. It might help you a + +00:08:31.199 --> 00:08:32.240 +little bit + +00:08:32.240 --> 00:08:35.360 +see what I'm doing. Wait, which is the + +00:08:35.360 --> 00:08:36.479 +buffer... + +00:08:36.479 --> 00:08:39.680 +Uh... log mode? Yes. exlog. So now on the + +00:08:39.680 --> 00:08:41.039 +right side of the monitor, you'll be able + +00:08:41.039 --> 00:08:43.120 +to see the command that I'm using. + +00:08:43.120 --> 00:08:45.040 +If you don't mind, in order to have as + +00:08:45.040 --> 00:08:46.640 +much realistic as possible, I'm going to + +00:08:46.640 --> 00:08:48.480 +make it a little bit shorter. + +00:08:48.480 --> 00:08:50.720 +Smaller, I should say. Is it not too small? + +00:08:50.720 --> 00:08:52.320 +Yeah, I believe it's good. + +00:08:52.320 --> 00:08:54.720 +So what I'm going to do is I'm going to + +00:08:54.720 --> 00:08:57.167 +run a command in org-roam which allows me + +00:08:57.167 --> 00:08:59.200 +to create a new note. + +00:08:59.200 --> 00:09:02.320 +I'm going to use my keybinding, which + +00:09:02.320 --> 00:09:04.720 +is not this one, definitely, + +00:09:04.720 --> 00:09:06.800 +and I'm going to create a new file which + +00:09:06.800 --> 00:09:09.839 +is, in a great tradition of examples in + +00:09:09.839 --> 00:09:12.400 +programming, I'm going to call "foo." + +00:09:12.400 --> 00:09:15.519 +Right. So at the bottom-- + +00:09:15.519 --> 00:09:17.600 +in the bottom buffer, I should say, you + +00:09:17.600 --> 00:09:21.760 +are seeing the file "foo," which is, as +you can see here, + +00:09:21.760 --> 00:09:22.720 +a capture buffer + +00:09:22.720 --> 00:09:24.640 +just like you would have in Org Mode. + +00:09:24.640 --> 00:09:25.839 +Now what I'm going to do + +00:09:25.839 --> 00:09:28.560 +is that I'm going to validate this file + +00:09:28.560 --> 00:09:32.560 +and now you see that we are in the +file "foo." + +00:09:32.560 --> 00:09:36.240 +The good thing is that I can start + +00:09:36.240 --> 00:09:39.440 +writing without having to worry + +00:09:39.440 --> 00:09:42.160 +about anything else. + +00:09:42.160 --> 00:09:43.760 +I was going to say that I'm + +00:09:43.760 --> 00:09:46.160 +showing off about my typing skills, but I + +00:09:46.160 --> 00:09:47.680 +did make mistakes, so + +00:09:47.680 --> 00:09:50.959 +well, nobody's perfect, right? So now we do + +00:09:50.959 --> 00:09:53.760 +have this "foo" file. We're going to + +00:09:53.760 --> 00:09:55.519 +go back to the index. Let's go back to + +00:09:55.519 --> 00:09:56.800 +the directory. + +00:09:56.800 --> 00:09:58.560 +We're going to refresh the file. As you + +00:09:58.560 --> 00:10:00.560 +can see, we have a file which is called +"foo," + +00:10:00.560 --> 00:10:03.360 +and we have the index. So now what I'm + +00:10:03.360 --> 00:10:04.399 +going to do + +00:10:04.399 --> 00:10:06.480 +is that I'm going to insert a link to + +00:10:06.480 --> 00:10:07.760 +this file. + +00:10:07.760 --> 00:10:09.920 +So we're going to run another org-roam + +00:10:09.920 --> 00:10:11.360 +command which you can see here, + +00:10:11.360 --> 00:10:14.160 +org-roam-insert, and I'm going to insert a + +00:10:14.160 --> 00:10:15.279 +link to the file + +00:10:15.279 --> 00:10:17.279 +"foo." As you can see, it has now + +00:10:17.279 --> 00:10:18.959 +appeared. Now what I'm going to do, + +00:10:18.959 --> 00:10:21.920 +I'm going to save the file, and now I'm + +00:10:21.920 --> 00:10:23.040 +going to show you + +00:10:23.040 --> 00:10:24.480 +the little thing I told you about-- + +00:10:24.480 --> 00:10:26.720 +backlinks--before. I'm afraid I'm going + +00:10:26.720 --> 00:10:27.680 +to have to hide + +00:10:27.680 --> 00:10:29.680 +the commands for now, but don't worry + +00:10:29.680 --> 00:10:30.880 +they'll be back. + +00:10:30.880 --> 00:10:34.320 +I'm going to show you the side +buffer. + +00:10:34.320 --> 00:10:35.839 +It is the buffer that you see on the + +00:10:35.839 --> 00:10:38.079 +right side of your screen. + +00:10:38.079 --> 00:10:40.000 +Right now, it's telling you that + +00:10:40.000 --> 00:10:42.560 +index does not have any backlinks, + +00:10:42.560 --> 00:10:46.320 +which is normal. But if we follow +the link + +00:10:46.320 --> 00:10:49.200 +"foo," now you see something different on + +00:10:49.200 --> 00:10:50.560 +the right side. As you can see on the + +00:10:50.560 --> 00:10:52.160 +left side, we're back inside the + +00:10:52.160 --> 00:10:53.360 +file "foo," + +00:10:53.360 --> 00:10:55.600 +but on the right side, we have something + +00:10:55.600 --> 00:10:56.560 +showing up: + +00:10:56.560 --> 00:11:00.160 +one backlink in the file "index." + +00:11:00.160 --> 00:11:03.519 +And under the heading, you have + +00:11:03.519 --> 00:11:04.399 +the file-- + +00:11:04.399 --> 00:11:08.720 +sorry, the link "foo." You can just +open the link, + +00:11:08.720 --> 00:11:10.720 +and you will be brought exactly where it is. + +00:11:12.640 --> 00:11:16.240 +So that was one thing. Now just + +00:11:16.240 --> 00:11:17.600 +to make sure that you've understood + +00:11:17.600 --> 00:11:20.320 +properly, I'm going to go back to the +index. + +00:11:20.320 --> 00:11:23.920 +I'm going to create a second file. + +00:11:23.920 --> 00:11:25.440 +Now I'm going to use a command that + +00:11:25.440 --> 00:11:27.680 +is slightly different. Let me just + +00:11:27.680 --> 00:11:30.800 +show you the commands on the right. + +00:11:30.800 --> 00:11:32.480 +I'm going to run the command org-roam-insert + +00:11:32.480 --> 00:11:33.839 +and I'm going to + +00:11:33.839 --> 00:11:37.519 +enter a file which is called "bar." + +00:11:37.519 --> 00:11:39.600 +Again, at the bottom, you can see that + +00:11:39.600 --> 00:11:41.440 +I have a new file "bar." + +00:11:41.440 --> 00:11:45.920 +I'm going to validate this file. + +00:11:45.920 --> 00:11:49.760 +I'm going to save index.org. + +00:11:49.760 --> 00:11:52.959 +Now, if we go in bar, and if I show + +00:11:52.959 --> 00:11:55.920 +you the links on the side, you can +see that + +00:11:55.920 --> 00:11:58.240 +exactly the same, we have a link. + +00:11:58.240 --> 00:12:00.480 +Now just to make the pictures complete, + +00:12:00.480 --> 00:12:02.639 +inside the file "bar," I'm going to insert + +00:12:02.639 --> 00:12:05.200 +a link to "foo." I'm going to save. I'm + +00:12:05.200 --> 00:12:06.959 +going to go to the file "foo." Now on + +00:12:06.959 --> 00:12:07.920 +the right side, + +00:12:07.920 --> 00:12:11.120 +you can see that we have two backlinks. + +00:12:11.120 --> 00:12:14.720 +Now you're gonna tell me, yeah, thank +you, Leo, but + +00:12:14.720 --> 00:12:17.760 +what's the point? Well the thing is + +00:12:17.760 --> 00:12:20.320 +it might sound... it might seem very simple, + +00:12:20.320 --> 00:12:22.160 +what I've just shown you, + +00:12:22.160 --> 00:12:24.160 +but programmatically, it's a little hard + +00:12:24.160 --> 00:12:26.160 +to do. We have to + +00:12:26.160 --> 00:12:28.000 +look into your files to make sure that + +00:12:28.000 --> 00:12:30.079 +every time you link your file + +00:12:30.079 --> 00:12:32.240 +somewhere else, we need to track + +00:12:32.240 --> 00:12:34.079 +everything down. + +00:12:34.079 --> 00:12:37.920 +Now as simple as org-roam might be + +00:12:37.920 --> 00:12:39.519 +looking to you, + +00:12:39.519 --> 00:12:43.279 +thee thing is what we try to do +with org-roam + +00:12:43.279 --> 00:12:46.399 +is to make sure that your collection +of notes + +00:12:46.399 --> 00:12:50.320 +remains consistent whatever we do. + +00:12:50.320 --> 00:12:54.079 +An example, for instance, right now + +00:12:54.079 --> 00:12:56.880 +I've told you about a file named "foo" and + +00:12:56.880 --> 00:13:01.120 +the file named "bar." Let's say that for +whatever reason, + +00:13:01.120 --> 00:13:03.920 +you decide to rename your file "foo" to + +00:13:03.920 --> 00:13:08.079 +something very original. Let's just +say "bar." + +00:13:08.079 --> 00:13:11.040 +So we actually have a way in Emacs--in + +00:13:11.040 --> 00:13:12.320 +org-roam, I should say-- + +00:13:12.320 --> 00:13:14.560 +when you modify the title at the top of + +00:13:14.560 --> 00:13:15.680 +the file... + +00:13:15.680 --> 00:13:18.880 +So we get "foo..." I've modified it +with "baz." + +00:13:18.880 --> 00:13:20.320 +You can see at the bottom that right now + +00:13:20.320 --> 00:13:22.000 +we haven't saved and we are still in the + +00:13:22.000 --> 00:13:26.079 +file "foo.org." I'm going to save. + +00:13:26.079 --> 00:13:29.360 +Now what you see is + +00:13:29.360 --> 00:13:32.560 +a new name for the file. But you may ask, + +00:13:32.560 --> 00:13:35.360 +"Wait a second, in the other file, we had a + +00:13:35.360 --> 00:13:36.880 +link to this file. + +00:13:36.880 --> 00:13:40.560 +Does it mean that it's broken? Does +it mean + +00:13:40.560 --> 00:13:43.440 +that we cannot access the file anymore?" + +00:13:43.920 --> 00:13:48.000 +But when we go there, beginning to go +in the +index, + +00:13:48.000 --> 00:13:50.399 +so obviously the actual description of + +00:13:50.399 --> 00:13:52.079 +the link hasn't been updated, + +00:13:52.079 --> 00:13:54.320 +but if I show you what goes on under the + +00:13:54.320 --> 00:13:55.680 +hood by showing you + +00:13:55.680 --> 00:13:57.440 +what is fontified, what is behind the + +00:13:57.440 --> 00:14:00.000 +content of the link... + +00:14:00.000 --> 00:14:02.320 +Actually, it didn't work! that's why + +00:14:02.320 --> 00:14:04.079 +you never present live, folks, because + +00:14:04.079 --> 00:14:04.639 +otherwise you're + +00:14:04.639 --> 00:14:05.920 +just going to show problems with the + +00:14:05.920 --> 00:14:08.880 +software and that's not good. + +00:14:08.880 --> 00:14:12.079 +Something must have gone on, obviously. + +00:14:12.079 --> 00:14:15.120 +But generally speaking, the file should + +00:14:15.120 --> 00:14:17.120 +have been updated. + +00:14:17.120 --> 00:14:18.959 +Damn. I'm showing you bugging my software. + +00:14:18.959 --> 00:14:21.279 +That's not very professional, now is it? + +00:14:21.279 --> 00:14:25.040 +Basically, to come back to the main idea, + +00:14:25.040 --> 00:14:28.079 +what we try to do with org-roam is to make + +00:14:28.079 --> 00:14:28.880 +sure that + +00:14:28.880 --> 00:14:30.833 +everything remains consistent. + +00:14:30.833 --> 00:14:35.279 +We really much love the system of + +00:14:35.279 --> 00:14:38.720 +organization that is behind the +Zettelkasten method. + +00:14:38.720 --> 00:14:40.240 +Now I was going, at this point of the + +00:14:40.240 --> 00:14:41.600 +presentation, basically, I wanted to go + +00:14:41.600 --> 00:14:42.639 +back to Firefox + +00:14:42.639 --> 00:14:45.199 +and show you more stuff, but it's likely + +00:14:45.199 --> 00:14:46.880 +that it's going to crash again. + +00:14:46.880 --> 00:14:48.959 +I'm not going to tempt the devil. + +00:14:48.959 --> 00:14:50.240 +I'm just going to continue talking to + +00:14:50.240 --> 00:14:51.680 +you like that. + +00:14:51.680 --> 00:14:54.800 +So the Zettelkasten method + +00:14:54.800 --> 00:14:58.160 +is a very organic way + +00:14:58.160 --> 00:15:01.839 +to write notes. If you think... + +00:15:01.839 --> 00:15:04.959 +I believe as Org Mode users, + +00:15:04.959 --> 00:15:06.639 +we share quite a lot of features. I'm + +00:15:06.639 --> 00:15:08.000 +out of time. I'm just going to take one + +00:15:08.000 --> 00:15:09.600 +more minute to answer this question + +00:15:09.600 --> 00:15:12.320 +that I'm asking myself anyway. But if + +00:15:12.320 --> 00:15:14.560 +you're anything like me, + +00:15:14.560 --> 00:15:16.079 +you've been through many + +00:15:16.079 --> 00:15:18.240 +iterations of your workflow inside + +00:15:18.240 --> 00:15:18.959 +Org Mode. + +00:15:18.959 --> 00:15:20.959 +Do I keep all my professional stuff + +00:15:20.959 --> 00:15:22.959 +under one heading, or do I create a + +00:15:22.959 --> 00:15:24.399 +separate file for this? + +00:15:24.399 --> 00:15:25.920 +You know, those types of questions on + +00:15:25.920 --> 00:15:28.000 +which you could ponder for + +00:15:28.000 --> 00:15:30.639 +many, many hours at night, generally when + +00:15:30.639 --> 00:15:31.360 +you have a + +00:15:31.360 --> 00:15:34.560 +tight deadline to be following. But + +00:15:34.560 --> 00:15:36.959 +what I've discovered by using org-roam for + +00:15:36.959 --> 00:15:38.240 +taking notes about + +00:15:38.240 --> 00:15:41.360 +my academic projects or by +taking notes on + +00:15:41.360 --> 00:15:44.880 +anything worth writing about + +00:15:44.880 --> 00:15:47.440 +is that not having to worry about the + +00:15:47.440 --> 00:15:49.199 +structure of you files, + +00:15:49.199 --> 00:15:52.399 +just having to worry about atoms + +00:15:52.399 --> 00:15:56.079 +and links, it does wonders + +00:15:56.079 --> 00:15:58.480 +for the way you think about problems. It + +00:15:58.480 --> 00:16:00.639 +does wonders about your creativity. + +00:16:00.639 --> 00:16:04.800 +And it does wonders about your ability to + +00:16:04.800 --> 00:16:07.519 +take your thoughts, put them on a paper, + +00:16:07.519 --> 00:16:08.800 +and generally, during this + +00:16:08.800 --> 00:16:10.399 +process you realize, "Oh, maybe I do not + +00:16:10.399 --> 00:16:13.120 +know this concept as well as I should." + +00:16:13.120 --> 00:16:16.079 +But I've never had a system which + +00:16:16.079 --> 00:16:16.800 +brought me + +00:16:16.800 --> 00:16:19.839 +as much serendipity as this system. + +00:16:19.839 --> 00:16:21.440 +And for those who don't know, serendipity + +00:16:21.440 --> 00:16:24.880 +the ability to come up with novel ideas + +00:16:24.880 --> 00:16:28.800 +on the spot, contextually. + +00:16:28.800 --> 00:16:32.240 +So this was just a little primer on what + +00:16:32.240 --> 00:16:34.959 +org-roam and the Zettelkasten is about. + +00:16:34.959 --> 00:16:38.000 +In about 20 minutes, I'll be giving you +a talk + +00:16:38.000 --> 00:16:39.680 +about the technical aspects of org-roam, + +00:16:39.680 --> 00:16:40.800 +which I'm certain + +00:16:40.800 --> 00:16:43.040 +some of you will be very interested in. + +00:16:44.160 --> 00:16:46.160 +Otherwise, I do have a YouTube channel + +00:16:46.160 --> 00:16:50.720 +where I try to record videos where I +explain to you + +00:16:52.079 --> 00:16:55.600 +what org-roam is about, what the +method is +about. + +00:16:55.600 --> 00:16:57.040 +I'll just finish on this. I'm two + +00:16:57.040 --> 00:16:58.720 +minutes extra time, sorry. + +00:16:58.720 --> 00:17:02.399 +We do know that a lot of people + +00:17:02.399 --> 00:17:04.079 +are interested into org-roam. +I mentioned + +00:17:04.079 --> 00:17:06.160 +at the very beginning of the +presentation + +00:17:06.160 --> 00:17:09.360 +that a lot of people discovered Emacs + +00:17:09.360 --> 00:17:10.640 +and org-roam + +00:17:10.640 --> 00:17:14.640 +and Org Mode even through org-roam. + +00:17:14.640 --> 00:17:18.400 +We feel that we have a duty to + +00:17:18.400 --> 00:17:20.959 +introduce those people, this new pool of + +00:17:20.959 --> 00:17:22.720 +people, most of whom are + +00:17:22.720 --> 00:17:25.439 +academic,s into the world of Emacs and + +00:17:25.439 --> 00:17:27.600 +into the world of free software. + +00:17:27.600 --> 00:17:30.240 +Right now the thing is we're not + +00:17:30.240 --> 00:17:32.240 +doing a particularly good job at writing + +00:17:32.240 --> 00:17:34.080 +manuals. I'm just going to try + +00:17:34.080 --> 00:17:36.160 +to stop sharing my screen, because I'm + +00:17:36.160 --> 00:17:37.360 +nearly to the end, + +00:17:37.360 --> 00:17:40.240 +and just try sharing my Firefox windows + +00:17:40.240 --> 00:17:41.919 +if it allows me. No, it doesn't allow me, + +00:17:41.919 --> 00:17:44.160 +which is very good. That's why I won't +have to + +00:17:44.160 --> 00:17:47.200 +to screw things up. + +00:17:47.200 --> 00:17:50.080 +We know that our manual is not fully + +00:17:50.080 --> 00:17:50.880 +up to date, + +00:17:50.880 --> 00:17:53.760 +but believe me, one of the key focus + +00:17:53.760 --> 00:17:54.480 +right now + +00:17:54.480 --> 00:17:57.840 +is making sure that within two to three +months, + +00:17:57.840 --> 00:17:59.679 +we have a good tutorial for people to + +00:17:59.679 --> 00:18:02.559 +join, and we have good videos for people + +00:18:02.559 --> 00:18:04.640 +to get introduced to the topics we're +covering. + +00:18:04.640 --> 00:18:06.320 +And that's me done. So, thank you so much + +00:18:06.320 --> 00:18:07.679 +for listening and now I'll be taking + +00:18:07.679 --> 00:18:09.840 +some questions. + +00:18:09.840 --> 00:18:12.880 +(Amin: Thank you very much, Leo. + +00:18:12.880 --> 00:18:17.679 +Cheers! We have, I think, about two minutes + +00:18:17.679 --> 00:18:19.440 +four questions, I see a lot of them + +00:18:19.440 --> 00:18:20.880 +on the pad. + +00:18:20.880 --> 00:18:23.120 +Would you take them?) Leo: Sure. So... Yep I'm + +00:18:23.120 --> 00:18:24.320 +scrolling, I'm scrolling... + +00:18:24.320 --> 00:18:27.600 +Getting Things Done, that's Aldric. + +00:18:27.600 --> 00:18:30.000 +Still scrolling. Okay. org-roam. Oh, wow. Okay. + +00:18:30.000 --> 00:18:31.679 +So we do have quite a lot of questions. + +00:18:31.679 --> 00:18:33.600 +Please excuse me if I'm answering + +00:18:33.600 --> 00:18:34.799 +your questions really fast, but I just + +00:18:34.799 --> 00:18:35.760 +want to make sure that I cover + +00:18:35.760 --> 00:18:38.080 +as much ground as possible. "What is + +00:18:38.080 --> 00:18:41.039 +the functionality of org-roam-unlinked-references?" + +00:18:41.039 --> 00:18:43.200 +So basically when you have a file that + +00:18:43.200 --> 00:18:45.200 +is not linked anywhere, + +00:18:45.200 --> 00:18:48.000 +this function allows you to see... + +00:18:48.000 --> 00:18:49.520 +Let's say we have a file "Emacs" + +00:18:49.520 --> 00:18:51.200 +and we've talked about "Emacs" in another + +00:18:51.200 --> 00:18:53.200 +note, but we haven't created a link. + +00:18:53.200 --> 00:18:57.440 +What this command do is that it + +00:18:57.440 --> 00:18:59.520 +looks into your folder for every mention + +00:18:59.520 --> 00:19:00.720 +of "Emacs" that is not + +00:19:00.720 --> 00:19:03.840 +linked to the note "Emacs," and it prints + +00:19:03.840 --> 00:19:05.039 +all the results in the buffer so that + +00:19:05.039 --> 00:19:06.480 +you know, "okay, I've talked about Emacs + +00:19:06.480 --> 00:19:07.840 +here, but I didn't create a link. + +00:19:07.840 --> 00:19:10.480 +Do I want to create a link?" That's it. + +00:19:10.480 --> 00:19:11.840 +"Is it possible to use the backlinks + +00:19:11.840 --> 00:19:16.400 +features in regular Org buffers?" Right +now, no. It is not possible. We are + +00:19:16.400 --> 00:19:18.080 +having a very controlled environment + +00:19:18.080 --> 00:19:20.240 +which is... I told you about this slip box + +00:19:20.240 --> 00:19:21.280 +folder before. + +00:19:21.280 --> 00:19:22.799 +This is where we keep all the notes. + +00:19:22.799 --> 00:19:24.400 +The reason why we do this will be more + +00:19:24.400 --> 00:19:27.360 +evident when I go through the technical +presentation, + +00:19:27.360 --> 00:19:30.720 +but it's because of optimization. + +00:19:30.720 --> 00:19:32.080 +I'll get back to you on that + +00:19:32.080 --> 00:19:33.760 +afterwards. + +00:19:33.760 --> 00:19:35.440 +"Do you make org-roam database + +00:19:35.440 --> 00:19:37.039 +accessible across computers?" + +00:19:37.039 --> 00:19:39.760 +No, I do not, because I'm only using my + +00:19:39.760 --> 00:19:41.760 +laptop, but plenty of people have had + +00:19:41.760 --> 00:19:44.559 +a lot of success doing so either by + +00:19:44.559 --> 00:19:47.039 +sharing the files via syncthing or by + +00:19:47.039 --> 00:19:49.760 +any other method. We have a section in +a manual + +00:19:49.760 --> 00:19:51.100 +specifying how to do this. + +00:19:51.100 --> 00:19:54.880 +"How do you discover tags' links to add +to your new org-roam note?" + +00:19:54.880 --> 00:19:56.160 +There is something that I didn't tell + +00:19:56.160 --> 00:19:57.679 +you about which is called org-roam server, + +00:19:57.679 --> 00:20:01.679 +which is a magnificent way to access + +00:20:01.679 --> 00:20:04.320 +visually the notes that you have in your + +00:20:04.320 --> 00:20:05.360 +in your system. + +00:20:05.360 --> 00:20:08.799 +You'll have to go to the orgroam.com +website. + +00:20:08.799 --> 00:20:10.640 +Please go on our Github page. We + +00:20:10.640 --> 00:20:12.080 +show everything. + +00:20:12.080 --> 00:20:14.640 +I hope what I've told you has excited + +00:20:14.640 --> 00:20:16.000 +you, so please go. + +00:20:16.000 --> 00:20:18.000 +Maybe one more question, two more + +00:20:18.000 --> 00:20:19.133 +questions, just to make sure? + +00:20:19.133 --> 00:20:21.679 +"Is it possible to seamlessly link +to other + +00:20:21.679 --> 00:20:23.039 +notes with syntax instead of a + +00:20:23.039 --> 00:20:23.919 +keybinding?" + +00:20:23.919 --> 00:20:25.840 +Yes, we are working on this. This is a + +00:20:25.840 --> 00:20:27.120 +huge project that we're doing with + +00:20:27.120 --> 00:20:28.880 +org-roam which is called + +00:20:28.880 --> 00:20:30.960 +link-ux. We're trying to do something + +00:20:30.960 --> 00:20:32.880 +which is very close to Roam Research, + +00:20:32.880 --> 00:20:34.559 +which is the software we're using for + +00:20:34.559 --> 00:20:36.880 +inspiration for org-roam. + +00:20:36.880 --> 00:20:39.200 +Yes, there are going to be + +00:20:39.200 --> 00:20:41.280 +ways to do this in the future. I'm going + +00:20:41.280 --> 00:20:42.640 +to give you a window of + +00:20:42.640 --> 00:20:46.320 +maybe three to four months. +One last question. + +00:20:46.320 --> 00:20:48.480 +Uh, good on you, thank you, well, thank you + +00:20:48.480 --> 00:20:49.440 +for this. + +00:20:49.440 --> 00:20:51.039 +"Is there an easy way to export several + +00:20:51.039 --> 00:20:53.200 +selected nodes to, say, a LaTeX file?" + +00:20:53.200 --> 00:20:56.960 +LaTeX. Yes. I mean, it's Org Mode. + +00:20:56.960 --> 00:20:59.840 +At the very core, it is Org Mode, so you + +00:20:59.840 --> 00:21:00.480 +know you don't... + +00:21:00.480 --> 00:21:02.559 +If you want to export to a LaTeX file, you + +00:21:02.559 --> 00:21:04.000 +can... you just use the + +00:21:04.000 --> 00:21:06.320 +ox-latex library, which you can access + +00:21:06.320 --> 00:21:08.320 +by pressing C-c C-e + +00:21:08.320 --> 00:21:11.760 +for export. All right. Is it... + +00:21:11.760 --> 00:21:12.480 +I believe I'm... + +00:21:12.480 --> 00:21:13.919 +It's all the time I had. Amin, can you + +00:21:13.919 --> 00:21:16.880 +confirm this? + +00:21:16.880 --> 00:21:19.039 +Okay. So if you have more questions, + +00:21:19.039 --> 00:21:20.240 +don't worry, I'll be in chat. + +00:21:20.240 --> 00:21:23.679 +I'll be answering them. I'm also on on + +00:21:23.679 --> 00:21:26.799 +all the platforms we advertise on + +00:21:26.799 --> 00:21:28.159 +org-roam. If you want to reach me, I'm + +00:21:28.159 --> 00:21:29.280 +really easy to reach. + +00:21:29.280 --> 00:21:31.919 +Our Github page is always open. So thank + +00:21:31.919 --> 00:21:32.559 +you all for + +00:21:32.559 --> 00:21:35.520 +all your questions and all your energy + +00:21:35.520 --> 00:21:37.440 +about org-roam. It is very exciting for me + +00:21:37.440 --> 00:21:38.640 +to see all this. + +00:21:38.640 --> 00:21:42.000 +but right now, I'll be handing off the + +00:21:42.000 --> 00:21:44.080 +microphone, I should say, to Noorah, who is + +00:21:44.080 --> 00:21:45.840 +going to talk to you about the + +00:21:45.840 --> 00:21:48.480 +academic way to use org-roam. I'll be + +00:21:48.480 --> 00:21:50.080 +back afterwards with the technical talk. + +00:21:50.080 --> 00:21:53.760 +Thank you. (Amin: Thank you very much, Leo) + +00:21:53.760 --> 00:21:57.760 +Leo: See you later, guys. diff --git a/2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt b/2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt new file mode 100644 index 00000000..fbf4ae9b --- /dev/null +++ b/2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt @@ -0,0 +1,1631 @@ +WEBVTT + +00:00:00.320 --> 00:00:02.639 +Good afternoon or good evening, everyone. + +00:00:03.040 --> 00:00:05.440 +Today, my talk is going to be on Org Mode + +00:00:05.440 --> 00:00:07.759 +and org-roam for scholars and researchers. + +00:00:07.759 --> 00:00:10.559 +Leo has talked about the overall + +00:00:10.559 --> 00:00:12.639 +picture of org-roam and + +00:00:12.639 --> 00:00:15.120 +org-roam-bibtex. I will be + +00:00:15.120 --> 00:00:16.240 +talking more about + +00:00:16.240 --> 00:00:20.320 +the research process itself using these +tools. + +00:00:20.320 --> 00:00:22.400 +All right. So, just to introduce that the + +00:00:22.400 --> 00:00:25.039 +research process is really messy. + +00:00:25.039 --> 00:00:28.080 +You're always working in + +00:00:28.080 --> 00:00:31.039 +piecemeal tasks and things move around + +00:00:31.039 --> 00:00:32.960 +all the time. + +00:00:32.960 --> 00:00:35.280 +There needs to be a system where you can + +00:00:35.280 --> 00:00:36.880 +organize all these tasks, + +00:00:36.880 --> 00:00:39.360 +all these ideas in a way that is + +00:00:39.360 --> 00:00:41.760 +flexible and effective. + +00:00:41.760 --> 00:00:44.767 +So my motivation is that research is +hard + +00:00:44.767 --> 00:00:47.120 +and writing about it is even +more difficult. + +00:00:47.120 --> 00:00:49.600 +My goal is to add some structure to + +00:00:49.600 --> 00:00:51.120 +this whole madness. + +00:00:51.120 --> 00:00:52.800 +Here's a list of some of the stuff + +00:00:52.800 --> 00:00:54.480 +that I've been using since I first + +00:00:54.480 --> 00:00:57.199 +learned about Emacs in 2019 + +00:00:57.199 --> 00:01:00.160 +and what I've found useful + +00:01:02.000 --> 00:01:05.199 +within my research process. + +00:01:05.199 --> 00:01:07.920 +I've organized Org Mode for Researchers + +00:01:07.920 --> 00:01:10.400 +and Scholars Within the Writing Process + +00:01:10.400 --> 00:01:12.400 +into three modules. First, there's + +00:01:12.400 --> 00:01:14.320 +the planning aspect of it, + +00:01:14.320 --> 00:01:15.759 +then you've got the writing and the + +00:01:15.759 --> 00:01:18.320 +reference management, which I will join +together + +00:01:18.320 --> 00:01:20.560 +by looking at the example of doing your + +00:01:20.560 --> 00:01:21.920 +literature review. + +00:01:21.920 --> 00:01:25.467 +When we're talking about planning, + +00:01:25.467 --> 00:01:27.360 +we're talking about either task +management or + +00:01:27.360 --> 00:01:30.880 +time management with task management. + +00:01:30.880 --> 00:01:31.600 +You've got + +00:01:31.600 --> 00:01:33.840 +Org Mode's TODOs, tags, and + +00:01:33.840 --> 00:01:36.159 +categories. These are really powerful + +00:01:36.159 --> 00:01:38.479 +tools that you could use + +00:01:38.479 --> 00:01:41.600 +in your Org files to + +00:01:41.600 --> 00:01:44.799 +organize your tasks and + +00:01:44.799 --> 00:01:47.040 +your appointments. There are different + +00:01:47.040 --> 00:01:49.040 +types of TODOs that you can either set + +00:01:49.040 --> 00:01:50.960 +globally in your init file or they can + +00:01:50.960 --> 00:01:52.799 +be file-/buffer-specific. + +00:01:52.799 --> 00:01:54.867 +That means, based on context, + +00:01:54.867 --> 00:01:57.759 +based on the type of manuscript you're +working on, whether + +00:01:57.759 --> 00:02:00.033 +it's a literate programming report + +00:02:00.033 --> 00:02:03.759 +or your actual thesis/dissertation. + +00:02:03.759 --> 00:02:05.840 +Also, these TODOs are either created + +00:02:05.840 --> 00:02:07.759 +as a subtree, like think of them as + +00:02:07.759 --> 00:02:11.440 +headings and sections if you use LaTeX, + +00:02:11.440 --> 00:02:15.233 +or inline tasks, which are like Org +inline tasks. + +00:02:19.120 --> 00:02:17.760 +I like Org inline tasks +because I can add + +00:02:19.120 --> 00:02:21.520 +TODOs between two paragraphs. That + +00:02:21.520 --> 00:02:22.879 +way, it doesn't show up + +00:02:22.879 --> 00:02:25.360 +in the table of contents when I export + +00:02:25.360 --> 00:02:27.280 +into PDF, HTML, or + +00:02:27.280 --> 00:02:30.879 +anything else. So this is an + +00:02:30.879 --> 00:02:34.319 +example of buffer-specific TODOs, + +00:02:34.319 --> 00:02:37.360 +and this is an example of a little + +00:02:37.360 --> 00:02:39.120 +programming report that I was working on + +00:02:39.120 --> 00:02:40.800 +where I was dealing with + +00:02:40.800 --> 00:02:44.080 +data and analysis and all of that +stuff. + +00:02:44.080 --> 00:02:47.519 +I needed context-specific TODOs to + +00:02:47.519 --> 00:02:49.440 +use them within this buffer. + +00:02:49.440 --> 00:02:52.080 +That's how I would organize it. + +00:02:52.080 --> 00:02:54.319 +There's also another example + +00:02:54.319 --> 00:02:57.200 +of an Org inline task where you could + +00:02:57.200 --> 00:03:01.360 +see it in the middle between the +two headings. + +00:03:01.360 --> 00:03:03.040 +That way, it wouldn't show up in the + +00:03:03.040 --> 00:03:04.959 +table of contents, and it would look + +00:03:04.959 --> 00:03:06.480 +neater within the + +00:03:06.480 --> 00:03:09.519 +text when you export it. + +00:03:09.519 --> 00:03:11.920 +I also added a tag of :noexport: + +00:03:11.920 --> 00:03:13.280 +so it won't show up at all + +00:03:13.280 --> 00:03:16.400 +when I export it into either PDF, + +00:03:16.400 --> 00:03:19.360 +which I use all the time. + +00:03:19.360 --> 00:03:21.599 +Another useful tool + +00:03:21.599 --> 00:03:24.159 +for the research and just + +00:03:24.159 --> 00:03:25.200 +general planning + +00:03:25.200 --> 00:03:27.920 +is the org-capture. When I first + +00:03:27.920 --> 00:03:29.120 +started with Emacs, + +00:03:29.120 --> 00:03:32.080 +actually, it was for org-agenda. + +00:03:32.080 --> 00:03:34.239 +I went crazy with my capture template. + +00:03:34.239 --> 00:03:35.360 +I created a template for + +00:03:35.360 --> 00:03:38.640 +everything because I was just so +excited. + +00:03:38.640 --> 00:03:40.720 +But with time, I was using less and less + +00:03:40.720 --> 00:03:42.400 +of them, so I kept taking them out. + +00:03:42.400 --> 00:03:46.319 +Now this is my simplified + +00:03:46.319 --> 00:03:48.239 +capture templates that I use, either for + +00:03:48.239 --> 00:03:49.599 +a general TODO, + +00:03:49.599 --> 00:03:52.159 +for a regular appointment, a fleeting + +00:03:52.159 --> 00:03:54.159 +note, research tasks (because those + +00:03:54.159 --> 00:03:55.200 +are what I focus on, + +00:03:55.200 --> 00:03:56.959 +like my bread and butter), and then + +00:03:56.959 --> 00:03:58.720 +finally with meetings, which I find + +00:03:58.720 --> 00:04:00.879 +sometimes I don't use it as much because + +00:04:00.879 --> 00:04:03.519 +I would just have the Org file ready +instead of + +00:04:03.519 --> 00:04:04.879 +needing to capture, + +00:04:04.879 --> 00:04:07.920 +you know, open a capture template. + +00:04:07.920 --> 00:04:12.400 +Right. Org Agenda. That's how I got into +Emacs. + +00:04:12.400 --> 00:04:15.439 +I needed to organize my life. + +00:04:15.439 --> 00:04:19.199 +I found Emacs and it's been great +ever since. + +00:04:19.199 --> 00:04:20.479 +It populates all your TODOs and + +00:04:20.479 --> 00:04:22.720 +appointments into a singular view. So the + +00:04:22.720 --> 00:04:25.280 +default view, I think, is a week view. + +00:04:25.280 --> 00:04:29.120 +However, I use org-super-agenda. Love this + +00:04:29.120 --> 00:04:31.919 +package. I set up my agenda as a + +00:04:31.919 --> 00:04:34.160 +daily view with appointments, + +00:04:34.160 --> 00:04:37.360 +deadlines, and a habit tracker. + +00:04:37.360 --> 00:04:38.720 +A side note, you guys: I'm still + +00:04:38.720 --> 00:04:40.639 +struggling with organizing the perfect + +00:04:40.639 --> 00:04:42.320 +agenda, so it's a process. + +00:04:42.320 --> 00:04:45.360 +Take it easy, all right? + +00:04:45.360 --> 00:04:47.919 +So this is just an overview of my daily + +00:04:47.919 --> 00:04:50.320 +agenda. As you can see they're just + +00:04:50.320 --> 00:04:55.520 +appointments that I import from Gmail +using org-gcal; + +00:04:55.520 --> 00:04:57.919 +a simple habit tracker of daily + +00:04:57.919 --> 00:04:58.880 +free writing-- + +00:04:58.880 --> 00:05:00.960 +as you can see, there are a lot of times + +00:05:00.960 --> 00:05:02.800 +where I'm skipping, and the asterisk is + +00:05:02.800 --> 00:05:05.199 +the one where I've completed that day, + +00:05:05.199 --> 00:05:08.479 +so, you know, it's a process--and then + +00:05:08.479 --> 00:05:10.080 +regular deadlines. + +00:05:10.080 --> 00:05:12.639 +So what happens is that I have other + +00:05:12.639 --> 00:05:17.120 +TODOs that I have not scheduled or not +added a deadline + +00:05:17.120 --> 00:05:19.933 +but they're just tasks that keep piling +up. + +00:05:19.933 --> 00:05:22.320 +When I first started with Emacs +and org-agenda, + +00:05:22.320 --> 00:05:24.880 +I had everything in there, and it got + +00:05:24.880 --> 00:05:26.880 +overwhelming. Then I decided, no, + +00:05:26.880 --> 00:05:29.680 +I'm not gonna even let them show up. + +00:05:29.680 --> 00:05:30.800 +So what I would do + +00:05:30.800 --> 00:05:33.120 +at the beginning of each week or the + +00:05:33.120 --> 00:05:34.479 +night before, + +00:05:34.479 --> 00:05:36.800 +I would sit down, look at all my + +00:05:36.800 --> 00:05:40.720 +TODOs that I have not assigned yet to a +deadline or a + +00:05:40.720 --> 00:05:42.639 +schedule or just a simple + +00:05:42.639 --> 00:05:45.360 +timestamp, and I would organize them + +00:05:45.360 --> 00:05:46.320 +throughout the week. + +00:05:46.320 --> 00:05:49.520 +So, here's an example of what I did. + +00:05:49.520 --> 00:05:51.680 +On that Wednesday, from my Gmail, I had + +00:05:51.680 --> 00:05:53.039 +all these appointments, but + +00:05:53.039 --> 00:05:56.560 +one of them is I have a writing group +session. + +00:05:56.560 --> 00:05:58.400 +So I looked at my tasks and I + +00:05:58.400 --> 00:05:59.759 +thought, okay, then I will just + +00:05:59.759 --> 00:06:03.520 +assign, for example, my Emacs +slides + +00:06:03.520 --> 00:06:06.319 +or the framework diagram into that + +00:06:06.319 --> 00:06:07.280 +writing session. + +00:06:07.280 --> 00:06:10.800 +All I did was just add an active +timestamp. + +00:06:10.800 --> 00:06:12.960 +That is all I needed to do, and it went + +00:06:12.960 --> 00:06:14.000 +straight into my + +00:06:14.000 --> 00:06:17.120 +appointment. Now, if I miss that, + +00:06:17.120 --> 00:06:20.080 +it won't show up on the next day. So if + +00:06:20.080 --> 00:06:21.520 +you put in a deadline, + +00:06:21.520 --> 00:06:24.639 +it will show up as an overdue, but if you + +00:06:24.639 --> 00:06:26.560 +have no deadline or schedule, it will not + +00:06:26.560 --> 00:06:29.280 +show up in your daily org agenda. + +00:06:29.280 --> 00:06:32.960 +So, just a star. + +00:06:32.960 --> 00:06:35.680 +All right. Another way of accessing your + +00:06:35.680 --> 00:06:37.520 +TODOs is that if it's + +00:06:37.520 --> 00:06:40.880 +Org file-specific, + +00:06:40.880 --> 00:06:42.160 +buffer-specific, + +00:06:42.160 --> 00:06:44.160 +and so... Like when we talked about like + +00:06:44.160 --> 00:06:46.400 +whether to have a big-ass Org file or + +00:06:46.400 --> 00:06:47.680 +like tiny files, + +00:06:47.680 --> 00:06:50.720 +it all depends. This isn't the... + +00:06:50.720 --> 00:06:54.560 +you know, the way this depends, + +00:06:54.560 --> 00:06:55.759 +because if you're working on a + +00:06:55.759 --> 00:06:58.400 +dissertation, it's a huge manuscript. + +00:06:58.400 --> 00:06:59.680 +You need to work + +00:06:59.680 --> 00:07:02.880 +on that Org file all the time. + +00:07:02.880 --> 00:07:05.759 +Then yes, my TODOs should be in that + +00:07:05.759 --> 00:07:07.680 +file specifically, because every time, + +00:07:08.000 --> 00:07:09.680 +if I'm visiting this Org file all the + +00:07:09.680 --> 00:07:12.479 +time, I should be able to just look at my + +00:07:12.479 --> 00:07:15.520 +tasks from within that buffer. + +00:07:15.520 --> 00:07:18.639 +And so I use org-sidebar to + +00:07:18.639 --> 00:07:21.599 +keep all these specific TODOs + +00:07:21.599 --> 00:07:22.960 +within that Org file. + +00:07:22.960 --> 00:07:26.560 +I find it helpful. Okay. + +00:07:26.560 --> 00:07:28.400 +Now that we're going into the writing + +00:07:28.400 --> 00:07:29.759 +and reference management... + +00:07:29.759 --> 00:07:33.039 +We'll call it a literature review. + +00:07:33.039 --> 00:07:36.639 +This is something I've built as a +schema. + +00:07:36.639 --> 00:07:40.240 +I think that it works for now. + +00:07:40.240 --> 00:07:45.919 +It requires one outside software, which +is Zotero, what + +00:07:45.919 --> 00:07:47.680 +I use. It's an open source reference + +00:07:47.680 --> 00:07:51.759 +management software. It's great. + +00:07:51.759 --> 00:07:53.599 +But the thing to keep in mind is that I + +00:07:53.599 --> 00:07:58.319 +use two plugins that are really needed +for when + +00:07:58.319 --> 00:08:01.039 +we work with org-roam-bibtex, org-roam, + +00:08:01.039 --> 00:08:03.840 +Org Mode, and the ZotFile. + +00:08:03.840 --> 00:08:07.039 +Better BibTeX organizes your +reference keys + +00:08:07.039 --> 00:08:10.560 +in a way, in a fashion that + +00:08:10.560 --> 00:08:13.360 +works for you. For me, all my reference + +00:08:13.360 --> 00:08:17.280 +keys are last author and year. +With ZotFile, + +00:08:17.280 --> 00:08:21.120 +I let it rename all the + +00:08:21.120 --> 00:08:22.319 +PDF files + +00:08:22.319 --> 00:08:24.400 +the same way that I have for + +00:08:24.400 --> 00:08:26.000 +my Bib keys, which is + +00:08:26.000 --> 00:08:29.360 +last name of author and year. All right. + +00:08:29.360 --> 00:08:33.440 +Once you export your entire + +00:08:33.440 --> 00:08:37.120 +library as a Bib file, then you can work + +00:08:37.120 --> 00:08:39.440 +on it within Org Mode and Emacs + +00:08:39.440 --> 00:08:42.880 +using the following packages. + +00:08:42.880 --> 00:08:45.040 +So with org-roam-bibtex, it + +00:08:45.040 --> 00:08:47.839 +creates an Org file for each Bib entry. + +00:08:47.839 --> 00:08:49.519 +You have the option of + +00:08:49.519 --> 00:08:52.240 +templating and doing other stuff with it. + +00:08:52.240 --> 00:08:54.880 +Then finally, there's this + +00:08:54.880 --> 00:08:56.240 +orb-pdf-scrapper. + +00:08:56.240 --> 00:09:00.240 +I've used it briefly but I think the +potential + +00:09:00.240 --> 00:09:02.880 +with orb-pdf-scrapper is if you're going to + +00:09:02.880 --> 00:09:05.920 +do a bibliometric study or + +00:09:05.920 --> 00:09:08.320 +a systematic literature review, there's + +00:09:08.320 --> 00:09:10.000 +something there, but I have to look + +00:09:10.000 --> 00:09:10.959 +through it. + +00:09:10.959 --> 00:09:14.399 +Anyway, so once you create + +00:09:14.399 --> 00:09:16.880 +your reference file of reference X and + +00:09:16.880 --> 00:09:18.160 +you're writing your notes, + +00:09:18.160 --> 00:09:20.240 +you can either go... Like, with going + +00:09:20.240 --> 00:09:22.399 +through Org Mode, you're writing + +00:09:22.399 --> 00:09:24.080 +your ideas, you're writing your notes, + +00:09:24.080 --> 00:09:26.080 +you're assigning tasks, + +00:09:26.080 --> 00:09:27.839 +and then there's org-transclusion, which + +00:09:27.839 --> 00:09:30.480 +I will mention briefly at the end, + +00:09:30.480 --> 00:09:32.240 +and ways to extract. If you're going to + +00:09:32.240 --> 00:09:35.360 +go through the org-roam... + +00:09:35.360 --> 00:09:36.640 +Things that you're going to use within + +00:09:36.640 --> 00:09:38.720 +org-roam... It's a great way to build your + +00:09:38.720 --> 00:09:40.000 +database. You start making the + +00:09:40.000 --> 00:09:42.880 +connections. You can visualize your + +00:09:42.880 --> 00:09:44.959 +notes and how these references are + +00:09:44.959 --> 00:09:46.240 +linked to each other + +00:09:46.240 --> 00:09:48.839 +through the org-roam server or + +00:09:48.839 --> 00:09:50.240 +org-roam graph. + +00:09:50.240 --> 00:09:53.120 +All right. This is just notes for later. + +00:09:53.680 --> 00:09:56.240 +So this is an example of an org-roam + +00:09:56.240 --> 00:09:57.360 +file that I have. + +00:09:57.360 --> 00:09:59.279 +For example, if I'm working on adaptation + +00:09:59.279 --> 00:10:01.760 +policy, I have these hyperlinks that are + +00:10:01.760 --> 00:10:04.959 +linked to other concepts and ideas such +as either + +00:10:04.959 --> 00:10:06.640 +climate security, + +00:10:06.640 --> 00:10:08.720 +changing global environment, so on and + +00:10:08.720 --> 00:10:10.560 +so forth. The backlinks + +00:10:10.560 --> 00:10:13.920 +are other references that talk about + +00:10:13.920 --> 00:10:15.839 +this specific concept. + +00:10:15.839 --> 00:10:17.680 +This is really helpful. Then, when + +00:10:17.680 --> 00:10:19.920 +you visualize it, the picture on the left + +00:10:19.920 --> 00:10:22.160 +(which I'm sure looks really small), + +00:10:22.160 --> 00:10:24.160 +you can see the connections that it's + +00:10:24.160 --> 00:10:25.680 +making with other + +00:10:25.680 --> 00:10:28.160 +references. Of course, this is just + +00:10:28.160 --> 00:10:32.720 +like a buffer network. When you look at +the entire + +00:10:32.720 --> 00:10:34.560 +database network... + +00:10:34.560 --> 00:10:38.000 +It's growing. Okay. + +00:10:38.000 --> 00:10:41.680 +So going into org-roam-bibtex... + +00:10:41.680 --> 00:10:44.079 +It utilizes a combination of the + +00:10:44.079 --> 00:10:46.000 +org-ref package, helm-bibtex, + +00:10:46.000 --> 00:10:46.880 +bibtex-completion. + +00:10:46.880 --> 00:10:50.079 +It works with org-roam functionalities + +00:10:50.079 --> 00:10:54.880 +and other good stuff. This is an example + +00:10:54.880 --> 00:10:57.440 +of my org-roam-bibtex file. All right. So + +00:10:57.440 --> 00:11:01.200 +I've created the template which I +pretty much use, + +00:11:01.200 --> 00:11:05.920 +what Leo has produced in his + +00:11:05.920 --> 00:11:08.640 +tutorial. I think it's great. It + +00:11:08.640 --> 00:11:10.160 +works well for me. + +00:11:10.160 --> 00:11:12.880 +What it does is that it works + +00:11:12.880 --> 00:11:14.480 +with your bib file. + +00:11:14.480 --> 00:11:17.519 +So if you're in your bib file, you have a + +00:11:17.519 --> 00:11:19.519 +sub entry that's called keywords, and + +00:11:19.519 --> 00:11:21.040 +usually that's within + +00:11:21.040 --> 00:11:23.120 +a journal article. The author would + +00:11:23.120 --> 00:11:27.519 +specify these keywords. When it gets +imported into + +00:11:27.519 --> 00:11:30.399 +Zotero, it extracts those keywords and +then it + +00:11:30.399 --> 00:11:32.399 +gets populated as an Org file + +00:11:32.399 --> 00:11:34.959 +with org-roam-bibtex. I always start + +00:11:34.959 --> 00:11:36.959 +with the meta information first, and then + +00:11:36.959 --> 00:11:38.560 +I would write my notes + +00:11:38.560 --> 00:11:42.480 +after that. This is an example, though, + +00:11:42.480 --> 00:11:45.760 +for reference of a physical book, so + +00:11:45.760 --> 00:11:49.120 +I don't have a pdf file for it. + +00:11:49.120 --> 00:11:51.519 +So when I've figured out a new idea + +00:11:51.519 --> 00:11:53.920 +for it, if I'm writing notes on it, + +00:11:53.920 --> 00:11:57.279 +I would create a property that says +pages. + +00:11:57.279 --> 00:11:58.959 +That way, it's easier for you when you go + +00:11:58.959 --> 00:12:00.639 +back to citing + +00:12:00.639 --> 00:12:02.720 +certain ideas or something, that you + +00:12:02.720 --> 00:12:04.720 +have the pages prepared there. + +00:12:04.720 --> 00:12:07.839 +It's easier that way. Okay. + +00:12:07.839 --> 00:12:11.279 +org-noter which is something I + +00:12:11.279 --> 00:12:13.040 +use a lot, especially with journal + +00:12:13.040 --> 00:12:15.600 +articles that have PDFs and stuff like +that. + +00:12:15.600 --> 00:12:19.120 +They're really helpful if you are going to... + +00:12:19.120 --> 00:12:22.720 +If you've just started using Emacs + +00:12:22.720 --> 00:12:23.760 +and org-roam, + +00:12:23.760 --> 00:12:26.959 +and you have all these PDFs that have + +00:12:26.959 --> 00:12:29.519 +all the annotations and highlighting and + +00:12:29.519 --> 00:12:32.639 +all that stuff, with org-noter you can + +00:12:32.639 --> 00:12:36.720 +just use the org-noter-create-skeleton + +00:12:36.720 --> 00:12:39.519 +command and it will populate all your + +00:12:39.519 --> 00:12:41.200 +notes that have already been + +00:12:41.200 --> 00:12:43.760 +entered within the PDF file if you're + +00:12:43.760 --> 00:12:48.160 +using an outside software, and creates +them as a neat + +00:12:48.160 --> 00:12:52.560 +Org file. I highly recommend. + +00:12:52.560 --> 00:12:55.920 +Finally, org-transclusion. + +00:12:55.920 --> 00:12:57.920 +I think this is still in its beta phase, + +00:12:57.920 --> 00:13:01.040 +but I've been enjoying it so far. + +00:13:01.040 --> 00:13:02.720 +I'm guessing people know what + +00:13:02.720 --> 00:13:04.800 +transclusion means, which is like + +00:13:04.800 --> 00:13:06.480 +copy-pasting text from + +00:13:06.480 --> 00:13:09.600 +one Org file to another. This is helpful. + +00:13:09.600 --> 00:13:11.839 +I think I peeked at a question that + +00:13:11.839 --> 00:13:12.959 +was talking about + +00:13:12.959 --> 00:13:16.320 +linking to other Org files. + +00:13:16.320 --> 00:13:20.320 +I think org-transclusion could really +work. It's + +00:13:20.320 --> 00:13:24.399 +equivalent to the include + +00:13:24.399 --> 00:13:27.760 +function within Org Mode, but I think... + +00:13:27.760 --> 00:13:29.519 +So if you have other files + +00:13:29.519 --> 00:13:32.560 +that you know which region that you + +00:13:32.560 --> 00:13:34.800 +need in another file, you could use the + +00:13:34.800 --> 00:13:36.079 +#+INCLUDE, but with + +00:13:36.079 --> 00:13:38.160 +org-transclusion... It's great. I mean you + +00:13:38.160 --> 00:13:39.440 +just have... + +00:13:39.440 --> 00:13:43.360 +you're just linking one part to the +other. + +00:13:43.360 --> 00:13:45.760 +Sort of... Like, not refiling, but you know + +00:13:45.760 --> 00:13:47.760 +hyperlinking. + +00:13:47.760 --> 00:13:49.680 +So this is an example of what + +00:13:49.680 --> 00:13:51.120 +org-transclusion looks like. + +00:13:51.120 --> 00:13:53.680 +The highlighted problem statement + +00:13:53.680 --> 00:13:54.720 +is from another + +00:13:54.720 --> 00:13:57.760 +Org file. Then what I would do is + +00:13:57.760 --> 00:13:59.760 +just link it to there, and there was a + +00:13:59.760 --> 00:14:01.440 +transclusion command. + +00:14:01.440 --> 00:14:05.440 +I wish I made another screenshot of it. + +00:14:05.440 --> 00:14:09.120 +When you invoke org-transclusion-mode, + +00:14:09.120 --> 00:14:12.079 +it turns... It prints it out like that. + +00:14:12.480 --> 00:14:15.120 +It's in view mode. Then when you want + +00:14:15.120 --> 00:14:16.560 +to edit, it will take you back to that + +00:14:16.560 --> 00:14:18.480 +buffer and you can edit the text + +00:14:18.480 --> 00:14:22.720 +however you want. All right. So, thank +you so much. + +00:14:22.720 --> 00:14:26.000 +I wanted to leave room for questions, + +00:14:26.000 --> 00:14:29.120 +but special thanks to all the folks that + +00:14:29.120 --> 00:14:33.440 +work on org-roam, org-roam-bibtex, +org-roam-server, + +00:14:33.440 --> 00:14:36.320 +org-transclusion, and of course alphapapa on + +00:14:36.320 --> 00:14:38.240 +org-super-agenda and org-sidebar. + +00:14:38.240 --> 00:14:43.440 +That's how I got into Emacs. Thank you. + +00:14:43.440 --> 00:14:45.600 +(Leo: All right. Well, thank you. So yeah, + +00:14:45.600 --> 00:14:47.120 +this time I'll be the one asking the + +00:14:47.120 --> 00:14:49.120 +question and not Amin. + +00:14:49.120 --> 00:14:51.360 +I'm filling big shoes right now, + +00:14:51.360 --> 00:14:53.120 +so you'll have to bear with me folks. + +00:14:53.120 --> 00:14:54.880 +So thank you so much, Noorah, for your + +00:14:54.880 --> 00:14:56.240 +presentation that is incredibly + +00:14:56.240 --> 00:14:57.279 +interesting. + +00:14:57.279 --> 00:14:58.959 +Would you mind if I fed you questions + +00:14:58.959 --> 00:15:00.800 +from the charts?) + +00:15:00.800 --> 00:15:04.000 +Noorah: Go ahead. (Leo: Okay. so the first one I've + +00:15:04.000 --> 00:15:06.160 +picked on my end was "Did you try using + +00:15:06.160 --> 00:15:07.920 +ebib instead of Zotero, + +00:15:07.920 --> 00:15:10.560 +and if so, is it better than Zotero in + +00:15:10.560 --> 00:15:12.079 +some ways?) + +00:15:12.079 --> 00:15:14.880 +Noorah: No, I have not used Ebib. I've only used + +00:15:14.880 --> 00:15:15.680 +Mendeley + +00:15:15.680 --> 00:15:18.560 +and then they got bought by Elsevier, + +00:15:18.560 --> 00:15:20.320 +and so I was, like, okay I'm done, + +00:15:20.320 --> 00:15:23.040 +I'm going to Zotero. There are a lot + +00:15:23.040 --> 00:15:25.120 +of plugins with Zotero that you can play + +00:15:25.120 --> 00:15:26.240 +around with. + +00:15:26.240 --> 00:15:28.320 +I can't speak for Ebib, but definitely + +00:15:28.320 --> 00:15:32.079 +Zotero has been a good experience so +far. + +00:15:32.079 --> 00:15:34.880 +(Leo: Yes, same. I also do research on + +00:15:34.880 --> 00:15:35.360 +the side; + +00:15:35.360 --> 00:15:38.079 +as I told you, English major, and yeah I + +00:15:38.079 --> 00:15:39.360 +also do Zotero. + +00:15:39.360 --> 00:15:41.839 +Some people have been using uh a + +00:15:41.839 --> 00:15:43.759 +connector between Zotero and Emacs which + +00:15:43.759 --> 00:15:46.000 +has... they've had great success with +them but + +00:15:46.000 --> 00:15:47.360 +personally I haven't + +00:15:47.360 --> 00:15:50.480 +touched it already, so yeah. + +00:15:50.480 --> 00:15:52.240 +Oh, go ahead. Sorry.) Noorah: All right. So far, I + +00:15:52.240 --> 00:15:53.920 +don't have any problems with Zotero, but + +00:15:53.920 --> 00:15:56.320 +maybe if I run into something, I might +check out + +00:15:56.320 --> 00:15:58.320 +Ebib in the future. + +00:15:58.320 --> 00:16:00.240 +(Leo: yeah, definitely. I think zotero is a very + +00:16:00.240 --> 00:16:01.680 +solid project. You know, the fact that + +00:16:01.680 --> 00:16:02.560 +it's being used + +00:16:02.560 --> 00:16:04.959 +by people outside of Emacs also ensures + +00:16:04.959 --> 00:16:06.560 +that there's quite a lot of backing + +00:16:06.560 --> 00:16:07.680 +behind the software, + +00:16:07.680 --> 00:16:09.759 +which is reassuring when your livelihood + +00:16:09.759 --> 00:16:11.759 +depends on your research.) + +00:16:11.759 --> 00:16:13.519 +Noorah: Right. And then I think one more thing + +00:16:13.519 --> 00:16:15.600 +with Zotero is that you can create + +00:16:15.600 --> 00:16:18.079 +groups, so if you're in a collaborative +project, + +00:16:18.079 --> 00:16:20.160 +you can create a reference, + +00:16:20.160 --> 00:16:22.320 +a library just for your group, and I think + +00:16:22.320 --> 00:16:23.759 +that could help. + +00:16:23.759 --> 00:16:25.279 +I'm going to be in a project next + +00:16:25.279 --> 00:16:27.600 +semester that requires that. + +00:16:27.600 --> 00:16:29.839 +(Leo: Yeah, definitely. I believe the ability to + +00:16:29.839 --> 00:16:31.600 +have folders inside Zotero + +00:16:31.600 --> 00:16:33.839 +makes it incredibly useful to manage + +00:16:33.839 --> 00:16:37.440 +your different projects, concurrent +projects. + +00:16:37.440 --> 00:16:39.279 +So moving on to other questions, do you + +00:16:39.279 --> 00:16:41.279 +have any suggestion on what subjects or + +00:16:41.279 --> 00:16:43.440 +things should be tags or separate org-roam + +00:16:43.440 --> 00:16:46.560 +files for cross-linking?) + +00:16:46.560 --> 00:16:50.320 +Right. So far, now, I'm having + +00:16:50.320 --> 00:16:52.720 +trouble with "should I be combining + +00:16:52.720 --> 00:16:55.360 +certain concepts together as one?" + +00:16:55.360 --> 00:16:59.360 +This is where the thought process + +00:16:59.360 --> 00:17:00.959 +starts coming to fruit, is that when you + +00:17:00.959 --> 00:17:04.880 +start combining ideas together so you +won't need a + +00:17:04.880 --> 00:17:06.480 +specific tag + +00:17:06.480 --> 00:17:09.199 +and another one that are like similar in + +00:17:09.199 --> 00:17:11.280 +ideas... + +00:17:11.280 --> 00:17:12.720 +I'm not sure if that answers the + +00:17:12.720 --> 00:17:14.799 +question, but so far I've been using + +00:17:14.799 --> 00:17:17.919 +the org-roam the default way, +which is + +00:17:17.919 --> 00:17:22.160 +many small files and then just + +00:17:22.160 --> 00:17:24.400 +linking them to my... Like, either if I have + +00:17:24.400 --> 00:17:26.319 +a report to write, or if I have an + +00:17:26.959 --> 00:17:32.240 +essay to write... + +00:17:32.240 --> 00:17:35.360 +I think you're muted. + +00:17:35.360 --> 00:17:38.400 +(Leo: I did two stupid things. The +first one + +00:17:38.400 --> 00:17:40.640 +was spilling out my water. The second one + +00:17:40.640 --> 00:17:42.320 +was speaking without actually turning on + +00:17:42.320 --> 00:17:43.760 +my microphone. + +00:17:43.760 --> 00:17:45.760 +Let's just hope that nothing is going + +00:17:45.760 --> 00:17:48.320 +to fry in the near vicinity of me right +now. + +00:17:48.320 --> 00:17:49.840 +But yeah, I believe you've answered + +00:17:49.840 --> 00:17:51.440 +the question, so don't worry about it. I'm + +00:17:51.440 --> 00:17:53.200 +slightly wet right now, which is not a + +00:17:53.200 --> 00:17:55.280 +very agreeable feeling, but we'll have to + +00:17:55.280 --> 00:17:57.280 +carry on, I suppose. + +00:17:57.280 --> 00:17:59.360 +Another question: "is there a place where + +00:17:59.360 --> 00:18:01.600 +people are collaborating on research + +00:18:01.600 --> 00:18:04.320 +about Emacs?" So do you want to try to + +00:18:04.320 --> 00:18:06.160 +take this one?) + +00:18:06.160 --> 00:18:08.559 +Noorah: I don't know, but I'm definitely + +00:18:08.559 --> 00:18:10.559 +interested in the user experience of + +00:18:10.559 --> 00:18:14.720 +Emacs, so if anyone wants to work on +that, + +00:18:14.720 --> 00:18:16.400 +I'm happy. + +00:18:16.400 --> 00:18:18.320 +(Leo: Well you do have a a pretty good + +00:18:18.320 --> 00:18:19.760 +candidate in front of you, if I + +00:18:19.760 --> 00:18:22.080 +should say so myself. I'm incredibly + +00:18:22.080 --> 00:18:22.960 +interested about + +00:18:22.960 --> 00:18:25.039 +the ability to do research in Emacs + +00:18:25.039 --> 00:18:26.960 +and about the ability to + +00:18:26.960 --> 00:18:30.480 +preach the FLOSS way + +00:18:30.480 --> 00:18:32.480 +to academia and to the academe, + +00:18:32.480 --> 00:18:34.080 +especially because I believe there's + +00:18:34.080 --> 00:18:35.280 +really something + +00:18:35.280 --> 00:18:38.240 +great to be done. Sorry, I'm just looking + +00:18:38.240 --> 00:18:39.919 +at the puddle of water on the side which + +00:18:39.919 --> 00:18:41.840 +is slightly oozing my way, + +00:18:41.840 --> 00:18:45.039 +which is not a very good feeling, really. + +00:18:45.039 --> 00:18:46.880 +I believe some work + +00:18:46.880 --> 00:18:48.320 +could be done, and if people are + +00:18:48.320 --> 00:18:50.000 +interested in the chat right now, + +00:18:50.000 --> 00:18:52.320 +do get in touch with us. Both + +00:18:52.320 --> 00:18:57.280 +Noorah and I are on our Slack channel. +Yes, I know, Slack, + +00:18:57.280 --> 00:19:00.080 +the corporate hive mind that is Slack. + +00:19:00.080 --> 00:19:02.720 +But we've decided with org-roam to use +Slack. + +00:19:02.720 --> 00:19:05.520 +You can find us very easily. + +00:19:05.520 --> 00:19:06.880 +If you want to talk about these topics, + +00:19:07.360 --> 00:19:08.720 +by all means, do, and we'll be very + +00:19:08.720 --> 00:19:10.720 +interested to answer your questions.) + +00:19:10.720 --> 00:19:12.640 +Noorah: I have a question here that says, "How + +00:19:12.640 --> 00:19:15.520 +does the view for time blocking works?" + +00:19:15.520 --> 00:19:18.640 +I use org-super-agenda, so + +00:19:18.640 --> 00:19:22.000 +what happens is that my active + +00:19:22.000 --> 00:19:26.960 +timestamps are only in my Gmail +Org file. + +00:19:26.960 --> 00:19:29.200 +If you use org-gcal, you have to + +00:19:29.200 --> 00:19:32.559 +specify a certain Org file. When it + +00:19:32.559 --> 00:19:34.320 +imports them, it imports them as + +00:19:34.320 --> 00:19:38.200 +active timestamps. I make sure + +00:19:38.200 --> 00:19:40.480 +whenever I create a TODO or even a +research task + +00:19:40.480 --> 00:19:42.480 +that it doesn't have a timestamp on it, + +00:19:42.480 --> 00:19:45.039 +because what I want to do is go back + +00:19:45.039 --> 00:19:48.480 +and then move around these tasks + +00:19:48.480 --> 00:19:50.160 +according to my either weekly + +00:19:50.160 --> 00:19:51.919 +schedule, or monthly, or however long you + +00:19:51.919 --> 00:19:52.960 +want to do it. + +00:19:52.960 --> 00:19:56.480 +So yeah, only active timestamps or + +00:19:56.480 --> 00:19:59.679 +deadline um appear in your time grid. + +00:19:59.679 --> 00:20:03.280 +So that could work. (Leo: That's very good. + +00:20:03.280 --> 00:20:05.440 +Just to interject for a second + +00:20:05.440 --> 00:20:06.320 +about this, + +00:20:06.320 --> 00:20:07.840 +you know with org-roam right now, we're + +00:20:07.840 --> 00:20:10.720 +mostly focused on optimization, + +00:20:10.720 --> 00:20:13.039 +but we're hoping to move on to UX very + +00:20:13.039 --> 00:20:14.720 +soon. So all those matters about + +00:20:14.720 --> 00:20:16.720 +having TODOs in your files, it + +00:20:16.720 --> 00:20:18.159 +is something that we've been thinking + +00:20:18.159 --> 00:20:20.000 +about with Jethro Kuan, who is my main + +00:20:20.000 --> 00:20:23.280 +co-maintainer for org-roam. We'll be +working on this in + +00:20:23.280 --> 00:20:24.480 +the coming months, so don't worry too + +00:20:24.480 --> 00:20:26.080 +much about it and stay tuned.) + +00:20:26.080 --> 00:20:29.760 +Noorah: Yeah. So I've got the ebib + +00:20:29.760 --> 00:20:33.200 +and what else... What subjects... I think... + +00:20:33.200 --> 00:20:34.080 +Okay! + +00:20:34.080 --> 00:20:35.919 +What is this question? "Have you seen the + +00:20:35.919 --> 00:20:37.120 +project Papis?" + +00:20:37.120 --> 00:20:40.400 +I'm not sure what... oh it's a Zotero + +00:20:40.400 --> 00:20:41.280 +alternative. Okay. + +00:20:41.280 --> 00:20:43.840 +I'll look into it. Thank you. + +00:20:43.840 --> 00:20:45.919 +(Leo: I don't know about it either, so + +00:20:45.919 --> 00:20:49.600 +please look into it and let me know.) + +00:20:49.600 --> 00:20:53.200 +Have we covered all the questions? + +00:20:53.200 --> 00:20:55.679 +(Leo: I believe we have. We have about + +00:20:55.679 --> 00:20:56.880 +two-minute leeway + +00:20:56.880 --> 00:20:58.880 +for me to move into the next talk, so + +00:20:58.880 --> 00:21:00.240 +we're right on time.) + +00:21:00.240 --> 00:21:01.760 +All right. Thank you so much. Really + +00:21:01.760 --> 00:21:04.159 +appreciate it. Good luck everyone! + +00:21:04.159 --> 00:21:05.440 +(Leo: well thank you, and thank you so much for + +00:21:05.440 --> 00:21:07.600 +coming, and allowing me not to + +00:21:07.600 --> 00:21:08.400 +be the only one + +00:21:08.400 --> 00:21:11.440 +talking about org-roam today.) Noorah: Sounds good. + +00:21:11.440 --> 00:21:14.559 +All right. (Amin: Thank you both very much.) diff --git a/2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt b/2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt new file mode 100644 index 00000000..4c840ad7 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt @@ -0,0 +1,1640 @@ +WEBVTT + +00:00:00.000 --> 00:00:02.399 +Leo Vivier: [About the previous +presentation:] At the end... We are +right on time, so I'm + +00:00:02.399 --> 00:00:04.319 +sorry if you have a lot of questions +before. + +00:00:04.319 --> 00:00:06.960 +You had so many questions and I + +00:00:06.960 --> 00:00:08.375 +couldn't answer all of them + +00:00:08.375 --> 00:00:10.080 +I'm really happy about it but I'm also + +00:00:10.080 --> 00:00:12.719 +really sad that I don't have enough time +to do so. + +00:00:12.719 --> 00:00:15.040 +I'm going to try to do a better job this + +00:00:15.040 --> 00:00:17.119 +time of leaving you a little more time + +00:00:17.119 --> 00:00:20.240 +for the questions. So, just before, + +00:00:20.240 --> 00:00:22.960 +a little addendum because I did screw up + +00:00:22.960 --> 00:00:24.400 +in the previous presentation... + +00:00:24.400 --> 00:00:27.439 +You remember I tried to rename the file + +00:00:27.439 --> 00:00:28.800 +and it didn't work? + +00:00:28.800 --> 00:00:32.559 +well it turns out I had two files named +"baz," so + +00:00:32.559 --> 00:00:36.000 +my software works great, thank you very +much. + +00:00:36.000 --> 00:00:38.800 +[Org Roam Technical Presentation]: All +right. So now what I'm going to do + +00:00:38.800 --> 00:00:40.239 +during this presentation + +00:00:40.239 --> 00:00:43.040 +is that I'm going to... Oops, I didn't start + +00:00:43.040 --> 00:00:44.399 +my timer. Just give me + +00:00:44.399 --> 00:00:47.520 +a little second, and let's subtract + +00:00:47.520 --> 00:00:50.141 +one minute. Okay. Good. + +00:00:50.141 --> 00:00:52.239 +So, what I'm going to do right now... It's a + +00:00:52.239 --> 00:00:54.079 +little different from the previous + +00:00:54.079 --> 00:00:56.879 +talk I gave you, and different even + +00:00:56.879 --> 00:00:58.239 +from what Noorah gave you. + +00:00:58.239 --> 00:01:00.480 +There's scaling the mountain as + +00:01:00.480 --> 00:01:01.941 +far as difficulty is concerned. + +00:01:01.941 --> 00:01:04.879 +On this one, I will be telling you +about the + +00:01:04.879 --> 00:01:06.799 +technical aspects of org-roam, + +00:01:06.799 --> 00:01:09.360 +because I've been telling you + +00:01:09.360 --> 00:01:11.119 +about the general philosophy + +00:01:11.119 --> 00:01:13.119 +of the notes and the general philosophy + +00:01:13.119 --> 00:01:14.560 +of organization, + +00:01:14.560 --> 00:01:16.159 +but right now, I really want to get into + +00:01:16.159 --> 00:01:18.479 +the nitty gritty about org-roam. + +00:01:18.479 --> 00:01:22.640 +So if we go in the git repository, + +00:01:22.640 --> 00:01:25.759 +this at the very core is org-roam. + +00:01:25.759 --> 00:01:28.960 +For some of you who have no experience +whatsoever + +00:01:28.960 --> 00:01:31.280 +developing stuff or programming or + +00:01:31.280 --> 00:01:32.880 +anything along those lines, + +00:01:32.880 --> 00:01:36.720 +this is how all the development +around the world + +00:01:36.720 --> 00:01:40.000 +is working. You have a repository, a + +00:01:40.000 --> 00:01:42.159 +git repository, where you have all the + +00:01:42.159 --> 00:01:44.399 +files, all the libraries you're using, + +00:01:44.399 --> 00:01:46.399 +all the programs, all the commands. + +00:01:46.399 --> 00:01:48.720 +Everything is inside your files. + +00:01:48.720 --> 00:01:52.240 +And in a way, this is the org-roam project. + +00:01:52.240 --> 00:01:53.741 +You can see that we have many files. + +00:01:53.741 --> 00:01:55.600 +We have org-roam-buffer, -capture, -compat, + +00:01:55.600 --> 00:01:58.441 +-completion, -dailies, etc. etc. + +00:01:58.441 --> 00:02:02.000 +So, before we dive a little deeper, +I just + +00:02:02.000 --> 00:02:04.640 +want to give you a lay of the land, +so to speak, + +00:02:04.640 --> 00:02:08.160 +to know where we're heading. + +00:02:08.160 --> 00:02:11.680 +Org-roam is built on top of Org Mode, + +00:02:11.680 --> 00:02:15.599 +and Org Mode gives us plenty of tools + +00:02:15.599 --> 00:02:17.408 +to play around with the files. + +00:02:17.408 --> 00:02:18.308 +I'm moving the glass. + +00:02:18.308 --> 00:02:20.080 +I'm starting to move my hands a little + +00:02:20.080 --> 00:02:21.360 +bit. You know, when I get excited about + +00:02:21.360 --> 00:02:22.959 +something, I move my hand, + +00:02:22.959 --> 00:02:26.640 +and then that stuff happens. So + +00:02:26.640 --> 00:02:29.360 +in org-roam, we have Org Mode and + +00:02:29.360 --> 00:02:31.360 +Org Roam gives us plenty of tools which + +00:02:31.360 --> 00:02:33.360 +are incredibly useful + +00:02:33.360 --> 00:02:36.560 +for writing stuff. So you know we already + +00:02:36.560 --> 00:02:37.440 +have the links, + +00:02:37.440 --> 00:02:39.440 +we already have the hierarchy which is + +00:02:39.440 --> 00:02:43.360 +given by having trees within trees +within trees. We have + +00:02:43.760 --> 00:02:45.741 +quote blocks. We have babel blocks. + +00:02:45.741 --> 00:02:48.000 +We have so much stuff. We have an +arsenal of + +00:02:48.000 --> 00:02:49.680 +tools that have been developed + +00:02:49.680 --> 00:02:53.519 +for the last 15 years. + +00:02:53.519 --> 00:02:56.640 +When you think about it, org-roam just + +00:02:56.640 --> 00:02:59.760 +wants to create backlinks. It sounds + +00:02:59.760 --> 00:03:01.360 +something very simple, but the problem is + +00:03:01.360 --> 00:03:05.519 +that we need to play nicely with all +of those + +00:03:05.519 --> 00:03:09.360 +intricate pieces. The fact is, it +takes quite a + +00:03:09.360 --> 00:03:10.879 +lot of expertise to be able to do so + +00:03:10.879 --> 00:03:14.400 +because if... Right now we are in the brain +of org-roam, + +00:03:15.200 --> 00:03:18.959 +but if I show you the brain of Org Mode... + +00:03:18.959 --> 00:03:20.608 +So this is the brain of Org Mode. + +00:03:20.608 --> 00:03:23.280 +It looks very simple like this because I + +00:03:23.280 --> 00:03:25.519 +haven't entered the lisp/ folder. + +00:03:25.519 --> 00:03:28.000 +I'm just going to enter it. I'm going + +00:03:28.000 --> 00:03:32.000 +to zoom out a little bit. Don't worry +if you + +00:03:32.000 --> 00:03:32.959 +don't see everything. + +00:03:32.959 --> 00:03:35.519 +but I just want you to get the + +00:03:35.519 --> 00:03:37.519 +sheer feel of magnitude + +00:03:37.519 --> 00:03:41.280 +that is Org Mode. So right now, we are + +00:03:41.280 --> 00:03:42.640 +in a very small size... What I'm going +to do, + +00:03:42.640 --> 00:03:43.760 +I'm going to skip + +00:03:43.760 --> 00:03:47.519 +one page, one, two, + +00:03:47.519 --> 00:03:51.040 +three, we have... Let's just check how many + +00:03:51.040 --> 00:03:52.319 +lines we have. + +00:03:52.319 --> 00:03:54.640 +Okay. Let me just revert to a fairly + +00:03:54.640 --> 00:03:56.480 +readable sight. + +00:03:56.480 --> 00:03:58.560 +At the bottom, you can see that we have... + +00:03:58.560 --> 00:03:59.599 +Oh it's not showing because it's a + +00:03:59.599 --> 00:04:00.959 +little small. Okay, I'm just going to + +00:04:00.959 --> 00:04:03.840 +resize the window a little bit. + +00:04:03.840 --> 00:04:06.959 +It's not showing up. Give me a second. I + +00:04:06.959 --> 00:04:08.720 +can't see how many lines I have. Okay. So + +00:04:08.720 --> 00:04:10.159 +let's do it the better way. + +00:04:10.159 --> 00:04:11.840 +I'm going to go back at the beginning of + +00:04:11.840 --> 00:04:14.000 +the buffer and we're going to count + +00:04:14.000 --> 00:04:16.160 +how many lines we have. So the bottom, in + +00:04:16.160 --> 00:04:18.880 +the mini buffer (and the mini buffer is +this area), + +00:04:18.880 --> 00:04:22.320 +we have 377 lines, + +00:04:22.320 --> 00:04:25.919 +which means 377 + +00:04:25.919 --> 00:04:29.759 +libraries within Org Mode. And mind you, + +00:04:29.759 --> 00:04:31.520 +that's not counting all the modules that + +00:04:31.520 --> 00:04:32.960 +we have on the side, which + +00:04:32.960 --> 00:04:36.240 +come on top of Org Mode. Now when you + +00:04:36.240 --> 00:04:37.360 +try to think + +00:04:37.360 --> 00:04:41.408 +about something so elemental as links, + +00:04:41.408 --> 00:04:45.520 +you have to think about how to play well + +00:04:45.520 --> 00:04:48.560 +with every single one of these modules. + +00:04:48.560 --> 00:04:48.875 +Now, obviously not the 370. + +00:04:48.875 --> 00:04:56.080 +Sometimes, you know one module it's not +going to do anything. + +00:04:56.080 --> 00:04:57.680 +I'm not sure ob-calc could be doing + +00:04:57.680 --> 00:04:58.639 +anything with it. + +00:04:58.639 --> 00:05:00.080 +But it's something that we have to keep + +00:05:00.080 --> 00:05:03.039 +in mind. + +00:05:03.039 --> 00:05:04.720 +So, really early on, when we started + +00:05:04.720 --> 00:05:07.520 +developing org-roam with Jethro Kuan, my + +00:05:07.520 --> 00:05:10.639 +co-maintainer, you know we had this +idea that + +00:05:10.639 --> 00:05:14.639 +we wanted to develop something that +was optimized, + +00:05:14.639 --> 00:05:18.240 +something that would scale very + +00:05:18.240 --> 00:05:20.160 +nicely, whether or not you had... + +00:05:20.160 --> 00:05:21.600 +Something that would work as + +00:05:21.600 --> 00:05:24.560 +fast if you had 10 files, + +00:05:24.560 --> 00:05:27.680 +or if you had 100 files, or if you had + +00:05:27.680 --> 00:05:30.880 +10,000 files and maybe more. So the + +00:05:30.880 --> 00:05:32.080 +problem when you do this-- + +00:05:32.080 --> 00:05:34.400 +and I'm doing some callbacks to the talk + +00:05:34.400 --> 00:05:36.320 +I gave you earlier today about + +00:05:36.320 --> 00:05:41.280 +a few big files versus many-- + +00:05:41.280 --> 00:05:44.800 +I got confused--few big files versus many + +00:05:44.800 --> 00:05:45.919 +small files, + +00:05:45.919 --> 00:05:49.280 +the problem with this is that we need to + +00:05:49.280 --> 00:05:51.600 +think about optimization from the get go. + +00:05:51.600 --> 00:05:53.680 +So one of the decisions we took when + +00:05:53.680 --> 00:05:54.800 +we got started + +00:05:54.800 --> 00:05:59.199 +with org-roam is that if I go in my + +00:05:59.199 --> 00:06:02.479 +test repository--so that's the one in + +00:06:02.479 --> 00:06:04.240 +which we were right before-- + +00:06:04.240 --> 00:06:08.000 +we have a file which is called org-roam.db. + +00:06:08.000 --> 00:06:11.600 +Now if I open it, it's not... It's a + +00:06:11.600 --> 00:06:14.160 +little garbage because it's a binary. + +00:06:14.160 --> 00:06:15.120 +But what we have + +00:06:15.120 --> 00:06:18.560 +is a database with which we communicate + +00:06:18.560 --> 00:06:21.919 +via... Sorry, it's an SQL database. + +00:06:21.919 --> 00:06:25.120 +And what this allows us to do + +00:06:25.120 --> 00:06:28.479 +is we store all the information we need + +00:06:28.479 --> 00:06:31.919 +inside this SQL database which allows us + +00:06:31.919 --> 00:06:34.720 +to speed up a lot of the operations that + +00:06:34.720 --> 00:06:38.479 +are necessary for the functioning of org-roam. + +00:06:38.479 --> 00:06:40.240 +So, for instance, if I go back to the + +00:06:40.240 --> 00:06:41.759 +index file that I had before... + +00:06:41.759 --> 00:06:43.341 +Let's just go back to "foo," actually. + +00:06:43.341 --> 00:06:45.680 +This way you'll see a little more on +the side. + +00:06:45.680 --> 00:06:47.919 +So you see that on the side we have + +00:06:47.919 --> 00:06:50.319 +two links. I'm not going to +click on them; + +00:06:50.319 --> 00:06:51.508 +otherwise, I'm going to open them. + +00:06:51.508 --> 00:06:53.199 +But we have two links. + +00:06:53.199 --> 00:06:56.319 +Now there are many implementations of + +00:06:56.319 --> 00:06:58.975 +the Zettelkasten method inside Emacs + +00:06:58.975 --> 00:07:00.541 +and with Org Mode. + +00:07:00.541 --> 00:07:02.400 +But what we've decided to do + +00:07:02.400 --> 00:07:04.639 +is that every time you have a link--so if + +00:07:04.639 --> 00:07:08.479 +we go to the index again here at point +we have + +00:07:08.479 --> 00:07:09.908 +the link "foo." Every time we create a +link, + +00:07:09.908 --> 00:07:14.160 +we update our database + +00:07:14.160 --> 00:07:17.919 +to say, okay, so we have a link in the +file + +00:07:17.919 --> 00:07:21.080 +"index" which is leading to the file + +00:07:21.080 --> 00:07:24.319 +"foo.org" and it is situated + +00:07:24.319 --> 00:07:27.840 +under the heading "A heading." + +00:07:27.840 --> 00:07:29.840 +If you check the side buffer, you see + +00:07:29.840 --> 00:07:31.440 +that all this information + +00:07:31.440 --> 00:07:33.120 +which I just highlighted to you + +00:07:33.120 --> 00:07:42.639 +is present right here. + +00:07:42.639 --> 00:07:45.599 +Oh, sorry I forgot this. Thank you. + +00:07:46.400 --> 00:07:50.879 +So let's see. Log. Okay. + +00:07:50.879 --> 00:07:53.039 +I'm going to split like this. + +00:07:53.039 --> 00:07:54.960 +I'm going to go back there. + +00:07:54.960 --> 00:07:56.960 +The problem is that I can't show my + +00:07:56.960 --> 00:07:58.720 +keystrokes at the same time as + +00:07:58.720 --> 00:08:02.080 +I'm showing the side buffer, so I'll + +00:08:02.080 --> 00:08:03.599 +keep it right now for your own + +00:08:03.599 --> 00:08:07.039 +discretion. Anyway, getting back to the +talk. + +00:08:07.039 --> 00:08:10.160 +So the thing is we have this + +00:08:10.160 --> 00:08:13.520 +SQL database. The goal is to keep it +optimized. + +00:08:13.520 --> 00:08:16.400 +Now, why is it better optimized than just + +00:08:16.400 --> 00:08:20.960 +using default Org Mode? + +00:08:20.960 --> 00:08:23.520 +So in my talk about many big files + +00:08:23.520 --> 00:08:26.879 +versus a few--I keep getting.-- +you got + +00:08:26.879 --> 00:08:28.080 +what I was saying; I'm not going to + +00:08:28.080 --> 00:08:29.120 +repeat it-- + +00:08:29.120 --> 00:08:32.240 +By the way, it is 10 to 10:00. + +00:08:32.240 --> 00:08:35.200 +I'm starting really to be tired now. + +00:08:35.200 --> 00:08:36.399 +Moving on to... + +00:08:36.399 --> 00:08:39.279 +What did I want to show you? So it was + +00:08:39.279 --> 00:08:40.800 +almost... Yes, org-elements. + +00:08:40.800 --> 00:08:44.959 +So what I'm going to do... I'm going to... + +00:08:44.959 --> 00:08:48.399 +I believe it's org-element-parse-buffer. + +00:08:48.399 --> 00:08:51.920 +So I was telling you about org-elements +before. + +00:08:51.920 --> 00:08:53.600 +And the main command--sorry, the main + +00:08:53.600 --> 00:08:55.760 +function that is used by org-element + +00:08:55.760 --> 00:08:58.560 +is -parse-buffer. What it does (and you can + +00:08:58.560 --> 00:08:59.760 +see the docstring) is that it + +00:08:59.760 --> 00:09:01.040 +recursively parsed + +00:09:01.040 --> 00:09:03.279 +the buffer and returned structure, + +00:09:03.279 --> 00:09:04.959 +structure being all the information that + +00:09:04.959 --> 00:09:06.320 +we have in this buffer. + +00:09:06.320 --> 00:09:07.680 +So just to show you a little more, we're + +00:09:07.680 --> 00:09:09.600 +going to move into a scratch buffer, + +00:09:09.600 --> 00:09:10.880 +and what we're going to do is that we're + +00:09:10.880 --> 00:09:12.800 +going to write this command + +00:09:12.800 --> 00:09:16.320 +org-element-parse-buffer, and we're going to check the + +00:09:16.320 --> 00:09:17.760 +output of this command. + +00:09:17.760 --> 00:09:19.600 +Sorry, not this one. We're going to go + +00:09:19.600 --> 00:09:22.000 +in the index. So in the index file, you have + +00:09:22.000 --> 00:09:23.680 +a title, you have a heading, you have a + +00:09:23.680 --> 00:09:25.120 +link, etc. etc. + +00:09:25.120 --> 00:09:26.880 +So what I'm going to do, I'm going to + +00:09:26.880 --> 00:09:28.560 +evaluate this text. + +00:09:28.560 --> 00:09:30.800 +Now at the bottom in the mini buffer, + +00:09:32.560 --> 00:09:36.160 +you see an AST, an abstract-- + +00:09:36.160 --> 00:09:37.600 +obviously don't remember what the S + +00:09:37.600 --> 00:09:39.839 +stands for... Semantic?-- + +00:09:39.839 --> 00:09:42.720 +Huh. Interesting. Anyway. A representation + +00:09:42.720 --> 00:09:43.519 +of the data + +00:09:43.519 --> 00:09:45.279 +in a way that is exploitable by a + +00:09:45.279 --> 00:09:47.600 +machine. Now what I'm going to do-- + +00:09:47.600 --> 00:09:49.839 +syntax, thank you--so what I'm going to do, + +00:09:49.839 --> 00:09:52.000 +I'm going to paste it inside the buffer + +00:09:52.000 --> 00:09:54.480 +in a way that is humanly readable. + +00:09:54.480 --> 00:09:56.399 +You can see that we have plenty of + +00:09:56.399 --> 00:09:58.800 +information. We have a section which + +00:09:58.800 --> 00:10:05.040 +starts at the char 1, which ends at the +character 45. + +00:10:05.040 --> 00:10:07.040 +We have the content... so "Emacs Scratch"-- + +00:10:07.040 --> 00:10:10.240 +oh actually, no, never mind, I did +something wrong, I ran + +00:10:10.240 --> 00:10:11.279 +it in the wrong buffer. + +00:10:11.279 --> 00:10:13.040 +So actually what I'm going to do, we're + +00:10:13.040 --> 00:10:14.399 +going to run this command + +00:10:14.399 --> 00:10:16.241 +with the selected window. + +00:10:16.241 --> 00:10:21.120 +Next window. Okay. That's a bit of live + +00:10:21.120 --> 00:10:23.760 +Elisp writing for you right now. + +00:10:23.760 --> 00:10:25.541 +Now if I evaluate this + +00:10:25.541 --> 00:10:28.480 +and paste the content of the buffer, + +00:10:28.480 --> 00:10:30.208 +it is doing its bidding. + +00:10:30.208 --> 00:10:32.399 +So now what we have... + +00:10:32.399 --> 00:10:34.959 +We have a section. We have the keyword + +00:10:34.959 --> 00:10:38.160 +TITLE which you see right here. You have +the :value. + +00:10:38.160 --> 00:10:39.920 +If we scroll down a little bit, we have a + +00:10:39.920 --> 00:10:42.480 +heading which is right here. We have the +contents, + +00:10:42.480 --> 00:10:44.800 +which should be... Yes, the content is not + +00:10:44.800 --> 00:10:46.320 +listed exactly here, but you have a + +00:10:46.320 --> 00:10:48.079 +paragraph, which is this, + +00:10:48.079 --> 00:10:50.308 +and then you have a link, etc. etc. + +00:10:50.308 --> 00:10:54.640 +It is all parentheses if you're not +used to Elisp. + +00:10:54.640 --> 00:10:56.320 +Like, right now, I've selected only the + +00:10:56.320 --> 00:10:58.640 +content of the parenthesis link. + +00:10:58.640 --> 00:11:00.399 +I can move like this etc. etc. + +00:11:00.399 --> 00:11:01.680 +I'm not... It's not an Elisp + +00:11:01.680 --> 00:11:05.279 +lesson that I'm doing right now, but +basically, + +00:11:05.279 --> 00:11:08.399 +if we were to use the default tooling of + +00:11:08.399 --> 00:11:12.480 +org-roam--Org Mode, sorry, I keep +getting too confused, sorry for that-- + +00:11:12.480 --> 00:11:14.240 +would be extremely slow to do what + +00:11:14.240 --> 00:11:16.399 +we're doing. Some people + +00:11:16.399 --> 00:11:19.760 +who are doing some implementations of the + +00:11:19.760 --> 00:11:22.240 +Zettelkasten method inside Emacs have + +00:11:22.240 --> 00:11:26.480 +opted for this method, but the problem +is that + +00:11:26.480 --> 00:11:28.975 +we think that it scales poorly. + +00:11:28.975 --> 00:11:33.920 +Now some other people have decided to +not do with a database, + +00:11:33.920 --> 00:11:35.600 +and what they do is that they use a tool + +00:11:35.600 --> 00:11:37.200 +which is called ripgrep. + +00:11:37.200 --> 00:11:38.800 +You might know grep, which is a tool that + +00:11:38.800 --> 00:11:41.279 +allows you to search + +00:11:41.279 --> 00:11:43.440 +a file, the content of a file, for a line. + +00:11:43.440 --> 00:11:46.560 +So for instance, if we open vterm here, + +00:11:46.560 --> 00:11:48.041 +let's see... I've opened the term. + +00:11:48.041 --> 00:11:51.308 +I am in this repository. + +00:11:51.308 --> 00:11:54.399 +What I'm going to do is that I'm +going to + +00:11:54.399 --> 00:11:58.000 +load the content of the file. + +00:11:58.000 --> 00:12:02.480 +How am I going to do this? I need to +move to bash. + +00:12:02.480 --> 00:12:06.160 +Let's do grep + +00:12:06.160 --> 00:12:08.000 +for the line... Which links did we + +00:12:08.000 --> 00:12:09.519 +have... grep foo + +00:12:09.519 --> 00:12:11.600 +inside the file. Is it three? I can't + +00:12:11.600 --> 00:12:13.760 +remember. Okay. Let's do this. + +00:12:13.760 --> 00:12:18.079 +Am I working? No. + +00:12:18.079 --> 00:12:21.279 +Let's go for four? Why, is it eight? + +00:12:21.279 --> 00:12:22.800 +Oh, you know what, I'm just + +00:12:22.800 --> 00:12:24.320 +going to copy the name. + +00:12:24.320 --> 00:12:28.240 +There we go. + +00:12:28.240 --> 00:12:33.680 +Problem with live presentation, always. + +00:12:33.680 --> 00:12:34.800 +You know what, I'm struggling, so I'm + +00:12:34.800 --> 00:12:36.720 +going to drop this point. Anyway, + +00:12:36.720 --> 00:12:38.560 +so grep is a simple tool that allows you + +00:12:38.560 --> 00:12:40.000 +to search the content of a file, but + +00:12:40.000 --> 00:12:42.480 +ripgrep is a solution that is written + +00:12:42.480 --> 00:12:44.160 +in Rust and which is supposed to be-- + +00:12:44.160 --> 00:12:48.880 +well, not supposed--which is far more +capable. + +00:12:48.880 --> 00:12:50.639 +Now I'd like to talk to you about the future + +00:12:50.639 --> 00:12:52.320 +of org-roam. Right now, I've told you about + +00:12:52.320 --> 00:12:54.720 +the general concept, which is about using + +00:12:54.720 --> 00:12:58.399 +this SQL database, and about + +00:12:58.399 --> 00:13:01.519 +playing nicely with Org Mode. + +00:13:01.519 --> 00:13:03.279 +We think that there's something great + +00:13:03.279 --> 00:13:05.200 +that we can do about org-roam. + +00:13:05.200 --> 00:13:08.320 +Now I've been talking with a lot of + +00:13:08.320 --> 00:13:10.880 +people who are behind Org Mode and you +know, + +00:13:10.880 --> 00:13:14.000 +they've told us, "Do you think that + +00:13:14.000 --> 00:13:16.880 +org-roam could have something to bring to + +00:13:16.880 --> 00:13:18.320 +Org Mode? Let's say, + +00:13:18.320 --> 00:13:20.160 +backlinks? Is there something that we + +00:13:20.160 --> 00:13:21.600 +could be doing to + +00:13:21.600 --> 00:13:25.600 +import backlinks into Org Mode?" + +00:13:25.600 --> 00:13:29.200 +We thought about it with Jethro and the +problem is + +00:13:29.200 --> 00:13:30.800 +we've always tried to have an + +00:13:30.800 --> 00:13:32.720 +experimental ground, + +00:13:32.720 --> 00:13:36.320 +a very isolated portion of your +system + +00:13:36.320 --> 00:13:37.920 +where we could track backlinks and + +00:13:37.920 --> 00:13:40.320 +that's why we use + +00:13:40.320 --> 00:13:42.320 +a slipbox directory, so that we only + +00:13:42.320 --> 00:13:44.880 +track backlinks in one specific place. + +00:13:44.880 --> 00:13:47.040 +But now, because there seems to be so + +00:13:47.040 --> 00:13:48.639 +much interest about the method and we + +00:13:48.639 --> 00:13:50.079 +have so much backing + +00:13:50.079 --> 00:13:52.480 +on Github--we have like + +00:13:53.120 --> 00:13:56.399 +2,600 stars, which is mind-boggling to us--- + +00:13:56.399 --> 00:13:59.760 +because we have so much success... + +00:13:59.760 --> 00:14:02.399 +We have plenty of ideas about the future. + +00:14:02.399 --> 00:14:06.000 +One of the key parts of development +being the writing + +00:14:06.000 --> 00:14:08.480 +of an external parser for org-roam. + +00:14:08.480 --> 00:14:11.839 +So I've been telling you about org-element. +org-element runs + +00:14:11.839 --> 00:14:15.279 +inside Emacs. But what if + +00:14:15.279 --> 00:14:19.519 +we wrote a background process + +00:14:19.519 --> 00:14:23.600 +that could read a file, an Org Mode file, + +00:14:23.600 --> 00:14:25.760 +extract the same type of data that you + +00:14:25.760 --> 00:14:27.440 +see on your screen right now, + +00:14:27.440 --> 00:14:30.959 +so that we could use to update a +database + +00:14:30.959 --> 00:14:33.279 +that we could use to compute the + +00:14:33.279 --> 00:14:34.959 +links, so that we could use it + +00:14:34.959 --> 00:14:37.360 +to show org-roam server all the + +00:14:37.360 --> 00:14:39.519 +connections between your nodes? + +00:14:39.519 --> 00:14:41.360 +Now there is a path of improvement here + +00:14:41.360 --> 00:14:44.320 +that is extremely important to us. + +00:14:44.320 --> 00:14:47.360 +But you know, that's the technical aspect. + +00:14:47.360 --> 00:14:48.639 +I'm out of time. I'm just going to + +00:14:48.639 --> 00:14:51.360 +take one more minute to finish on this +point. + +00:14:51.360 --> 00:14:57.680 +We believe that org-roam has the +potential to be a + +00:14:57.680 --> 00:14:58.399 +think tank, + +00:14:58.399 --> 00:15:00.639 +in a way, for Org Mode and the way we + +00:15:00.639 --> 00:15:01.920 +think about + +00:15:01.920 --> 00:15:04.079 +note-taking in general. I've stressed a + +00:15:04.079 --> 00:15:06.079 +great deal in my first presentation-- + +00:15:06.079 --> 00:15:10.240 +sorry, the one I did before Noorah--that + +00:15:10.240 --> 00:15:12.480 +org-roam is really great as a way to + +00:15:12.480 --> 00:15:14.639 +think organically about knowledge. + +00:15:14.639 --> 00:15:17.600 +Honestly, we want to put the + +00:15:17.600 --> 00:15:19.279 +theory into practice with org-roam. + +00:15:19.279 --> 00:15:22.079 +We are holding something which has the + +00:15:22.079 --> 00:15:23.440 +potential to be + +00:15:23.440 --> 00:15:25.120 +a great factor of innovation for the + +00:15:25.120 --> 00:15:27.279 +future, whether it be Org Mode + +00:15:27.279 --> 00:15:29.600 +or even for software in general. You know, + +00:15:29.600 --> 00:15:31.440 +the way to think about... + +00:15:31.440 --> 00:15:34.880 +build nodes of knowledge in a way, + +00:15:34.880 --> 00:15:37.440 +and the way to represent all those ids + +00:15:37.440 --> 00:15:38.240 +with the graph... + +00:15:38.240 --> 00:15:41.600 +the way to basically have a note-taking +system that + +00:15:41.600 --> 00:15:43.360 +corresponds to the research that + +00:15:43.360 --> 00:15:45.839 +corresponds to the way you think. + +00:15:45.839 --> 00:15:51.839 +I believe we are really excited about +this and if you + +00:15:51.839 --> 00:15:55.360 +want to keep track of the development of +org-roam + +00:15:55.360 --> 00:15:57.600 +on my YouTube channel (which is already + +00:15:57.600 --> 00:15:59.279 +linked a little earlier + +00:15:59.279 --> 00:16:02.639 +inside the pad), + +00:16:02.639 --> 00:16:04.240 +I do have a Youtube channel where I try + +00:16:04.240 --> 00:16:06.079 +to present novelties + +00:16:06.079 --> 00:16:09.519 +or the new stuff inside org-roam. + +00:16:09.519 --> 00:16:11.519 +I'll also be recording videos about the + +00:16:11.519 --> 00:16:13.360 +technical aspects, about the direction + +00:16:13.360 --> 00:16:15.519 +that we're taking with org-roam. + +00:16:15.519 --> 00:16:18.000 +If you want to talk with us we are + +00:16:18.000 --> 00:16:22.160 +always available either on IRC +channel #org-roam + +00:16:22.160 --> 00:16:25.279 +(I believe there's a dash between org +and roam) but also + +00:16:25.279 --> 00:16:27.279 +on the Discourse. I'll be putting all + +00:16:27.279 --> 00:16:29.440 +the links inside the conversation. + +00:16:29.440 --> 00:16:31.199 +And that's me done. So, thank you for + +00:16:31.199 --> 00:16:32.880 +listening. Now I'll be taking + +00:16:32.880 --> 00:16:34.560 +three minutes of questions so as to be + +00:16:34.560 --> 00:16:37.360 +right on time. + +00:16:37.360 --> 00:16:39.920 +(Amin: Many thanks for your awesome talk, Leo.) + +00:16:39.920 --> 00:16:41.120 +Leo: Thank you. + +00:16:41.120 --> 00:16:43.040 +I'm just refreshing the page, and I'm + +00:16:43.040 --> 00:16:44.959 +going to scroll down to my + +00:16:44.959 --> 00:16:49.600 +talk if I can find the right section. + +00:16:49.600 --> 00:16:53.120 +Let me just scroll a little bit. + +00:16:53.120 --> 00:16:55.600 +Reproducible Emacs. No, I think it's + +00:16:55.600 --> 00:16:57.120 +slower... + +00:16:57.120 --> 00:16:59.279 +We have so many questions, so at the + +00:16:59.279 --> 00:17:00.639 +same time I'm pissed because I can't + +00:17:00.639 --> 00:17:01.120 +find it, + +00:17:01.120 --> 00:17:02.639 +but I'm really, really impressed by the + +00:17:02.639 --> 00:17:05.360 +number of questions that we had. (Amin: Oh yeah. + +00:17:05.360 --> 00:17:07.760 +Yours is about I think about line 600 + +00:17:07.760 --> 00:17:08.260 +or so.) + +00:17:09.919 --> 00:17:13.199 +Leo: Yes, got it splendid. + +00:17:13.199 --> 00:17:16.400 +So, the questions. "So why not run a + +00:17:16.400 --> 00:17:18.160 +background Emacs for parsing instead of + +00:17:18.160 --> 00:17:19.919 +implementing a new parser?" + +00:17:19.919 --> 00:17:22.559 +I believe we've had this question. + +00:17:22.559 --> 00:17:24.480 +I was giving a similar talk + +00:17:24.480 --> 00:17:27.600 +earlier this week--and this week, + +00:17:27.600 --> 00:17:31.679 +I'm not French, this week, sorry--and + +00:17:31.679 --> 00:17:33.008 +someone asked me this question. + +00:17:33.008 --> 00:17:35.679 +The thing is running a background Emacs + +00:17:35.679 --> 00:17:38.320 +process... You know, it sounds great, + +00:17:38.320 --> 00:17:40.400 +but it's also very limited because all + +00:17:40.400 --> 00:17:41.760 +the problems we have + +00:17:41.760 --> 00:17:45.520 +about concurrency, about threads in Emacs... + +00:17:45.520 --> 00:17:48.160 +Well, yes, we can forward all our calls to + +00:17:48.160 --> 00:17:49.200 +background Emacs + +00:17:49.200 --> 00:17:52.240 +just like when you export a file + +00:17:52.240 --> 00:17:56.400 +with... Sorry, + +00:17:56.400 --> 00:17:57.840 +Amin, could you mute microphone when + +00:17:57.840 --> 00:17:58.799 +you're not speaking, it's a little hard for + +00:17:58.799 --> 00:18:01.520 +me to concentrate? + +00:18:01.520 --> 00:18:03.600 +That's fine. Don't worry. + +00:18:04.640 --> 00:18:06.960 +Where was I? I'm sorry. The + +00:18:06.960 --> 00:18:07.679 +question. Yes. + +00:18:07.679 --> 00:18:09.280 +So, basically, forwarding all the + +00:18:09.280 --> 00:18:11.840 +questions--sorry, all our queries to a + +00:18:11.840 --> 00:18:13.039 +background Emacs. + +00:18:13.039 --> 00:18:16.000 +That is what org export is doing. Like, + +00:18:16.000 --> 00:18:17.960 +you have the ability to + +00:18:17.960 --> 00:18:20.799 +asynchronously export LaTeX documents, + +00:18:20.799 --> 00:18:22.080 +ODT documents from + +00:18:22.080 --> 00:18:24.480 +Org Mode. It uses a very minimal + +00:18:24.480 --> 00:18:26.000 +version of Emacs to do that. But the + +00:18:26.000 --> 00:18:28.240 +problem is that we think that it's not + +00:18:28.240 --> 00:18:30.320 +going to scale as well as a true + +00:18:30.320 --> 00:18:33.039 +genuine background process. Since we + +00:18:33.039 --> 00:18:34.480 +have been talking a lot + +00:18:34.480 --> 00:18:36.000 +as far as the Org Mode development is + +00:18:36.000 --> 00:18:38.160 +concerned about, + +00:18:38.160 --> 00:18:40.640 +writing a proper parser, writing a proper + +00:18:40.640 --> 00:18:43.440 +documentation for the parsing of Org +Mode files and + +00:18:43.440 --> 00:18:46.000 +writing a proper document standard + +00:18:46.000 --> 00:18:48.400 +that says, okay, this is how the Org Mode + +00:18:48.400 --> 00:18:50.000 +format works, you know, to + +00:18:50.000 --> 00:18:52.000 +basically have a way to not fall into + +00:18:52.000 --> 00:18:55.120 +the traps of Markdown which has many + +00:18:55.120 --> 00:18:56.559 +many standards... + +00:18:56.559 --> 00:18:58.480 +We need to think about this and we + +00:18:58.480 --> 00:19:00.000 +believe that org-roam has + +00:19:00.000 --> 00:19:03.120 +the ability to think about these +questions. + +00:19:03.120 --> 00:19:04.640 +As a person, I'm also really interested + +00:19:04.640 --> 00:19:06.400 +about this. + +00:19:06.400 --> 00:19:07.840 +I can take the questions, Amin, so don't + +00:19:07.840 --> 00:19:10.160 +worry about feeding them to me. So how + +00:19:10.160 --> 00:19:11.760 +often does the + +00:19:11.760 --> 00:19:13.679 +DB index get updated in order to contain + +00:19:13.679 --> 00:19:15.175 +changes within the Org files? + +00:19:15.175 --> 00:19:17.360 +So we have two ways: either we + +00:19:17.360 --> 00:19:19.440 +update as soon as you save a file, + +00:19:19.440 --> 00:19:22.160 +or we have a timer which is an idle + +00:19:22.160 --> 00:19:23.600 +timer, which waits... Okay + +00:19:23.600 --> 00:19:25.600 +the user has not inputted + +00:19:25.600 --> 00:19:26.960 +anything in the last + +00:19:26.960 --> 00:19:29.360 +five seconds, so it's time to queue a + +00:19:29.360 --> 00:19:30.080 +database--parsing-- + +00:19:30.080 --> 00:19:33.039 +a rebuild of the data, not an + +00:19:33.039 --> 00:19:33.919 +incrementation + +00:19:33.919 --> 00:19:37.120 +of the database, I should say. + +00:19:37.120 --> 00:19:38.799 +"Did you ever think of..." I believe I + +00:19:38.799 --> 00:19:40.320 +have one more minute and then + +00:19:40.320 --> 00:19:42.240 +I'll hand it to the other folks. + +00:19:42.240 --> 00:19:43.440 +"Do you ever think of opening up or + +00:19:43.440 --> 00:19:45.440 +designing the SQL DB as a general Org + +00:19:45.440 --> 00:19:47.200 +speed up tool outside of org-roam so that + +00:19:47.200 --> 00:19:49.141 +other libraries that do execute + +00:19:49.141 --> 00:19:50.208 +complex queries are able to use it?" + +00:19:50.208 --> 00:19:53.341 +Well, a lot of people have been working +on this + +00:19:53.341 --> 00:19:54.640 +I believe alphapapa has been + +00:19:54.640 --> 00:19:56.480 +thinking quite a lot about this. + +00:19:56.480 --> 00:20:01.120 +org-ql is... The ql stands for +query language. + +00:20:01.120 --> 00:20:04.720 +I can't remember now what the backend is + +00:20:04.720 --> 00:20:08.080 +for org-ql, but the idea is + +00:20:08.080 --> 00:20:10.080 +relatively the same, you know. It's about + +00:20:10.080 --> 00:20:13.039 +finding ways to optimize the way we + +00:20:13.039 --> 00:20:14.880 +store the data about an Org Mode file + +00:20:14.880 --> 00:20:16.640 +and how we retrieve it, + +00:20:16.640 --> 00:20:20.400 +and SQL for us seems to seem to be a + +00:20:20.400 --> 00:20:22.159 +good idea. Now, obviously, + +00:20:22.159 --> 00:20:24.240 +maybe we could do something about + +00:20:24.240 --> 00:20:26.080 +Org Mode, but the problem is, I think, a + +00:20:26.080 --> 00:20:27.360 +background process + +00:20:27.360 --> 00:20:30.799 +is not necessarily in + +00:20:30.799 --> 00:20:32.960 +the core mentality of Org Mode. But it's + +00:20:32.960 --> 00:20:36.080 +definitely something that we +could suggest + +00:20:36.080 --> 00:20:37.679 +when we are a little more mature, +because, well, + +00:20:37.679 --> 00:20:40.960 +org-roam was started last February and so + +00:20:40.960 --> 00:20:43.008 +it's a fairly young project in a way. + +00:20:43.008 --> 00:20:45.840 +I see plenty more questions, but + +00:20:45.840 --> 00:20:48.400 +I'm out of time, folks, so I'm not sure. + +00:20:48.400 --> 00:20:50.559 +The other speaker is probably ready. + +00:20:50.559 --> 00:20:52.559 +So what I'll do is I'll probably try to + +00:20:52.559 --> 00:20:54.000 +answer your questions when I get the + +00:20:54.000 --> 00:20:55.360 +time inside the pad, + +00:20:55.360 --> 00:20:58.960 +but feel free to ping me on IRC + +00:20:58.960 --> 00:21:01.039 +or on the different channels we have + +00:21:01.039 --> 00:21:02.320 +for org-roam, and + +00:21:02.320 --> 00:21:04.000 +I'll answer them with as much + +00:21:04.000 --> 00:21:05.520 +energy as I can gather. + +00:21:05.520 --> 00:21:07.600 +All right, thank you so much. + +00:21:08.880 --> 00:21:10.808 +(Amin: Thank you again very much, Leo.) + +00:21:10.808 --> 00:21:14.000 +Leo: And that was me done for today. So +you'll see me at the end, but I'm + +00:21:14.000 --> 00:21:15.840 +officially done and I am free of + +00:21:15.840 --> 00:21:17.840 +thoughts. I can focus on + +00:21:17.840 --> 00:21:22.640 +sleeping, probably. (Amin: Awesome) + +00:21:22.640 --> 00:21:27.760 +Leo: See you guys later. Bye. diff --git a/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt b/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt new file mode 100644 index 00000000..f2db5398 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt @@ -0,0 +1,664 @@ +WEBVTT + +00:00:01.120 --> 00:00:03.120 +Hi, my name is Brett Gillio, + +00:00:03.120 --> 00:00:04.560 +and today I'll be sharing a project that + +00:00:04.560 --> 00:00:05.920 +several people and I have been working on + +00:00:05.920 --> 00:00:08.480 +for the past few months, called +org-webring. + +00:00:08.480 --> 00:00:10.559 +The essential idea behind org-webring + +00:00:10.559 --> 00:00:12.240 +is to take the power of creating a + +00:00:12.240 --> 00:00:13.679 +website with Org Mode + +00:00:13.679 --> 00:00:15.360 +and its built-in features to control + +00:00:15.360 --> 00:00:17.520 +HTML and XML output + +00:00:17.520 --> 00:00:19.119 +and utilize it to share blogs, git + +00:00:19.119 --> 00:00:22.640 +commits, or other rss or atom static +feed content + +00:00:22.640 --> 00:00:25.920 +to share directly with your audiences. + +00:00:25.920 --> 00:00:28.362 +My website is created entirely using + +00:00:28.362 --> 00:00:30.000 +Org Mode. I love the amount of + +00:00:30.000 --> 00:00:31.679 +flexibility it offers me while keeping + +00:00:31.679 --> 00:00:34.079 +everything quite simple. + +00:00:34.079 --> 00:00:35.920 +I am able to put information about + +00:00:35.920 --> 00:00:37.600 +myself, a blog, + +00:00:37.600 --> 00:00:40.079 +and my org-webring tool directly on on + +00:00:40.079 --> 00:00:42.879 +the home page using simple Org syntax. + +00:00:42.879 --> 00:00:44.640 +As you can see, I am currently displaying + +00:00:44.640 --> 00:00:46.239 +three posts on my website. + +00:00:46.239 --> 00:00:48.239 +The first is the Guix Day announcement, + +00:00:48.239 --> 00:00:49.840 +the second is a quarterly financial + +00:00:49.840 --> 00:00:51.039 +update from SourceHut, + +00:00:51.039 --> 00:00:52.320 +and the third is a post from + +00:00:52.320 --> 00:00:55.120 +Drew DeVault's blog. Drew DeVault, +by the way-- + +00:00:55.120 --> 00:00:57.680 +his open ring is what helped inspire + +00:00:57.680 --> 00:01:01.359 +what is today org-webring. +All this information is + +00:01:01.359 --> 00:01:03.440 +gathered using a sort of manifest file + +00:01:03.440 --> 00:01:05.360 +that org-webring will use to acquire + +00:01:05.360 --> 00:01:06.746 +and place the information in the + +00:01:06.746 --> 00:01:07.760 +correct format + +00:01:07.760 --> 00:01:10.000 +according to your specification. + +00:01:10.000 --> 00:01:11.729 +additionally, you can see that the + +00:01:11.729 --> 00:01:14.159 +Guix Day announcement's post is pinned. + +00:01:14.159 --> 00:01:17.200 +Stylization is likewise controlled by +using CSS. + +00:01:17.200 --> 00:01:18.960 +You can add nice subtle color changes on + +00:01:18.960 --> 00:01:20.720 +mouse hover or control the size of the + +00:01:20.720 --> 00:01:23.759 +flexboxes, all using standard CSS. + +00:01:23.759 --> 00:01:28.320 +Let's examine a simple scenario of using +org-webring. + +00:01:28.320 --> 00:01:30.400 +After you have org-webring installed, + +00:01:30.400 --> 00:01:32.000 +you'll be able to create a manifest file + +00:01:32.000 --> 00:01:33.759 +that looks something like this. + +00:01:33.759 --> 00:01:35.680 +This particular manifest file is an + +00:01:35.680 --> 00:01:37.840 +example offered in the repository under + +00:01:37.840 --> 00:01:39.520 +the assets directory. + +00:01:39.520 --> 00:01:41.200 +Please feel free to utilize them as a + +00:01:41.200 --> 00:01:42.640 +starting point if you are interested in + +00:01:42.640 --> 00:01:44.399 +using org-webring. + +00:01:44.399 --> 00:01:46.320 +As you can see here, we are able to place + +00:01:46.320 --> 00:01:48.640 +an RSS or ATOM feed in this file and + +00:01:48.640 --> 00:01:50.479 +specify information about the feed we + +00:01:50.479 --> 00:01:51.920 +wish to produce. + +00:01:51.920 --> 00:01:54.640 +For example: the total number of items + +00:01:54.640 --> 00:01:56.159 +and the total number of entries per + +00:01:56.159 --> 00:01:57.439 +source item. + +00:01:57.439 --> 00:01:59.439 +Additionally, you're able to filter posts + +00:01:59.439 --> 00:02:02.079 +you feel would not be relevant to your +web ring. + +00:02:02.079 --> 00:02:03.843 +We can take this example file, + +00:02:03.843 --> 00:02:13.120 +run the dispatch and see the result. + +00:02:13.120 --> 00:02:15.280 +The web ring displays a proper summary + +00:02:15.280 --> 00:02:17.760 +set to a character limit you can specify. + +00:02:17.760 --> 00:02:19.453 +Additionally, all the links in the + +00:02:19.453 --> 00:02:20.814 +web ring are navigatable and + +00:02:20.814 --> 00:02:22.560 +will open in a new tab. + +00:02:22.560 --> 00:02:24.719 +That way, if someone wishes to +view the content, + +00:02:24.719 --> 00:02:25.920 +they simply need to + +00:02:25.920 --> 00:02:30.319 +click on the title or their source name. + +00:02:30.319 --> 00:02:32.879 +Now this particular example is not + +00:02:32.879 --> 00:02:34.800 +stylized because we have not given the + +00:02:34.800 --> 00:02:37.120 +website a CSS file to reference. + +00:02:37.120 --> 00:02:38.720 +Let's examine what is happening from + +00:02:38.720 --> 00:02:40.319 +behind the scenes a little bit. + +00:02:40.319 --> 00:02:42.621 +From inside of the Org Mode file, + +00:02:42.621 --> 00:02:48.800 +let's run the org-webring function. + +00:02:48.800 --> 00:02:51.280 +As you can see, it takes that XML file + +00:02:51.280 --> 00:02:54.239 +and processes it into the correct HTML. + +00:02:54.239 --> 00:02:55.938 +You will then be able to embed this + +00:02:55.938 --> 00:02:57.758 +Org function into another Org file + +00:02:57.758 --> 00:03:00.080 +to be able to display it on your website. + +00:03:00.080 --> 00:03:05.440 +Pretty neat. Let's look at +another example. + +00:03:05.440 --> 00:03:07.360 +On my website, we have an example of + +00:03:07.360 --> 00:03:09.519 +using org-webring to reply to another + +00:03:09.519 --> 00:03:10.800 +blog post. + +00:03:10.800 --> 00:03:12.178 +What I have here is a post from + +00:03:12.178 --> 00:03:14.640 +Drew DeVault's blog. It is showcased clearly at + +00:03:14.640 --> 00:03:16.239 +the top as a single entry, + +00:03:16.239 --> 00:03:18.220 +and you can see it is pinned. + +00:03:18.220 --> 00:03:19.889 +The pinning functionality ensures + +00:03:19.889 --> 00:03:20.800 +that this post is + +00:03:20.800 --> 00:03:21.852 +moved to the front of the + +00:03:21.852 --> 00:03:23.120 +hypothetical web ring + +00:03:23.120 --> 00:03:25.232 +and guaranteeing its visibility. + +00:03:25.232 --> 00:03:27.599 +This is then coupled with a +few changes, such as + +00:03:27.599 --> 00:03:29.840 +disabling the generation time + +00:03:29.840 --> 00:03:31.552 +(which would not be relevant to the +readers) + +00:03:31.552 --> 00:03:34.000 +and a change of the text +in the header + +00:03:34.000 --> 00:03:37.040 +to demonstrate it is indeed +used as a reply. + +00:03:37.040 --> 00:03:39.599 +An example of this is also provided in + +00:03:39.599 --> 00:03:42.319 +the assets directory. + +00:03:42.319 --> 00:03:44.146 +Last, we can use org-webring + +00:03:44.146 --> 00:03:45.519 +as a blog planet, + +00:03:45.519 --> 00:03:47.599 +which is one of my favorites. This takes + +00:03:47.599 --> 00:03:49.360 +after the Emacs Life planet, which I + +00:03:49.360 --> 00:03:51.722 +believe is moderated +by Sacha and others, + +00:03:51.722 --> 00:03:53.200 +as well as the Haskell and + +00:03:53.200 --> 00:03:54.720 +OCaml planets. + +00:03:54.720 --> 00:03:56.959 +A planet, for the uninitiated, is a + +00:03:56.959 --> 00:03:58.485 +curated form of content sharing + +00:03:58.485 --> 00:04:00.159 +about a set of topics. + +00:04:00.159 --> 00:04:02.400 +The Emacs Life, Haskell, and OCaml planets, + +00:04:02.400 --> 00:04:03.439 +as their names imply, + +00:04:03.439 --> 00:04:07.200 +cover Emacs, Haskell, and OCaml blogs +respectively. + +00:04:07.200 --> 00:04:08.962 +Likewise, my planet covers + +00:04:08.962 --> 00:04:10.310 +programming language theory + +00:04:10.310 --> 00:04:12.239 +and category theory, primarily. + +00:04:12.239 --> 00:04:13.920 +It works in essentially the same way as + +00:04:13.920 --> 00:04:15.840 +the org-webring. You provide it with a + +00:04:15.840 --> 00:04:17.519 +list of feeds that get parsed. + +00:04:17.519 --> 00:04:19.317 +However, unlike the web ring, + +00:04:19.317 --> 00:04:21.086 +the planet function has no limits + +00:04:21.086 --> 00:04:23.040 +on the number of entries per source, + +00:04:23.040 --> 00:04:24.639 +and the display number of posts is + +00:04:24.639 --> 00:04:27.600 +increased significantly. + +00:04:27.600 --> 00:04:29.759 +The syndicates or sources have their + +00:04:29.759 --> 00:04:31.429 +feeds shown visibly to users + +00:04:31.429 --> 00:04:33.759 +who may wish to fetch them. + +00:04:33.759 --> 00:04:35.440 +A planet is typically meant to be a + +00:04:35.440 --> 00:04:37.040 +standalone page and not something you + +00:04:37.040 --> 00:04:39.440 +would embed in another page like a +web ring. + +00:04:39.440 --> 00:04:41.680 +All this is provided under a single file + +00:04:41.680 --> 00:04:43.009 +in the org-webring package, + +00:04:43.009 --> 00:04:45.280 +as the code reuse is quite high. + +00:04:45.280 --> 00:04:48.240 +Aside from my own website, we can view + +00:04:48.240 --> 00:04:49.840 +the org-webring being used in neat + +00:04:49.840 --> 00:04:52.400 +context with varying stylizations. + +00:04:52.400 --> 00:04:53.642 +Here's a nice example + +00:04:53.642 --> 00:04:57.680 +from Mikhail Kirillov at w96k.ru, + +00:04:57.680 --> 00:05:00.960 +featuring a four symmetrical +flexbox layout, + +00:05:00.960 --> 00:05:02.324 +an appropriate Russian language + +00:05:02.324 --> 00:05:04.225 +time encoding, which can be also set + +00:05:04.225 --> 00:05:07.360 +in the org-webring manifest. + +00:05:07.360 --> 00:05:08.892 +Another is an example from + +00:05:08.892 --> 00:05:10.400 +Camilo Mesa Gaete (https://cmezagaete.cl/), + +00:05:10.400 --> 00:05:13.280 +using ox-hugo with org-webring and + +00:05:13.280 --> 00:05:14.320 +likewise correctly + +00:05:14.320 --> 00:05:17.680 +features the correct Spanish +time encoding. + +00:05:17.680 --> 00:05:22.240 +Last, my other website workircd.org + +00:05:22.240 --> 00:05:24.265 +shows the web ring being used + +00:05:24.265 --> 00:05:27.440 +in combination with Ocaml's tool +link Soupault, + +00:05:27.440 --> 00:05:32.800 +to fetch git logs for that project. + +00:05:32.800 --> 00:05:34.639 +You may obtain org-webring directly + +00:05:34.639 --> 00:05:37.039 +from SourceHut and add it to your +load-path. + +00:05:37.039 --> 00:05:39.639 +Additionally, you will need to obtain + +00:05:39.639 --> 00:05:43.280 +xmlgen.el, which is unfortunately +not yet on ELPA, + +00:05:43.280 --> 00:05:44.960 +although I have been trying to get this + +00:05:44.960 --> 00:05:46.800 +rectified so I do not have to rewrite + +00:05:46.800 --> 00:05:49.840 +org-webring's XML to HTML parser. + +00:05:49.840 --> 00:05:51.759 +Or if you're one of the cool kids using + +00:05:51.759 --> 00:05:54.000 +my favorite package manager, GNU Guix, + +00:05:54.000 --> 00:06:06.319 +you can obtain it like so. + +00:06:06.319 --> 00:06:08.248 +All of the documentation for + +00:06:08.248 --> 00:06:09.840 +org-webring is available + +00:06:09.840 --> 00:06:12.000 +on the SourceHut website or in the README + +00:06:12.000 --> 00:06:15.039 +file after you check it out +from the git tree. + +00:06:15.039 --> 00:06:16.586 +There are so many ways to + +00:06:16.586 --> 00:06:18.240 +customize org-webring, + +00:06:18.240 --> 00:06:20.671 +as there are just as many variables + +00:06:20.671 --> 00:06:23.056 +as there are parts and components + +00:06:23.056 --> 00:06:25.759 +to org-webring for you to change. + +00:06:25.759 --> 00:06:27.759 +All of this is able to be done simply + +00:06:27.759 --> 00:06:31.600 +from that same manifest file. + +00:06:31.600 --> 00:06:33.919 +Now, taking a moment to examine some of + +00:06:33.919 --> 00:06:35.759 +the org-webring code, + +00:06:35.759 --> 00:06:37.840 +you can see it is all done in the same + +00:06:37.840 --> 00:06:40.160 +Elisp that everybody else is used to. + +00:06:40.160 --> 00:06:43.120 +Now, admittedly, my Elisp is not as + +00:06:43.120 --> 00:06:45.977 +strong as probably somebody else's, + +00:06:45.977 --> 00:06:48.678 +so if you are an Elisp ninja, + +00:06:48.678 --> 00:06:50.479 +please feel free to + +00:06:50.479 --> 00:06:52.633 +send a contribution or a patch + +00:06:52.633 --> 00:06:54.880 +and tell me what I'm doing wrong. + +00:06:54.880 --> 00:06:56.836 +I am not going to be offended + +00:06:56.836 --> 00:06:58.233 +by that at all. I would love to + +00:06:58.233 --> 00:06:59.982 +see this code to improve. + +00:06:59.982 --> 00:07:04.160 +Otherwise, I don't think it's half bad, + +00:07:04.160 --> 00:07:06.800 +considering that my experience with + +00:07:06.800 --> 00:07:08.880 +Lisps is usually in Scheme. + +00:07:08.880 --> 00:07:10.774 +Me moving from Scheme to Elisp + +00:07:10.774 --> 00:07:13.680 +was not all that hard. + +00:07:13.680 --> 00:07:17.120 +Taking the syntax apart, + +00:07:17.120 --> 00:07:20.880 +we're able to see that we can + +00:07:20.880 --> 00:07:23.331 +fetch URLs, which are then + +00:07:23.331 --> 00:07:26.505 +parsed and filtered, sorted, and then + +00:07:26.505 --> 00:07:29.151 +kind of reverse-sorted, rather, + +00:07:29.151 --> 00:07:32.960 +to get you to the web ring result. + +00:07:32.960 --> 00:07:34.639 +All of this is then passed through + +00:07:34.639 --> 00:07:37.840 +different parts of the xmlgen.el + +00:07:37.840 --> 00:07:40.280 +functions which gets you that HTML + +00:07:40.280 --> 00:07:43.520 +that you saw earlier. + +00:07:43.520 --> 00:07:45.599 +org-webring is fully free software + +00:07:45.599 --> 00:07:47.440 +distributed under the GNU General Public + +00:07:47.440 --> 00:07:49.280 +License versions 3 or later. + +00:07:49.280 --> 00:07:52.000 +At your option, I love accepting patches + +00:07:52.000 --> 00:07:53.120 +and collaborating. + +00:07:53.120 --> 00:07:55.166 +I hope you will consider +using org-webring. + +00:07:55.166 --> 00:07:56.720 +You can contact me on + +00:07:56.720 --> 00:07:59.390 +Freenode, OFTC, or many other + +00:07:59.390 --> 00:08:01.520 +IRC networks at brettgillio, + +00:08:01.520 --> 00:08:05.120 +or email me at brettg@gnu.org. + +00:08:05.120 --> 00:08:09.327 +Thanks so much to Amin Bandali and the +EmacsConf organizers, + +00:08:09.327 --> 00:08:13.840 +and to you, the audience, thanks. diff --git a/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt new file mode 100644 index 00000000..a2e0ccae --- /dev/null +++ b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt @@ -0,0 +1,1446 @@ +WEBVTT + +00:00:00.480 --> 00:00:02.796 +Good evening again. I think + +00:00:02.796 --> 00:00:04.319 +I have a little time here + +00:00:04.319 --> 00:00:06.447 +to talk about macros. + +00:00:06.447 --> 00:00:09.440 +Is there still room in +our schedule for that, + +00:00:09.440 --> 00:00:11.440 +or should I just jump to some of + +00:00:11.440 --> 00:00:12.559 +my thoughts on the day? + +00:00:12.559 --> 00:00:15.920 +([Amin:] Pretty sure we + +00:00:15.920 --> 00:00:17.039 +have some time.) + +00:00:17.039 --> 00:00:19.039 +[Corwin:] All right. Great. +([Amin:] Yeah, go for it.) + +00:00:19.039 --> 00:00:20.720 +Well, I'll just dive into my + +00:00:20.720 --> 00:00:22.384 +prepared thing here then. + +00:00:22.384 --> 00:00:24.720 +(Amin: yeah, actually, you're +right on time, so...) + +00:00:24.720 --> 00:00:27.664 +[Corwin:] oh what an amazing thing. + +00:00:27.664 --> 00:00:31.199 +I just... You know, I have been +trying to do what I... + +00:00:31.199 --> 00:00:33.040 +I've got a big thank you planned + +00:00:33.040 --> 00:00:36.239 +at the end, but let me just say, + +00:00:36.239 --> 00:00:39.200 +it's been really cool to watch the + +00:00:39.200 --> 00:00:42.160 +way that people work together. + +00:00:42.160 --> 00:00:46.800 +([Amin:] Absolutely. It's... +This whole event today has been + +00:00:46.800 --> 00:00:50.879 +nothing but awesome, and + +00:00:50.879 --> 00:00:53.120 +no little part thanks to all of the help + +00:00:53.120 --> 00:00:56.909 +from all of you guys and everyone. + +00:00:56.909 --> 00:00:59.120 +Yeah, it's awesome. + +00:00:59.120 --> 00:01:03.065 +With that, I'll just shut up +for now. + +00:01:03.065 --> 00:01:04.891 +Take it away, Corwin.) + +00:01:04.891 --> 00:01:06.479 +[Corwin:] Who knows how to make + +00:01:06.479 --> 00:01:09.840 +make that the default in good old smex? + +00:01:09.840 --> 00:01:12.799 +All right. So I'm gonna try to continue + +00:01:12.799 --> 00:01:14.551 +my theme from the previous talk. + +00:01:14.551 --> 00:01:16.393 +I'm a longtime Emacs user, + +00:01:16.393 --> 00:01:20.240 +but I'm a pretty new person + +00:01:20.240 --> 00:01:22.380 +to trying to really understand + +00:01:22.380 --> 00:01:24.960 +what's going on within Emacs and make + +00:01:24.960 --> 00:01:28.240 +my customizations to it--simple for + +00:01:28.240 --> 00:01:30.960 +what I tend to just think of will work. + +00:01:30.960 --> 00:01:33.566 +And maybe that's a nice bow + +00:01:33.566 --> 00:01:36.240 +to put on that earlier talk. + +00:01:40.479 --> 00:01:44.981 +Let's see here now. It's C-x M-i. + +00:01:44.981 --> 00:01:48.159 +That's right. + +00:01:48.159 --> 00:01:52.960 +And let's try that again. Okay, good. + +00:01:52.960 --> 00:01:55.240 +So demoing is fun, + +00:01:55.240 --> 00:01:57.192 +but I will save most of that + +00:01:57.192 --> 00:01:59.759 +for tomorrow where my + +00:01:59.759 --> 00:02:02.750 +dear friend and co-collaborator + +00:02:02.750 --> 00:02:04.799 +in bringing you the dungeon-mode project, + +00:02:04.799 --> 00:02:07.261 +which is sort of the exciting thing + +00:02:07.261 --> 00:02:10.800 +that we hope you'll be interested in, + +00:02:10.800 --> 00:02:15.680 +gets a little more of a reveal. + +00:02:15.680 --> 00:02:19.360 +Tonight, I'll just close saying + +00:02:19.360 --> 00:02:22.640 +a few things about the process of + +00:02:22.640 --> 00:02:25.680 +making it and continuing my theme of +community. + +00:02:25.680 --> 00:02:29.760 +First of all, a specific and upfront +shout out + +00:02:29.760 --> 00:02:33.120 +to tv's wasamasa who + +00:02:33.120 --> 00:02:36.239 +absolutely shaped and guided this + +00:02:36.239 --> 00:02:38.582 +this program. I may have taken out + +00:02:38.582 --> 00:02:39.898 +a slide with your name on it, + +00:02:39.898 --> 00:02:43.599 +but thank you. + +00:02:43.599 --> 00:02:46.479 +So when we think about Emacs macros + +00:02:46.479 --> 00:02:50.239 +and the power that they give us, + +00:02:53.280 --> 00:02:54.720 +I think about them as a really + +00:02:54.720 --> 00:02:56.400 +deep rabbit hole. They confuse + +00:02:56.400 --> 00:03:00.239 +people a lot. And so, to try to center + +00:03:00.239 --> 00:03:02.480 +myself on that, I remember first that + +00:03:03.599 --> 00:03:09.599 +they're going to be talking to us +about code. + +00:03:09.599 --> 00:03:13.519 +Excuse me, I realize I hadn't +set my timer. + +00:03:13.519 --> 00:03:18.000 +Here we are. + +00:03:18.000 --> 00:03:20.543 +So a simple macro syntax is + +00:03:20.543 --> 00:03:22.239 +going to generate + +00:03:22.239 --> 00:03:25.920 +something that is implicitly confusing + +00:03:25.920 --> 00:03:27.657 +to somebody that knows the syntax + +00:03:27.657 --> 00:03:28.988 +of Emacs Lisp well. + +00:03:28.988 --> 00:03:30.785 +We see something like this + +00:03:30.785 --> 00:03:32.784 +and a veteran eye says + +00:03:32.784 --> 00:03:36.239 +"That x isn't quoted. What's going on?" + +00:03:36.239 --> 00:03:39.840 +but it can be hard to miss. + +00:03:39.840 --> 00:03:43.040 +A lot of the functions (as we'll talk + +00:03:43.040 --> 00:03:46.640 +about in a moment) that are built +into Emacs + +00:03:46.640 --> 00:03:48.572 +really are macros, so a lot of + +00:03:48.572 --> 00:03:50.480 +Emacs features work this way. + +00:03:50.480 --> 00:03:53.040 +It might be scary, but we have to look at + +00:03:53.040 --> 00:03:54.640 +it closely if we really want to get + +00:03:54.640 --> 00:03:58.400 +friendly with Emacs. + +00:03:58.400 --> 00:04:01.439 +Let's just jump right into defmacro, + +00:04:01.439 --> 00:04:03.920 +which is our key entry point. + +00:04:04.720 --> 00:04:05.833 +The notes from this talk + +00:04:05.833 --> 00:04:09.420 +include the link to that, + +00:04:09.420 --> 00:04:12.000 +which... Definitely + +00:04:12.000 --> 00:04:14.640 +read through a couple of times. + +00:04:14.640 --> 00:04:16.000 +That may take you through + +00:04:16.000 --> 00:04:19.440 +into the cl-def macro, which adds + +00:04:19.440 --> 00:04:23.440 +the Common Lisp extensions. + +00:04:23.440 --> 00:04:28.080 +Definitely challenging. + +00:04:28.080 --> 00:04:30.560 +I've struggled there, + +00:04:30.560 --> 00:04:31.759 +as we'll take a look at + +00:04:31.759 --> 00:04:34.800 +in a moment. + +00:04:34.800 --> 00:04:36.266 +So I haven't played too much with + +00:04:36.266 --> 00:04:38.320 +cl-maclet. Perhaps success in + +00:04:38.320 --> 00:04:40.804 +in that keyword space + +00:04:40.804 --> 00:04:44.320 +and figuring out what +the right balance is there + +00:04:44.320 --> 00:04:46.000 +will give me the confidence to try + +00:04:46.000 --> 00:04:51.680 +some more lexical macros. + +00:04:51.680 --> 00:04:53.402 +Let me also briefly introduce + +00:04:53.402 --> 00:04:55.134 +the comma (,) and back quote (`). + +00:04:55.134 --> 00:04:57.389 +If you have allowed your eyes + +00:04:57.389 --> 00:04:59.321 +to cross when you see these, + +00:04:59.321 --> 00:05:03.113 +that's not a shameful, +shameful thing. + +00:05:03.113 --> 00:05:06.080 +It's confusing, and we should be + +00:05:06.080 --> 00:05:07.543 +alerting each other + +00:05:07.543 --> 00:05:09.520 +when we stick macros in, + +00:05:09.520 --> 00:05:11.199 +often by putting them in + +00:05:11.199 --> 00:05:12.255 +different library spaces + +00:05:12.255 --> 00:05:14.160 +for complicated projects, + +00:05:14.160 --> 00:05:17.520 +or otherwise warning people + +00:05:17.520 --> 00:05:19.520 +that this is not an interactive function, + +00:05:19.520 --> 00:05:21.919 +even if you get away +with using it like one. + +00:05:22.639 --> 00:05:26.000 +Watch your back. + +00:05:26.000 --> 00:05:32.800 +The manual itself talks about macros + +00:05:32.800 --> 00:05:35.840 +as being a way of evaluating, + +00:05:35.840 --> 00:05:39.993 +as being an evaluator that will take + +00:05:39.993 --> 00:05:42.800 +our Emacs Lisp expression + +00:05:42.800 --> 00:05:44.800 +and the set of forms that + +00:05:44.800 --> 00:05:47.590 +will feed to it our code, + +00:05:48.960 --> 00:05:50.792 +but it also provides us with + +00:05:50.792 --> 00:05:53.467 +this concept of an environment. + +00:05:53.467 --> 00:05:57.027 +That's really where the power +comes in. + +00:05:57.027 --> 00:05:58.240 +Through that, we can have + +00:05:58.240 --> 00:06:00.080 +lexical variables and + +00:06:00.080 --> 00:06:03.199 +think about--bring in some of the + +00:06:03.199 --> 00:06:06.400 +capabilities that + +00:06:06.400 --> 00:06:09.759 +can be harder to reach with + +00:06:09.759 --> 00:06:13.840 +a pure declarative statement that + +00:06:13.840 --> 00:06:21.440 +doesn't allow for top level + +00:06:21.440 --> 00:06:28.639 +asynchronous... Asynchronicity... + +00:06:28.639 --> 00:06:31.950 +I'm gonna basically + +00:06:33.520 --> 00:06:35.577 +ignore the byte-compilation phase + +00:06:35.577 --> 00:06:36.880 +for this talk + +00:06:36.880 --> 00:06:38.463 +in order to have any prayer + +00:06:38.463 --> 00:06:39.919 +of getting through it in the + +00:06:39.919 --> 00:06:43.600 +remaining 9 or 11 minutes or whatever. + +00:06:43.600 --> 00:06:50.441 +But suffice to say, +that's a scary space, + +00:06:50.441 --> 00:06:52.240 +and that's really + +00:06:52.240 --> 00:06:53.800 +the thing that you want to + +00:06:53.800 --> 00:06:55.277 +start learning about + +00:06:55.277 --> 00:06:57.199 +as you think about + +00:06:57.199 --> 00:07:02.160 +taking macros on in earnest. + +00:07:02.160 --> 00:07:05.919 +Coming back to the comma syntax, + +00:07:05.919 --> 00:07:09.759 +then, having given ourselves a + +00:07:09.759 --> 00:07:12.479 +working definition for the Emacs Lisp + +00:07:12.479 --> 00:07:14.479 +runtime environment, then we can say that + +00:07:14.479 --> 00:07:15.840 +macros are going to + +00:07:15.840 --> 00:07:21.120 +inject code back into that stream, + +00:07:21.120 --> 00:07:25.280 +whereas backquote (`) + +00:07:25.280 --> 00:07:28.479 +is going to give code back. + +00:07:28.479 --> 00:07:31.919 +to the stream--or interject, sorry, + +00:07:31.919 --> 00:07:33.632 +it's going to interject + +00:07:33.632 --> 00:07:35.360 +back into the stream. + +00:07:35.360 --> 00:07:39.840 +Sort of an exclamatory "Excuse me, + +00:07:39.840 --> 00:07:46.966 +I'd like to have a value here." +We can take that value + +00:07:46.966 --> 00:07:48.639 +from the environment as it exists + +00:07:48.639 --> 00:07:54.160 +when our macro is evaluated. + +00:07:54.160 --> 00:07:56.003 +Backquote, on the other hand, + +00:07:56.003 --> 00:08:00.560 +takes the result from that + +00:08:00.560 --> 00:08:02.201 +and returns it back to the stream + +00:08:02.201 --> 00:08:03.467 +for evaluation at the + +00:08:03.467 --> 00:08:05.680 +processing level that invoked us. + +00:08:05.680 --> 00:08:08.720 +So in other words, perhaps back up to + +00:08:08.720 --> 00:08:10.960 +a top-level eval expression where our + +00:08:10.960 --> 00:08:16.720 +macro is invoked. + +00:08:20.080 --> 00:08:22.560 +I'm going to briefly bring + +00:08:22.560 --> 00:08:23.759 +you back to the game + +00:08:23.759 --> 00:08:27.120 +for just a moment. + +00:08:30.240 --> 00:08:32.479 +I won't linger on this slide, + +00:08:32.479 --> 00:08:37.039 +but briefly: this is a + +00:08:37.039 --> 00:08:41.615 +role-playing, pen and pencil, + +00:08:41.615 --> 00:08:43.829 +physical dice tradition + +00:08:43.829 --> 00:08:46.320 +that dates back a long time + +00:08:46.320 --> 00:08:48.080 +from a technology perspective. + +00:08:48.080 --> 00:08:50.727 +It's old in the same way + +00:08:50.727 --> 00:08:58.560 +that other tools that I like +are old. + +00:08:58.560 --> 00:09:00.185 +It's simple to understand. + +00:09:00.185 --> 00:09:01.873 +I can communicate a lot with it + +00:09:01.873 --> 00:09:03.952 +with a simple amount of typing + +00:09:03.952 --> 00:09:09.120 +or scribbling something +on a piece of paper. + +00:09:09.120 --> 00:09:13.500 +It has a complicated problem space +of its own. + +00:09:13.500 --> 00:09:15.519 +Again, I don't want to + +00:09:15.519 --> 00:09:18.212 +get too much into the game here, + +00:09:18.212 --> 00:09:20.177 +but in this talk, + +00:09:20.177 --> 00:09:22.590 +for the last five minutes, + +00:09:22.590 --> 00:09:24.751 +I'll focus on the process + +00:09:24.751 --> 00:09:26.640 +that we took to + +00:09:26.640 --> 00:09:29.190 +automate getting data out of + +00:09:29.190 --> 00:09:31.564 +the Org Mode tables +which eventually + +00:09:31.564 --> 00:09:33.855 +(as we'll talk about more +tomorrow) + +00:09:33.855 --> 00:09:36.000 +are used to draw + +00:09:36.000 --> 00:09:39.440 +game maps and other things. + +00:09:39.440 --> 00:09:42.543 +Here I talk about why we did +that. + +00:09:42.543 --> 00:09:45.279 +I'm going to skip briefly past that, + +00:09:45.279 --> 00:09:49.360 +and say instead that at a high level, + +00:09:49.360 --> 00:09:51.440 +it's symbolic informatics. + +00:09:51.440 --> 00:09:53.519 +We're giving a symbolic name + +00:09:53.519 --> 00:09:58.080 +to a tile set, + +00:10:02.000 --> 00:10:04.000 +and then assigning that tile set some + +00:10:04.000 --> 00:10:04.840 +some characteristics + +00:10:04.840 --> 00:10:06.820 +like physical speeds, screen space + +00:10:06.820 --> 00:10:08.399 +(a variable that we might + +00:10:08.399 --> 00:10:12.800 +want to swap in), and so forth. + +00:10:12.800 --> 00:10:15.200 +You know, our project rests heavily on + +00:10:15.200 --> 00:10:21.040 +Org Mode and its +fundamental capabilities. + +00:10:21.040 --> 00:10:24.000 +The code I'm going to show here + +00:10:28.320 --> 00:10:31.360 +is focused around a sticky + +00:10:31.360 --> 00:10:32.380 +problem space in + +00:10:32.380 --> 00:10:33.861 +information technology. + +00:10:33.861 --> 00:10:38.240 +I'm a professional software engineer + +00:10:38.240 --> 00:10:40.362 +turned technology architect. + +00:10:40.362 --> 00:10:43.495 +I support the websites for + +00:10:43.495 --> 00:10:46.533 +a recognizable financial services brand + +00:10:46.533 --> 00:10:48.500 +that I don't identify + +00:10:48.500 --> 00:10:50.720 +just so I don't accidentally end up + +00:10:50.720 --> 00:10:54.399 +inadvertently misrepresenting my firm + +00:10:54.399 --> 00:10:56.456 +in some financial perspective + +00:10:56.456 --> 00:10:57.760 +if I let some other + +00:10:57.760 --> 00:11:03.300 +companies' name slip, or my own. + +00:11:03.300 --> 00:11:07.700 +It's certainly no representation + +00:11:07.700 --> 00:11:11.279 +of an opinion other than my own. + +00:11:18.800 --> 00:11:22.720 +So ETL has to do with moving data around. + +00:11:22.720 --> 00:11:26.240 +We have the idea of + +00:11:26.240 --> 00:11:29.200 +a pipeline where we'll be able to verify + +00:11:29.200 --> 00:11:30.560 +certain assumptions, + +00:11:30.560 --> 00:11:32.106 +nominally about data quality, + +00:11:32.106 --> 00:11:33.600 +but it could be about anything. + +00:11:33.600 --> 00:11:35.630 +Before the pipeline starts, okay, + +00:11:35.630 --> 00:11:36.886 +we've got a state where we think + +00:11:36.886 --> 00:11:38.560 +it should work if we run it. + +00:11:38.560 --> 00:11:41.920 +We have some extraction where we'll + +00:11:41.920 --> 00:11:43.973 +get our sources, and we may have + +00:11:43.973 --> 00:11:45.040 +the opportunity to + +00:11:45.040 --> 00:11:47.327 +make some assertions there. + +00:11:47.327 --> 00:11:50.510 +In the transform stage, +as well as the load, + +00:11:50.510 --> 00:11:52.720 +things get a little dicer, + +00:11:52.720 --> 00:11:54.079 +to the point where we come out of the + +00:11:54.079 --> 00:11:55.360 +load stage and we should have some + +00:11:55.360 --> 00:11:56.676 +really solid assertions again + +00:11:56.676 --> 00:11:57.724 +that we can even go back + +00:11:57.724 --> 00:11:59.680 +and compare to the extract stage. + +00:11:59.680 --> 00:12:02.639 +From this, we have the rudimentaries + +00:12:02.639 --> 00:12:04.959 +of a data quality practice. + +00:12:04.959 --> 00:12:08.120 +In this case, we have a number of + +00:12:08.120 --> 00:12:09.360 +Org Mode files that will all + +00:12:09.360 --> 00:12:12.639 +be distributed across a + +00:12:12.639 --> 00:12:16.720 +number of players' computers, + +00:12:16.720 --> 00:12:18.959 +so we might not want to update every + +00:12:18.959 --> 00:12:20.320 +part of every buffer. + +00:12:20.320 --> 00:12:22.720 +I think it's a complicated problem space. + +00:12:22.720 --> 00:12:24.560 +So we tried to take + +00:12:24.560 --> 00:12:27.839 +a long-term view of + +00:12:27.839 --> 00:12:30.321 +the solution that we needed. + +00:12:30.321 --> 00:12:32.160 +So I'll go ahead + +00:12:32.160 --> 00:12:36.279 +and open up the function +that... + +00:12:36.279 --> 00:12:39.020 +Let's actually start with the one + +00:12:39.020 --> 00:12:41.680 +that's pretty easy to read. + +00:12:41.680 --> 00:12:46.800 +I'm gonna go ahead and +just crank it up huge, + +00:12:46.800 --> 00:12:51.680 +in case anybody's watching in 480. + +00:12:51.680 --> 00:12:57.733 +This program is not a work of art + +00:12:57.733 --> 00:13:01.120 +It's a simple implementation +of the idea that + +00:13:01.120 --> 00:13:04.000 +an alist of functions + +00:13:04.000 --> 00:13:06.633 +that return maybe some data, + +00:13:06.633 --> 00:13:10.399 +maybe some data and an entry +back into that alist, + +00:13:10.399 --> 00:13:13.040 +can be done quite extensively with + +00:13:13.040 --> 00:13:15.680 +very few lines of code. + +00:13:15.680 --> 00:13:17.586 +Neither is it an especially tight + +00:13:17.586 --> 00:13:19.600 +or thrifty implementation. + +00:13:19.600 --> 00:13:22.000 +It's just trying to get the job done + +00:13:22.000 --> 00:13:25.056 +with a doc statement for everything. + +00:13:25.056 --> 00:13:28.595 +At the heart, we see a call to + +00:13:28.595 --> 00:13:32.067 +this macro called dm-coalesce-hash, + +00:13:32.067 --> 00:13:33.714 +and that's what I'd like +to focus in on. + +00:13:33.714 --> 00:13:35.360 +You can see... I think + +00:13:35.360 --> 00:13:38.800 +that something unpleasant is +happening here. + +00:13:38.800 --> 00:13:43.991 +I've got an eval in what is... + +00:13:43.991 --> 00:13:49.519 +I will share a fairly central function + +00:13:49.519 --> 00:13:52.160 +that those implementing +this ETL pattern are + +00:13:52.160 --> 00:13:54.933 +welcome to derive from. + +00:13:54.933 --> 00:13:57.680 +That is, this is a +default transform + +00:13:57.680 --> 00:14:00.959 +that you can get when loading +certain kinds of + +00:14:00.959 --> 00:14:04.560 +org-mode tables that have been + +00:14:04.560 --> 00:14:06.399 +properly adorned. Again, we'll get + +00:14:06.399 --> 00:14:09.120 +into that all tomorrow. + +00:14:09.120 --> 00:14:11.900 +So, keeping an eye on time. +Couple minutes left. + +00:14:11.900 --> 00:14:13.760 +Let's look at the macro itself. + +00:14:13.760 --> 00:14:15.000 +I have a slide on this, + +00:14:15.000 --> 00:14:24.639 +but let's go ahead +and risk getting off page. + +00:14:24.639 --> 00:14:27.199 +Oh boy. Here we go. So this is my + +00:14:27.199 --> 00:14:28.959 +utilities bucket. + +00:14:28.959 --> 00:14:31.920 +It has such basic features as "give me a + +00:14:31.920 --> 00:14:34.000 +hash table with some defaults, I'll think + +00:14:34.000 --> 00:14:36.000 +about that later," + +00:14:36.000 --> 00:14:44.720 +and "add to list," a special version + +00:14:44.720 --> 00:14:47.600 +that enables us to be a little cavalier + +00:14:47.600 --> 00:14:49.360 +in experimenting with alist versus + +00:14:49.360 --> 00:14:50.967 +hashes versus plists. + +00:14:50.967 --> 00:14:53.178 +We've made a right mess for +ourselves + +00:14:53.178 --> 00:14:54.399 +in the proof of concept area, + +00:14:54.399 --> 00:14:57.433 +and it's ripe for someone to write a + +00:14:57.433 --> 00:14:58.560 +whitepaper about + +00:14:58.560 --> 00:15:00.240 +when to prefer these things. + +00:15:04.800 --> 00:15:08.000 +The merge alist... + +00:15:08.000 --> 00:15:12.959 +Same work here. +Let's get down to business. + +00:15:12.959 --> 00:15:14.667 +This function has quite a... + +00:15:14.667 --> 00:15:17.467 +This macro has quite a doc string. + +00:15:17.467 --> 00:15:20.720 +I think I mentioned earlier +that I got myself into + +00:15:20.720 --> 00:15:22.088 +trouble with the keyword properties. + +00:15:22.088 --> 00:15:23.519 +You can see that we have + +00:15:23.519 --> 00:15:27.359 +not only quite a number of them, + +00:15:27.359 --> 00:15:31.155 +but a lot of default values, + +00:15:31.155 --> 00:15:35.446 +many of which may be relying on + +00:15:35.446 --> 00:15:37.264 +the values that are passed in here. + +00:15:37.264 --> 00:15:40.000 +This is complicated. As it turns out, + +00:15:40.000 --> 00:15:44.000 +I wasn't brave enough in most cases + +00:15:44.000 --> 00:15:45.485 +to try to write a lambda + +00:15:45.485 --> 00:15:47.279 +that could understand and + +00:15:47.279 --> 00:15:49.300 +replace its own local variable. + +00:15:49.300 --> 00:15:50.399 +I just didn't... + +00:15:50.399 --> 00:15:53.519 +It didn't save me enough time. This was + +00:15:53.519 --> 00:15:56.532 +really easy to read and write and +understand + +00:15:56.532 --> 00:15:58.240 +as I thought through my problem, + +00:15:58.240 --> 00:16:00.000 +but now, as I use it, + +00:16:00.000 --> 00:16:02.486 +I've lost a little ground with +this. + +00:16:02.486 --> 00:16:04.079 +I'm not even sure + +00:16:04.079 --> 00:16:06.453 +I like what I got from + +00:16:06.453 --> 00:16:09.341 +the many keyword properties +when it... + +00:16:09.341 --> 00:16:11.920 +And we can look, perhaps if we have + +00:16:11.920 --> 00:16:17.340 +the time, at what that looks like in + +00:16:19.920 --> 00:16:22.720 +Oh, all right, I have to separately + +00:16:22.720 --> 00:16:24.480 +dismiss and restart that. + +00:16:24.480 --> 00:16:27.519 +So that's just about my time. + +00:16:27.519 --> 00:16:29.600 +Being respectful of that, I want + +00:16:29.600 --> 00:16:31.920 +to invite presenters to just jump in at + +00:16:31.920 --> 00:16:35.519 +any of the many large pauses I leave. + +00:16:35.519 --> 00:16:38.079 +I'll just leave up the doc string + +00:16:38.079 --> 00:16:40.160 +for a moment and maybe split the screen + +00:16:40.160 --> 00:16:45.199 +and pull open an item. + +00:16:45.199 --> 00:16:48.720 +([Amin]: Thank you very + +00:16:48.720 --> 00:16:50.720 +much for your talk, Corwin. + +00:16:50.720 --> 00:16:53.839 +I think you still have + +00:16:53.839 --> 00:16:55.027 +maybe three or four more minutes, + +00:16:55.027 --> 00:16:57.680 +if you want to quickly wrap up.) + +00:16:57.680 --> 00:17:00.644 +[Corwin:] Okay, so three or four +more minutes + +00:17:00.644 --> 00:17:05.439 +I can easily spend on thank yous. + +00:17:05.439 --> 00:17:07.280 +I might switch to that if there aren't + +00:17:07.280 --> 00:17:08.270 +questions on the pad. + +00:17:10.160 --> 00:17:12.559 +([Amin:] Would you like me to pull up the pad, + +00:17:12.559 --> 00:17:14.079 +or are you looking at it?) + +00:17:14.079 --> 00:17:16.777 +[Corwin:] I am. I bookmarked it. + +00:17:16.777 --> 00:17:30.840 +I am pulling the tab +and I'll bring it in. + +00:17:30.840 --> 00:17:38.799 +Okay. All right. This is the wrong +Etherpad. + +00:17:38.799 --> 00:17:44.480 +Thanks for the link. + +00:17:44.480 --> 00:17:54.880 +All right. So I think I'm +looking for macros. + +00:17:54.880 --> 00:17:57.630 +Okay. Key message. Sure. + +00:17:57.630 --> 00:18:01.679 +So, the key message is that it's + +00:18:01.679 --> 00:18:02.960 +a jungle out there. + +00:18:02.960 --> 00:18:05.912 +Macros, along with any other design, + +00:18:05.912 --> 00:18:08.559 +can leave you in a position + +00:18:08.559 --> 00:18:11.919 +where you have a nice API. I can show + +00:18:11.919 --> 00:18:13.600 +you other examples (you can find them in + +00:18:13.600 --> 00:18:14.960 +the dungeon-mode source) + +00:18:14.960 --> 00:18:18.480 +of many, many other places where I use + +00:18:18.480 --> 00:18:20.820 +this exact same formula, + +00:18:20.820 --> 00:18:23.840 +quickly sketching out +how a character sheet + +00:18:23.840 --> 00:18:26.180 +or another big data set + +00:18:26.180 --> 00:18:28.480 +needs to figure out +what tables are + +00:18:28.480 --> 00:18:29.320 +going to be interesting + +00:18:29.320 --> 00:18:30.720 +from the collection of files, + +00:18:30.720 --> 00:18:33.967 +and then load up the tile set, + +00:18:33.967 --> 00:18:38.880 +and the layout file from that. + +00:18:38.880 --> 00:18:40.542 +And I mean, it works. + +00:18:40.542 --> 00:18:42.677 +The project is moving forward +with this. + +00:18:42.677 --> 00:18:44.799 +I have the flexibility that I need. + +00:18:44.799 --> 00:18:46.559 +But here I am evaling my own code + +00:18:46.559 --> 00:18:48.640 +to make darn sure even if I get + +00:18:48.640 --> 00:18:52.400 +byte-compiled, this macro + +00:18:52.400 --> 00:18:55.440 +does get evaluated in the user's real + +00:18:55.440 --> 00:18:57.684 +run time. Clearly a design fail. + +00:18:57.684 --> 00:18:58.890 +So that would be... + +00:18:58.890 --> 00:19:00.880 +The key point of my talk is to + +00:19:00.880 --> 00:19:05.600 +present this design fail and + +00:19:05.600 --> 00:19:08.320 +thank the community, but especially + +00:19:08.320 --> 00:19:10.942 +wasamasa for some patience. + +00:19:10.942 --> 00:19:13.280 +Let me add at this moment that + +00:19:13.280 --> 00:19:13.333 +he was so frustrated with me. + +00:19:13.333 --> 00:19:17.115 +They were sort of frustrated with me + +00:19:17.115 --> 00:19:20.400 +(I think I didn't qualify pronouns) + +00:19:24.240 --> 00:19:26.287 +with doing this. The first... + +00:19:26.287 --> 00:19:27.985 +This was one of our first +interactions, + +00:19:27.985 --> 00:19:29.919 +and the feedback was, + +00:19:29.919 --> 00:19:34.240 +"Why is this a macro. Full stop." + +00:19:34.240 --> 00:19:36.640 +And that's a great message, actually. + +00:19:36.640 --> 00:19:39.520 +I hope that maybe this +can encourage + +00:19:39.520 --> 00:19:42.720 +further talks across the subject about, + +00:19:42.720 --> 00:19:43.808 +you know, "Hey, wait a minute, + +00:19:43.808 --> 00:19:45.549 +macros are really fantastic," + +00:19:45.549 --> 00:19:47.018 +as I hope I made clear. + +00:19:47.018 --> 00:19:48.559 +You can do a tremendous amount + +00:19:48.559 --> 00:19:51.039 +with them, and we rely on them + +00:19:51.039 --> 00:19:55.200 +for almost all the fun goodies, + +00:19:55.200 --> 00:20:02.159 +from defun, setq... + +00:20:02.159 --> 00:20:04.639 +I want to get to my thank yous. + +00:20:04.639 --> 00:20:18.840 +Let me just peek back at the pad. + +00:20:20.000 --> 00:20:22.080 +Well, that was actually a scratch buffer, + +00:20:22.080 --> 00:20:24.720 +so I'll have to read it cold off +my notes. + +00:20:27.919 --> 00:20:30.320 +But I'll switch to... I'll also... + +00:20:30.320 --> 00:20:31.600 +I'll say a couple of thank-yous if you + +00:20:31.600 --> 00:20:34.320 +don't mind, Amin. + +00:20:34.320 --> 00:20:36.080 +In addition to the big thank you that I + +00:20:36.080 --> 00:20:39.360 +hope was implied by my shout out +to wasamasa, + +00:20:39.360 --> 00:20:42.720 +I also want to thank you, Amin, for + +00:20:42.720 --> 00:20:46.640 +your kindness in extending + +00:20:46.640 --> 00:20:51.360 +to the project as well as to me, the + +00:20:51.360 --> 00:20:54.320 +the chance to present here. + +00:20:54.320 --> 00:20:56.358 +You've also done a lot of great stuff + +00:20:56.358 --> 00:20:59.360 +for our project. Thank you very much for +that. + +00:20:59.360 --> 00:21:03.400 +Sacha Chua (I'll get there), + +00:21:03.400 --> 00:21:15.919 +thank you so much for + +00:21:15.919 --> 00:21:17.200 +the inspiration that you are to our + +00:21:17.200 --> 00:21:18.320 +whole community. + +00:21:18.320 --> 00:21:22.400 +I also want to thank the presenters + +00:21:22.400 --> 00:21:25.600 +for just being so flexible and + +00:21:25.600 --> 00:21:27.600 +nagging back through the whole thing, + +00:21:27.600 --> 00:21:29.120 +and especially to Leo + +00:21:29.120 --> 00:21:32.159 +who has done so much to +drive the show today. + +00:21:32.159 --> 00:21:37.242 +This is a fractious tent at times, + +00:21:37.242 --> 00:21:39.800 +and sometimes it is indeed + +00:21:39.800 --> 00:21:41.360 +a little bit of a circus, + +00:21:41.360 --> 00:21:44.746 +but I am learning so much so fast. + +00:21:44.746 --> 00:21:46.880 +I'm just inspired by how much + +00:21:46.880 --> 00:21:49.333 +Emacs can teach us. + +00:21:49.333 --> 00:21:52.901 +([Amin:] thank you, Corwin, +for your kind words + +00:21:52.901 --> 00:21:54.960 +about me, of course, + +00:21:54.960 --> 00:21:56.000 +about all of us + +00:21:56.000 --> 00:21:58.000 +and the conference... + +00:21:58.000 --> 00:22:02.400 +Indeed, thanks to everyone who's helped, + +00:22:02.400 --> 00:22:04.159 +including the speakers, of course, + +00:22:04.159 --> 00:22:05.840 +without whom EmacsConf really + +00:22:05.840 --> 00:22:08.960 +wouldn't have been a EmacsConf. + +00:22:08.960 --> 00:22:10.640 +It's been a pleasure + +00:22:10.640 --> 00:22:12.366 +knowing you and +working with you, + +00:22:12.366 --> 00:22:15.743 +from afar for the most part + +00:22:15.743 --> 00:22:17.360 +on dungeon-mode, + +00:22:17.360 --> 00:22:19.937 +helping with small things +here and there + +00:22:19.937 --> 00:22:21.796 +but yeah, it's been my pleasure, + +00:22:21.796 --> 00:22:23.840 +and it's great to have you and + +00:22:23.840 --> 00:22:26.582 +everyone else part of the +community, + +00:22:26.582 --> 00:22:29.180 +and for me to be part of the +community. + +00:22:29.180 --> 00:22:30.559 +It's been a lot of fun. + +00:22:30.559 --> 00:22:33.679 +Thank you.) + +00:22:33.679 --> 00:22:35.206 +[Corwin]: It's an honor. + +00:22:35.206 --> 00:22:37.428 +I don't use that word an awful lot + +00:22:37.428 --> 00:22:39.867 +because I sort of smirk at it. + +00:22:39.867 --> 00:22:43.941 +It gets us in a lot of trouble, +honor does, + +00:22:43.941 --> 00:22:46.904 +but this will be a sure time +to use it. + +00:22:46.904 --> 00:22:48.840 +([Amin:] Thank you.) + +00:22:48.840 --> 00:22:51.840 +[Corwin:] Likewise. diff --git a/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt b/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt new file mode 100644 index 00000000..530b95c8 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt @@ -0,0 +1,2848 @@ +WEBVTT + +00:00:00.080 --> 00:00:01.708 +Hi, my name is Eduardo Ochs. + +00:00:01.708 --> 00:00:03.439 +I'm this person here, + +00:00:03.439 --> 00:00:06.240 +and the title of this talk is on "Why + +00:00:07.120 --> 00:00:09.519 +Most of the Best Features in eev Look + +00:00:09.519 --> 00:00:11.599 +Like Five Minute Hacks." + +00:00:11.599 --> 00:00:15.280 +This is a presentation at the +EmacsConf 2020 + +00:00:15.280 --> 00:00:23.199 +happening on November 28 and 29, 2020. + +00:00:23.199 --> 00:00:25.519 +So this is part one of the presentation. + +00:00:25.519 --> 00:00:27.680 +Here I'm going to explain + +00:00:27.680 --> 00:00:29.840 +some ideas that are prerequisites for + +00:00:29.840 --> 00:00:32.320 +understanding the rest of the +presentation. + +00:00:32.320 --> 00:00:35.440 +The three main keys of eev are + +00:00:35.440 --> 00:00:37.920 +M-e, M-k, and M-j. +I'm going to start by + +00:00:37.920 --> 00:00:42.079 +explaining M-e and M-k. + +00:00:42.079 --> 00:00:44.960 +M-e is used to follow hyperlinks. + +00:00:44.960 --> 00:00:47.592 +Technically, it is essentially + +00:00:47.592 --> 00:00:49.345 +just a C-e to move to + +00:00:49.345 --> 00:00:50.402 +the end of the line, + +00:00:50.402 --> 00:00:53.918 +and then a C-x C-e to +execute this, + +00:00:53.918 --> 00:00:58.960 +the sexp before point at +the end of the line. + +00:00:58.960 --> 00:01:00.879 +And the thing is that Emacs comes with + +00:01:00.879 --> 00:01:02.479 +many functions that can be + +00:01:02.479 --> 00:01:05.040 +used as sexp hyperlinks. + +00:01:05.040 --> 00:01:07.540 +We can consider that they point to +somewhere. + +00:01:07.540 --> 00:01:09.040 +I'm going to refer to that as + +00:01:09.040 --> 00:01:11.411 +the target of the hyperlink. + +00:01:11.411 --> 00:01:12.960 +If we execute this + +00:01:12.960 --> 00:01:15.759 +sexp hyperlinks, we coul go to that target. + +00:01:15.759 --> 00:01:17.119 +For example, this one + +00:01:17.119 --> 00:01:20.000 +is a hyperlink that points to a buffer + +00:01:20.000 --> 00:01:22.720 +with the manpage for cat. + +00:01:22.720 --> 00:01:25.040 +And usually, but not always, after + +00:01:25.040 --> 00:01:27.040 +following the hyperlink, we can go back + +00:01:27.040 --> 00:01:29.840 +by just killing the current buffer + +00:01:29.840 --> 00:01:31.537 +that the hyperlink created: + +00:01:31.537 --> 00:01:34.400 +the target of the hyperlink. + +00:01:34.400 --> 00:01:38.000 +But this example here is badly behaved. + +00:01:38.000 --> 00:01:41.360 +If we execute it, it creates a new frame, + +00:01:41.360 --> 00:01:43.360 +and to go back to the previous situation, + +00:01:43.360 --> 00:01:52.840 +we have to either click here +or type C-x 5 0. + +00:01:54.880 --> 00:01:57.120 +So here are some examples of + +00:01:57.120 --> 00:01:58.726 +sexp hyperlinks using + +00:01:58.726 --> 00:02:00.640 +standard Emacs functions. + +00:02:00.640 --> 00:02:03.188 +This third one is badly behaved + +00:02:03.188 --> 00:02:04.880 +in a different way. + +00:02:04.880 --> 00:02:08.554 +If executed, the target is created + +00:02:08.554 --> 00:02:11.006 +in the same window as we are now, + +00:02:11.006 --> 00:02:14.312 +but it also shows a lot of +garbage + +00:02:14.312 --> 00:02:15.797 +here in the echo area, + +00:02:15.797 --> 00:02:23.280 +so the current frame becomes +a bit messy. + +00:02:23.280 --> 00:02:25.728 +And well, one of the first things + +00:02:25.728 --> 00:02:28.319 +that I did when I was creating eev + +00:02:28.319 --> 00:02:30.720 +many many years ago was that I created + +00:02:30.720 --> 00:02:33.380 +variants of all these functions + +00:02:33.380 --> 00:02:36.640 +that were better behaved. + +00:02:36.640 --> 00:02:39.200 +They were better behaved in two +senses. + +00:02:39.200 --> 00:02:40.839 +The obvious one was that + +00:02:40.839 --> 00:02:43.680 +they all created the target + +00:02:43.680 --> 00:02:45.246 +in the same window as before, + +00:02:45.246 --> 00:02:48.720 +so I could go back by just typing M-k + +00:02:48.720 --> 00:02:52.879 +which has essentially just killed this +buffer. + +00:02:52.879 --> 00:02:56.480 +I also implemented something extra that + +00:02:56.480 --> 00:02:59.040 +are the postback lists. + +00:02:59.040 --> 00:03:03.599 +For example, these extra arguments here +are a postback list. + +00:03:03.599 --> 00:03:06.080 +These extra arguments specify + +00:03:06.080 --> 00:03:09.599 +position and the target buffer. + +00:03:09.599 --> 00:03:14.337 +In this example, +this postback list means: + +00:03:14.337 --> 00:03:18.239 +starting from the beginning of +the buffer, + +00:03:18.239 --> 00:03:22.757 +search for the first occurrence +of this string after that, + +00:03:22.757 --> 00:03:24.754 +after the beginning +of the buffer, + +00:03:24.754 --> 00:03:27.662 +and then search for +the first occurrence + +00:03:27.662 --> 00:03:33.760 +of this string after that. + +00:03:33.760 --> 00:03:36.070 +eev also defines some hyperlinks + +00:03:36.070 --> 00:03:38.799 +that do not create new buffers. + +00:03:38.799 --> 00:03:40.879 +Here is the first example. + +00:03:40.879 --> 00:03:42.971 +If I execute this one, + +00:03:42.971 --> 00:03:45.920 +this one is a hyperlink + +00:03:45.920 --> 00:03:46.959 +to the result + +00:03:46.959 --> 00:03:50.720 +of running this show comment date, + +00:03:50.720 --> 00:03:52.623 +but instead of showing the result + +00:03:52.623 --> 00:03:53.767 +in the new buffer, + +00:03:53.767 --> 00:03:55.475 +the result is shown +here. + +00:03:55.475 --> 00:03:58.959 +So, if I execute this hyperlink, + +00:03:58.959 --> 00:04:01.634 +the result of date, the output of date, + +00:04:01.634 --> 00:04:03.339 +is shown in the echo area. + +00:04:03.339 --> 00:04:07.120 +And if executed again, + +00:04:07.120 --> 00:04:08.673 +it shows the result again, + +00:04:08.673 --> 00:04:09.519 +and the result + +00:04:09.519 --> 00:04:11.519 +changes every second. + +00:04:11.519 --> 00:04:18.720 +So this is a variant of find-sh. + +00:04:18.720 --> 00:04:21.840 +find-sh0 is the variant that + +00:04:21.840 --> 00:04:24.960 +just shows the output in the echo area, + +00:04:24.960 --> 00:04:28.080 +and find-sh shows the output in + +00:04:28.080 --> 00:04:31.759 +a new buffer. + +00:04:31.759 --> 00:04:35.919 +Here is an example of a hyperlink + +00:04:35.919 --> 00:04:39.173 +that calls an external program. + +00:04:39.173 --> 00:04:41.280 +If I execute this, + +00:04:41.280 --> 00:04:43.604 +it calls Google Chrome to open + +00:04:43.604 --> 00:04:46.639 +a certain URL. + +00:04:46.639 --> 00:04:51.520 +Here it is. Let's go back to Emacs. + +00:04:51.520 --> 00:04:55.280 +If I execute this hyperlink here, + +00:04:55.280 --> 00:04:57.986 +it invokes my favorite PDF viewer + +00:04:57.986 --> 00:05:02.560 +which is xpdf. It makes xpdf + +00:05:02.560 --> 00:05:07.759 +open this PDF page. It is PDF + +00:05:07.759 --> 00:05:10.880 +in this page, and these other arguments + +00:05:10.880 --> 00:05:15.199 +are ignored. Let me show how it works. + +00:05:15.199 --> 00:05:20.160 +Here it is. This is an excerpt from a +book. + +00:05:20.160 --> 00:05:22.639 +So page 3 in the pdf corresponds to + +00:05:22.639 --> 00:05:26.400 +page 113 in the book. + +00:05:26.400 --> 00:05:29.360 +This variant here of the hyperlink above, + +00:05:29.360 --> 00:05:31.759 +it opens the PDF in a different way. + +00:05:31.759 --> 00:05:34.560 +It runs a program called pdftotext on + +00:05:34.560 --> 00:05:36.479 +this PDF here, + +00:05:36.479 --> 00:05:39.600 +and Emacs takes the output of + +00:05:39.600 --> 00:05:42.880 +running pdftotext on this pdf here + +00:05:42.880 --> 00:05:45.301 +and displays it in a buffer. + +00:05:45.301 --> 00:05:47.280 +Now this postback list + +00:05:47.280 --> 00:05:49.651 +is interpreted in a different way. + +00:05:49.651 --> 00:05:51.280 +This thing is interpreted + +00:05:51.280 --> 00:05:53.425 +as a number of a page, + +00:05:53.425 --> 00:05:55.548 +and Emacs goes to page three + +00:05:55.548 --> 00:05:57.520 +by counting form feeds in + +00:05:57.520 --> 00:06:00.370 +the converted version of the PDF + +00:06:00.370 --> 00:06:03.039 +and then it searches for this string. + +00:06:03.039 --> 00:06:06.319 +and in this three... So let's execute this + +00:06:06.319 --> 00:06:09.169 +to see what happens. +Here it is. + +00:06:09.169 --> 00:06:14.800 +I opened the same page +as before. + +00:06:14.800 --> 00:06:18.400 +It starts with lecture one. + +00:06:18.400 --> 00:06:20.720 +So the other hyperlink searched for this + +00:06:20.720 --> 00:06:25.520 +string and for this string here. + +00:06:25.520 --> 00:06:30.400 +This thing here is a hyperlink +to video, + +00:06:30.400 --> 00:06:31.644 +and when I execute it, + +00:06:31.644 --> 00:06:34.560 +it's going to open this video here + +00:06:34.560 --> 00:06:37.759 +at this timestamp. Let's see. + +00:06:37.759 --> 00:06:49.440 +1, 2, 3. 1, 2, 3. +That's the way to do it. + +00:06:49.440 --> 00:06:51.956 +And also some hyperlinks + +00:06:51.956 --> 00:06:53.680 +that I defined, + +00:06:53.680 --> 00:06:55.940 +they don't work like + +00:06:55.940 --> 00:06:58.160 +usual hyperlinks. They work more + +00:06:58.160 --> 00:07:01.440 +like browser buttons, + +00:07:01.440 --> 00:07:06.240 +these buttons that appear in web pages, + +00:07:06.240 --> 00:07:09.120 +in the sense that these buttons usually + +00:07:09.120 --> 00:07:11.360 +don't open a new page. They usually + +00:07:11.360 --> 00:07:14.960 +just do something to change +the current page. + +00:07:14.960 --> 00:07:17.312 +If I execute this, the action + +00:07:17.312 --> 00:07:22.240 +of this function eek is to... + +00:07:22.240 --> 00:07:25.423 +It interprets this string +as a series of keys + +00:07:25.423 --> 00:07:30.051 +and it acts as if the user had +typed all these keys. + +00:07:30.051 --> 00:07:32.706 +So if executed, I get a hello + +00:07:32.706 --> 00:07:34.400 +in the next line. + +00:07:34.400 --> 00:07:36.639 +If executed again, I get another hello. + +00:07:36.639 --> 00:07:39.440 +Another hello. hello. hello. etc. etc. + +00:07:39.440 --> 00:07:44.319 +Let me undo this mess. Oops. + +00:07:44.319 --> 00:07:47.840 +And here is another kind of button + +00:07:47.840 --> 00:07:51.440 +that defines a new function. If I execute + +00:07:51.440 --> 00:07:54.879 +this sexp here, at this moment, though it's + +00:07:54.879 --> 00:07:55.759 +not defined. + +00:07:55.759 --> 00:07:57.919 +And if I execute this, Emacs is going to + +00:07:57.919 --> 00:08:00.000 +show me a message saying + +00:08:00.000 --> 00:08:03.599 +symbol as function cell is not defined, + +00:08:03.599 --> 00:08:05.840 +something like this. + +00:08:05.840 --> 00:08:09.520 +But if I execute the defun, + +00:08:09.520 --> 00:08:12.960 +the action of this function o here + +00:08:12.960 --> 00:08:18.960 +is to run this, which opens a certain +directory. + +00:08:18.960 --> 00:08:21.840 +Let me go back. Here is another + +00:08:21.840 --> 00:08:23.039 +button that defines + +00:08:23.039 --> 00:08:25.489 +several functions at the same time. + +00:08:25.489 --> 00:08:32.320 +If I execute this, + +00:08:32.320 --> 00:08:34.561 +note that the the result of + +00:08:34.561 --> 00:08:36.719 +executing this expression + +00:08:36.719 --> 00:08:38.447 +is the name of one of the functions + +00:08:38.447 --> 00:08:40.080 +that it defined. + +00:08:40.080 --> 00:08:42.800 +That is this one here. Let me explain + +00:08:42.800 --> 00:08:46.959 +these examples. One of the functions + +00:08:46.959 --> 00:08:48.800 +that this thing here defined + +00:08:48.800 --> 00:08:51.839 +is called find-orggitfile, where + +00:08:51.839 --> 00:08:54.640 +this orggit in the middle of its name + +00:08:54.640 --> 00:08:59.600 +is exactly this first argument to +code-c-d. + +00:08:59.600 --> 00:09:03.120 +The action of running find-orggitfile + +00:09:03.120 --> 00:09:06.399 +on a string like this is that + +00:09:06.399 --> 00:09:09.680 +find-orggitfile takes the string + +00:09:09.680 --> 00:09:13.360 +and prepends this string to it, + +00:09:13.360 --> 00:09:15.600 +this one here which is the second + +00:09:15.600 --> 00:09:17.920 +argument to code-c-d, + +00:09:17.920 --> 00:09:21.760 +and then it executes find-fline + +00:09:21.760 --> 00:09:25.680 +on the result, which is this one. + +00:09:25.680 --> 00:09:28.320 +find-fline is my variant of find-file + +00:09:28.800 --> 00:09:32.080 +that supports both spec lists. + +00:09:32.080 --> 00:09:36.880 +This function here that I'm + +00:09:36.880 --> 00:09:38.538 +referring to as a button, + +00:09:38.538 --> 00:09:41.200 +it also defines a function called + +00:09:41.200 --> 00:09:44.880 +find-orggitnode here, where the orggit + +00:09:44.880 --> 00:09:46.839 +is the same string as here. + +00:09:46.839 --> 00:09:50.320 +This function opens a node + +00:09:50.320 --> 00:09:54.160 +of an info manual. This one, + +00:09:54.160 --> 00:09:57.310 +this text here opens this node + +00:09:57.310 --> 00:10:00.080 +in the Org manual. + +00:10:00.080 --> 00:10:03.519 +It is equivalent to this text here. + +00:10:03.519 --> 00:10:06.225 +So in the passage from this line + +00:10:06.225 --> 00:10:08.720 +to this line, we prepended + +00:10:08.720 --> 00:10:12.310 +to the node name the name of +the manual here. + +00:10:12.310 --> 00:10:15.040 +find-node is my variant + +00:10:15.040 --> 00:10:18.160 +of this standard Emacs function here, + +00:10:18.160 --> 00:10:20.119 +but find-node also supports + +00:10:20.119 --> 00:10:23.519 +postback lists. + +00:10:23.519 --> 00:10:26.640 +eev also defines some functions that + +00:10:26.640 --> 00:10:28.423 +define shorter hyperlinks to PDFs + +00:10:28.423 --> 00:10:30.800 +and videos. + +00:10:30.800 --> 00:10:32.574 +Remember that this thing here + +00:10:32.574 --> 00:10:34.322 +is a shorter hyperlink + +00:10:34.322 --> 00:10:36.668 +to a file. This thing here + +00:10:36.668 --> 00:10:39.040 +is a shorter hyperlink to a node + +00:10:39.040 --> 00:10:43.200 +in an Emacs menu in an info manual. + +00:10:43.200 --> 00:10:47.279 +If we run this thing here, this +code-pdf-page, + +00:10:47.279 --> 00:10:50.240 +this acts like a button that defines a + +00:10:50.240 --> 00:10:52.880 +certain function + +00:10:52.880 --> 00:10:56.669 +and this string, +this other sexp here, + +00:10:56.669 --> 00:10:58.430 +defines another function. + +00:10:58.430 --> 00:11:00.240 +The first one defines + +00:11:00.240 --> 00:11:02.745 +the function find-fongspivak-page, + +00:11:02.745 --> 00:11:05.360 +and the second one defines the +function find-fongspivak-text. + +00:11:05.360 --> 00:11:09.608 +When we run the file, + +00:11:09.608 --> 00:11:12.020 +when we run find-fongspivak-page, + +00:11:12.020 --> 00:11:15.686 +it opens this PDF here. + +00:11:15.686 --> 00:11:20.640 +The name is quite long. + +00:11:20.640 --> 00:11:23.839 +This example opens this PDF at page 8 + +00:11:23.839 --> 00:11:26.079 +and searches for the string contents. + +00:11:26.079 --> 00:11:31.279 +In this case, it just ignores +this string. + +00:11:31.279 --> 00:11:33.519 +Here it only considers + +00:11:33.519 --> 00:11:37.360 +the number of the page. Let's try. + +00:11:42.640 --> 00:11:45.200 +Here it is, the contents of a book + +00:11:45.200 --> 00:11:51.760 +that is freely available. Here is +another page of the book. + +00:11:51.760 --> 00:11:55.519 +And if we execute this +hyperlink here, + +00:11:55.519 --> 00:11:58.399 +find-fongspivak-text, it converts the + +00:11:58.399 --> 00:11:59.920 +PDF to text + +00:11:59.920 --> 00:12:03.382 +and it searches for +page eight in it, + +00:12:03.382 --> 00:12:04.754 +and then for the string, + +00:12:04.754 --> 00:12:08.079 +this string here in page eight. + +00:12:08.079 --> 00:12:12.240 +It takes a few seconds. + +00:12:12.240 --> 00:12:16.160 +Here it is. So this is the + +00:12:16.160 --> 00:12:20.892 +ASCII version of this contents page +here. + +00:12:20.892 --> 00:12:25.040 +Note that this block here + +00:12:25.040 --> 00:12:28.800 +is a kind of an index to that book. + +00:12:28.800 --> 00:12:31.360 +I have the full index somewhere, + +00:12:31.360 --> 00:12:32.506 +but it's very long, + +00:12:32.506 --> 00:12:34.959 +so I just copied a few lines here. + +00:12:34.959 --> 00:12:38.959 +So this is a link to s + +00:12:38.959 --> 00:12:42.160 +section one, chapter one. This is the + +00:12:42.160 --> 00:12:48.959 +section 1.1, section 1.1.1, and so on. + +00:12:48.959 --> 00:12:54.000 +Here is a link to the index. + +00:12:54.000 --> 00:12:58.079 +Here is a part of my index + +00:12:58.079 --> 00:13:03.279 +of positions in the video +that we just saw + +00:13:03.279 --> 00:13:07.360 +that I think that are especially +relevant. + +00:13:07.360 --> 00:13:11.940 +So this hyperlink is a kind +of a button + +00:13:11.940 --> 00:13:14.160 +that defines this function here, + +00:13:14.160 --> 00:13:18.839 +find-punchandjudyvideo. Into the video. + +00:13:27.600 --> 00:13:30.800 +We can also use this for + +00:13:30.800 --> 00:13:33.360 +video tutorials. For example, + +00:13:33.360 --> 00:13:37.200 +this is a very good tutorial on Magit. + +00:13:37.200 --> 00:13:40.880 +If we execute this, + +00:13:40.880 --> 00:13:42.560 +then these functions are going to be + +00:13:42.560 --> 00:13:44.800 +defined, and these functions open + +00:13:44.800 --> 00:13:48.399 +this tutorial on Magit. + +00:13:48.399 --> 00:13:50.079 +These are some of the positions in the + +00:13:50.079 --> 00:13:52.904 +tutorial that I found +especially relevant. + +00:13:52.904 --> 00:13:54.408 +This is a very dense tutorial. + +00:13:54.408 --> 00:13:56.480 +I had to take notes +of everything, + +00:13:56.480 --> 00:13:59.040 +and I had to watch everything + +00:13:59.040 --> 00:14:00.800 +several times. + +00:14:00.800 --> 00:14:02.896 +For example, this is a link + +00:14:02.896 --> 00:14:05.444 +to the position in the tutorial + +00:14:05.444 --> 00:14:11.005 +that explains how in Spacemacs, + +00:14:11.005 --> 00:14:17.600 +Magit interprets SPC g s as magit-status. + +00:14:17.600 --> 00:14:20.480 +Let's see. "...beginners. +SPC g s to initiate + +00:14:20.480 --> 00:14:22.320 +Magit's git status. + +00:14:22.320 --> 00:14:25.600 +You can also do..." That's it. + +00:14:25.600 --> 00:14:28.800 +Here are some examples that I + +00:14:28.800 --> 00:14:31.200 +took from somewhere else. + +00:14:31.200 --> 00:14:34.240 +The video tutorials from + +00:14:34.240 --> 00:14:43.519 +Rainer Koenig about Org Mode. + +00:14:43.519 --> 00:14:45.308 +Now let me show how the functions + +00:14:45.308 --> 00:14:47.220 +that define these shorter hyperlinks + +00:14:47.220 --> 00:14:48.720 +are implemented. + +00:14:48.720 --> 00:14:50.509 +The standard ways in Emacs + +00:14:50.509 --> 00:14:53.741 +to define functions that define +other functions + +00:14:53.741 --> 00:14:55.760 +would be with macros. + +00:14:55.760 --> 00:14:58.320 +Let's see an example. This is a standard + +00:14:58.320 --> 00:15:01.540 +function that defines new functions. + +00:15:02.959 --> 00:15:06.959 +If we execute it, + +00:15:06.959 --> 00:15:09.040 +its result is the last function that it + +00:15:09.040 --> 00:15:11.527 +defined, which is ee-glyph, + +00:15:11.527 --> 00:15:13.920 +which is here. + +00:15:13.920 --> 00:15:16.959 +It's implemented as a macro. We can + +00:15:16.959 --> 00:15:20.880 +look at the result of macro-expand, +which is going to + +00:15:20.880 --> 00:15:22.975 +show us the result of this, + +00:15:22.975 --> 00:15:25.519 +of the expansion of this. + +00:15:25.519 --> 00:15:27.804 +Instead of expanding and executing, + +00:15:27.804 --> 00:15:33.199 +it just expands and shows us the result. + +00:15:33.199 --> 00:15:35.439 +Here the result is a bit messy. + +00:15:35.439 --> 00:15:39.396 +It's too big for humans to understand, + +00:15:39.396 --> 00:15:42.894 +but we can run this or this text here. + +00:15:42.894 --> 00:15:47.519 +That takes that result +and pretty-prints it. + +00:15:47.519 --> 00:15:50.701 +So this is the pretty-printed version + +00:15:50.701 --> 00:15:54.000 +of this macro here. + +00:15:54.000 --> 00:15:57.600 +We can see that it defines + +00:15:57.600 --> 00:16:01.120 +several functions here. + +00:16:01.120 --> 00:16:06.399 +For example, this one. + +00:16:06.399 --> 00:16:09.360 +And this, just as a curiosity, is a link + +00:16:09.360 --> 00:16:13.839 +to the definition of cl-defstruct. + +00:16:13.839 --> 00:16:16.880 +Note that the code is huge. + +00:16:16.880 --> 00:16:18.677 +Well, it's very well-commented, + +00:16:18.677 --> 00:16:22.577 +but it has lots of special cases. + +00:16:22.577 --> 00:16:26.210 +It supports lots of constructions, + +00:16:26.210 --> 00:16:27.920 +and so it's huge. + +00:16:27.920 --> 00:16:30.174 +It's very difficult to understand. + +00:16:30.174 --> 00:16:33.360 +I mean, I found it very difficult +to understand. + +00:16:33.360 --> 00:16:35.040 +Here's a link to document the + +00:16:35.040 --> 00:16:37.759 +documentation of cl-defstruct + +00:16:37.759 --> 00:16:42.210 +here in the manual for cl, + +00:16:42.210 --> 00:16:45.025 +which is a kind of support + +00:16:45.025 --> 00:16:50.480 +for some features of Common Lisp +in Emacs. + +00:16:50.480 --> 00:16:53.825 +So let's compare this standard way of + +00:16:53.825 --> 00:16:56.560 +defining functions that +define new functions, + +00:16:56.560 --> 00:16:59.253 +which is with macros, +with this. + +00:16:59.253 --> 00:17:02.300 +I'm going to use a slogan +repeatedly. + +00:17:02.300 --> 00:17:06.319 +The slogan is: "I am a very bad +programmer." + +00:17:06.319 --> 00:17:08.005 +I'm a very bad programmer. + +00:17:08.005 --> 00:17:10.082 +So, when I was trying to create +functions + +00:17:10.082 --> 00:17:12.240 +that would define new functions, + +00:17:12.240 --> 00:17:14.480 +I found it easier to generally generate + +00:17:14.480 --> 00:17:16.400 +this code as text, + +00:17:16.400 --> 00:17:20.559 +and then run read and eval in it. + +00:17:20.559 --> 00:17:24.640 +The code-c-d that we saw +in the previous section, + +00:17:24.640 --> 00:17:28.079 +we can see the code that it produces + +00:17:28.079 --> 00:17:30.769 +by making a copy of this line + +00:17:30.769 --> 00:17:32.579 +and prepending this string here + +00:17:32.579 --> 00:17:34.480 +to the name of the function. + +00:17:34.480 --> 00:17:36.317 +So, instead of running code-c-d, + +00:17:36.317 --> 00:17:38.400 +we run find-code-cd, + +00:17:38.400 --> 00:17:41.280 +and it creates a new temporary buffer + +00:17:41.280 --> 00:17:44.400 +with the code that + +00:17:44.400 --> 00:17:47.760 +code-c-d would execute. + +00:17:47.760 --> 00:17:54.080 +So it's a series of the defuns +and a few setqs and so on. + +00:17:54.080 --> 00:17:59.120 +And this thing is implemented mostly as +a template. + +00:18:02.160 --> 00:18:04.045 +There's an inner function called + +00:18:04.045 --> 00:18:06.240 +ee-code-c-d-base that receives just + +00:18:06.240 --> 00:18:08.799 +these two arguments, and it says... + +00:18:08.799 --> 00:18:10.640 +Essentially, it just runs the function + +00:18:10.640 --> 00:18:14.320 +ee-template0 on the string here, and + +00:18:14.320 --> 00:18:16.480 +the things between curly braces are + +00:18:16.480 --> 00:18:18.559 +substituted by the values + +00:18:18.559 --> 00:18:23.600 +of these arguments here. + +00:18:23.600 --> 00:18:25.919 +There's one part of the tutorial here + +00:18:25.919 --> 00:18:28.480 +that explains all these things, + +00:18:28.480 --> 00:18:31.039 +except for the rationale for some + +00:18:31.039 --> 00:18:32.559 +design decisions, + +00:18:32.559 --> 00:18:35.360 +and those design decisions are one of + +00:18:35.360 --> 00:18:37.280 +the many motivations for this talk. + +00:18:37.760 --> 00:18:39.679 +I'm only going to explain these + +00:18:39.679 --> 00:18:42.640 +things in detail at the end, + +00:18:42.640 --> 00:18:48.480 +which is kind of... + +00:18:48.480 --> 00:18:49.662 +So in the beginning, I said + +00:18:49.662 --> 00:18:51.600 +that the three main keys of eev + +00:18:51.600 --> 00:18:56.000 +are M-e, M-k and M-j. + +00:18:56.000 --> 00:19:00.080 +Let's see now what M-j does. + +00:19:00.080 --> 00:19:02.447 +I need to start with some +motivation. + +00:19:02.447 --> 00:19:04.640 +The motivation is that we + +00:19:04.640 --> 00:19:06.559 +can define commands with very short + +00:19:06.559 --> 00:19:08.240 +names. Actually, I became kind of + +00:19:08.240 --> 00:19:10.160 +addicted to that. + +00:19:10.160 --> 00:19:13.200 +This is an example of defun that + +00:19:13.200 --> 00:19:15.600 +defines a comment with a very short name. + +00:19:15.600 --> 00:19:18.000 +Its name is just one letter, "e." + +00:19:18.000 --> 00:19:20.530 +and I can invoke... You invoke it + +00:19:20.530 --> 00:19:21.856 +with M-x e. + +00:19:21.856 --> 00:19:24.720 +If I type M-x p, + +00:19:24.720 --> 00:19:26.661 +now it opens a LaTeX file + +00:19:26.661 --> 00:19:31.130 +that I'm working on. + +00:19:32.559 --> 00:19:35.200 +I create most of my LaTeX files + +00:19:35.200 --> 00:19:39.200 +using template-based functions like + +00:19:39.200 --> 00:19:43.760 +the implementation of code-c-d above. + +00:19:43.760 --> 00:19:45.576 +These template-based functions + +00:19:45.576 --> 00:19:49.280 +create files with extension .tex + +00:19:49.280 --> 00:19:51.280 +that start with a series of defuns + +00:19:51.280 --> 00:19:53.919 +in comments. For example, + +00:19:53.919 --> 00:19:55.926 +let's look at this example here. + +00:19:55.926 --> 00:19:58.049 +If I execute find-latex-links + +00:19:58.049 --> 00:19:59.440 +with this argument, + +00:19:59.440 --> 00:20:02.525 +it's going to do several things + +00:20:02.525 --> 00:20:08.320 +for creating a file called /tmp/foo.tex, + +00:20:08.320 --> 00:20:10.387 +and the header of that file + +00:20:10.387 --> 00:20:12.400 +is going to be this, + +00:20:12.400 --> 00:20:16.080 +which starts with three + +00:20:16.080 --> 00:20:19.280 +defuns with functions with very short + +00:20:19.280 --> 00:20:21.919 +names and comments. + +00:20:21.919 --> 00:20:27.520 +Let's compare with the situation here. + +00:20:27.520 --> 00:20:32.799 +In my file, 2020favorite-conventions.tex, + +00:20:32.799 --> 00:20:34.640 +I have this header here in which I + +00:20:34.640 --> 00:20:39.360 +define six functions with +very short names. + +00:20:39.360 --> 00:20:41.919 +And in this case here, that is even + +00:20:41.919 --> 00:20:44.799 +explained in the tutorial. + +00:20:44.799 --> 00:20:48.000 +These... We have mnemonics for + +00:20:48.000 --> 00:20:51.520 +these short names here. c is compile, + +00:20:51.520 --> 00:20:54.799 +d is display. I mean, display the PDF. + +00:20:54.799 --> 00:20:57.377 +e is added in the sense of + +00:20:57.377 --> 00:21:02.320 +make Emacs visit that file. + +00:21:02.320 --> 00:21:06.480 +Now I can explain what is M-j +itself. + +00:21:06.480 --> 00:21:09.600 +We just saw commands with +very short names. + +00:21:09.600 --> 00:21:12.048 +The idea behind M-j is that + +00:21:12.048 --> 00:21:14.031 +we can define commands with + +00:21:14.031 --> 00:21:16.480 +very short numbers. + +00:21:16.480 --> 00:21:19.679 +Let me explain this. + +00:21:19.679 --> 00:21:23.039 +The short explanation +for what M-j does + +00:21:23.039 --> 00:21:25.360 +is that it jumps to set certain + +00:21:25.360 --> 00:21:27.039 +predefined places. + +00:21:27.039 --> 00:21:30.799 +In particular, a M-j without +a numeric argument + +00:21:30.799 --> 00:21:32.216 +takes us to a buffer + +00:21:32.216 --> 00:21:34.080 +with the basic help + +00:21:34.080 --> 00:21:37.679 +and a list of the current jump targets. + +00:21:37.679 --> 00:21:39.760 +This is something that is a bit + +00:21:39.760 --> 00:21:41.520 +simpler to understand. + +00:21:41.520 --> 00:21:44.559 +If we type M-5 M-j, + +00:21:44.559 --> 00:21:48.411 +then M-j runs this sexp here + +00:21:48.411 --> 00:21:51.120 +that is associated to + +00:21:51.120 --> 00:21:55.440 +the argument 5. I say that the target + +00:21:55.440 --> 00:21:59.039 +for the argument 5 is this one, + +00:21:59.039 --> 00:22:01.520 +and if the argument is true, then the + +00:22:01.520 --> 00:22:03.760 +target associated to the true + +00:22:03.760 --> 00:22:07.039 +is this sexp here that opens... + +00:22:07.039 --> 00:22:09.600 +This one opens the main tutorial +for eev, + +00:22:09.600 --> 00:22:13.679 +and this one opens another tutorial. + +00:22:13.679 --> 00:22:15.679 +This is a link to one of the tutorials + +00:22:15.679 --> 00:22:20.480 +of eev to the part that explains M-j. + +00:22:20.480 --> 00:22:22.212 +I've copied the the main part + +00:22:22.212 --> 00:22:24.559 +of the text here. + +00:22:24.559 --> 00:22:28.159 +The header that M-j shows... + +00:22:28.159 --> 00:22:31.360 +Let me show it very quickly here. + +00:22:31.360 --> 00:22:36.320 +Here is their head and +here is the rest. + +00:22:36.320 --> 00:22:38.773 +The header is very beginner friendly, + +00:22:38.773 --> 00:22:40.000 +and if you're a beginner + +00:22:40.000 --> 00:22:42.159 +who only knows how to use M-e to + +00:22:42.159 --> 00:22:44.559 +execute and... + +00:22:44.559 --> 00:22:46.706 +This should be okay. + +00:22:46.706 --> 00:22:48.240 +M-k to go back. + +00:22:48.240 --> 00:22:52.320 +Then you can and should use that header-- + +00:22:52.320 --> 00:22:56.720 +I mean, this header here-- + +00:22:56.720 --> 00:22:58.894 +as your main starting point. + +00:22:58.894 --> 00:23:00.799 +Every time that you feel lost, + +00:23:00.799 --> 00:23:04.799 +you can type M-j to go back to +that header, + +00:23:04.799 --> 00:23:08.000 +and you can use its links to +navigate to the documentation + +00:23:08.000 --> 00:23:11.360 +for Emacs and eev. Let me explain that. + +00:23:11.360 --> 00:23:15.679 +This header here has several elisp +hyperlinks. + +00:23:15.679 --> 00:23:22.400 +One here, one here, one here, +one here, and so on. + +00:23:22.400 --> 00:23:25.760 +These ones are links to the + +00:23:25.760 --> 00:23:29.280 +to the intros, which are the tutorials. + +00:23:29.280 --> 00:23:31.520 +find-eev-quick-intro is the +main tutorial, + +00:23:31.520 --> 00:23:35.760 +and find-emacs-keys-intro is a +kind of tutorial that is + +00:23:35.760 --> 00:23:40.000 +an index of the main keys. + +00:23:40.000 --> 00:23:42.559 +After that, we have an explanation of + +00:23:42.559 --> 00:23:45.449 +what some numeric prefixes do. + +00:23:45.449 --> 00:23:49.913 +So if we type M-1 M-j, +the effect of that + +00:23:49.913 --> 00:23:53.200 +is exactly the same as +executing this. + +00:23:53.200 --> 00:24:00.159 +We can execute this with M-e also. + +00:24:00.159 --> 00:24:03.679 +M-2 M-j runs this sexp and + +00:24:03.679 --> 00:24:06.960 +I can also execute it with M-e. + +00:24:06.960 --> 00:24:18.400 +Here it is. It's this intro, this +sandbox tutorial. + +00:24:18.400 --> 00:24:24.640 +Here is another sandbox tutorial. + +00:24:24.640 --> 00:24:27.039 +Let me go back. Then the + +00:24:27.039 --> 00:24:29.388 +documentation says that header, + +00:24:29.388 --> 00:24:31.760 +the header that is beginner-friendly + +00:24:31.760 --> 00:24:33.679 +is followed by a section that is very + +00:24:33.679 --> 00:24:35.520 +beginner-unfriendly + +00:24:35.520 --> 00:24:40.400 +that contains a series of defuns +like these ones. + +00:24:40.400 --> 00:24:44.640 +Here, the last line of the header is +this comment here. + +00:24:44.640 --> 00:24:48.559 +Then we have several defuns like this. + +00:24:48.559 --> 00:24:51.440 +Let me explain how these things work. + +00:24:51.440 --> 00:24:53.082 +Technically, what happens + +00:24:53.082 --> 00:24:56.399 +when we type M-j without any arguments + +00:24:56.399 --> 00:25:00.230 +is that it runs eejump with argument nil, + +00:25:00.230 --> 00:25:04.640 +and then this runs 5 eejumps. + +00:25:04.640 --> 00:25:07.224 +When I run M-j with a numeric argument, + +00:25:07.224 --> 00:25:13.374 +for example, with argument 5, +it runs a jump 5. + +00:25:13.374 --> 00:25:17.679 +eejump-5 concatenates this 5 one + +00:25:17.679 --> 00:25:19.999 +to make a name of a function, + +00:25:19.999 --> 00:25:21.679 +this function here. + +00:25:21.679 --> 00:25:24.720 +and it executes this function +eejump-5. + +00:25:24.720 --> 00:25:31.919 +You jump -5, and eejump-5 + +00:25:31.919 --> 00:25:35.520 +executes find-eev-quick-intro. + +00:25:35.520 --> 00:25:39.360 +If I execute just M-j, + +00:25:39.360 --> 00:25:40.533 +the section that shows + +00:25:40.533 --> 00:25:43.919 +the current jump targets + +00:25:43.919 --> 00:25:46.719 +has a line for eejump-5. This is... + +00:25:46.719 --> 00:25:52.400 +That is exactly the thing +that I was explaining before. + +00:25:52.400 --> 00:25:54.544 +So we can use M-j to navigate + +00:25:54.544 --> 00:25:59.520 +the tutorials. We can copy the links. + +00:25:59.520 --> 00:26:03.440 +Sorry. We can copy links to the + +00:26:03.440 --> 00:26:07.919 +tutorials to our notes. + +00:26:07.919 --> 00:26:11.840 +Oh, sorry, this has some typos. + +00:26:11.840 --> 00:26:14.880 +For example, if I execute this, + +00:26:14.880 --> 00:26:18.080 +I go to a section of this tutorial here + +00:26:18.080 --> 00:26:20.640 +that explains the main keys of eev. + +00:26:20.640 --> 00:26:23.670 +These things are hyperlinks. + +00:26:23.670 --> 00:26:25.597 +I can mark a hyperlink like this. + +00:26:25.597 --> 00:26:27.286 +it is just plain text. + +00:26:27.286 --> 00:26:29.525 +I can copy it to my notes. + +00:26:29.525 --> 00:26:31.760 +The idea is that every time + +00:26:31.760 --> 00:26:34.016 +that I find something that is +interesting, + +00:26:34.016 --> 00:26:36.240 +I can create a hyperlink to it. + +00:26:36.240 --> 00:26:38.513 +I can put these links in my notes + +00:26:38.513 --> 00:26:40.799 +so I can navigate back + +00:26:40.799 --> 00:26:42.667 +to all the interesting positions + +00:26:42.667 --> 00:26:48.799 +very quickly. + +00:26:48.799 --> 00:26:57.600 +Okay, next feature. +If we type M-J (uppercase), then + +00:26:57.600 --> 00:27:00.080 +this is a function that transforms + +00:27:00.080 --> 00:27:03.679 +the current line in a certain way. + +00:27:03.679 --> 00:27:06.471 +Let me give an example. +Let me isolate this. + +00:27:06.471 --> 00:27:11.039 +Let me duplicate this line +to make clear what happens. + +00:27:11.039 --> 00:27:14.240 +If I type M-J (uppercase) here, + +00:27:14.240 --> 00:27:17.561 +this line here becomes +the defun for eejump-6, + +00:27:17.561 --> 00:27:21.200 +and the target of this eejump + +00:27:21.200 --> 00:27:24.799 +is exactly this sexp here. + +00:27:24.799 --> 00:27:28.559 +Let me undo this mess. + +00:27:28.559 --> 00:27:30.815 +If the first word in the line + +00:27:30.815 --> 00:27:32.840 +is not a number... For example, + +00:27:32.840 --> 00:27:36.240 +here, let me do the same thing: + +00:27:36.240 --> 00:27:41.200 +duplicate the line and type M-J, + +00:27:41.200 --> 00:27:44.014 +then M-J (uppercase) converts that to + +00:27:44.014 --> 00:27:49.440 +a defun that defines a function +with a very short name. + +00:27:49.440 --> 00:27:52.720 +This function with a very short name + +00:27:52.720 --> 00:27:56.720 +opens this file here in the directory + +00:27:56.720 --> 00:27:59.360 +with the copy of the git repository + +00:27:59.360 --> 00:28:01.360 +for Org Mode. + +00:28:01.360 --> 00:28:05.360 +Let me undo the mess again. + +00:28:05.360 --> 00:28:14.640 +Oops. That's it. + +00:28:14.640 --> 00:28:21.279 +M-J (uppercase) is a particular case +of something that + +00:28:21.279 --> 00:28:23.708 +I use a lot in eev. + +00:28:23.708 --> 00:28:28.799 +eev has lots of commands that-- +sorry, key sequences + +00:28:28.799 --> 00:28:31.466 +that are like M- uppercase letter, + +00:28:31.466 --> 00:28:34.660 +and almost all of them operate + +00:28:34.660 --> 00:28:36.019 +on the current line and + +00:28:36.019 --> 00:28:37.616 +transform the current line + +00:28:37.616 --> 00:28:38.880 +in a certain way. + +00:28:38.880 --> 00:28:42.000 +For example, this is a filename. + +00:28:42.000 --> 00:28:45.360 +If I type M-F (uppercase) here, + +00:28:45.360 --> 00:28:47.967 +it becomes a link to that file. + +00:28:47.967 --> 00:28:50.000 +This is the name of a man page. + +00:28:50.000 --> 00:28:53.600 +If I type M-M (uppercase) here, + +00:28:53.600 --> 00:28:55.292 +it converts that to the link + +00:28:55.292 --> 00:28:58.080 +to a manpage. This is a shell command. + +00:28:58.080 --> 00:29:01.679 +If I type M-S (uppercase) here, + +00:29:01.679 --> 00:29:04.960 +it converts that to a link to a + +00:29:04.960 --> 00:29:08.720 +to find-sh (shell). + +00:29:08.720 --> 00:29:12.960 +Until a few years ago, +these functions + +00:29:12.960 --> 00:29:16.159 +with M- uppercase letter were half + +00:29:16.159 --> 00:29:18.880 +of my main ways of creating +sexp hyperlinks + +00:29:18.880 --> 00:29:20.085 +with a few key strokes. + +00:29:20.085 --> 00:29:22.399 +In the beginning, of course, +I had to create my + +00:29:22.399 --> 00:29:25.600 +sexp pipelines by typing each character. + +00:29:25.600 --> 00:29:28.640 +But after some time, I decided that + +00:29:28.640 --> 00:29:31.520 +I needed something more efficient. + +00:29:31.520 --> 00:29:38.480 +So this is the end of part one +of the presentation. + +00:29:38.480 --> 00:29:40.640 +So this is part two of the presentation, + +00:29:40.640 --> 00:29:42.070 +and the main theme here + +00:29:42.070 --> 00:29:44.320 +is the standard describe-key + +00:29:44.320 --> 00:29:46.320 +function that comes with Emacs. + +00:29:46.320 --> 00:29:49.200 +My variant of it... The thing is that + +00:29:49.200 --> 00:29:50.960 +the standard describe-key in Emacs + +00:29:50.960 --> 00:29:52.738 +is user-friendly, but it is + +00:29:52.738 --> 00:29:55.600 +hacker-unfriendly. Well, I felt so. + +00:29:55.600 --> 00:29:58.281 +When I tried to complement it + +00:29:58.281 --> 00:30:00.799 +by writing a hacker-friendly +version of it + +00:30:00.799 --> 00:30:03.919 +that produced the sexp hyperlinks +that I needed, + +00:30:03.919 --> 00:30:06.457 +I got something that +I found really lovely. + +00:30:07.039 --> 00:30:08.994 +Several of the main + +00:30:08.994 --> 00:30:12.480 +design decisions of eev can be seen there. + +00:30:12.480 --> 00:30:13.995 +When I showed my variants to + +00:30:13.995 --> 00:30:15.520 +other people, they hated it. + +00:30:15.520 --> 00:30:16.851 +They felt that it was + +00:30:16.851 --> 00:30:19.360 +totally against their notions of + +00:30:19.360 --> 00:30:23.440 +user-friendliness. + +00:30:23.440 --> 00:30:24.606 +Okay. So let's see. + +00:30:24.606 --> 00:30:26.297 +The standard describe-key, + +00:30:26.297 --> 00:30:30.401 +if I run this hyperlink here, +I get this. + +00:30:30.401 --> 00:30:31.866 +The result of running + +00:30:31.866 --> 00:30:34.399 +describe-key on the key down... + +00:30:34.399 --> 00:30:35.799 +This is a big buffer + +00:30:35.799 --> 00:30:38.080 +with some things in italics. + +00:30:38.080 --> 00:30:40.752 +Some hyperlinks here. + +00:30:40.752 --> 00:30:42.387 +These hyperlinks are standard + +00:30:42.387 --> 00:30:43.679 +in the sense that + +00:30:43.679 --> 00:30:45.407 +the targets are not visible, + +00:30:45.407 --> 00:30:47.760 +and they are implemented using + +00:30:47.760 --> 00:30:49.519 +buttons in Emacs Lisp. + +00:30:49.519 --> 00:30:52.385 +This section of the Emacs Lisp manual + +00:30:52.385 --> 00:30:56.799 +describes how buttons work. + +00:30:56.799 --> 00:31:01.957 +The source code is quite difficult. + +00:31:01.957 --> 00:31:04.240 +I mean, when I was starting to + +00:31:04.240 --> 00:31:05.721 +to try to decipher this + +00:31:05.721 --> 00:31:07.600 +when I was a beginner + +00:31:07.600 --> 00:31:11.200 +using Emacs 19.34, I felt that this + +00:31:11.200 --> 00:31:12.320 +describe-key was + +00:31:12.320 --> 00:31:15.519 +very difficult to understand. + +00:31:15.519 --> 00:31:20.080 +I felt that the the designers, + +00:31:20.080 --> 00:31:22.640 +the people who wrote it, +were sacrificing + +00:31:22.640 --> 00:31:24.839 +too much of the hacker-friendliness + +00:31:24.839 --> 00:31:27.154 +that I was expecting from it + +00:31:27.154 --> 00:31:31.279 +to make it beginner-friendly. + +00:31:31.279 --> 00:31:33.600 +Let me explain. What are the problems + +00:31:33.600 --> 00:31:35.511 +with the standard describe-key? + +00:31:35.511 --> 00:31:37.336 +If we think that hyperlinks + +00:31:37.336 --> 00:31:38.640 +are things like this + +00:31:38.640 --> 00:31:41.600 +with the target and the text, then in the + +00:31:41.600 --> 00:31:43.600 +button hyperlinks of describe-key, + +00:31:43.600 --> 00:31:46.516 +these three bad things happen. + +00:31:46.516 --> 00:31:49.983 +First, it is hard to extract +the target from the hyperlink. + +00:31:49.983 --> 00:31:52.000 +Second, it is hard to recreate + +00:31:52.000 --> 00:31:55.440 +a list of code that would +go to that target. + +00:31:55.440 --> 00:31:57.519 +Third, it is hard to copy the full + +00:31:57.519 --> 00:32:00.640 +hyperlink, including the targets +to other buffers. + +00:32:00.640 --> 00:32:04.960 +I only knew how to copy the text + +00:32:04.960 --> 00:32:06.937 +when I was trying to decipher + +00:32:06.937 --> 00:32:09.039 +what describe-key was doing. + +00:32:09.039 --> 00:32:11.679 +I created lots of hyperlinks like this + +00:32:11.679 --> 00:32:16.159 +to inspect the text properties and +things like that. + +00:32:16.159 --> 00:32:18.113 +For example, in the description + +00:32:18.113 --> 00:32:20.390 +of the key down here, + +00:32:20.390 --> 00:32:26.799 +we have a button that points to +simple.el. + +00:32:26.799 --> 00:32:29.336 +The text of that button is simple.el. + +00:32:29.336 --> 00:32:31.600 +This hyperlink goes to the + +00:32:31.600 --> 00:32:35.519 +to the middle of this +button hyperlink here. + +00:32:35.519 --> 00:32:39.120 +This hyperlink here + +00:32:39.120 --> 00:32:43.279 +goes to the middle of the button +of this button hyperlink, + +00:32:43.279 --> 00:32:46.240 +and then inspects its text properties, + +00:32:46.240 --> 00:32:51.679 +and then goes to this section here +of the description. + +00:32:51.679 --> 00:32:53.521 +So this is a high-level description + +00:32:53.521 --> 00:32:56.159 +of the text properties. + +00:32:56.159 --> 00:32:58.782 +I mean, the text properties that make it +a button. + +00:32:58.782 --> 00:33:04.320 +This is a lower-level description of +these text properties. + +00:33:04.320 --> 00:33:08.000 +The button that points to + +00:33:08.000 --> 00:33:11.440 +forward-line--sorry, the button + +00:33:11.440 --> 00:33:14.399 +whose text is forward-line, this one is + +00:33:14.399 --> 00:33:16.480 +slightly different-- + +00:33:16.480 --> 00:33:21.200 +this hyperlink here goes to the middle +of that button. + +00:33:21.200 --> 00:33:25.760 +This hyperlink goes to the middle of +that button, + +00:33:25.760 --> 00:33:28.173 +inspects its text properties, + +00:33:28.173 --> 00:33:29.360 +and goes to the section + +00:33:29.360 --> 00:33:33.617 +of this button of this help buffer here + +00:33:33.617 --> 00:33:36.399 +that describes the button + +00:33:36.399 --> 00:33:41.679 +and the lower-level view of the text +properties. + +00:33:41.679 --> 00:33:45.519 +So I started with things like this + +00:33:45.519 --> 00:33:47.866 +to understand what these buttons +were doing + +00:33:47.866 --> 00:33:49.339 +and I was able to figure out + +00:33:49.339 --> 00:33:51.620 +how these things are implemented + +00:33:51.620 --> 00:33:53.120 +in describe-key, and then + +00:33:53.120 --> 00:33:55.519 +similar help functions in Emacs. + +00:33:55.519 --> 00:33:57.506 +I discovered that one of the + +00:33:57.506 --> 00:33:59.049 +main lower-level functions + +00:33:59.049 --> 00:34:01.360 +that Emacs used for this + +00:34:01.360 --> 00:34:05.279 +is a function called +find-function-noselect. + +00:34:05.279 --> 00:34:09.929 +If I run find-function-noselect +on next line, + +00:34:11.200 --> 00:34:14.240 +it returns a pair: + +00:34:14.240 --> 00:34:18.079 +a cons made of a buffer and a position. + +00:34:18.079 --> 00:34:20.560 +So I created functions that would + +00:34:21.679 --> 00:34:24.320 +follow this. That would open that + +00:34:24.320 --> 00:34:26.510 +buffer in that position + +00:34:26.510 --> 00:34:29.679 +and then this is a postback list. + +00:34:29.679 --> 00:34:31.679 +So we could go to these positions and + +00:34:31.679 --> 00:34:33.919 +then search for this string, and another + +00:34:33.919 --> 00:34:36.000 +string, and another string, and so on. + +00:34:36.000 --> 00:34:41.040 +So this goes to the definition +of find-efunction + +00:34:41.040 --> 00:34:45.006 +and then to a string after it. + +00:34:45.006 --> 00:34:48.296 +I use these things to implement + +00:34:48.296 --> 00:34:51.839 +my own functions that pointed to the + +00:34:51.839 --> 00:34:55.339 +same targets as the button hyperlinks + +00:34:55.339 --> 00:35:00.240 +and describe-key. + +00:35:00.240 --> 00:35:02.673 +Again, let me show the comparison. + +00:35:02.673 --> 00:35:06.322 +This is the standard +describe-key here, + +00:35:06.322 --> 00:35:10.480 +and this is my variant. + +00:35:10.480 --> 00:35:13.839 +It creates a buffer with links, + +00:35:13.839 --> 00:35:17.680 +with the list of hyperlinks about this key. + +00:35:17.680 --> 00:35:20.960 +We get this. So, each one of these + +00:35:20.960 --> 00:35:22.960 +functions is either a blank line + +00:35:22.960 --> 00:35:28.720 +or an elisp hyperlink. + +00:35:28.720 --> 00:35:34.506 +Here is a slight variant of the +function find-ekey-links above. + +00:35:34.506 --> 00:35:39.280 +In this variant, the argument is a +string that has to be processed by + +00:35:39.280 --> 00:35:42.400 +read-kbd-macro to convert it to the + +00:35:42.400 --> 00:35:45.280 +lower-level format. + +00:35:45.280 --> 00:35:49.040 +Note that these functions here +that I wrote, + +00:35:49.040 --> 00:35:50.934 +they display temporary buffers + +00:35:50.934 --> 00:35:53.599 +with no help at all. + +00:35:53.599 --> 00:35:57.131 +To be honest, there's a link to + +00:35:57.131 --> 00:35:58.345 +a tutorial here, + +00:35:58.345 --> 00:36:00.467 +but this is a recent edition + +00:36:00.467 --> 00:36:03.200 +so let's ignore this. + +00:36:03.200 --> 00:36:06.640 +They display temporary buffers + +00:36:06.640 --> 00:36:07.949 +with no help at all, + +00:36:07.949 --> 00:36:09.520 +just lots of hyperlinks. + +00:36:09.520 --> 00:36:11.172 +And these hyperlinks can be... + +00:36:11.172 --> 00:36:13.359 +They are very hacker-friendly +in the sense that + +00:36:13.359 --> 00:36:15.477 +they can be followed with M-e. + +00:36:15.477 --> 00:36:17.520 +They can be copied to other + +00:36:17.520 --> 00:36:19.920 +buffers because they are plain text, + +00:36:19.920 --> 00:36:23.680 +because they are just sexp. + +00:36:23.680 --> 00:36:28.000 +And they can be inspected +in the sense that... + +00:36:28.000 --> 00:36:32.400 +For example, here, + +00:36:32.400 --> 00:36:35.520 +we have a hyperlink to a function +that we... + +00:36:35.520 --> 00:36:37.599 +It may be difficult to figure out what + +00:36:37.599 --> 00:36:39.200 +this function does, + +00:36:39.200 --> 00:36:41.600 +but we can go to that position, + +00:36:41.600 --> 00:36:45.839 +and then type C-h f to see the + +00:36:45.839 --> 00:36:48.240 +description of this function. + +00:36:48.240 --> 00:36:53.890 +And here is a hyperlink that does that + +00:36:56.000 --> 00:37:00.160 +in my syntax, say. + +00:37:00.160 --> 00:37:02.800 +This list of hyperlinks were + +00:37:02.800 --> 00:37:08.000 +generated by this code here that just + +00:37:08.000 --> 00:37:11.119 +used a back quote to generate + +00:37:11.119 --> 00:37:14.640 +lists of sexps. + +00:37:14.640 --> 00:37:18.240 +I felt that this function here + +00:37:18.240 --> 00:37:20.700 +that just generated this list + +00:37:20.700 --> 00:37:23.393 +was very easy to understand +and to modify, + +00:37:23.393 --> 00:37:28.480 +so this was hacker-friendly +in the way that I wanted. + +00:37:28.480 --> 00:37:31.599 +So I started using this, + +00:37:31.599 --> 00:37:33.459 +and this idea of using buffers + +00:37:33.459 --> 00:37:36.066 +with sexp hyperlinks and no help + +00:37:36.066 --> 00:37:38.720 +violated all the notions +of user-friendliness + +00:37:38.720 --> 00:37:40.079 +that I knew, so I was + +00:37:40.079 --> 00:37:41.504 +exploring something new + +00:37:41.504 --> 00:37:46.160 +at that time. This is the end of +part two. + +00:37:46.160 --> 00:37:49.359 +Part three of this presentation is + +00:37:49.359 --> 00:37:51.735 +about the killer features of eev, + +00:37:51.735 --> 00:37:53.778 +or why everybody should use eev + +00:37:53.778 --> 00:37:55.789 +or at least have eev installed + +00:37:55.789 --> 00:37:59.280 +even if they think that eev +is too weird. + +00:37:59.280 --> 00:38:01.200 +So this is a very quick listing. + +00:38:01.200 --> 00:38:04.240 +eev has elisp hyperlinks +which are super nice. + +00:38:04.240 --> 00:38:06.050 +It comes with lots of tutorials. + +00:38:06.050 --> 00:38:10.800 +The main one here explains all the +main features. + +00:38:10.800 --> 00:38:14.079 +There's also a tutorial that's + +00:38:14.079 --> 00:38:18.079 +an index of all the other tutorials here. + +00:38:18.079 --> 00:38:20.509 +Many, many, many tutorials. + +00:38:20.509 --> 00:38:24.079 +If we forget everything, +we can just type M-j. + +00:38:24.079 --> 00:38:28.104 +Remember that this part here +is beginner-friendly, + +00:38:28.104 --> 00:38:32.960 +and the rest is +beginner-unfriendly. + +00:38:32.960 --> 00:38:38.320 +There's a tutorial on Emacs Lisp here. + +00:38:38.320 --> 00:38:41.920 +It mainly explains how to understand + +00:38:41.920 --> 00:38:44.640 +Elisp code, which is much easier than... + +00:38:44.640 --> 00:38:46.673 +It's much easier to understand +Elisp code + +00:38:46.673 --> 00:38:50.160 +than to understand how to +program in Elisp. + +00:38:50.160 --> 00:38:53.440 +Most people are only going to need this. + +00:38:53.440 --> 00:38:55.368 +eev is very easy to install. + +00:38:55.368 --> 00:38:58.240 +It's in ELPA, so we just need to do + +00:38:58.240 --> 00:39:03.520 +this thing here, and it's very +non-invasive. + +00:39:03.520 --> 00:39:05.472 +Years ago, several years ago, + +00:39:05.472 --> 00:39:07.039 +it was a very invasive package, + +00:39:07.039 --> 00:39:08.960 +but then I changed everything. + +00:39:08.960 --> 00:39:13.520 +Now, if we toggle eev-mode on and off, + +00:39:13.520 --> 00:39:16.320 +what's going to happen is just that + +00:39:16.320 --> 00:39:21.599 +the eev-keymap becomes activated or +deactivated. + +00:39:21.599 --> 00:39:24.720 +When we install eev-- + +00:39:24.720 --> 00:39:27.064 +I mean when we require eev, + +00:39:27.064 --> 00:39:32.640 +the only things that happens globally +are these things here: + +00:39:32.640 --> 00:39:34.993 +several functions and variables +become defined. + +00:39:34.993 --> 00:39:40.079 +All of them have standard prefixes, +except for one. + +00:39:40.079 --> 00:39:43.040 +Three characters are changed in the + +00:39:43.040 --> 00:39:44.480 +standard display table + +00:39:44.480 --> 00:39:48.640 +to make them appear as colored glyphs: + +00:39:48.640 --> 00:39:52.780 +the red star, the open +double angle brackets, + +00:39:52.780 --> 00:39:58.160 +and the closed double angle brackets. + +00:39:58.160 --> 00:40:01.359 +Two environment variables are set. + +00:40:01.359 --> 00:40:04.560 +This is a trivial technicality. + +00:40:04.560 --> 00:40:10.800 +We just run a defadvice around one +function that is used by "man." + +00:40:10.800 --> 00:40:18.400 +Also, eev has a very high +discoverability factor. + +00:40:18.400 --> 00:40:22.135 +There's a way to create, +a very easy way + +00:40:22.135 --> 00:40:25.200 +to create a hyperlink to here. + +00:40:25.200 --> 00:40:27.760 +I do not have time to show this now, + +00:40:27.760 --> 00:40:31.200 +but for example, if I'm here +in a tutorial, + +00:40:31.200 --> 00:40:35.736 +and I think that this section +is something interesting + +00:40:35.736 --> 00:40:39.520 +and I want to create a hyperlink to it, + +00:40:39.520 --> 00:40:43.040 +I just have to type a certain key +sequence here, + +00:40:43.040 --> 00:40:45.783 +and here I got a hyperlink + +00:40:45.783 --> 00:40:48.269 +that I can copy to my notes, + +00:40:48.269 --> 00:40:52.260 +and this hyperlink goes to that section. + +00:40:58.240 --> 00:41:02.092 +We have hyperlinks that point to +specific positions + +00:41:02.092 --> 00:41:05.382 +in PDF documents and in video files. + +00:41:05.382 --> 00:41:09.119 +Here, this one opens a PDF +and displays it. + +00:41:09.119 --> 00:41:13.920 +This one opens a PDF +and converts it to text. + +00:41:13.920 --> 00:41:18.400 +and this one opens the video in a +certain position. + +00:41:18.400 --> 00:41:20.480 +We also have a way to control + +00:41:20.480 --> 00:41:22.079 +shell-like programs. + +00:41:22.079 --> 00:41:25.111 +In my presentation of the last year, + +00:41:25.111 --> 00:41:28.163 +I spent one third of the presentation +explaining this, + +00:41:28.163 --> 00:41:31.839 +and I think that I gave a very good +demonstration there. + +00:41:31.839 --> 00:41:35.680 +The demonstration is here. + +00:41:35.680 --> 00:41:37.908 +We can go to the web page, + +00:41:37.908 --> 00:41:41.839 +go to this section of the web page, + +00:41:41.839 --> 00:41:47.680 +and start by this point. + +00:41:47.680 --> 00:41:55.920 +And here we have an explanation +and so on. Whatever. + +00:41:55.920 --> 00:41:58.720 +I've already mentioned this before. + +00:41:59.200 --> 00:42:02.240 +eev comes with a very nice Elisp +tutorial. + +00:42:02.240 --> 00:42:05.599 +So that's it. This is the end of part +three. + +00:42:05.599 --> 00:42:08.103 +So this is the last part of my +presentation, + +00:42:08.103 --> 00:42:10.965 +and it's about the title of the +presentation. + +00:42:10.965 --> 00:42:13.599 +I called the presentation, "Why + +00:42:13.599 --> 00:42:16.560 +Most of the Best Features in eev Look + +00:42:16.560 --> 00:42:20.480 +Like Five-Minute Hacks." I've already + +00:42:20.480 --> 00:42:23.920 +run out of time, so I have to skip this + +00:42:23.920 --> 00:42:28.485 +first part here in which +I describe how + +00:42:28.485 --> 00:42:33.440 +I was exposed to several different +notions of user-friendliness, + +00:42:33.440 --> 00:42:35.920 +and how the one that really blew my mind + +00:42:35.920 --> 00:42:41.680 +was the one in a certain +Forth environment. + +00:42:41.680 --> 00:42:44.160 +Let me make the long, long story + +00:42:44.160 --> 00:42:46.560 +very, very short. + +00:42:46.560 --> 00:42:49.280 +In all this process, I switched from + +00:42:49.680 --> 00:42:52.960 +the belief that the user was always +someone else, + +00:42:52.960 --> 00:42:55.359 +someone external, and that I always + +00:42:55.359 --> 00:42:57.040 +had to write my programs for + +00:42:57.040 --> 00:43:00.079 +this external user. I switched + +00:43:00.079 --> 00:43:00.173 +from that to the belief + +00:43:00.173 --> 00:43:03.200 +that I am the user. + +00:43:03.200 --> 00:43:06.319 +I can play with the interface +that I want. + +00:43:06.319 --> 00:43:10.079 +I can write programs + +00:43:10.079 --> 00:43:11.786 +that only I am going to understand. + +00:43:11.786 --> 00:43:14.240 +I can experiment with +hundreds of interfaces, + +00:43:14.240 --> 00:43:16.079 +select the best ones, + +00:43:16.079 --> 00:43:18.720 +document them, and then share them + +00:43:18.720 --> 00:43:20.960 +with other people + +00:43:20.960 --> 00:43:24.056 +who are also experimenting +with interfaces + +00:43:24.056 --> 00:43:27.050 +in their own ways. + +00:43:27.050 --> 00:43:30.879 +So eev has lots of things +that are user-friendly + +00:43:30.879 --> 00:43:34.880 +in these unusual ways that I've +explained before. + +00:43:34.880 --> 00:43:37.160 +If we consider that + +00:43:37.160 --> 00:43:40.319 +this notion of user-friendliness +is valid, + +00:43:40.319 --> 00:43:44.651 +then these things that eev implements, + +00:43:44.651 --> 00:43:46.904 +they are user-friendly +and hacker-friendly + +00:43:46.904 --> 00:43:48.800 +at the same time. + +00:43:48.800 --> 00:43:50.346 +Let me show one example. + +00:43:51.119 --> 00:43:56.640 +This is one that really took me only +five minutes to implement. + +00:43:56.640 --> 00:43:59.430 +At one point a few months ago, + +00:43:59.430 --> 00:44:05.599 +I discovered that Sacha Chua's weekly +posts about Emacs News + +00:44:05.599 --> 00:44:08.800 +were also being posted to a + +00:44:08.800 --> 00:44:12.893 +mailing list that is stored at +lists.gnu.org, + +00:44:12.893 --> 00:44:16.319 +and it's called emacs-tangents. + +00:44:16.319 --> 00:44:19.760 +I found a way to create + +00:44:19.760 --> 00:44:25.440 +the links to the posts in both places, + +00:44:25.440 --> 00:44:28.178 +but I had to use a template for that. + +00:44:28.178 --> 00:44:30.640 +So what we are seeing here now + +00:44:30.640 --> 00:44:33.221 +is a template with +the default values. + +00:44:33.221 --> 00:44:38.243 +So this means that we have not set the +year correctly. + +00:44:38.243 --> 00:44:40.720 +We have not set the month correctly, + +00:44:40.720 --> 00:44:42.173 +or the day correctly, + +00:44:42.173 --> 00:44:45.462 +but if we run this sexp here... + +00:44:45.462 --> 00:44:48.960 +Let me do something else before... + +00:44:48.960 --> 00:44:53.359 +If we run this sexp here, + +00:44:53.359 --> 00:45:00.880 +we change some of these entries + +00:45:00.880 --> 00:45:05.200 +in the template, and we get +these links here. + +00:45:05.200 --> 00:45:07.719 +They all work. For example, + +00:45:07.719 --> 00:45:13.552 +this one opens the blog post in +Sacha Chua's site, + +00:45:13.552 --> 00:45:21.280 +and this one opens it +in the mailing list. + +00:45:21.280 --> 00:45:23.672 +Sometimes I want +the Org source of that, + +00:45:23.672 --> 00:45:26.520 +and the easiest way +to get the Org source + +00:45:26.520 --> 00:45:31.680 +is to look at this link here +that has an attachment. + +00:45:31.680 --> 00:45:35.839 +If I take this link here, + +00:45:35.839 --> 00:45:43.342 +and I take this stem that points to the +attachment, and I put it here, + +00:45:43.342 --> 00:45:45.440 +and I generate this page again + +00:45:45.440 --> 00:45:50.000 +with all this data, +then I get a script here + +00:45:50.000 --> 00:45:51.673 +that downloads... + +00:45:51.673 --> 00:45:54.640 +Let me switch to a smaller font. + +00:45:54.640 --> 00:45:58.160 +It downloads this attachment + +00:45:58.160 --> 00:46:01.599 +and it renames that attachment to +something: + +00:46:01.599 --> 00:46:06.000 +./emacs-news -- sorry, something's... + +00:46:06.000 --> 00:46:10.720 +-emacs-news-something + +00:46:10.720 --> 00:46:15.119 +something emacs-news.org here. + +00:46:15.119 --> 00:46:16.750 +The file is already here, + +00:46:16.750 --> 00:46:18.400 +already with the right name. + +00:46:18.400 --> 00:46:22.079 +So I can open it with +just this hyperlink. + +00:46:22.079 --> 00:46:23.780 +Let me go to the big font again. + +00:46:25.200 --> 00:46:28.673 +And now I have the Org source +for that hyperlink-- + +00:46:28.673 --> 00:46:33.839 +Sorry, for that blog post. + +00:46:33.839 --> 00:46:37.911 +And so this one-line thing here + +00:46:37.911 --> 00:46:40.960 +is, in a sense, + +00:46:40.960 --> 00:46:45.119 +a hyperlink to this blog post +in all its formats. + +00:46:45.119 --> 00:46:48.640 +If I execute this, I get links to + +00:46:48.640 --> 00:46:52.000 +all the places where it is posted, + +00:46:52.000 --> 00:46:56.000 +and I get a script to +download the local copy + +00:46:56.000 --> 00:47:00.480 +of the Org source of it. And that's it. + +00:47:00.480 --> 00:47:02.506 +Well, I'm already out of time, + +00:47:02.506 --> 00:47:04.480 +so let me finish here. + +00:47:04.480 --> 00:47:10.079 +Thanks. Bye. diff --git a/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt b/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt new file mode 100644 index 00000000..46b7433f --- /dev/null +++ b/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt @@ -0,0 +1,1723 @@ +WEBVTT + +00:00:04.080 --> 00:00:07.359 +All right, then. Well, hello everyone. + +00:00:07.359 --> 00:00:11.519 +I hope you're all enjoying the EmacsConf. + +00:00:11.519 --> 00:00:15.040 +My name is Musa Al-hassy, and I hope you're + +00:00:15.040 --> 00:00:19.840 +excited to learn about powering up special blocks. + +00:00:19.840 --> 00:00:25.574 +Let's first off find out +what these special blocks are, + +00:00:25.574 --> 00:00:27.920 +and see what we can go from. + +00:00:27.920 --> 00:00:30.240 +Yesterday, I saw a lot of cool talks + +00:00:30.240 --> 00:00:33.200 +and people were chatting about + +00:00:33.200 --> 00:00:37.200 +how should you present? Should you +do it this way or that way? + +00:00:37.200 --> 00:00:39.931 +I thought maybe I should try a different way. + +00:00:39.931 --> 00:00:42.567 +But I'm talking about special blocks + +00:00:42.567 --> 00:00:45.039 +and if I show you an Emacs, then I have to export + +00:00:45.039 --> 00:00:47.840 +the HTML so you can see what it looks like + +00:00:47.840 --> 00:00:51.920 +or export to a PDF so you can see what it looks like. + +00:00:51.920 --> 00:00:54.239 +So I ended up writing in org-reveal, + +00:00:54.239 --> 00:00:58.233 +and joyously, this just works. + +00:00:58.960 --> 00:01:00.879 +You can just see things here. + +00:01:00.879 --> 00:01:03.452 +I was worried that I'd have to take pictures + +00:01:03.452 --> 00:01:09.760 +and then insert pings, so that was a delight. + +00:01:09.760 --> 00:01:15.704 +Okay. Special blocks are these things like a center small quote. + +00:01:15.704 --> 00:01:17.280 +That's what a special block is, + +00:01:17.280 --> 00:01:19.733 +and with a bit of Lisp, we can make + +00:01:19.733 --> 00:01:22.741 +special blocks and link types. + +00:01:22.741 --> 00:01:24.799 +Right. Using a single interface. + +00:01:24.799 --> 00:01:27.344 +The interface is going to be similar + +00:01:27.344 --> 00:01:29.281 +to one many people are familiar with. + +00:01:29.281 --> 00:01:34.712 +In particular, Org Babel's src interface + +00:01:34.712 --> 00:01:37.840 +as well as using global header arguments for link types. + +00:01:37.840 --> 00:01:39.450 +The idea is to write it once + +00:01:39.450 --> 00:01:41.200 +and generate many different kinds. + +00:01:41.200 --> 00:01:45.213 +You write in Org markup and you can have HTML, + +00:01:45.213 --> 00:01:49.767 +you can have PDF, and joyously, org-reveal. + +00:01:49.767 --> 00:01:53.600 +That was an unexpected delight. + +00:01:53.600 --> 00:01:57.840 +Here are a few that you'll just see + +00:01:57.840 --> 00:02:01.759 +in this presentation. + +00:02:01.759 --> 00:02:05.040 +I won't show some of these link-only ones, + +00:02:05.040 --> 00:02:06.799 +but we'll see a few of these other ones + +00:02:06.799 --> 00:02:09.500 +just to make the presentation look nice + +00:02:09.500 --> 00:02:11.520 +So the presentation is really going to + +00:02:11.520 --> 00:02:14.000 +present these blocks and the mechanism + +00:02:14.000 --> 00:02:15.120 +at the same time. + +00:02:15.120 --> 00:02:18.400 +No HTML was written. + +00:02:18.400 --> 00:02:21.280 +Look, Ma! No HTML, just pure Org Mode, + +00:02:21.280 --> 00:02:25.840 +and you get all these beautiful boxes and things. + +00:02:25.840 --> 00:02:27.680 +The motivation for this is... + +00:02:29.120 --> 00:02:31.200 +you're online, you run into a blog, + +00:02:31.200 --> 00:02:32.120 +and you see something you like, + +00:02:32.120 --> 00:02:33.120 +and you're like, man, + +00:02:33.120 --> 00:02:36.640 +you know, I wish I could produce that. + +00:02:36.640 --> 00:02:41.639 +But you check, and the author wrote raw HTML. + +00:02:41.639 --> 00:02:44.239 +You know, #+HTML: everywhere. + +00:02:44.239 --> 00:02:49.533 +That's going to obscure your real content. + +00:02:49.533 --> 00:02:51.200 +It's going to be surrounded by all this + +00:02:51.200 --> 00:02:54.239 +styling information. That's unfortunate. + +00:02:54.239 --> 00:02:57.033 +The author decides to use an Org macro. + +00:02:57.033 --> 00:02:58.959 +All right, a bit better, + +00:02:58.959 --> 00:03:00.333 +but then what if you decide, + +00:03:00.333 --> 00:03:04.667 +hey I want to make a PDF? Not great. + +00:03:04.667 --> 00:03:06.000 +And then the worst of all, + +00:03:06.000 --> 00:03:07.840 +the author doesn't give you the source, + +00:03:07.840 --> 00:03:10.159 +and then you have to view page source, + +00:03:10.159 --> 00:03:13.760 +and learn cascading style sheets, + +00:03:14.239 --> 00:03:15.767 +and sit in a corner and cry, + +00:03:15.767 --> 00:03:18.080 +and decide to do other things with your life. + +00:03:18.080 --> 00:03:22.640 +We want to give you Org users numerous styles + +00:03:22.640 --> 00:03:27.200 +and an extensible mechanism to add more of these + +00:03:27.200 --> 00:03:28.799 +aesthetically pleasing styles, + +00:03:28.799 --> 00:03:31.200 +to have really nice things + +00:03:31.200 --> 00:03:33.933 +look one way in the HTML + +00:03:33.933 --> 00:03:36.567 +and look almost the same way in the PDF + +00:03:36.567 --> 00:03:38.667 +and other back ends. + +00:03:38.667 --> 00:03:41.680 +And if by having these newer ones, + +00:03:41.680 --> 00:03:45.519 +people might be encouraged to try making new ones, + +00:03:45.519 --> 00:03:49.040 +especially when the interface is not so difficult, + +00:03:49.040 --> 00:03:54.159 +that's the aim. + +00:03:54.159 --> 00:03:59.120 +So let's have a real story to motivate this even more. + +00:03:59.120 --> 00:04:03.533 +Here's three friends. I hope I don't butcher their names, + +00:04:03.533 --> 00:04:04.640 +but these friends are called + +00:04:04.640 --> 00:04:08.720 +Amin, Sacha, and Corwin. They're organizing a conference, + +00:04:08.720 --> 00:04:12.080 +EmacsConf 2020. + +00:04:12.080 --> 00:04:14.239 +So Sacha decides to write an Org file + +00:04:14.239 --> 00:04:16.479 +and she would like some feedback. + +00:04:16.479 --> 00:04:19.840 +Okay. Just to make it clear, there's no... + +00:04:19.840 --> 00:04:22.960 +just how easy this looks, + +00:04:22.960 --> 00:04:27.280 +let's look at the source for this block. + +00:04:27.280 --> 00:04:30.720 +Notice it's just the word "green," then a colon, + +00:04:30.720 --> 00:04:37.333 +then Amin. No div style coloring, + +00:04:37.333 --> 00:04:38.479 +just green:Amin. + +00:04:38.479 --> 00:04:41.520 +A very pleasant Org markup. + +00:04:41.520 --> 00:04:44.960 +So that's quite nice. Put some bold around it. + +00:04:44.960 --> 00:04:46.433 +Not too difficult. + +00:04:46.433 --> 00:04:49.900 +Hopefully, this will be useful to other people as well. + +00:04:49.900 --> 00:04:52.240 +So what kind of feedback + +00:04:52.240 --> 00:04:55.233 +would Sacha expect to get? + +00:04:55.233 --> 00:04:59.120 +Maybe she would expect top-level remarks + +00:04:59.120 --> 00:05:00.833 +visible in the export. + +00:05:00.833 --> 00:05:04.400 +When she makes an HTML, she can see right there a big block. + +00:05:04.400 --> 00:05:09.533 +Right. Maybe Amin will suggest to Sacha, + +00:05:09.533 --> 00:05:11.120 +please replace this part + +00:05:11.120 --> 00:05:12.267 +with this other part + +00:05:12.267 --> 00:05:13.333 +or replace this word + +00:05:13.333 --> 00:05:14.639 +with this other word. + +00:05:14.639 --> 00:05:16.960 +This is not really possible + +00:05:16.960 --> 00:05:21.919 +with raw HTML or with even LaTeX. + +00:05:21.919 --> 00:05:24.000 +You'd have to have multiple arguments: + +00:05:24.000 --> 00:05:25.360 +the first argument, and then + +00:05:25.360 --> 00:05:28.800 +the replacement argument. It's a bit clunky. + +00:05:28.800 --> 00:05:32.080 +But with our setup, you just write some text, + +00:05:32.080 --> 00:05:34.367 +write #+replace_with + +00:05:34.367 --> 00:05:36.240 +and then write more text, and you're good to go. + +00:05:36.240 --> 00:05:39.440 +Normal Org markup. + +00:05:39.440 --> 00:05:40.720 +Everyone speaks different languages. + +00:05:40.720 --> 00:05:43.833 +Maybe they want to use one word, + +00:05:43.833 --> 00:05:45.919 +or they're arguing about + +00:05:45.919 --> 00:05:48.000 +whether we talk about frames or windows, + +00:05:48.000 --> 00:05:50.560 +so maybe they want to have some translations. + +00:05:50.560 --> 00:05:53.433 +So there are different kinds of feedback. + +00:05:53.433 --> 00:05:55.360 +Let's take an example. + +00:05:55.360 --> 00:05:59.360 +Look at what they are. + +00:05:59.360 --> 00:06:02.560 +For example, Sacha might write + +00:06:02.560 --> 00:06:06.160 +this Org Mode right here, + +00:06:06.160 --> 00:06:09.759 +and then in her HTML exports, you might see this, + +00:06:09.759 --> 00:06:12.733 +and her feedback might look really nicely + +00:06:12.733 --> 00:06:13.840 +from anyone who says + +00:06:14.560 --> 00:06:17.400 +let's do some Lisp instead of mathematics. + +00:06:17.400 --> 00:06:18.560 +Let's just do some Lisp. + +00:06:18.560 --> 00:06:22.479 +Corwin says, let's not be so silly. + +00:06:22.479 --> 00:06:25.120 +Let's just say 9 a.m. and move on. + +00:06:28.080 --> 00:06:31.360 +Amin likes to export to PDF, + +00:06:31.360 --> 00:06:34.333 +and so he writes his top-level remarks using LaTeX. + +00:06:34.333 --> 00:06:36.900 +That's how. To get this square + +00:06:36.900 --> 00:06:38.960 +Amin: please change whatever, + +00:06:38.960 --> 00:06:43.120 +he might write like this: #+latex:. + +00:06:43.120 --> 00:06:50.880 +But then Sacha only exports to HTML, for example, + +00:06:50.880 --> 00:06:54.880 +so she doesn't look at the PDF, + +00:06:54.880 --> 00:06:57.867 +and she may not see his top-level feedback + +00:06:57.867 --> 00:07:00.667 +with those nice brackets and and bold. + +00:07:00.667 --> 00:07:03.120 +She might think everything's good. + +00:07:03.120 --> 00:07:06.160 +That can be a bit disastrous. + +00:07:06.160 --> 00:07:08.600 +So maybe Sacha will then + +00:07:08.600 --> 00:07:13.199 +make some of her own feedback. + +00:07:13.199 --> 00:07:16.160 +To produce it, she might write + +00:07:16.560 --> 00:07:21.680 +HTML commands, #+html: to get that. + +00:07:21.680 --> 00:07:24.100 +But then Amin will make a PDF, + +00:07:24.100 --> 00:07:25.680 +and this won't stick out. + +00:07:25.680 --> 00:07:28.367 +So he might think everything's okay, + +00:07:28.367 --> 00:07:30.160 +even though it's not. + +00:07:30.160 --> 00:07:33.100 +Then Corwin actually decides, + +00:07:33.100 --> 00:07:35.900 +"Hey, let me read the exported result + +00:07:35.900 --> 00:07:38.867 +and there's all those feedback +from two people + +00:07:38.867 --> 00:07:42.633 +who haven't read anything, +because maybe they were in a rush, + +00:07:42.633 --> 00:07:45.167 +and didn't see the top-level feedback. + +00:07:45.167 --> 00:07:50.000 +So they agree. "Hey, let's have a +uniform Org interface that exports + +00:07:50.000 --> 00:07:52.567 +to both HTML and PDF. + +00:07:52.567 --> 00:07:54.080 +Make both of us happy." + +00:07:54.080 --> 00:07:58.160 +Okay. So they decide to use +Org special blocks. + +00:07:58.160 --> 00:08:01.300 +Right. To set this up, + +00:08:01.300 --> 00:08:04.400 +they need to read a little bit of Lisp, + +00:08:04.400 --> 00:08:08.879 +hooks, advice, macros to get all of this +set up, + +00:08:08.879 --> 00:08:12.319 +and then they'll use Org as the main +interface. + +00:08:12.319 --> 00:08:16.479 +It's a lot of work, but it's worth it, +right? maybe? + +00:08:16.479 --> 00:08:19.360 +But then Corwin's a bit terse. + +00:08:19.759 --> 00:08:24.333 +Corwin maybe doesn't want to +write using blocks. + +00:08:24.333 --> 00:08:26.080 +He thinks they're overkill. + +00:08:26.080 --> 00:08:32.560 +Sacha wants HTML, and Amin wants PDF, +and Corwin wants org-reveal. + +00:08:32.560 --> 00:08:35.533 +So now they have to reformat +all their code. + +00:08:35.533 --> 00:08:36.900 +And then they need to use org link types + +00:08:36.900 --> 00:08:38.867 +to reduce the overkill, + +00:08:38.867 --> 00:08:41.367 +so they can try to avoid duplication + +00:08:41.367 --> 00:08:46.800 +by factoring things out into +self-contained functions. + +00:08:46.800 --> 00:08:50.320 +But now, to set up our links, + +00:08:50.320 --> 00:08:55.467 +we'll have to learn a new interface, org +setup link. + +00:08:55.467 --> 00:09:02.160 +Learn a little bit about fonts, follow +links, export handlers... + +00:09:02.160 --> 00:09:05.040 +It's so much. That's so much. But then, + +00:09:05.040 --> 00:09:06.800 +the friends, they learn a lot. + +00:09:06.800 --> 00:09:08.399 +They learn about defun. + +00:09:08.399 --> 00:09:11.120 +So these words are red. + +00:09:11.120 --> 00:09:12.185 +You get a little explanation. + +00:09:12.185 --> 00:09:14.320 +I think it's a bit too small for anyone +to read. + +00:09:14.320 --> 00:09:18.000 +This is Lisp documentation for defun. + +00:09:18.000 --> 00:09:21.600 +advice-add. There's some Lisp +documentation. + +00:09:21.600 --> 00:09:23.600 +They learn about destructuring -let. + +00:09:23.600 --> 00:09:25.279 +This is from the dash library. + +00:09:25.279 --> 00:09:26.959 +Here's all that glorious, + +00:09:26.959 --> 00:09:28.800 +glorious documentation with examples. + +00:09:28.800 --> 00:09:30.300 +Sorry. I like that. + +00:09:30.300 --> 00:09:32.467 +They might make +an ad-hoc mechanism + +00:09:32.467 --> 00:09:35.400 +to simulate arguments for special blocks, + +00:09:35.400 --> 00:09:38.500 +so something maybe called +extract-arguments, + +00:09:38.500 --> 00:09:41.533 +and then, of course, to make +new link types, + +00:09:41.533 --> 00:09:42.480 +they have to learn about + +00:09:42.480 --> 00:09:47.400 +org-link-set-parameters and +its numerous bits and pieces. + +00:09:49.920 --> 00:09:53.600 +Let's close all these ones down. + +00:09:53.600 --> 00:09:55.800 +Of course they also need to be +comfortable + +00:09:55.800 --> 00:09:59.920 +with loops and maps and matching and +string functions. + +00:09:59.920 --> 00:10:02.560 +So it's a bit of a pain. + +00:10:03.360 --> 00:10:05.839 +It's probably not worth it. + +00:10:05.839 --> 00:10:07.767 +Maybe I'll just rush things quickly, + +00:10:07.767 --> 00:10:09.360 +or do it ad-hoc... + +00:10:10.320 --> 00:10:13.680 +We have things to do. + +00:10:13.680 --> 00:10:19.367 +But maybe the squad wants to have a +modular and unified interface + +00:10:19.367 --> 00:10:23.700 +so everyone's comfortable with defun to +define a function + +00:10:23.700 --> 00:10:29.440 +and they say, "It would be nice if we +could just define simultaneously + +00:10:29.440 --> 00:10:32.959 +both a block and the link type." + +00:10:32.959 --> 00:10:36.000 +That way, we have a single interface + +00:10:36.000 --> 00:10:37.867 +Org mode, for these things. + +00:10:37.867 --> 00:10:39.767 +It would be nice if it was modular. + +00:10:39.767 --> 00:10:44.633 +If I defined a one kind of block and +you defined another, + +00:10:44.633 --> 00:10:45.519 +we could compose them, + +00:10:45.519 --> 00:10:49.360 +then get a nice bigger block, like LEGO. + +00:10:49.360 --> 00:10:52.320 +That would be nice. Building blocks. + +00:10:52.320 --> 00:10:56.240 +This is what we have come up with, +called defblock. + +00:10:56.240 --> 00:11:01.760 +It also has a long documentation string +containing examples and things. + +00:11:01.760 --> 00:11:04.800 +So that way, it can try to be useful. + +00:11:04.800 --> 00:11:10.880 +Let's look at a solution to these +friends' trilemma. + +00:11:10.880 --> 00:11:14.320 +So here's a way to define a block. + +00:11:14.320 --> 00:11:22.320 +It doesn't look that difficult, but this +is how they can define a block + +00:11:22.320 --> 00:11:25.920 +for their top-level feedback. + +00:11:25.920 --> 00:11:28.959 +Let's look at the three main parts +together. + +00:11:28.959 --> 00:11:31.233 +It's not that difficult, I hope. + +00:11:31.233 --> 00:11:35.300 +Just six lines, and that's including a +documentation string, + +00:11:35.300 --> 00:11:37.633 +newlines and things. + +00:11:37.633 --> 00:11:43.300 +So in line 1, we define the block just +like you define a function. + +00:11:43.300 --> 00:11:44.880 +We define a block. + +00:11:44.880 --> 00:11:47.433 +The block name is going to be called +"feedback." + +00:11:47.433 --> 00:11:49.680 +It has an author, "who." + +00:11:49.680 --> 00:11:54.133 +The author has no default value. + +00:11:54.133 --> 00:11:57.760 +It has a color, and the color has a +default value of red. + +00:11:57.760 --> 00:12:01.680 +So just as when you define functions, + +00:12:01.680 --> 00:12:06.233 +you start by define or defblock, + +00:12:06.233 --> 00:12:13.440 +then the name, some mandatory argument, +and some optional arguments. + +00:12:13.440 --> 00:12:18.480 +Then the next stage is definition. +Documentation. + +00:12:18.480 --> 00:12:20.133 +The people who use this, + +00:12:20.133 --> 00:12:22.880 +which are future you or future me, + +00:12:22.880 --> 00:12:25.519 +might want to know what this is. + +00:12:25.519 --> 00:12:27.839 +So let's get to document this. + +00:12:27.839 --> 00:12:32.079 +For Corwin, who might want to use +tooltips... + +00:12:32.079 --> 00:12:37.120 +When Corwin writes feedback in Emacs, +they'll see a nice little tooltip, + +00:12:37.120 --> 00:12:38.639 +and the tooltip will have + +00:12:38.639 --> 00:12:41.279 +this documentation string. + +00:12:41.279 --> 00:12:43.279 +That'll be nice. + +00:12:43.279 --> 00:12:45.980 +And then here's the third part. + +00:12:45.980 --> 00:12:48.067 +The last three lines are not so +difficult. + +00:12:48.067 --> 00:12:52.800 +If the backend is HTML, + +00:12:52.800 --> 00:12:55.360 +please use this template string. + +00:12:55.360 --> 00:12:57.440 +Otherwise, use the other string. + +00:12:57.440 --> 00:13:01.279 +For each of these string markers, + +00:13:01.279 --> 00:13:04.959 +please put in the color, who wrote it, +and then the contents + +00:13:04.959 --> 00:13:07.279 +of the special block or the link type. + +00:13:08.160 --> 00:13:11.600 +So that's pretty neat. Not so difficult. + +00:13:11.600 --> 00:13:14.639 +I thought that was kind of cool, + +00:13:14.639 --> 00:13:16.600 +then noticed it's anaphoric. + +00:13:16.600 --> 00:13:21.033 +This defblock gives you two new names. + +00:13:21.033 --> 00:13:23.433 +It gives you a name called contents, + +00:13:23.433 --> 00:13:26.480 +and it gives you a name called backend. + +00:13:26.480 --> 00:13:29.733 +So even if you're writing a defblock + +00:13:29.733 --> 00:13:32.560 +and you intend it to be used +only for links... + +00:13:32.560 --> 00:13:35.440 +Like these colors, for example. + +00:13:35.440 --> 00:13:38.399 +These colors were defined using defblock. + +00:13:38.399 --> 00:13:41.279 +I used them as links right here. + +00:13:41.279 --> 00:13:43.360 +You don't need to worry + +00:13:43.360 --> 00:13:45.300 +where does the text come from +in the link. + +00:13:45.300 --> 00:13:48.959 +If I say "red:Bob," is it Bob? + +00:13:48.959 --> 00:13:52.000 +Or if I put a description, is it the +description? + +00:13:52.000 --> 00:13:54.000 +So it's whatever is available will + +00:13:54.000 --> 00:13:56.720 +become the value of contents. + +00:13:56.720 --> 00:13:59.199 +If you're really interested + +00:13:59.199 --> 00:14:02.433 +and you want to do some intricate stuff, + +00:14:02.433 --> 00:14:06.933 +defblock also gives you something called +raw-contents, + +00:14:06.933 --> 00:14:08.633 +if you really want to touch + +00:14:08.633 --> 00:14:12.639 +the raw contents with all of the Org +markups still there. + +00:14:12.639 --> 00:14:19.440 +Let's see how everyone can communicate +amongst themselves + +00:14:19.440 --> 00:14:22.480 +using this new interface. + +00:14:22.480 --> 00:14:26.000 +So, Sacha speculates and she... How does + +00:14:26.000 --> 00:14:28.399 +she speculate for her Org HTML? + +00:14:28.399 --> 00:14:33.733 +She might just write. Hey look at that, +no HTML, nice. + +00:14:34.800 --> 00:14:36.833 +Amin wants to have some green, + +00:14:36.833 --> 00:14:39.600 +and so he just says, hey here's some +color green. + +00:14:39.600 --> 00:14:42.959 +There you go. It looks almost the same. + +00:14:42.959 --> 00:14:48.267 +Notice that the main argument is right +here. + +00:14:48.267 --> 00:14:49.680 +defblock took an author, + +00:14:49.680 --> 00:14:51.333 +and here's the author again. + +00:14:51.333 --> 00:14:53.920 +And now the optional argument + +00:14:53.920 --> 00:14:57.007 +uses the org babel source interface + +00:14:57.007 --> 00:15:02.867 +You just say :, then a key, and then the +argument. Quite nice. + +00:15:02.867 --> 00:15:07.920 +Corwin doesn't want to use blocks. +It's a bit of an overkill. + +00:15:07.920 --> 00:15:12.959 +He can just write a link. + +00:15:12.959 --> 00:15:17.440 +So the main argument is now +the label of the link, + +00:15:17.440 --> 00:15:23.667 +and the description of the link is the +contents of the feedback. + +00:15:23.667 --> 00:15:25.680 +So that was quite nice. + +00:15:25.680 --> 00:15:29.360 +So it looks like everyone uses the same +interface on the left + +00:15:29.360 --> 00:15:32.800 +and can have varying outputs. + +00:15:32.800 --> 00:15:34.480 +I think it looks quite nice, + +00:15:34.480 --> 00:15:36.639 +and I hope you do too. + +00:15:36.639 --> 00:15:38.800 +There's a few more. + +00:15:38.800 --> 00:15:41.800 +Maybe, as you saw in some previous ones, + +00:15:41.800 --> 00:15:43.920 +we had text side beside side, + +00:15:43.920 --> 00:15:47.440 +or we folded some regions away. + +00:15:47.440 --> 00:15:50.959 +We put some things in pretty boxes. + +00:15:50.959 --> 00:15:57.120 +We had some spoilers at the very +beginning that we hid some text. + +00:15:57.120 --> 00:16:01.680 +We demoed some texts. Here's some Org +and here's what it looks like, + +00:16:01.680 --> 00:16:05.199 +and most importantly, they compose. + +00:16:05.199 --> 00:16:12.639 +There's a a macro called thread-block. + +00:16:12.639 --> 00:16:17.000 +thread-block call, and it lets you +thread the contents + +00:16:17.000 --> 00:16:18.000 +through a number of blocks, + +00:16:18.000 --> 00:16:20.639 +treating them as if they were functions. + +00:16:20.639 --> 00:16:22.480 +So, really, you can think of a block + +00:16:23.680 --> 00:16:25.567 +as a string-valued function. + +00:16:25.567 --> 00:16:28.533 +That's pretty neat, I think. + +00:16:28.533 --> 00:16:30.959 +Thank you for listening. + +00:16:31.759 --> 00:16:34.320 +I hope you've enjoyed this little + +00:16:34.880 --> 00:16:38.160 +happy fun time with the Emacs and +friends. + +00:16:38.160 --> 00:16:43.730 +I'll happily answer questions right now. + +00:16:45.360 --> 00:16:49.467 +Someone says: "Why did you put +optional arguments + +00:16:49.467 --> 00:16:50.480 +in a separate list + +00:16:50.480 --> 00:16:54.560 +rather than using cl-style argument +lists?" + +00:16:54.560 --> 00:16:58.399 +So that's a very good question, + +00:16:58.399 --> 00:17:00.000 +and I will answer that + +00:17:00.000 --> 00:17:05.467 +by showing you a more involved +definition of feedback. + +00:17:05.467 --> 00:17:14.567 +Let's look at a more involved one right +here. + +00:17:14.567 --> 00:17:19.280 +So, for example, this one is +called rremark. + +00:17:19.280 --> 00:17:23.439 +Please let me know if my text is not +sufficiently big. + +00:17:23.439 --> 00:17:28.033 +Here is why we have two arguments. + +00:17:28.033 --> 00:17:30.720 +That takes two arguments instead of one + +00:17:30.720 --> 00:17:33.360 +for its argument list. + +00:17:33.360 --> 00:17:34.799 +You have def block, + +00:17:34.799 --> 00:17:36.000 +then you have the name, + +00:17:36.000 --> 00:17:40.467 +then you have the first argument list + +00:17:40.467 --> 00:17:42.880 +and the second argument list. + +00:17:42.880 --> 00:17:46.080 +The first argument list + +00:17:46.080 --> 00:17:49.280 +takes the text right after the begin. + +00:17:49.280 --> 00:17:53.000 +The text right after the begin is the +main argument. + +00:17:53.000 --> 00:17:59.200 +And then the remaining key-value pairs +are in the second argument list. + +00:18:00.320 --> 00:18:03.280 +Now the reason we have two is because + +00:18:03.280 --> 00:18:08.880 +in order to streamline the interface to +account for both special blocks + +00:18:08.880 --> 00:18:13.360 +and Org link types, what we do is we say, + +00:18:13.360 --> 00:18:18.000 +in the first argument list, you can give +a name to the first argument, + +00:18:18.000 --> 00:18:19.633 +give it a default value, + +00:18:19.633 --> 00:18:28.800 +and anything else you provide will +become part of the link information. + +00:18:28.800 --> 00:18:30.861 +For example, this link, + +00:18:30.861 --> 00:18:32.833 +we decided to make its face +angry red. + +00:18:32.833 --> 00:18:36.433 +You might want to give other +features to links. + +00:18:36.433 --> 00:18:39.100 +So we're trying to streamline +the interface + +00:18:39.100 --> 00:18:41.733 +for both special blocks and +Org link types, + +00:18:41.733 --> 00:18:46.240 +and we thought this way was quite nice. + +00:18:46.240 --> 00:18:47.500 +That was the main reason. + +00:18:47.500 --> 00:18:52.480 +Someone asks-- + +00:18:52.480 --> 00:18:55.039 +if you have follow-ups, please ask-- + +00:18:55.039 --> 00:18:57.600 +Someone asks, "Do you intend to try to + +00:18:57.600 --> 00:19:00.559 +upstream this amazing work into Org?" + +00:19:00.559 --> 00:19:02.300 +Well, I'm glad you like it. + +00:19:02.300 --> 00:19:04.559 +I don't know how to upstream, + +00:19:04.559 --> 00:19:06.400 +but I will look into it, + +00:19:06.400 --> 00:19:09.833 +and any advice or guidance +would be much appreciated. + +00:19:11.840 --> 00:19:15.267 +Lisp is awesome. Just as +defun is a macro, + +00:19:15.267 --> 00:19:17.120 +defblock is a macro, and then + +00:19:17.120 --> 00:19:20.240 +source blocks are awesome. + +00:19:20.240 --> 00:19:22.467 +Now maybe we can have arguments in +special blocks, + +00:19:22.467 --> 00:19:28.799 +and motivate and encourage more +people to learn Lisp. + +00:19:28.799 --> 00:19:32.559 +So another person asks, + +00:19:32.559 --> 00:19:35.280 +"What is used to produce colorful + +00:19:35.280 --> 00:19:38.559 +boxes around the cursor?" + +00:19:38.559 --> 00:19:40.400 +I'm not quite sure if you're asking... + +00:19:40.400 --> 00:19:42.559 +Are you talking about my cursor +right here, + +00:19:42.559 --> 00:19:48.400 +or are you talking about in the slide? + +00:19:48.400 --> 00:19:53.767 +So this cursor is some application +called Streambrush, + +00:19:53.767 --> 00:19:55.440 +that I had to purchase. + +00:19:55.440 --> 00:19:59.039 +Unfortunately, I could not find a a +suitable free one. + +00:19:59.039 --> 00:20:03.067 +The blocks... I can demonstrate some +Emacs Lisp. + +00:20:03.067 --> 00:20:04.467 +I can open up my Emacs, if people like, + +00:20:04.467 --> 00:20:06.320 +and we can try some things out. + +00:20:06.320 --> 00:20:09.440 +Happy to do that. + +00:20:09.440 --> 00:20:10.133 +You're welcome. + +00:20:10.133 --> 00:20:15.520 +Someone asks a side question about +org-reveal: "How do you get + +00:20:15.520 --> 00:20:17.440 +bespoke or multiple-column layouts + +00:20:17.440 --> 00:20:19.120 +without using HTML?" + +00:20:19.120 --> 00:20:22.559 +Excellent question. That's what we do. + +00:20:22.559 --> 00:20:25.533 +That's what this project is about. + +00:20:25.533 --> 00:20:27.000 +So it's not org-reveal, + +00:20:27.000 --> 00:20:30.267 +it's our fancy parallel block. + +00:20:30.267 --> 00:20:33.440 +So we have this thing. You say, +#+begin_parallel. + +00:20:33.440 --> 00:20:35.679 +You say how many columns you would like. + +00:20:35.679 --> 00:20:37.967 +Do you want a bar or not? + +00:20:37.967 --> 00:20:39.679 +And then you write some text, + +00:20:39.679 --> 00:20:44.400 +and then you get some text, and +according with the bar or not. + +00:20:44.400 --> 00:20:47.520 +That's how we achieve that in our slides. + +00:20:47.520 --> 00:20:52.880 +I'm not quite sure where this was. + +00:20:52.880 --> 00:20:59.520 +Somewhere here, I think. + +00:20:59.520 --> 00:21:06.240 +Let me try to find this for you. + +00:21:06.240 --> 00:21:10.433 +I can't seem to find where the parallel +blocks were. Apologies. + +00:21:10.433 --> 00:21:15.039 +Let's move on to the next question, +I suppose. + +00:21:15.039 --> 00:21:18.400 +I'm pretty sure they're here. Ah, there +they are. + +00:21:18.400 --> 00:21:22.640 +So these were just instances of using + +00:21:22.640 --> 00:21:26.480 +the parallel block, and it makes things +parallel. + +00:21:26.480 --> 00:21:27.633 +So that's quite nice. + +00:21:27.633 --> 00:21:33.360 +Another person asks, + +00:21:33.360 --> 00:21:37.840 +"How does this relate to pandoc, + +00:21:37.840 --> 00:21:40.960 +which is used for converting between +markup formats?" + +00:21:40.960 --> 00:21:43.919 +So all we're doing is we're saying, + +00:21:43.919 --> 00:21:47.679 +hey, please write Org because Org is +just fantastic, + +00:21:47.679 --> 00:21:49.267 +and we love it, and it's the dream, + +00:21:49.267 --> 00:21:51.760 +and if you would like to view things + +00:21:51.760 --> 00:21:55.900 +in HTML, or in org-reveal, or in PDF, + +00:21:55.900 --> 00:21:58.559 +that's up to the user. + +00:22:02.320 --> 00:22:06.080 +Made it too small now. +So here is an example. + +00:22:06.080 --> 00:22:10.240 +Here's how parallel is implemented, + +00:22:10.240 --> 00:22:14.320 +just as a quick example, not too long. + +00:22:14.320 --> 00:22:17.800 +About half of the implementation is +documentation, + +00:22:17.800 --> 00:22:22.720 +so, hopefully, that speaks for for how +useful this feature is. + +00:22:22.720 --> 00:22:25.280 +We decide if there's a rule or not. + +00:22:25.280 --> 00:22:28.080 +We look for the column break. + +00:22:28.080 --> 00:22:30.600 +Here we're looking at the backend. + +00:22:30.600 --> 00:22:31.840 +If the backend is LaTeX, + +00:22:31.840 --> 00:22:34.133 +please use this incantation + +00:22:34.133 --> 00:22:37.679 +with multicolumns, minipages, +what have you. + +00:22:37.679 --> 00:22:41.600 +If the backend is something else, please +do this: + +00:22:41.600 --> 00:22:48.080 +div, style and other gibberish that we +don't really want to look at. + +00:22:48.080 --> 00:22:51.760 +Pandoc works from Org, + +00:22:51.760 --> 00:22:53.633 +so it might not work directly, + +00:22:53.633 --> 00:22:59.679 +since our interface... The way we set it +up is: when you try to export, + +00:22:59.679 --> 00:23:03.039 +we hook in and we do a bunch of +pre-processing, + +00:23:03.039 --> 00:23:07.440 +so this defblock is a +string-valued function. + +00:23:07.440 --> 00:23:13.919 +Whenever we see these #+begin_parallel +when you do an export, + +00:23:13.919 --> 00:23:17.767 +I tell Emacs, hold up, look for those +#+begin_parallels, please. + +00:23:17.767 --> 00:23:20.320 +Oh, you found them? Grab that text. + +00:23:20.320 --> 00:23:21.533 +You grabbed it. Great. + +00:23:21.533 --> 00:23:24.080 +Now please apply this person's function + +00:23:24.080 --> 00:23:27.120 +onto that text, and splice in the result. + +00:23:27.120 --> 00:23:30.400 +So when you export, we're performing + +00:23:30.400 --> 00:23:35.120 +arbitrary computations on your text. + +00:23:35.120 --> 00:23:39.633 +Some people might not find that +comforting, + +00:23:39.633 --> 00:23:43.039 +to have arbitrary computations happening. + +00:23:43.039 --> 00:23:45.039 +In this article, there's a few where + +00:23:45.039 --> 00:23:47.167 +we change your text upon export. + +00:23:47.167 --> 00:23:51.760 +We translate it, we do other things +to it. + +00:23:51.760 --> 00:23:56.500 +So someone says, "If you export to +LaTeX, to PDF, + +00:23:56.500 --> 00:23:58.640 +does that work well with Beamer as well + +00:23:58.640 --> 00:24:00.320 +to create slides with columns?" + +00:24:05.200 --> 00:24:08.000 +I made a bunch of these changes + +00:24:08.000 --> 00:24:09.200 +earlier this morning, + +00:24:09.200 --> 00:24:12.320 +and it just says LaTeX right here. + +00:24:12.320 --> 00:24:14.400 +So if you want to go to beamer, + +00:24:14.400 --> 00:24:15.360 +I think the back end for me, + +00:24:15.360 --> 00:24:17.333 +beamer is called, well, beamer, + +00:24:17.333 --> 00:24:22.000 +so instead of a pcase, what we would do +is, we would say, + +00:24:22.000 --> 00:24:27.167 +if it's a 'latex or it's a 'beamer, then +use this. + +00:24:27.167 --> 00:24:30.267 +Otherwise, it's not a LaTeX, + +00:24:30.267 --> 00:24:31.867 +it will simply default to this one, + +00:24:31.867 --> 00:24:34.433 +which could be dangerous +for your needs. + +00:24:34.433 --> 00:24:39.167 +I think it's a bad practice to put a +underscore, + +00:24:39.167 --> 00:24:40.767 +but I did it really quickly + +00:24:40.767 --> 00:24:44.500 +because I just wanted to show you that +it works fine in org-reveal + +00:24:44.500 --> 00:24:47.440 +Contributions are more than welcome. + +00:24:47.440 --> 00:24:52.240 +I happily would love any assistance. + +00:24:52.240 --> 00:24:58.633 +We have a Lisp reference +cheat sheet here + +00:24:58.633 --> 00:25:01.000 +to learn a little bit about Lisp, if +you're not comfortable, + +00:25:01.000 --> 00:25:03.267 +or to ask some questions. + +00:25:03.267 --> 00:25:06.400 +Lots of helpful people. + +00:25:06.400 --> 00:25:09.440 +So there's another question that says, + +00:25:09.440 --> 00:25:13.120 +"Does typing in a block mess up with +syntax highlighting? + +00:25:13.120 --> 00:25:15.679 +Usually, you use a single color inside an + +00:25:15.679 --> 00:25:17.279 +example block, for example. + +00:25:17.279 --> 00:25:21.279 +Ah, you found my crutch. + +00:25:25.279 --> 00:25:27.333 +Emacs is all encompassing, + +00:25:27.333 --> 00:25:29.760 +and I'm not quite sure how fonts work. + +00:25:29.760 --> 00:25:32.559 +I learned enough to get by. + +00:25:37.440 --> 00:25:38.667 +Here's how links work. + +00:25:38.667 --> 00:25:40.799 +They're a bit complicated. + +00:25:40.799 --> 00:25:42.567 +This is a bit scary. + +00:25:42.567 --> 00:25:47.039 +I don't recommend anyone read it. + +00:25:47.039 --> 00:25:49.840 +Actually, let me open up an email + +00:25:50.559 --> 00:25:52.100 +and you can see what I see. + +00:25:52.100 --> 00:25:54.799 +So here's an Emacs. + +00:25:54.799 --> 00:25:56.799 +Let's make that a bit bigger. + +00:25:56.799 --> 00:25:59.133 +Let's change this slightly. + +00:25:59.133 --> 00:26:01.200 +Nope, that's worse. There you go. + +00:26:01.919 --> 00:26:09.360 +Here's some words. Here's red hello. + +00:26:09.360 --> 00:26:15.679 +But you're worried about preserving +fontification. + +00:26:15.679 --> 00:26:18.480 +Let's make an emacs-lisp block. + +00:26:18.880 --> 00:26:22.840 +Let's say, (+ 1 2). + +00:26:22.840 --> 00:26:31.133 +Ah, where's the fun? Hello. Bye. + +00:26:31.133 --> 00:26:32.080 +Okay. Where's the coloring? + +00:26:32.080 --> 00:26:36.000 +If we zoom in on this #+begin_src block, + +00:26:36.000 --> 00:26:39.200 +you can see down here + +00:26:39.200 --> 00:26:42.159 +we have our our coloring + +00:26:42.159 --> 00:26:43.279 +when we zoom in. + +00:26:43.279 --> 00:26:46.960 +If we zoom out, no coloring. + +00:26:46.960 --> 00:26:50.880 +Zoom in, coloring. +Zoom out, aah, no coloring. + +00:26:50.880 --> 00:26:55.679 +Let's take off these bad boys, +and oh, look, my coloring's back. + +00:26:55.679 --> 00:27:03.760 +In a previous iteration of the system, +I was able to maintain coloring. + +00:27:03.760 --> 00:27:06.400 +In this new iteration, I am not. + +00:27:06.400 --> 00:27:07.400 +I don't know how to do it. + +00:27:07.400 --> 00:27:10.333 +I haven't had the time to implement it. + +00:27:10.333 --> 00:27:17.279 +I spent a lot of time writing this +48-page documentation + +00:27:17.279 --> 00:27:21.133 +with some fun examples to try to help +people learn. + +00:27:21.133 --> 00:27:23.200 +But I would appreciate any help or +guidance + +00:27:23.200 --> 00:27:26.240 +on how to maintain the fontification. + +00:27:26.240 --> 00:27:29.200 +I really would like to keep those +colors in. + +00:27:29.200 --> 00:27:32.640 +[Amin]: Musa, we have time for maybe one +more question, + +00:27:32.640 --> 00:27:34.500 +one or two more questions, + +00:27:34.500 --> 00:27:37.039 +and then we have to move on to the +next talk. + +00:27:37.039 --> 00:27:39.120 +You're more than welcome to + +00:27:39.120 --> 00:27:42.559 +continue taking the questions via +IRC or the pad. + +00:27:42.559 --> 00:27:45.760 +[Musa]: Okay. Thank you. + +00:27:45.760 --> 00:27:48.880 +The final question we'll take is, + +00:27:48.880 --> 00:27:52.320 +"Should packages implement + +00:27:52.320 --> 00:27:53.967 +interface to one specific format, + +00:27:53.967 --> 00:27:55.600 +or attempt to be inclusive + +00:27:55.600 --> 00:27:57.279 +to all the potential output targets?" + +00:27:57.279 --> 00:27:59.300 +I think you should just make them +as you go, + +00:27:59.300 --> 00:28:01.500 +and add them as you need them. + +00:28:01.500 --> 00:28:05.600 +We'll make Github requests for things. + +00:28:05.600 --> 00:28:08.533 +We can share recipes in this document, + +00:28:08.533 --> 00:28:12.333 +and then try to add other techniques, + +00:28:12.333 --> 00:28:19.200 +and then we can use these blocks as a +common interface + +00:28:19.200 --> 00:28:22.240 +for exporting to PDF and other things. + +00:28:22.240 --> 00:28:26.000 +Since someone asked, + +00:28:26.000 --> 00:28:28.033 +here what a PDF looks like. + +00:28:28.033 --> 00:28:31.667 +This is the same PDF rendered. + +00:28:31.667 --> 00:28:34.960 +I made no effort to make it look good, + +00:28:34.960 --> 00:28:37.840 +but it surprisingly does look good. + +00:28:38.559 --> 00:28:40.067 +That was nice. + +00:28:40.067 --> 00:28:44.320 +That was a terrible magenta, +but that is life. + +00:28:44.320 --> 00:28:47.100 +Anyhow, I hope you all enjoyed this talk. + +00:28:47.100 --> 00:28:51.033 +I hope you will find +defblock useful to you. + +00:28:51.033 --> 00:28:52.799 +It is available on MELPA. + +00:28:52.799 --> 00:28:56.367 +In a rush to make it available for +EmacsConf 2020, + +00:28:56.367 --> 00:29:00.159 +some MELPA guidelines may not have been +adhered to. + +00:29:00.159 --> 00:29:01.600 +Please do not hit me. + +00:29:01.600 --> 00:29:08.559 +I hope everyone enjoys the rest of the +EmacsConf 2020. Thank you! diff --git a/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt b/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt new file mode 100644 index 00000000..0f0b2688 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt @@ -0,0 +1,1087 @@ +WEBVTT + +00:00:00.960 --> 00:00:03.679 +uh okay so the first question is is uh + +00:00:03.679 --> 00:00:05.600 +do you think that this package can be + +00:00:05.600 --> 00:00:08.000 +included into Emacs or + +00:00:08.000 --> 00:00:12.320 +uh empire uh + +00:00:12.320 --> 00:00:15.360 +I think uh it most definitely can is + +00:00:15.360 --> 00:00:18.560 +just a matter of paperwork but + +00:00:18.560 --> 00:00:21.760 +the reason I initially wanted to make it + +00:00:21.760 --> 00:00:24.480 +like a central package is that so that I + +00:00:24.480 --> 00:00:25.039 +can + +00:00:25.039 --> 00:00:28.720 +experiment with it more + +00:00:28.720 --> 00:00:31.920 +like have more freedom to experiment but + +00:00:31.920 --> 00:00:34.320 +eventually I think is a good candidate + +00:00:34.320 --> 00:00:35.680 +for inclusion into + +00:00:35.680 --> 00:00:38.800 +core + +00:00:38.800 --> 00:00:41.200 +and because because currently not in + +00:00:41.200 --> 00:00:42.640 +corey mass there are a couple of + +00:00:42.640 --> 00:00:44.480 +problems with it + +00:00:44.480 --> 00:00:47.840 +mostly in terms of performance + +00:00:47.840 --> 00:00:50.960 +for example like anytime we want to + +00:00:50.960 --> 00:00:53.280 +access the text in a buffer we need to + +00:00:53.280 --> 00:00:54.160 +make + +00:00:54.160 --> 00:00:57.360 +a copy of the text into a string + +00:00:57.360 --> 00:01:00.480 +and then right after reading from that + +00:01:00.480 --> 00:01:03.520 +text we need to free it right away and + +00:01:03.520 --> 00:01:05.280 +that results in a lot of garbage + +00:01:05.280 --> 00:01:09.040 +collection so it would be better + +00:01:09.040 --> 00:01:11.920 +either the treasure could be included in + +00:01:11.920 --> 00:01:12.240 +core + +00:01:12.240 --> 00:01:15.680 +imax or dynamic dynamic model support + +00:01:15.680 --> 00:01:16.799 +can be + +00:01:16.799 --> 00:01:19.439 +augmented with direct text access + +00:01:19.439 --> 00:01:24.080 +somehow + +00:01:24.080 --> 00:01:26.400 +so the second question is will release + +00:01:26.400 --> 00:01:27.200 +performance + +00:01:27.200 --> 00:01:30.320 +be more competitive with cce max + +00:01:30.320 --> 00:01:33.040 +enough so electricity in english is more + +00:01:33.040 --> 00:01:35.670 +attractive + +00:01:35.670 --> 00:01:38.240 +[Music] + +00:01:38.240 --> 00:01:43.439 +I think it's possible but uh yeah + +00:01:43.439 --> 00:01:45.840 +not sure about the amount of effort it + +00:01:45.840 --> 00:01:46.799 +can be + +00:01:46.799 --> 00:01:52.960 +multi-years effort and one thing that + +00:01:52.960 --> 00:01:56.479 +even though gce max can make uh + +00:01:56.479 --> 00:02:00.719 +it is fast enough there's + +00:02:00.719 --> 00:02:03.119 +there's one thing that it uh cannot have + +00:02:03.119 --> 00:02:05.280 +which is that because it's the lisp + +00:02:05.280 --> 00:02:09.679 +it needs the garage collector so + +00:02:09.679 --> 00:02:12.480 +we may experiment experience some kind + +00:02:12.480 --> 00:02:14.000 +of + +00:02:14.000 --> 00:02:17.360 +gcc post if we use live whereas the + +00:02:17.360 --> 00:02:19.920 +currently transistor is written in c + +00:02:19.920 --> 00:02:28.400 +so there's no such latency + +00:02:28.400 --> 00:02:31.040 +the next question is do you think three + +00:02:31.040 --> 00:02:32.400 +sister would be useful + +00:02:32.400 --> 00:02:36.080 +for all buffers I can imagine it being + +00:02:36.080 --> 00:02:38.319 +used to keep a post ast about an arc + +00:02:38.319 --> 00:02:39.599 +buffer + +00:02:39.599 --> 00:02:42.560 +light off element and update it in real + +00:02:42.560 --> 00:02:43.920 +time + +00:02:43.920 --> 00:02:46.239 +yeah actually this is a very interesting + +00:02:46.239 --> 00:02:47.760 +idea + +00:02:47.760 --> 00:02:50.800 +I saw someone started + +00:02:50.800 --> 00:02:53.760 +resistor grammar for all already I don't + +00:02:53.760 --> 00:02:55.120 +have a link right now but + +00:02:55.120 --> 00:02:58.159 +I can look for it + +00:02:58.159 --> 00:03:01.040 +I'll try looking for it and put the link + +00:03:01.040 --> 00:03:01.680 +in + +00:03:01.680 --> 00:03:09.599 +here later + +00:03:09.599 --> 00:03:13.280 +yeah yes someone has written here the uh + +00:03:13.280 --> 00:03:15.519 +and the biggest problem with uh right + +00:03:15.519 --> 00:03:17.040 +now is that it doesn't have + +00:03:17.040 --> 00:03:21.360 +formal grammar so + +00:03:21.360 --> 00:03:22.380 +so the effort + +00:03:22.380 --> 00:03:24.400 +[Applause] + +00:03:24.400 --> 00:03:27.120 +be quite big I think but but once we + +00:03:27.120 --> 00:03:28.799 +have that because the + +00:03:28.799 --> 00:03:31.519 +tree sitter can be run on the web as + +00:03:31.519 --> 00:03:34.239 +well + +00:03:34.239 --> 00:03:37.440 +we can on the web and in many other + +00:03:37.440 --> 00:03:38.080 +places + +00:03:38.080 --> 00:03:40.720 +if we have a grammar for a traditional + +00:03:40.720 --> 00:03:41.840 +grammar for all + +00:03:41.840 --> 00:03:45.680 +we can bring off more + +00:03:45.680 --> 00:03:49.680 +like everywhere that's a very cool + +00:03:49.680 --> 00:03:56.000 +thought + +00:03:56.000 --> 00:03:58.080 +next one is could this be used with + +00:03:58.080 --> 00:04:00.480 +packages like smart parents that aim to + +00:04:00.480 --> 00:04:03.200 +bring structural editing to + +00:04:03.200 --> 00:04:07.120 +non-s expression based languages + +00:04:07.120 --> 00:04:11.360 +yes that is actually one of the + +00:04:11.360 --> 00:04:14.720 +intended use cases initially + +00:04:14.720 --> 00:04:17.280 +it's definitely possible but it's just + +00:04:17.280 --> 00:04:18.880 +that no one has + +00:04:18.880 --> 00:04:37.199 +only started writing the integration yet + +00:04:37.199 --> 00:04:40.639 +and next one + +00:04:40.639 --> 00:04:41.919 +could you show the source that was + +00:04:41.919 --> 00:04:45.040 +matched by the parser in the debug view + +00:04:45.040 --> 00:04:48.479 +in addition to the grammar part matched + +00:04:48.479 --> 00:04:54.960 +uh yeah that's actually um + +00:04:54.960 --> 00:04:57.759 +on my to-do list but I haven't had time + +00:04:57.759 --> 00:04:59.280 +for it yet + +00:04:59.280 --> 00:05:02.560 +so uh if you go to the treesita + +00:05:02.560 --> 00:05:06.560 +website it also has an + +00:05:06.560 --> 00:05:08.800 +online playground where you can input + +00:05:08.800 --> 00:05:12.000 +the code and see the + +00:05:12.000 --> 00:05:14.400 +parse tree in real time and it's + +00:05:14.400 --> 00:05:16.000 +actually + +00:05:16.000 --> 00:05:19.360 +a lot more fancy than what we have in + +00:05:19.360 --> 00:05:22.840 +imax currently so + +00:05:22.840 --> 00:05:25.919 +yeah I just don't have time for it yes + +00:05:25.919 --> 00:05:27.120 +so + +00:05:27.120 --> 00:05:30.320 +some help here would be + +00:05:30.320 --> 00:05:38.700 +very appreciated + +00:05:38.700 --> 00:05:49.919 +[Music] + +00:05:49.919 --> 00:05:52.000 +the next question is will it ever be + +00:05:52.000 --> 00:05:54.240 +possible to write resetter grammars in a + +00:05:54.240 --> 00:05:55.280 +lisp + +00:05:55.280 --> 00:06:00.560 +or will javascript be required + +00:06:00.560 --> 00:06:02.800 +yeah that is already answered in the + +00:06:02.800 --> 00:06:05.280 +part so the + +00:06:05.280 --> 00:06:07.600 +the transcript is actually just used as + +00:06:07.600 --> 00:06:08.639 +a sort of + +00:06:08.639 --> 00:06:12.160 +preprocessor so the + +00:06:12.160 --> 00:06:14.639 +python generator actually works on the + +00:06:14.639 --> 00:06:15.680 +on a json + +00:06:15.680 --> 00:06:19.280 +structure so uh it's definitely possible + +00:06:19.280 --> 00:06:20.240 +to replace + +00:06:20.240 --> 00:06:29.039 +javascript with lists for this + +00:06:29.039 --> 00:06:31.280 +how extensive will the compatibility + +00:06:31.280 --> 00:06:32.160 +between + +00:06:32.160 --> 00:06:35.360 +highlighting grammars for e-max and + +00:06:35.360 --> 00:06:35.840 +those + +00:06:35.840 --> 00:06:44.560 +for veeam nail view + +00:06:44.560 --> 00:06:48.720 +so so right now the + +00:06:48.720 --> 00:06:51.680 +nail vim and Emacs used a different set + +00:06:51.680 --> 00:06:52.000 +of + +00:06:52.000 --> 00:06:55.440 +the highlighting queries and + +00:06:55.440 --> 00:06:59.520 +item probably uses another set of + +00:06:59.520 --> 00:07:03.039 +patterns as well I think it makes sense + +00:07:03.039 --> 00:07:04.960 +because + +00:07:04.960 --> 00:07:07.680 +each editor has its own like existing + +00:07:07.680 --> 00:07:08.479 +conventions + +00:07:08.479 --> 00:07:11.919 +for syntax highlighting so + +00:07:11.919 --> 00:07:15.599 +at least in the beginning I don't expect + +00:07:15.599 --> 00:07:18.560 +there is any compatibility between + +00:07:18.560 --> 00:07:21.599 +different editors + +00:07:21.599 --> 00:07:27.280 +but I think in the long run it will be + +00:07:27.280 --> 00:07:29.520 +would it better if there's some kind of + +00:07:29.520 --> 00:07:31.360 +effort to + +00:07:31.360 --> 00:07:34.880 +unify the at least provide the + +00:07:34.880 --> 00:07:37.440 +most common patterns that should work + +00:07:37.440 --> 00:07:42.840 +across + +00:07:42.840 --> 00:07:51.759 +editors + +00:07:51.759 --> 00:07:53.520 +next one is could there be a + +00:07:53.520 --> 00:07:55.280 +standardized approach + +00:07:55.280 --> 00:07:57.919 +to coding automatic refactoring in the + +00:07:57.919 --> 00:08:01.039 +future + +00:08:01.039 --> 00:08:02.639 +so that whichever language mode you're + +00:08:02.639 --> 00:08:04.160 +using you could see many + +00:08:04.160 --> 00:08:12.960 +available refactoring operations + +00:08:12.960 --> 00:08:16.400 +I'm not sure about this because the + +00:08:16.400 --> 00:08:19.919 +like + +00:08:19.919 --> 00:08:22.240 +most of uh refactoring operations are + +00:08:22.240 --> 00:08:23.840 +actually very + +00:08:23.840 --> 00:08:26.960 +like highly specific to a language or at + +00:08:26.960 --> 00:08:28.720 +least to class of + +00:08:28.720 --> 00:08:33.599 +class of languages so + +00:08:33.599 --> 00:08:37.839 +so so maybe it's not like uh one single + +00:08:37.839 --> 00:08:40.719 +approach for all the languages but maybe + +00:08:40.719 --> 00:08:41.519 +uh + +00:08:41.519 --> 00:08:43.760 +one for object-oriented oriented + +00:08:43.760 --> 00:08:44.959 +languages + +00:08:44.959 --> 00:08:50.160 +one for lisp like language for example + +00:08:50.160 --> 00:09:02.959 +maybe one for javascript and typestream + +00:09:02.959 --> 00:09:05.360 +next question is uh I'm completely new + +00:09:05.360 --> 00:09:07.519 +to trisita how do I use it + +00:09:07.519 --> 00:09:10.160 +as an end user is there any easy example + +00:09:10.160 --> 00:09:11.519 +config out there + +00:09:11.519 --> 00:09:14.000 +the organizer otherwise that shows + +00:09:14.000 --> 00:09:15.440 +standard usage + +00:09:15.440 --> 00:09:18.960 +with whatever programming language + +00:09:18.960 --> 00:09:20.480 +[Music] + +00:09:20.480 --> 00:09:27.600 +yeah there's no um + +00:09:27.600 --> 00:09:30.880 +uh actually that uh so the project has + +00:09:30.880 --> 00:09:32.000 +the documentation + +00:09:32.000 --> 00:09:36.399 +site but it's not very expensive yet + +00:09:36.399 --> 00:09:40.720 +I think we need to add more examples + +00:09:40.720 --> 00:09:48.720 +to the documentation + +00:09:48.720 --> 00:09:51.200 +can language major mode authors start + +00:09:51.200 --> 00:09:53.519 +taking advantage of this now + +00:09:53.519 --> 00:09:56.240 +or is it intended to be used as a minor + +00:09:56.240 --> 00:09:57.279 +mode + +00:09:57.279 --> 00:10:00.399 +uh actually it's both so it's intended + +00:10:00.399 --> 00:10:01.600 +to be used + +00:10:01.600 --> 00:10:04.480 +as a minor mode but it's also intended + +00:10:04.480 --> 00:10:05.920 +to + +00:10:05.920 --> 00:10:09.839 +be depended on by the major mode + +00:10:09.839 --> 00:10:13.519 +so basically it it wants to be a minor + +00:10:13.519 --> 00:10:13.920 +mode + +00:10:13.920 --> 00:10:17.200 +that is dependent on by the other + +00:10:17.200 --> 00:10:21.839 +major modes + +00:10:21.839 --> 00:10:25.680 +and by it here I mean the the base + +00:10:25.680 --> 00:10:30.839 +minor mode tree system mode + +00:10:30.839 --> 00:10:34.079 +so uh question + +00:10:34.079 --> 00:10:37.120 +11 is it possible to use this + +00:10:37.120 --> 00:10:40.160 +for refactoring tool + +00:10:40.160 --> 00:10:43.360 +uh yeah but + +00:10:43.360 --> 00:10:46.720 +um like for the kind of refactoring + +00:10:46.720 --> 00:10:47.680 +inside uh + +00:10:47.680 --> 00:10:52.640 +buffer it is uh + +00:10:52.640 --> 00:10:55.040 +it's very doable right now but you need + +00:10:55.040 --> 00:10:57.040 +to write some glue code + +00:10:57.040 --> 00:11:01.120 +but for for the kind of more + +00:11:01.120 --> 00:11:04.000 +extensive refactoring where you want to + +00:11:04.000 --> 00:11:04.399 +touch + +00:11:04.399 --> 00:11:09.279 +uh like all files in a project + +00:11:09.279 --> 00:11:11.440 +there needs there needs to be some kind + +00:11:11.440 --> 00:11:12.839 +of the project + +00:11:12.839 --> 00:11:15.920 +and another project and uh + +00:11:15.920 --> 00:11:18.399 +understanding of the language uh model + +00:11:18.399 --> 00:11:19.200 +system + +00:11:19.200 --> 00:11:21.120 +like how they are laid out in the file + +00:11:21.120 --> 00:11:22.560 +system as well + +00:11:22.560 --> 00:11:24.480 +and with that understanding that there + +00:11:24.480 --> 00:11:26.240 +should be passing of + +00:11:26.240 --> 00:11:29.920 +the files even files on the file system + +00:11:29.920 --> 00:11:30.480 +that + +00:11:30.480 --> 00:11:34.000 +are not yet loaded into Emacs + +00:11:34.000 --> 00:11:37.760 +so that sounds like something more + +00:11:37.760 --> 00:11:41.040 +a lot more + +00:11:41.040 --> 00:11:46.320 +a lot more extensive + +00:11:46.320 --> 00:11:49.519 +and it probably probably sounds like + +00:11:49.519 --> 00:11:50.000 +something + +00:11:50.000 --> 00:11:52.160 +something like an id in uh inside your + +00:11:52.160 --> 00:11:54.560 +max already like a replacement for + +00:11:54.560 --> 00:12:07.360 +for lsp + +00:12:07.360 --> 00:12:10.480 +so next question is the that pop-up mx + +00:12:10.480 --> 00:12:11.440 +window + +00:12:11.440 --> 00:12:15.200 +how do you get that + +00:12:15.200 --> 00:12:18.720 +is the custom hem code I wrote a long + +00:12:18.720 --> 00:12:20.320 +time ago + +00:12:20.320 --> 00:12:24.800 +but but right now the best way to + +00:12:24.800 --> 00:12:26.480 +to have something like that is probably + +00:12:26.480 --> 00:12:29.440 +the what is written here like uh + +00:12:29.440 --> 00:12:33.200 +ham boss frame or iv spring + +00:12:33.200 --> 00:12:39.839 +is a lot easier now + +00:12:39.839 --> 00:12:43.680 +is there a folding mode for tree sitter + +00:12:43.680 --> 00:12:46.320 +nowadays there's no folding mode for + +00:12:46.320 --> 00:12:48.079 +three sitters yet + +00:12:48.079 --> 00:12:52.000 +but uh + +00:12:52.000 --> 00:12:54.880 +uh but I think it would better be better + +00:12:54.880 --> 00:12:59.440 +if it's integrated with the + +00:12:59.440 --> 00:13:02.079 +like current currently there are + +00:13:02.079 --> 00:13:03.120 +multiple + +00:13:03.120 --> 00:13:04.880 +I'm not sure they're moving forward + +00:13:04.880 --> 00:13:07.200 +there are like code folding frameworks + +00:13:07.200 --> 00:13:10.240 +inside imax already or some the + +00:13:10.240 --> 00:13:12.800 +code showing packages like third party + +00:13:12.800 --> 00:13:13.920 +packaging + +00:13:13.920 --> 00:13:15.680 +and I think it's better to integrate + +00:13:15.680 --> 00:13:17.680 +with these mods + +00:13:17.680 --> 00:13:20.000 +rather than writing something new + +00:13:20.000 --> 00:13:32.399 +entirely + +00:13:32.399 --> 00:13:34.800 +are there any language major modes that + +00:13:34.800 --> 00:13:36.639 +have integrated already + +00:13:36.639 --> 00:13:40.079 +uh not yet + +00:13:40.079 --> 00:13:42.800 +so the there was a proposed web assembly + +00:13:42.800 --> 00:13:43.440 +mode + +00:13:43.440 --> 00:13:46.839 +but it's a new major mode in terms of + +00:13:46.839 --> 00:13:50.000 +existing major mode there is the + +00:13:50.000 --> 00:13:53.279 +typescript mode + +00:13:53.279 --> 00:13:55.600 +but they're only discussing about + +00:13:55.600 --> 00:13:57.519 +integration + +00:13:57.519 --> 00:14:02.079 +they're not integrated yet + +00:14:02.079 --> 00:14:04.639 +I think I can try writing the + +00:14:04.639 --> 00:14:05.360 +integration + +00:14:05.360 --> 00:14:09.199 +sometimes next month + +00:14:09.199 --> 00:14:11.839 +uh basically what they want right now is + +00:14:11.839 --> 00:14:12.720 +the + +00:14:12.720 --> 00:14:16.160 +syntax highlighting and handling + +00:14:16.160 --> 00:14:19.199 +synthetic highlighting and + +00:14:19.199 --> 00:14:22.959 +code indentation for tsx + +00:14:22.959 --> 00:14:27.760 +which is the embedded react + +00:14:27.760 --> 00:14:32.160 +syntax inside typescript + +00:14:32.160 --> 00:14:36.399 +so it turns out passing these tests + +00:14:36.399 --> 00:14:40.639 +is very troublesome so + +00:14:40.639 --> 00:14:43.920 +so trees that would be a crystal would + +00:14:43.920 --> 00:14:49.920 +be a lot of help there + +00:14:49.920 --> 00:14:53.279 +is there any link to the slides yes + +00:14:53.279 --> 00:14:59.920 +I'll post it in irc later + +00:14:59.920 --> 00:15:01.920 +regarding imax integration we will + +00:15:01.920 --> 00:15:04.240 +always need to be a foreign library or + +00:15:04.240 --> 00:15:05.440 +can it be included + +00:15:05.440 --> 00:15:10.839 +linked directly in compilation + +00:15:10.839 --> 00:15:14.480 +uh if if this is about the + +00:15:14.480 --> 00:15:17.600 +core library itself + +00:15:17.600 --> 00:15:21.839 +then I think it's uh answered it in the + +00:15:21.839 --> 00:15:23.440 +first question + +00:15:23.440 --> 00:15:27.440 +right now is a right now it's a + +00:15:27.440 --> 00:15:29.920 +dynamic model but in the long run it + +00:15:29.920 --> 00:15:30.959 +will better if + +00:15:30.959 --> 00:15:34.000 +it's included in core Emacs + +00:15:34.000 --> 00:15:39.839 +for the language definitions themselves + +00:15:39.839 --> 00:15:41.360 +it should be better if they are + +00:15:41.360 --> 00:15:43.279 +distributed uh + +00:15:43.279 --> 00:15:46.639 +separately like that right now so each + +00:15:46.639 --> 00:15:49.199 +uh for each language there will be a + +00:15:49.199 --> 00:15:49.680 +shared + +00:15:49.680 --> 00:15:52.639 +library that will be loaded by the core + +00:15:52.639 --> 00:16:00.480 +library at runtime + +00:16:00.480 --> 00:16:02.480 +so the last question is the python mode + +00:16:02.480 --> 00:16:04.240 +example is pretty good + +00:16:04.240 --> 00:16:06.160 +is that something that one can use + +00:16:06.160 --> 00:16:07.600 +already + +00:16:07.600 --> 00:16:12.320 +yes I'm using it at work right now + +00:16:12.320 --> 00:16:14.639 +I think that's all for that's all the + +00:16:14.639 --> 00:16:19.199 +questions right + +00:16:19.199 --> 00:16:23.440 +you are now unmuted yeah I think that's + +00:16:23.440 --> 00:16:27.839 +all the questions on the pads so far um + +00:16:27.839 --> 00:16:30.399 +so thank you but um there may be more + +00:16:30.399 --> 00:16:32.399 +questions coming on irc + +00:16:32.399 --> 00:16:36.639 +um I'll try to have a look + +00:16:36.639 --> 00:16:39.680 +and we still have about 10 or 15 more + +00:16:39.680 --> 00:16:40.560 +minutes so + +00:16:40.560 --> 00:16:43.600 +um there's no rush to wrap up in case um + +00:16:43.600 --> 00:16:48.160 +anyone has any more questions + +00:16:48.160 --> 00:16:50.880 +uh yeah I just realized that uh I mixed + +00:16:50.880 --> 00:16:51.360 +up the + +00:16:51.360 --> 00:16:54.959 +video editing and I uh lost an entire + +00:16:54.959 --> 00:16:56.000 +session on the + +00:16:56.000 --> 00:17:01.120 +introduction to treesita oh + +00:17:01.120 --> 00:17:06.640 +no worries + +00:17:06.640 --> 00:17:18.079 +you are now muted + +00:17:18.079 --> 00:17:20.079 +sounds like a perfect opportunity for + +00:17:20.079 --> 00:17:21.679 +you to redo the introduction if you'd + +00:17:21.679 --> 00:17:24.640 +like to + +00:17:24.640 --> 00:17:30.799 +uh actually uh forgot a lot of that + +00:17:30.799 --> 00:17:33.760 +and I'm with uh tired now so no I don't + +00:17:33.760 --> 00:17:35.760 +think I can do it + +00:17:35.760 --> 00:17:39.200 +it's uh 30 minutes until my bedtime + +00:17:39.200 --> 00:17:43.520 +oh yeah yeah okay you are now unmuted + +00:17:43.520 --> 00:17:46.640 +so in that case maybe we should + +00:17:46.640 --> 00:17:50.480 +um we should let tona + +00:17:50.480 --> 00:17:54.240 +get started going to bed and um and + +00:17:54.240 --> 00:17:56.960 +I mean then I will figure out what to do + +00:17:56.960 --> 00:17:57.840 +with the time + +00:17:57.840 --> 00:17:59.360 +should we start the next talk early + +00:17:59.360 --> 00:18:02.160 +since it's pre-recorded + +00:18:02.160 --> 00:18:05.360 +um yeah we can do we can do that um + +00:18:05.360 --> 00:18:07.919 +but um yeah tonight it you know right + +00:18:07.919 --> 00:18:09.919 +now it's pretty late there um no worries + +00:18:09.919 --> 00:18:10.480 +but + +00:18:10.480 --> 00:18:12.720 +yeah if you know over the next few days + +00:18:12.720 --> 00:18:13.520 +or weeks + +00:18:13.520 --> 00:18:16.559 +if you would like to um you know + +00:18:16.559 --> 00:18:20.240 +do a quick pre-recording or recording + +00:18:20.240 --> 00:18:22.080 +to add the introduction and then stitch + +00:18:22.080 --> 00:18:24.320 +it in with what you had already sent me + +00:18:24.320 --> 00:18:26.559 +um by all means please do that and I + +00:18:26.559 --> 00:18:30.160 +will upload the edited version + +00:18:30.160 --> 00:18:34.880 +uh yeah yeah I'll try to do that + +00:18:34.880 --> 00:18:39.760 +thank you yep thank you so much bye diff --git a/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt b/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt new file mode 100644 index 00000000..276f3150 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt @@ -0,0 +1,1235 @@ +WEBVTT + +00:00:01.520 --> 00:00:04.400 +Hello, everyone! My name is Tuấn-Anh. + +00:00:04.400 --> 00:00:07.200 +I've been using Emacs for about 10 years. + +00:00:07.200 --> 00:00:09.280 +Today, I'm going to talk about tree-sitter, + +00:00:09.280 --> 00:00:11.351 +a new Emacs package that allows Emacs + +00:00:11.351 --> 00:00:17.840 +to parse multiple programming languages +in real-time. + +00:00:17.840 --> 00:00:21.840 +So what is the problem statement? + +00:00:21.840 --> 00:00:24.131 +In order to support programming +functionalities + +00:00:24.131 --> 00:00:25.760 +for a particular language, + +00:00:25.760 --> 00:00:27.680 +a text editor needs to have some degree + +00:00:27.680 --> 00:00:29.679 +of language understanding. + +00:00:29.679 --> 00:00:31.840 +Traditionally, text editors have relied + +00:00:31.840 --> 00:00:34.960 +very heavily on regular expressions for +this. + +00:00:34.960 --> 00:00:37.013 +Emacs is no different. + +00:00:37.013 --> 00:00:40.170 +Most language major modes use regular +expressions + +00:00:40.170 --> 00:00:42.960 +for syntax-highlighting, code navigation, + +00:00:42.960 --> 00:00:46.618 +folding, indexing, and so on. + +00:00:46.618 --> 00:00:50.559 +Regular expressions are problematic for +a couple of reasons. + +00:00:50.559 --> 00:00:53.778 +They're slow and inaccurate. + +00:00:53.778 --> 00:00:56.800 +They also make the code hard to read and +write. + +00:00:56.800 --> 00:01:01.199 +Sometimes it's because the regular +expressions themselves are very hairy, + +00:01:01.199 --> 00:01:05.199 +and sometimes because they are just not +powerful enough. + +00:01:05.199 --> 00:01:08.625 +Some helper code is usually needed + +00:01:08.625 --> 00:01:11.200 +to parse more intricate language +features. + +00:01:11.200 --> 00:01:16.159 +That also illustrates the core problem +with regular expressions, + +00:01:16.159 --> 00:01:21.119 +in that they are not powerful enough to +parse programming languages. + +00:01:21.119 --> 00:01:25.040 +An example feature that regular +expressions cannot handle very well + +00:01:25.040 --> 00:01:28.320 +is string interpolation, which is a very +common feature + +00:01:28.320 --> 00:01:31.680 +in many modern programming languages. + +00:01:31.680 --> 00:01:34.079 +It would be much nicer if Emacs somehow + +00:01:34.079 --> 00:01:39.520 +had structural understanding of source +code, like IDEs do. + +00:01:39.520 --> 00:01:41.981 +There have been multiple efforts + +00:01:41.981 --> 00:01:45.280 +to bring this kind of programming +language understanding into Emacs. + +00:01:45.280 --> 00:01:47.119 +There are language-specific parsers + +00:01:47.119 --> 00:01:48.640 +written in Elisp + +00:01:48.640 --> 00:01:50.675 +that can be thought of + +00:01:50.675 --> 00:01:51.989 +as the next logical step +of the glue code + +00:01:51.989 --> 00:01:53.856 +on top of regular expressions, + +00:01:53.856 --> 00:01:57.356 +moving from partial local pattern +recognition + +00:01:57.356 --> 00:01:59.840 +into a full-fledged parser. + +00:01:59.840 --> 00:02:02.023 +The most prominent example of this +approach + +00:02:02.023 --> 00:02:06.479 +is probably the famous js2-mode. + +00:02:06.479 --> 00:02:10.080 +However, this approach has several issues. + +00:02:10.080 --> 00:02:12.606 +Parsing is computationally expensive, + +00:02:12.606 --> 00:02:16.800 +and Emacs Lisp is not good at that kind +of stuff. + +00:02:16.800 --> 00:02:19.156 +Furthermore, maintenance is very +troublesome. + +00:02:19.156 --> 00:02:22.160 +In order to work on these parsers, + +00:02:22.160 --> 00:02:24.239 +first, you have to know Elisp +well enough, + +00:02:24.239 --> 00:02:26.606 +and then you have to be comfortable with + +00:02:26.606 --> 00:02:29.739 +writing a recursive descending parser, + +00:02:29.739 --> 00:02:34.000 +while constantly keeping up with changes +to the language itself, + +00:02:34.000 --> 00:02:36.356 +which can be evolving very quickly, + +00:02:36.356 --> 00:02:39.360 +like Javascript, for example. + +00:02:39.360 --> 00:02:42.373 +Together, these constraints +significantly reduce + +00:02:42.373 --> 00:02:45.680 +the pool of potential maintainers. + +00:02:45.680 --> 00:02:47.760 +The biggest issue, though, in my opinion, + +00:02:47.760 --> 00:02:52.139 +is lack of the set of generic and +reusable APIs. + +00:02:52.139 --> 00:02:54.319 +This makes them very hard to use + +00:02:54.319 --> 00:02:55.920 +for minor modes that want to deal with + +00:02:55.920 --> 00:02:59.920 +cross-cutting concerns across multiple +languages. + +00:02:59.920 --> 00:03:01.760 +The other approach which has been + +00:03:01.760 --> 00:03:04.319 +gaining a lot of momentum +in recent years + +00:03:04.319 --> 00:03:06.560 +is externalizing language understanding + +00:03:06.560 --> 00:03:08.159 +to another process, + +00:03:08.159 --> 00:03:12.239 +also known as language server protocol. + +00:03:12.239 --> 00:03:16.560 +This second approach is actually a very +interesting one. + +00:03:16.560 --> 00:03:18.400 +By decoupling language understanding + +00:03:18.400 --> 00:03:21.280 +from the editing facility itself, + +00:03:21.280 --> 00:03:25.120 +the LSP servers can attract a lot more +contributors, + +00:03:25.120 --> 00:03:27.189 +which makes maintenance easier. + +00:03:27.189 --> 00:03:32.400 +However, they also have several issues +of their own. + +00:03:32.400 --> 00:03:34.089 +Being a separate process, + +00:03:34.089 --> 00:03:37.073 +they are usually more +resource-intensive, + +00:03:37.073 --> 00:03:39.920 +and depending on the language, + +00:03:39.920 --> 00:03:42.159 +the LSP server itself can bring with it + +00:03:42.159 --> 00:03:44.640 +a host of additional dependencies + +00:03:44.640 --> 00:03:50.640 +external to Emacs, which may be messy to +install and manage. + +00:03:50.640 --> 00:03:55.120 +Furthermore, JSON over RPC has pretty +high latency. + +00:03:55.120 --> 00:03:57.840 +For one-off tasks like jumping to source + +00:03:57.840 --> 00:04:00.879 +or on-demand completion, it's great. + +00:04:00.879 --> 00:04:03.040 +But for things like code highlighting, + +00:04:03.040 --> 00:04:06.000 +the latency is just too much. + +00:04:06.000 --> 00:04:08.319 +I was using Rust and I was following the + +00:04:08.319 --> 00:04:11.760 +community effort to improve its +IDE support, + +00:04:11.760 --> 00:04:15.760 +hoping to integrate some of that into +Emacs itself. + +00:04:15.760 --> 00:04:19.759 +Then I heard someone from the community +mention tree-sitter, + +00:04:19.759 --> 00:04:23.360 +and I decided to check it out. + +00:04:23.360 --> 00:04:28.720 +Basically, tree-sitter is an incremental +parsing library and a parser generator. + +00:04:28.720 --> 00:04:33.040 +It was introduced by the Atom editor in +2018. + +00:04:33.040 --> 00:04:35.923 +Besides Atom, it is also being +integrated + +00:04:35.923 --> 00:04:37.623 +into the NeoVim editor, + +00:04:37.623 --> 00:04:41.040 +and Github is using it to power + +00:04:41.040 --> 00:04:42.423 +their source code analysis + +00:04:42.423 --> 00:04:45.840 +and navigation features. + +00:04:45.840 --> 00:04:48.639 +It is written in C and can be compiled + +00:04:48.639 --> 00:04:50.623 +for all major platforms. + +00:04:50.623 --> 00:04:53.120 +It can even be compiled + +00:04:53.120 --> 00:04:55.323 +to web assembly to run on the web. + +00:04:55.323 --> 00:05:00.800 +That's how Github is using it +on their website. + +00:05:00.800 --> 00:05:05.840 +So why is tree-sitter an interesting +solution to this problem? + +00:05:05.840 --> 00:05:10.000 +There are multiple features that make it +an attractive option. + +00:05:10.000 --> 00:05:11.839 +It is designed to be fast. + +00:05:11.839 --> 00:05:13.680 +By being incremental, + +00:05:13.680 --> 00:05:15.680 +the initial parse of a typical big file + +00:05:15.680 --> 00:05:18.160 +can take tens of milliseconds, + +00:05:18.160 --> 00:05:20.240 +while subsequent incremental processes + +00:05:20.240 --> 00:05:22.560 +are sub-millisecond. + +00:05:22.560 --> 00:05:26.240 +It achieves this by using +structural sharing, + +00:05:26.240 --> 00:05:29.360 +meaning replacing only affected nodes + +00:05:29.360 --> 00:05:32.960 +in the old tree when it needs to. + +00:05:32.960 --> 00:05:37.120 +Also, unlike LSP, being in +the same process, + +00:05:37.120 --> 00:05:40.639 +it has much lower latency. + +00:05:40.639 --> 00:05:44.960 +Secondly, it provides a uniform +programming interface. + +00:05:44.960 --> 00:05:47.039 +The same data structures and functions + +00:05:47.039 --> 00:05:50.400 +work on parse trees of different +languages. + +00:05:50.400 --> 00:05:52.160 +Syntax nodes of different languages + +00:05:52.160 --> 00:05:54.160 +differ only by their types + +00:05:54.160 --> 00:05:55.723 +and their possible child nodes. + +00:05:55.723 --> 00:06:02.240 +This is a big advantage over +language-specific parsers. + +00:06:02.240 --> 00:06:06.880 +Thirdly, it's written in self-contained +embeddable C. + +00:06:06.880 --> 00:06:11.723 +As I mentioned previously, it can even +be compiled to webassembly. + +00:06:11.723 --> 00:06:16.106 +This makes integrating it into various +editors quite easy + +00:06:16.106 --> 00:06:22.880 +without having to install any external +dependencies. + +00:06:22.880 --> 00:06:25.503 +One thing that is not mentioned here + +00:06:25.503 --> 00:06:28.000 +is that being a parser generator, + +00:06:28.000 --> 00:06:31.039 +its grammars are declarative. + +00:06:31.039 --> 00:06:34.880 +Together with being editor-independent, + +00:06:34.880 --> 00:06:39.139 +this makes the pool of potential +contributors much larger. + +00:06:39.139 --> 00:06:45.520 +So I was convinced that tree-sitter is a +good fit for Emacs. + +00:06:45.520 --> 00:06:48.000 +Last year, I started writing the bindings + +00:06:48.000 --> 00:06:53.280 +using dynamic module support introduced +in Emacs 25. + +00:06:53.280 --> 00:06:58.479 +Dynamic module means there is +platform-specific native code involved, + +00:06:58.479 --> 00:07:00.560 +but since there are pre-compiled binaries + +00:07:00.560 --> 00:07:02.880 +for the three major platforms, + +00:07:02.880 --> 00:07:04.706 +it should work in most places. + +00:07:04.706 --> 00:07:09.440 +Currently, the core functionalities are +in a pretty good shape. + +00:07:09.440 --> 00:07:12.560 +Syntax highlighting is working nicely. + +00:07:12.560 --> 00:07:16.080 +The whole thing is split into three +packages. + +00:07:16.080 --> 00:07:20.319 +tree-sitter is the main package that +other packages should depend on. + +00:07:20.319 --> 00:07:22.800 +tree-sitter-langs is the language bundle + +00:07:22.800 --> 00:07:24.000 +that includes support + +00:07:24.000 --> 00:07:27.199 +for most common languages. + +00:07:27.199 --> 00:07:32.160 +And finally, the core APIs are in the +package tsc, + +00:07:32.160 --> 00:07:36.160 +which stands for tree-sitter-core. + +00:07:36.160 --> 00:07:38.800 +It is the implicit dependency of the + +00:07:38.800 --> 00:07:43.520 +tree-sitter package. + +00:07:43.520 --> 00:07:47.520 +The main package includes the minor mode +tree-sitter-mode. + +00:07:47.520 --> 00:07:52.560 +This provides the base for other major +or minor modes to build on. + +00:07:52.560 --> 00:07:54.839 +Using Emacs's change tracking hooks, + +00:07:54.839 --> 00:07:57.073 +it enables incremental parsing + +00:07:57.073 --> 00:08:00.800 +and provides a syntax tree that is +always up to date + +00:08:00.800 --> 00:08:04.080 +after any edits in a buffer. + +00:08:04.080 --> 00:08:06.223 +There is also a basic debug mode + +00:08:06.223 --> 00:08:10.080 +that shows the parse tree in +another buffer. + +00:08:10.080 --> 00:08:13.360 +Here is a quick demo. + +00:08:13.360 --> 00:08:15.673 +Here I'm in an empty Python buffer + +00:08:15.673 --> 00:08:17.520 +with tree-sitter enabled. + +00:08:17.520 --> 00:08:19.440 +I'm going to turn on the debug mode to + +00:08:19.440 --> 00:08:26.560 +see the parse tree. + +00:08:26.560 --> 00:08:28.106 +Since the buffer is empty, + +00:08:28.106 --> 00:08:30.423 +there is only one node in the +syntax tree: + +00:08:30.423 --> 00:08:33.279 +the top-level module node. + +00:08:33.279 --> 00:09:11.040 +Let's try typing some code. + +00:09:11.040 --> 00:09:14.640 +As you can see, as I type into the +Python buffer, + +00:09:14.640 --> 00:09:19.120 +the syntax tree updates in real time. + +00:09:19.120 --> 00:09:22.039 +The other minor mode included in the +main package + +00:09:22.039 --> 00:09:24.389 +is tree-sitter-hl-mode. + +00:09:24.389 --> 00:09:26.349 +It overrides font-lock mode + +00:09:26.349 --> 00:09:28.480 +and provides its own set of phases + +00:09:28.480 --> 00:09:30.139 +and customization options + +00:09:30.139 --> 00:09:32.800 +It is query-driven. + +00:09:32.800 --> 00:09:36.240 +That means instead of regular +expressions, + +00:09:36.240 --> 00:09:39.518 +it uses a Lisp-like query language + +00:09:39.518 --> 00:09:40.320 +to map syntax nodes + +00:09:40.320 --> 00:09:41.923 +to highlighting phrases. + +00:09:41.923 --> 00:09:45.760 +I'm going to open a python file with +small snippets + +00:09:45.760 --> 00:09:54.320 +that showcase syntax highlighting. + +00:09:54.320 --> 00:09:55.920 +So this is the default highlighting + +00:09:55.920 --> 00:10:00.880 +provided by python-mode. + +00:10:00.880 --> 00:10:04.640 +This is the highlighting enabled +by tree-sitter. + +00:10:04.640 --> 00:10:07.680 +As you can see, string interpolation + +00:10:07.680 --> 00:10:11.680 +and decorators are highlighted correctly. + +00:10:11.680 --> 00:10:17.440 +Function calls are also highlighted. + +00:10:17.440 --> 00:10:21.839 +You can also note that +property accessors + +00:10:21.839 --> 00:10:27.440 +and property assignments are highlighted +differently. + +00:10:27.440 --> 00:10:29.360 +What I like the most about this is that + +00:10:29.360 --> 00:10:32.640 +new bindings are consistently +highlighted. + +00:10:32.640 --> 00:10:36.320 +This included local variables, + +00:10:36.320 --> 00:10:45.760 +function parameters, and property +mutations. + +00:10:45.760 --> 00:10:48.000 +Before going through the tree queries + +00:10:48.000 --> 00:10:49.279 +and the syntax highlighting + +00:10:49.279 --> 00:10:51.680 +customization options, + +00:10:51.680 --> 00:10:53.339 +let's take a brief look at + +00:10:53.339 --> 00:10:55.040 +the core data structures and functions + +00:10:55.040 --> 00:10:58.079 +that tree-sitter provides. + +00:10:58.079 --> 00:11:00.743 +So parsing is done with the help of + +00:11:00.743 --> 00:11:02.240 +a generic parser object. + +00:11:02.240 --> 00:11:04.160 +A single parser object can be used to + +00:11:04.160 --> 00:11:06.000 +parse different languages + +00:11:06.000 --> 00:11:09.279 +by sending different language objects to +it. + +00:11:09.279 --> 00:11:10.880 +The language objects themselves are + +00:11:10.880 --> 00:11:14.079 +loaded from shared libraries. + +00:11:14.079 --> 00:11:16.079 +Since tree-sitter-mmode already handles + +00:11:16.079 --> 00:11:17.360 +the parsing part, + +00:11:17.360 --> 00:11:19.440 +we will instead focus on the functions + +00:11:19.440 --> 00:11:20.800 +that inspect nodes, + +00:11:20.800 --> 00:11:25.279 +and in the resulting path tree, + +00:11:25.279 --> 00:11:27.030 +we can ask tree-sitter what is + +00:11:27.030 --> 00:11:44.240 +the syntax node at point. + +00:11:44.240 --> 00:11:48.480 +This is an opaque object, so this is not +very useful. + +00:11:48.480 --> 00:12:03.760 +We can instead ask what is its type. + +00:12:03.760 --> 00:12:08.959 +So its type is the symbol comparison +operator. + +00:12:08.959 --> 00:12:11.600 +In tree-sitter, there are two kinds of nodes, + +00:12:11.600 --> 00:12:13.680 +anonymous nodes and named nodes. + +00:12:13.680 --> 00:12:17.040 +Anonymous nodes correspond to simple +grammar elements + +00:12:17.040 --> 00:12:21.279 +like keywords, operators, punctuations, +and so on. + +00:12:21.279 --> 00:12:24.656 +Name nodes, on the other hand, are +grammar elements + +00:12:24.656 --> 00:12:26.639 +that are interesting enough +on their own + +00:12:26.639 --> 00:12:30.029 +to have a name, like an identifier, + +00:12:30.029 --> 00:12:35.440 +an expression, or a function definition. + +00:12:35.440 --> 00:12:37.323 +Name node types are symbols, + +00:12:37.323 --> 00:12:42.639 +while anonymous node types are strings. + +00:12:42.639 --> 00:12:49.760 +For example, if we are on this +comparison operator, + +00:12:49.760 --> 00:12:55.920 +the node type should be a string. + +00:12:55.920 --> 00:12:58.959 +We can also get other information about +the node. + +00:12:58.959 --> 00:13:09.680 +For example: what is this text, + +00:13:09.680 --> 00:13:20.800 +or where it is in the buffer, + +00:13:20.800 --> 00:13:43.199 +or what is its parent. + +00:13:43.199 --> 00:13:46.106 +There are many other APIs to query + +00:13:46.106 --> 00:13:52.639 +our node's properties. + +00:13:52.639 --> 00:13:54.234 +tree-sitter allows searching + +00:13:54.234 --> 00:13:58.240 +for structural patterns +within a parse tree. + +00:13:58.240 --> 00:14:01.440 +It does so through a Lisp-like language. + +00:14:01.440 --> 00:14:04.639 +This language supports matching +by node types, + +00:14:04.639 --> 00:14:07.760 +field names, and predicates. + +00:14:07.760 --> 00:14:12.639 +It also allows capturing nodes for +further processing. + +00:14:12.639 --> 00:14:37.680 +Let's try to see some examples. + +00:14:37.680 --> 00:14:40.206 +So in this very simple query, + +00:14:40.206 --> 00:14:49.040 +we just try to highlight all the +identifiers in the buffer. + +00:14:49.040 --> 00:14:53.120 +This s side tells tree-sitter +to capture a node. + +00:14:53.120 --> 00:14:55.507 +In the context of the query builder, + +00:14:55.507 --> 00:14:57.360 +it's not very important, + +00:14:57.360 --> 00:14:59.706 +but in normal highlighting query, + +00:14:59.706 --> 00:15:01.760 +this will determine + +00:15:01.760 --> 00:15:06.639 +the face used to highlight the note. + +00:15:06.639 --> 00:15:08.256 +Suppose we want to capture + +00:15:08.256 --> 00:15:10.320 +all the function names, + +00:15:10.320 --> 00:15:13.519 +instead of just any identifier. + +00:15:13.519 --> 00:15:29.440 +You can improve the query like this. + +00:15:29.440 --> 00:15:32.639 +This will highlight the whole definition. + +00:15:32.639 --> 00:15:36.399 +But we only want to capture +the function name, + +00:15:36.399 --> 00:15:41.054 +which means the identifier here. + +00:15:41.054 --> 00:15:49.600 +So we move the capture to after the +identifier node. + +00:15:49.600 --> 00:15:52.959 +If we want to capture the +class names as well, + +00:15:52.959 --> 00:16:10.079 +we just add another pattern. + +00:16:10.079 --> 00:16:20.320 +Let's look at a more practical example. + +00:16:20.320 --> 00:16:23.468 +Here we can see that +single-quoted strings + +00:16:23.468 --> 00:16:27.279 +and double-quoted strings are +highlighted the same. + +00:16:27.279 --> 00:16:30.399 +But in some places, + +00:16:30.399 --> 00:16:33.440 +because of some coding conventions, + +00:16:33.440 --> 00:16:36.373 +it may be desirable to highlight them +differently. + +00:16:36.373 --> 00:16:39.073 +For example, if the string is +single-quoted, + +00:16:39.073 --> 00:16:44.399 +we may want to highlight it as a +constant. + +00:16:44.399 --> 00:16:46.160 +Let's try to see whether we can + +00:16:46.160 --> 00:16:56.240 +distinguish these two cases. + +00:16:56.240 --> 00:17:00.639 +So here we get all the strings. + +00:17:00.639 --> 00:17:04.079 +If we want to see if it's single quotes + +00:17:04.079 --> 00:17:08.799 +or double quote strings, + +00:17:08.799 --> 00:17:13.436 +we can try looking at the first +character of the string-- + +00:17:13.436 --> 00:17:16.720 +I mean the first character of the node-- + +00:17:16.720 --> 00:17:33.600 +to check whether it's a single quote or +a double quote. + +00:17:33.600 --> 00:17:38.920 +So for that, we use tree-sitter's +support for predicates. + +00:17:38.920 --> 00:17:43.360 +In this case, we use a match predicate + +00:17:43.360 --> 00:17:47.339 +to check whether the string-- +whether the node starts + +00:17:47.339 --> 00:17:49.556 +with a single quote. + +00:17:49.556 --> 00:17:51.280 +And with this pattern, + +00:17:51.280 --> 00:18:00.400 +we only capture the single-quotes +strings. + +00:18:00.400 --> 00:18:03.760 +Let's try to give it a different face. + +00:18:03.760 --> 00:18:13.039 +So we copy the pattern, + +00:18:13.039 --> 00:18:25.120 +and we add this pattern for Python only. + +00:18:25.120 --> 00:18:31.440 +But we also want to give the capture +a different name. + +00:18:31.440 --> 00:18:46.559 +Let's say we want to highlight it +as a keyword. + +00:18:46.559 --> 00:19:06.320 +And now, if we refresh the buffer, + +00:19:06.320 --> 00:19:08.523 +we see that single quote strings + +00:19:08.523 --> 00:19:14.400 +are highlighted as keywords. + +00:19:14.400 --> 00:19:15.751 +The highlighting patterns + +00:19:15.751 --> 00:19:19.200 +can also be set for a single project + +00:19:19.200 --> 00:19:23.440 +using directory-local variables. + +00:19:23.440 --> 00:19:35.760 +For example, let's take a look at +Emacs's source code. + +00:19:35.760 --> 00:19:41.123 +So in Emacs's C source, +there are a lot of uses + +00:19:41.123 --> 00:19:43.760 +of these different macros + +00:19:43.760 --> 00:19:47.679 +to define functions, + +00:19:47.679 --> 00:19:53.256 +and you can see this is actually +the function name, + +00:19:53.256 --> 00:19:56.373 +but it's highlighted as the string. + +00:19:56.373 --> 00:20:03.679 +So what we want is to somehow +recognize this pattern + +00:20:03.679 --> 00:20:07.600 +and highlight it. + +00:20:07.600 --> 00:20:11.280 +Highlight this part + +00:20:11.280 --> 00:20:14.559 +with the function face instead. + +00:20:14.559 --> 00:20:17.679 +In order to do that, + +00:20:17.679 --> 00:20:31.760 +we put a pattern in this project's +directory-local settings file. + +00:20:31.760 --> 00:20:40.159 +So we can put this button in +the C mode section. + +00:20:40.159 --> 00:20:48.000 +And now, if we enable tree-sitter, + +00:20:48.000 --> 00:20:50.480 +you can see that this is highlighted + +00:20:53.200 --> 00:20:55.056 +as a normal function definition. + +00:20:55.056 --> 00:21:01.200 +So this is the function face +like we wanted. + +00:21:01.200 --> 00:21:07.200 +The pattern for this is +actually pretty simple. + +00:21:07.200 --> 00:21:12.373 +It's only this part. + +00:21:12.373 --> 00:21:16.456 +So if it's a function call + +00:21:16.456 --> 00:21:19.679 +where the name of the function is +defun, + +00:21:19.679 --> 00:21:24.240 +then we highlight the defun as a +keyword, + +00:21:24.240 --> 00:21:26.923 +and then the first string element, + +00:21:26.923 --> 00:21:35.360 +we highlight it as a function name. + +00:21:35.360 --> 00:21:39.280 +Since the language objects are actually +native code, + +00:21:39.280 --> 00:21:41.459 +they have to be compiled +for each platform + +00:21:41.459 --> 00:21:43.440 +that we want to support. + +00:21:43.440 --> 00:21:48.159 +This will become a big obstacle for +tree-sitter adoption. + +00:21:48.159 --> 00:21:52.960 +Therefore, I've created a language bundle +package, tree-sitter-langs, + +00:21:52.960 --> 00:21:55.773 +that takes care of pre-compiling the +grammars, + +00:21:55.773 --> 00:22:01.600 +the most common grammars for all three +major platforms. + +00:22:01.600 --> 00:22:05.360 +It also takes care of distributing +these binaries + +00:22:05.360 --> 00:22:08.080 +and provides some highlighting queries + +00:22:08.080 --> 00:22:11.440 +for some of the languages. + +00:22:11.440 --> 00:22:13.760 +It should be noted that this package + +00:22:13.760 --> 00:22:19.919 +should be treated as a temporary +distribution mechanism only, + +00:22:19.919 --> 00:22:24.720 +to help with bootstrapping +tree-sitter adoption. + +00:22:24.720 --> 00:22:27.760 +The plan is that eventually these files + +00:22:27.760 --> 00:22:29.156 +should be provided by + +00:22:29.156 --> 00:22:32.480 +the language major modes themselves. + +00:22:32.480 --> 00:22:36.320 +But in order to do that, we need better +tooling, + +00:22:36.320 --> 00:22:40.240 +so we're not there yet. + +00:22:40.240 --> 00:22:43.280 +Since the core already works +reasonably well, + +00:22:43.280 --> 00:22:45.289 +there are several areas +that would benefit + +00:22:45.289 --> 00:22:49.120 +from the community's contribution. + +00:22:49.120 --> 00:22:52.640 +So tree-sitter's upstream language +repositories + +00:22:52.640 --> 00:22:55.679 +already contain highlighting queries on +their own. + +00:22:55.679 --> 00:22:57.573 +However, they are pretty basic, + +00:22:57.573 --> 00:23:02.559 +and they may not fit well with existing +Emacs conventions. + +00:23:02.559 --> 00:23:07.120 +Therefore, the language bundle has its +own set of highlighting queries. + +00:23:07.120 --> 00:23:12.556 +This requires maintenance until language +major modes adopt tree-sitter + +00:23:12.556 --> 00:23:16.640 +and maintain the queries on their own. + +00:23:16.640 --> 00:23:19.056 +The queries are actually +quite easy to write, + +00:23:19.056 --> 00:23:22.000 +as you've already seen. + +00:23:22.000 --> 00:23:25.360 +You just need to be familiar +with the language, + +00:23:25.360 --> 00:23:35.200 +familiar enough to come up with sensible +highlighting patterns. + +00:23:35.200 --> 00:23:39.679 +And if you are a maintainer of a +language major mode, + +00:23:39.679 --> 00:23:44.189 +you may want to consider integrating +tree-sitter into your mode, + +00:23:44.189 --> 00:23:48.573 +initially maybe as an optional feature. + +00:23:48.573 --> 00:23:53.279 +The integration is actually pretty +straightforward, + +00:23:53.279 --> 00:23:56.640 +especially for syntax highlighting. + +00:23:56.640 --> 00:24:01.520 +Or alternatively, + +00:24:01.520 --> 00:24:05.760 +you can also try writing a new major +mode from scratch + +00:24:05.760 --> 00:24:08.000 +that relies on tree-sitter + +00:24:08.000 --> 00:24:12.559 +from the very beginning. + +00:24:12.559 --> 00:24:17.523 +The code for such a major mode is +quite simple. + +00:24:17.523 --> 00:24:23.200 +For example, this is the proposed + +00:24:23.200 --> 00:24:26.240 +wat-mode for web assembly. + +00:24:26.240 --> 00:24:39.520 +The code is just one page of code, +not a lot. + +00:24:39.520 --> 00:24:42.720 +You can also try writing new minor modes + +00:24:42.720 --> 00:24:46.559 +or writing integration packages. + +00:24:46.559 --> 00:24:50.880 +For example, a lot of packages + +00:24:50.880 --> 00:24:54.559 +may benefit from tree-sitter integration, + +00:24:54.559 --> 00:25:02.960 +but no one has written +the integration yet. + +00:25:02.960 --> 00:25:04.836 +If you are interested in tree-sitter, + +00:25:04.836 --> 00:25:08.023 +you can use these links to learn more +about it. + +00:25:08.023 --> 00:25:11.440 +I think that's it for me today. + +00:25:11.440 --> 00:25:18.159 +I'm happy to answer any questions. diff --git a/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt b/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt new file mode 100644 index 00000000..c453575d --- /dev/null +++ b/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt @@ -0,0 +1,553 @@ +WEBVTT + +00:00:00.799 --> 00:00:05.520 +Hello, everyone, and welcome to this +short lightning talk: + +00:00:05.520 --> 00:00:09.519 +"Traverse Complex JSON Structures with +Live Feedback." + +00:00:09.519 --> 00:00:18.000 +This is a pre-recorded talk and part of +the EmacsConf 2020 schedule. + +00:00:18.000 --> 00:00:19.439 +This is what we're going to do. + +00:00:19.439 --> 00:00:22.320 +I'll make a quick introduction to the +topic at hand. + +00:00:22.320 --> 00:00:24.400 +I'll give you a demonstration of some +tools, + +00:00:24.400 --> 00:00:29.199 +and then we'll leave you +with the links to said tools. + +00:00:29.199 --> 00:00:31.679 +Before that, just a little bit about me. + +00:00:31.679 --> 00:00:40.399 +I am the CEO and co-founder of a company +based in the Swiss mountains called 200ok.ch. + +00:00:40.399 --> 00:00:44.879 +We are a product incubator and +service consultancy, + +00:00:44.879 --> 00:00:50.000 +but we like to spend most or at least as +much time as we can + +00:00:50.000 --> 00:00:52.719 +building free software. + +00:00:52.719 --> 00:00:56.879 +I'm also an ordained Zen monk and abbot +of the Lambda Zen temple. + +00:00:56.879 --> 00:01:04.159 +You can reach me anytime on questions +regarding Emacs, for example, + +00:01:04.159 --> 00:01:07.200 +at alain@200ok.ch. + +00:01:07.200 --> 00:01:09.439 +But back to the topic at hand. + +00:01:09.439 --> 00:01:11.760 +The proposition is as following: + +00:01:11.760 --> 00:01:14.000 +most work on the computer is based on +either + +00:01:14.000 --> 00:01:16.479 +text processing or text consumption. + +00:01:16.479 --> 00:01:22.799 +And very often, the text which you need +to process is in a structured format, + +00:01:22.799 --> 00:01:24.560 +for example, in JSON. + +00:01:24.560 --> 00:01:28.560 +That might even be if your job is not +programming per se. + +00:01:28.560 --> 00:01:33.119 +Reading through such a bigger chunk of +JSON can be non-trivial, however, + +00:01:33.119 --> 00:01:36.479 +while just reading and understanding it + +00:01:36.479 --> 00:01:40.320 +will be essential to getting your job +done. + +00:01:40.320 --> 00:01:44.479 +So let's quickly check out an example +JSON file. + +00:01:44.479 --> 00:01:47.200 +This is from the Github API, + +00:01:47.200 --> 00:01:52.079 +which is a request--sorry, the +response to a request + +00:01:52.079 --> 00:01:54.640 +for a specific issue on the github API. + +00:01:54.640 --> 00:01:58.799 +So let's quickly check that one out. + +00:01:58.799 --> 00:02:01.920 +Okay. So here it is open, and we can +already see + +00:02:01.920 --> 00:02:05.439 +that there is lots of stuff +going on here. + +00:02:05.439 --> 00:02:07.360 +It's 200 lines. + +00:02:07.360 --> 00:02:09.200 +It's not going to be very easy + +00:02:09.200 --> 00:02:11.840 +just to find out what are the top level +things in here, + +00:02:11.840 --> 00:02:13.360 +what are the top level attributes. + +00:02:13.360 --> 00:02:17.840 +Of course I can do this, and maybe do it +by hand, but that doesn't scale. + +00:02:17.840 --> 00:02:21.599 +I can use cool Emacs facilities like the +hideshow-mode + +00:02:21.599 --> 00:02:24.720 +and try to fold all the things that are +top level, + +00:02:24.720 --> 00:02:27.200 +but that also doesn't really scale. + +00:02:27.200 --> 00:02:29.360 +There must be a better way. + +00:02:29.360 --> 00:02:32.000 +Of course there is. There is prior art. + +00:02:32.000 --> 00:02:34.080 +There is a tool called jq. + +00:02:34.080 --> 00:02:37.760 +I'm going to quote the USP (unique selling proposition) from their website: + +00:02:37.760 --> 00:02:42.000 +jq is like sed for JSON data. + +00:02:42.000 --> 00:02:46.319 +you can use it to slice and filter and +map and transform structured data + +00:02:46.319 --> 00:02:47.840 +with the same ease that + +00:02:47.840 --> 00:02:54.000 +sed, awk, grep, and friends let you +play with text. + +00:02:54.000 --> 00:02:56.879 +Let me give you a quick demonstration of +it. + +00:02:56.879 --> 00:02:59.040 +By the way, it's written in portable C. + +00:02:59.040 --> 00:03:03.519 +It has zero runtime dependency, so it's +very easy to get started with it + +00:03:03.519 --> 00:03:09.840 +and use it on pretty much any UNIX-based +computer. + +00:03:09.840 --> 00:03:14.000 +Sorry, no, Linux-based computer, +apologies. + +00:03:14.000 --> 00:03:18.720 +Okay, so let's explore a +JSON file with it. + +00:03:18.720 --> 00:03:20.000 +It's a command line tool, + +00:03:20.000 --> 00:03:24.000 +and it has a very simple command +line syntax. + +00:03:24.000 --> 00:03:29.840 +So you call the binary and then you give +it a query and a file, + +00:03:29.840 --> 00:03:32.560 +and then it will return its answer. + +00:03:32.560 --> 00:03:35.440 +So, for example, if I want the top +level keys, + +00:03:35.440 --> 00:03:38.000 +I will just say jq keys the file + +00:03:38.000 --> 00:03:39.840 +and it will return the keys. + +00:03:39.840 --> 00:03:44.400 +Simple as that. So let's check this out +in a real shell. + +00:03:44.400 --> 00:03:46.879 +Here I am in eshell. + +00:03:46.879 --> 00:03:51.440 +Let's run jq keys on the Github issue comment. + +00:03:51.440 --> 00:03:58.799 +We can see that we have actually +received a list back here + +00:03:58.799 --> 00:04:00.319 +with the top-level things. + +00:04:00.319 --> 00:04:02.879 +So this issue... It looks very interesting. + +00:04:02.879 --> 00:04:07.360 +Let's ask it to give me more information on this issue. + +00:04:07.360 --> 00:04:11.360 +Then it's hairy again. That's a lot of stuff. + +00:04:11.360 --> 00:04:14.560 +I mean, lucky for us, we are in Emacs here, + +00:04:14.560 --> 00:04:16.720 +so we can use nice shortcuts. + +00:04:16.720 --> 00:04:22.000 +We can copy this. We can go in here, just select that, + +00:04:22.000 --> 00:04:24.160 +get that out or something like this. + +00:04:24.160 --> 00:04:32.320 +But still, this is not really the best way to do that, right? + +00:04:32.320 --> 00:04:34.080 +it gets kind of tedious. + +00:04:34.080 --> 00:04:37.680 +At this point the output can be humongous. + +00:04:37.680 --> 00:04:41.919 +The shell is not really the best place to read through such big output. + +00:04:41.919 --> 00:04:45.759 +I mean, eshell is probably one of the better shells for this, + +00:04:45.759 --> 00:04:47.919 +because it's just a regular Emacs buffer, + +00:04:47.919 --> 00:04:50.720 +but still, it's not really the best tool. + +00:04:50.720 --> 00:04:53.680 +I need to repeat the command all the time + +00:04:53.680 --> 00:04:56.000 +until I finally build the right query. + +00:04:56.000 --> 00:04:59.840 +And all the time, I lose my focus, + +00:04:59.840 --> 00:05:02.800 +I lose what I'm currently looking at. + +00:05:02.800 --> 00:05:05.520 +I'm seeing the new result. + +00:05:05.520 --> 00:05:08.160 +It would be so much nicer to have live feedback. + +00:05:08.160 --> 00:05:10.720 +When working with Emacs, we're quite used to that. + +00:05:10.720 --> 00:05:12.320 +So there should be an option. + +00:05:12.320 --> 00:05:15.120 +And of course there is. It's Emacs, right, + +00:05:15.120 --> 00:05:17.759 +so you can do anything. + +00:05:17.759 --> 00:05:22.960 +There is various good tools for completion in Emacs. + +00:05:22.960 --> 00:05:26.000 +I used ivy for this. + +00:05:26.000 --> 00:05:29.039 +I'm going to quote the USP for ivy. + +00:05:29.039 --> 00:05:32.639 +ivy is a generic completion mechanism for Emacs. + +00:05:32.639 --> 00:05:37.919 +While it operates similarly to other completion schemes such as icomplete mode, + +00:05:37.919 --> 00:05:42.160 +ivy aims to be more efficient, smaller, simpler, and smoother to use, + +00:05:42.160 --> 00:05:45.199 +yet highly customizable. + +00:05:45.199 --> 00:05:46.479 +And that's true. + +00:05:46.479 --> 00:05:49.440 +One of the cool things of ivy + +00:05:49.440 --> 00:05:54.320 +compared to other completion mechanisms in Emacs + +00:05:54.320 --> 00:05:59.120 +is that it can be used on dynamic data. + +00:05:59.120 --> 00:06:02.400 +So usually completion works on a static input. + +00:06:02.400 --> 00:06:05.360 +For example, you're in a buffer, a text buffer, + +00:06:05.360 --> 00:06:09.600 +and you use isearch maybe with ido-mode, + +00:06:09.600 --> 00:06:13.360 +and you find your results. That's all nice. + +00:06:13.360 --> 00:06:19.600 +However, if I want to search on dynamic data, + +00:06:19.600 --> 00:06:20.720 +that doesn't work. + +00:06:20.720 --> 00:06:24.880 +So whenever I type in my query for jq, + +00:06:24.880 --> 00:06:28.000 +I actually need to call the jq binary, + +00:06:28.000 --> 00:06:30.720 +and it will give a different result set back. + +00:06:30.720 --> 00:06:36.160 +So it's a really dynamic mechanism that we need here. + +00:06:36.160 --> 00:06:38.240 +It's much more like a search engine. + +00:06:38.240 --> 00:06:41.440 +ivy luckily has something built in, + +00:06:41.440 --> 00:06:43.520 +and it's called counsel. + +00:06:43.520 --> 00:06:47.360 +So I used counsel and jq and combined them, + +00:06:47.360 --> 00:06:49.199 +and built a new package + +00:06:49.199 --> 00:06:52.960 +with which we can use Emacs and jq + +00:06:52.960 --> 00:06:56.000 +to have live feedback. + +00:06:56.000 --> 00:06:57.759 +It's very easy to use. + +00:06:57.759 --> 00:06:59.840 +So you just call counsel-jq + +00:06:59.840 --> 00:07:02.160 +on a buffer containing JSON. + +00:07:02.160 --> 00:07:04.319 +For example, the one we have here. + +00:07:04.319 --> 00:07:06.800 +Let's call counsel-jq on it, + +00:07:06.800 --> 00:07:10.080 +and we already get a default query, + +00:07:10.080 --> 00:07:14.639 +the dot query, which just gives us the same file. + +00:07:14.639 --> 00:07:16.240 +But now we can change it. + +00:07:16.240 --> 00:07:18.639 +For example, find all the keys in here. + +00:07:18.639 --> 00:07:20.319 +And then we see I had this issue. + +00:07:20.319 --> 00:07:22.800 +This was the one that we were interested in. + +00:07:22.800 --> 00:07:25.599 +So let's find more information on the issue. + +00:07:25.599 --> 00:07:28.720 +What keys does it have actually have? + +00:07:28.720 --> 00:07:31.680 +It has assignees. That interests me. + +00:07:31.680 --> 00:07:34.800 +So let's check out the assignees in here. + +00:07:34.800 --> 00:07:39.759 +There's two of them, but I'm only interested in the first one. + +00:07:39.759 --> 00:07:43.599 +I'm making stuff up as I go here, of course. + +00:07:43.599 --> 00:07:47.039 +Whenever I hit enter, I get a new buffer + +00:07:47.039 --> 00:07:52.639 +which just shows me this particular result + +00:07:52.639 --> 00:07:55.599 +for the particular query that I entered. + +00:07:55.599 --> 00:07:57.680 +So let me do that again. + +00:07:57.680 --> 00:08:04.000 +We are in here. We are looking at a JSON file. + +00:08:04.000 --> 00:08:05.840 +This can be very, very big. + +00:08:05.840 --> 00:08:07.280 +Doesn't also need to be a file. + +00:08:07.280 --> 00:08:09.520 +Just needs to be a buffer. + +00:08:09.520 --> 00:08:11.360 +You call counsel-jq on it, + +00:08:11.360 --> 00:08:14.319 +and you can do any kind of query on it. + +00:08:14.319 --> 00:08:18.080 +For example, let's see if there is a URL here. + +00:08:18.080 --> 00:08:19.440 +Yes, there's a URL. + +00:08:19.440 --> 00:08:22.827 +Let's see if there's a repository here. + +00:08:22.827 --> 00:08:24.639 +Repository. No, there isn't. + +00:08:24.639 --> 00:08:33.440 +What was it called? Issue. Keys. Repository URL, it was called. + +00:08:33.440 --> 00:08:38.240 +So let's see issue repository URL, + +00:08:38.240 --> 00:08:39.519 +and then we see. + +00:08:39.519 --> 00:08:44.800 +So apparently this issue comment is for a repository called organice. + +00:08:44.800 --> 00:08:47.839 +I wonder what that might be. + +00:08:47.839 --> 00:08:52.640 +Okay. So that was a very short introduction to counsel-jq. + +00:08:52.640 --> 00:08:54.240 +You can see the timer here. + +00:08:54.240 --> 00:08:57.440 +I only have one minute left to go, so I'm going to leave + +00:08:57.440 --> 00:09:02.880 +with a very, very short introduction to the counsel-jq code. + +00:09:02.880 --> 00:09:06.000 +It's not even 60 lines of elisp, + +00:09:06.000 --> 00:09:09.600 +so building something like this is very, very easy. + +00:09:09.600 --> 00:09:14.560 +I would encourage you to go and read through the code in your own time, + +00:09:14.560 --> 00:09:17.519 +if you're interested in building something like this. + +00:09:17.519 --> 00:09:22.720 +If you're interested in just using jq or you're done, + +00:09:22.720 --> 00:09:24.320 +these are the links to all the tools. + +00:09:24.320 --> 00:09:28.240 +counsel-jq, of course, is readily available on MELPA. + +00:09:28.240 --> 00:09:32.959 +Also developed under the AGPL license on Github. + +00:09:32.959 --> 00:09:36.080 +And this organice thing, by the way, it's + +00:09:36.080 --> 00:09:38.560 +Org Mode for mobile and desktop browsers. + +00:09:38.560 --> 00:09:43.120 +Also a great free software tool maybe that interests you. + +00:09:43.120 --> 00:09:46.240 +Thank you for listening. Have a great time. + +00:09:46.240 --> 00:09:49.360 +10 seconds left. I am going to stop this now. + +00:09:49.360 --> 00:09:53.920 +Enjoy EmacsConf. Have a great day. diff --git a/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt b/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt new file mode 100644 index 00000000..f4a8cc83 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt @@ -0,0 +1,490 @@ +WEBVTT + +00:00:01.360 --> 00:00:05.200 +Hello and welcome to my EmacsConf lightning talk. + +00:00:05.200 --> 00:00:09.840 +Today I'll be talking about my journey into Emacs as a high schooler + +00:00:09.840 --> 00:00:14.400 +and how it has changed my life. + +00:00:14.400 --> 00:00:19.520 +Right. So who am I? I am a senior at +Stanford Online High School, + +00:00:19.520 --> 00:00:22.800 +and I am also a violinist. + +00:00:22.800 --> 00:00:25.199 +I started violin when I was two and a half, + +00:00:25.199 --> 00:00:28.560 +and I have been keeping it up ever since. + +00:00:28.560 --> 00:00:30.240 +Violin is a huge part of my life, + +00:00:30.240 --> 00:00:33.360 +and I am very much a musician at heart. + +00:00:33.360 --> 00:00:36.239 +I am also a somewhat capable programmer. + +00:00:36.239 --> 00:00:39.280 +I've done a lot of informal programming in the past, + +00:00:39.280 --> 00:00:45.840 +and this year I'm taking my first AP Comp. Sci. course in my high school. + +00:00:45.840 --> 00:00:51.039 +And so I've done a lot of side projects, + +00:00:51.039 --> 00:00:56.800 +mainly in Python, and some very short scripts in Elisp. + +00:00:56.800 --> 00:00:59.840 +And last but not least, I am a tinker. + +00:00:59.840 --> 00:01:05.280 +I love to play around with things and see what I can do better, + +00:01:05.280 --> 00:01:10.880 +and just have as much fun as possible. + +00:01:10.880 --> 00:01:15.040 +So how did I find Emacs? + +00:01:15.040 --> 00:01:18.880 +I discovered it actually through a talk, funnily enough, + +00:01:18.880 --> 00:01:23.947 +at a Vim conference given by Aaron Bieber, titled: + +00:01:23.947 --> 00:01:28.320 +"Evil Mode or How I Learned to Stop Worrying and Love Emacs." + +00:01:28.320 --> 00:01:31.439 +I watched that talk a couple times over, + +00:01:31.439 --> 00:01:35.759 +just marveling at all the wonderful things that he could do in Emacs. + +00:01:35.759 --> 00:01:38.799 +And being a previous Vim user myself, + +00:01:38.799 --> 00:01:42.399 +I found it very enticing to be able to have + +00:01:42.399 --> 00:01:47.040 +the evil-mode package and very quickly switch to Emacs. + +00:01:47.040 --> 00:01:49.680 +At the time, I was also in my sophomore year, + +00:01:49.680 --> 00:01:56.320 +and so I had had a sort of a note-taking system +in the past. + +00:01:56.320 --> 00:02:01.680 +But it was not good, and I needed a more organized note-taking system. + +00:02:01.680 --> 00:02:04.240 +My parents had suggested paper for a while, + +00:02:04.240 --> 00:02:09.759 +and there was the whole organization part of that, + +00:02:09.759 --> 00:02:12.080 +but that did not really work out for me. + +00:02:12.080 --> 00:02:16.239 +And so I was trying to find this better note-taking system, + +00:02:16.239 --> 00:02:19.440 +and it was very hard. + +00:02:19.440 --> 00:02:23.520 +I had two main criteria which I did not define at the time, + +00:02:23.520 --> 00:02:26.640 +but I realized was really what I was looking for. + +00:02:26.640 --> 00:02:29.599 +First of all, it had to be flexible enough, + +00:02:29.599 --> 00:02:33.680 +and second of all, I had to have control over the data. + +00:02:33.680 --> 00:02:36.239 +And so through this process, + +00:02:36.239 --> 00:02:41.920 +I actually went through a bunch of note-taking softwares rather systematically. + +00:02:41.920 --> 00:02:47.519 +I went through Google Docs, which very much did not work out. + +00:02:47.519 --> 00:02:52.080 +I also went through Evernote which also was not great for me, + +00:02:52.080 --> 00:02:55.200 +and OneNote, which I settled on for a little while, + +00:02:55.200 --> 00:02:58.800 +but it did not meet these criteria, + +00:02:58.800 --> 00:03:00.879 +particularly the second one. + +00:03:00.879 --> 00:03:03.840 +I had taken some notes and I wanted to export it, + +00:03:03.840 --> 00:03:07.519 +and OneNote did not let me do that. + +00:03:07.519 --> 00:03:12.000 +It was PDF. Horribly-organized PDF. + +00:03:12.000 --> 00:03:17.440 +And that's when I knew I needed some change. + +00:03:17.440 --> 00:03:21.519 +So I discovered Emacs through this talk, + +00:03:21.519 --> 00:03:27.040 +and through the wonderful features of Org Mode. + +00:03:27.040 --> 00:03:30.080 +This is my first journal entry in Emacs. + +00:03:30.080 --> 00:03:34.000 +I had been playing with it for one day, + +00:03:34.000 --> 00:03:35.760 +and I was on the Org Agenda, + +00:03:35.760 --> 00:03:38.159 +and I happened to press I, + +00:03:38.159 --> 00:03:43.040 +which for the Emacs keybinding is the default for diary entry. + +00:03:43.040 --> 00:03:45.440 +I was very excited. + +00:03:45.440 --> 00:03:50.239 +I shouldn't stay on the slide too long lest you read it. + +00:03:50.239 --> 00:03:53.760 +So let's move on to the next one. + +00:03:53.760 --> 00:03:57.200 +So the learning curve for me, I think, + +00:03:57.200 --> 00:04:00.480 +particularly being an ex-Vim user, + +00:04:00.480 --> 00:04:03.760 +evil-mode made it very easy to switch. + +00:04:03.760 --> 00:04:07.439 +Thankfully, there was the Emacs reference sheet, + +00:04:07.439 --> 00:04:16.160 +and having evil-mode to switch between texts... + +00:04:16.160 --> 00:04:17.919 +Whether it be editing a text file, + +00:04:17.919 --> 00:04:21.600 +or going to other parts of just Emacs in general, + +00:04:21.600 --> 00:04:25.520 +I think Vim really helped with making me feel comfortable + +00:04:25.520 --> 00:04:28.000 +within this new environment. + +00:04:28.000 --> 00:04:32.160 +So, having that experience, I also wasn't new + +00:04:32.160 --> 00:04:33.759 +to the keybind-based world. + +00:04:33.759 --> 00:04:36.320 +I have been very comfortable with the computer + +00:04:36.320 --> 00:04:40.160 +and the keyboard for most of my life, + +00:04:40.160 --> 00:04:45.520 +and so it was not a totally new environment for me. + +00:04:45.520 --> 00:04:49.360 +I also spent a lot of time looking at the Emacs reference sheet, + +00:04:49.360 --> 00:04:54.720 +Just thinking about trying to find all of the different functions. + +00:04:54.720 --> 00:04:58.720 +If I didn't know what something was, then I queried it in Emacs, + +00:04:58.720 --> 00:05:01.199 +and then I figured out what it was. + +00:05:01.199 --> 00:05:05.600 +And that was one of the best ways for me to discover + +00:05:05.600 --> 00:05:09.360 +all of the capabilities of Emacs. + +00:05:09.360 --> 00:05:12.800 +Thirdly, of course, the self-documenting feature + +00:05:12.800 --> 00:05:17.120 +or nature of Emacs and narrowing frameworks such as helm + +00:05:17.120 --> 00:05:21.360 +really helped find things, especially for M-x. + +00:05:21.360 --> 00:05:25.919 +For a while, I was just... + +00:05:25.919 --> 00:05:30.720 +I would go about my day, and if I pressed a keybind that I didn't know what it did, + +00:05:30.720 --> 00:05:37.039 +I would do the lossage and see the list of keybinds that I had pressed + +00:05:37.039 --> 00:05:43.039 +and tried to find that one, and query the function and what not. + +00:05:43.039 --> 00:05:48.160 +So yeah. And now we jump to now. + +00:05:48.160 --> 00:05:53.280 +So there is at least one moment in each day when I think + +00:05:53.280 --> 00:05:55.600 +how would I live without Emacs, + +00:05:55.600 --> 00:05:59.120 +particularly now during my senior year in high school. + +00:05:59.120 --> 00:06:04.880 +Things are very busy with school, violin, and other side projects. + +00:06:04.880 --> 00:06:12.720 +It's pretty crazy, and so Emacs and Org Mode has really helped me stay + +00:06:12.720 --> 00:06:14.479 +on track with everything. + +00:06:14.479 --> 00:06:16.319 +And the flexibility of these software + +00:06:16.319 --> 00:06:19.919 +is being able to have things in different files, + +00:06:19.919 --> 00:06:21.600 +notes within the tasks, + +00:06:21.600 --> 00:06:25.840 +all of that stuff has been truly a lifesaver. + +00:06:25.840 --> 00:06:28.400 +And so I think I can confidently say + +00:06:28.400 --> 00:06:35.280 +that I have found Emacs to be the perfect software for me + +00:06:35.280 --> 00:06:38.639 +over the past two years of using Emacs. + +00:06:38.639 --> 00:06:42.240 +Now it is about two years and two months. + +00:06:42.240 --> 00:06:45.039 +I have built a fairly well organized + +00:06:45.039 --> 00:06:49.520 +2000+ line Org literate config. + +00:06:49.520 --> 00:06:53.840 +I actually started with an Elisp config, + +00:06:53.840 --> 00:06:56.800 +just the vanilla Emacs with evil-mode, + +00:06:56.800 --> 00:06:59.039 +and I built it up from there. + +00:06:59.039 --> 00:07:02.400 +Eventually I switched to Org literate configs, + +00:07:02.400 --> 00:07:05.840 +and used that to organize the snippets + +00:07:05.840 --> 00:07:08.639 +that I was putting in there. + +00:07:08.639 --> 00:07:14.000 +So yeah, this is really my workflow now. + +00:07:14.000 --> 00:07:18.960 +Currently about 90% of everything I do on my computer is in Emacs. + +00:07:18.960 --> 00:07:21.360 +The most notable things, of course-- + +00:07:21.360 --> 00:07:25.280 +the list is far too long to put on one slide-- + +00:07:25.280 --> 00:07:28.160 +but I do a lot of my programming in Emacs, + +00:07:28.160 --> 00:07:31.280 +mainly Python and Elisp. + +00:07:31.280 --> 00:07:33.199 +Because of my AP Comp. Sci. class, + +00:07:33.199 --> 00:07:35.199 +I have to do Java as well, + +00:07:35.199 --> 00:07:41.840 +and thank goodness Emacs has wonderful support for that as well. + +00:07:41.840 --> 00:07:45.840 +Also, I do all of my school assignments, + +00:07:45.840 --> 00:07:47.840 +more or less, in Emacs. + +00:07:47.840 --> 00:07:51.919 +Essay writing I do in Org Mode, and I have some template files, + +00:07:51.919 --> 00:07:55.039 +template Org files which I just include at the top, + +00:07:55.039 --> 00:08:01.440 +and then I can export easily to LaTeX and a beautiful PDF. + +00:08:01.440 --> 00:08:03.440 +Math, physics, same thing. + +00:08:03.440 --> 00:08:09.599 +LaTeX fragments are a lifesaver, and also really pretty. + +00:08:09.599 --> 00:08:13.199 +I take notes on basically everything. + +00:08:13.199 --> 00:08:15.120 +At first, I had things separate, + +00:08:15.120 --> 00:08:19.680 +and then I started sort of putting it all into one notes.org file, + +00:08:19.680 --> 00:08:22.479 +or most of it into one file, + +00:08:22.479 --> 00:08:24.960 +and that has actually worked out surprisingly well, + +00:08:24.960 --> 00:08:30.442 +especially with all the searching +features of agenda and what not. + +00:08:30.442 --> 00:08:33.440 +And I also use mail. + +00:08:33.440 --> 00:08:37.680 +I recently made the switch, probably about one or two months ago, + +00:08:37.680 --> 00:08:42.399 +and it has been one of the best switches I've ever had, + +00:08:42.399 --> 00:08:47.839 +especially given connecting to tasks all of this wonderful stuff. + +00:08:47.839 --> 00:08:54.160 +Just putting even more in Emacs is always a good thing, I found. + +00:08:54.160 --> 00:08:56.959 +So reflecting back on my journey, + +00:08:56.959 --> 00:08:59.600 +I think one of the most important things + +00:08:59.600 --> 00:09:01.440 +was just having a reason to use it. + +00:09:01.440 --> 00:09:06.080 +When I came to Emacs I had something that I was looking for, + +00:09:06.080 --> 00:09:09.839 +and as soon as I found it, I delved right in, + +00:09:09.839 --> 00:09:12.720 +and I started using it for that thing. + +00:09:12.720 --> 00:09:16.240 +So I was sort of forced to take the time to read the docs + +00:09:16.240 --> 00:09:20.880 +and figure out what functions I needed to function + +00:09:20.880 --> 00:09:25.839 +and how I was going to put my workflow, + +00:09:25.839 --> 00:09:30.399 +and also, of course, the desire to tinker. + +00:09:30.399 --> 00:09:35.839 +So, really, what's next for me is just wanting to become + +00:09:35.839 --> 00:09:38.640 +a more active member of the Emacs community. + +00:09:38.640 --> 00:09:40.959 +I want to give back, and I think this talk + +00:09:40.959 --> 00:09:43.760 +is sort of the first step to that + +00:09:43.760 --> 00:09:46.399 +being a more active part of this community + +00:09:46.399 --> 00:09:52.720 +that has, indirectly, perhaps, but just really helped me + +00:09:52.720 --> 00:09:55.839 +become a better and more organized human being. + +00:09:55.839 --> 00:10:00.240 +I have some package ideas that I'm slowly working on, + +00:10:00.240 --> 00:10:05.920 +and yeah, I just hope to spread the word. + +00:10:05.920 --> 00:10:09.360 +So thank you very much for listening to my lightning talk. + +00:10:09.360 --> 00:10:11.360 +If you'd like to contact me here are + +00:10:11.360 --> 00:10:14.800 +three modes of or two modes of communication. + +00:10:14.800 --> 00:10:17.600 +I will be on IRC more soon, + +00:10:17.600 --> 00:10:22.079 +and you can always email me if you have any questions. + +00:10:22.079 --> 00:10:25.519 +You can also search me on Youtube: Pierce Wang violin. + +00:10:25.519 --> 00:10:33.040 +Thank you very much and I hope you enjoy the rest of the conference. diff --git a/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt b/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt new file mode 100644 index 00000000..e0ddcb76 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt @@ -0,0 +1,769 @@ +WEBVTT + +00:00:01.360 --> 00:00:03.040 +hello and welcome to my + +00:00:03.040 --> 00:00:05.520 +Emacs conference lightning talk today + +00:00:05.520 --> 00:00:07.120 +I'll be talking about + +00:00:07.120 --> 00:00:09.840 +my journey into Emacs as a high schooler + +00:00:09.840 --> 00:00:14.400 +and how it has changed my life + +00:00:14.400 --> 00:00:17.359 +right so who am I I am a senior at + +00:00:17.359 --> 00:00:19.520 +stanford online high school + +00:00:19.520 --> 00:00:22.800 +and I am also a violinist + +00:00:22.800 --> 00:00:24.320 +I started violin when I was two and a + +00:00:24.320 --> 00:00:26.960 +half and I have been + +00:00:26.960 --> 00:00:29.119 +keeping it up ever since violin is a + +00:00:29.119 --> 00:00:30.240 +huge part of my life + +00:00:30.240 --> 00:00:33.360 +and I am very much a musician at heart + +00:00:33.360 --> 00:00:36.239 +I am also a somewhat capable programmer + +00:00:36.239 --> 00:00:37.840 +I've done a lot of informal programming + +00:00:37.840 --> 00:00:39.280 +in the past + +00:00:39.280 --> 00:00:42.559 +and this year I'm taking my first ap + +00:00:42.559 --> 00:00:44.079 +compsci course + +00:00:44.079 --> 00:00:47.440 +in my high school and so + +00:00:47.440 --> 00:00:51.039 +I've done a lot of side projects + +00:00:51.039 --> 00:00:54.239 +mainly in python and some very short + +00:00:54.239 --> 00:00:56.800 +scripts in e-lisp + +00:00:56.800 --> 00:00:59.840 +and last but not least I am a tinker + +00:00:59.840 --> 00:01:02.879 +I love to play around with things and + +00:01:02.879 --> 00:01:06.720 +see what I can do better and just + +00:01:06.720 --> 00:01:10.880 +have as much fun as possible + +00:01:10.880 --> 00:01:15.040 +so how did I find Emacs + +00:01:15.040 --> 00:01:17.600 +I discovered it actually through a talk + +00:01:17.600 --> 00:01:18.880 +funnily enough + +00:01:18.880 --> 00:01:21.360 +at a vim conference given by aaron + +00:01:21.360 --> 00:01:23.520 +bieber + +00:01:23.520 --> 00:01:25.840 +titled evil mode or how I learned to + +00:01:25.840 --> 00:01:28.320 +stop worrying and love Emacs + +00:01:28.320 --> 00:01:31.439 +I watched that talk a couple times over + +00:01:31.439 --> 00:01:33.360 +just marveling at all the wonderful + +00:01:33.360 --> 00:01:35.759 +things that he could do in Emacs + +00:01:35.759 --> 00:01:38.799 +and being a previous vim user myself + +00:01:38.799 --> 00:01:41.680 +I found it very enticing to be able to + +00:01:41.680 --> 00:01:42.399 +have + +00:01:42.399 --> 00:01:44.960 +the evil mode package and very quickly + +00:01:44.960 --> 00:01:47.040 +switch to Emacs + +00:01:47.040 --> 00:01:48.799 +at the time I was also in my sophomore + +00:01:48.799 --> 00:01:51.040 +year and so + +00:01:51.040 --> 00:01:54.640 +I had had sort of a note-taking system + +00:01:54.640 --> 00:01:56.320 +in the past + +00:01:56.320 --> 00:01:59.360 +but it was not good um and I needed a + +00:01:59.360 --> 00:02:01.680 +more organized note-taking system + +00:02:01.680 --> 00:02:03.759 +my parents had suggested paper for a + +00:02:03.759 --> 00:02:04.960 +while and + +00:02:04.960 --> 00:02:08.160 +there was the whole organization + +00:02:08.160 --> 00:02:10.959 +part of that but that did not really + +00:02:10.959 --> 00:02:12.080 +work out for me + +00:02:12.080 --> 00:02:14.000 +and so I was trying to find this better + +00:02:14.000 --> 00:02:16.239 +note-taking system + +00:02:16.239 --> 00:02:19.440 +and it was very hard + +00:02:19.440 --> 00:02:22.239 +I had two main criteria which I did not + +00:02:22.239 --> 00:02:23.520 +define at the time + +00:02:23.520 --> 00:02:25.360 +but I realized was really what I was + +00:02:25.360 --> 00:02:26.640 +looking for + +00:02:26.640 --> 00:02:28.720 +first of all it had to be flexible + +00:02:28.720 --> 00:02:30.959 +enough and second of all it had + +00:02:30.959 --> 00:02:33.920 +I had to have control over the data and + +00:02:33.920 --> 00:02:34.959 +so + +00:02:34.959 --> 00:02:37.519 +through this process I actually went + +00:02:37.519 --> 00:02:39.680 +through a bunch of note-taking softwares + +00:02:39.680 --> 00:02:42.640 +rather systematically I went through + +00:02:42.640 --> 00:02:44.080 +google docs + +00:02:44.080 --> 00:02:47.519 +which very much did not work out + +00:02:47.519 --> 00:02:49.840 +I also went through evernote which also + +00:02:49.840 --> 00:02:50.640 +was not + +00:02:50.640 --> 00:02:53.200 +great for me and one note which I + +00:02:53.200 --> 00:02:55.200 +settled on for a little while + +00:02:55.200 --> 00:02:58.800 +but it did not meet these criteria + +00:02:58.800 --> 00:03:01.519 +particularly the second one I had taken + +00:03:01.519 --> 00:03:02.159 +some notes + +00:03:02.159 --> 00:03:05.280 +and I wanted to export it and onenote + +00:03:05.280 --> 00:03:07.519 +did not let me do that + +00:03:07.519 --> 00:03:12.000 +it was pdf horribly organized pdf + +00:03:12.000 --> 00:03:14.879 +and that's when I knew I needed some + +00:03:14.879 --> 00:03:17.440 +change + +00:03:17.440 --> 00:03:21.519 +so I discovered Emacs through this talk + +00:03:21.519 --> 00:03:24.080 +and through the wonderful features of + +00:03:24.080 --> 00:03:27.040 +org mode + +00:03:27.040 --> 00:03:30.080 +this is my first journal entry in Emacs + +00:03:30.080 --> 00:03:34.000 +I had been playing with it for one day + +00:03:34.000 --> 00:03:36.159 +and I was on the org agenda and I + +00:03:36.159 --> 00:03:38.159 +happened to press I + +00:03:38.159 --> 00:03:40.720 +which for the Emacs combined is the + +00:03:40.720 --> 00:03:41.599 +default for + +00:03:41.599 --> 00:03:45.440 +diary entry and so I was very excited + +00:03:45.440 --> 00:03:48.720 +um and I shouldn't stay on the slide too + +00:03:48.720 --> 00:03:50.239 +long unless you read it + +00:03:50.239 --> 00:03:53.760 +um so let's move on to the next one + +00:03:53.760 --> 00:03:57.200 +um so the learning curve for me I think + +00:03:57.200 --> 00:04:00.480 +particularly being an xbm user + +00:04:00.480 --> 00:04:03.760 +evil mode made it very easy to switch + +00:04:03.760 --> 00:04:06.080 +thankfully I there was the emax + +00:04:06.080 --> 00:04:07.439 +reference sheet + +00:04:07.439 --> 00:04:10.799 +and having evil mode to + +00:04:10.799 --> 00:04:14.080 +switch between um + +00:04:14.080 --> 00:04:17.440 +texts and whether it be editing a text + +00:04:17.440 --> 00:04:17.919 +file + +00:04:17.919 --> 00:04:20.560 +or going to other parts of just Emacs in + +00:04:20.560 --> 00:04:21.600 +general + +00:04:21.600 --> 00:04:24.800 +I think vim really helped with making me + +00:04:24.800 --> 00:04:26.840 +feel comfortable within this new + +00:04:26.840 --> 00:04:28.000 +environment + +00:04:28.000 --> 00:04:31.440 +and so having that experience I also + +00:04:31.440 --> 00:04:31.919 +wasn't + +00:04:31.919 --> 00:04:34.240 +new to the keybind-based world I have + +00:04:34.240 --> 00:04:36.320 +been very comfortable with computer + +00:04:36.320 --> 00:04:40.160 +and the keyboard for most of my life + +00:04:40.160 --> 00:04:43.520 +and so it was not a totally new + +00:04:43.520 --> 00:04:45.520 +environment for me + +00:04:45.520 --> 00:04:47.440 +I also spent a lot of time looking at + +00:04:47.440 --> 00:04:49.360 +the Emacs reference sheet + +00:04:49.360 --> 00:04:53.040 +just thinking about trying to find + +00:04:53.040 --> 00:04:55.040 +all of the different functions if I + +00:04:55.040 --> 00:04:56.639 +didn't know what something was + +00:04:56.639 --> 00:04:59.680 +then I queried it in Emacs and then I + +00:04:59.680 --> 00:05:01.199 +figured out what it was + +00:05:01.199 --> 00:05:03.759 +and that was one of the best ways for me + +00:05:03.759 --> 00:05:05.600 +to discover + +00:05:05.600 --> 00:05:09.360 +all of the capabilities of Emacs + +00:05:09.360 --> 00:05:11.440 +thirdly of course the self-documenting + +00:05:11.440 --> 00:05:12.800 +feature + +00:05:12.800 --> 00:05:15.199 +or nature of Emacs and narrowing + +00:05:15.199 --> 00:05:17.120 +frameworks such as helm + +00:05:17.120 --> 00:05:20.479 +really helped find things especially for + +00:05:20.479 --> 00:05:21.360 +mx + +00:05:21.360 --> 00:05:25.919 +for a while I was just + +00:05:25.919 --> 00:05:28.160 +I would go about my day and if I pressed + +00:05:28.160 --> 00:05:29.520 +to keep mine that I didn't know what it + +00:05:29.520 --> 00:05:30.720 +did + +00:05:30.720 --> 00:05:34.560 +I would do the losses and + +00:05:34.560 --> 00:05:36.240 +see the list of key binds that I had + +00:05:36.240 --> 00:05:37.600 +pressed and + +00:05:37.600 --> 00:05:40.400 +tried to find that one and query the + +00:05:40.400 --> 00:05:41.280 +function + +00:05:41.280 --> 00:05:45.280 +and what not so + +00:05:45.280 --> 00:05:49.120 +yeah and now we jump to now so + +00:05:49.120 --> 00:05:51.759 +there there is at least one moment in + +00:05:51.759 --> 00:05:53.280 +each day when I think + +00:05:53.280 --> 00:05:55.600 +how would I live without umax + +00:05:55.600 --> 00:05:57.680 +particularly now during my senior year + +00:05:57.680 --> 00:05:59.120 +in high school + +00:05:59.120 --> 00:06:02.720 +things are very busy with school violin + +00:06:02.720 --> 00:06:05.520 +and other side projects it's pretty + +00:06:05.520 --> 00:06:06.400 +crazy + +00:06:06.400 --> 00:06:09.680 +and so Emacs + +00:06:09.680 --> 00:06:12.720 +and org mode has really helped me stay + +00:06:12.720 --> 00:06:14.479 +on track with everything + +00:06:14.479 --> 00:06:16.960 +and the flexibility of these software is + +00:06:16.960 --> 00:06:18.840 +being able to have things in different + +00:06:18.840 --> 00:06:21.600 +files notes within the tasks + +00:06:21.600 --> 00:06:24.639 +all of that stuff has been truly a + +00:06:24.639 --> 00:06:25.840 +lifesaver + +00:06:25.840 --> 00:06:28.400 +and so I think I can confidently say + +00:06:28.400 --> 00:06:31.199 +that I have found Emacs to be + +00:06:31.199 --> 00:06:35.280 +the perfect software for me + +00:06:35.280 --> 00:06:38.639 +over the past two years of using Emacs + +00:06:38.639 --> 00:06:42.240 +now it is about two years and two months + +00:06:42.240 --> 00:06:45.039 +I have built a fairly well organized + +00:06:45.039 --> 00:06:46.160 +2000 + +00:06:46.160 --> 00:06:49.520 +plus line org literate config + +00:06:49.520 --> 00:06:52.160 +and so I actually I started with an + +00:06:52.160 --> 00:06:53.840 +e-lisp config + +00:06:53.840 --> 00:06:56.800 +just the vanilla e-max with evil mode + +00:06:56.800 --> 00:06:57.919 +and I built it up + +00:06:57.919 --> 00:07:00.319 +from there eventually I switched to org + +00:07:00.319 --> 00:07:02.400 +literate configs + +00:07:02.400 --> 00:07:05.840 +and used that to organize the snippets + +00:07:05.840 --> 00:07:10.080 +that I was putting in there and so + +00:07:10.080 --> 00:07:14.000 +yeah this is really my workflow now + +00:07:14.000 --> 00:07:16.639 +currently about 90 of everything I do on + +00:07:16.639 --> 00:07:18.960 +my computer is in Emacs + +00:07:18.960 --> 00:07:21.520 +the most notable things of course the + +00:07:21.520 --> 00:07:22.319 +list is far + +00:07:22.319 --> 00:07:26.000 +too long to put on one slide but I do a + +00:07:26.000 --> 00:07:28.160 +lot of my programming in Emacs + +00:07:28.160 --> 00:07:31.280 +mainly python and e-lisp + +00:07:31.280 --> 00:07:33.759 +because of my ap comp sci class I have + +00:07:33.759 --> 00:07:35.199 +to do java as well + +00:07:35.199 --> 00:07:38.720 +and thank goodness Emacs has wonderful + +00:07:38.720 --> 00:07:41.840 +support for that as well + +00:07:41.840 --> 00:07:45.840 +also I do all of my school assignments + +00:07:45.840 --> 00:07:48.800 +more or less in Emacs essay writing I do + +00:07:48.800 --> 00:07:50.400 +an org mode and I have some template + +00:07:50.400 --> 00:07:51.919 +files + +00:07:51.919 --> 00:07:53.919 +template org files which I just include + +00:07:53.919 --> 00:07:55.039 +at the top + +00:07:55.039 --> 00:07:58.160 +and then I can export easily to latex + +00:07:58.160 --> 00:08:01.440 +and a beautiful pdf + +00:08:01.440 --> 00:08:04.400 +math physics same thing latex fragments + +00:08:04.400 --> 00:08:05.840 +are a lifesaver + +00:08:05.840 --> 00:08:09.599 +and also really pretty + +00:08:09.599 --> 00:08:13.199 +and I take notes on basically everything + +00:08:13.199 --> 00:08:15.520 +at first I had things separate and then + +00:08:15.520 --> 00:08:16.319 +I started + +00:08:16.319 --> 00:08:19.360 +sort of putting it all into onenotes.org + +00:08:19.360 --> 00:08:21.360 +file or most of it into one + +00:08:21.360 --> 00:08:24.000 +file and that has actually worked out + +00:08:24.000 --> 00:08:24.960 +surprisingly well + +00:08:24.960 --> 00:08:26.479 +especially with all the searching + +00:08:26.479 --> 00:08:28.879 +features of agenda + +00:08:28.879 --> 00:08:33.440 +and whatnot um and I also use mail + +00:08:33.440 --> 00:08:35.680 +I recently made the switch probably + +00:08:35.680 --> 00:08:37.680 +about one or two months ago + +00:08:37.680 --> 00:08:40.479 +and it has been one of the best switches + +00:08:40.479 --> 00:08:40.959 +I've + +00:08:40.959 --> 00:08:44.480 +I've ever had especially given + +00:08:44.480 --> 00:08:46.320 +connecting to tasks all of this + +00:08:46.320 --> 00:08:47.839 +wonderful stuff + +00:08:47.839 --> 00:08:50.640 +just putting even more in Emacs is + +00:08:50.640 --> 00:08:54.160 +always a good thing I found + +00:08:54.160 --> 00:08:57.680 +so reflecting back on my journey I think + +00:08:57.680 --> 00:08:59.760 +one of the most important things was + +00:08:59.760 --> 00:09:01.440 +just having a reason to use it + +00:09:01.440 --> 00:09:04.480 +when I came to Emacs I had something + +00:09:04.480 --> 00:09:06.080 +that I was looking for + +00:09:06.080 --> 00:09:09.600 +and as soon as I found it I delved right + +00:09:09.600 --> 00:09:09.839 +in + +00:09:09.839 --> 00:09:12.720 +and I I started using it for that thing + +00:09:12.720 --> 00:09:14.480 +and so I was sort of forced to + +00:09:14.480 --> 00:09:16.959 +take the time to read the docs and + +00:09:16.959 --> 00:09:19.279 +figure out what functions I needed + +00:09:19.279 --> 00:09:22.399 +to function and how + +00:09:22.399 --> 00:09:25.839 +I was going to put my workflow + +00:09:25.839 --> 00:09:30.399 +and also of course the desire to tinker + +00:09:30.399 --> 00:09:33.519 +and yeah so really what's next for me + +00:09:33.519 --> 00:09:36.800 +is just wanting to become a more active + +00:09:36.800 --> 00:09:38.640 +member of the Emacs community + +00:09:38.640 --> 00:09:40.640 +I want to give back and I think this + +00:09:40.640 --> 00:09:43.760 +talk is sort of the first step to that + +00:09:43.760 --> 00:09:45.920 +being a more active part of this + +00:09:45.920 --> 00:09:48.000 +community that has + +00:09:48.000 --> 00:09:51.040 +indirectly perhaps um but just like + +00:09:51.040 --> 00:09:54.000 +really helped me become a better and + +00:09:54.000 --> 00:09:55.839 +more organized human being + +00:09:55.839 --> 00:09:58.880 +um I have some package ideas that I'm + +00:09:58.880 --> 00:10:01.920 +slowly working on and yeah I just hope + +00:10:01.920 --> 00:10:05.920 +to spread the word + +00:10:05.920 --> 00:10:08.000 +so thank you very much for listening to + +00:10:08.000 --> 00:10:09.360 +my lightning talk + +00:10:09.360 --> 00:10:11.360 +if you'd like to contact me here are + +00:10:11.360 --> 00:10:12.480 +three modes of + +00:10:12.480 --> 00:10:15.279 +or two modes of communication I will be + +00:10:15.279 --> 00:10:17.120 +on irc more + +00:10:17.120 --> 00:10:20.079 +soon and you can always email me if you + +00:10:20.079 --> 00:10:20.560 +have + +00:10:20.560 --> 00:10:23.200 +any questions you can also search me on + +00:10:23.200 --> 00:10:23.680 +youtube + +00:10:23.680 --> 00:10:26.399 +pierce wong violin thank you very much + +00:10:26.399 --> 00:10:26.800 +and + +00:10:26.800 --> 00:10:30.040 +I hope you enjoy the rest of the + +00:10:30.040 --> 00:10:33.040 +conference diff --git a/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt b/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt new file mode 100644 index 00000000..3d655630 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt @@ -0,0 +1,630 @@ +WEBVTT + +00:00:00.880 --> 00:00:04.520 +Hello everyone and welcome to my talk, "The State of Retro Gaming and Emacs." + +00:00:06.960 --> 00:00:08.639 +First of all, a little bit about myself. + +00:00:08.639 --> 00:00:12.000 +My name is Vasilij Schneidermann. I'm 28 years old. + +00:00:12.000 --> 00:00:14.719 +I work as a cyber security consultant at msg systems, + +00:00:14.719 --> 00:00:17.359 +and test other people's web applications + +00:00:17.359 --> 00:00:20.160 +and review the source code for security problems. + +00:00:20.160 --> 00:00:22.080 +You can reach me by email. + +00:00:22.080 --> 00:00:25.039 +I have my own self-hosted git repositories, + +00:00:25.039 --> 00:00:28.160 +and I have a blog where you can occasionally find new posts by me + +00:00:28.160 --> 00:00:32.160 +on all kinds of things, not just Emacs things. + +00:00:32.160 --> 00:00:34.559 +The motivation about this one... + +00:00:34.559 --> 00:00:37.600 +I found that Emacs is the ultimate procrastination machine, + +00:00:37.600 --> 00:00:39.600 +and there are lots of fun demonstrations. + +00:00:39.600 --> 00:00:41.200 +I'll go over a few of them. + +00:00:41.200 --> 00:00:45.840 +For example, someone made a thing to order salad for himself online, + +00:00:45.840 --> 00:00:48.239 +so he doesn't have to walk over to the shop. + +00:00:48.239 --> 00:00:51.760 +There's plenty of IRC bots. There's some game things. + +00:00:51.760 --> 00:00:55.600 +There's an emulator for the Z-machine +which you can use to play zork. + +00:00:55.600 --> 00:00:57.440 +And so I asked myself, at this point, + +00:00:57.440 --> 00:00:59.920 +can you actually emulate retro games at 60fps? + +00:00:59.920 --> 00:01:02.079 +I looked around a bit and found some projects, + +00:01:02.079 --> 00:01:06.159 +but none that were actually able to do it at 60fps. + +00:01:06.159 --> 00:01:08.000 +So I set out to do my own one, + +00:01:08.000 --> 00:01:09.200 +and looked out for a console + +00:01:09.200 --> 00:01:11.119 +that you can actually emulate at that speed, + +00:01:11.119 --> 00:01:14.690 +using Emacs with its very, very limited rendering. + +00:01:16.320 --> 00:01:19.200 +And here's the project, chip8.el. + +00:01:19.200 --> 00:01:20.560 +It's pretty much finished. + +00:01:20.560 --> 00:01:24.000 +It clocks into under 1000 source lines of code. + +00:01:24.000 --> 00:01:26.159 +It supports the superchip 8 extensions. + +00:01:26.159 --> 00:01:27.280 +It runs at full speed. + +00:01:27.280 --> 00:01:29.600 +All games behave okay, as far as I'm concerned, + +00:01:29.600 --> 00:01:31.680 +and yeah, I'm pretty happy with it. + +00:01:31.680 --> 00:01:34.479 +It's very much the hello world of emulation, + +00:01:34.479 --> 00:01:40.880 +and I might, maybe, do some other emulation projects in the future. + +00:01:40.880 --> 00:01:43.360 +Now, for the section which is the longest: + +00:01:43.360 --> 00:01:45.439 +bunch of fun facts about chip8.el + +00:01:45.439 --> 00:01:49.200 +which I've learned during this project. + +00:01:49.200 --> 00:01:51.759 +So what the hell is chip8 anyway? + +00:01:51.759 --> 00:01:54.960 +First of all, unlike many other emulation game things, + +00:01:54.960 --> 00:01:56.799 +it's not a console, but a VM. + +00:01:56.799 --> 00:02:00.000 +It was designed for easy porting of home +computer games. + +00:02:00.000 --> 00:02:02.320 +It wasn't terribly successful, + +00:02:02.320 --> 00:02:05.439 +but there's still a small community of enthusiasts writing games for it, + +00:02:05.439 --> 00:02:09.119 +and there are even a few demos. + +00:02:09.119 --> 00:02:11.039 +This VM has system specs. + +00:02:11.039 --> 00:02:14.720 +It has a very, very simple 8-bit cpu with 16 registers, + +00:02:14.720 --> 00:02:17.280 +and 36 fixed-size instructions. + +00:02:17.280 --> 00:02:19.680 +You have a whole 4 kilobyte of RAM. + +00:02:19.680 --> 00:02:22.080 +You have a stack with 16 return addresses. + +00:02:22.080 --> 00:02:25.760 +The resolution is 64 by 32 black/white pixels. + +00:02:25.760 --> 00:02:28.000 +Rendering is done by drawing sprites. + +00:02:28.000 --> 00:02:29.200 +These are drawn in XOR mode, + +00:02:29.200 --> 00:02:31.840 +meaning that if you draw a sprite and set a bit, + +00:02:31.840 --> 00:02:35.040 +it just flips over from black to white or white to black. + +00:02:35.040 --> 00:02:39.360 +For sound, you have a monotone buzzer that can just beep at one frequency. + +00:02:39.360 --> 00:02:43.120 +Most unusually, there's a hexadecimal keypad as input, + +00:02:43.120 --> 00:02:48.480 +so the keys are basically zero to nine and a to f. + +00:02:48.480 --> 00:02:50.720 +So how does this whole thing work? + +00:02:50.720 --> 00:02:52.400 +It runs at an unspecified speed. + +00:02:52.400 --> 00:02:53.040 +You'll probably have to do some fine-tuning + +00:02:53.040 --> 00:02:56.080 +to find the speed you're happy with. + +00:02:56.080 --> 00:02:58.080 +Sound and delay timers exist. + +00:02:58.080 --> 00:03:01.120 +They count down at 60fps down to 0. + +00:03:01.120 --> 00:03:05.120 +This is done so that you can play a sound at some specific time. + +00:03:05.120 --> 00:03:07.840 +The game itself is loaded with a fixed offset into RAM. + +00:03:07.840 --> 00:03:10.480 +The program counter is set to exactly that offset, + +00:03:10.480 --> 00:03:11.920 +and from there it enters the game loop + +00:03:11.920 --> 00:03:13.280 +where it decodes an instruction, + +00:03:13.280 --> 00:03:14.800 +executes it for the side effects, + +00:03:14.800 --> 00:03:18.130 +and just loops and does this ad infinitum. + +00:03:19.599 --> 00:03:22.720 +So the game loop was the first thing where we ran into problems. + +00:03:22.720 --> 00:03:25.120 +The usual game approach is to do stuff, + +00:03:25.120 --> 00:03:26.640 +figure out how long to wait, + +00:03:26.640 --> 00:03:29.280 +wait for exactly that much, and repeat. + +00:03:29.280 --> 00:03:31.680 +This doesn't work well in Emacs at all, because, well, + +00:03:31.680 --> 00:03:34.959 +user input, basically. + +00:03:34.959 --> 00:03:37.760 +Emacs is designed to just do whatever it needs to do + +00:03:37.760 --> 00:03:39.040 +whenever you enter user input + +00:03:39.040 --> 00:03:42.319 +instead of doing things at one specific time. + +00:03:42.319 --> 00:03:46.640 +If you try to do interruptable sleep, well, you get unpredictable behavior. + +00:03:46.640 --> 00:03:50.480 +For example, it can be the timer doesn't run at all at the next time + +00:03:50.480 --> 00:03:52.560 +because you've accidentally cancelled it. + +00:03:52.560 --> 00:03:55.120 +If you do uninterruptable sleep, it freezes instead , + +00:03:55.120 --> 00:03:56.720 +which isn't what we want either. + +00:03:56.720 --> 00:04:00.560 +So I went for timers, which forced me to do inversion of control, + +00:04:00.560 --> 00:04:02.560 +meaning that I have to write code in the style + +00:04:02.560 --> 00:04:04.879 +where it just calls timer, + +00:04:04.879 --> 00:04:06.560 +and this allows this input to happen + +00:04:06.560 --> 00:04:11.040 +and for things to progress at roughly the speed I want to. + +00:04:11.040 --> 00:04:14.159 +So there's the timer function which is called at 60fps + +00:04:14.159 --> 00:04:17.359 +and I have to be very careful to not do too much in it. + +00:04:17.359 --> 00:04:21.305 +And, say, this function executes CPU cycles, + +00:04:21.305 --> 00:04:26.479 +decrement the sound/delay registers, and redraw the screen. + +00:04:26.479 --> 00:04:28.800 +So to map this whole system to Emacs Lisp, + +00:04:28.800 --> 00:04:31.199 +I've used just integers and vectors + +00:04:31.199 --> 00:04:33.120 +which contain even more integers. + +00:04:33.120 --> 00:04:35.040 +This is used for the RAM, registers, + +00:04:35.040 --> 00:04:37.040 +return stack, key state, screen, + +00:04:37.040 --> 00:04:38.508 +and so on and so forth. + +00:04:38.508 --> 00:04:41.520 +Basically, what you would do if you were writing C. + +00:04:41.520 --> 00:04:43.360 +All of this is stored in global variables. + +00:04:43.360 --> 00:04:45.600 +I'm not using any lists at all. + +00:04:45.600 --> 00:04:48.400 +As a side effect, there's no consing going on at all. + +00:04:48.400 --> 00:04:50.080 +There are no extra objects created + +00:04:50.080 --> 00:04:53.199 +which would trigger garbage collection processes. + +00:04:53.199 --> 00:04:55.600 +Getting this right was rather tricky, actually, + +00:04:55.600 --> 00:04:58.240 +and there were some hidden garbage collection problems + +00:04:58.240 --> 00:05:01.759 +which I had to resolve over time. + +00:05:01.759 --> 00:05:03.759 +So, decoding instructions. + +00:05:03.759 --> 00:05:06.800 +For this, you have to know that all instructions are two bytes long, + +00:05:06.800 --> 00:05:08.880 +and the arguments are encoded inside them. + +00:05:08.880 --> 00:05:11.440 +For example, the jump to address instruction + +00:05:11.440 --> 00:05:15.120 +is encoded as one and three hex digits. + +00:05:15.120 --> 00:05:18.400 +The type is extracted masking with #xF000 + +00:05:18.400 --> 00:05:20.400 +and then shifting it by 12 bits. + +00:05:20.400 --> 00:05:23.520 +Mask means you perform the binary AND. + +00:05:23.520 --> 00:05:28.400 +You can do the same with the argument by masking with #0xFFF and no shift. + +00:05:28.400 --> 00:05:30.560 +If you do this long enough, you'll find common patterns. + +00:05:30.560 --> 00:05:32.639 +For example, addresses are always encoded like this + +00:05:32.639 --> 00:05:34.880 +using the last three nibbles. + +00:05:34.880 --> 00:05:36.160 +In the code, you'll find a big cond + +00:05:36.160 --> 00:05:40.070 +which dispatches on the type and executes it for the side effects. + +00:05:41.440 --> 00:05:45.919 +For testing, I've initially just executed the ROM until I've hit C-g, + +00:05:45.919 --> 00:05:49.039 +and then use the debug command to render the screen to a buffer. + +00:05:49.039 --> 00:05:53.199 +Later on, I found tiny ROMs that just display a static test screen, + +00:05:53.199 --> 00:05:57.280 +for example, logo, and looked whether it looked right. + +00:05:57.280 --> 00:05:58.800 +I added instructions as needed + +00:05:58.800 --> 00:06:00.720 +and went through more and more and more ROMs. + +00:06:00.720 --> 00:06:04.000 +And later I wrote a unit test suite as a safety net. + +00:06:04.000 --> 00:06:07.840 +This unit test suite, it just sets up an empty emulator state, + +00:06:07.840 --> 00:06:09.199 +executes some instructions, + +00:06:09.199 --> 00:06:14.880 +and then looks whether the expected side effects have happened. + +00:06:14.880 --> 00:06:18.319 +For debugging, I usually use edebug, but this was super ineffective, + +00:06:18.319 --> 00:06:21.600 +because, well, you don't really want to step through big cons + +00:06:21.600 --> 00:06:23.680 +doing side effects for every single cycle, + +00:06:23.680 --> 00:06:26.880 +when it can take like 100 cycles for things to happen. + +00:06:26.880 --> 00:06:29.680 +Therefore I've set up logging. + +00:06:29.680 --> 00:06:32.639 +Whenever I logged something and couldn't figure out the error, + +00:06:32.639 --> 00:06:37.039 +I compared my log output with the instrumented version of another emulator, + +00:06:37.039 --> 00:06:40.479 +and if the logs diverge, then I have figured out where the bug lies + +00:06:40.479 --> 00:06:42.720 +and could look deeper into it. + +00:06:42.720 --> 00:06:44.960 +Future project idea might be a chip 8 debugger, + +00:06:44.960 --> 00:06:49.440 +but I doubt I'll ever go into it. + +00:06:49.440 --> 00:06:51.759 +For analysis, I initially wrote a disassembler, + +00:06:51.759 --> 00:06:54.400 +which is a very simple thing but super tedious, + +00:06:54.400 --> 00:06:56.639 +especially if you wanted to add advanced functionality, + +00:06:56.639 --> 00:06:58.720 +for example, analysis or thinking of what part is data, + +00:06:58.720 --> 00:07:00.000 +what part is code. + +00:07:00.000 --> 00:07:03.360 +I had this great idea for using the radare 2 framework + +00:07:03.360 --> 00:07:06.479 +and adding analysis and disassembly plug-in for it. + +00:07:06.479 --> 00:07:08.400 +So I looked into this. Found, okay, + +00:07:08.400 --> 00:07:10.319 +you can write plugins in C + +00:07:10.319 --> 00:07:12.639 +but also in Python, so I wrote one in Python, + +00:07:12.639 --> 00:07:14.720 +and then discovered there's actually an existing one in core, + +00:07:14.720 --> 00:07:18.400 +which you have to enable explicitly by passing an extra argument. + +00:07:18.400 --> 00:07:21.680 +I've tried it and found it's not exactly as good as my own one, + +00:07:21.680 --> 00:07:24.160 +so I improved this one and submitted pull requests + +00:07:24.160 --> 00:07:26.610 +until it was at the same level. + +00:07:28.080 --> 00:07:30.720 +Rendering was the trickiest part of this whole thing, + +00:07:30.720 --> 00:07:34.319 +because, well, I decided against using a library. + +00:07:34.319 --> 00:07:37.120 +Not like there would have been any usable library for this. + +00:07:37.120 --> 00:07:40.880 +My usual approach of creating SVG files was too expensive. + +00:07:40.880 --> 00:07:45.120 +It just created too much garbage and took too long time. + +00:07:45.120 --> 00:07:47.360 +I then tried creating mutating strings. + +00:07:47.360 --> 00:07:52.479 +This was either too expensive, just like SVGs, or too complicated. + +00:07:52.479 --> 00:07:57.280 +I tried changing SVG tiles, which created gaps between the lines. + +00:07:57.280 --> 00:08:00.720 +Then I tried to create an xpm file which was backed by a bool vector + +00:08:00.720 --> 00:08:02.400 +and mutating this bool vector, + +00:08:02.400 --> 00:08:04.000 +but the image caching effect + +00:08:04.000 --> 00:08:06.479 +made it just every nth frame to appear, + +00:08:06.479 --> 00:08:08.879 +which wasn't good either. + +00:08:08.879 --> 00:08:11.440 +Then I had the idea to just use plain text + +00:08:11.440 --> 00:08:13.120 +and paint the individual characters + +00:08:13.120 --> 00:08:14.800 +with a different background color. + +00:08:14.800 --> 00:08:17.120 +This had perfect, perfect performance. + +00:08:17.120 --> 00:08:19.280 +There were many optimization attempts until I got there, + +00:08:19.280 --> 00:08:21.199 +and it was very, very stressful. + +00:08:21.199 --> 00:08:26.160 +I wasn't sure whether I would ever get to accept the performance at all. + +00:08:26.160 --> 00:08:28.560 +For sound you only need to do a single beep, + +00:08:28.560 --> 00:08:31.280 +so technically, it shouldn't be difficult to emulate it. + +00:08:31.280 --> 00:08:33.039 +However, doing this is hard because + +00:08:33.039 --> 00:08:37.200 +Emacs officially only supports synchronous playback of sounds. + +00:08:37.200 --> 00:08:41.360 +But there's also Emacs process, which you can launch in asynchronous way. + +00:08:41.360 --> 00:08:44.720 +So I looked into it and found that mplayer has a slave mode + +00:08:44.720 --> 00:08:48.640 +and mpv supports listing on the fifo for commands. + +00:08:48.640 --> 00:08:53.760 +So I've created a pipe, started a paused MPV in loop mode, + +00:08:53.760 --> 00:08:56.560 +and always send in pause and unpause command to the FIFO, + +00:08:56.560 --> 00:08:58.000 +and that way I could control + +00:08:58.000 --> 00:09:02.640 +when to start beeping and stop beeping. + +00:09:02.640 --> 00:09:04.160 +So yeah, that's it so far. + +00:09:04.160 --> 00:09:07.200 +It was a very educational experience. + +00:09:07.200 --> 00:09:10.320 +I have tried out a bunch of games which were, + +00:09:10.320 --> 00:09:14.320 +well, I almost say the worst ports of classic games I've ever tried. + +00:09:14.320 --> 00:09:15.680 +It wasn't terribly fun to play them, + +00:09:15.680 --> 00:09:18.555 +but was fun to improve the emulator + +00:09:18.555 --> 00:09:21.760 +until, well, things worked good enough. + +00:09:21.760 --> 00:09:25.120 +I've learned a lot about how computers work at this level, + +00:09:25.120 --> 00:09:28.880 +so, maybe, maybe I'll in the future make another emulator, + +00:09:28.880 --> 00:09:34.000 +but I'm not sure whether anything more advanced, like an Intel 8080 emulator, + +00:09:34.000 --> 00:09:36.560 +will actually run in Emacs fast enough, + +00:09:36.560 --> 00:09:37.839 +but it's still an interesting idea, + +00:09:37.839 --> 00:09:40.800 +because then you could actually have an OS inside Emacs + +00:09:40.800 --> 00:09:43.120 +and fulfill that one specific meme. + +00:09:43.120 --> 00:09:45.440 +But if I try to do most serious stuff, + +00:09:45.440 --> 00:09:47.040 +I'll probably use Chicken Scheme, + +00:09:47.040 --> 00:09:49.920 +which is my preferred language for serious projects, + +00:09:49.920 --> 00:09:53.279 +and write a NES game emulator. + +00:09:53.279 --> 00:09:57.839 +And that's it. Thank you. diff --git a/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt b/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt new file mode 100644 index 00000000..24c1910c --- /dev/null +++ b/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt @@ -0,0 +1,3187 @@ +WEBVTT + +00:00:08.559 --> 00:00:16.074 +CORWIN: Okay. So I'm gonna start with my demo Emacs here. + +00:00:16.074 --> 00:00:18.000 +Erik, we're ready. + +00:00:18.000 --> 00:00:31.840 +AMIN: We are live. + +00:00:31.840 --> 00:00:35.440 +ERIK: Okay, so you're starting then. + +00:00:35.440 --> 00:00:39.200 +CORWIN: I guess I'll start right now. Here we go. + +00:00:39.200 --> 00:00:43.440 +So I'm a Windows user, as we talked about yesterday. + +00:00:43.440 --> 00:00:47.440 +I'm going to try to start Emacs for you now. + +00:00:47.440 --> 00:00:49.360 +I've got it pinned to this thing, + +00:00:49.360 --> 00:00:52.879 +but mostly what I actually do + +00:00:52.879 --> 00:00:56.320 +is grab a file explorer and head to my desktop + +00:00:56.320 --> 00:01:00.559 +where I have all sorts of Emacs. + +00:01:00.559 --> 00:01:10.840 +Erik, can you make sure that your VLC is muted? + +00:01:10.840 --> 00:01:39.360 +ERIK: Okay, give me a second, please. + +00:01:39.360 --> 00:01:41.920 +CORWIN: I do. Okay. All right. + +00:01:41.920 --> 00:01:44.560 +We should be working again now. My apologies for that. + +00:01:44.560 --> 00:01:47.360 +All right. Handling technical problems in real-time + +00:01:47.360 --> 00:01:49.600 +is what Emacs is all about. + +00:01:49.600 --> 00:01:52.799 +As we're coding, we're constantly making errors, and fixing them, + +00:01:52.799 --> 00:01:54.880 +and learning from the kinds of errors that we make, + +00:01:54.880 --> 00:01:57.759 +and adjusting the editor to be easier to use. + +00:01:57.759 --> 00:02:02.640 +So today we'll try to build on some of the ideas we introduced yesterday + +00:02:02.640 --> 00:02:07.280 +around how a community can help us learn Emacs faster, + +00:02:07.280 --> 00:02:12.160 +and how we can think broadly about the people in our team + +00:02:12.160 --> 00:02:15.920 +when we decide how what kind of Emacs configuration + +00:02:15.920 --> 00:02:18.000 +we're going to have going for our project. + +00:02:18.000 --> 00:02:21.120 +So I'm just going to fire up my normal Emacs config now, + +00:02:21.120 --> 00:02:24.720 +so that we get hopefully a nice pretty demo + +00:02:24.720 --> 00:02:28.080 +or at least some slides. + +00:02:28.080 --> 00:02:30.720 +For safety, we're going to avoid the server, + +00:02:30.720 --> 00:02:33.360 +because I hate it when it crashes. + +00:02:33.360 --> 00:02:41.120 +It's a little less stable under Windows, I think. + +00:02:41.120 --> 00:02:43.200 +And well, while this starts up, + +00:02:43.200 --> 00:02:44.800 +I'll just briefly introduce + +00:02:44.800 --> 00:02:47.680 +my lifelong friend Erik Elmshauser + +00:02:47.680 --> 00:02:50.400 +who's hanging in the wings and waiting impatiently + +00:02:50.400 --> 00:02:54.400 +for us to be able to start our slides. + +00:02:54.400 --> 00:02:58.560 +ERIK: Hello, everybody. I'm Erik. + +00:02:58.560 --> 00:03:03.200 +CORWIN: So you've heard plenty from me already this conference, + +00:03:03.200 --> 00:03:09.120 +I suppose, so I'm just going to... + +00:03:09.120 --> 00:03:10.560 +So Erik and I have worked things out + +00:03:10.560 --> 00:03:12.400 +so that he'll do most of the talking today. + +00:03:12.400 --> 00:03:14.159 +I'll drive us through some code parts, + +00:03:14.159 --> 00:03:16.159 +but the hope is that we'll just focus + +00:03:16.159 --> 00:03:17.599 +a little more on the game. + +00:03:17.599 --> 00:03:19.360 +If you have questions about the game at all, + +00:03:19.360 --> 00:03:28.480 +please don't hesitate to ask those as well as your Emacs questions. + +00:03:28.480 --> 00:03:30.840 +I think we're starting out. + +00:03:30.840 --> 00:03:41.200 +Welcome. Let's cut away here so we can show some faces. + +00:03:41.200 --> 00:03:43.920 +I lost you, Erik. + +00:03:43.920 --> 00:03:45.040 +ERIK: Why would you do that? + +00:03:45.040 --> 00:03:48.319 +CORWIN: There he is. + +00:03:48.319 --> 00:03:50.000 +Let's just do one more thing + +00:03:50.000 --> 00:03:53.280 +because that's just kind of offensive. + +00:03:53.280 --> 00:03:55.439 +I'm going to kill off that cute wallpaper + +00:03:55.439 --> 00:03:59.360 +we all were playing with yesterday, + +00:03:59.360 --> 00:04:02.640 +although that's not so bad anymore. + +00:04:02.640 --> 00:04:04.480 +Oh, that's terrible. It's got to come back. + +00:04:04.480 --> 00:04:11.120 +I'm sorry, everybody. + +00:04:11.120 --> 00:04:16.720 +Oh my dear. All right. + +00:04:16.720 --> 00:04:25.040 +We just opened Emacs, so I have to open my slideshow, + +00:04:25.040 --> 00:04:28.479 +and there we are. + +00:04:28.479 --> 00:04:32.560 +Okay, Erik, I think I'm about as ready as I get. + +00:04:32.560 --> 00:04:35.120 +ERIK: Cool. Well, let's begin here. + +00:04:35.120 --> 00:04:37.840 +Welcome to the dungeon, everybody. + +00:04:37.840 --> 00:04:38.320 +As you're aware, I'm Erik and this is Corwin, + +00:04:38.320 --> 00:04:43.040 +and this is the Dungeon project that we've been working on + +00:04:43.040 --> 00:04:45.120 +for about a year now. + +00:04:45.120 --> 00:04:52.000 +The Dungeon game is based on + +00:04:52.000 --> 00:04:53.360 +a tradition of gaming + +00:04:53.360 --> 00:04:55.520 +that came out of the University of Minnesota + +00:04:55.520 --> 00:04:57.520 +back in the 1950s, + +00:04:57.520 --> 00:05:00.320 +as far as we can tell. + +00:05:00.320 --> 00:05:03.360 +It is a predecessor, an ancestor of + +00:05:03.360 --> 00:05:05.199 +most of the commercial role-playing games + +00:05:05.199 --> 00:05:07.919 +that you have heard of or maybe tried out + +00:05:07.919 --> 00:05:11.919 +from various stores and friends, what have you. + +00:05:11.919 --> 00:05:14.800 +So one of the first things we want to talk about is: + +00:05:14.800 --> 00:05:17.039 +What is it that sets Dungeon apart? + +00:05:17.039 --> 00:05:19.680 +why is it... what is it about this game + +00:05:19.680 --> 00:05:22.479 +that makes us want to continue bringing it forward, + +00:05:22.479 --> 00:05:26.479 +when there are so many games already commercially available + +00:05:26.479 --> 00:05:28.479 +that are descended from it? + +00:05:28.479 --> 00:05:34.160 +Dungeon is kind of a simpler game. + +00:05:34.160 --> 00:05:40.400 +Like we don't do a lot of the mechanics that you think about. + +00:05:40.400 --> 00:05:44.560 +What is it that defines your character? Stats and skills and attributes? + +00:05:44.560 --> 00:05:48.080 +We just don't deal with it in Dungeon. + +00:05:48.080 --> 00:05:54.720 +But Dungeon... The simplicity of it allows it + +00:05:54.720 --> 00:06:01.840 +to be a vehicle for creativity more than just a numbers project. + +00:06:01.840 --> 00:06:04.240 +So that's kind of why we like it, + +00:06:04.240 --> 00:06:08.533 +but also it makes it a tricky problem + +00:06:08.533 --> 00:06:12.567 +when it comes to writing a computer game to mimic + +00:06:12.567 --> 00:06:16.400 +the game that we played with paper and dice around a table. + +00:06:16.400 --> 00:06:24.000 +CORWIN: So when we look at it as kind of a technology problem... Whoops... + +00:06:24.000 --> 00:06:27.919 +When we try to... Heyo. I'm sorry. I got ahead of us. + +00:06:27.919 --> 00:06:32.160 +I'll cut back. + +00:06:32.160 --> 00:06:35.520 +ERIK: I thought we were doing fine + +00:06:35.520 --> 00:06:40.319 +CORWIN: Okay, well then. I'll just... yeah. Either way. + +00:06:40.319 --> 00:06:43.360 +ERIK: So we've been friends since... + +00:06:43.360 --> 00:06:46.479 +It was our parents' idea, basically. + +00:06:46.479 --> 00:06:53.120 +Our parents are friends, and we learned this game from our parents. + +00:06:53.120 --> 00:07:02.479 +Specifically, I learned it from Corwin when I was 7 or 8. + +00:07:02.479 --> 00:07:06.400 +CORWIN: Yeah, that's where... that's my cue in, right? + +00:07:09.599 --> 00:07:14.560 +My folks and Erik's folks were really tight. + +00:07:14.560 --> 00:07:17.360 +They used to run science fiction conventions together. + +00:07:17.360 --> 00:07:22.400 +Our play featured imaginative role-playing. + +00:07:22.400 --> 00:07:28.639 +Usually we would find ways to work the computers into things. + +00:07:28.639 --> 00:07:35.000 +I don't know. I hardly have memories that precede Erik. + +00:07:35.000 --> 00:07:39.199 +ERIK: Also, it turns out we're both kind of nerds. + +00:07:39.199 --> 00:07:46.560 +I learned to program from my mother back in the early 80s, + +00:07:46.560 --> 00:07:49.039 +and for as long as we've been friends, + +00:07:49.039 --> 00:07:52.800 +basically we've also been into playing with computers. + +00:07:52.800 --> 00:07:56.720 +Over the years, we've worked with many, many different systems. + +00:07:56.720 --> 00:07:59.700 +We've played with Ataris, Apples, and Amigas + +00:07:59.700 --> 00:08:03.567 +for a long time before either of us got PC clones + +00:08:03.567 --> 00:08:07.967 +and Windows or DOS or Linux or any of those systems. + +00:08:07.967 --> 00:08:11.360 +We went through all of them, and kinda liked them. + +00:08:11.360 --> 00:08:17.919 +So we also always thought, like, + +00:08:17.919 --> 00:08:22.639 +how is it that we can use these cool computers that we're into + +00:08:22.639 --> 00:08:25.967 +to build this Dungeon game that we're into? + +00:08:25.967 --> 00:08:28.319 +'Cause that's what you do, right? + +00:08:28.319 --> 00:08:32.080 +CORWIN: That's certainly what we did. + +00:08:32.080 --> 00:08:35.039 +So after some decades of bike-shedding + +00:08:35.039 --> 00:08:39.039 +where we saw really a lot of changes in the technology field, + +00:08:39.039 --> 00:08:40.159 +cell phones were invented, + +00:08:40.159 --> 00:08:41.919 +smartphones were invented... + +00:08:41.919 --> 00:08:45.360 +Text messaging in particular had a dramatic impact + +00:08:45.360 --> 00:08:49.519 +on what we thought Dungeon would have to be able to do to be more fun + +00:08:49.519 --> 00:08:54.720 +than scribbling in graph paper. + +00:08:54.720 --> 00:08:58.480 +Yeah, either way. + +00:08:58.480 --> 00:09:01.519 +ERIK: We've been using Linux since the mid 90s + +00:09:01.519 --> 00:09:06.160 +I don't remember exactly when I did my first Linux install, + +00:09:06.160 --> 00:09:11.200 +but I really liked it from the get-go, + +00:09:11.200 --> 00:09:17.267 +and I think it was shortly after I +installed it on a 486, + +00:09:17.267 --> 00:09:18.900 +I went over to Corwin's house + +00:09:18.900 --> 00:09:23.360 +and we spent a couple of months screwing around with it. + +00:09:23.360 --> 00:09:28.800 +CORWIN: I'll add, I remember the day that I learned about the formation of GNU. + +00:09:28.800 --> 00:09:33.440 +It had a life. I mean, I read lots of licenses. + +00:09:33.440 --> 00:09:38.480 +I think a lot of us have written our own SWAG license code + +00:09:38.480 --> 00:09:42.080 +and I definitely credit the formation of GNU + +00:09:42.080 --> 00:09:48.640 +to my being interested in thinking about that. + +00:09:48.640 --> 00:09:50.720 +Right. I am working the slides here. Okay. + +00:09:50.720 --> 00:09:54.800 +Well. So yeah, this is your turn. + +00:09:54.800 --> 00:09:57.360 +I already mentioned Jeff yesterday, + +00:09:57.360 --> 00:10:00.399 +so your turn to take it for a few slides. + +00:10:00.399 --> 00:10:07.600 +ERIK: Along with learning Linux, we started learning the various tools + +00:10:07.600 --> 00:10:11.680 +that were available through the GNU free software movement. + +00:10:11.680 --> 00:10:16.560 +It didn't take very long before we got into using Emacs. + +00:10:16.560 --> 00:10:21.839 +When we were working as software developers back in the 90s, + +00:10:21.839 --> 00:10:25.200 +we both were using Emacs in an office environment + +00:10:25.200 --> 00:10:28.959 +with some other developers. + +00:10:28.959 --> 00:10:32.367 +It was obviously a very powerful tool, + +00:10:32.367 --> 00:10:40.560 +and we have really enjoyed using it for a couple of decades since then. + +00:10:40.560 --> 00:10:48.880 +CORWIN: I'm not going to go on at length about my love for Emacs here. + +00:10:48.880 --> 00:10:52.480 +So we put together a project. + +00:10:52.480 --> 00:10:54.033 +Each time we rehearse this, + +00:10:54.033 --> 00:10:56.320 +Erik introduces it with it's my story to tell, + +00:10:56.320 --> 00:10:58.000 +but since our flow is already to hell + +00:10:58.000 --> 00:11:00.880 +and we're just having a conversation with you today, + +00:11:00.880 --> 00:11:05.920 +I'll just jump in and say from a project standpoint, + +00:11:05.920 --> 00:11:08.160 +the project owes its inception + +00:11:08.160 --> 00:11:10.320 +to a tremendous number of people in fandom + +00:11:10.320 --> 00:11:15.680 +that encouraged us to just do crazy projects. + +00:11:15.680 --> 00:11:17.760 +In this case, to our friends + +00:11:17.760 --> 00:11:20.640 +that were hanging out with us on Discord all the time + +00:11:20.640 --> 00:11:22.560 +while we played different games. + +00:11:22.560 --> 00:11:25.200 +And through that, and while I was + +00:11:25.200 --> 00:11:26.640 +fooling with Emacs, + +00:11:26.640 --> 00:11:34.000 +generally other people played games, + +00:11:34.000 --> 00:11:35.519 +the pieces fell into place. + +00:11:35.519 --> 00:11:37.279 +We were all there, so we could talk about it, + +00:11:37.279 --> 00:11:39.760 +and the idea got exciting again. + +00:11:39.760 --> 00:11:41.920 +We started going back to all the places + +00:11:41.920 --> 00:11:44.160 +that we had had trouble with it in the past. + +00:11:44.160 --> 00:11:45.760 +It really did seem to add up. + +00:11:45.760 --> 00:11:48.880 +We built proof of concepts to do hard stuff quickly. + +00:11:48.880 --> 00:11:54.880 +I guess we'll probably head into that that area now. + +00:11:54.880 --> 00:11:59.300 +ERIK: This slide mentions: Why build a role-playing game in Emacs? + +00:11:59.300 --> 00:12:03.360 +I was watching the last presentation + +00:12:03.360 --> 00:12:08.167 +and there was a slide about all of the +problems + +00:12:08.167 --> 00:12:10.333 +that Emacs poses for retro gaming, + +00:12:10.333 --> 00:12:14.100 +where it interrupts the game loops and +it waits for user input. + +00:12:14.100 --> 00:12:17.667 +That was a whole list of reasons why + +00:12:17.667 --> 00:12:21.233 +Emacs actually does exactly what we want in our project + +00:12:21.233 --> 00:12:31.360 +and why Dungeon is a natural fit for Emacs. + +00:12:31.360 --> 00:12:36.480 +CORWIN: Hey there. Yeah, go ahead and continue. + +00:12:36.480 --> 00:12:38.639 +I just got a phone call, I think from Leo, + +00:12:38.639 --> 00:12:40.639 +so I'm going to mute. + +00:12:40.639 --> 00:12:47.279 +ERIK: So what we did in the project was basically + +00:12:47.279 --> 00:12:49.680 +come up with our minimum play-testable candidate. + +00:12:49.680 --> 00:12:50.959 +We listed all of the things + +00:12:50.959 --> 00:12:54.240 +that we need to be able to make the project do + +00:12:54.240 --> 00:12:59.519 +in order to recreate the Dungeon experience that we had + +00:12:59.519 --> 00:13:01.279 +with paper and dice sitting around a + +00:13:01.279 --> 00:13:05.600 +table when we were kids. + +00:13:02.160 --> 00:13:12.570 +And, I mean, we've, you know, it took a while for us to kind of + +00:13:12.570 --> 00:13:15.870 +tease apart the problem in a way where we could actually + +00:13:15.870 --> 00:13:19.370 +list out all of the features, like, what are the problems + +00:13:19.370 --> 00:13:22.160 +we have to solve and how do we solve them? + +00:13:27.160 --> 00:13:31.050 +So, creating any free software, any self-organizing free + +00:13:31.050 --> 00:13:34.740 +software project is challenging to start with, and we're + +00:13:34.740 --> 00:13:38.530 +generally people with a bunch of other responsibilities by + +00:13:38.530 --> 00:13:43.570 +the time we get to it. So, it's not just, hey, you know, + +00:13:43.570 --> 00:13:48.350 +the general herding cats, it's, you know, trying to make it + +00:13:48.350 --> 00:13:50.160 +a part of your life, too. + +00:13:52.160 --> 00:13:56.570 +That being kind of a, you know, challenging battle, we kind + +00:13:56.570 --> 00:14:00.580 +of aligned on some principles that we wanted to adhere to + +00:14:00.580 --> 00:14:04.160 +once we started taking the project seriously. + +00:14:04.160 --> 00:14:10.640 +Like, you know, particularly recognizing GNU in specific as + +00:14:10.640 --> 00:14:14.160 +we focus on giving back to the community. + +00:14:15.160 --> 00:14:19.830 +Taking what we learned as Perl programmers and, you know, + +00:14:19.830 --> 00:14:23.920 +bringing that spirit forward into our work and maybe + +00:14:23.920 --> 00:14:28.830 +specifically support, making sure that we can, you know, + +00:14:28.830 --> 00:14:34.160 +write functions for the game in Perl if we want to. + +00:14:35.160 --> 00:14:40.250 +And then to use the game as a vehicle to make people look + +00:14:40.250 --> 00:14:45.510 +beyond the typically open source – sorry, typically nom + +00:14:45.510 --> 00:14:50.290 +inally open source at best, generally pretty closed world of + +00:14:50.290 --> 00:14:52.160 +computer gaming. + +00:14:52.160 --> 00:14:55.260 +A lot of Windows users out there, a lot of non-free + +00:14:55.260 --> 00:14:58.670 +communication tools, and a lot of, you know, a lot of + +00:14:58.670 --> 00:15:02.160 +ground to cover from a free software perspective. + +00:15:03.160 --> 00:15:08.160 +So what can Emacs do from a gaming standpoint to open that up? + +00:15:08.160 --> 00:15:12.960 +And not to mention the hubris of the, you know, the two of + +00:15:12.960 --> 00:15:17.600 +us with a few friends basically deciding to take on what + +00:15:17.600 --> 00:15:20.160 +amounts to a huge project. + +00:15:20.160 --> 00:15:24.080 +You know, we're essentially a year in now and we haven't + +00:15:24.080 --> 00:15:29.160 +really gotten over halfway to our minimum play testable candidate. + +00:15:30.160 --> 00:15:34.160 +It's a work in progress. We've got a long road to go. + +00:15:34.160 --> 00:15:37.310 +There's at least 50 items on the things that we think are + +00:15:37.310 --> 00:15:40.390 +critical to be able to introduce it to my younger kids, for + +00:15:40.390 --> 00:15:41.160 +example. + +00:15:41.160 --> 00:15:48.650 +Okay, so we're in the accomplishments section. So we're + +00:15:48.650 --> 00:15:51.700 +supposed to be talking about the things that we have + +00:15:51.700 --> 00:15:54.160 +succeeded in doing in our first year. + +00:15:55.160 --> 00:15:59.580 +We have succeeded in working with data in org documents, + +00:15:59.580 --> 00:16:04.030 +using org mode tables to store the data that we're going to + +00:16:04.030 --> 00:16:07.160 +use in the various parts of our game. + +00:16:07.160 --> 00:16:14.440 +And we've had a lot of success with svg.el. It started with + +00:16:14.440 --> 00:16:18.130 +drawing maps and we have another talk about our mapping + +00:16:18.130 --> 00:16:20.160 +specifically coming up next. + +00:16:21.160 --> 00:16:25.160 +So we'll put off some of that discussion for a separate talk. + +00:16:25.160 --> 00:16:30.050 +But we've also succeeded in getting into a bunch of + +00:16:30.050 --> 00:16:36.770 +different elements of the game where we're, you know, + +00:16:36.770 --> 00:16:39.340 +making a lot of progress using this drawing engine we + +00:16:39.340 --> 00:16:43.360 +developed to also draw this other thing and also draw this + +00:16:43.360 --> 00:16:45.160 +other thing and also draw this other thing. + +00:16:46.160 --> 00:16:46.160 +And we kind of backed into, we've got this aesthetic + +00:16:46.161 --> 00:16:54.750 +and we're using it to draw interfaces for all of the different + +00:16:54.750 --> 00:16:56.160 +parts of the game. + +00:16:56.160 --> 00:17:08.160 +So let's talk a little bit about what works now. + +00:17:11.160 --> 00:17:15.330 +First of all, there's the mapping part that Erik mentioned + +00:17:15.330 --> 00:17:19.040 +and we'll jump here into, we'll start opening up some files + +00:17:19.040 --> 00:17:20.160 +and looking around. + +00:17:20.160 --> 00:17:25.060 +But then also later we'll fire up an IELM and look at some + +00:17:25.060 --> 00:17:28.160 +of the other proofs of concept. + +00:17:28.160 --> 00:17:31.350 +So hopefully we can pivot the second talk more toward the + +00:17:31.350 --> 00:17:34.520 +demos as we skip some of the interactive stuff that might + +00:17:34.520 --> 00:17:37.160 +be mentioned in the slides that we go by. + +00:17:37.160 --> 00:17:38.160 +Okay. + +00:17:38.160 --> 00:17:48.160 +So, maps, visual battleboard. + +00:17:48.160 --> 00:17:51.160 +The battleboard... + +00:17:51.160 --> 00:17:55.160 +I'm just going to skip it Erik, we'll hit it in the next one. + +00:17:55.160 --> 00:17:57.160 +Okay. + +00:17:57.160 --> 00:18:03.160 +Hang on. + +00:18:05.160 --> 00:18:07.660 +Okay, so I'm just going to go ahead and open up maps and + +00:18:07.660 --> 00:18:12.490 +let you talk from the SVG process itself, because that's + +00:18:12.490 --> 00:18:15.160 +the interesting part to me. + +00:18:15.160 --> 00:18:21.160 +Okay. + +00:18:22.160 --> 00:18:26.350 +Talk about the SVG process, like what do you think exactly + +00:18:26.350 --> 00:18:31.310 +we want to talk about? How we turn our data into an image + +00:18:31.310 --> 00:18:34.160 +or what are you hoping for? + +00:18:34.160 --> 00:18:40.140 +Yeah, so I mean did you want to talk more from the hand-d + +00:18:40.140 --> 00:18:43.160 +rawn SVG graphics at all? + +00:18:43.160 --> 00:18:48.160 +I thought we were going to save that stuff for the pathing talk. + +00:18:48.160 --> 00:18:49.160 +Okay, that sounds fine. + +00:18:49.160 --> 00:18:50.160 +But we can go into it right now if you want. + +00:18:50.160 --> 00:18:54.640 +Yeah, so we've got about 10 minutes before the turn where + +00:18:54.640 --> 00:18:58.470 +we thought we would first take any questions that are + +00:18:58.470 --> 00:19:00.160 +hanging out there. + +00:19:00.160 --> 00:19:04.160 +I unfortunately closed the Etherpad, but I can open it again real quick. + +00:19:04.160 --> 00:19:09.850 +Or you can jump into the pathing stuff now, or I can just + +00:19:09.850 --> 00:19:14.160 +throw open an IELM and we can start the demos. + +00:19:15.160 --> 00:19:20.600 +So let me invite Amin or Sacha back in, or Leo, if any of + +00:19:20.600 --> 00:19:23.350 +you want to join the conversation and make a suggestion as + +00:19:23.350 --> 00:19:27.160 +to how we balance between the remaining time. + +00:19:27.160 --> 00:19:30.300 +The rest of what we have left starts in on toward the + +00:19:30.300 --> 00:19:34.250 +technical, so especially if there would be questions about + +00:19:34.250 --> 00:19:37.160 +the game right now, that would be awesome. + +00:19:37.160 --> 00:19:42.160 +And I'm going to get seated again. + +00:19:44.160 --> 00:19:48.870 +I'm not sure if I talk over the stream, if you'll hear it, + +00:19:48.870 --> 00:19:57.160 +because I'm just watching your stream, but I can try writing on IRC. + +00:20:01.160 --> 00:20:06.140 +Sure, yeah, questions would be cool. Or, yeah, well Erik, + +00:20:06.140 --> 00:20:08.980 +why don't you just go ahead and start walking us through + +00:20:08.980 --> 00:20:12.000 +the hand drawn SVG stuff just a little bit, because I think + +00:20:12.000 --> 00:20:14.950 +if that isn't interesting to people, we can just preempt + +00:20:14.950 --> 00:20:16.160 +for a question. + +00:20:17.160 --> 00:20:23.010 +Okay, so historically when we decided to actually start + +00:20:23.010 --> 00:20:27.080 +writing code, one of the very first things we wanted to do + +00:20:27.080 --> 00:20:30.990 +was the maps, because initially it seemed like the maps + +00:20:30.990 --> 00:20:34.750 +were going to be one of the biggest challenges in terms of + +00:20:34.750 --> 00:20:37.160 +how do we get a text editor to draw pictures for us. + +00:20:40.160 --> 00:20:44.350 +So, we pretty quickly decided we wanted to work with SVGs + +00:20:44.350 --> 00:20:48.370 +because it allowed us to leverage the power of Emacs as a + +00:20:48.370 --> 00:20:53.680 +text editor and a text manipulator to write text graphics + +00:20:53.680 --> 00:20:56.160 +with the SVG format. + +00:20:56.160 --> 00:20:59.770 +So we did some SVG graphics by hand, we went in and just + +00:20:59.770 --> 00:21:03.620 +started hand coding things that looked visually like the + +00:21:03.620 --> 00:21:07.300 +maps we used to draw by hand on graph paper when we were, + +00:21:07.300 --> 00:21:10.160 +you know, sitting around the table. + +00:21:10.160 --> 00:21:13.160 +Yep, absolutely. + +00:21:13.160 --> 00:21:17.610 +What emerged from that is as we started working on some of + +00:21:17.610 --> 00:21:22.140 +these files, this particular image is a test of some 20 + +00:21:22.140 --> 00:21:25.910 +wide water with some beaches around it and a special + +00:21:25.910 --> 00:21:29.160 +chamber kind of off to the side called a clapper. + +00:21:29.160 --> 00:21:32.960 +And this was the way we would code is by sketching by hand + +00:21:32.960 --> 00:21:36.940 +all of these things to look right. And then we would take + +00:21:36.940 --> 00:21:40.810 +that code and we noticed it became real repetitive as we + +00:21:40.810 --> 00:21:45.160 +would go like chunk of water chunk of water chunk of water. + +00:21:45.160 --> 00:21:48.860 +And we're like okay so what we really need is to define a + +00:21:48.860 --> 00:21:52.620 +set of, we call it tiles, but like you can think of it as + +00:21:52.620 --> 00:21:56.660 +rubber stamps where we write this graphics code, and then + +00:21:56.660 --> 00:22:01.160 +we're able to repeat it in different places around the map. + +00:22:01.160 --> 00:22:05.680 +You want to flip over to code view and show that or do we + +00:22:05.680 --> 00:22:09.160 +want to move into. Sure. + +00:22:09.160 --> 00:22:10.160 +Code view. + +00:22:10.160 --> 00:22:14.700 +So, you know, you can see just really obviously here the + +00:22:14.700 --> 00:22:19.240 +only thing that's changing from chunk of water to chunk of + +00:22:19.240 --> 00:22:22.160 +water is the x and y coordinates. + +00:22:22.160 --> 00:22:26.990 +And, you know, we can skip getting into the SVG directives + +00:22:26.990 --> 00:22:31.640 +and how all of the path statements actually work, but you + +00:22:31.640 --> 00:22:36.230 +can trust us, all of these D equals and there's m's and h's + +00:22:36.230 --> 00:22:41.160 +and V's that turns out to be horizontal lines and vertical + +00:22:41.160 --> 00:22:42.160 +lines and cursor moves + +00:22:42.160 --> 00:22:46.900 +kind of like turtle graphics if anyone remembers that far + +00:22:46.900 --> 00:22:50.910 +back, and we're picking up our pen and dropping it and + +00:22:50.910 --> 00:22:54.160 +drawing lines around on our map. + +00:22:54.160 --> 00:22:58.090 +Okay, so we do have a few questions if you want to take + +00:22:58.090 --> 00:23:01.160 +them now otherwise we can also jump in. + +00:23:01.160 --> 00:23:05.160 +Let's get them while they're fresh. Okay, sounds good. + +00:23:05.160 --> 00:23:08.540 +So we'll probably shift to question and answer mode for up + +00:23:08.540 --> 00:23:12.490 +to 15 minutes here. So if you do have questions, maybe + +00:23:12.490 --> 00:23:15.740 +stack rank, go ahead and sort the questions a little for us + +00:23:15.740 --> 00:23:18.880 +or comment on them to let us know which ones you want to + +00:23:18.880 --> 00:23:21.540 +see us get here if we start getting a little long winded or + +00:23:21.540 --> 00:23:23.160 +not just a long, we'll take direction. + +00:23:23.160 --> 00:23:26.160 +But thanks for your questions. + +00:23:26.160 --> 00:23:30.050 +I'd like to see a demo as well we'll look at that with the + +00:23:30.050 --> 00:23:33.160 +remaining time after this question block. + +00:23:33.160 --> 00:23:38.000 +More about what the game is okay sure. So let's let's take + +00:23:38.000 --> 00:23:42.510 +our one minute each swing at what the game is, you want to + +00:23:42.510 --> 00:23:45.160 +go first, I called weapons. + +00:23:45.160 --> 00:23:47.160 +Okay. + +00:23:47.160 --> 00:23:52.180 +Dungeon is like role playing games, but you don't really do + +00:23:52.180 --> 00:23:56.990 +role playing like the, for me the thing the core of being a + +00:23:56.990 --> 00:24:01.400 +role playing game is you take on the role of being your + +00:24:01.400 --> 00:24:06.500 +character and you play your character and dungeons not like + +00:24:06.500 --> 00:24:08.160 +that dungeon. + +00:24:08.160 --> 00:24:11.160 +You can play. + +00:24:11.160 --> 00:24:14.660 +So, the dungeon party always has eight characters in it. + +00:24:14.660 --> 00:24:17.890 +There's four in the front row and four in the back row and + +00:24:17.890 --> 00:24:22.160 +you march through the dungeon, fighting, whatever you encounter. + +00:24:22.160 --> 00:24:25.700 +And if there's one player you play all eight characters. + +00:24:25.700 --> 00:24:29.180 +And depending on how many players you have you split up the + +00:24:29.180 --> 00:24:33.160 +party in whatever way seems fair and equitable to everybody. + +00:24:33.160 --> 00:24:36.010 +And similarly I said the dungeon is kind of a simple game + +00:24:36.010 --> 00:24:38.720 +like there's only three races and there's only three + +00:24:38.720 --> 00:24:42.160 +classes, all of your characters are either human elf dwarf. + +00:24:42.160 --> 00:24:45.680 +They're all a warrior, a priest or a wizard, and all of + +00:24:45.680 --> 00:24:49.400 +these characters have, you know, special properties and + +00:24:49.400 --> 00:24:52.820 +special talents, that is why they come together in this + +00:24:52.820 --> 00:24:54.160 +party of eight. + +00:24:54.160 --> 00:24:57.730 +So essentially dungeon is a game about making up all of + +00:24:57.730 --> 00:25:01.530 +these eight characters and stomping through the dungeon + +00:25:01.530 --> 00:25:04.160 +killing things taking their stuff. + +00:25:04.160 --> 00:25:08.120 +Well you're way over but I don't know how much I have to + +00:25:08.120 --> 00:25:12.160 +add to that. I will just add that if, if you're. + +00:25:12.160 --> 00:25:15.570 +If one's passion as a dungeon master is killing player + +00:25:15.570 --> 00:25:19.210 +characters this game is meant for you. You don't have to + +00:25:19.210 --> 00:25:23.050 +build your game like that. But that's definitely a thing + +00:25:23.050 --> 00:25:25.160 +that people do with this game. + +00:25:25.160 --> 00:25:28.430 +And then as Erik said, it just encourages you to put your + +00:25:28.430 --> 00:25:32.160 +creativity on the table to bring all the different elements. + +00:25:32.160 --> 00:25:35.830 +Hopefully, this may be clear in our slides since we were a + +00:25:35.830 --> 00:25:39.430 +little fumbling for the first few minutes of the talk + +00:25:39.431 --> 00:25:44.160 +but there's also a kind of a player's guide that I started a few years ago. + +00:25:44.160 --> 00:25:47.950 +That's not super complete, but does cover some + +00:25:47.950 --> 00:25:52.160 +of the high level basics of the game that Erik's been talking from. + +00:25:52.160 --> 00:25:55.800 +And I would add that some of the things that you know some + +00:25:55.800 --> 00:25:58.890 +of what makes dungeon great is that there's a lot of + +00:25:58.890 --> 00:26:02.950 +mystery about it, like the player's handbook doesn't tell + +00:26:02.950 --> 00:26:07.020 +you all of the rules, or like any really mystery and like + +00:26:07.020 --> 00:26:09.160 +there's mazes and there's puzzles, + +00:26:09.160 --> 00:26:12.650 +and you have to figure out how things work, and like we've + +00:26:12.650 --> 00:26:16.020 +got all of these treasure items in there that could help + +00:26:16.020 --> 00:26:20.160 +you deal with a particular monster if it occurs to you to use it. + +00:26:20.160 --> 00:26:24.160 +And, you know, like that. There's a lot of. + +00:26:24.160 --> 00:26:27.450 +You don't know what's going on you're dropped in the middle + +00:26:27.450 --> 00:26:30.680 +of this situation and you have to try and survive and level + +00:26:30.680 --> 00:26:33.750 +up and figure it out. And if you succeed in doing that for + +00:26:33.750 --> 00:26:36.520 +a long enough eventually you start realizing that there are + +00:26:36.520 --> 00:26:40.890 +big picture puzzles that there are, you know, there is more to this than just + +00:26:40.890 --> 00:26:43.160 +killing things and taking their stuff. + +00:26:43.160 --> 00:26:46.190 +And that's where the joy of designing these games comes in + +00:26:46.190 --> 00:26:48.890 +for me is like designing the mazes and designing the + +00:26:48.890 --> 00:26:51.890 +puzzles and like, oh yeah and then they're going to come + +00:26:51.890 --> 00:26:51.890 +out of this room and you know what they're going to do. + +00:26:51.891 --> 00:26:57.160 +They're wanting to go that way. + +00:26:57.160 --> 00:27:00.160 +So I'm going to put the trap right there. + +00:27:00.160 --> 00:27:00.160 +And I walk right into it every time. + +00:27:00.161 --> 00:27:00.161 +And then when the party does get in your map + +00:27:00.162 --> 00:27:00.162 +and they do exactly what you thought and they hit the trap + +00:27:00.163 --> 00:27:07.820 +it's just really satisfying + +00:27:07.820 --> 00:27:07.820 +to watch the look on their little faces + +00:27:07.821 --> 00:27:12.160 +as they squirm and struggle to stay alive. + +00:27:12.160 --> 00:27:14.580 +Yeah, that's, that's what I was trying to get at. Thanks. + +00:27:14.580 --> 00:27:18.160 +All right, that was perfect for me. All right. + +00:27:18.160 --> 00:27:21.360 +So so highlight your question for me if you think it's + +00:27:21.360 --> 00:27:24.800 +important we grab it here before we jump into demos, + +00:27:24.801 --> 00:27:28.160 +but otherwise I think it's time to try running some code. + +00:27:28.160 --> 00:27:30.160 +Let's say. + +00:27:30.160 --> 00:27:37.160 +Okay, I say do it. Okay, so you less less camera more more emacs now. + +00:27:37.160 --> 00:27:40.380 +And hopefully I could find the right emacs the right + +00:27:40.380 --> 00:27:43.160 +desktop. All right, there we are. + +00:27:43.160 --> 00:27:49.160 +So we'll try to fire up + +00:27:49.160 --> 00:27:59.160 +a command right now. And I usually like to do the full path to emacs. + +00:27:59.160 --> 00:28:07.160 +When I'm going to run it under minus q. + +00:28:07.160 --> 00:28:13.160 +All right. + +00:28:13.160 --> 00:28:17.160 +Let's have some IELM. + +00:28:17.160 --> 00:28:23.270 +All right, and then I'm also going to do a load file on the + +00:28:23.270 --> 00:28:29.790 +net script that you can find in the repository in the emacs + +00:28:29.790 --> 00:28:36.160 +user and it's init scripts + +00:28:36.160 --> 00:28:41.160 +users folder + +00:28:41.160 --> 00:28:48.160 +nice. + +00:28:48.160 --> 00:28:51.530 +And it's called init-dm because that happened to fit with + +00:28:51.531 --> 00:28:54.160 +my naming scheme, potentially terrible. + +00:28:54.160 --> 00:28:54.160 +All right, and with that loaded in theory some very basic stuff will work + +00:28:54.161 --> 00:28:54.161 +even without us doing anything in IELM + +00:28:54.162 --> 00:29:05.870 +so I think the last thing Erik was talking about + +00:29:05.871 --> 00:29:07.160 +was the SVG code behind the maps. + +00:29:07.160 --> 00:29:11.800 +There as kind of the technical thread so we'll just fire + +00:29:11.800 --> 00:29:15.160 +open the maps, pick a dungeon level. + +00:29:15.160 --> 00:29:17.160 +Let's pick a pretty one. + +00:29:17.160 --> 00:29:19.160 +Okay, if I show this. + +00:29:19.160 --> 00:29:23.160 +Yeah, whatever. + +00:29:23.160 --> 00:29:27.160 +Is that the surface. Yeah. + +00:29:27.160 --> 00:29:32.740 +And let's scale it here I think if I recall that fun like + +00:29:32.740 --> 00:29:36.820 +once, once we got the engine up and running a little bit. + +00:29:36.820 --> 00:29:40.870 +We decided to do some experimentation about seeing + +00:29:40.871 --> 00:29:47.160 +what we could do to push the limits of our tile engine. + +00:29:47.160 --> 00:29:54.450 +So we more or less on the surface map, I basically started + +00:29:54.450 --> 00:29:54.450 +with almost no tiles from below like the water + +00:29:54.451 --> 00:30:01.370 +and the beaches and the general store and the stairs were existing tiles + +00:30:01.371 --> 00:30:04.730 +but then we were like this is going to be surface maps. + +00:30:04.731 --> 00:30:07.160 +We're outdoors so I want hills + +00:30:07.160 --> 00:30:11.150 +and I want trees, and I want grass, and it took a little + +00:30:11.150 --> 00:30:15.430 +while playing with SVG to come up with some acceptable code, + +00:30:15.430 --> 00:30:19.610 +but once the like the grass gets tiled out, it kind of, + +00:30:19.610 --> 00:30:24.510 +you know, gives the illusion of grass, and, you know, these + +00:30:24.510 --> 00:30:25.160 +are all in my estimation + +00:30:25.160 --> 00:30:29.970 +of crude graphics, but we're at the proof of concept stage, + +00:30:29.970 --> 00:30:34.130 +and it definitely proves that we can use our graphics + +00:30:34.130 --> 00:30:38.490 +engine to decide what we want our maps to look like, and + +00:30:38.490 --> 00:30:42.970 +real quickly compose new map tiles and stamp out a bunch of + +00:30:42.970 --> 00:30:44.160 +new maps. + +00:30:44.160 --> 00:30:48.050 +So now I'll show off one of the other things. So the next + +00:30:48.050 --> 00:30:51.680 +thing we did once we once we had the maps doing, and we + +00:30:51.680 --> 00:30:56.040 +haven't gotten into the features of the maps we can we can + +00:30:56.040 --> 00:30:59.200 +appoint time to that or not, but there are a number of + +00:30:59.200 --> 00:31:01.160 +features there that we can look at. + +00:31:01.160 --> 00:31:06.310 +The, we then wanted to try to see if that could make other + +00:31:06.310 --> 00:31:11.550 +interfaces more appealing so we built stuff like, that's + +00:31:11.550 --> 00:31:14.160 +going to be the map again. + +00:31:14.160 --> 00:31:18.580 +I'll just run it here through I am so it's more obvious + +00:31:18.580 --> 00:31:20.160 +what I'm doing. + +00:31:20.160 --> 00:31:23.160 +So let's look next to the character sheet. + +00:31:23.160 --> 00:31:27.160 +Oops. + +00:31:27.160 --> 00:31:33.160 +And alt P doesn't work. Okay. + +00:31:33.160 --> 00:31:35.160 +That's a bummer. + +00:31:35.160 --> 00:31:38.160 +That is not auto loaded. + +00:31:38.160 --> 00:31:41.120 +So this, this project is a bit of a mess right now, y'all, + +00:31:41.120 --> 00:31:43.800 +it does some stuff that's really exciting to us but the + +00:31:43.800 --> 00:31:46.560 +code is terrible and we need all the help we can get being + +00:31:46.560 --> 00:31:49.160 +told what our problems are and how to fix them. + +00:31:49.160 --> 00:31:53.160 +So that is if you take nothing away from this talk. + +00:31:53.160 --> 00:32:00.160 +Take away from it that we could use your help. + +00:32:00.160 --> 00:32:03.692 +Yeah, that doubles back to when we were talking about + +00:32:03.693 --> 00:32:07.800 +Larry Wall's cardinal virtues of programming like we definitely + +00:32:07.800 --> 00:32:11.160 +took on some hubris, thinking we could do this. + +00:32:11.160 --> 00:32:14.300 +We might not be wrong, but we could do it easier with more + +00:32:14.300 --> 00:32:18.160 +hands, you know, many hands make light work. All right. + +00:32:18.160 --> 00:32:21.160 +I'll bite. + +00:32:21.160 --> 00:32:24.580 +Yeah, and the character she won't load for us today I had + +00:32:24.580 --> 00:32:27.880 +some problems with my version control I had to revert my + +00:32:27.880 --> 00:32:31.290 +thing I threw all my local changes in a stash and it's it's + +00:32:31.290 --> 00:32:35.160 +a terrible mess let's look at stuff I tested already today. + +00:32:35.160 --> 00:32:40.160 +Before you got the battle board available. + +00:32:40.160 --> 00:32:42.160 +Let's find out. + +00:32:42.160 --> 00:32:46.160 +First of all, the library. + +00:32:46.160 --> 00:32:57.160 +In fact, actually, your basic require should work. + +00:32:57.160 --> 00:32:59.160 +No. + +00:32:59.160 --> 00:33:03.490 +You can try a load library. You know what, let's, I'm just + +00:33:03.490 --> 00:33:07.350 +going to go ahead and give it to you as a lab beast, since + +00:33:07.350 --> 00:33:10.160 +that's probably more fun to watch. + +00:33:10.160 --> 00:33:16.570 +So we'll take it from my own and this is more likely to be + +00:33:16.570 --> 00:33:17.160 +healthy. + +00:33:17.160 --> 00:33:19.160 +Since only some of the time. + +00:33:19.160 --> 00:33:25.160 +First we have to control x, all the IDM. + +00:33:25.160 --> 00:33:30.360 +All right, and having then loaded the net control you have + +00:33:30.360 --> 00:33:35.550 +nine should give me the maps, and we can verify things work + +00:33:35.550 --> 00:33:39.160 +in a basic way just by changing level. + +00:33:39.160 --> 00:33:44.160 +Let's look at something else. + +00:33:44.160 --> 00:33:49.380 +I mentioned, there were a number of bindings, show them + +00:33:49.380 --> 00:33:50.160 +briefly. + +00:33:50.160 --> 00:33:55.820 +We wrote our own functions to handle movement. Some of + +00:33:55.820 --> 00:34:00.872 +those in SVG dot el the left, left and right movements + +00:34:00.873 --> 00:34:07.160 +didn't seem to work quite quite likely coding, of course. + +00:34:07.160 --> 00:34:10.160 +Um, all right, enough. + +00:34:10.160 --> 00:34:13.160 +So let's, let's see if battle board works now. + +00:34:13.160 --> 00:34:16.160 +I really thought that was on F7. + +00:34:16.160 --> 00:34:19.160 +Up that's the character sheet suite. + +00:34:19.160 --> 00:34:25.160 +Okay, how to use your bindings. + +00:34:25.160 --> 00:34:28.160 +So that looks a little better. + +00:34:28.160 --> 00:34:34.160 +So let's talk about the character sheet. + +00:34:34.160 --> 00:34:36.160 +Yeah. + +00:34:36.160 --> 00:34:40.570 +So the character sheet was our first big repurposing of the + +00:34:40.570 --> 00:34:45.160 +engine that we couldn't do the battle board program that. + +00:34:45.160 --> 00:34:54.160 +Let's see if that runs now to. + +00:34:54.160 --> 00:35:01.160 +It's not interactive if it does. + +00:35:01.160 --> 00:35:05.160 +Good. + +00:35:05.160 --> 00:35:09.160 +So, + +00:35:09.160 --> 00:35:12.360 +try smex guess? No joy. All right, I'm not sure what's + +00:35:12.360 --> 00:35:14.160 +up with the battle board Erik. + +00:35:14.160 --> 00:35:17.190 +We haven't messed with that one for a while in fact we had + +00:35:17.190 --> 00:35:20.270 +discussed using its code as an example so maybe we'll debug + +00:35:20.270 --> 00:35:21.160 +it with you. + +00:35:21.160 --> 00:35:24.160 +I'll certainly check for questions first. + +00:35:24.160 --> 00:35:29.740 +Um, the. So the character sheet which is not scaling + +00:35:29.740 --> 00:35:31.160 +ideally here. + +00:35:31.160 --> 00:35:36.160 +See if reloading it does anything. + +00:35:36.160 --> 00:35:37.160 +Nope. + +00:35:37.160 --> 00:35:40.660 +As far as I can tell, assuming you don't have this + +00:35:40.660 --> 00:35:43.160 +implemented character sheet. + +00:35:43.160 --> 00:35:49.800 +That's right, there's everything in scale, it take in order + +00:35:49.800 --> 00:35:54.160 +to get what you were looking at there. + +00:35:54.160 --> 00:35:56.160 +All right. + +00:35:56.160 --> 00:36:03.201 +This, this whole thing is hard coded, basically to the + +00:36:03.202 --> 00:36:08.160 +gills, except for things like this. + +00:36:08.160 --> 00:36:11.780 +This program represents a re implementation of the drawing + +00:36:11.780 --> 00:36:17.420 +engine using all of the same things. Let's see that + +00:36:17.420 --> 00:36:20.160 +selected so + +00:36:20.160 --> 00:36:23.160 +we'll just try bringing up a map again. + +00:36:23.160 --> 00:36:27.180 +There's one and you'll notice DM map doesn't know anything + +00:36:27.180 --> 00:36:31.240 +about the new draw engine, and there are a couple of places + +00:36:31.240 --> 00:36:35.160 +where the new draw engine is still hooked in to the. + +00:36:35.160 --> 00:36:38.250 +For example, particularly the sizing of the graph paper + +00:36:38.250 --> 00:36:43.160 +background. So I've started the work in DM draw. + +00:36:44.160 --> 00:36:47.950 +Of trying to show how exactly we did this removing the, how + +00:36:47.950 --> 00:36:51.040 +did we get data out of org mode that I talked about + +00:36:51.040 --> 00:36:56.410 +yesterday with our ETL flows, and just focusing on what how + +00:36:56.410 --> 00:37:00.580 +did we solve the problem of predicated drawing, which I + +00:37:00.580 --> 00:37:04.290 +realized we didn't really talk about so should I jump into + +00:37:04.290 --> 00:37:05.160 +that. + +00:37:05.160 --> 00:37:06.160 +Yeah, I guess. + +00:37:06.160 --> 00:37:09.160 +How are we on time, we have time for detours. + +00:37:09.160 --> 00:37:12.450 +Um, yeah, it looks like we could spend two or three minutes + +00:37:12.450 --> 00:37:15.160 +on that and then come back for the questions. + +00:37:15.160 --> 00:37:18.160 +Cool. + +00:37:18.160 --> 00:37:21.440 +And I'm just going to peek into my org mode into my chat + +00:37:21.440 --> 00:37:24.970 +conference and I don't see anybody talking to me from the + +00:37:24.970 --> 00:37:29.160 +organizer channel, so I'm gonna assume that's a good guess. + +00:37:29.160 --> 00:37:33.700 +All right, so let's go ahead and play with the map a + +00:37:33.700 --> 00:37:38.170 +little then that is pretty fun and so much fun that we + +00:37:38.170 --> 00:37:42.640 +had to curtail play sessions in order to keep working on + +00:37:42.640 --> 00:37:44.160 +the project. + +00:37:44.160 --> 00:37:52.160 +So, I'll, I'll do the. + +00:37:52.160 --> 00:37:58.516 +Um, we'll try to find something different from any gift + +00:37:58.517 --> 00:38:01.160 +I've shared here right. + +00:38:01.160 --> 00:38:06.160 +So here we are in a random. Go ahead, Erik, you feel. + +00:38:06.160 --> 00:38:10.660 +Okay, so what we're, what Corwin is doing here is he's + +00:38:10.660 --> 00:38:15.380 +about to put the map into play mode, which is going to turn + +00:38:15.380 --> 00:38:17.160 +on the fog of war. + +00:38:17.160 --> 00:38:21.100 +And then we're going to use the fog of war and the, the + +00:38:21.100 --> 00:38:25.230 +play mode to kind of reveal the map, one square at a time + +00:38:25.230 --> 00:38:28.160 +like we would during a play session. + +00:38:28.160 --> 00:38:32.350 +So we'll just drop the party randomly somewhere onto this + +00:38:32.350 --> 00:38:36.160 +map looks like we're on alpha maze level three here. + +00:38:36.160 --> 00:38:46.160 +And then we'll walk around a little. + +00:38:46.160 --> 00:38:52.280 +Okay, so we're halfway there. I'll have to, I'll have to do + +00:38:52.280 --> 00:38:55.540 +a full redraw the sketch the sketching stuff has has has + +00:38:55.540 --> 00:38:58.980 +broken things here like I said, the two aren't separated + +00:38:58.980 --> 00:39:01.910 +once I run them in the same instance, they're not + +00:39:01.910 --> 00:39:03.160 +predictable. + +00:39:03.160 --> 00:39:08.060 +Okay, so let me elaborate here when he says the sketching + +00:39:08.060 --> 00:39:12.960 +stuff. The current focus of our work is to turn all of this + +00:39:12.960 --> 00:39:17.940 +map stuff we've got into a basically a WYSIWYG map editor, + +00:39:17.940 --> 00:39:22.330 +where we can get into the tiles, and we'll be able to + +00:39:22.330 --> 00:39:24.160 +select the tile and basically rubber + +00:39:24.160 --> 00:39:30.510 +stamp it into a map graphically, and then save the map file + +00:39:30.510 --> 00:39:36.470 +out and load it back in later, so that we're able to just + +00:39:36.470 --> 00:39:40.160 +pound out these maps real fast. + +00:39:40.160 --> 00:39:44.480 +Using a graphical editor rather than having to hand code + +00:39:44.480 --> 00:39:48.160 +every symbol and every square of the tables. + +00:39:48.160 --> 00:39:51.160 +So the process of doing that. + +00:39:51.160 --> 00:39:56.190 +I hate them on things are a mess we've got covers off those + +00:39:56.190 --> 00:40:03.160 +wires hanging out different stuff works on different days. + +00:40:03.160 --> 00:40:06.860 +Well, I will say in our defense this is exactly why we + +00:40:06.860 --> 00:40:10.880 +staged a complicated thing, and probably we should have + +00:40:10.880 --> 00:40:14.510 +just gone with that instead of trying to give you the + +00:40:14.510 --> 00:40:18.460 +experience of, of what it's like to use Emacs to do this + +00:40:18.460 --> 00:40:21.160 +which is sort of the last + +00:40:21.160 --> 00:40:26.450 +thought there and my apologies for that if that's made it + +00:40:26.450 --> 00:40:31.650 +harder to follow the thread. Let's check back now for + +00:40:31.650 --> 00:40:37.160 +questions and see if anybody wants to redirect at all. + +00:40:37.160 --> 00:40:41.438 +Oh yep, this. So what you're looking at all uses + +00:40:41.439 --> 00:40:46.860 +progrmamatic SVG generation for question number four there, + +00:40:46.860 --> 00:40:52.160 +have you played with generating SVGs programmatically in Emacs. + +00:40:52.160 --> 00:40:58.160 +That is what the maps are doing in terms of + +00:40:58.160 --> 00:41:01.860 +being more explicit about that we started hand coding + +00:41:01.860 --> 00:41:05.650 +things and once we got the, the idea of what the code was + +00:41:05.650 --> 00:41:10.160 +going to look like we switched to doing it programmatically. + +00:41:10.160 --> 00:41:13.330 +So, we were going to open up maybe now we've got time we + +00:41:13.330 --> 00:41:16.910 +can get into the tileset real quick. Sure, we definitely + +00:41:16.910 --> 00:41:19.820 +didn't do any of the pathing slides and so now we've + +00:41:19.820 --> 00:41:23.160 +skipped over some stuff we were going to present. + +00:41:23.160 --> 00:41:27.030 +Yeah, that's right we skipped a whole bunch of slides and I + +00:41:27.030 --> 00:41:31.160 +can certainly go back to them they're open here obviously. + +00:41:31.160 --> 00:41:34.110 +I'm right I was just showing off the sketching tool, + +00:41:34.110 --> 00:41:37.530 +briefly in that context but I think you're right, let's, we + +00:41:37.530 --> 00:41:40.800 +can jump over to the actually I should finish with this now + +00:41:40.800 --> 00:41:42.160 +having teased it. + +00:41:42.160 --> 00:41:46.970 +So let's do the same thing here Ctrl H M, and you'll see in + +00:41:46.970 --> 00:41:52.160 +this case there are very few key bindings that are set up. + +00:41:52.160 --> 00:41:57.320 +This shift delete has a terror or shift with a control + +00:41:57.320 --> 00:42:01.920 +delete, it would seem to be. So that has a couple obvious + +00:42:01.920 --> 00:42:06.590 +bugs with it right didn't pick it didn't pick up those + +00:42:06.590 --> 00:42:12.160 +control points until I reuse them not clearing that stack. + +00:42:12.160 --> 00:42:16.720 +I think we can also should probably think about whether the + +00:42:16.720 --> 00:42:21.060 +origin should return and hey marking that origin would be + +00:42:21.060 --> 00:42:25.370 +nice. So there's a tremendous amount to do here this is + +00:42:25.370 --> 00:42:30.090 +just showing that it is possible to use, essentially like a + +00:42:30.090 --> 00:42:31.160 +touch input to, + +00:42:31.160 --> 00:42:40.730 +yeah, and then also we can switch over to our place tool, + +00:42:40.730 --> 00:42:46.830 +and hopefully we can get a nice big menu of all the tiles that + +00:42:46.830 --> 00:42:50.160 +Erik prepared for the game maps. + +00:42:50.160 --> 00:42:55.160 +That was probably a terrible choice but there you have just + +00:42:55.160 --> 00:42:57.160 +a bit of corridor right. + +00:42:57.160 --> 00:43:01.160 +That looks. + +00:43:01.160 --> 00:43:03.160 +And even the click. + +00:43:03.160 --> 00:43:06.870 +Yep, and this click action here is the last thing I + +00:43:06.870 --> 00:43:10.510 +was working on before I dropped everything to build the + +00:43:10.510 --> 00:43:14.160 +decks that we will soon share for this conference. + +00:43:14.160 --> 00:43:20.160 +So okay, back to the tile sets. + +00:43:20.160 --> 00:43:24.130 +So the way we approached drawing it programmatically is we + +00:43:24.130 --> 00:43:28.160 +broke our code up into little snippets we called tiles. + +00:43:28.160 --> 00:43:31.240 +And so this is where I was going to open up the tiles out + +00:43:31.240 --> 00:43:34.610 +here, basically each tile has a name, and then with that + +00:43:34.610 --> 00:43:38.160 +name we place data into different layers of the image. + +00:43:38.160 --> 00:43:43.290 +Some of the layers are just SVG paths, and the data is just + +00:43:43.290 --> 00:43:48.430 +SVG commands, like we saw in that handwritten code, and + +00:43:48.430 --> 00:43:53.560 +some of it is compositions of other tiles, so a tile can be + +00:43:53.560 --> 00:43:56.160 +made up of other tiles. + +00:43:56.160 --> 00:44:00.270 +Furthermore, some of these tiles have conditional code in + +00:44:00.270 --> 00:44:04.460 +it, where like some of this stuff is talking about elf and + +00:44:04.460 --> 00:44:05.160 +bang elf. + +00:44:05.160 --> 00:44:09.540 +So the map is going to be drawn differently depending on + +00:44:09.540 --> 00:44:13.160 +whether or not there's elves in the party. + +00:44:13.160 --> 00:44:17.160 +So, and that's the demo they broke. + +00:44:17.160 --> 00:44:20.160 +So the engine has to make all those decisions. + +00:44:20.160 --> 00:44:22.887 +And that's what we're calling predicated drawing. Oh, there's + +00:44:22.888 --> 00:44:26.810 +a special room here. Do you have any elves? You do. So I + +00:44:26.810 --> 00:44:33.160 +draw it the "there is elves" way. + +00:44:33.160 --> 00:44:37.440 +Yeah, so we built up the set of tiles, and then we + +00:44:37.440 --> 00:44:42.450 +basically made map files, which take our map and break it + +00:44:42.450 --> 00:44:46.840 +up into XY grids, and then we drop these tiles into + +00:44:46.840 --> 00:44:49.160 +positions on the map. + +00:44:49.160 --> 00:44:52.060 +So we can use the same tile square after square after + +00:44:52.060 --> 00:44:55.470 +square. When there's a corridor north-south, it's the same + +00:44:55.470 --> 00:44:59.980 +tile over and over again. And that makes it easy to reuse + +00:44:59.980 --> 00:45:01.160 +the code. + +00:45:01.160 --> 00:45:12.370 +And also, when we go to present the -- what am I trying to + +00:45:12.370 --> 00:45:16.180 +say -- the drawing in fog of war mode, as we move down the + +00:45:16.180 --> 00:45:20.280 +corridor, we can just add the necessary code one bit at a + +00:45:20.280 --> 00:45:24.160 +time to the visible image, so that what we're displaying + +00:45:24.160 --> 00:45:28.160 +doesn't contain any data except what the party has already + +00:45:28.160 --> 00:45:30.160 +discovered. + +00:45:30.160 --> 00:45:34.720 +And thus we have kind of spoiler-rich documents sitting on + +00:45:34.720 --> 00:45:39.120 +the GM server, and then less -- and spoiler-free data that + +00:45:39.120 --> 00:45:43.160 +flows down to the org mode files on the player system. + +00:45:43.160 --> 00:45:47.660 +And the only real challenge is making sure that nothing + +00:45:47.660 --> 00:45:52.230 +that the game does can mess with the users -- the players' + +00:45:52.230 --> 00:45:56.610 +data file, in case they might have their own notes and + +00:45:56.610 --> 00:46:03.800 +things in it. That would be the one, you know, number one + +00:46:03.800 --> 00:46:06.160 +thing to avoid. + +00:46:06.160 --> 00:46:09.200 +Another thing we can talk about here is that there are + +00:46:09.200 --> 00:46:12.350 +layers. You can see this table at the bottom has tile and + +00:46:12.350 --> 00:46:16.860 +overlay. The overlay column is just going to contain some + +00:46:16.860 --> 00:46:19.160 +actual SVG XML style tags. + +00:46:19.160 --> 00:46:23.100 +So that's where we can add whatever text elements or other + +00:46:23.100 --> 00:46:27.120 +SVG, like raw SVG tags we want. Whereas a lot of the other + +00:46:27.120 --> 00:46:30.980 +layers are going to be like path layers, we've got water + +00:46:30.980 --> 00:46:33.160 +layers and beach layers. + +00:46:33.160 --> 00:46:36.370 +And our plan was to have a style sheet that defines how + +00:46:36.370 --> 00:46:39.790 +each of those layers are represented. So like when the + +00:46:39.790 --> 00:46:43.140 +water gets drawn blue and it's got arrows on it giving it + +00:46:43.140 --> 00:46:47.140 +direction, all of that can be customized with a style sheet + +00:46:47.140 --> 00:46:50.160 +to change the water to be whatever you want. + +00:46:50.160 --> 00:46:53.430 +And like we have beaches as yellow, but maybe you like + +00:46:53.430 --> 00:46:56.160 +beaches as red or, you know, whatever. + +00:46:56.160 --> 00:47:03.570 +So we also built some test programs and various -- I'm not + +00:47:03.570 --> 00:47:05.900 +sure what kind of shape we're going to find these in, but + +00:47:05.900 --> 00:47:07.160 +we can try running them. + +00:47:07.160 --> 00:47:13.950 +Here, for example, is just a very basic -- using the same + +00:47:13.950 --> 00:47:21.160 +file to define the tiles and then the layout, so to speak. + +00:47:21.160 --> 00:47:25.160 +Oh, look at that. + +00:47:25.160 --> 00:47:29.160 +There's the layout. Okay, so that actually looks fine. Tile. + +00:47:29.160 --> 00:47:33.430 +And it's path. So this is defining a tile named "seas" and + +00:47:33.430 --> 00:47:37.160 +it's going to have a list of tiles defined above. + +00:47:37.160 --> 00:47:41.120 +And you'll notice also that we can just sort of freely + +00:47:41.120 --> 00:47:44.750 +define and redefine and it sort of figures out, oh, this + +00:47:44.750 --> 00:47:47.160 +must still be part of the B row. + +00:47:47.160 --> 00:48:00.160 +We could also have done this. + +00:48:00.160 --> 00:48:08.160 +Okay, so this would work as would this. + +00:48:08.160 --> 00:48:11.930 +>> Early on in development when we were talking about + +00:48:11.930 --> 00:48:16.520 +getting data in and out of these org tables, it was kind of + +00:48:16.520 --> 00:48:22.160 +a priority to us to leave the way the data is organized + +00:48:22.160 --> 00:48:25.160 +open to the users and to the dungeon masters. + +00:48:25.160 --> 00:48:30.860 +So while we set our tile set apart from our map sets, this + +00:48:30.860 --> 00:48:36.430 +clearly shows that you can cram a tile set and a map into a + +00:48:36.430 --> 00:48:38.160 +single file. + +00:48:38.160 --> 00:48:41.170 +So in situations like the surface where we're using + +00:48:41.170 --> 00:48:44.610 +different tiles from other maps, maybe it makes sense to + +00:48:44.610 --> 00:48:47.890 +move, you know, those tiles just into the file with your + +00:48:47.890 --> 00:48:49.160 +map. + +00:48:49.160 --> 00:48:51.880 +But we also wanted to make sure, like, it's hard for us to + +00:48:51.880 --> 00:48:54.640 +predict how other people are going to want to use this when + +00:48:54.640 --> 00:48:56.160 +they design their games. + +00:48:56.160 --> 00:49:00.780 +So we wanted to leave it as versatile as possible about how + +00:49:00.780 --> 00:49:02.160 +you can use it. + +00:49:02.160 --> 00:49:04.810 +>> Where it matters, right? Not support every feature in + +00:49:04.810 --> 00:49:05.160 +the world. + +00:49:05.160 --> 00:49:08.560 +I can't count the number of times I said, Erik, Erik, Erik, + +00:49:08.560 --> 00:49:12.000 +hey, if we do it like this, people will be -- and he just, + +00:49:12.000 --> 00:49:14.160 +like, does it have to do that? + +00:49:14.160 --> 00:49:19.090 +Like, do we need it right away? Do you have to really + +00:49:19.090 --> 00:49:21.160 +rewrite everything so it can all do that? + +00:49:21.160 --> 00:49:26.160 +And a lot of those conversations, too. + +00:49:26.160 --> 00:49:30.160 +But the key flexibilities are really there. + +00:49:30.160 --> 00:49:32.160 +People might want to use a lot of different files. + +00:49:32.160 --> 00:49:34.160 +They might want to lay the tables out however they want. + +00:49:34.160 --> 00:49:37.590 +They have to be able to say, hey, this is a table that has + +00:49:37.590 --> 00:49:40.950 +data that's controlled by the game, and everything else in + +00:49:40.950 --> 00:49:43.160 +the file is not the game's problem. + +00:49:43.160 --> 00:49:45.980 +>> And our table, some of our tables started getting really + +00:49:45.980 --> 00:49:48.160 +wide, so we started striping the tables. + +00:49:48.160 --> 00:49:52.140 +We'll repeat the same table over and over and over again to + +00:49:52.140 --> 00:49:56.180 +get all of the columns in there without making it, you know, + +00:49:56.180 --> 00:49:58.160 +a million miles wide. + +00:49:58.160 --> 00:49:59.160 +>> Yeah. + +00:49:59.160 --> 00:50:02.450 +Do you want to -- should I go ahead and pull open, like, a + +00:50:02.450 --> 00:50:04.160 +level here, do you think? + +00:50:04.160 --> 00:50:05.160 +>> Sure. + +00:50:05.160 --> 00:50:06.160 +>> Just to have shown it. + +00:50:06.160 --> 00:50:08.750 +>> The file set's a great example of striped tables if you + +00:50:08.750 --> 00:50:11.160 +look down, like, in the level change feature. + +00:50:11.160 --> 00:50:18.160 +>> Oh, sure. + +00:50:18.160 --> 00:50:21.160 +>> Sorry, I'm not quite sitting well to my keyboard here. + +00:50:21.160 --> 00:50:30.160 +I can just readjust things real quick. + +00:50:30.160 --> 00:50:33.920 +So what, you know, you can see here, like, some of these + +00:50:33.920 --> 00:50:38.160 +tables got real wide when we're stuffing SVG tags into them. + +00:50:38.160 --> 00:50:44.160 +And what we -- oh, maybe it's not in these. + +00:50:44.160 --> 00:50:50.160 +I thought it was. + +00:50:50.160 --> 00:50:51.160 +It's special, probably. + +00:50:51.160 --> 00:50:52.160 +>> Yeah. + +00:50:52.160 --> 00:50:54.160 +No, there it is, yeah. + +00:50:54.160 --> 00:50:55.160 +It was in level change. + +00:50:55.160 --> 00:50:57.160 +It does the table key repeat. + +00:50:57.160 --> 00:50:58.160 +>> Okay, great. + +00:50:58.160 --> 00:50:59.720 +>> You were just scrolling up and down so fast I didn't + +00:50:59.720 --> 00:51:00.160 +realize. + +00:51:00.160 --> 00:51:04.270 +So this first table, we've got path and what is that, + +00:51:04.270 --> 00:51:05.160 +stairs? + +00:51:05.160 --> 00:51:09.010 +So the stairs level is one that draws in, like, a pink + +00:51:09.010 --> 00:51:13.160 +color to highlight places where you can change level. + +00:51:13.160 --> 00:51:16.120 +And then if we scroll down to the second half of this + +00:51:16.120 --> 00:51:19.380 +section, the second table is going to have all of these + +00:51:19.380 --> 00:51:24.000 +same tiles in it, but instead of path and stairs, we're + +00:51:24.000 --> 00:51:27.160 +going to have other columns. + +00:51:27.160 --> 00:51:31.160 +Can we see the next table? + +00:51:31.160 --> 00:51:32.160 +There we go. + +00:51:32.160 --> 00:51:35.610 +So the same tiles, only here we've got overlay, + +00:51:35.610 --> 00:51:38.160 +documentation, and behavior. + +00:51:38.160 --> 00:51:40.160 +And I guess we haven't talked about this at all. + +00:51:40.160 --> 00:51:44.920 +The behavior column was our concept of a way that we could + +00:51:44.920 --> 00:51:50.100 +attach functions, basically, to these different areas of + +00:51:50.100 --> 00:51:51.160 +the map. + +00:51:51.160 --> 00:51:55.920 +Because sometimes when you enter an area, we want it to do + +00:51:55.920 --> 00:51:57.160 +something. + +00:51:57.160 --> 00:52:00.880 +Like when you enter a stairs down, maybe we want it to + +00:52:00.880 --> 00:52:04.850 +change to the next level and draw the stairs up behind you + +00:52:04.850 --> 00:52:08.160 +and draw you where you are on the next level. + +00:52:08.160 --> 00:52:13.470 +So these are like hooks where we could attach functions or, + +00:52:13.470 --> 00:52:18.390 +you know, macros or whatever to make the map have these + +00:52:18.390 --> 00:52:23.160 +behaviors as we get further towards automation. + +00:52:23.160 --> 00:52:25.160 +Cool. + +00:52:25.160 --> 00:52:31.160 +So that's that should be pretty close to our time. + +00:52:31.160 --> 00:52:34.160 +Questions or just say goodbye. + +00:52:34.160 --> 00:52:38.160 +Yeah, so there's the I'm sorry we couldn't show it earlier. + +00:52:38.160 --> 00:52:41.160 +There is the battle board. + +00:52:41.160 --> 00:52:46.160 +And so this is used just to keep track of hit points. + +00:52:46.160 --> 00:52:50.540 +So with this example, battle board, dm battle board.el, + +00:52:50.540 --> 00:52:54.590 +there's there's a complete example of not only in a single + +00:52:54.590 --> 00:52:58.430 +file reaper, we filling out the tell the cells and the + +00:52:58.430 --> 00:53:03.720 +tiles, but then coming in and keeping the org mode file in + +00:53:03.720 --> 00:53:06.160 +sync with with clicks. + +00:53:06.160 --> 00:53:11.040 +So, and I can press the star key and set my damage to minus + +00:53:11.040 --> 00:53:14.160 +one and take the damage back off. + +00:53:14.160 --> 00:53:17.770 +I just haven't spent a lot of time building up fancy bind + +00:53:17.770 --> 00:53:21.620 +ings for this, you'll also find that the crew probably find + +00:53:21.620 --> 00:53:25.270 +how I figure out what was clicked on in the code hard, but + +00:53:25.270 --> 00:53:30.010 +if I just assign something recognizable for damage, and + +00:53:30.010 --> 00:53:33.160 +then come into. + +00:53:33.160 --> 00:53:39.030 +It will now have opened the org mode file behind the scenes + +00:53:39.030 --> 00:53:41.160 +because it's changing it. + +00:53:41.160 --> 00:53:48.340 +And we can then look at that file a little bit and + +00:53:48.340 --> 00:53:54.130 +hopefully that is on large enough you can kind of see there + +00:53:54.130 --> 00:53:57.160 +'s our 17 damage landed in armor. + +00:53:57.160 --> 00:54:04.200 +The logic that sits behind that to figure out the part of + +00:54:04.200 --> 00:54:10.160 +the screen is not necessarily our finest work. + +00:54:10.160 --> 00:54:12.960 +But it does work and that's one kind of stuff was used on + +00:54:12.960 --> 00:54:16.030 +the map a little bit too. We didn't really get to show that + +00:54:16.030 --> 00:54:18.970 +in the demo but as you're scrolling around there's like a + +00:54:18.970 --> 00:54:22.160 +highlighter that that, you know, we were drawing on. + +00:54:22.160 --> 00:54:26.160 +Oh sure, show you which square you've got selected. + +00:54:26.160 --> 00:54:30.300 +We were having trouble with that code. Initially, and we + +00:54:30.300 --> 00:54:33.160 +were sometimes revealing the wrong. + +00:54:33.160 --> 00:54:38.160 +Okay. + +00:54:38.160 --> 00:54:41.320 +And I don't know how we're set for time but I just saw a + +00:54:41.320 --> 00:54:45.240 +message from Trixie that she could jump on if we want her. + +00:54:45.240 --> 00:54:48.290 +Oh, that would be amazing. Yeah, go ahead and invite her in + +00:54:48.290 --> 00:54:51.160 +I'll just cut to the scene as soon as she's in. + +00:54:51.160 --> 00:54:54.160 +I think. + +00:54:54.160 --> 00:54:58.080 +Yeah, so we're reaching the ask me anything portion of the + +00:54:58.080 --> 00:55:01.760 +program here with what, with what time we have left for + +00:55:01.760 --> 00:55:03.160 +your questions. + +00:55:03.160 --> 00:55:09.170 +Please correct me if we're still like 10 minutes, you know, + +00:55:09.170 --> 00:55:15.450 +if we're, if we're more than like 15 to 20 minutes from our + +00:55:15.450 --> 00:55:20.560 +time but I suspect we've left way left way less than that + +00:55:20.560 --> 00:55:25.160 +and out of respect for all the other presenters. + +00:55:25.160 --> 00:55:29.160 +I don't want to close that actually. + +00:55:29.160 --> 00:55:33.060 +I think I may have found an old version of my slides that + +00:55:33.060 --> 00:55:35.160 +can have some good stuff. + +00:55:35.160 --> 00:55:40.220 +It's been an event for a couple of weeks here I had a break + +00:55:40.220 --> 00:55:45.190 +in and my somebody got into our bank accounts and nasty + +00:55:45.190 --> 00:55:51.160 +business, just a lot going on over, over this whole year I think. + +00:55:51.160 --> 00:55:54.160 +Any more questions to share. + +00:55:54.160 --> 00:56:02.240 +Sure. So, I think there was at least one we deferred a + +00:56:02.240 --> 00:56:06.160 +little bit with the game is + +00:56:06.160 --> 00:56:08.990 +always eight characters that can be divided right that's so + +00:56:08.990 --> 00:56:11.660 +always eight characters that can be divided between the + +00:56:11.660 --> 00:56:14.540 +party is the classic formula, it actually works pretty well + +00:56:14.540 --> 00:56:16.160 +for a conversational group. + +00:56:16.160 --> 00:56:18.810 +I think the idea that role playing games are about talking + +00:56:18.810 --> 00:56:21.330 +to each other and being good at them is about taking + +00:56:21.330 --> 00:56:23.770 +excellent notes. So, when you're sitting around with a + +00:56:23.770 --> 00:56:26.070 +group of people and you're going to have to wait for them + +00:56:26.070 --> 00:56:29.410 +while they dig through their notes and listen to all of the + +00:56:29.410 --> 00:56:33.160 +things they find interesting to say, and try to reach an + +00:56:33.160 --> 00:56:35.160 +imaginative place that you can stay together. + +00:56:35.160 --> 00:56:38.800 +And when you're doing all that and working in dice and + +00:56:38.800 --> 00:56:43.250 +remembering the rules. It's actually a complicated activity, + +00:56:43.250 --> 00:56:47.340 +I liken it more to a bridge game, then to like, you know, + +00:56:47.340 --> 00:56:51.310 +part cheesy or perhaps even like risk or access and allies + +00:56:51.310 --> 00:56:55.620 +or other games that have have definitely the strategy to + +00:56:55.620 --> 00:56:57.160 +them but I don't. + +00:56:57.160 --> 00:57:01.160 +Erik, your thoughts. + +00:57:02.160 --> 00:57:05.160 +I think that's fair. + +00:57:05.160 --> 00:57:08.880 +You know yes definitely. The, the tradition is to always + +00:57:08.880 --> 00:57:12.600 +have eight characters in the party, and, you know, one of + +00:57:12.600 --> 00:57:16.320 +the great things about dungeon is that everybody who writes + +00:57:16.320 --> 00:57:19.730 +their own dungeon gets to write their own rules, and is + +00:57:19.730 --> 00:57:22.160 +free to change whatever you want. + +00:57:22.160 --> 00:57:26.700 +I've definitely seen people try to take on challenging that + +00:57:26.700 --> 00:57:30.160 +always eight characters in a party thing. + +00:57:30.160 --> 00:57:33.460 +I've seen people take approaches like every player gets two + +00:57:33.460 --> 00:57:36.570 +characters and then you can have a party ranging from two + +00:57:36.570 --> 00:57:40.130 +to 10, or there's always going to be 10 or there's, you + +00:57:40.130 --> 00:57:43.340 +know, this or that or people have tried stuff, and none of + +00:57:43.340 --> 00:57:47.170 +it has really worked out very satisfactorily we always seem + +00:57:47.170 --> 00:57:50.160 +to keep coming back to our party of eight. + +00:57:50.160 --> 00:57:55.710 +It's, it's one of the things that dungeon that you can't + +00:57:55.710 --> 00:57:59.290 +change when you write your own dungeon. And that's the + +00:57:59.290 --> 00:58:03.900 +reason it's so complicated as a, as a software project why + +00:58:03.900 --> 00:58:08.640 +it's taken us decades, because trying to model the data for + +00:58:08.640 --> 00:58:13.820 +example or really any attempt, quantify it in specific + +00:58:13.820 --> 00:58:16.160 +terms always falls to examples. + +00:58:16.160 --> 00:58:20.740 +You know dungeons usually have elves, elves, dwarves and + +00:58:20.740 --> 00:58:25.160 +humans. They have priests, wizards and warriors. + +00:58:25.160 --> 00:58:29.330 +They have eight characters in the party. The Balrogs are + +00:58:29.330 --> 00:58:34.160 +particularly nasty and live in a room of some specific shape. + +00:58:34.160 --> 00:58:57.160 +And they have spoilers. + +00:58:57.160 --> 00:59:00.900 +So let's touch on special power real quick since that's one + +00:59:00.900 --> 00:59:04.820 +of the things that is kind of unique to dungeon. And one of + +00:59:04.820 --> 00:59:08.710 +the things that is the biggest challenge to us and trying + +00:59:08.710 --> 00:59:12.160 +to code a system like this for automated play. + +00:59:12.160 --> 00:59:15.680 +And that's that every character gets a unique special power + +00:59:15.680 --> 00:59:19.300 +and traditionally you negotiate your special power with the + +00:59:19.300 --> 00:59:22.600 +dungeon master when you create your character, and + +00:59:22.600 --> 00:59:25.970 +occasionally throughout the course of the characters life + +00:59:25.970 --> 00:59:29.160 +their special power might change due to game circumstances, + +00:59:29.160 --> 00:59:34.160 +usually it improves but sometimes not. + +00:59:34.160 --> 00:59:37.180 +So those are the most fun conversations right sometimes we + +00:59:37.180 --> 00:59:39.820 +have fun gaming sessions where we barely get all the + +00:59:39.820 --> 00:59:42.800 +characters created and started, because we get off into + +00:59:42.800 --> 00:59:45.780 +arguing about the special powers no Zelda special powers + +00:59:45.780 --> 00:59:49.160 +obviously the candle Come on. + +00:59:49.160 --> 00:59:54.160 +Also that was like, not so. + +00:59:54.160 --> 01:00:02.160 +I still have my t shirt. Hey, there she is. Let's cut scene. + +01:00:02.160 --> 01:00:05.890 +I'm going to be working with fun filters today, because + +01:00:05.890 --> 01:00:12.250 +that's what we got going on over here. All right, I'm going + +01:00:12.250 --> 01:00:19.160 +to recut everybody hang on tight. + +01:00:19.160 --> 01:00:21.160 +All right, there's Erik. + +01:00:21.160 --> 01:00:24.160 +This is going to be Erik for a second home. + +01:00:24.160 --> 01:00:27.680 +No worries. And welcome to that welcome to the stream. Trix + +01:00:27.680 --> 01:00:29.160 +ie horror. + +01:00:29.160 --> 01:00:33.410 +Who is one of our project team members somebody who's + +01:00:33.410 --> 01:00:37.160 +learning Emacs as part of the project, and. + +01:00:37.160 --> 01:00:42.690 +Yeah, I particularly wanted to invite you on to talk about + +01:00:42.690 --> 01:00:47.700 +your experience learning Emacs I think you have run into + +01:00:47.700 --> 01:00:52.900 +places where it's a pain in the butt to learn Emacs and that + +01:00:52.900 --> 01:00:56.160 +this is a safe space to talk about that. + +01:00:56.160 --> 01:01:02.160 +I'll jump in by saying the Emacs cheat sheet. + +01:01:02.160 --> 01:01:07.160 +I think it's the one that can do puts out is a lifesaver. + +01:01:07.160 --> 01:01:12.030 +I think there's a little bit of a vocabulary disconnect, + +01:01:12.030 --> 01:01:16.050 +like, and this actually kind of comes up a lot in + +01:01:16.050 --> 01:01:21.080 +conversation with Corwin and Erik and I, but coffee paste + +01:01:21.080 --> 01:01:25.160 +versus what yank and w, whatever w killing yank. + +01:01:25.160 --> 01:01:28.160 +Yeah. + +01:01:28.160 --> 01:01:31.380 +Why would you even do that to us right where where were you + +01:01:31.380 --> 01:01:34.810 +when zeros park happened. No, I understand that makes sense. + +01:01:34.810 --> 01:01:39.160 +What else. + +01:01:39.160 --> 01:01:41.920 +I mean you don't have to sit here and rag on Emacs but we're + +01:01:41.920 --> 01:01:44.160 +here for that. That's all I'm saying. + +01:01:44.160 --> 01:01:48.250 +I think that's the biggest thing, like, I'm, I'm used to, + +01:01:48.250 --> 01:01:52.170 +like, just kind of the very binary nature of like, nope, + +01:01:52.170 --> 01:01:55.160 +that didn't work, try something else. + +01:01:55.160 --> 01:02:00.680 +So, as long as you're willing to try other stuff like Emacs + +01:02:00.680 --> 01:02:07.160 +will be fine. So, it's a tough cookie it can take it. + +01:02:07.160 --> 01:02:14.430 +The only thing that happens is you have to install it + +01:02:14.430 --> 01:02:21.160 +through your file that you hopefully have a backup of. + +01:02:21.160 --> 01:02:25.160 +Um, are there more questions in the hopper. + +01:02:25.160 --> 01:02:29.500 +If anybody does have any questions up there for hope for + +01:02:29.500 --> 01:02:34.210 +Erik or I so just to summarize, I've known Erik, I've known + +01:02:34.210 --> 01:02:38.640 +Erik, my whole life, I've known hope around a decade we + +01:02:38.640 --> 01:02:41.760 +work together on a project for, for a science fiction + +01:02:41.760 --> 01:02:42.160 +convention. + +01:02:42.160 --> 01:02:45.160 +Yeah. + +01:02:45.160 --> 01:02:49.360 +I've written a few conventions and then I also helped with + +01:02:49.360 --> 01:02:53.710 +I just wrote a bio. So this should like all theoretically + +01:02:53.710 --> 01:02:55.160 +be in my head right. + +01:02:55.160 --> 01:03:01.660 +I want to refer to my own bio project coordinator for + +01:03:01.660 --> 01:03:03.160 +dungeon mode. + +01:03:03.160 --> 01:03:07.160 +I was a bird assistant good credit. + +01:03:07.160 --> 01:03:13.160 +And family friend to the Bruce. Oh, + +01:03:13.160 --> 01:03:17.870 +yeah, we've gotten a ton of support from a lot of our + +01:03:17.870 --> 01:03:21.720 +lifelong friends people, and also people that we just met. + +01:03:21.720 --> 01:03:24.160 +Maybe that's a that's a great segue. + +01:03:24.160 --> 01:03:26.900 +Do throw your questions in there I'm going to fill for just + +01:03:26.900 --> 01:03:29.160 +a second and then we'll probably cut away. + +01:03:29.160 --> 01:03:35.970 +But, I'm thinking thematically actually, that's that's too + +01:03:35.970 --> 01:03:38.810 +abrupt so we need to go around the room, Erik you had hours + +01:03:38.810 --> 01:03:41.480 +and hours to rehearse hope kind of jumped in on the last + +01:03:41.480 --> 01:03:42.160 +minute. + +01:03:42.160 --> 01:03:47.050 +So let's let's, is it okay to pick on you or do you want me + +01:03:47.050 --> 01:03:48.160 +to get mine. + +01:03:48.160 --> 01:03:51.490 +What are you asking me to do what do you what do you want + +01:03:51.490 --> 01:03:55.280 +people to take away from this talk, you know, as we think + +01:03:55.280 --> 01:03:59.010 +about dungeon and sharing it's sharing its tradition, as we + +01:03:59.010 --> 01:04:03.160 +think about learning Emacs, and like making that awesome. + +01:04:03.160 --> 01:04:08.210 +And just, you know, generally what's up with free software + +01:04:08.210 --> 01:04:13.160 +and trying to make computers a tool to make people freer. + +01:04:13.160 --> 01:04:18.160 +Yeah, I'm going to ask like five questions. Yeah, so just + +01:04:18.160 --> 01:04:19.160 +jump in. + +01:04:19.160 --> 01:04:24.160 +I think that dungeon is a lot of fun. And, you know, I'm, I + +01:04:24.160 --> 01:04:29.260 +'ve played many commercial role playing games over the years + +01:04:29.260 --> 01:04:32.160 +, and I've enjoyed all of them. + +01:04:32.160 --> 01:04:36.500 +But there's very few of them that I've had as many belly + +01:04:36.500 --> 01:04:41.410 +laughs and as much just joy, playing as from dungeon. And I + +01:04:41.410 --> 01:04:44.500 +think, you know, the magic of it is, you know, like any + +01:04:44.500 --> 01:04:47.400 +game like the real magic is the people you play with and + +01:04:47.400 --> 01:04:50.160 +having fun with your friends. + +01:04:50.160 --> 01:04:53.780 +And what I would hope that people can take away from is + +01:04:53.780 --> 01:04:57.900 +that dungeon has the ability to be that magical thing. And + +01:04:57.900 --> 01:05:01.870 +hopefully we can get our project to the point where it gets + +01:05:01.870 --> 01:05:06.160 +out of the way and lets you have that fun with your friends. + +01:05:06.160 --> 01:05:12.180 +So I think there's a lot of work to do we could use some + +01:05:12.180 --> 01:05:19.330 +help. So if you're interested in having fun. Come help us + +01:05:19.330 --> 01:05:22.160 +build this fun tool. + +01:05:22.160 --> 01:05:25.370 +Alright so I just got the call that we've got just about + +01:05:25.370 --> 01:05:29.160 +two to three minutes left, and we should start our wrap up. + +01:05:29.160 --> 01:05:31.160 +Wrap up. + +01:05:31.160 --> 01:05:35.090 +Yeah, so I'll see if I can charge the room with some energy + +01:05:35.090 --> 01:05:38.160 +unless you're ready to have that at home. + +01:05:38.160 --> 01:05:43.160 +Here, here's, here's what I want people to take away. + +01:05:43.160 --> 01:05:47.160 +Were you like, No, okay. + +01:05:47.160 --> 01:05:54.160 +I'm not getting your audio hope. + +01:05:54.160 --> 01:05:57.160 +So my end, maybe I just need to speak up. + +01:05:57.160 --> 01:06:01.160 +Is this better, let me know when I'm coming through. + +01:06:01.160 --> 01:06:05.160 +Okay, cool. + +01:06:05.160 --> 01:06:07.160 +I was gonna say go ahead. + +01:06:07.160 --> 01:06:11.240 +I didn't. Okay. I mean I don't know that I know what I want + +01:06:11.240 --> 01:06:15.290 +to say either except a whole ton of thank you. So, I will, + +01:06:15.290 --> 01:06:19.160 +I will save those for the, for the literal end here. + +01:06:19.160 --> 01:06:26.630 +And instead, what I would say is, as we build our amazing + +01:06:26.630 --> 01:06:32.160 +innovations and explore our ideas in Emacs. + +01:06:32.160 --> 01:06:34.980 +We are fighting our own ego for the will to get them done, + +01:06:34.980 --> 01:06:37.740 +it's hard and we're not sure if they're going to be a good + +01:06:37.740 --> 01:06:39.960 +idea and will it excite people and part of our + +01:06:39.960 --> 01:06:42.780 +responsibility is to excite people so that they can feel + +01:06:42.780 --> 01:06:44.160 +good about liking them. + +01:06:44.160 --> 01:06:47.930 +If you come off and you're like hey this is a terrible idea + +01:06:47.930 --> 01:06:51.470 +it's really hard to be like, no I love that idea works + +01:06:51.470 --> 01:06:55.160 +theatrically but in larger groups may not scale. + +01:06:55.160 --> 01:07:00.160 +So that's a crucible for ideas and a crucible for teams. + +01:07:00.160 --> 01:07:05.280 +The first part is definitely healthy. The second part, + +01:07:05.280 --> 01:07:10.070 +there's a lot we can we can do, you know, having a front + +01:07:10.070 --> 01:07:15.160 +and and and good faith conversations on that subject. + +01:07:15.160 --> 01:07:19.600 +Anybody else want to want to wade in after that sorry that + +01:07:19.600 --> 01:07:23.160 +that was more of a calm down than a fire out. + +01:07:23.160 --> 01:07:25.160 +Okay. + +01:07:25.160 --> 01:07:27.160 +I think. + +01:07:27.160 --> 01:07:32.180 +The first part of this but I think we would be remiss not + +01:07:32.180 --> 01:07:35.860 +to highlight org mode, a little bit. Yeah, like, that's, + +01:07:35.860 --> 01:07:39.280 +that's our bread and butter. Yeah, our whole project is + +01:07:39.280 --> 01:07:40.160 +built on org mode. + +01:07:40.160 --> 01:07:44.580 +Right. And I'm just really excited because, like, I have, I + +01:07:44.580 --> 01:07:48.670 +don't have ADHD, but I have like something similar. And so, + +01:07:48.670 --> 01:07:52.230 +like to know that there's something that exists, that is + +01:07:52.230 --> 01:07:54.160 +like purely hierarchical. + +01:07:54.160 --> 01:07:59.170 +It's incredible, like I can just run a report, basically + +01:07:59.170 --> 01:08:03.550 +and get all of my like to do lists that I didn't have to + +01:08:03.550 --> 01:08:06.160 +put in one specific place. + +01:08:06.160 --> 01:08:13.190 +And, like, that's kind of been a complex issue for me of + +01:08:13.190 --> 01:08:16.680 +like, okay, I have all these to do lists, like in Google + +01:08:16.680 --> 01:08:19.160 +Keep or whatever like what do I do with them now. + +01:08:19.160 --> 01:08:24.160 +So being able to like pull them into one list. + +01:08:24.160 --> 01:08:27.160 +And then recycle through them is really incredible. + +01:08:27.160 --> 01:08:35.500 +And I think taking dungeon and like using it to like + +01:08:35.500 --> 01:08:40.160 +combining it with org mode basically really. + +01:08:40.160 --> 01:08:44.210 +I'm excited about it and I'm excited to see like what it + +01:08:44.210 --> 01:08:46.160 +can do for player groups. + +01:08:46.160 --> 01:08:49.190 +Especially now that quarantine like I was excited about + +01:08:49.190 --> 01:08:50.160 +dungeon mode. + +01:08:50.160 --> 01:08:54.040 +Before the pandemic and now like I'm only more enthusiastic. + +01:08:54.040 --> 01:08:57.940 +So, yeah, definitely the pandemic has been the greatest + +01:08:57.940 --> 01:09:01.720 +thing that happened to this game, terrible terrible as it + +01:09:01.720 --> 01:09:05.090 +is to say that it, if we needed a hobby and it turns out + +01:09:05.090 --> 01:09:11.160 +role playing games are are really good. + +01:09:11.160 --> 01:09:16.610 +So, so I think that's probably about our time. I'm guessing + +01:09:16.610 --> 01:09:21.160 +that's my call. And thank you very much. + +01:09:21.160 --> 01:09:24.970 +Thank you everybody will be around for discord and stuff + +01:09:24.970 --> 01:09:27.160 +later come catch us if you want to talk. + +01:09:27.160 --> 01:09:30.160 +Okay. diff --git a/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt new file mode 100644 index 00000000..183ea9f6 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt @@ -0,0 +1,526 @@ +WEBVTT + +00:00:00.880 --> 00:00:03.760 +Hello and welcome to this talk. + +00:00:03.760 --> 00:00:06.080 +The title of this talk is a tour of vterm, + +00:00:06.080 --> 00:00:08.559 +a fast and fully featured terminal emulator + +00:00:08.559 --> 00:00:10.800 +inside GNU Emacs. + +00:00:10.801 --> 00:00:12.719 +So let's try to understand what we mean + +00:00:12.720 --> 00:00:14.559 +with "fast and fully featured." + +00:00:14.559 --> 00:00:16.800 +To do that we'll compare vterm + +00:00:16.801 --> 00:00:20.400 +with the packages which are built in Emacs, + +00:00:20.401 --> 00:00:22.400 +mainly, term. + +00:00:22.400 --> 00:00:25.039 +So let's jump into the vterm. + +00:00:25.040 --> 00:00:26.720 +So this is a vterm buffer + +00:00:26.720 --> 00:00:29.439 +and this is a ansi-term buffer. + +00:00:29.440 --> 00:00:30.720 +What I'm going to do now is + +00:00:30.721 --> 00:00:32.160 +first I'm going to prove to you + +00:00:32.160 --> 00:00:34.160 +what we mean by fast. + +00:00:34.161 --> 00:00:37.440 +To do that, let me open a large file display on screen-- + +00:00:37.441 --> 00:00:40.239 +a large file, this is about one megabyte of data-- + +00:00:40.239 --> 00:00:41.840 +and let me time that. + +00:00:41.841 --> 00:00:45.200 +It takes about 0.6 seconds with vterm. + +00:00:45.201 --> 00:00:48.320 +Let's do the same with with ansi-term. + +00:00:48.321 --> 00:00:51.520 +Well, we already see the difference. + +00:00:51.520 --> 00:00:53.039 +So I will use this time to tell you + +00:00:53.039 --> 00:00:56.320 +what's different, and what is vterm exactly. + +00:00:56.321 --> 00:00:58.399 +vterm is a terminal emulator + +00:00:58.400 --> 00:01:00.800 +built on top of an external library. + +00:01:00.801 --> 00:01:02.719 +The library is called libvterm, + +00:01:02.719 --> 00:01:05.519 +and is the same library used by Newton + +00:01:05.519 --> 00:01:07.200 +for their own terminal emulator. + +00:01:07.200 --> 00:01:10.799 +It's a C library, and this is what gives us + +00:01:10.799 --> 00:01:15.119 +a lot of good features. First, the speed. + +00:01:15.119 --> 00:01:17.119 +Time spent here, 0.6, is essentially + +00:01:17.120 --> 00:01:18.479 +the time that it takes to: + +00:01:18.479 --> 00:01:22.240 +1. convert the Emacs representation of text + +00:01:22.241 --> 00:01:25.040 +into the vterm representation of what is a string, + +00:01:25.041 --> 00:01:27.360 +and 2., into actually displaying that, + +00:01:27.361 --> 00:01:29.520 +and that can take time + +00:01:29.520 --> 00:01:32.240 +if there's fontification involved. + +00:01:32.241 --> 00:01:34.240 +So these are the 0.6 seconds there. + +00:01:34.240 --> 00:01:38.479 +As we say, in ansi-term, that's much more time. + +00:01:38.480 --> 00:01:40.720 +It's much slower. So the terminal will feel + +00:01:40.721 --> 00:01:42.880 +much snappier, much faster. + +00:01:42.880 --> 00:01:46.720 +But that's not the main benefit or the only benefit + +00:01:46.721 --> 00:01:49.759 +of using this external library vterm. + +00:01:49.760 --> 00:01:53.040 +The second big benefit is that + +00:01:53.041 --> 00:01:56.560 +vterm has support for all the escape codes + +00:01:56.560 --> 00:01:58.320 +that xterm has support for, + +00:01:58.321 --> 00:02:01.119 +so vterm is essentially as running xterm + +00:02:01.119 --> 00:02:03.600 +inside an Emacs buffer. So let's see that. + +00:02:03.600 --> 00:02:05.759 +For example, let's start by looking + +00:02:05.760 --> 00:02:08.239 +at the support for colors. + +00:02:08.239 --> 00:02:10.319 +We have support for all the colors out of the box. + +00:02:10.320 --> 00:02:11.840 +We don't have to do anything. + +00:02:11.840 --> 00:02:14.720 +And if we did the same here, well, + +00:02:14.721 --> 00:02:16.800 +we have only 20 colors. + +00:02:16.801 --> 00:02:18.239 +There's a way to get all the colors, + +00:02:18.240 --> 00:02:19.680 +but it's much more involved. + +00:02:19.680 --> 00:02:23.040 +But this is not where vterm shines. + +00:02:23.040 --> 00:02:27.200 +We can run all the commands that we want. + +00:02:27.200 --> 00:02:31.440 +htop, ncdu, everything runs here. + +00:02:31.441 --> 00:02:35.519 +Also this title, it's a fairly complicated + +00:02:35.520 --> 00:02:37.920 +manipulation of the window + +00:02:37.921 --> 00:02:40.879 +and it will not work here. + +00:02:40.879 --> 00:02:42.000 +It just doesn't work actually. + +00:02:42.001 --> 00:02:46.160 +Now the terminal is probably messed up. Yes. + +00:02:46.161 --> 00:02:48.400 +So using this external library + +00:02:48.400 --> 00:02:50.959 +removes the burden from the developers + +00:02:50.959 --> 00:02:52.319 +of having to implement support + +00:02:52.320 --> 00:02:53.280 +for all the escape codes. + +00:02:53.281 --> 00:02:55.360 +We just use those. + +00:02:55.360 --> 00:02:58.480 +So in many ways, running vterm + +00:02:58.480 --> 00:03:01.760 +is running xterm inside Emacs, + +00:03:01.760 --> 00:03:04.159 +but it's better than that because, + +00:03:04.160 --> 00:03:05.840 +since this is an Emacs buffer, + +00:03:05.840 --> 00:03:09.760 +we can enjoy a lot of features from Emacs + +00:03:09.760 --> 00:03:11.360 +as well as a tighter integration + +00:03:11.361 --> 00:03:13.200 +with Emacs itself. + +00:03:13.200 --> 00:03:15.840 +For example, as you see here, + +00:03:15.841 --> 00:03:20.239 +the title of my buffer is from the directory I'm in. + +00:03:20.240 --> 00:03:21.760 +So let's go to my tmp. + +00:03:21.760 --> 00:03:23.440 +The title will change. + +00:03:23.441 --> 00:03:25.920 +So there's information being exchanged + +00:03:25.921 --> 00:03:28.000 +between vterm and Emacs. + +00:03:28.000 --> 00:03:30.000 +And of course, the title is not the only place + +00:03:30.001 --> 00:03:32.000 +where information is exchanged. + +00:03:32.000 --> 00:03:35.920 +I can find a file and I will be in the directory + +00:03:35.920 --> 00:03:37.680 +where my terminal is. + +00:03:37.681 --> 00:03:40.000 +This feature is also available in ansi-term, + +00:03:40.000 --> 00:03:41.360 +and it works also on vterm, + +00:03:41.361 --> 00:03:43.440 +and it follows me. So if I go to tmp, + +00:03:43.441 --> 00:03:44.720 +I'll get the tmp. + +00:03:44.720 --> 00:03:47.120 +If I ssh to a remote server, + +00:03:47.121 --> 00:03:50.239 +it will work also on remote servers as well, + +00:03:50.240 --> 00:03:53.920 +which is a very nice way to edit files remotely + +00:03:53.920 --> 00:03:55.599 +while we're working on a shell. + +00:03:55.600 --> 00:03:59.280 +And second, while vterm is not an Elisp interpreter + +00:03:59.281 --> 00:04:01.200 +like eshell, what we can do is + +00:04:01.201 --> 00:04:04.720 +we can still run Emacs functions. + +00:04:04.721 --> 00:04:06.080 +So for example... + +00:04:06.081 --> 00:04:08.000 +that requires some configuration. + +00:04:08.001 --> 00:04:11.599 +vterm command (message "hi") + +00:04:11.600 --> 00:04:13.120 +as you see there's a "hi" here. + +00:04:13.121 --> 00:04:14.959 +So what I'm doing is I'm executing + +00:04:14.960 --> 00:04:16.239 +the Elisp function hi. + +00:04:16.239 --> 00:04:18.959 +I can drop that and turn it around, + +00:04:18.960 --> 00:04:21.600 +hash function to run Elisp functions. + +00:04:21.601 --> 00:04:24.880 +Or another one, find-file, same. + +00:04:24.880 --> 00:04:27.360 +We call this feature "message passing," + +00:04:27.361 --> 00:04:30.000 +and it requires some configuration + +00:04:30.001 --> 00:04:32.000 +on the Emacs side as well as in the shell side. + +00:04:32.000 --> 00:04:33.440 +It's important to stress + +00:04:33.441 --> 00:04:35.360 +what's the nature of vterm. + +00:04:35.360 --> 00:04:37.919 +For instance, every time I'm sending a key binding, + +00:04:37.920 --> 00:04:40.000 +it's not immediately clear if my intention is + +00:04:40.001 --> 00:04:41.840 +to send it to the shell or to Emacs. + +00:04:41.841 --> 00:04:44.320 +So vterm implements some reasonable defaults, + +00:04:44.320 --> 00:04:46.800 +but at the moment it's mainly packaged + +00:04:46.800 --> 00:04:49.120 +to display characters on a screen. + +00:04:49.120 --> 00:04:50.720 +So for example, if you're using evil, + +00:04:50.721 --> 00:04:52.639 +the editing commands in evil + +00:04:52.640 --> 00:04:54.080 +will not work immediately. + +00:04:54.081 --> 00:04:55.759 +There's some work to be done + +00:04:55.759 --> 00:04:58.160 +and integration can be improved on that side, + +00:04:58.161 --> 00:05:00.240 +but sometimes we really want this to behave + +00:05:00.240 --> 00:05:02.240 +exactly like a Emacs buffer. + +00:05:02.240 --> 00:05:03.680 +We want to be able to search. + +00:05:03.681 --> 00:05:06.639 +If I try to get it to search, + +00:05:06.640 --> 00:05:07.280 +it will not work. + +00:05:07.281 --> 00:05:08.400 +I will send it to the shell. + +00:05:08.401 --> 00:05:11.919 +So to do that, we enabled vterm copy mode. + +00:05:11.920 --> 00:05:14.720 +As you see, copy mode, and now this buffer + +00:05:14.721 --> 00:05:17.039 +is essentially a fundamental buffer. + +00:05:17.039 --> 00:05:21.120 +I can move around. I can search. + +00:05:21.120 --> 00:05:25.520 +So it must have... I can do everything I want. + +00:05:25.521 --> 00:05:26.479 +And there are additional features. + +00:05:26.480 --> 00:05:30.560 +For example, I can jump around all the prompts. + +00:05:30.561 --> 00:05:32.639 +I find this extremely useful, + +00:05:32.639 --> 00:05:35.039 +because I can copy updates from my programs. + +00:05:35.040 --> 00:05:38.320 +What I always have to do is + +00:05:38.321 --> 00:05:41.520 +I have to Google some errors. + +00:05:41.521 --> 00:05:43.120 +So what I do is I select that + +00:05:43.120 --> 00:05:45.120 +and I have my keybinding in Emacs conf, + +00:05:45.121 --> 00:05:48.479 +and I'm Googling what I have to Google. + +00:05:48.480 --> 00:05:51.120 +So this is very nice and if I... + +00:05:51.121 --> 00:05:52.639 +now that I have selected something, + +00:05:52.640 --> 00:05:53.840 +if I just press return, + +00:05:53.841 --> 00:05:56.400 +I will go back to my normal editing mode + +00:05:56.401 --> 00:06:00.160 +with the text copied, so I can paste it back. + +00:06:00.161 --> 00:06:02.720 +So it's a quick way to interact with copy + +00:06:02.721 --> 00:06:05.840 +and interact with the output of a buffer. + +00:06:05.841 --> 00:06:09.120 +So finally, let's discuss how to actually use vterm. + +00:06:09.121 --> 00:06:10.560 +Let's circle back, let's go, + +00:06:10.560 --> 00:06:12.400 +and let's look at the GitHub repo + +00:06:12.400 --> 00:06:14.000 +where development is happening. + +00:06:14.001 --> 00:06:15.520 +vterm is available in MELPA, + +00:06:15.520 --> 00:06:17.759 +but since it's leveraging the power + +00:06:17.760 --> 00:06:18.960 +of an external module, + +00:06:18.960 --> 00:06:20.479 +you must have Emacs compiled + +00:06:20.480 --> 00:06:22.000 +with support for modules, + +00:06:22.000 --> 00:06:25.600 +and many distros like Ubuntu, Debian, + +00:06:25.600 --> 00:06:26.880 +that's not there. So you have to + +00:06:26.881 --> 00:06:29.199 +get Emacs with support for modules: + +00:06:29.200 --> 00:06:31.360 +compiling or getting images somewhere else. + +00:06:31.361 --> 00:06:33.840 +And also, the first time you are going to use this, + +00:06:33.840 --> 00:06:38.960 +which works only on Mac or GNU Linux systems, + +00:06:38.961 --> 00:06:41.759 +Emacs will try to find and compile this module, + +00:06:41.759 --> 00:06:44.240 +so it's important. This requirement is important. + +00:06:44.241 --> 00:06:46.400 +If you're using Windows, well, + +00:06:46.401 --> 00:06:49.199 +it's not available and will not work. + +00:06:49.199 --> 00:06:53.440 +So to conclude, I want to just advertise this page. + +00:06:53.440 --> 00:06:56.240 +If you have problems, look at the issues + +00:06:56.240 --> 00:06:58.240 +and open an issue in case. + +00:06:58.241 --> 00:06:59.199 +We'll try to help you. + +00:06:59.200 --> 00:07:00.800 +We are very excited about vterm, + +00:07:00.800 --> 00:07:02.639 +and I think it's a transformative + +00:07:02.639 --> 00:07:10.319 +terminal experience inside GNU Emacs. diff --git a/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt new file mode 100644 index 00000000..c9477c2d --- /dev/null +++ b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt @@ -0,0 +1,385 @@ +WEBVTT + +00:00:01.520 --> 00:00:03.360 +okay I mean can you hear me yep I can + +00:00:03.360 --> 00:00:05.279 +hear you can you hear me + +00:00:05.279 --> 00:00:07.200 +yes perfect so gabrielle uh if you want + +00:00:07.200 --> 00:00:08.480 +to start answering questions and by the + +00:00:08.480 --> 00:00:09.280 +way people for the + +00:00:09.280 --> 00:00:10.880 +for the stream I'm actually on a phone + +00:00:10.880 --> 00:00:12.400 +call right now so the quality might be a + +00:00:12.400 --> 00:00:13.360 +little bad + +00:00:13.360 --> 00:00:17.199 +but we're trying our best + +00:00:17.199 --> 00:00:20.480 +hello uh thanks for attending my talk + +00:00:20.480 --> 00:00:22.800 +I see four questions on the user product + +00:00:22.800 --> 00:00:24.000 +I'm going to answer + +00:00:24.000 --> 00:00:27.039 +them okay so the first one is + +00:00:27.039 --> 00:00:29.039 +can you put your test space from up + +00:00:29.039 --> 00:00:31.119 +somewhere uh yes they're very simple + +00:00:31.119 --> 00:00:31.840 +skips + +00:00:31.840 --> 00:00:33.680 +uh I'll find a way to distribute them + +00:00:33.680 --> 00:00:35.520 +somehow + +00:00:35.520 --> 00:00:37.600 +that's so that's an easy one the second + +00:00:37.600 --> 00:00:38.800 +one is more difficult it's more + +00:00:38.800 --> 00:00:40.559 +difficult it's the differences between + +00:00:40.559 --> 00:00:44.320 +e shell and v term so I did very basic + +00:00:44.320 --> 00:00:47.360 +level the main difference is that v + +00:00:47.360 --> 00:00:50.399 +term is implemented with + +00:00:50.399 --> 00:00:52.800 +as a bridge between Emacs and an + +00:00:52.800 --> 00:00:53.840 +external library + +00:00:53.840 --> 00:00:56.079 +which means that most of the code base + +00:00:56.079 --> 00:00:57.039 +is actually c + +00:00:57.039 --> 00:01:00.320 +it's not easy uh this is is a critical + +00:01:00.320 --> 00:01:01.280 +difference + +00:01:01.280 --> 00:01:03.760 +uh in terms of performance in terms of + +00:01:03.760 --> 00:01:04.320 +speed + +00:01:04.320 --> 00:01:06.960 +and all the other uh features that we + +00:01:06.960 --> 00:01:07.360 +can + +00:01:07.360 --> 00:01:10.400 +inherit from this library so vterm + +00:01:10.400 --> 00:01:13.119 +is similar to a real terminal it's not + +00:01:13.119 --> 00:01:13.600 +as + +00:01:13.600 --> 00:01:15.840 +uh it's not like a shell it's a real + +00:01:15.840 --> 00:01:17.040 +terminal emulator + +00:01:17.040 --> 00:01:19.600 +that can actually uh display but + +00:01:19.600 --> 00:01:20.479 +manipulate the + +00:01:20.479 --> 00:01:22.960 +terminal in pretty much any way whereas + +00:01:22.960 --> 00:01:23.520 +isha + +00:01:23.520 --> 00:01:25.759 +is simply a way to interact with your + +00:01:25.759 --> 00:01:26.640 +system + +00:01:26.640 --> 00:01:29.680 +in the data page we have a more + +00:01:29.680 --> 00:01:31.840 +complete discussion about this topic and + +00:01:31.840 --> 00:01:33.520 +where we compare v-terms with e-shell + +00:01:33.520 --> 00:01:34.799 +with shell with nc + +00:01:34.799 --> 00:01:38.720 +term as well I think so + +00:01:38.720 --> 00:01:40.640 +I think just to conclude this I think + +00:01:40.640 --> 00:01:42.000 +eshell and v term + +00:01:42.000 --> 00:01:44.079 +are somehow orthogonal in the sense that + +00:01:44.079 --> 00:01:45.280 +v3 is before a + +00:01:45.280 --> 00:01:46.880 +full complete terminal experience + +00:01:46.880 --> 00:01:49.439 +whereas isil is more for specific tasks + +00:01:49.439 --> 00:01:50.240 +of this + +00:01:50.240 --> 00:01:53.280 +uh which are not like terminal uh + +00:01:53.280 --> 00:01:55.759 +interfaces you know like page stock this + +00:01:55.759 --> 00:01:56.799 +kind of stuff + +00:01:56.799 --> 00:01:59.759 +uh the next question is uh is there a + +00:01:59.759 --> 00:02:01.200 +plan to avoid compilation of the initial + +00:02:01.200 --> 00:02:02.560 +completion steps + +00:02:02.560 --> 00:02:05.759 +so since the term is based on again + +00:02:05.759 --> 00:02:08.000 +on an external module we need to combine + +00:02:08.000 --> 00:02:08.800 +this module + +00:02:08.800 --> 00:02:10.800 +and we're using the dynamic module + +00:02:10.800 --> 00:02:11.920 +system to + +00:02:11.920 --> 00:02:13.920 +be able to interface with this module + +00:02:13.920 --> 00:02:16.239 +and this requires + +00:02:16.239 --> 00:02:18.879 +us to compile the module at least the + +00:02:18.879 --> 00:02:20.160 +very first time you start + +00:02:20.160 --> 00:02:23.920 +the I don't think we can do + +00:02:23.920 --> 00:02:26.720 +without that in the near future we need + +00:02:26.720 --> 00:02:28.480 +to compile this + +00:02:28.480 --> 00:02:31.599 +and we must there's no way around + +00:02:31.599 --> 00:02:33.360 +if we cannot simply distribute the + +00:02:33.360 --> 00:02:37.440 +module um + +00:02:37.440 --> 00:02:39.519 +if you want to think very long term + +00:02:39.519 --> 00:02:40.480 +maybe + +00:02:40.480 --> 00:02:42.959 +uh but I think there's no current plan + +00:02:42.959 --> 00:02:43.599 +to + +00:02:43.599 --> 00:02:45.760 +avoid the compilation as the very first + +00:02:45.760 --> 00:02:47.280 +step the first time you + +00:02:47.280 --> 00:02:50.400 +uh run vtor however all the subsequent + +00:02:50.400 --> 00:02:50.959 +times + +00:02:50.959 --> 00:02:54.720 +you will not have to compile peter um + +00:02:54.720 --> 00:02:57.840 +so for question four it's uh I have a + +00:02:57.840 --> 00:02:58.720 +nice looking problem + +00:02:58.720 --> 00:03:01.920 +thanks uh and if + +00:03:01.920 --> 00:03:04.159 +there's a git repo where you can see it + +00:03:04.159 --> 00:03:05.599 +or something like that + +00:03:05.599 --> 00:03:08.560 +so if you go to my github repo I have + +00:03:08.560 --> 00:03:09.760 +adobe files + +00:03:09.760 --> 00:03:12.560 +repo but look at that it's terrible it's + +00:03:12.560 --> 00:03:13.840 +super updated + +00:03:13.840 --> 00:03:16.800 +so I've been meaning to polish it for + +00:03:16.800 --> 00:03:17.519 +like years + +00:03:17.519 --> 00:03:20.080 +and I haven't got it so don't look at it + +00:03:20.080 --> 00:03:21.760 +my font is actually extremely simple + +00:03:21.760 --> 00:03:25.200 +I think it's the pure prompt from uh zsh + +00:03:25.200 --> 00:03:26.640 +or fish depending + +00:03:26.640 --> 00:03:28.799 +uh and I think I didn't do anything but + +00:03:28.799 --> 00:03:30.640 +like maybe tweaking the colors a little + +00:03:30.640 --> 00:03:31.360 +bit + +00:03:31.360 --> 00:03:33.280 +okay gabriel just sorry to interject if + +00:03:33.280 --> 00:03:35.519 +you could just take one more question + +00:03:35.519 --> 00:03:37.120 +yes the last question is already the + +00:03:37.120 --> 00:03:39.440 +answer which is uh will it work with + +00:03:39.440 --> 00:03:42.480 +e max terminal so minus and w and answer + +00:03:42.480 --> 00:03:44.480 +yes it works without any problem with + +00:03:44.480 --> 00:03:46.239 +imax terminal so you can run a terminal + +00:03:46.239 --> 00:03:47.760 +inside image inside of terminal + +00:03:47.760 --> 00:03:49.680 +and you can continue paying up as much + +00:03:49.680 --> 00:03:51.200 +as you want okay + +00:03:51.200 --> 00:03:53.920 +I think that's it explain the question + +00:03:53.920 --> 00:03:56.239 +oh sorry thank you + +00:03:56.239 --> 00:03:59.760 +thanks for attending this talk + +00:03:59.760 --> 00:04:01.519 +well thank you so much for giving it so + +00:04:01.519 --> 00:04:03.360 +I'm in back to you + +00:04:03.360 --> 00:04:07.280 +you are now unmuted thank you very much + +00:04:07.280 --> 00:04:09.519 +to gabrielle for the awesome talk and + +00:04:09.519 --> 00:04:11.200 +for taking live questions + +00:04:11.200 --> 00:04:14.319 +and also many thanks to leo for getting + +00:04:14.319 --> 00:04:15.200 +through to gabriel + +00:04:15.200 --> 00:04:18.720 +via phone in the face of gabriel having + +00:04:18.720 --> 00:04:20.720 +technical difficulties + +00:04:20.720 --> 00:04:24.160 +with using big blue button diff --git a/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt b/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt new file mode 100644 index 00000000..b3feac2d --- /dev/null +++ b/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt @@ -0,0 +1,859 @@ +WEBVTT + +00:00:10.480 --> 00:00:11.519 +hello relatives + +00:00:11.519 --> 00:00:15.040 +grant shangri is what they call me + +00:00:15.040 --> 00:00:18.960 +and all of you I gladly take your hand + +00:00:18.960 --> 00:00:22.160 +and shake it um + +00:00:22.160 --> 00:00:26.240 +greetings everyone + +00:00:26.240 --> 00:00:28.560 +today I'm going to talk about lakota + +00:00:28.560 --> 00:00:30.480 +language and Emacs and how + +00:00:30.480 --> 00:00:33.680 +free software and Emacs empowered me to + +00:00:33.680 --> 00:00:36.000 +write on the computer in the language of + +00:00:36.000 --> 00:00:39.520 +my ancestors + +00:00:39.520 --> 00:00:42.640 +um start off the look with the story of + +00:00:42.640 --> 00:00:45.760 +lakotiappi the lakota language + +00:00:45.760 --> 00:00:48.800 +the lakota dakota dialect area + +00:00:48.800 --> 00:00:52.160 +for those of you who you don't know + +00:00:52.160 --> 00:00:55.600 +the lakota dakota people are also known + +00:00:55.600 --> 00:00:56.840 +as the sioux + +00:00:56.840 --> 00:00:59.760 +and the tribes cover an + +00:00:59.760 --> 00:01:03.120 +area of roughly 10 us states and parts + +00:01:03.120 --> 00:01:05.199 +of canada and so this language is + +00:01:05.199 --> 00:01:08.479 +spoken over a wide range of of + +00:01:08.479 --> 00:01:11.520 +area + +00:01:11.520 --> 00:01:14.400 +however the us government policy + +00:01:14.400 --> 00:01:16.640 +directly tried to silence this language + +00:01:16.640 --> 00:01:18.640 +my father was taken to a boarding school + +00:01:18.640 --> 00:01:20.960 +and was punished for speaking + +00:01:20.960 --> 00:01:23.280 +his native language and so he didn't + +00:01:23.280 --> 00:01:25.119 +teach it to his children + +00:01:25.119 --> 00:01:28.880 +several generations of lakota and dakota + +00:01:28.880 --> 00:01:29.600 +people + +00:01:29.600 --> 00:01:31.600 +and other tribes all over the country + +00:01:31.600 --> 00:01:32.640 +lost + +00:01:32.640 --> 00:01:34.560 +lost their first language their native + +00:01:34.560 --> 00:01:38.320 +language so today only around 2000 + +00:01:38.320 --> 00:01:41.040 +first first language native speakers are + +00:01:41.040 --> 00:01:43.119 +speaking lakota + +00:01:43.119 --> 00:01:44.960 +however there's language recovery + +00:01:44.960 --> 00:01:47.600 +projects that are empowering + +00:01:47.600 --> 00:01:49.759 +second language learners like myself to + +00:01:49.759 --> 00:01:51.720 +teach it to the new generation of + +00:01:51.720 --> 00:01:54.479 +children um + +00:01:54.479 --> 00:01:57.119 +which brings me to my story um I grew up + +00:01:57.119 --> 00:01:58.000 +without knowing + +00:01:58.000 --> 00:02:00.880 +my heritage um I didn't know who my + +00:02:00.880 --> 00:02:01.520 +father was + +00:02:01.520 --> 00:02:04.719 +both my parents were white um + +00:02:04.719 --> 00:02:07.119 +I discovered my biological family in + +00:02:07.119 --> 00:02:08.720 +around 2015 + +00:02:08.720 --> 00:02:12.160 +was kind of a shock to me up until that + +00:02:12.160 --> 00:02:13.840 +point probably the only time I'd heard + +00:02:13.840 --> 00:02:15.520 +the lakota language was in + +00:02:15.520 --> 00:02:18.720 +the movie dances with wolves possibly + +00:02:18.720 --> 00:02:20.720 +some other times + +00:02:20.720 --> 00:02:24.160 +around nebraska I'd heard it um but + +00:02:24.160 --> 00:02:27.200 +even myself growing up you know pretty + +00:02:27.200 --> 00:02:28.319 +close to + +00:02:28.319 --> 00:02:30.560 +to lakota people and other native + +00:02:30.560 --> 00:02:32.239 +american people + +00:02:32.239 --> 00:02:34.560 +american indian people I kind of thought + +00:02:34.560 --> 00:02:36.640 +it was just dead I thought the language + +00:02:36.640 --> 00:02:39.760 +was not alive anymore um + +00:02:39.760 --> 00:02:42.000 +but in 2016 my daughter began her + +00:02:42.000 --> 00:02:43.920 +journey into this world and I + +00:02:43.920 --> 00:02:46.720 +I was doing a lot of searching to find + +00:02:46.720 --> 00:02:48.239 +out like what could I do + +00:02:48.239 --> 00:02:50.560 +you know not knowing my family not + +00:02:50.560 --> 00:02:51.920 +knowing my culture + +00:02:51.920 --> 00:02:54.080 +what could I do to try to bring that + +00:02:54.080 --> 00:02:55.280 +into our life + +00:02:55.280 --> 00:02:58.640 +um and so I found out about these + +00:02:58.640 --> 00:03:00.720 +lakota classes that were happening I + +00:03:00.720 --> 00:03:02.720 +went up to standing rock + +00:03:02.720 --> 00:03:04.560 +in north dakota and attended the lakota + +00:03:04.560 --> 00:03:06.640 +summer institute for three weeks + +00:03:06.640 --> 00:03:08.480 +and began my journey to learn the + +00:03:08.480 --> 00:03:09.680 +language so I can + +00:03:09.680 --> 00:03:13.120 +try to pass it on so + +00:03:13.120 --> 00:03:16.560 +this brings us to Emacs + +00:03:16.560 --> 00:03:19.200 +I could talk a lot more about my story + +00:03:19.200 --> 00:03:20.959 +I'm sure there's a lot to say + +00:03:20.959 --> 00:03:24.640 +but we're here to talk about Emacs um + +00:03:24.640 --> 00:03:26.319 +I was already a free software user at + +00:03:26.319 --> 00:03:29.040 +the time and at the lakota language + +00:03:29.040 --> 00:03:31.440 +uh institute they they were they're + +00:03:31.440 --> 00:03:33.280 +giving us software there's a dictionary + +00:03:33.280 --> 00:03:34.879 +you could get on android + +00:03:34.879 --> 00:03:37.360 +um there was a keyboard for android that + +00:03:37.360 --> 00:03:38.560 +you could type with + +00:03:38.560 --> 00:03:41.760 +they had keyboard input methods for mac + +00:03:41.760 --> 00:03:44.959 +and windows but I'm a linux user free + +00:03:44.959 --> 00:03:46.720 +software user + +00:03:46.720 --> 00:03:49.280 +so I didn't have access to those things + +00:03:49.280 --> 00:03:49.760 +as + +00:03:49.760 --> 00:03:53.120 +as easily as I could and I do a lot of + +00:03:53.120 --> 00:03:55.280 +my thinking and note taking in Emacs and + +00:03:55.280 --> 00:03:57.280 +in org mode + +00:03:57.280 --> 00:04:01.200 +and so being able to to write this + +00:04:01.200 --> 00:04:04.640 +to to um to write things down to type + +00:04:04.640 --> 00:04:07.680 +on my own computer uh was was pretty + +00:04:07.680 --> 00:04:08.720 +important to me + +00:04:08.720 --> 00:04:11.360 +and I wasn't much of an emax hacker yet + +00:04:11.360 --> 00:04:12.799 +at the time I had + +00:04:12.799 --> 00:04:15.519 +barely done anything mostly just you + +00:04:15.519 --> 00:04:16.720 +know hacked on my + +00:04:16.720 --> 00:04:20.479 +config file but this was a real + +00:04:20.479 --> 00:04:23.600 +chance for me to experience + +00:04:23.600 --> 00:04:27.280 +the the benefits of free software first + +00:04:27.280 --> 00:04:30.400 +hand and not just to benefit myself but + +00:04:30.400 --> 00:04:34.080 +to potentially benefit + +00:04:34.080 --> 00:04:36.080 +everyone anyone interested in learning + +00:04:36.080 --> 00:04:39.120 +this language + +00:04:39.120 --> 00:04:42.880 +so Emacs and + +00:04:42.880 --> 00:04:44.880 +that free software philosophy really + +00:04:44.880 --> 00:04:47.520 +empowered me so I began digging in + +00:04:47.520 --> 00:04:49.840 +um I looked I began reading the the + +00:04:49.840 --> 00:04:51.520 +manual more closely + +00:04:51.520 --> 00:04:53.680 +as an american I'm I'm sad to say + +00:04:53.680 --> 00:04:55.440 +there's not a lot of + +00:04:55.440 --> 00:04:58.479 +other languages spoken or written where + +00:04:58.479 --> 00:05:00.160 +I'm from + +00:05:00.160 --> 00:05:02.240 +so it's not common that I that I have to + +00:05:02.240 --> 00:05:04.720 +think about this with computers + +00:05:04.720 --> 00:05:07.600 +I know international people you know + +00:05:07.600 --> 00:05:09.120 +have had to come up with + +00:05:09.120 --> 00:05:11.280 +with interesting ways to to enter their + +00:05:11.280 --> 00:05:12.160 +text + +00:05:12.160 --> 00:05:14.800 +and Emacs is probably a pioneer in that + +00:05:14.800 --> 00:05:16.320 +I I'd like to know more about the + +00:05:16.320 --> 00:05:17.520 +history of this but + +00:05:17.520 --> 00:05:19.840 +there's a whole section in the manual on + +00:05:19.840 --> 00:05:22.160 +international Emacs + +00:05:22.160 --> 00:05:23.840 +and I began reading this and I was + +00:05:23.840 --> 00:05:25.440 +talking about + +00:05:25.440 --> 00:05:28.000 +different input methods and and how many + +00:05:28.000 --> 00:05:29.759 +different languages were supported and + +00:05:29.759 --> 00:05:31.680 +how you could enter the text and how it + +00:05:31.680 --> 00:05:33.680 +supports the different characters and so + +00:05:33.680 --> 00:05:34.560 +on + +00:05:34.560 --> 00:05:36.639 +um I even noticed a few languages + +00:05:36.639 --> 00:05:38.880 +support several input methods + +00:05:38.880 --> 00:05:41.840 +that became important for me later on as + +00:05:41.840 --> 00:05:43.440 +I was working on this + +00:05:43.440 --> 00:05:45.280 +many many languages are already + +00:05:45.280 --> 00:05:46.720 +supported so + +00:05:46.720 --> 00:05:48.479 +those of you who haven't looked into + +00:05:48.479 --> 00:05:50.080 +this yet if you press + +00:05:50.080 --> 00:05:52.639 +control backslash it will open up a + +00:05:52.639 --> 00:05:53.680 +selection menu + +00:05:53.680 --> 00:05:57.039 +for you to to select um + +00:05:57.039 --> 00:05:59.120 +your input method and you can there's + +00:05:59.120 --> 00:06:01.440 +207 listed here + +00:06:01.440 --> 00:06:03.120 +that's including the two that I've + +00:06:03.120 --> 00:06:04.639 +contributed + +00:06:04.639 --> 00:06:09.199 +um so 205 on on a vanilla Emacs + +00:06:09.199 --> 00:06:11.120 +so that's a lot of languages supported + +00:06:11.120 --> 00:06:13.840 +by emac Emacs but there's so many more + +00:06:13.840 --> 00:06:17.440 +that could be um and since Emacs is free + +00:06:17.440 --> 00:06:19.280 +software and it is what it is I knew + +00:06:19.280 --> 00:06:20.000 +that defining + +00:06:20.000 --> 00:06:22.639 +a new input method was surely possible + +00:06:22.639 --> 00:06:23.039 +um + +00:06:23.039 --> 00:06:25.440 +unfortunately the the manual didn't + +00:06:25.440 --> 00:06:27.120 +describe it directly or at least I + +00:06:27.120 --> 00:06:28.800 +didn't pick it up so + +00:06:28.800 --> 00:06:30.960 +um you know the new emax hacker that I + +00:06:30.960 --> 00:06:32.319 +was I + +00:06:32.319 --> 00:06:34.880 +I timidly dove down into the source code + +00:06:34.880 --> 00:06:37.360 +and discovered the quail package + +00:06:37.360 --> 00:06:40.479 +um so back in the day apparently there + +00:06:40.479 --> 00:06:40.960 +was + +00:06:40.960 --> 00:06:44.560 +mule which is like the + +00:06:44.560 --> 00:06:47.360 +multi I don't I don't know it stood for + +00:06:47.360 --> 00:06:48.000 +something about + +00:06:48.000 --> 00:06:50.160 +language environments and and it has + +00:06:50.160 --> 00:06:51.759 +evolved + +00:06:51.759 --> 00:06:54.960 +and at some point um some japanese + +00:06:54.960 --> 00:06:58.000 +uh coders created an input method called + +00:06:58.000 --> 00:06:59.039 +tamago + +00:06:59.039 --> 00:07:03.599 +which means egg in japanese and uh + +00:07:03.599 --> 00:07:06.720 +tamago evolved into quail and they + +00:07:06.720 --> 00:07:08.800 +in the comments you can see they talk + +00:07:08.800 --> 00:07:10.720 +about how the quail egg is eaten in + +00:07:10.720 --> 00:07:12.800 +japan it's a smaller thing and + +00:07:12.800 --> 00:07:15.280 +the quail mode is like a nicer version + +00:07:15.280 --> 00:07:16.960 +of tamago I guess and + +00:07:16.960 --> 00:07:19.039 +there's a pun saying they hoped it would + +00:07:19.039 --> 00:07:22.639 +egg people on to create more input modes + +00:07:22.639 --> 00:07:26.240 +and quail is quite nice I looked into it + +00:07:26.240 --> 00:07:28.479 +and there's basically two things you use + +00:07:28.479 --> 00:07:30.720 +quail defined package and quail define + +00:07:30.720 --> 00:07:32.240 +rules + +00:07:32.240 --> 00:07:36.080 +so quail defined package + +00:07:36.080 --> 00:07:38.960 +you can see here is a function it's + +00:07:38.960 --> 00:07:41.759 +probably a macro that takes a name + +00:07:41.759 --> 00:07:43.599 +a language a title and some optional + +00:07:43.599 --> 00:07:44.879 +stuff which + +00:07:44.879 --> 00:07:48.319 +I didn't really have to deal with + +00:07:48.319 --> 00:07:50.479 +define name is a new quail package for + +00:07:50.479 --> 00:07:52.400 +input language title is a string to be + +00:07:52.400 --> 00:07:52.879 +split + +00:07:52.879 --> 00:07:54.400 +at the mode line to indicate this + +00:07:54.400 --> 00:07:57.120 +package + +00:07:57.120 --> 00:08:00.879 +so I began trying to do lakota input now + +00:08:00.879 --> 00:08:03.039 +this is a whole thing on its own because + +00:08:03.039 --> 00:08:04.240 +the lakota language + +00:08:04.240 --> 00:08:07.680 +was never written um + +00:08:07.680 --> 00:08:10.800 +pre-contact and post contact + +00:08:10.800 --> 00:08:12.879 +like there's several attempts at writing + +00:08:12.879 --> 00:08:14.800 +it and different orthographies + +00:08:14.800 --> 00:08:16.960 +and there's drama around all of this + +00:08:16.960 --> 00:08:19.360 +stuff + +00:08:19.360 --> 00:08:21.120 +it's pretty common to have drama going + +00:08:21.120 --> 00:08:24.160 +on in any american indian stuff + +00:08:24.160 --> 00:08:26.560 +going on so as I was doing this I + +00:08:26.560 --> 00:08:28.479 +started with the suggested lakota + +00:08:28.479 --> 00:08:29.680 +orthography which + +00:08:29.680 --> 00:08:32.880 +is actually called by its authors the + +00:08:32.880 --> 00:08:35.680 +the standard lakota orthography but its + +00:08:35.680 --> 00:08:36.959 +authors are + +00:08:36.959 --> 00:08:40.880 +um are european + +00:08:40.880 --> 00:08:43.039 +um the main author is a man named jan + +00:08:43.039 --> 00:08:45.040 +ulrich and I appreciate all his work and + +00:08:45.040 --> 00:08:46.160 +I'm grateful for + +00:08:46.160 --> 00:08:49.360 +the materials he's made available but um + +00:08:49.360 --> 00:08:51.040 +it's a little bit problematic because + +00:08:51.040 --> 00:08:54.160 +it's not an orthography created by + +00:08:54.160 --> 00:08:56.720 +our people by lakota people so there's + +00:08:56.720 --> 00:08:57.920 +another one called the white hat + +00:08:57.920 --> 00:09:00.080 +orthography which is created by albert + +00:09:00.080 --> 00:09:01.839 +whitehat who's a teacher + +00:09:01.839 --> 00:09:04.480 +um from the chichanguk tribe so I + +00:09:04.480 --> 00:09:05.360 +created two + +00:09:05.360 --> 00:09:08.640 +and thankfully emax lets me do that so + +00:09:08.640 --> 00:09:10.720 +it's pretty simple quail defined package + +00:09:10.720 --> 00:09:11.680 +I just + +00:09:11.680 --> 00:09:13.279 +say the package I want and then all + +00:09:13.279 --> 00:09:15.360 +these nils and t's for options I don't + +00:09:15.360 --> 00:09:16.480 +actually know what they mean but it + +00:09:16.480 --> 00:09:18.240 +works + +00:09:18.240 --> 00:09:20.240 +I could look it up and then quail define + +00:09:20.240 --> 00:09:22.640 +rules just defines mappings from ascii + +00:09:22.640 --> 00:09:23.600 +keys to + +00:09:23.600 --> 00:09:26.640 +the the text you want to put in so + +00:09:26.640 --> 00:09:29.680 +for this one there's a nasal n and then + +00:09:29.680 --> 00:09:33.600 +a dot and a macron like a wedge shape + +00:09:33.600 --> 00:09:36.640 +for marking up the consonants + +00:09:36.640 --> 00:09:39.839 +so that one's pretty easy and then the + +00:09:39.839 --> 00:09:41.760 +suggested lakota orthography is a little + +00:09:41.760 --> 00:09:43.040 +bit more difficult + +00:09:43.040 --> 00:09:45.600 +but still pretty easy I just map a + +00:09:45.600 --> 00:09:46.800 +sequence of keys + +00:09:46.800 --> 00:09:49.760 +a followed by the apostrophe makes the + +00:09:49.760 --> 00:09:51.760 +accented vowels so all of those + +00:09:51.760 --> 00:09:53.519 +and then again we have the hot checks + +00:09:53.519 --> 00:09:55.839 +for the guttural sounds of the language + +00:09:55.839 --> 00:09:58.399 +and the nasal end so that's it basically + +00:09:58.399 --> 00:09:59.120 +these two + +00:09:59.120 --> 00:10:02.480 +definitions allow me to type + +00:10:02.480 --> 00:10:06.560 +lakota language in Emacs um + +00:10:06.560 --> 00:10:09.279 +and it's great it works great publishing + +00:10:09.279 --> 00:10:09.920 +it + +00:10:09.920 --> 00:10:11.760 +is another problematic thing I wanted to + +00:10:11.760 --> 00:10:13.839 +use free software to do that + +00:10:13.839 --> 00:10:16.079 +so the first thing I did was I I posted + +00:10:16.079 --> 00:10:17.600 +on sourcehut + +00:10:17.600 --> 00:10:19.440 +which is great it's a good alternative + +00:10:19.440 --> 00:10:20.959 +for a git forge + +00:10:20.959 --> 00:10:22.880 +and I got it published on melba so the + +00:10:22.880 --> 00:10:24.000 +lakota input + +00:10:24.000 --> 00:10:25.760 +package is available if you'd like to + +00:10:25.760 --> 00:10:27.760 +try it out + +00:10:27.760 --> 00:10:29.839 +and bandali one of our hosts for the + +00:10:29.839 --> 00:10:31.680 +conference is helping me now + +00:10:31.680 --> 00:10:33.200 +through the process of committing the + +00:10:33.200 --> 00:10:35.279 +code to Emacs + +00:10:35.279 --> 00:10:37.120 +because I would like to do that I would + +00:10:37.120 --> 00:10:39.279 +like it to be available to everyone + +00:10:39.279 --> 00:10:41.680 +through Emacs itself so that anyone who + +00:10:41.680 --> 00:10:43.279 +wants to use it just has to download + +00:10:43.279 --> 00:10:43.920 +Emacs + +00:10:43.920 --> 00:10:46.240 +and there you go you can type lakota + +00:10:46.240 --> 00:10:47.120 +language + +00:10:47.120 --> 00:10:50.160 +so uh pila maya thank you + +00:10:50.160 --> 00:10:53.279 +all for listening and + +00:10:53.279 --> 00:10:55.920 +I hope to see you around in our Emacs + +00:10:55.920 --> 00:10:58.320 +community + +00:10:58.320 --> 00:11:04.720 +uh day diff --git a/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt b/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt new file mode 100644 index 00000000..164d8d8d --- /dev/null +++ b/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt @@ -0,0 +1,412 @@ +WEBVTT + +00:00:05.120 --> 00:00:05.680 +hello + +00:00:05.680 --> 00:00:10.080 +can you hear me yes I can awesome + +00:00:10.080 --> 00:00:12.400 +all right so we have a couple minutes + +00:00:12.400 --> 00:00:13.200 +and + +00:00:13.200 --> 00:00:15.200 +uh it seems a couple questions as well + +00:00:15.200 --> 00:00:17.680 +so take it away + +00:00:17.680 --> 00:00:20.000 +okay I won't share my screen unless + +00:00:20.000 --> 00:00:22.640 +needed um + +00:00:22.640 --> 00:00:25.439 +looks like question one advantages + +00:00:25.439 --> 00:00:27.599 +advantages of using Emacs input methods + +00:00:27.599 --> 00:00:31.119 +over something like x compose + +00:00:31.119 --> 00:00:32.559 +well there's a there's a couple things + +00:00:32.559 --> 00:00:34.320 +there one is + +00:00:34.320 --> 00:00:37.360 +um Emacs is cross platform so + +00:00:37.360 --> 00:00:39.520 +writing this input mode for Emacs means + +00:00:39.520 --> 00:00:41.520 +if I do end up using + +00:00:41.520 --> 00:00:44.559 +a non-free operating system I can still + +00:00:44.559 --> 00:00:46.480 +use Emacs I can still type + +00:00:46.480 --> 00:00:49.920 +in the way that I would like to um + +00:00:49.920 --> 00:00:52.800 +I did look in I don't I actually don't + +00:00:52.800 --> 00:00:54.640 +know what x compose is + +00:00:54.640 --> 00:00:56.719 +I tried looking for it on my system I + +00:00:56.719 --> 00:00:59.680 +could not find it anywhere + +00:00:59.680 --> 00:01:02.399 +I did actually go and figure out how to + +00:01:02.399 --> 00:01:02.879 +write a + +00:01:02.879 --> 00:01:06.080 +x11 keyboard layout so that's also + +00:01:06.080 --> 00:01:07.040 +available + +00:01:07.040 --> 00:01:09.840 +in the repository that has the Emacs + +00:01:09.840 --> 00:01:11.920 +package as well + +00:01:11.920 --> 00:01:14.720 +and it is handy to be able to have that + +00:01:14.720 --> 00:01:15.920 +so I can type in + +00:01:15.920 --> 00:01:21.200 +other applications besides Emacs + +00:01:21.200 --> 00:01:24.479 +but the main advantages for Emacs was it + +00:01:24.479 --> 00:01:25.119 +was actually + +00:01:25.119 --> 00:01:27.439 +much easier to discover and much easier + +00:01:27.439 --> 00:01:28.560 +to + +00:01:28.560 --> 00:01:31.439 +manipulate and get feedback you know as + +00:01:31.439 --> 00:01:33.040 +I was developing it like I could just + +00:01:33.040 --> 00:01:35.360 +evaluate the coil package + +00:01:35.360 --> 00:01:37.200 +try it out and see if it works when I + +00:01:37.200 --> 00:01:39.680 +was trying to do the x11 inputs I'd have + +00:01:39.680 --> 00:01:40.560 +to log out + +00:01:40.560 --> 00:01:42.799 +read and and relog in again to get + +00:01:42.799 --> 00:01:43.759 +things read and + +00:01:43.759 --> 00:01:46.240 +it was you know it doesn't have that + +00:01:46.240 --> 00:01:46.799 +beautiful + +00:01:46.799 --> 00:01:50.560 +interactivity the way that Emacs does so + +00:01:50.560 --> 00:01:53.040 +for me it was a good place to start um + +00:01:53.040 --> 00:01:54.960 +especially because + +00:01:54.960 --> 00:01:56.640 +I had never done anything like this + +00:01:56.640 --> 00:01:58.079 +before like developing + +00:01:58.079 --> 00:02:00.079 +something that felt low level you know + +00:02:00.079 --> 00:02:04.320 +like a keyboard input + +00:02:04.320 --> 00:02:06.399 +I hope that answers your question + +00:02:06.399 --> 00:02:08.479 +question two can you give us a demo of + +00:02:08.479 --> 00:02:09.280 +you typing in + +00:02:09.280 --> 00:02:12.400 +either lakota and input method sure + +00:02:12.400 --> 00:02:19.599 +um share my screen now + +00:02:19.599 --> 00:02:21.520 +of course I always have to select which + +00:02:21.520 --> 00:02:32.239 +one + +00:02:32.239 --> 00:02:36.560 +okay so control backslash opens the + +00:02:36.560 --> 00:02:37.840 +input modes + +00:02:37.840 --> 00:02:40.000 +although when you've selected one you + +00:02:40.000 --> 00:02:41.920 +have it already so + +00:02:41.920 --> 00:02:45.680 +uh yeah wash day + +00:02:45.680 --> 00:02:48.319 +that's it is good washed it so this is + +00:02:48.319 --> 00:02:50.000 +the suggested lakota + +00:02:50.000 --> 00:02:53.360 +orthography or otherwise known as the + +00:02:53.360 --> 00:02:56.560 +standard lakota orthography + +00:02:56.560 --> 00:02:58.800 +another benefit of doing it in Emacs is + +00:02:58.800 --> 00:03:00.640 +that I now get + +00:03:00.640 --> 00:03:06.800 +completion on lakota words so + +00:03:06.800 --> 00:03:08.800 +so I'm you know it's a second language + +00:03:08.800 --> 00:03:10.560 +for me and as I'm trying to learn it + +00:03:10.560 --> 00:03:11.440 +it's actually + +00:03:11.440 --> 00:03:13.760 +quite useful to have company mode as a + +00:03:13.760 --> 00:03:15.599 +bonus um + +00:03:15.599 --> 00:03:19.680 +for typing things + +00:03:19.680 --> 00:03:22.239 +I can show the other orthography so to + +00:03:22.239 --> 00:03:23.599 +to get another one you do + +00:03:23.599 --> 00:03:27.200 +the universal input control u backslash + +00:03:27.200 --> 00:03:30.560 +and I can try the white hat orthography + +00:03:30.560 --> 00:03:36.239 +oh yeah lost + +00:03:36.239 --> 00:03:39.760 +what's the command for that you are now + +00:03:39.760 --> 00:03:41.440 +unmuted + +00:03:41.440 --> 00:03:44.720 +yeah okay you are now muted + +00:03:44.720 --> 00:03:48.000 +thank you + +00:03:48.000 --> 00:03:52.080 +you are now unmuted you are now muted + +00:03:52.080 --> 00:03:55.680 +oops not quite as slick as that other + +00:03:55.680 --> 00:03:58.879 +demo we saw the other day + +00:03:58.879 --> 00:04:02.799 +okay so control u control backslash I + +00:04:02.799 --> 00:04:04.239 +can select a different + +00:04:04.239 --> 00:04:07.200 +input method um from the default so if I + +00:04:07.200 --> 00:04:10.560 +select white hat I can type + +00:04:10.560 --> 00:04:14.480 +wash day like that + +00:04:14.480 --> 00:04:18.000 +so it's a different orthography here um + +00:04:18.000 --> 00:04:19.919 +I won't go too deeply into that it's + +00:04:19.919 --> 00:04:21.440 +hard to think and talk and type all at + +00:04:21.440 --> 00:04:23.120 +the same time + +00:04:23.120 --> 00:04:26.320 +um I hope that's good + +00:04:26.320 --> 00:04:28.560 +I'm happy to do more maybe I'll put up a + +00:04:28.560 --> 00:04:31.840 +video of of demonstrating that sometimes + +00:04:31.840 --> 00:04:36.479 +why did I just go ahead + +00:04:36.479 --> 00:04:39.520 +um time about for like one more question + +00:04:39.520 --> 00:04:42.880 +okay on live yeah thank you + +00:04:42.880 --> 00:04:45.280 +um well real quick did I write the + +00:04:45.280 --> 00:04:46.240 +company back end + +00:04:46.240 --> 00:04:48.880 +no that's just the automatic company + +00:04:48.880 --> 00:04:50.639 +completion based on other things I've + +00:04:50.639 --> 00:04:51.280 +typed + +00:04:51.280 --> 00:04:55.440 +why did I decide on the the input method + +00:04:55.440 --> 00:04:58.080 +that's a good question um I just did it + +00:04:58.080 --> 00:04:58.880 +based on + +00:04:58.880 --> 00:05:03.120 +my experience um in the x input mode you + +00:05:03.120 --> 00:05:04.000 +type it first + +00:05:04.000 --> 00:05:06.160 +and honestly I would love any input on + +00:05:06.160 --> 00:05:07.120 +what's more + +00:05:07.120 --> 00:05:09.280 +usual for these type of combining + +00:05:09.280 --> 00:05:10.960 +letters + +00:05:10.960 --> 00:05:13.919 +and really what I would like to do is + +00:05:13.919 --> 00:05:15.360 +kind of confer with other + +00:05:15.360 --> 00:05:17.600 +people from the tribe and talk to elders + +00:05:17.600 --> 00:05:19.440 +and see + +00:05:19.440 --> 00:05:21.440 +what feels right what what is the best + +00:05:21.440 --> 00:05:23.600 +way to go about this + +00:05:23.600 --> 00:05:24.800 +I don't think that it should be an + +00:05:24.800 --> 00:05:26.960 +individual decision and in this case it + +00:05:26.960 --> 00:05:27.919 +is because + +00:05:27.919 --> 00:05:30.880 +I created it for myself but now that + +00:05:30.880 --> 00:05:32.320 +I've released it to the world I think + +00:05:32.320 --> 00:05:34.639 +there's more to think about + +00:05:34.639 --> 00:05:37.680 +okay I guess I have to go now so we can + +00:05:37.680 --> 00:05:38.800 +get to the next talk + +00:05:38.800 --> 00:05:42.320 +thank you for listening okay + +00:05:42.320 --> 00:05:44.320 +thank you very much grant for your + +00:05:44.320 --> 00:05:45.759 +awesome talk and for + +00:05:45.759 --> 00:05:50.720 +the questions and answers diff --git a/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt b/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt new file mode 100644 index 00000000..55af2c4c --- /dev/null +++ b/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt @@ -0,0 +1,2164 @@ +WEBVTT + +00:00:01.839 --> 00:00:04.160 +Hello, EmacsConf! + +00:00:04.160 --> 00:00:05.279 +Thanks very much, first of all, + +00:00:05.280 --> 00:00:07.200 +to the organizers of the conference + +00:00:07.200 --> 00:00:08.800 +and to the audience, + +00:00:08.801 --> 00:00:10.480 +who I hope is out there somewhere, + +00:00:10.480 --> 00:00:11.679 +for giving me this chance + +00:00:11.680 --> 00:00:12.880 +to talk about Emacs + +00:00:12.881 --> 00:00:16.240 +and some of my poking around with Emacs Lisp. + +00:00:16.241 --> 00:00:17.680 +My name is Eric Abrahamsen. + +00:00:17.681 --> 00:00:20.480 +I'm not a professional programmer, + +00:00:20.481 --> 00:00:23.039 +but I use Emacs all day, every day, + +00:00:23.040 --> 00:00:24.800 +for writing, for translating, + +00:00:24.800 --> 00:00:26.160 +for project management, + +00:00:26.160 --> 00:00:27.920 +and most importantly, for email, + +00:00:27.921 --> 00:00:30.640 +which will be the subject of my talk today. + +00:00:30.641 --> 00:00:32.880 +So I'm talking about + +00:00:32.881 --> 00:00:34.160 +object-oriented code + +00:00:34.161 --> 00:00:38.320 +in Emacs' most famous, possibly oldest, + +00:00:38.320 --> 00:00:39.520 +definitely most notorious + +00:00:39.521 --> 00:00:42.800 +news reader / email client, + +00:00:42.801 --> 00:00:44.000 +so, in particular, + +00:00:44.001 --> 00:00:46.000 +object-oriented code in Gnus. + +00:00:46.001 --> 00:00:50.239 +Why object-oriented code? + +00:00:50.239 --> 00:00:51.199 +The way Gnus works is + +00:00:51.200 --> 00:00:52.480 +it started off as a news reader, + +00:00:52.481 --> 00:00:55.920 +so for accessing NNTP servers + +00:00:55.921 --> 00:00:57.600 +and later on grew a whole bunch + +00:00:57.601 --> 00:00:59.760 +of new functionality as a mail client, + +00:00:59.761 --> 00:01:02.079 +so it can talk to IMAP servers, + +00:01:02.079 --> 00:01:04.320 +Maildir directories, + +00:01:04.321 --> 00:01:05.360 +folders on your file system, + +00:01:05.361 --> 00:01:06.640 +all kinds of stuff, + +00:01:06.640 --> 00:01:08.320 +but it presents a unified interface + +00:01:08.321 --> 00:01:08.960 +to all those things, + +00:01:08.961 --> 00:01:11.040 +so it's basically polymorphism, + +00:01:11.040 --> 00:01:14.560 +one of the the basic fundamental principles + +00:01:14.561 --> 00:01:15.680 +of object oriented code. + +00:01:15.681 --> 00:01:17.600 +So it's a good fit. + +00:01:17.601 --> 00:01:21.439 +Second reason is it already is object-oriented, + +00:01:21.440 --> 00:01:25.280 +and I'll get into what that means in a second. + +00:01:25.281 --> 00:01:28.479 +So the background that you should know + +00:01:28.480 --> 00:01:30.000 +is that most of this code + +00:01:30.001 --> 00:01:32.560 +was written in the 90s. + +00:01:32.560 --> 00:01:34.880 +Emacs Lisp has only grown sort of + +00:01:34.881 --> 00:01:38.640 +official object orientation support libraries + +00:01:38.640 --> 00:01:41.200 +over the past 10 years or so, + +00:01:41.200 --> 00:01:42.799 +from about 2010 to the present. + +00:01:42.800 --> 00:01:45.920 +So what does Gnus do? + +00:01:45.921 --> 00:01:49.520 +So the basics of object orientation + +00:01:49.521 --> 00:01:50.560 +in most languages are: + +00:01:50.560 --> 00:01:53.439 +you define a class of some sort, + +00:01:53.440 --> 00:01:55.040 +and then you instantiate that class. + +00:01:55.041 --> 00:01:57.920 +These class instances have two things: + +00:01:57.921 --> 00:02:00.719 +they have data attributes (or slots, + +00:02:00.720 --> 00:02:01.680 +or members, or whatever + +00:02:01.681 --> 00:02:02.640 +you're going to call them), + +00:02:02.641 --> 00:02:05.600 +and they have methods + +00:02:05.601 --> 00:02:08.399 +which operate on individual instances. + +00:02:08.399 --> 00:02:10.239 +So you could say that + +00:02:10.240 --> 00:02:11.840 +you create or instantiate + +00:02:11.841 --> 00:02:12.800 +an instance of a class, + +00:02:12.801 --> 00:02:14.800 +and that instance owns two things. + +00:02:14.801 --> 00:02:17.120 +That owns its set of attributes, + +00:02:17.120 --> 00:02:19.520 +and it owns some methods, + +00:02:19.521 --> 00:02:23.280 +which also work on the instance. + +00:02:23.280 --> 00:02:25.680 +Both in Gnus' existing code + +00:02:25.681 --> 00:02:28.560 +and in the more standard object-oriented + +00:02:28.561 --> 00:02:31.680 +Emacs Lisp libraries, this relationship + +00:02:31.681 --> 00:02:34.080 +is turned on its head a little bit, + +00:02:34.080 --> 00:02:39.599 +in that data slots and instance methods + +00:02:39.600 --> 00:02:41.760 +are defined outside of the class + +00:02:41.761 --> 00:02:42.959 +or the instances themselves. + +00:02:42.959 --> 00:02:45.040 +They are top-level definitions. + +00:02:45.040 --> 00:02:46.879 +We'll get to what that means + +00:02:46.879 --> 00:02:48.720 +in the newer libraries in a bit, + +00:02:48.721 --> 00:02:49.920 +but first I want to talk about + +00:02:49.921 --> 00:02:51.280 +how Gnus does this. + +00:02:51.281 --> 00:02:52.160 +In order to do that, + +00:02:52.161 --> 00:02:54.319 +we are going to go deep into + +00:02:54.319 --> 00:02:55.760 +the darkest corner + +00:02:55.761 --> 00:02:58.080 +of the Gnus source code tree + +00:02:58.081 --> 00:03:01.440 +to a library called nnoo.el, + +00:03:01.441 --> 00:03:04.080 +very cryptically-titled library, + +00:03:04.081 --> 00:03:06.800 +and when we open it up, we find + +00:03:06.800 --> 00:03:09.280 +a library with no code comments + +00:03:09.281 --> 00:03:11.040 +and almost no doc strings. + +00:03:11.040 --> 00:03:12.800 +Almost as if Lars was a little ashamed-- + +00:03:12.800 --> 00:03:14.159 +not ashamed, but knew he was doing + +00:03:14.159 --> 00:03:16.000 +something a little bit crazy + +00:03:16.000 --> 00:03:18.080 +and didn't want anyone to see. + +00:03:18.081 --> 00:03:20.560 +So this file contains + +00:03:20.561 --> 00:03:22.400 +the object-oriented mechanism + +00:03:22.400 --> 00:03:23.920 +whereby you can define + +00:03:23.921 --> 00:03:25.760 +different kinds of backends for Gnus, + +00:03:25.760 --> 00:03:26.799 +and then those backends + +00:03:26.800 --> 00:03:30.879 +can be instantiated as individual servers. + +00:03:30.880 --> 00:03:32.480 +As you define these backends, + +00:03:32.480 --> 00:03:34.319 +you're supposed to use two macros, + +00:03:34.320 --> 00:03:35.680 +which you can see here. + +00:03:35.681 --> 00:03:37.280 +One is called defvoo, + +00:03:37.281 --> 00:03:39.440 +and one is called deffoo. + +00:03:39.441 --> 00:03:40.400 +If you look at the definitions, + +00:03:40.401 --> 00:03:41.920 +the definitions look pretty simple. + +00:03:41.921 --> 00:03:45.440 +Here, defvoo basically turns into a defvar + +00:03:45.440 --> 00:03:49.040 +and foo turns into a defun. + +00:03:49.040 --> 00:03:52.239 +Along with those basic definitions, + +00:03:52.239 --> 00:03:55.760 +the library also does some registration, + +00:03:55.760 --> 00:03:58.720 +memoization, caching of those variables. + +00:03:58.720 --> 00:04:00.879 +It saves them in the structure for later use, + +00:04:00.880 --> 00:04:03.360 +so that we know that those are meant to be + +00:04:03.360 --> 00:04:04.799 +attributes and methods + +00:04:04.800 --> 00:04:06.640 +that are used with instances, + +00:04:06.640 --> 00:04:07.519 +with server instances. + +00:04:07.520 --> 00:04:08.159 +But you can see that + +00:04:08.160 --> 00:04:10.000 +there's no server instance definition here. + +00:04:10.001 --> 00:04:12.159 +There's no, like, no nothing. + +00:04:12.160 --> 00:04:14.799 +These are top-level definitions, + +00:04:14.800 --> 00:04:20.239 +so really, data attributes for new servers + +00:04:20.240 --> 00:04:23.040 +and methods or functions + +00:04:23.041 --> 00:04:24.639 +that operate on those instances + +00:04:24.640 --> 00:04:27.840 +are completely separate mechanisms. + +00:04:27.841 --> 00:04:29.040 +They don't really have anything to do + +00:04:29.041 --> 00:04:29.520 +with each other. + +00:04:29.521 --> 00:04:31.680 +They don't belong to the same data structures. + +00:04:31.680 --> 00:04:34.080 +So how do they work? + +00:04:34.081 --> 00:04:37.120 +Follow me. deffoo and defvoo, + +00:04:37.120 --> 00:04:38.960 +aka methods and attributes, + +00:04:38.961 --> 00:04:41.360 +these are all the things I just said. + +00:04:41.360 --> 00:04:50.240 +So when you define a a backend type in Gnus, + +00:04:50.241 --> 00:04:52.400 +what you get is this: a definition, a list. + +00:04:52.400 --> 00:04:55.520 +It'll say, there is such a backend as nnml, + +00:04:55.520 --> 00:04:58.880 +and these are its data attributes + +00:04:58.880 --> 00:05:01.039 +that any given instance can have, + +00:05:01.040 --> 00:05:04.720 +and then these are the functions or methods + +00:05:04.721 --> 00:05:06.880 +that are defined to operate on + +00:05:06.880 --> 00:05:08.240 +an instance of this backend, + +00:05:08.241 --> 00:05:09.600 +so a server that belongs to + +00:05:09.601 --> 00:05:12.160 +the nnml backend. + +00:05:12.161 --> 00:05:13.600 +So at least we have this data here. + +00:05:13.601 --> 00:05:16.080 +That's handy. We don't really touch that. + +00:05:16.081 --> 00:05:19.600 +That's, like, very, very, very deep Gnus code + +00:05:19.601 --> 00:05:20.560 +that doesn't really come up + +00:05:20.560 --> 00:05:25.199 +even as a bug squasher or whatever. + +00:05:25.200 --> 00:05:26.160 +We don't touch that very often, + +00:05:26.161 --> 00:05:26.800 +but there they are, + +00:05:26.801 --> 00:05:29.199 +and that's how they work. + +00:05:29.200 --> 00:05:31.039 +Now the next thing that obviously + +00:05:31.040 --> 00:05:32.080 +you want to know is, okay, + +00:05:32.080 --> 00:05:33.759 +where are... if I've started up Gnus, + +00:05:33.760 --> 00:05:35.039 +where are my servers? + +00:05:35.039 --> 00:05:36.880 +Where are these server objects, + +00:05:36.881 --> 00:05:40.479 +since this is object-oriented programming? + +00:05:40.480 --> 00:05:41.520 +And the weird thing + +00:05:41.521 --> 00:05:43.759 +that you will eventually figure out + +00:05:43.760 --> 00:05:45.680 +(in some cases, after years of poking around) + +00:05:45.681 --> 00:05:46.880 +in the Gnus source code + +00:05:46.880 --> 00:05:48.880 +is that servers do not exist + +00:05:48.881 --> 00:05:51.360 +in an ontological, philosophical sense, + +00:05:51.361 --> 00:05:55.280 +as objects. The primary data structures of Gnus + +00:05:55.281 --> 00:05:58.160 +are groups, and in sort of + +00:05:58.161 --> 00:06:00.560 +an object-oriented hierarchical mindset, + +00:06:00.561 --> 00:06:03.039 +you'd think, well, groups belong to servers, + +00:06:03.040 --> 00:06:05.759 +so servers must exist, but they don't. + +00:06:05.759 --> 00:06:07.840 +Each group... And here you can see + +00:06:07.841 --> 00:06:09.360 +some examples of groups... + +00:06:09.360 --> 00:06:11.199 +These are basically the data structures + +00:06:11.199 --> 00:06:12.240 +that represent a group. + +00:06:12.241 --> 00:06:14.160 +Each group also has a little entry here + +00:06:14.161 --> 00:06:17.039 +that tells you what server it belongs to, + +00:06:17.039 --> 00:06:20.080 +and each group replicates that data, + +00:06:20.081 --> 00:06:21.600 +saying which server it belongs to. + +00:06:21.601 --> 00:06:24.000 +So when Gnus is going through + +00:06:24.001 --> 00:06:25.280 +doing its business, + +00:06:25.281 --> 00:06:27.039 +trying to figure out updating mail + +00:06:27.040 --> 00:06:28.479 +from the groups or whatever, + +00:06:28.480 --> 00:06:30.960 +almost every time, it will cycle through + +00:06:30.961 --> 00:06:32.960 +all the list of groups. + +00:06:32.960 --> 00:06:34.960 +It'll look at all the server definitions, + +00:06:34.960 --> 00:06:38.160 +and it will categorize the groups by server, + +00:06:38.160 --> 00:06:40.000 +which is just weird, + +00:06:40.001 --> 00:06:41.680 +because you're sort of looking for... + +00:06:41.681 --> 00:06:42.720 +okay, where does the server exist? + +00:06:42.721 --> 00:06:43.440 +It doesn't exist. + +00:06:43.441 --> 00:06:46.240 +It's put together every time + +00:06:46.241 --> 00:06:50.400 +out of code elsewhere in the Gnus code base, + +00:06:50.400 --> 00:06:53.599 +specifically from these group definitions. + +00:06:53.600 --> 00:06:54.479 +So this is very odd, + +00:06:54.480 --> 00:06:56.319 +because in some sense... + +00:06:56.320 --> 00:06:59.360 +Like here, this one, its server is nnml + +00:06:59.361 --> 00:07:01.680 +and an empty string, + +00:07:01.681 --> 00:07:02.880 +so there's a certain sense here + +00:07:02.881 --> 00:07:04.720 +in which this server is not really + +00:07:04.721 --> 00:07:06.160 +an object at all. What it is + +00:07:06.161 --> 00:07:07.120 +is a set of instructions + +00:07:07.121 --> 00:07:08.560 +for how to find messages, + +00:07:08.560 --> 00:07:10.319 +and this set of instructions is: + +00:07:10.320 --> 00:07:12.000 +go to the default place + +00:07:12.001 --> 00:07:14.000 +where the user might have their mail + +00:07:14.001 --> 00:07:16.319 +and expect to find messages there + +00:07:16.320 --> 00:07:18.479 +in an nnml format, which is basically + +00:07:18.480 --> 00:07:21.759 +just one message per file. + +00:07:21.760 --> 00:07:22.720 +Any number of groups could have + +00:07:22.721 --> 00:07:24.400 +those same instructions, but they're not... + +00:07:24.401 --> 00:07:25.440 +It's not really a thing. + +00:07:25.440 --> 00:07:26.720 +It's really just a... + +00:07:26.720 --> 00:07:28.639 +It's more of a procedural instruction. + +00:07:28.639 --> 00:07:30.160 +On the other end of the spectrum, + +00:07:30.161 --> 00:07:32.240 +you might have an nnimap server, + +00:07:32.241 --> 00:07:33.280 +which very much is a thing. + +00:07:33.281 --> 00:07:36.160 +It has its own server, its own port, + +00:07:36.161 --> 00:07:38.960 +its own authentication system. + +00:07:38.961 --> 00:07:40.639 +So some of the servers are more like things, + +00:07:40.640 --> 00:07:42.400 +some of the servers are more like instructions. + +00:07:42.400 --> 00:07:45.520 +As Gnus works right now, + +00:07:45.520 --> 00:07:47.280 +most of the servers are treated like + +00:07:47.280 --> 00:07:48.879 +just instruction sets, + +00:07:48.879 --> 00:07:50.879 +and there's no place where you can + +00:07:50.880 --> 00:07:51.840 +go and find them. + +00:07:51.841 --> 00:07:53.680 +There's no one central variable + +00:07:53.681 --> 00:07:56.160 +that defines them all. So how do the... + +00:07:56.160 --> 00:07:57.759 +We'll talk about the methods in a second. + +00:07:57.760 --> 00:07:59.520 +How do the data attributes work? + +00:07:59.520 --> 00:08:02.639 +Put very crudely, + +00:08:02.639 --> 00:08:04.479 +your servers, when they're put together, + +00:08:04.479 --> 00:08:06.879 +they are kept in a variable, + +00:08:06.880 --> 00:08:08.080 +and it's called nnoo + +00:08:08.080 --> 00:08:08.960 +nno + +00:08:08.960 --> 00:08:11.120 +state a list and there's a concept to + +00:08:11.120 --> 00:08:12.960 +this of the current server + +00:08:12.960 --> 00:08:16.560 +so when we go here let's go back to + +00:08:16.560 --> 00:08:19.039 +our nnno definition a list so when we + +00:08:19.039 --> 00:08:20.560 +have an nnml + +00:08:20.560 --> 00:08:22.240 +server say we have one here and it's + +00:08:22.240 --> 00:08:24.400 +just this blank string + +00:08:24.400 --> 00:08:26.639 +these are all when you define that in + +00:08:26.639 --> 00:08:28.879 +your own uh server definition code + +00:08:28.879 --> 00:08:31.919 +you can put in different values for all + +00:08:31.919 --> 00:08:32.399 +of these + +00:08:32.399 --> 00:08:35.760 +various attributes and when noose comes + +00:08:35.760 --> 00:08:37.039 +when it comes time for news to operate + +00:08:37.039 --> 00:08:38.959 +on this server in particular ask it to + +00:08:38.959 --> 00:08:40.640 +you know open a group or get new mail + +00:08:40.640 --> 00:08:42.080 +what it will do is it will take + +00:08:42.080 --> 00:08:45.360 +that particular server's data from these + +00:08:45.360 --> 00:08:45.920 +symbols + +00:08:45.920 --> 00:08:47.600 +and it will copy all that information + +00:08:47.600 --> 00:08:49.600 +into the global devfars + +00:08:49.600 --> 00:08:51.760 +so for the time that you are operating + +00:08:51.760 --> 00:08:53.120 +on this particular server + +00:08:53.120 --> 00:08:55.920 +its individual data becomes the values + +00:08:55.920 --> 00:08:56.800 +of these global + +00:08:56.800 --> 00:08:59.360 +variables which when you realize what's + +00:08:59.360 --> 00:09:00.560 +happening is sort of terrifying you + +00:09:00.560 --> 00:09:02.080 +think oh my god + +00:09:02.080 --> 00:09:04.480 +but at the same time it's actually kind + +00:09:04.480 --> 00:09:05.760 +of impressive and it's amazing that it + +00:09:05.760 --> 00:09:07.279 +works as well as it does + +00:09:07.279 --> 00:09:09.120 +I'm actually a little bit in awe of the + +00:09:09.120 --> 00:09:10.880 +of the code in this in this library I + +00:09:10.880 --> 00:09:12.560 +think it's pretty impressive + +00:09:12.560 --> 00:09:15.760 +so as you nno change server + +00:09:15.760 --> 00:09:18.320 +uh this function here these values get + +00:09:18.320 --> 00:09:20.080 +copied into the global value into the + +00:09:20.080 --> 00:09:21.440 +global variables and then as you go on + +00:09:21.440 --> 00:09:22.399 +the next server + +00:09:22.399 --> 00:09:24.000 +that gets you know cleaned out and + +00:09:24.000 --> 00:09:26.399 +recopied there are a few + +00:09:26.399 --> 00:09:29.680 +um a few other slot types + +00:09:29.680 --> 00:09:32.000 +or attribute types which do because all + +00:09:32.000 --> 00:09:33.440 +of these attributes see they all start + +00:09:33.440 --> 00:09:34.720 +with the nml + +00:09:34.720 --> 00:09:37.920 +or in this case and in folder prefix + +00:09:37.920 --> 00:09:40.560 +but there are a few slot types that all + +00:09:40.560 --> 00:09:41.760 +servers need for + +00:09:41.760 --> 00:09:43.279 +for instance their most recent status + +00:09:43.279 --> 00:09:45.920 +message a status symbol like open denied + +00:09:45.920 --> 00:09:46.640 +whatever + +00:09:46.640 --> 00:09:48.080 +and that data is sort of scattered + +00:09:48.080 --> 00:09:49.680 +around the rest of the news + +00:09:49.680 --> 00:09:51.200 +code base in various variables or + +00:09:51.200 --> 00:09:53.440 +various places + +00:09:53.440 --> 00:09:55.440 +so that's that sort of just contributes + +00:09:55.440 --> 00:09:56.560 +to the confusion when you're trying to + +00:09:56.560 --> 00:09:57.360 +figure out why + +00:09:57.360 --> 00:10:00.720 +things are going wrong so that is our + +00:10:00.720 --> 00:10:03.839 +um nnoo which is and + +00:10:03.839 --> 00:10:05.440 +sort of how the attributes and these + +00:10:05.440 --> 00:10:07.360 +global variables work + +00:10:07.360 --> 00:10:09.120 +if we want to talk about defu and the + +00:10:09.120 --> 00:10:10.480 +methods we + +00:10:10.480 --> 00:10:20.800 +go to + +00:10:20.800 --> 00:10:23.200 +and so this is the place where all the + +00:10:23.200 --> 00:10:25.600 +server level methods are defined + +00:10:25.600 --> 00:10:27.200 +and what we have here are things like + +00:10:27.200 --> 00:10:29.279 +here's an example there's closed server + +00:10:29.279 --> 00:10:32.640 +this closed server is given a + +00:10:32.640 --> 00:10:36.320 +a server as a an argument + +00:10:36.320 --> 00:10:38.079 +it looks at the server and basically it + +00:10:38.079 --> 00:10:40.560 +finds the proper function to call on + +00:10:40.560 --> 00:10:42.079 +this particular server + +00:10:42.079 --> 00:10:45.120 +using the function new skip function by + +00:10:45.120 --> 00:10:45.600 +taking + +00:10:45.600 --> 00:10:48.959 +the sort of latter half of this function + +00:10:48.959 --> 00:10:49.760 +symbol + +00:10:49.760 --> 00:10:52.079 +and pasting it together with the symbol + +00:10:52.079 --> 00:10:53.440 +that represents the back end so + +00:10:53.440 --> 00:10:56.800 +if you were calling this on an nni map + +00:10:56.800 --> 00:10:59.600 +server your skip function would look at + +00:10:59.600 --> 00:11:01.279 +your imap server look at closed server I + +00:11:01.279 --> 00:11:02.240 +knew what + +00:11:02.240 --> 00:11:07.839 +it would come up with + +00:11:07.839 --> 00:11:10.240 +server sure enough there's an imac close + +00:11:10.240 --> 00:11:11.920 +server and it'll call this code and then + +00:11:11.920 --> 00:11:12.240 +it'll + +00:11:12.240 --> 00:11:14.000 +it'll go and do its other bookkeeping + +00:11:14.000 --> 00:11:15.279 +another sort of + +00:11:15.279 --> 00:11:18.320 +surrounding code and so that's not that + +00:11:18.320 --> 00:11:19.279 +actually works pretty well + +00:11:19.279 --> 00:11:22.640 +uh as as things go uh defu + +00:11:22.640 --> 00:11:24.959 +makes a record that this this function + +00:11:24.959 --> 00:11:26.800 +exists and nus gets function get + +00:11:26.800 --> 00:11:28.320 +function looks on that cache finds the + +00:11:28.320 --> 00:11:29.600 +function and calls it + +00:11:29.600 --> 00:11:30.959 +now what's particularly confusing is + +00:11:30.959 --> 00:11:32.560 +that you don't actually even have to use + +00:11:32.560 --> 00:11:33.360 +defu + +00:11:33.360 --> 00:11:35.519 +so whoever wrote and then mail gear + +00:11:35.519 --> 00:11:38.399 +which is a weird library + +00:11:38.399 --> 00:11:39.920 +said to heck with you I'm not using any + +00:11:39.920 --> 00:11:41.600 +of these + +00:11:41.600 --> 00:11:43.120 +any of this machinery I'm going to do it + +00:11:43.120 --> 00:11:45.839 +myself so we have + +00:11:45.839 --> 00:11:49.680 +def structs to hold uh the instance + +00:11:49.680 --> 00:11:52.320 +data and then we have just plain old + +00:11:52.320 --> 00:11:53.040 +defense + +00:11:53.040 --> 00:11:55.680 +for things like animal your close server + +00:11:55.680 --> 00:11:57.279 +request close all of these + +00:11:57.279 --> 00:11:59.279 +these server level uh variables and it + +00:11:59.279 --> 00:12:00.320 +just turns out that + +00:12:00.320 --> 00:12:03.360 +news in its belt and suspenders + +00:12:03.360 --> 00:12:05.839 +approach to uh to coding it'll actually + +00:12:05.839 --> 00:12:07.279 +just go out if it can't find + +00:12:07.279 --> 00:12:10.320 +the memoized function it'll just go out + +00:12:10.320 --> 00:12:12.160 +and say has anybody defined a function + +00:12:12.160 --> 00:12:14.240 +that looks like this pattern and then + +00:12:14.240 --> 00:12:16.000 +and then melder says yes I did and then + +00:12:16.000 --> 00:12:17.920 +we call it and then we go so it's just + +00:12:17.920 --> 00:12:19.920 +it's fine it works it just adds to the + +00:12:19.920 --> 00:12:21.440 +confusion why + +00:12:21.440 --> 00:12:24.240 +why does it work we don't know sometimes + +00:12:24.240 --> 00:12:25.440 +the only thing worse than not knowing + +00:12:25.440 --> 00:12:26.880 +why something doesn't work is + +00:12:26.880 --> 00:12:30.000 +not knowing why something does work um + +00:12:30.000 --> 00:12:30.560 +and then + +00:12:30.560 --> 00:12:31.920 +a last little bit I want to touch on + +00:12:31.920 --> 00:12:33.680 +here is inheritance which is another + +00:12:33.680 --> 00:12:35.440 +sort of cornerstone of object-oriented + +00:12:35.440 --> 00:12:38.480 +coding as far as I can tell only uh + +00:12:38.480 --> 00:12:40.160 +the only inheritance that goes on is in + +00:12:40.160 --> 00:12:41.920 +something called nn male + +00:12:41.920 --> 00:12:45.519 +which provides sort of common functions + +00:12:45.519 --> 00:12:48.399 +for back ends that keep their mail on + +00:12:48.399 --> 00:12:49.360 +your + +00:12:49.360 --> 00:12:52.000 +local machine and you can spool it you + +00:12:52.000 --> 00:12:53.680 +can delete it you can you know you own + +00:12:53.680 --> 00:12:55.440 +the messages it's not like an nntp + +00:12:55.440 --> 00:12:56.160 +server + +00:12:56.160 --> 00:12:59.040 +and so a lot of those male deer nnml + +00:12:59.040 --> 00:13:00.160 +whatever + +00:13:00.160 --> 00:13:02.959 +a lot of those have sort of similar code + +00:13:02.959 --> 00:13:04.079 +which they + +00:13:04.079 --> 00:13:07.600 +which they share via this nn mail + +00:13:07.600 --> 00:13:09.600 +you call it an abstract parent class I + +00:13:09.600 --> 00:13:12.959 +guess so if you have something like nnml + +00:13:12.959 --> 00:13:15.440 +it has a request scan uh when it goes + +00:13:15.440 --> 00:13:16.720 +into request scan + +00:13:16.720 --> 00:13:18.800 +it ends up calling nnmail.newmail and it + +00:13:18.800 --> 00:13:21.760 +says I am calling this as an nml server + +00:13:21.760 --> 00:13:23.279 +and here are some of my callback + +00:13:23.279 --> 00:13:24.959 +functions and my variables that I would + +00:13:24.959 --> 00:13:26.000 +like you to use + +00:13:26.000 --> 00:13:28.000 +when you are getting your email so in + +00:13:28.000 --> 00:13:30.120 +this way the code is sort of you know + +00:13:30.120 --> 00:13:33.120 +inter-interleaved between the the child + +00:13:33.120 --> 00:13:35.680 +class and the parent class even though + +00:13:35.680 --> 00:13:37.120 +we're not talking in terms of classes + +00:13:37.120 --> 00:13:39.440 +here at all really + +00:13:39.440 --> 00:13:42.160 +so that's how noose works right now I + +00:13:42.160 --> 00:13:42.959 +hope that's clear + +00:13:42.959 --> 00:13:45.519 +it certainly wasn't to me and I still + +00:13:45.519 --> 00:13:46.560 +have to go refresh my + +00:13:46.560 --> 00:13:48.079 +memory I'd like to talk a little bit + +00:13:48.079 --> 00:13:50.079 +about sort of the newer + +00:13:50.079 --> 00:13:51.600 +libraries that are available now for + +00:13:51.600 --> 00:13:54.240 +doing object-oriented code + +00:13:54.240 --> 00:13:56.959 +uh as I mentioned I think earlier nno + +00:13:56.959 --> 00:13:59.279 +the copyright headers for 1996 so that's + +00:13:59.279 --> 00:14:00.320 +pretty venerable + +00:14:00.320 --> 00:14:02.639 +coincidentally around the same time eric + +00:14:02.639 --> 00:14:05.519 +ludlum started developing e-I-e-I-o + +00:14:05.519 --> 00:14:08.320 +which is a which is sort of inspired by + +00:14:08.320 --> 00:14:09.360 +a common lisp's + +00:14:09.360 --> 00:14:12.720 +common lisp object system um I got a + +00:14:12.720 --> 00:14:14.240 +very good introduction to that from this + +00:14:14.240 --> 00:14:14.959 +book + +00:14:14.959 --> 00:14:16.399 +practical common lisp which I would + +00:14:16.399 --> 00:14:18.000 +encourage you to look at if you haven't + +00:14:18.000 --> 00:14:20.079 +which you probably have anyway + +00:14:20.079 --> 00:14:22.320 +e-I-e-I-o was incorporated into Emacs in + +00:14:22.320 --> 00:14:23.920 +2010 + +00:14:23.920 --> 00:14:27.839 +so that yeah e-I-e-I-o provides um + +00:14:27.839 --> 00:14:30.240 +the deaf class statements it provides + +00:14:30.240 --> 00:14:32.079 +deaf generics deaf methods all that sort + +00:14:32.079 --> 00:14:32.639 +of stuff + +00:14:32.639 --> 00:14:34.800 +sort of a common lisp object-oriented + +00:14:34.800 --> 00:14:36.320 +code + +00:14:36.320 --> 00:14:38.399 +at some point stephan monier's money + +00:14:38.399 --> 00:14:39.760 +money another name I haven't pronounced + +00:14:39.760 --> 00:14:41.199 +it all out + +00:14:41.199 --> 00:14:43.839 +started either cleaning up that code or + +00:14:43.839 --> 00:14:45.120 +for one reason or another writing a + +00:14:45.120 --> 00:14:46.959 +re-implementation of generic functions + +00:14:46.959 --> 00:14:48.000 +which was added + +00:14:48.000 --> 00:14:51.440 +uh in 2015 and then throughout this time + +00:14:51.440 --> 00:14:51.920 +another + +00:14:51.920 --> 00:14:54.639 +sort of object-oriented style + +00:14:54.639 --> 00:14:55.760 +declaration is + +00:14:55.760 --> 00:14:58.160 +defstruct which started off in the cl + +00:14:58.160 --> 00:15:00.000 +libraries + +00:15:00.000 --> 00:15:01.600 +implemented with vectors later was + +00:15:01.600 --> 00:15:02.959 +implemented with records so they're + +00:15:02.959 --> 00:15:04.639 +easier to target + +00:15:04.639 --> 00:15:06.720 +anyway that's another option so how + +00:15:06.720 --> 00:15:08.399 +would we this is I'm probably out of + +00:15:08.399 --> 00:15:09.279 +time already but + +00:15:09.279 --> 00:15:13.839 +we're only getting to the part + +00:15:13.839 --> 00:15:15.760 +the whole point of this is how would we + +00:15:15.760 --> 00:15:17.920 +rewrite someone news's code to use these + +00:15:17.920 --> 00:15:19.920 +newer libraries + +00:15:19.920 --> 00:15:21.760 +if we didn't have to support third party + +00:15:21.760 --> 00:15:23.839 +libraries this wouldn't be that hard + +00:15:23.839 --> 00:15:26.639 +but out there noose is really up on uh + +00:15:26.639 --> 00:15:28.160 +you know backwards compatibility and not + +00:15:28.160 --> 00:15:30.240 +breaking people's stuff and you know + +00:15:30.240 --> 00:15:33.040 +multi-decade support for things so there + +00:15:33.040 --> 00:15:34.240 +are people out there who have written + +00:15:34.240 --> 00:15:35.759 +third-party libraries + +00:15:35.759 --> 00:15:38.480 +um defining new backends for you can use + +00:15:38.480 --> 00:15:40.000 +like hacker news or whatever as + +00:15:40.000 --> 00:15:41.759 +a as a server so we want to be able to + +00:15:41.759 --> 00:15:43.199 +support those if you didn't have to + +00:15:43.199 --> 00:15:44.240 +support those it'd be fine you'd + +00:15:44.240 --> 00:15:46.079 +re-implement you'd use generic functions + +00:15:46.079 --> 00:15:47.440 +you'd use either structure classes + +00:15:47.440 --> 00:15:48.560 +whatever but we got a + +00:15:48.560 --> 00:15:51.040 +it's a little bit tricky to support + +00:15:51.040 --> 00:15:52.000 +these other people's + +00:15:52.000 --> 00:15:54.320 +libraries so one of the things we can do + +00:15:54.320 --> 00:15:56.079 +is rewrite the defu + +00:15:56.079 --> 00:15:59.279 +so if you remember defu is the thing + +00:15:59.279 --> 00:16:00.079 +that uh + +00:16:00.079 --> 00:16:03.120 +or sorry uh defu + +00:16:03.120 --> 00:16:04.800 +is the thing that defines methods that + +00:16:04.800 --> 00:16:07.040 +operate on object answers + +00:16:07.040 --> 00:16:10.160 +instances and we can uh rewrite that to + +00:16:10.160 --> 00:16:10.639 +use + +00:16:10.639 --> 00:16:13.440 +cldef generic and that's this is fairly + +00:16:13.440 --> 00:16:14.240 +fairly simple + +00:16:14.240 --> 00:16:15.440 +it looks like a lot of code it's not a + +00:16:15.440 --> 00:16:17.759 +lot of good for instance we have the + +00:16:17.759 --> 00:16:20.320 +new closed server code that we looked at + +00:16:20.320 --> 00:16:21.199 +earlier + +00:16:21.199 --> 00:16:22.720 +and we have this phone call and the new + +00:16:22.720 --> 00:16:24.560 +skip function so this would look + +00:16:24.560 --> 00:16:28.720 +like using generic functions and methods + +00:16:28.720 --> 00:16:30.240 +it would look like this we'd have + +00:16:30.240 --> 00:16:32.959 +a generic def generic which is just a + +00:16:32.959 --> 00:16:34.560 +sort of a declaration + +00:16:34.560 --> 00:16:36.320 +and a doc string and then we have those + +00:16:36.320 --> 00:16:37.680 +implementations + +00:16:37.680 --> 00:16:40.320 +so we can see what the original code + +00:16:40.320 --> 00:16:42.399 +does here is it first says okay what + +00:16:42.399 --> 00:16:44.720 +type is our our is our argument here and + +00:16:44.720 --> 00:16:45.839 +if it's a string + +00:16:45.839 --> 00:16:48.560 +then go and get the proper s the proper + +00:16:48.560 --> 00:16:50.160 +method definition + +00:16:50.160 --> 00:16:52.480 +from that string so the way we do that + +00:16:52.480 --> 00:16:53.920 +with methods is we + +00:16:53.920 --> 00:16:56.000 +we say if the server is a string so if + +00:16:56.000 --> 00:16:57.440 +it matches this type + +00:16:57.440 --> 00:16:58.720 +then what we're going to do is just + +00:16:58.720 --> 00:17:00.320 +recall we're going to call this function + +00:17:00.320 --> 00:17:02.160 +all over again + +00:17:02.160 --> 00:17:05.199 +using uh basically the same code here + +00:17:05.199 --> 00:17:06.400 +the same code that takes a string and + +00:17:06.400 --> 00:17:07.600 +gets the object so + +00:17:07.600 --> 00:17:10.640 +this does this can add extra function + +00:17:10.640 --> 00:17:11.600 +calls + +00:17:11.600 --> 00:17:12.880 +depending on how you've written the rest + +00:17:12.880 --> 00:17:14.880 +of your code um but this is sort of the + +00:17:14.880 --> 00:17:16.640 +canonical way of doing this + +00:17:16.640 --> 00:17:19.679 +uh using methods then our next part here + +00:17:19.679 --> 00:17:20.559 +is + +00:17:20.559 --> 00:17:22.000 +nishkit function we're going to get a + +00:17:22.000 --> 00:17:24.559 +function called closed server + +00:17:24.559 --> 00:17:26.079 +the difference here is that all these + +00:17:26.079 --> 00:17:27.360 +functions are all going to be called + +00:17:27.360 --> 00:17:28.000 +close + +00:17:28.000 --> 00:17:29.360 +news close server they're not going to + +00:17:29.360 --> 00:17:31.120 +be called news like nni my + +00:17:31.120 --> 00:17:32.799 +closed server and ntp close server + +00:17:32.799 --> 00:17:34.400 +they're all going to have the same name + +00:17:34.400 --> 00:17:36.160 +and what we do is uh we have an around + +00:17:36.160 --> 00:17:37.440 +method + +00:17:37.440 --> 00:17:40.640 +for any server that is a const which is + +00:17:40.640 --> 00:17:43.679 +which is as close as we care to get uh + +00:17:43.679 --> 00:17:45.520 +for you know zeroing in on the type that + +00:17:45.520 --> 00:17:46.799 +we're looking for + +00:17:46.799 --> 00:17:48.559 +we put in a round method on that so that + +00:17:48.559 --> 00:17:50.480 +we can call the next method which we'll + +00:17:50.480 --> 00:17:51.679 +call the more specific + +00:17:51.679 --> 00:17:53.440 +method and then we have our other + +00:17:53.440 --> 00:17:55.600 +bookkeeping code to clean up you know + +00:17:55.600 --> 00:17:57.280 +set up tear down code we'll go around + +00:17:57.280 --> 00:17:58.640 +that + +00:17:58.640 --> 00:18:00.080 +and then in one of the back-end + +00:18:00.080 --> 00:18:02.080 +definitions for instance in an imap + +00:18:02.080 --> 00:18:04.320 +we have another news closed server thing + +00:18:04.320 --> 00:18:05.760 +this looks at the server + +00:18:05.760 --> 00:18:08.880 +and it says is this server a list that + +00:18:08.880 --> 00:18:10.799 +starts with a symbol and an imap and if + +00:18:10.799 --> 00:18:12.480 +it is then we're almost guaranteed that + +00:18:12.480 --> 00:18:13.679 +this is what we wanted + +00:18:13.679 --> 00:18:15.840 +and then this is where we would insert + +00:18:15.840 --> 00:18:17.600 +all the rest of the code from anonymous + +00:18:17.600 --> 00:18:18.960 +closed server + +00:18:18.960 --> 00:18:20.799 +where we'd re-redefine that to look like + +00:18:20.799 --> 00:18:22.880 +this so it's not that hard + +00:18:22.880 --> 00:18:26.080 +theoretically so what we would do + +00:18:26.080 --> 00:18:28.720 +is take the defu macro macro and then + +00:18:28.720 --> 00:18:29.679 +rewrite that + +00:18:29.679 --> 00:18:32.240 +so that it actually defines a cl def + +00:18:32.240 --> 00:18:33.039 +method like + +00:18:33.039 --> 00:18:35.520 +one of these now there's a couple of + +00:18:35.520 --> 00:18:36.320 +these things + +00:18:36.320 --> 00:18:38.960 +unfortunately it's not that easy get rid + +00:18:38.960 --> 00:18:41.200 +of you + +00:18:41.200 --> 00:18:43.490 +a couple of these things + +00:18:43.490 --> 00:18:46.400 +[Music] + +00:18:46.400 --> 00:18:49.039 +that don't use their server as the first + +00:18:49.039 --> 00:18:49.919 +argument + +00:18:49.919 --> 00:18:52.400 +or any of the arguments or it's an + +00:18:52.400 --> 00:18:53.280 +optional argument + +00:18:53.280 --> 00:18:54.720 +and we need the server to be in there to + +00:18:54.720 --> 00:18:56.640 +dispatch on its type + +00:18:56.640 --> 00:18:58.799 +if the server doesn't show up as a as a + +00:18:58.799 --> 00:19:00.080 +required + +00:19:00.080 --> 00:19:01.760 +argument we're not going to be able to + +00:19:01.760 --> 00:19:03.600 +locate the the proper + +00:19:03.600 --> 00:19:07.440 +function call so in the case of + +00:19:07.440 --> 00:19:10.640 +noose request group here we start with + +00:19:10.640 --> 00:19:12.080 +the group it's the group that matters + +00:19:12.080 --> 00:19:12.720 +and we get + +00:19:12.720 --> 00:19:14.960 +the newscommand method as an optional + +00:19:14.960 --> 00:19:16.240 +argument + +00:19:16.240 --> 00:19:18.559 +so that's not cool we don't want that so + +00:19:18.559 --> 00:19:20.480 +what we need instead is something that + +00:19:20.480 --> 00:19:21.360 +looks like this + +00:19:21.360 --> 00:19:23.840 +what we're going to do with uh this is + +00:19:23.840 --> 00:19:25.360 +gonna be just terrible terrible code but + +00:19:25.360 --> 00:19:26.640 +hopefully it won't get used very often + +00:19:26.640 --> 00:19:28.160 +it's gonna be really embarrassing + +00:19:28.160 --> 00:19:30.559 +um defu what's what definitely was gonna + +00:19:30.559 --> 00:19:31.520 +have to do is + +00:19:31.520 --> 00:19:33.200 +say okay is this a function that doesn't + +00:19:33.200 --> 00:19:34.559 +have the server as the first argument + +00:19:34.559 --> 00:19:35.360 +and if it does + +00:19:35.360 --> 00:19:36.960 +it's gonna say oh it's news request + +00:19:36.960 --> 00:19:38.400 +group what happens has to happen with + +00:19:38.400 --> 00:19:39.280 +news request group + +00:19:39.280 --> 00:19:40.799 +is we take the news command method and + +00:19:40.799 --> 00:19:43.200 +we're going to move it up to the front + +00:19:43.200 --> 00:19:46.240 +to the first argument here and it's + +00:19:46.240 --> 00:19:47.520 +either going to be + +00:19:47.520 --> 00:19:48.720 +it's either going to be given or it's + +00:19:48.720 --> 00:19:50.840 +going to be nil because it's it is + +00:19:50.840 --> 00:19:52.080 +optional + +00:19:52.080 --> 00:19:54.320 +okay I briefly edited the space time + +00:19:54.320 --> 00:19:55.760 +continuum there to conceal the fact that + +00:19:55.760 --> 00:19:56.400 +I had + +00:19:56.400 --> 00:19:57.679 +actually not finished writing the code + +00:19:57.679 --> 00:19:59.440 +that I was supposed to write anyway + +00:19:59.440 --> 00:20:02.159 +um so now we have once we've reordered + +00:20:02.159 --> 00:20:02.960 +the + +00:20:02.960 --> 00:20:04.320 +the arguments to the function then we + +00:20:04.320 --> 00:20:05.760 +have to check our various possible + +00:20:05.760 --> 00:20:06.880 +values one is + +00:20:06.880 --> 00:20:08.640 +uh that the server was not passed in in + +00:20:08.640 --> 00:20:10.080 +which case we recall + +00:20:10.080 --> 00:20:12.400 +request group with the server um the + +00:20:12.400 --> 00:20:13.840 +other is that it's just a string in + +00:20:13.840 --> 00:20:15.360 +which case we do that and then this is + +00:20:15.360 --> 00:20:16.559 +sort of the the normal + +00:20:16.559 --> 00:20:18.559 +the normal case that we would expect to + +00:20:18.559 --> 00:20:20.720 +cons so that's not that bad it's not you + +00:20:20.720 --> 00:20:21.039 +know + +00:20:21.039 --> 00:20:23.760 +it's not beautiful um I would be sort of + +00:20:23.760 --> 00:20:24.480 +ashamed to + +00:20:24.480 --> 00:20:26.159 +let anybody see that particular macro + +00:20:26.159 --> 00:20:28.000 +but I think that it would work okay + +00:20:28.000 --> 00:20:30.640 +now the more difficult thing is going to + +00:20:30.640 --> 00:20:31.440 +be + +00:20:31.440 --> 00:20:34.640 +the data variables so + +00:20:34.640 --> 00:20:37.600 +the equivalent of def vu because our two + +00:20:37.600 --> 00:20:39.360 +options for defining classes here are + +00:20:39.360 --> 00:20:41.039 +def struct and def class both of which + +00:20:41.039 --> 00:20:41.919 +required you + +00:20:41.919 --> 00:20:45.280 +to define the slots inside this macro + +00:20:45.280 --> 00:20:46.960 +itself + +00:20:46.960 --> 00:20:49.039 +so defu is top level um how do we get + +00:20:49.039 --> 00:20:51.280 +the top level this top level macro + +00:20:51.280 --> 00:20:55.039 +uh to insert slot names into these + +00:20:55.039 --> 00:20:56.240 +definitions it's + +00:20:56.240 --> 00:20:58.960 +it's possible that it'll be um that I + +00:20:58.960 --> 00:21:00.240 +could monkey patch + +00:21:00.240 --> 00:21:03.039 +uh an existing struct or an existing + +00:21:03.039 --> 00:21:04.799 +class to add a new slot into it that + +00:21:04.799 --> 00:21:05.280 +sounds + +00:21:05.280 --> 00:21:07.760 +ugly the other option would be to give + +00:21:07.760 --> 00:21:09.600 +it a server variable slot which is just + +00:21:09.600 --> 00:21:11.520 +a generalized bucket + +00:21:11.520 --> 00:21:13.760 +that holds anything that gets defined + +00:21:13.760 --> 00:21:15.520 +via def loop + +00:21:15.520 --> 00:21:16.720 +I don't like either of those solutions + +00:21:16.720 --> 00:21:18.799 +but I'm I don't see any other + +00:21:18.799 --> 00:21:22.480 +any other way of doing that so we re + +00:21:22.480 --> 00:21:25.520 +rewrite the nno declare macro to either + +00:21:25.520 --> 00:21:27.440 +be a destructor or a def class + +00:21:27.440 --> 00:21:29.840 +and we rewrite the def boom macro to + +00:21:29.840 --> 00:21:31.039 +somehow + +00:21:31.039 --> 00:21:33.039 +associate that variable name the symbol + +00:21:33.039 --> 00:21:34.480 +with the with the resulting class + +00:21:34.480 --> 00:21:36.159 +definition + +00:21:36.159 --> 00:21:37.760 +then the last question is do we use + +00:21:37.760 --> 00:21:39.600 +structure classes + +00:21:39.600 --> 00:21:41.600 +they both got their their strengths and + +00:21:41.600 --> 00:21:43.200 +their weaknesses + +00:21:43.200 --> 00:21:46.480 +the nice thing is that I mean I've got + +00:21:46.480 --> 00:21:47.520 +how many servers you're going to have + +00:21:47.520 --> 00:21:49.600 +really I've got I think less than 10 + +00:21:49.600 --> 00:21:51.919 +uh truly deranged mine might have as as + +00:21:51.919 --> 00:21:52.960 +many as + +00:21:52.960 --> 00:21:55.440 +50 let's double that to 100 100 of + +00:21:55.440 --> 00:21:56.480 +anything is not going to matter it + +00:21:56.480 --> 00:21:58.400 +doesn't matter what we use + +00:21:58.400 --> 00:22:00.159 +death structures are simpler they're + +00:22:00.159 --> 00:22:02.720 +lighter weight they're defined on top of + +00:22:02.720 --> 00:22:05.600 +the direct the c records so you know + +00:22:05.600 --> 00:22:06.960 +that's nice + +00:22:06.960 --> 00:22:08.559 +the slots don't carry very much + +00:22:08.559 --> 00:22:10.320 +information with them there's no type + +00:22:10.320 --> 00:22:11.760 +information there's no doc string for + +00:22:11.760 --> 00:22:14.480 +the slots themselves + +00:22:14.480 --> 00:22:16.559 +they can also only do single inheritance + +00:22:16.559 --> 00:22:17.919 +which some might say + +00:22:17.919 --> 00:22:21.120 +was an advantage def class each slot + +00:22:21.120 --> 00:22:22.640 +gets a lot more information associated + +00:22:22.640 --> 00:22:24.000 +with it with it which I think can be + +00:22:24.000 --> 00:22:24.480 +nice + +00:22:24.480 --> 00:22:27.120 +it can do multiple inheritance if you're + +00:22:27.120 --> 00:22:28.799 +going to go there + +00:22:28.799 --> 00:22:30.720 +they are heavier weight in particular + +00:22:30.720 --> 00:22:32.640 +their printed representation is gross + +00:22:32.640 --> 00:22:34.080 +it's enormous + +00:22:34.080 --> 00:22:35.840 +so if you see one show up in a back + +00:22:35.840 --> 00:22:37.520 +trace or in your messages buffer can + +00:22:37.520 --> 00:22:38.240 +really + +00:22:38.240 --> 00:22:39.520 +it can really blow that up and make it + +00:22:39.520 --> 00:22:41.360 +hard to read this of course won't be an + +00:22:41.360 --> 00:22:43.200 +issue because our code won't have any + +00:22:43.200 --> 00:22:46.240 +errors in it um my argument for multiple + +00:22:46.240 --> 00:22:48.320 +inheritance here is that I can imagine + +00:22:48.320 --> 00:22:51.280 +new servers falling into sort of like a + +00:22:51.280 --> 00:22:52.720 +little two by two matrix of + +00:22:52.720 --> 00:22:56.240 +of parent classes one being news versus + +00:22:56.240 --> 00:22:56.799 +mail + +00:22:56.799 --> 00:23:00.320 +so news the messages belong to somebody + +00:23:00.320 --> 00:23:00.720 +else + +00:23:00.720 --> 00:23:02.080 +you can't touch them you can't delete + +00:23:02.080 --> 00:23:03.840 +them mail meaning + +00:23:03.840 --> 00:23:06.000 +the messages are under your command + +00:23:06.000 --> 00:23:08.960 +either a local mail dealer a remote imap + +00:23:08.960 --> 00:23:11.039 +you're allowed to spool them copy them + +00:23:11.039 --> 00:23:12.640 +delete them at will + +00:23:12.640 --> 00:23:13.919 +and then the other sort of line of the + +00:23:13.919 --> 00:23:16.400 +matrix would be a local file system + +00:23:16.400 --> 00:23:19.760 +versus some kind of a you know server + +00:23:19.760 --> 00:23:20.559 +port + +00:23:20.559 --> 00:23:23.280 +remote access and that second the server + +00:23:23.280 --> 00:23:24.960 +port remote access thing might require + +00:23:24.960 --> 00:23:26.880 +authentication it might require a keep + +00:23:26.880 --> 00:23:28.559 +alive for a connection + +00:23:28.559 --> 00:23:30.159 +um it's there's going to be a process + +00:23:30.159 --> 00:23:31.600 +there rather than just file system + +00:23:31.600 --> 00:23:32.400 +commands + +00:23:32.400 --> 00:23:33.840 +so I could see if I was going to do + +00:23:33.840 --> 00:23:35.360 +multiple inheritance that's what I would + +00:23:35.360 --> 00:23:36.240 +do those two + +00:23:36.240 --> 00:23:39.039 +those two possible parent classes anyway + +00:23:39.039 --> 00:23:40.400 +that's as far as I've gotten + +00:23:40.400 --> 00:23:41.520 +I thought that I would be able to write + +00:23:41.520 --> 00:23:43.279 +more of this code before I did this talk + +00:23:43.279 --> 00:23:44.720 +but instead I spent the whole time + +00:23:44.720 --> 00:23:46.720 +messing with video codecs but that's + +00:23:46.720 --> 00:23:48.320 +where we're at and I'm going to cut + +00:23:48.320 --> 00:23:49.440 +myself off now + +00:23:49.440 --> 00:23:50.960 +I hope there are questions I hope I'm + +00:23:50.960 --> 00:23:53.440 +there to to answer your questions + +00:23:53.440 --> 00:23:55.919 +and thanks very much again to everyone + +00:23:55.919 --> 00:23:57.120 +involved + +00:23:57.120 --> 00:23:59.279 +bye diff --git a/2020/subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt b/2020/subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt new file mode 100644 index 00000000..6810a359 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt @@ -0,0 +1,1708 @@ +WEBVTT + +00:00:01.680 --> 00:00:04.480 +you are now unmuted + +00:00:04.480 --> 00:00:08.000 +okay can you guys hear me yeah + +00:00:08.000 --> 00:00:11.280 +can you guys hear me sir yep I can and + +00:00:11.280 --> 00:00:14.480 +we're live so take it away okay + +00:00:14.480 --> 00:00:17.199 +so um hello everyone my name is ferming + +00:00:17.199 --> 00:00:18.400 +I'm a programmer + +00:00:18.400 --> 00:00:20.960 +a math student from spain I've been + +00:00:20.960 --> 00:00:22.400 +using me e-max for + +00:00:22.400 --> 00:00:24.960 +two years now more or less and today I'm + +00:00:24.960 --> 00:00:26.000 +going to talk about + +00:00:26.000 --> 00:00:28.320 +a maxima computer algebra system in 2 + +00:00:28.320 --> 00:00:29.199 +max + +00:00:29.199 --> 00:00:32.239 +so let's talk about what is maxima + +00:00:32.239 --> 00:00:34.239 +well maxim is a system for manipulation + +00:00:34.239 --> 00:00:36.079 +of symbolic and numerical expression + +00:00:36.079 --> 00:00:37.920 +and it's similar in some regard to + +00:00:37.920 --> 00:00:39.440 +octave + +00:00:39.440 --> 00:00:42.160 +and it's also free software is derived + +00:00:42.160 --> 00:00:45.039 +from the maxima from the 60 from the m80 + +00:00:45.039 --> 00:00:47.120 +and it's written in common lisp which is + +00:00:47.120 --> 00:00:48.320 +a language that I really + +00:00:48.320 --> 00:00:50.719 +like I enjoy writing it so for me it's a + +00:00:50.719 --> 00:00:51.600 +plus + +00:00:51.600 --> 00:00:55.039 +okay so let's talk about the initial + +00:00:55.039 --> 00:00:57.039 +support for maxima when I first started + +00:00:57.039 --> 00:00:59.280 +using it I looked for support into Emacs + +00:00:59.280 --> 00:01:00.320 +and I found that + +00:01:00.320 --> 00:01:03.120 +there's two major modes in the main + +00:01:03.120 --> 00:01:04.640 +repository of maxima + +00:01:04.640 --> 00:01:07.200 +for remax the first one is imaxima which + +00:01:07.200 --> 00:01:09.280 +I don't know too much about it + +00:01:09.280 --> 00:01:12.000 +and the second one is maxima dot l which + +00:01:12.000 --> 00:01:13.439 +is the one I took first + +00:01:13.439 --> 00:01:16.640 +and it was pretty nice has like a major + +00:01:16.640 --> 00:01:18.080 +mode a minor mode + +00:01:18.080 --> 00:01:21.280 +a nice ripple but it also has some + +00:01:21.280 --> 00:01:23.040 +disadvantage + +00:01:23.040 --> 00:01:25.040 +and the first one is that is quite + +00:01:25.040 --> 00:01:26.479 +outdated I think + +00:01:26.479 --> 00:01:29.600 +it was from the 2007 + +00:01:29.600 --> 00:01:30.960 +so it's not tested with the current + +00:01:30.960 --> 00:01:33.280 +email version and the second one + +00:01:33.280 --> 00:01:35.520 +is that it doesn't use modern e-max + +00:01:35.520 --> 00:01:36.320 +capability + +00:01:36.320 --> 00:01:38.640 +I'm talking for example about the last + +00:01:38.640 --> 00:01:40.479 +or more latex preview + +00:01:40.479 --> 00:01:44.720 +from the last a max 27.1 I think + +00:01:44.720 --> 00:01:46.079 +and that's why is that they know + +00:01:46.079 --> 00:01:47.920 +integrated with common third party + +00:01:47.920 --> 00:01:49.600 +extension I'm talking about company for + +00:01:49.600 --> 00:01:51.520 +example third party + +00:01:51.520 --> 00:01:55.360 +yeah you know the alpa melba packages + +00:01:55.360 --> 00:01:57.280 +so uh this stock is going to be divided + +00:01:57.280 --> 00:01:58.719 +in two parts the first one is going to + +00:01:58.719 --> 00:02:00.799 +be how I maximize my date today + +00:02:00.799 --> 00:02:03.040 +in max exercise don't worry it's going + +00:02:03.040 --> 00:02:03.840 +to be + +00:02:03.840 --> 00:02:06.000 +quite easy and the second one is going + +00:02:06.000 --> 00:02:07.680 +to be why for the package + +00:02:07.680 --> 00:02:10.560 +and the list improvement that I did and + +00:02:10.560 --> 00:02:13.200 +a couple of things more maybe the future + +00:02:13.200 --> 00:02:14.480 +and where's the package right now if you + +00:02:14.480 --> 00:02:16.720 +can use it so + +00:02:16.720 --> 00:02:19.440 +let's talk about the workflow so right + +00:02:19.440 --> 00:02:21.360 +out of the box it has like an + +00:02:21.360 --> 00:02:23.040 +orimal support I didn't write this it + +00:02:23.040 --> 00:02:24.400 +was already + +00:02:24.400 --> 00:02:27.680 +in Emacs + +00:02:27.680 --> 00:02:30.319 +so that's pretty nice let's go with a + +00:02:30.319 --> 00:02:32.720 +simple example + +00:02:32.720 --> 00:02:34.480 +okay so this is an array of three + +00:02:34.480 --> 00:02:36.000 +equations and three variables + +00:02:36.000 --> 00:02:37.920 +so it's a system that can be solved and + +00:02:37.920 --> 00:02:39.840 +the solution is unique + +00:02:39.840 --> 00:02:42.560 +um so we're going to solve it right + +00:02:42.560 --> 00:02:44.120 +let's go + +00:02:44.120 --> 00:02:47.519 +solutions okay here's how you define a + +00:02:47.519 --> 00:02:48.080 +variable + +00:02:48.080 --> 00:02:52.640 +in it's called solve okay + +00:02:52.640 --> 00:02:56.480 +it's called implicit explicit + +00:02:56.480 --> 00:03:00.400 +sorry okay and now an array of + +00:03:00.400 --> 00:03:03.680 +our variables actually okay + +00:03:03.680 --> 00:03:05.760 +so first of all we have to send this + +00:03:05.760 --> 00:03:07.599 +variable to the maxima + +00:03:07.599 --> 00:03:10.400 +repo with we can do that with ctrl c + +00:03:10.400 --> 00:03:11.200 +control c + +00:03:11.200 --> 00:03:14.480 +or with the maxima send line + +00:03:14.480 --> 00:03:19.200 +okay so let's um let's put the maxima + +00:03:19.200 --> 00:03:20.560 +buffer right here + +00:03:20.560 --> 00:03:23.680 +okay let's so um + +00:03:23.680 --> 00:03:25.360 +right now we can get the solution like + +00:03:25.360 --> 00:03:27.040 +this so we call already + +00:03:27.040 --> 00:03:29.360 +uh we call this line right now control + +00:03:29.360 --> 00:03:30.239 +sequence to c + +00:03:30.239 --> 00:03:31.920 +as you can see we get like an array + +00:03:31.920 --> 00:03:33.440 +inside an array because + +00:03:33.440 --> 00:03:36.080 +uh let's see why we get this so we can + +00:03:36.080 --> 00:03:38.799 +call maxima + +00:03:38.799 --> 00:03:42.239 +help a point this will open a + +00:03:42.239 --> 00:03:44.879 +dock um buffer with all information + +00:03:44.879 --> 00:03:46.000 +about the + +00:03:46.000 --> 00:03:48.799 +solve function so we can see that this + +00:03:48.799 --> 00:03:51.360 +list of solution equations + +00:03:51.360 --> 00:03:54.560 +you can see it okay so but we no we know + +00:03:54.560 --> 00:03:56.640 +that this system only have one solution + +00:03:56.640 --> 00:03:58.239 +so we're only interested in the first + +00:03:58.239 --> 00:04:00.400 +one we can do this like pretty easily + +00:04:00.400 --> 00:04:02.080 +just to take the first one + +00:04:02.080 --> 00:04:05.120 +we can send it to the buffer so this is + +00:04:05.120 --> 00:04:06.640 +quite easy example as you can see + +00:04:06.640 --> 00:04:09.280 +they have to completion much of the help + +00:04:09.280 --> 00:04:10.400 +facilities that we have + +00:04:10.400 --> 00:04:12.319 +we can also get information about the + +00:04:12.319 --> 00:04:14.720 +symbol for example maxima + +00:04:14.720 --> 00:04:17.440 +symbol doc and we get in the and now you + +00:04:17.440 --> 00:04:17.840 +can see + +00:04:17.840 --> 00:04:19.840 +correctly in the mini buffer all the + +00:04:19.840 --> 00:04:20.959 +possible + +00:04:20.959 --> 00:04:24.080 +um parameter of the function + +00:04:24.080 --> 00:04:28.000 +right so let's continue + +00:04:28.000 --> 00:04:31.440 +okay so let's go to a more well + +00:04:31.440 --> 00:04:34.880 +complicated example to say oops + +00:04:34.880 --> 00:04:38.560 +okay so we have this + +00:04:38.560 --> 00:04:42.400 +equation and we want to go from -1 to 5 + +00:04:42.400 --> 00:04:43.919 +I want to show in a nice + +00:04:43.919 --> 00:04:46.400 +graph right first of all we begin + +00:04:46.400 --> 00:04:47.759 +sending this line to the + +00:04:47.759 --> 00:04:51.759 +maxima ripple hold it button again + +00:04:51.759 --> 00:04:54.880 +okay um so this is not ideal if you want + +00:04:54.880 --> 00:04:56.960 +to write down this equation because + +00:04:56.960 --> 00:05:00.160 +it's quite messy what is when so + +00:05:00.160 --> 00:05:03.039 +uh what's thing are where so we can call + +00:05:03.039 --> 00:05:04.479 +the function maxima + +00:05:04.479 --> 00:05:07.520 +let's say insert form okay + +00:05:07.520 --> 00:05:10.240 +and this is more easy this basically put + +00:05:10.240 --> 00:05:11.280 +text behind + +00:05:11.280 --> 00:05:14.240 +and led or mode to render it and this is + +00:05:14.240 --> 00:05:15.120 +quite easy to + +00:05:15.120 --> 00:05:19.039 +write down you can use it like in every + +00:05:19.039 --> 00:05:22.560 +expression so um first we have to call a + +00:05:22.560 --> 00:05:23.199 +library + +00:05:23.199 --> 00:05:27.280 +let's load the library library draw + +00:05:27.280 --> 00:05:29.199 +we have also completion for local + +00:05:29.199 --> 00:05:31.520 +variable and local + +00:05:31.520 --> 00:05:35.039 +libraries sorry let me try to finish + +00:05:35.039 --> 00:05:38.240 +draw okay and we send the line + +00:05:38.240 --> 00:05:40.320 +so right now we have a leverage and we + +00:05:40.320 --> 00:05:42.240 +should even have auto completion for the + +00:05:42.240 --> 00:05:43.600 +library function + +00:05:43.600 --> 00:05:47.039 +okay we have let's call draw2d + +00:05:47.039 --> 00:05:50.400 +and now we can call implicit we should + +00:05:50.400 --> 00:05:51.199 +have + +00:05:51.199 --> 00:05:54.400 +okay and we can I mean put the variable + +00:05:54.400 --> 00:05:57.520 +of equations we put the first variable d + +00:05:57.520 --> 00:05:58.639 +minus + +00:05:58.639 --> 00:06:02.319 +five d five five + +00:06:02.319 --> 00:06:05.280 +the v variable the minus five and the + +00:06:05.280 --> 00:06:06.639 +five + +00:06:06.639 --> 00:06:09.680 +okay it should be all all good so let me + +00:06:09.680 --> 00:06:11.759 +try to send it + +00:06:11.759 --> 00:06:14.639 +okay you cannot see it right now because + +00:06:14.639 --> 00:06:16.639 +I'm just sharing the maxima screen let + +00:06:16.639 --> 00:06:19.360 +me try to change that + +00:06:19.360 --> 00:06:23.520 +okay um + +00:06:23.520 --> 00:06:31.520 +okay can you plot hello + +00:06:31.520 --> 00:06:33.919 +okay so this is basically the graph that + +00:06:33.919 --> 00:06:35.440 +I can upload generates + +00:06:35.440 --> 00:06:38.800 +uh right now it's not integrated into + +00:06:38.800 --> 00:06:41.039 +into the maximum package but it's a work + +00:06:41.039 --> 00:06:42.240 +in progress + +00:06:42.240 --> 00:06:46.000 +so let's go back to Emacs + +00:06:46.000 --> 00:06:50.160 +uh where are you okay there you are okay + +00:06:50.160 --> 00:06:53.520 +okay so um + +00:06:53.520 --> 00:06:56.639 +let's continue so uh this is some of the + +00:06:56.639 --> 00:06:57.759 +things that you can use + +00:06:57.759 --> 00:07:00.000 +for your day-to-day programming in + +00:07:00.000 --> 00:07:01.919 +maxima + +00:07:01.919 --> 00:07:05.759 +let's go now with the + +00:07:05.759 --> 00:07:07.360 +okay as you can see this is just text + +00:07:07.360 --> 00:07:08.880 +that is render + +00:07:08.880 --> 00:07:11.199 +okay let's go within a slide this is how + +00:07:11.199 --> 00:07:13.440 +I use maxima a simple example you don't + +00:07:13.440 --> 00:07:14.400 +want to + +00:07:14.400 --> 00:07:16.240 +talk too much about it because everyone + +00:07:16.240 --> 00:07:17.919 +use the package in a different way + +00:07:17.919 --> 00:07:19.680 +so right now I'm going to talk about the + +00:07:19.680 --> 00:07:21.039 +original package and + +00:07:21.039 --> 00:07:23.520 +the way I change it right so the + +00:07:23.520 --> 00:07:25.120 +documentation + +00:07:25.120 --> 00:07:27.840 +of the original was great but for me it + +00:07:27.840 --> 00:07:29.680 +wasn't embedded in the code + +00:07:29.680 --> 00:07:31.840 +it was something sometimes hard to read + +00:07:31.840 --> 00:07:33.599 +like it was like a big + +00:07:33.599 --> 00:07:36.319 +chunk of comment it gave me all the + +00:07:36.319 --> 00:07:37.039 +information + +00:07:37.039 --> 00:07:40.400 +like um for me that's too much I prefer + +00:07:40.400 --> 00:07:44.240 +a cohesive small comment and then a big + +00:07:44.240 --> 00:07:45.360 +redmi will order + +00:07:45.360 --> 00:07:47.759 +all the links and information so that's + +00:07:47.759 --> 00:07:48.960 +one of the first thing I + +00:07:48.960 --> 00:07:52.080 +change um then also completion I'm a big + +00:07:52.080 --> 00:07:52.560 +fan + +00:07:52.560 --> 00:07:55.759 +I'm used to slime so I'm I love + +00:07:55.759 --> 00:07:58.639 +great auto completion so um the first + +00:07:58.639 --> 00:08:00.160 +thing that I noticed that well + +00:08:00.160 --> 00:08:01.840 +it uses an absolute function I don't + +00:08:01.840 --> 00:08:04.479 +know if you can see correctly okay + +00:08:04.479 --> 00:08:07.039 +comment dynamic is deprecated and it + +00:08:07.039 --> 00:08:08.800 +also have like this + +00:08:08.800 --> 00:08:10.720 +variable which is maximus symbol which + +00:08:10.720 --> 00:08:12.720 +is basically a big + +00:08:12.720 --> 00:08:16.160 +list of all the possible completions so + +00:08:16.160 --> 00:08:19.280 +if I load the library it's not aware of + +00:08:19.280 --> 00:08:20.960 +the new symbols or even if I + +00:08:20.960 --> 00:08:23.039 +create a variable it's not loaded so + +00:08:23.039 --> 00:08:24.240 +it's not dynamic + +00:08:24.240 --> 00:08:26.160 +so I want the first thing I want is + +00:08:26.160 --> 00:08:28.319 +dynamic completion right + +00:08:28.319 --> 00:08:31.680 +so I improve it which wasn't that hard + +00:08:31.680 --> 00:08:34.159 +I first of all create maximum completion + +00:08:34.159 --> 00:08:36.080 +which we're going to see in a moment + +00:08:36.080 --> 00:08:38.479 +and then it changes completion region so + +00:08:38.479 --> 00:08:39.200 +this is the + +00:08:39.200 --> 00:08:41.039 +improved version but the good thing is + +00:08:41.039 --> 00:08:43.760 +like I decoupled the completion function + +00:08:43.760 --> 00:08:45.839 +so I make that you can use it on your + +00:08:45.839 --> 00:08:47.600 +own so you get a prefix + +00:08:47.600 --> 00:08:50.800 +which is um like + +00:08:50.800 --> 00:08:52.560 +the thing that you're going to also + +00:08:52.560 --> 00:08:55.040 +complete you get the inferior process + +00:08:55.040 --> 00:08:56.959 +which I'm going to talk about later but + +00:08:56.959 --> 00:08:58.959 +basically it's a maxima process you can + +00:08:58.959 --> 00:08:59.760 +work with + +00:08:59.760 --> 00:09:01.760 +and you get an optional argument which + +00:09:01.760 --> 00:09:03.040 +is fuzzy finding + +00:09:03.040 --> 00:09:06.399 +okay so you can easily send a block here + +00:09:06.399 --> 00:09:07.200 +what + +00:09:07.200 --> 00:09:10.399 +uh with the propos which is a maxima + +00:09:10.399 --> 00:09:11.440 +command that gets you + +00:09:11.440 --> 00:09:13.839 +all the auto completion and then you + +00:09:13.839 --> 00:09:14.959 +process the + +00:09:14.959 --> 00:09:18.240 +the output and you return a list + +00:09:18.240 --> 00:09:20.480 +of possible completion this function can + +00:09:20.480 --> 00:09:21.600 +be easily put into + +00:09:21.600 --> 00:09:24.800 +company as you can see you just + +00:09:24.800 --> 00:09:26.640 +get maximum auxiliary inferior process + +00:09:26.640 --> 00:09:28.560 +is a process that just + +00:09:28.560 --> 00:09:32.080 +uses sorry I have of + +00:09:32.080 --> 00:09:35.360 +all the apropos and the get that symbol + +00:09:35.360 --> 00:09:36.480 +it's like uh + +00:09:36.480 --> 00:09:39.440 +like you say auxiliary let's help me uh + +00:09:39.440 --> 00:09:41.360 +for that dirty stuff + +00:09:41.360 --> 00:09:43.680 +so and process manipulation let's talk + +00:09:43.680 --> 00:09:44.640 +about + +00:09:44.640 --> 00:09:46.959 +how the maxima process was in the + +00:09:46.959 --> 00:09:47.920 +beginning + +00:09:47.920 --> 00:09:50.720 +so at first it was just one process and + +00:09:50.720 --> 00:09:52.560 +you send all of the things there + +00:09:52.560 --> 00:09:54.560 +and you move the processor here and + +00:09:54.560 --> 00:09:56.320 +there and + +00:09:56.320 --> 00:09:58.160 +there was a global state right so all + +00:09:58.160 --> 00:09:59.600 +the function depends on + +00:09:59.600 --> 00:10:02.000 +variable global variables and I don't + +00:10:02.000 --> 00:10:05.120 +like that approach I prefer more like a + +00:10:05.120 --> 00:10:07.680 +shirt to say functional like you sense + +00:10:07.680 --> 00:10:09.519 +one of things and you return + +00:10:09.519 --> 00:10:12.000 +something so it's not like a void + +00:10:12.000 --> 00:10:13.440 +function so to say + +00:10:13.440 --> 00:10:16.399 +so I change it recipe uh well this is + +00:10:16.399 --> 00:10:18.079 +the maxima start function now + +00:10:18.079 --> 00:10:20.959 +let's just create a startup process with + +00:10:20.959 --> 00:10:22.560 +this function which is maxima make + +00:10:22.560 --> 00:10:23.680 +inferior + +00:10:23.680 --> 00:10:26.880 +so this function just gets a name + +00:10:26.880 --> 00:10:30.000 +and it return a process of maxima and + +00:10:30.000 --> 00:10:31.519 +you can then manipulate it the way you + +00:10:31.519 --> 00:10:32.240 +want + +00:10:32.240 --> 00:10:35.600 +let's see a better version so this is + +00:10:35.600 --> 00:10:36.800 +the opposite right this + +00:10:36.800 --> 00:10:39.200 +remove an inferior process and delete + +00:10:39.200 --> 00:10:41.760 +the process and kill the buffer + +00:10:41.760 --> 00:10:43.440 +right so let's give an example because + +00:10:43.440 --> 00:10:45.519 +this you can see pretty easily in this + +00:10:45.519 --> 00:10:46.399 +example + +00:10:46.399 --> 00:10:50.079 +so I want to go to the scratch buffer + +00:10:50.079 --> 00:10:51.519 +which I think you can see it better + +00:10:51.519 --> 00:10:54.399 +okay so this is the way you can get a + +00:10:54.399 --> 00:10:55.760 +process with your name + +00:10:55.760 --> 00:10:58.320 +and save it into a variable right let's + +00:10:58.320 --> 00:11:00.880 +execute this so as you can see well + +00:11:00.880 --> 00:11:02.880 +I don't know if you can see big you get + +00:11:02.880 --> 00:11:03.920 +a process + +00:11:03.920 --> 00:11:05.839 +let's go to it the process called my + +00:11:05.839 --> 00:11:07.040 +maxima + +00:11:07.040 --> 00:11:09.519 +as the buffer right and if we can you + +00:11:09.519 --> 00:11:10.079 +can send + +00:11:10.079 --> 00:11:12.240 +stuff to the process right we can call + +00:11:12.240 --> 00:11:14.959 +maximus in block get a block of valid + +00:11:14.959 --> 00:11:16.880 +maxima code and just pass the variable + +00:11:16.880 --> 00:11:17.760 +the process + +00:11:17.760 --> 00:11:20.800 +and we send code to the process right we + +00:11:20.800 --> 00:11:21.519 +can + +00:11:21.519 --> 00:11:23.440 +this is useful if you have some + +00:11:23.440 --> 00:11:25.760 +expensive computation that you want + +00:11:25.760 --> 00:11:28.480 +to process laser to say so the process + +00:11:28.480 --> 00:11:29.680 +can manage it + +00:11:29.680 --> 00:11:32.640 +and when you get the results correctly + +00:11:32.640 --> 00:11:33.920 +you can also get the result from the + +00:11:33.920 --> 00:11:34.399 +process + +00:11:34.399 --> 00:11:35.920 +I mean I don't put it here but quite + +00:11:35.920 --> 00:11:38.000 +easy and then you + +00:11:38.000 --> 00:11:41.200 +removed in favor which is the way to get + +00:11:41.200 --> 00:11:42.079 +rid of the process + +00:11:42.079 --> 00:11:43.600 +and the buffer so if we call this + +00:11:43.600 --> 00:11:45.279 +function we should get rid of the + +00:11:45.279 --> 00:11:48.399 +this process and it works the processing + +00:11:48.399 --> 00:11:49.920 +is no longer + +00:11:49.920 --> 00:11:54.160 +I'm happy to continue so um + +00:11:54.160 --> 00:11:56.160 +other things that improve the package on + +00:11:56.160 --> 00:11:57.680 +my commitment during time + +00:11:57.680 --> 00:11:59.760 +I'm going good okay another thing that I + +00:11:59.760 --> 00:12:01.360 +did to the package was to add + +00:12:01.360 --> 00:12:02.560 +continue integration and continue + +00:12:02.560 --> 00:12:04.959 +delivery right so the package didn't + +00:12:04.959 --> 00:12:06.320 +have any tests + +00:12:06.320 --> 00:12:09.440 +and the code was a little bit messy so + +00:12:09.440 --> 00:12:12.959 +I add integration a test + +00:12:12.959 --> 00:12:16.560 +and test with the test simple framework + +00:12:16.560 --> 00:12:19.519 +from rocky bursting the maintainer of + +00:12:19.519 --> 00:12:20.560 +real + +00:12:20.560 --> 00:12:23.279 +good which is a great package by the way + +00:12:23.279 --> 00:12:24.079 +um + +00:12:24.079 --> 00:12:25.920 +yeah this is one example of the process + +00:12:25.920 --> 00:12:28.079 +so right now because um + +00:12:28.079 --> 00:12:29.760 +the infrastructure of the process + +00:12:29.760 --> 00:12:31.680 +management is decoupled + +00:12:31.680 --> 00:12:33.680 +so I can test it pretty easily this is + +00:12:33.680 --> 00:12:35.200 +the test function of the + +00:12:35.200 --> 00:12:37.519 +inferior running so I can check if an + +00:12:37.519 --> 00:12:39.519 +inferior is running right now + +00:12:39.519 --> 00:12:41.440 +and I can just delete it after and get + +00:12:41.440 --> 00:12:43.200 +the results + +00:12:43.200 --> 00:12:45.279 +and I also did some integration with the + +00:12:45.279 --> 00:12:46.959 +party packages the first one company of + +00:12:46.959 --> 00:12:48.639 +course I love auto completion + +00:12:48.639 --> 00:12:50.880 +the second one was hormone that was + +00:12:50.880 --> 00:12:53.839 +already there and latex with the + +00:12:53.839 --> 00:12:56.880 +um or logic insert form + +00:12:56.880 --> 00:13:00.079 +and with poly mode because um let me + +00:13:00.079 --> 00:13:02.959 +evaluate this maxima can understand lisp + +00:13:02.959 --> 00:13:03.680 +code + +00:13:03.680 --> 00:13:06.959 +well more or less it has like a + +00:13:06.959 --> 00:13:10.000 +function so to say that you can send a + +00:13:10.000 --> 00:13:11.279 +list command to the + +00:13:11.279 --> 00:13:13.600 +maxima rebel and you can understand it + +00:13:13.600 --> 00:13:14.480 +in some way so + +00:13:14.480 --> 00:13:17.839 +we can go to the maxima poly + +00:13:17.839 --> 00:13:20.959 +only maxima right you enable polymaxima + +00:13:20.959 --> 00:13:22.800 +and it creates a polymode + +00:13:22.800 --> 00:13:25.519 +which this is lisp code and this is + +00:13:25.519 --> 00:13:26.399 +maxima code + +00:13:26.399 --> 00:13:28.639 +so we can send this to the maxima ripple + +00:13:28.639 --> 00:13:30.560 +we come to c control r which + +00:13:30.560 --> 00:13:34.240 +it sends the um the current + +00:13:34.240 --> 00:13:37.760 +um area region sorry + +00:13:37.760 --> 00:13:40.160 +and we define a variable which is called + +00:13:40.160 --> 00:13:41.839 +test and as we can see we have the + +00:13:41.839 --> 00:13:44.000 +variable test right here so you can + +00:13:44.000 --> 00:13:47.360 +program in lisp and you can send it to + +00:13:47.360 --> 00:13:48.079 +maxima + +00:13:48.079 --> 00:13:50.399 +so this is pretty good pretty nice um + +00:13:50.399 --> 00:13:51.920 +working integration with + +00:13:51.920 --> 00:13:55.040 +the slime mode and with swank so you can + +00:13:55.040 --> 00:13:57.120 +actually have a completion of + +00:13:57.120 --> 00:13:59.120 +a function inside the maximal list + +00:13:59.120 --> 00:14:00.959 +package but + +00:14:00.959 --> 00:14:02.800 +this is going to take quite a while + +00:14:02.800 --> 00:14:04.399 +because it's not trivial + +00:14:04.399 --> 00:14:07.360 +so um we're the feature of maxima right + +00:14:07.360 --> 00:14:09.440 +now well we have fonts highlighting + +00:14:09.440 --> 00:14:11.519 +smart indentation uh it was already in + +00:14:11.519 --> 00:14:14.480 +the package but now it's quite better + +00:14:14.480 --> 00:14:16.880 +great help functions right now I can + +00:14:16.880 --> 00:14:18.160 +find the recommendation quite + +00:14:18.160 --> 00:14:20.800 +fast and currently the menu integration + +00:14:20.800 --> 00:14:22.160 +this is quite basic it needs to be a + +00:14:22.160 --> 00:14:23.120 +little bit improved + +00:14:23.120 --> 00:14:25.199 +uh latex support also completion the + +00:14:25.199 --> 00:14:26.720 +company and maximizer process + +00:14:26.720 --> 00:14:28.480 +integration and mini buffer I didn't + +00:14:28.480 --> 00:14:29.120 +show you + +00:14:29.120 --> 00:14:32.880 +but basically if you call global maxima + +00:14:32.880 --> 00:14:34.639 +minor mode you have the minor mode you + +00:14:34.639 --> 00:14:36.720 +call maxima mini buffer + +00:14:36.720 --> 00:14:38.399 +how are you okay mini buffer you can + +00:14:38.399 --> 00:14:40.720 +basically just write simple maxima + +00:14:40.720 --> 00:14:42.720 +command and it will give you the result + +00:14:42.720 --> 00:14:45.920 +this is like a permanent version of um + +00:14:45.920 --> 00:14:48.959 +calc so you can do it you write the + +00:14:48.959 --> 00:14:50.560 +command and you get the output uh way + +00:14:50.560 --> 00:14:52.320 +more to come I have like a list + +00:14:52.320 --> 00:14:56.079 +of issues that I put enhancement a new + +00:14:56.079 --> 00:14:58.880 +feature that I'm going to develop + +00:14:58.880 --> 00:15:01.199 +so uh the future under presence of the + +00:15:01.199 --> 00:15:03.120 +package well the package is right now + +00:15:03.120 --> 00:15:06.880 +melpa a melba stable um + +00:15:06.880 --> 00:15:10.720 +in this 0.7.6 version + +00:15:10.720 --> 00:15:13.360 +and I'm planning to include into the + +00:15:13.360 --> 00:15:15.279 +known canoe alpha + +00:15:15.279 --> 00:15:16.720 +this is the url of the package by the + +00:15:16.720 --> 00:15:18.959 +way so you can if you go to metapod you + +00:15:18.959 --> 00:15:20.079 +put maxima and + +00:15:20.079 --> 00:15:22.160 +you can download it it doesn't have too + +00:15:22.160 --> 00:15:23.199 +much dependencies + +00:15:23.199 --> 00:15:26.639 +you aware of that um and thank you very + +00:15:26.639 --> 00:15:27.120 +much + +00:15:27.120 --> 00:15:28.720 +uh this is going to be my talk these are + +00:15:28.720 --> 00:15:30.959 +my uh information + +00:15:30.959 --> 00:15:33.519 +this is my gitlab this is my page which + +00:15:33.519 --> 00:15:34.000 +I don't + +00:15:34.000 --> 00:15:37.120 +love too much and this is my email + +00:15:37.120 --> 00:15:40.240 +so um thank you very much and I will be + +00:15:40.240 --> 00:15:41.839 +answering some questions right now + +00:15:41.839 --> 00:15:45.600 +and happy hacking + +00:15:45.600 --> 00:15:49.600 +you are now unmuted thank you very much + +00:15:49.600 --> 00:15:52.720 +vermin for the great talk um okay yeah + +00:15:52.720 --> 00:15:55.759 +let's see if you have any questions + +00:15:55.759 --> 00:15:58.800 +uh yeah I'm reading like this um + +00:15:58.800 --> 00:16:01.759 +so I'm a buddy october usually right now + +00:16:01.759 --> 00:16:04.560 +okay + +00:16:04.560 --> 00:16:06.880 +maxima over october yep there are a + +00:16:06.880 --> 00:16:08.639 +couple questions + +00:16:08.639 --> 00:16:11.519 +wow maxima we're okay I don't want to I + +00:16:11.519 --> 00:16:12.160 +don't know + +00:16:12.160 --> 00:16:13.940 +october that much um + +00:16:13.940 --> 00:16:15.680 +[Music] + +00:16:15.680 --> 00:16:17.839 +like I use it like a couple of times but + +00:16:17.839 --> 00:16:18.880 +I'm not happy + +00:16:18.880 --> 00:16:24.000 +and I found the octave packets to be + +00:16:24.000 --> 00:16:27.120 +quite a little bit harder to understand + +00:16:27.120 --> 00:16:31.519 +and also that + +00:16:31.519 --> 00:16:33.839 +it didn't have too much features like I + +00:16:33.839 --> 00:16:35.680 +prefer the maximum used to + +00:16:35.680 --> 00:16:37.839 +maybe octave is better I don't I'm not + +00:16:37.839 --> 00:16:38.880 +100 sure + +00:16:38.880 --> 00:16:40.800 +I know that you can use it for similar + +00:16:40.800 --> 00:16:42.079 +stuff but + +00:16:42.079 --> 00:16:47.120 +that's it so sorry + +00:16:47.120 --> 00:16:50.959 +okay I'm in a little bit of a rush sorry + +00:16:50.959 --> 00:16:54.079 +let me drink a little blue okay + +00:16:54.079 --> 00:17:00.639 +okay + +00:17:00.639 --> 00:17:05.280 +okay how does maxima compare to sagemath + +00:17:05.280 --> 00:17:08.959 +in imax + +00:17:08.959 --> 00:17:13.360 +I mean I don't know what is sage + +00:17:13.360 --> 00:17:17.439 +math I'm sorry um so I cannot answer + +00:17:17.439 --> 00:17:18.079 +your question + +00:17:18.079 --> 00:17:21.839 +with your question I think um + +00:17:21.839 --> 00:17:25.039 +sorry but I mean maxima is ready in + +00:17:25.039 --> 00:17:26.720 +combo list that's just a preference for + +00:17:26.720 --> 00:17:28.000 +me because I like + +00:17:28.000 --> 00:17:31.120 +lisp dialect and common lisp is + +00:17:31.120 --> 00:17:36.400 +interesting um + +00:17:36.400 --> 00:17:40.480 +yeah do you plan to + +00:17:40.480 --> 00:17:42.720 +I mean a maximum organization for maxima + +00:17:42.720 --> 00:17:43.840 +code block + +00:17:43.840 --> 00:17:47.360 +yes I want to improve the um + +00:17:47.360 --> 00:17:50.720 +of maxima package but I didn't have + +00:17:50.720 --> 00:17:52.000 +enough time and I want to + +00:17:52.000 --> 00:17:54.400 +clear a little bit of the code because + +00:17:54.400 --> 00:17:58.000 +still right now + +00:17:58.000 --> 00:18:00.080 +the code is quite messy in some areas + +00:18:00.080 --> 00:18:02.080 +because I pretty much implement first + +00:18:02.080 --> 00:18:03.520 +the base function I want to + +00:18:03.520 --> 00:18:05.600 +build on top of so right now it's quite + +00:18:05.600 --> 00:18:07.120 +usable but I still have something that I + +00:18:07.120 --> 00:18:07.919 +want to improve + +00:18:07.919 --> 00:18:11.120 +so when I finish that I will + +00:18:11.120 --> 00:18:14.799 +improve the normal version I think + +00:18:14.799 --> 00:18:16.640 +it's maximizing to get into into your + +00:18:16.640 --> 00:18:18.640 +opinion yes I + +00:18:18.640 --> 00:18:21.200 +I think that the creator of maxima like + +00:18:21.200 --> 00:18:21.919 +have this + +00:18:21.919 --> 00:18:26.640 +lisp mine and probably + +00:18:26.640 --> 00:18:29.520 +that they if you go to a symbol you get + +00:18:29.520 --> 00:18:30.559 +all the information + +00:18:30.559 --> 00:18:33.520 +and that reflects that you can actually + +00:18:33.520 --> 00:18:36.480 +write your program of maxima into + +00:18:36.480 --> 00:18:40.000 +um into lisp literally because they have + +00:18:40.000 --> 00:18:40.799 +a command + +00:18:40.799 --> 00:18:42.480 +so I think that is quite easy to get + +00:18:42.480 --> 00:18:44.880 +into some university use it for + +00:18:44.880 --> 00:18:48.240 +um first um + +00:18:48.240 --> 00:18:51.200 +years so it's quite easy and I think + +00:18:51.200 --> 00:18:53.039 +with my package you can use it + +00:18:53.039 --> 00:18:56.640 +like pretty pretty easily just create a + +00:18:56.640 --> 00:18:58.960 +file and you can start typing and + +00:18:58.960 --> 00:19:00.880 +maximize quite easy to install also + +00:19:00.880 --> 00:19:04.400 +so I think yeah it's crazy and + +00:19:04.400 --> 00:19:07.600 +the page should restart I don't know why + +00:19:07.600 --> 00:19:18.320 +sorry + +00:19:18.320 --> 00:19:22.559 +strict in fixed lisp syntax + +00:19:22.559 --> 00:19:25.440 +you're talking about the maxima itself + +00:19:25.440 --> 00:19:26.240 +syntax + +00:19:26.240 --> 00:19:27.760 +or I don't understand the question + +00:19:27.760 --> 00:19:32.240 +correctly + +00:19:32.240 --> 00:19:33.679 +well I'm going to go to the next + +00:19:33.679 --> 00:19:35.440 +question is there + +00:19:35.440 --> 00:19:37.360 +support for images in maximum mode not + +00:19:37.360 --> 00:19:38.880 +right now + +00:19:38.880 --> 00:19:45.280 +the way I want to implement some imax + +00:19:45.280 --> 00:19:49.120 +things uh is there support for + +00:19:49.120 --> 00:19:51.280 +but right now it doesn't have like a if + +00:19:51.280 --> 00:19:53.360 +you could want to have a new plot + +00:19:53.360 --> 00:19:55.600 +um inside you buffer right now it's not + +00:19:55.600 --> 00:19:56.720 +possible so + +00:19:56.720 --> 00:19:59.360 +that's the thing that I maximized that + +00:19:59.360 --> 00:20:01.200 +maxima.l still doesn't + +00:20:01.200 --> 00:20:03.520 +do which university you start to use + +00:20:03.520 --> 00:20:04.720 +maxima um + +00:20:04.720 --> 00:20:08.799 +in this aragosa university from spain + +00:20:08.799 --> 00:20:11.840 +they used to maximize the um thing in + +00:20:11.840 --> 00:20:12.640 +the engineer + +00:20:12.640 --> 00:20:16.400 +and in the math also so I'm 100 sure + +00:20:16.400 --> 00:20:18.320 +right now but when I started + +00:20:18.320 --> 00:20:19.679 +are you planning to option your package + +00:20:19.679 --> 00:20:22.559 +into maxima um I don't know about that + +00:20:22.559 --> 00:20:25.440 +because uh maybe can be a little bit + +00:20:25.440 --> 00:20:26.320 +messy + +00:20:26.320 --> 00:20:30.720 +um because the maxima ripple is more + +00:20:30.720 --> 00:20:32.960 +built around like maxima itself and they + +00:20:32.960 --> 00:20:33.360 +don't + +00:20:33.360 --> 00:20:37.600 +update the interfaces that much + +00:20:37.600 --> 00:20:42.240 +I have no problem like it's okay it just + +00:20:42.240 --> 00:20:45.360 +you have to um if you want to push you + +00:20:45.360 --> 00:20:46.320 +can push in other + +00:20:46.320 --> 00:20:48.480 +repository I mean it's just changed the + +00:20:48.480 --> 00:20:49.520 +file another way + +00:20:49.520 --> 00:20:52.880 +but also the test um is going to be a + +00:20:52.880 --> 00:20:54.080 +little bit harder because I think + +00:20:54.080 --> 00:20:55.200 +they're using + +00:20:55.200 --> 00:20:59.120 +search for and I'm using + +00:20:59.120 --> 00:21:01.200 +git lab continue integration within the + +00:21:01.200 --> 00:21:02.159 +jury + +00:21:02.159 --> 00:21:06.799 +so yeah I don't think that now unmuted + +00:21:06.799 --> 00:21:10.799 +yeah it will be nice + +00:21:10.799 --> 00:21:12.799 +okay um it's possible to include + +00:21:12.799 --> 00:21:14.840 +maximizing or false similar to jupiter + +00:21:14.840 --> 00:21:16.480 +notebooks + +00:21:16.480 --> 00:21:19.919 +um I mean you can uh use maximize your + +00:21:19.919 --> 00:21:23.280 +or files and you have maximum l mod + +00:21:23.280 --> 00:21:26.320 +integrated and you can like create put + +00:21:26.320 --> 00:21:31.520 +that code into a buffer and then + +00:21:31.520 --> 00:21:34.400 +uh edited correctly but it is now not it + +00:21:34.400 --> 00:21:36.159 +doesn't have like all the features like + +00:21:36.159 --> 00:21:37.679 +other languages because + +00:21:37.679 --> 00:21:40.480 +right now uh as my understanding is + +00:21:40.480 --> 00:21:42.320 +quite basic so I still have some + +00:21:42.320 --> 00:21:45.440 +still needs some some stuff some work + +00:21:45.440 --> 00:21:47.919 +around + +00:21:47.919 --> 00:21:52.320 +okay I think that's it + +00:21:52.320 --> 00:21:56.320 +you are now unmuted + +00:21:56.320 --> 00:21:59.600 +yep so that's it uh thank you very much + +00:21:59.600 --> 00:22:01.919 +fermin for your live talk and for you + +00:22:01.919 --> 00:22:04.640 +know the live q a + +00:22:04.640 --> 00:22:07.679 +thank you all amazing uh max conf + +00:22:07.679 --> 00:22:09.840 +cheers thank you it's thanks to you all + +00:22:09.840 --> 00:22:10.720 +you guys + +00:22:10.720 --> 00:22:16.840 +it's awesome okay thank you cheers bye + +00:22:16.840 --> 00:22:19.840 +bye diff --git a/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt b/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt new file mode 100644 index 00000000..cb262355 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt @@ -0,0 +1,1675 @@ +WEBVTT + +00:00:03.600 --> 00:00:04.560 +Hello. + +00:00:04.560 --> 00:00:06.720 +Hopefully everyone is staying safe and + +00:00:06.720 --> 00:00:08.000 +staying home, + +00:00:08.000 --> 00:00:10.000 +I feel very grateful to live in a world + +00:00:10.000 --> 00:00:12.000 +today that technology and free software + +00:00:12.000 --> 00:00:13.759 +can be leveraged to connect people in + +00:00:13.759 --> 00:00:16.080 +such disconnected and difficult times, + +00:00:16.080 --> 00:00:17.840 +and to have an online conference like + +00:00:17.840 --> 00:00:19.920 +this. Hopefully you've all + +00:00:19.920 --> 00:00:22.960 +enjoyed this year's EmacsConf so far. + +00:00:22.960 --> 00:00:24.720 +Many thanks to all the people that made + +00:00:24.720 --> 00:00:26.880 +this possible. + +00:00:26.880 --> 00:00:30.000 +Anyways, welcome to my talk "Extend Emacs + +00:00:30.000 --> 00:00:30.960 +to Modern GUI + +00:00:30.960 --> 00:00:34.079 +Applications with EAF, the Emacs + +00:00:34.079 --> 00:00:35.920 +Application Framework". + +00:00:35.920 --> 00:00:38.320 +This will be my first ever talk, so + +00:00:38.320 --> 00:00:39.840 +apologies for my + +00:00:39.840 --> 00:00:43.280 +inexperience, let us begin. + +00:00:43.280 --> 00:00:46.559 +About me: my name is Matthew Zeng, you can + +00:00:46.559 --> 00:00:47.840 +also call me MT + +00:00:47.840 --> 00:00:50.640 +or Mingde. I'm a Chinese Canadian living + +00:00:50.640 --> 00:00:51.440 +in Toronto, + +00:00:51.440 --> 00:00:54.239 +Ontario. Offline: I'm an undergrad + +00:00:54.239 --> 00:00:56.079 +studying mathematics at the University + +00:00:56.079 --> 00:00:57.760 +of Waterloo. + +00:00:57.760 --> 00:01:00.480 +Online: I'm one of the admins of the + +00:01:00.480 --> 00:01:03.039 +Emacs China + +00:01:03.039 --> 00:01:06.320 +— the largest Emacs forum in China. So, + +00:01:06.320 --> 00:01:08.080 +to all Chinese listening to my talk right + +00:01:08.080 --> 00:01:10.960 +now, feel free to check it out. + +00:01:10.960 --> 00:01:14.320 +And this is a link to my GitHub profile, + +00:01:14.320 --> 00:01:16.206 +(and) to my projects I'm involved in. + +00:01:16.206 --> 00:01:18.240 +One's M-EMACS which is + +00:01:18.240 --> 00:01:20.159 +I'm the author of — a user-friendly + +00:01:20.159 --> 00:01:21.840 +full-featured Emacs configuration + +00:01:21.840 --> 00:01:22.799 +distribution, + +00:01:22.799 --> 00:01:25.040 +it is what I'm using right now, as well + +00:01:25.040 --> 00:01:26.880 +as the Emacs Application Framework + +00:01:26.880 --> 00:01:29.119 +which I help to maintain along with the + +00:01:29.119 --> 00:01:30.400 +other author + +00:01:30.400 --> 00:01:33.040 +lazycat, which of course, is today's + +00:01:33.040 --> 00:01:35.759 +topic. + +00:01:35.759 --> 00:01:38.720 +So, as you all might have already + +00:01:38.720 --> 00:01:40.960 +noticed I'm currently using Emacs + +00:01:40.960 --> 00:01:43.600 +and opening navigating closing + +00:01:43.600 --> 00:01:45.360 +all these websites that are rendered + +00:01:45.360 --> 00:01:46.159 +properly + +00:01:46.159 --> 00:01:49.200 +all within Emacs, it's all thanks to the + +00:01:49.200 --> 00:01:51.840 +EAF project. + +00:01:51.840 --> 00:01:54.000 +So, we're living in a society that's + +00:01:54.000 --> 00:01:55.920 +heavily dependent on the internet + +00:01:55.920 --> 00:01:59.520 +and multimedia, it is unavoidable to run + +00:01:59.520 --> 00:02:01.200 +to some occasion that you need to + +00:02:01.200 --> 00:02:02.880 +open a fancy website that uses + +00:02:02.880 --> 00:02:04.799 +JavaScript and CSS, + +00:02:04.799 --> 00:02:08.239 +or you need to watch some videos. However, + +00:02:08.239 --> 00:02:11.120 +due to the nature and history of Emacs, + +00:02:11.120 --> 00:02:11.840 +it cannot + +00:02:11.840 --> 00:02:13.840 +render all these modern graphics + +00:02:13.840 --> 00:02:16.400 +effectively and efficiently. + +00:02:16.400 --> 00:02:19.360 +Emacs is solely a text-based editing + +00:02:19.360 --> 00:02:20.400 +environment, + +00:02:20.400 --> 00:02:23.520 +and I argue that this is not a bad thing, + +00:02:23.520 --> 00:02:25.680 +in fact, it is one of the reasons that me + +00:02:25.680 --> 00:02:27.760 +and I believe many of you as well + +00:02:27.760 --> 00:02:29.760 +are attracted to Emacs in the first + +00:02:29.760 --> 00:02:30.879 +place. + +00:02:30.879 --> 00:02:33.760 +Unfortunately, this results in us having + +00:02:33.760 --> 00:02:35.680 +to open a dedicated web browser to + +00:02:35.680 --> 00:02:37.040 +browse the internet, + +00:02:37.040 --> 00:02:38.879 +open a dedicated video player to watch + +00:02:38.879 --> 00:02:41.440 +some videos, or a PDF renderer to read some + +00:02:41.440 --> 00:02:42.640 +documents. + +00:02:42.640 --> 00:02:45.200 +So far Emacs cannot do all these tasks on + +00:02:45.200 --> 00:02:46.000 +its own + +00:02:46.000 --> 00:02:48.080 +but can only be achieved using other + +00:02:48.080 --> 00:02:51.519 +external applications. + +00:02:51.519 --> 00:02:55.840 +So, the other author manateelazycat, + +00:02:55.840 --> 00:02:58.640 +or lazycat in short, didn't want to use + +00:02:58.640 --> 00:03:00.560 +all these external applications, + +00:03:00.560 --> 00:03:03.120 +he wanted to have an uninterrupted Emacs + +00:03:03.120 --> 00:03:04.159 +experience, + +00:03:04.159 --> 00:03:07.280 +he wanted to truly live in Emacs. + +00:03:07.280 --> 00:03:10.080 +However, it would be a lot of work to + +00:03:10.080 --> 00:03:11.040 +build this + +00:03:11.040 --> 00:03:13.519 +modern application from scratch, there's + +00:03:13.519 --> 00:03:16.239 +simply no time or research to do that. + +00:03:16.239 --> 00:03:18.800 +So, lazycat thought of utilizing existing + +00:03:18.800 --> 00:03:20.400 +applications + +00:03:20.400 --> 00:03:22.319 +and to try to make it collaborate with + +00:03:22.319 --> 00:03:24.959 +Emacs, there are many solutions available, + +00:03:24.959 --> 00:03:26.000 +one of it + +00:03:26.000 --> 00:03:28.560 +is the Emacs X Windows Manager, and I'm + +00:03:28.560 --> 00:03:30.159 +sure a lot of you already know that — + +00:03:30.159 --> 00:03:33.360 +the EXWM. However, it didn't work for him, + +00:03:33.360 --> 00:03:35.200 +because although EXWM opens the + +00:03:35.200 --> 00:03:37.440 +door to use other applications within + +00:03:37.440 --> 00:03:38.239 +Emacs, + +00:03:38.239 --> 00:03:40.879 +it as a fine window manager cannot + +00:03:40.879 --> 00:03:41.519 +modify, + +00:03:41.519 --> 00:03:43.920 +customize, or extend other software from + +00:03:43.920 --> 00:03:45.040 +Emacs. + +00:03:45.040 --> 00:03:46.799 +For example, it cannot modify the + +00:03:46.799 --> 00:03:48.480 +behavior when you press a key in + +00:03:48.480 --> 00:03:49.599 +Chromium or + +00:03:49.599 --> 00:03:52.159 +PDF viewer, therefore it cannot utilize + +00:03:52.159 --> 00:03:54.000 +the rich Emacs ecosystem that's been + +00:03:54.000 --> 00:03:57.360 +growing for almost 40 years. + +00:03:57.360 --> 00:04:00.720 +On the other hand, in the EAF browser, so, + +00:04:00.720 --> 00:04:06.206 +if you M-x eaf-open-browser-with-history, + +00:04:06.206 --> 00:04:07.200 +you can see + +00:04:07.200 --> 00:04:09.840 +on the lower half of my screen — a list of + +00:04:09.840 --> 00:04:11.920 +histories sorted by my personal + +00:04:11.920 --> 00:04:14.560 +most visited sites, and you can search + +00:04:14.560 --> 00:04:16.560 +for a site that you've been + +00:04:16.560 --> 00:04:19.440 +to or search for some keyword in a + +00:04:19.440 --> 00:04:21.840 +search engine. + +00:04:21.840 --> 00:04:24.240 +So, this is all achieved by utilizing the + +00:04:24.240 --> 00:04:25.919 +popular completion framework in the + +00:04:25.919 --> 00:04:29.280 +Emacs ecosystem — ivy. + +00:04:29.280 --> 00:04:31.120 +So, lazycat decided to develop a + +00:04:31.120 --> 00:04:33.680 +solution of his own in 2018, + +00:04:33.680 --> 00:04:36.960 +namely the EAF project, so, I joined the + +00:04:36.960 --> 00:04:42.756 +development last year, 2019. + +00:04:42.756 --> 00:04:44.000 +EAF is + +00:04:44.000 --> 00:04:47.880 +a highly customizable and extensible + +00:04:47.880 --> 00:04:49.759 +GUI application framework that extends + +00:04:49.759 --> 00:04:52.056 +Emacs to graphical capabilities using + +00:04:52.056 --> 00:04:57.840 +PyQt5, and it is not a window manager. + +00:04:57.840 --> 00:05:02.479 +Alright. So, in the README, you can see a + +00:05:02.479 --> 00:05:03.440 +list of GIFs + +00:05:03.440 --> 00:05:05.600 +showcasing all the available EAF + +00:05:05.600 --> 00:05:06.720 +applications, + +00:05:06.720 --> 00:05:09.520 +a browser, a markdown previewer, a video + +00:05:09.520 --> 00:05:12.789 +player, a PDF viewer, and more. + +00:05:12.789 --> 00:05:14.240 +Today I don't have + +00:05:14.240 --> 00:05:16.160 +enough time to demonstrate each one of + +00:05:16.160 --> 00:05:16.560 +them, + +00:05:16.560 --> 00:05:18.720 +but I will select a couple applications + +00:05:18.720 --> 00:05:21.120 +to show you. + +00:05:21.120 --> 00:05:24.240 +So, since we are already using EAF browser, + +00:05:24.240 --> 00:05:27.840 +we'll start with this. Besides using the + +00:05:27.840 --> 00:05:29.600 +classic Control n (C-n), Control p (C-p) + +00:05:29.600 --> 00:05:32.000 +you can also use the Vim style hjkl to + +00:05:32.000 --> 00:05:33.840 +move up or down. + +00:05:33.840 --> 00:05:36.320 +Also, Meta Shift comma (M-<) or g (moves) to the + +00:05:36.320 --> 00:05:37.280 +beginning of page, + +00:05:37.280 --> 00:05:39.120 +Meta Shift period (M->) or capital g (moves) to + +00:05:39.120 --> 00:05:41.199 +the end of page. + +00:05:41.199 --> 00:05:45.306 +Vimium and Surfingkeys + +00:05:45.306 --> 00:05:46.479 +are popular keyboard-based + +00:05:46.479 --> 00:05:48.400 +browsing techniques in Chrome, + +00:05:48.400 --> 00:05:50.479 +and they've imported here as well. You + +00:05:50.479 --> 00:05:52.720 +can press f to toggle markers pointing + +00:05:52.720 --> 00:05:53.039 +to + +00:05:53.039 --> 00:05:55.280 +all the links in the current page, say, I + +00:05:55.280 --> 00:05:56.960 +want to visit the wiki — + +00:05:56.960 --> 00:05:59.680 +which comes very very handy when you + +00:05:59.680 --> 00:06:02.400 +want to configure EAF to your liking, + +00:06:02.400 --> 00:06:04.720 +so you see the marker on top of wiki is + +00:06:04.720 --> 00:06:05.440 +dd, + +00:06:05.440 --> 00:06:08.479 +press dd and Enter (RET), and now + +00:06:08.479 --> 00:06:10.240 +you are navigated to this link, so you + +00:06:10.240 --> 00:06:13.840 +don't need to use your mouse at all. + +00:06:13.840 --> 00:06:16.560 +So, a full list of key bindings can be + +00:06:16.560 --> 00:06:17.680 +found when you (press) + +00:06:17.680 --> 00:06:20.560 +Control h m (C-h m), just as any other Emacs major + +00:06:20.560 --> 00:06:21.199 +mode, + +00:06:21.199 --> 00:06:22.960 +so you don't have to remember everything… + +00:06:22.960 --> 00:06:25.600 +all the key bindings I said to you. + +00:06:25.600 --> 00:06:28.560 +So, this is a global binding application + +00:06:28.560 --> 00:06:30.960 +to every other EAF application as well. + +00:06:30.960 --> 00:06:36.720 +You can find it under the wiki in the + +00:06:36.720 --> 00:06:37.600 +keybindings + +00:06:37.600 --> 00:06:40.639 +section, so press f again and use + +00:06:40.639 --> 00:06:44.240 +ns, press Enter (RET), now you're in the + +00:06:44.240 --> 00:06:45.600 +keybindings web page. + +00:06:45.600 --> 00:06:47.520 +You can see all of the keybindings + +00:06:47.520 --> 00:06:49.280 +available in every + +00:06:49.280 --> 00:06:53.919 +EAF application, and you can try them out, + +00:06:53.919 --> 00:06:56.479 +and you can customize your key bindings + +00:06:56.479 --> 00:06:57.956 +using eaf-bind-key, + +00:06:57.956 --> 00:07:00.240 +you can customize Control n (C-n) as + +00:07:00.240 --> 00:07:02.960 +in the web page + +00:07:02.960 --> 00:07:05.759 +to scroll up in the EAF PDF viewer, or you + +00:07:05.759 --> 00:07:06.639 +can unbind + +00:07:06.639 --> 00:07:08.806 +an existing binding using + +00:07:08.806 --> 00:07:10.000 +eaf-bind-key, + +00:07:10.000 --> 00:07:14.840 +bind it to nil, so it doesn't bind to + +00:07:14.840 --> 00:07:16.160 +anything. + +00:07:16.160 --> 00:07:20.319 +Okay, so, here comes the important part, + +00:07:20.319 --> 00:07:22.479 +if you want to customize EAF, you should + +00:07:22.479 --> 00:07:25.440 +visit the customization page in the wiki. + +00:07:25.440 --> 00:07:28.840 +Now, I press Meta b to go back in + +00:07:28.840 --> 00:07:30.240 +history, and + +00:07:30.240 --> 00:07:32.960 +go to the customization page, press f, + +00:07:32.960 --> 00:07:34.080 +press ad, + +00:07:34.080 --> 00:07:36.639 +Enter, and now we're in the customization + +00:07:36.639 --> 00:07:37.360 +page. + +00:07:37.360 --> 00:07:39.280 +So, the first customization option you + +00:07:39.280 --> 00:07:42.639 +see is dark mode, + +00:07:42.639 --> 00:07:44.479 +let's say, if you want to turn on the dark + +00:07:44.479 --> 00:07:46.720 +mode for EAF browser, + +00:07:46.720 --> 00:07:48.479 +and you don't want to use your mouse to + +00:07:48.479 --> 00:07:49.919 +do all this stuff. + +00:07:49.919 --> 00:07:53.360 +You press c, and you can select + +00:07:53.360 --> 00:07:55.840 +c to toggle the caret browsing, you can + +00:07:55.840 --> 00:07:58.240 +see a lot of markers available, + +00:07:58.240 --> 00:08:01.280 +poped up again, but they're not + +00:08:01.280 --> 00:08:02.720 +on top of links but instead of + +00:08:02.720 --> 00:08:03.599 +paragraphs. + +00:08:03.599 --> 00:08:05.360 +You select the paragraph of your choice, + +00:08:05.360 --> 00:08:06.639 +in this case you want + +00:08:06.639 --> 00:08:10.240 +ls which comes here, + +00:08:10.240 --> 00:08:12.720 +and then you just move the + +00:08:12.720 --> 00:08:15.120 +cursor like what you always do + +00:08:15.120 --> 00:08:18.800 +in Emacs, and now you select everything + +00:08:18.800 --> 00:08:26.479 +and use Meta w (M-w) to copy the text. + +00:08:26.479 --> 00:08:29.199 +Now, we (run) Meta Shift colon (M-:) to evaluate + +00:08:29.199 --> 00:08:30.960 +what we just copied, + +00:08:30.960 --> 00:08:35.120 +and set that to true, and + +00:08:35.120 --> 00:08:38.320 +press r or F5 to refresh the page, + +00:08:38.320 --> 00:08:42.159 +voilà we have the dark mode enabled. + +00:08:42.159 --> 00:08:44.880 +So, there are…, well, let's toggle + +00:08:44.880 --> 00:08:46.160 +it back off for now. + +00:08:46.160 --> 00:08:49.360 +Now, we (run) Meta Shift colon (M-:) again, + +00:08:49.360 --> 00:08:51.600 +and we find the one we just used, and + +00:08:51.600 --> 00:08:53.519 +change it back to false, + +00:08:53.519 --> 00:08:56.880 +and refresh the page, back in the light + +00:08:56.880 --> 00:08:59.360 +mode. + +00:08:59.360 --> 00:09:02.160 +So, there are many other customization + +00:09:02.160 --> 00:09:03.680 +options available, you can either + +00:09:03.680 --> 00:09:05.920 +evaluate like what we just did or add it + +00:09:05.920 --> 00:09:08.000 +to your Emacs configuration file. + +00:09:08.000 --> 00:09:11.680 +So, in this wiki…, + +00:09:11.680 --> 00:09:14.399 +you can make the EAF browser to + +00:09:14.399 --> 00:09:16.320 +continue where you left off + +00:09:16.320 --> 00:09:20.160 +similar to the Chromium setting. + +00:09:20.160 --> 00:09:22.800 +You can make EAF the default browser + +00:09:22.800 --> 00:09:23.839 +(in) Emacs by + +00:09:23.839 --> 00:09:26.720 +aliasing browse-web to + +00:09:26.720 --> 00:09:27.680 +eaf-open-browser, + +00:09:27.680 --> 00:09:31.200 +or set the browse-url-browser-function to + +00:09:31.200 --> 00:09:33.519 +eaf-open-browser, there's just some tricks. + +00:09:33.519 --> 00:09:34.480 +And there (is) also + +00:09:34.480 --> 00:09:37.920 +an experimental adblocker currently + +00:09:37.920 --> 00:09:41.680 +in place, therefore it can + +00:09:41.680 --> 00:09:44.720 +block some elements but not all, so + +00:09:44.720 --> 00:09:47.279 +we really encourage people to help us + +00:09:47.279 --> 00:09:48.240 +test out and + +00:09:48.240 --> 00:09:51.440 +add more conditions in. + +00:09:51.440 --> 00:09:54.560 +So, you can…, the EAF Browser is able to + +00:09:54.560 --> 00:09:55.760 +download + +00:09:55.760 --> 00:09:57.680 +any files from the internet, and it will + +00:09:57.680 --> 00:10:04.000 +be downloaded using Aria2. + +00:10:04.000 --> 00:10:05.339 +You can also customize + +00:10:05.339 --> 00:10:07.200 +the eaf-browser-download-path + +00:10:07.200 --> 00:10:11.120 +using eaf-setq, it's a function that we + +00:10:11.120 --> 00:10:13.623 +defined similar to setq, + +00:10:13.623 --> 00:10:15.040 +the normal setq we know. + +00:10:15.040 --> 00:10:16.480 +So, by default the download file is + +00:10:16.480 --> 00:10:18.160 +stored in your home directory slash + +00:10:18.160 --> 00:10:19.600 +downloads, + +00:10:19.600 --> 00:10:20.800 +and you can change that whenever you + +00:10:20.800 --> 00:10:22.720 +want. You can also disable + +00:10:22.720 --> 00:10:26.079 +saving browsing history, so, remember + +00:10:26.079 --> 00:10:27.089 +when I press…, + +00:10:27.089 --> 00:10:28.959 +when I use M-x eaf-open-browser's + +00:10:28.959 --> 00:10:30.480 +history, I see all the + +00:10:30.480 --> 00:10:32.079 +histories here, but if you want more + +00:10:32.079 --> 00:10:33.680 +privacy, you don't want that to be + +00:10:33.680 --> 00:10:35.360 +available at all. You can turn it off + +00:10:35.360 --> 00:10:37.356 +easily with eaf-setq, + +00:10:37.356 --> 00:10:40.640 +and set that remember-history to false. + +00:10:40.640 --> 00:10:42.399 +You can also set your default search + +00:10:42.399 --> 00:10:43.839 +engine. + +00:10:43.839 --> 00:10:47.200 +Right now we have Google, although + +00:10:47.200 --> 00:10:50.480 +not really good but… Google and also + +00:10:50.480 --> 00:10:53.600 +DuckDuckGo which is a better search engine, + +00:10:53.600 --> 00:10:57.360 +well, yeah, ethically better search + +00:10:57.360 --> 00:10:59.360 +engine. + +00:10:59.360 --> 00:11:02.560 +So, you can also configure + +00:11:02.560 --> 00:11:05.040 +the zoom. The default zoom of your + +00:11:05.040 --> 00:11:07.600 +browser is 1.0, you can convert + +00:11:07.600 --> 00:11:10.000 +default-zoom to 1.25, so when + +00:11:10.000 --> 00:11:11.920 +you open any web page, it will be + +00:11:11.920 --> 00:11:17.360 +zoomed by default. You can + +00:11:17.360 --> 00:11:20.399 +also disable JavaScript, although I + +00:11:20.399 --> 00:11:22.240 +personally don't really suggest you to + +00:11:22.240 --> 00:11:23.440 +do, because it will + +00:11:23.440 --> 00:11:26.240 +basically break a lot of our features, + +00:11:26.240 --> 00:11:28.480 +because a lot of the browser + +00:11:28.480 --> 00:11:29.519 +related features + +00:11:29.519 --> 00:11:33.760 +must be implemented using JavaScript, + +00:11:33.760 --> 00:11:35.440 +but yeah, you can do it if you really + +00:11:35.440 --> 00:11:37.920 +want to. And there's also some + +00:11:37.920 --> 00:11:41.519 +customization on EAF Camera + +00:11:41.519 --> 00:11:47.760 +you can do as well. + +00:11:47.760 --> 00:11:52.399 +Let's move on to EAF PDF Viewer. + +00:11:52.399 --> 00:11:56.079 +Now, let's open + +00:11:56.079 --> 00:11:59.440 +the PDF file using EAF. + +00:11:59.440 --> 00:12:01.519 +So, that's one something already here, but + +00:12:01.519 --> 00:12:02.720 +let's open it here. + +00:12:02.720 --> 00:12:06.079 +So, eaf-open, and + +00:12:06.079 --> 00:12:08.160 +select "Introduction to Programming in + +00:12:08.160 --> 00:12:11.440 +Emacs Lisp". + +00:12:11.440 --> 00:12:13.760 +I have it already open, but it's okay. + +00:12:13.760 --> 00:12:17.040 +So, you have the file, + +00:12:17.040 --> 00:12:20.160 +you have other files displayed… + +00:12:20.160 --> 00:12:22.800 +you have all the pages display, sorry. + +00:12:23.200 --> 00:12:27.040 +There are 273 pages in total, but notice + +00:12:27.040 --> 00:12:29.279 +how fast it is to browse + +00:12:29.279 --> 00:12:31.440 +all the pages, it is blazingly fast, + +00:12:31.440 --> 00:12:33.519 +that's all thanks to Python and + +00:12:33.519 --> 00:12:37.040 +MuPDF which you don't really get from + +00:12:37.040 --> 00:12:40.880 +Emacs Lisp. + +00:12:40.880 --> 00:12:43.600 +So, let's say if I want to jump to page + +00:12:43.600 --> 00:12:48.639 +50. We press p and Enter 50. + +00:12:48.639 --> 00:12:53.279 +And here we are, we are at page 50. + +00:12:53.279 --> 00:12:55.440 +You can look at the lower right to + +00:12:55.440 --> 00:12:58.880 +verify the page you're on. + +00:12:58.880 --> 00:13:05.120 +You can use i to toggle dark mode + +00:13:05.120 --> 00:13:07.839 +as expected. Let's say you want to + +00:13:07.839 --> 00:13:08.240 +find + +00:13:08.240 --> 00:13:11.519 +table of contents, so use Control s — + +00:13:11.519 --> 00:13:15.680 +the Emacs default binding for I-search, + +00:13:15.680 --> 00:13:19.360 +and search for a "table of contents", + +00:13:19.360 --> 00:13:21.680 +here we are, it is highlighted for you, + +00:13:21.680 --> 00:13:23.120 +and you can Control s for more but + +00:13:23.120 --> 00:13:26.006 +there's only one match, + +00:13:26.006 --> 00:13:27.200 +you (press) Control g (C-g) to + +00:13:27.200 --> 00:13:28.800 +disable the highlight, + +00:13:28.800 --> 00:13:30.880 +and you see a lot of options for you to + +00:13:30.880 --> 00:13:32.320 +go. + +00:13:32.320 --> 00:13:35.040 +Okay. Let's say, if you want to go to the + +00:13:35.040 --> 00:13:36.240 +preface. + +00:13:36.240 --> 00:13:39.519 +That is, you press f which is + +00:13:39.519 --> 00:13:40.639 +also similar to + +00:13:40.639 --> 00:13:44.240 +EAF browser, you press f for Vimium, + +00:13:44.240 --> 00:13:47.760 +and you see the marker, now change to wn, + +00:13:47.760 --> 00:13:50.160 +press wn, and then you can go to the + +00:13:50.160 --> 00:13:51.279 +preface. + +00:13:51.279 --> 00:13:54.320 +Now, we are at the preface. + +00:13:54.320 --> 00:13:56.480 +So, now you finish reading, you want to + +00:13:56.480 --> 00:13:57.600 +save your progress? + +00:13:57.600 --> 00:13:59.440 +No worries, it is already saved for you + +00:13:59.440 --> 00:14:01.199 +by EAF. You can safely + +00:14:01.199 --> 00:14:04.240 +close the document using x, + +00:14:04.240 --> 00:14:07.519 +and opening again, eaf-open, + +00:14:07.519 --> 00:14:10.560 +and the file…, see you are at + +00:14:10.560 --> 00:14:14.000 +preface again. You're right at where + +00:14:14.000 --> 00:14:16.560 +you left of. + +00:14:16.560 --> 00:14:19.440 +You can also use M-x org-store-link, or + +00:14:19.440 --> 00:14:20.480 +Control c l (C-c l) — + +00:14:20.480 --> 00:14:23.279 +which I prefer, if you want to save a + +00:14:23.279 --> 00:14:24.480 +particular page in + +00:14:24.480 --> 00:14:28.240 +a Org mode file. Now, + +00:14:28.240 --> 00:14:30.320 +I go back to my presentation doc, I don't + +00:14:30.320 --> 00:14:31.760 +need this anymore. + +00:14:31.760 --> 00:14:35.600 +So, you just (press) Control c Control l (C-c C-l), + +00:14:35.600 --> 00:14:39.120 +or I think M-x org-insert-link. + +00:14:39.120 --> 00:14:41.040 +You can find the file right here, and + +00:14:41.040 --> 00:14:42.399 +you press Enter (RET), + +00:14:42.399 --> 00:14:44.320 +and you press Enter (RET) for the description + +00:14:44.320 --> 00:14:46.480 +again, and now it's right here, + +00:14:46.480 --> 00:14:50.720 +and Control c Control o (C-c C-o) to open it. Voilà ! + +00:14:50.720 --> 00:14:54.000 +You're back. + +00:14:54.000 --> 00:14:57.120 +Let's now demonstrate the EAF Video + +00:14:57.120 --> 00:14:58.880 +Player. + +00:14:58.880 --> 00:15:02.639 +So, M-x eaf-open, you use eaf-open whenever + +00:15:02.639 --> 00:15:03.279 +you want to + +00:15:03.279 --> 00:15:06.079 +open some file. You use eaf-open-browser + +00:15:06.079 --> 00:15:07.279 +if you want to use some + +00:15:07.279 --> 00:15:09.920 +actual application that's not really + +00:15:09.920 --> 00:15:11.199 +related to a file. + +00:15:11.199 --> 00:15:14.800 +So, eaf-open, and select the video + +00:15:14.800 --> 00:15:15.600 +you want, so, + +00:15:15.600 --> 00:15:18.320 +video-demo, I already have a video + +00:15:18.320 --> 00:15:19.040 +demo + +00:15:19.040 --> 00:15:21.839 +ready, because I recorded a video of + +00:15:21.839 --> 00:15:22.720 +the demo + +00:15:22.720 --> 00:15:26.000 +of the EAF Camera, have a look. + +00:15:26.000 --> 00:15:28.079 +Let's move to the beginning, "Hello people + +00:15:28.079 --> 00:15:29.279 +from the future! + +00:15:29.279 --> 00:15:32.399 +This is a demo of the EAF Video Player + +00:15:32.399 --> 00:15:35.199 +that demos the EAF Camera feature, + +00:15:35.199 --> 00:15:37.440 +so, as you can see on the screen of me + +00:15:37.440 --> 00:15:38.639 +inside my camera, + +00:15:38.639 --> 00:15:40.959 +and the screen is actually with all + +00:15:40.959 --> 00:15:42.880 +within Emacs. + +00:15:42.880 --> 00:15:45.273 +(Right, the video itself is as well, haha.) + +00:15:45.273 --> 00:15:46.079 +You can open this + +00:15:46.079 --> 00:15:49.839 +using eaf-open-camera + +00:15:49.839 --> 00:15:53.040 +which I'm already into, and you can + +00:15:53.040 --> 00:15:53.600 +press + +00:15:53.600 --> 00:15:56.720 +p to capture a photo, + +00:15:56.720 --> 00:15:59.680 +so, the photo is by default stored at + +00:15:59.680 --> 00:16:02.773 +your $HOME/Downloads directory, + +00:16:02.773 --> 00:16:04.320 +and you can modify it + +00:16:04.320 --> 00:16:07.839 +freely. If you go here, and you can see + +00:16:07.839 --> 00:16:09.519 +the camera stored + +00:16:09.519 --> 00:16:13.759 +right here." + +00:16:13.759 --> 00:16:16.240 +So, you press Space (SPC) to pause, what I used + +00:16:16.240 --> 00:16:17.120 +here is + +00:16:17.120 --> 00:16:20.320 +the eaf-open-this-from-dired. + +00:16:20.320 --> 00:16:22.959 +Basically, in dired + +00:16:22.959 --> 00:16:23.839 +you select + +00:16:23.839 --> 00:16:26.959 +the file that should be opened by + +00:16:26.959 --> 00:16:30.320 +EAF, and I used that. It detects that + +00:16:30.320 --> 00:16:32.720 +it wants to use the EAF Image Viewer, so + +00:16:32.720 --> 00:16:35.839 +I accidentally tested EAF Image Viewer + +00:16:35.839 --> 00:16:40.240 +before I noticed. That gives the + +00:16:40.240 --> 00:16:43.680 +image of the photo I just took + +00:16:43.680 --> 00:16:47.040 +using EAF Camera. As you can see, you + +00:16:47.040 --> 00:16:47.360 +can + +00:16:47.360 --> 00:16:50.720 +use hl — the Vim binding to navigate + +00:16:50.720 --> 00:16:53.256 +in the timestamp in the video, + +00:16:53.256 --> 00:16:55.920 +and I can use + +00:16:55.920 --> 00:17:02.320 +jk to change the volumes of the video. + +00:17:02.320 --> 00:17:05.520 +Alright. Now, you've seen all the basic + +00:17:05.520 --> 00:17:06.160 +usages + +00:17:06.160 --> 00:17:08.720 +of the EAF project, it comes the question + +00:17:08.720 --> 00:17:11.600 +of what is the magic behind it. + +00:17:11.600 --> 00:17:14.559 +All right. Let's open the hacking page in + +00:17:14.559 --> 00:17:15.919 +the wiki, + +00:17:15.919 --> 00:17:20.400 +the design is laid out in a diagram here. + +00:17:20.400 --> 00:17:25.120 +Let's put it + +00:17:25.120 --> 00:17:27.839 +side by side along with my text, so + +00:17:27.839 --> 00:17:32.320 +we can follow through. + +00:17:32.320 --> 00:17:36.080 +Right, okay. Let me…, + +00:17:36.080 --> 00:17:42.320 +sorry, let me drink some water. + +00:17:42.320 --> 00:17:46.000 +This page in the wiki went into a lot + +00:17:46.000 --> 00:17:48.160 +of detail, + +00:17:48.160 --> 00:17:49.520 +due to the time constraint I will just + +00:17:49.520 --> 00:17:51.679 +rephrase some of the ideas here, so for + +00:17:51.679 --> 00:17:53.520 +anyone interested, please have a look at + +00:17:53.520 --> 00:17:55.600 +the wiki yourself. + +00:17:55.600 --> 00:17:58.160 +The easiest way to think about EAF is + +00:17:58.160 --> 00:17:58.720 +that + +00:17:58.720 --> 00:18:01.679 +the actual GUI application is started in + +00:18:01.679 --> 00:18:02.960 +the background, + +00:18:02.960 --> 00:18:04.960 +then the frame of the application is + +00:18:04.960 --> 00:18:07.120 +attached to the appropriate location on + +00:18:07.120 --> 00:18:07.679 +the + +00:18:07.679 --> 00:18:10.720 +Emacs window. So, + +00:18:10.720 --> 00:18:13.440 +EAF linked Qt5 with Emacs using + +00:18:13.440 --> 00:18:14.960 +Elisp and Python. + +00:18:14.960 --> 00:18:17.120 +On the Python side which is colored + +00:18:17.120 --> 00:18:18.640 +yellow in the image, + +00:18:18.640 --> 00:18:20.439 +we have QGraphicsView and + +00:18:20.439 --> 00:18:22.960 +QGraphicsScene objects. + +00:18:22.960 --> 00:18:25.039 +These are used to simulate the Emacs + +00:18:25.039 --> 00:18:26.640 +window buffer design + +00:18:26.640 --> 00:18:28.640 +where QGraphicsScene is similar to + +00:18:28.640 --> 00:18:29.840 +buffers in Emacs, + +00:18:29.840 --> 00:18:31.840 +it controls the state and the content + +00:18:31.840 --> 00:18:34.240 +details of the application + +00:18:34.240 --> 00:18:41.200 +where QGraphicsView is similar to Emacs + +00:18:41.200 --> 00:18:43.200 +window. It populates the buffer + +00:18:43.200 --> 00:18:45.919 +(QGraphicsScene) to the foreground at + +00:18:45.919 --> 00:18:46.960 +the appropriate + +00:18:46.960 --> 00:18:48.573 +position. + +00:18:48.573 --> 00:18:50.320 +Whenever an EAF mode buffer + +00:18:50.320 --> 00:18:57.679 +brings to a background…. + +00:18:57.679 --> 00:18:59.679 +Whenever an EAF mode buffer brings to the + +00:18:59.679 --> 00:19:00.880 +foreground, sorry, + +00:19:00.880 --> 00:19:02.559 +a QGraphicsView instance is + +00:19:02.559 --> 00:19:05.120 +created, and whenever the buffer goes to + +00:19:05.120 --> 00:19:06.080 +the background + +00:19:06.080 --> 00:19:08.000 +the QGraphicsView instance is then + +00:19:08.000 --> 00:19:09.120 +deleted, + +00:19:09.120 --> 00:19:10.960 +while QGraphicsScene — the actual + +00:19:10.960 --> 00:19:12.480 +process — remains running in the + +00:19:12.480 --> 00:19:14.480 +background until the EAF mode buffer is + +00:19:14.480 --> 00:19:16.000 +killed. + +00:19:16.000 --> 00:19:18.320 +GPU compositing is used to ensure that + +00:19:18.320 --> 00:19:19.440 +QGraphicsView and + +00:19:19.440 --> 00:19:21.840 +QGraphicsScene is synchronized real time. + +00:19:21.840 --> 00:19:24.000 +Using QWindow::setParent function + +00:19:24.000 --> 00:19:25.679 +the QGraphicsView is attached to the + +00:19:25.679 --> 00:19:27.840 +appropriate location on the Emacs frame, + +00:19:27.840 --> 00:19:30.640 +so that although GUI applications are + +00:19:30.640 --> 00:19:32.400 +not running within Emacs, + +00:19:32.400 --> 00:19:36.160 +they look as if they were. + +00:19:36.160 --> 00:19:39.039 +When user types on the keyboard it is + +00:19:39.039 --> 00:19:41.039 +first received by the Emacs + +00:19:41.039 --> 00:19:43.520 +EAF mode buffer, and then Elisp sends + +00:19:43.520 --> 00:19:45.360 +the event to QGraphicsScene using + +00:19:45.360 --> 00:19:46.240 +D-Bus. + +00:19:46.240 --> 00:19:48.720 +When user clicks on the GUI application + +00:19:48.720 --> 00:19:50.799 +it is received by the QGraphicsView + +00:19:50.799 --> 00:19:53.280 +and processed in Python. Elisp can + +00:19:53.280 --> 00:19:55.200 +communicate with Python through D-Bus, + +00:19:55.200 --> 00:19:59.200 +in other words you can + +00:19:59.200 --> 00:20:01.360 +customize and extend Emacs not just + +00:20:01.360 --> 00:20:01.760 +using + +00:20:01.760 --> 00:20:04.480 +Elisp, and now you can use Python, this way + +00:20:04.480 --> 00:20:05.360 +one can leverage + +00:20:05.360 --> 00:20:07.039 +all the Python properties like + +00:20:07.039 --> 00:20:09.600 +multi-threading or some other stuff, + +00:20:09.600 --> 00:20:11.679 +the entire Python ecosystem can be + +00:20:11.679 --> 00:20:13.520 +utilized as well, + +00:20:13.520 --> 00:20:16.159 +such as the Qt web engine that is the + +00:20:16.159 --> 00:20:16.960 +basis for + +00:20:16.960 --> 00:20:20.640 +our EAF Browser, and PyMuPDF is the + +00:20:20.640 --> 00:20:23.360 +basis for the EAF PDF Viewer. + +00:20:23.360 --> 00:20:25.840 +This really opens the window to many + +00:20:25.840 --> 00:20:28.240 +many new possibilities to extend Emacs + +00:20:28.240 --> 00:20:32.720 +using EAF. + +00:20:32.720 --> 00:20:36.080 +All right, back here. We are always + +00:20:36.080 --> 00:20:37.760 +looking for people to join the + +00:20:37.760 --> 00:20:39.679 +development, there are many many + +00:20:39.679 --> 00:20:42.720 +more work that needs to be done, + +00:20:42.720 --> 00:20:44.640 +such as testing and debug EAF on + +00:20:44.640 --> 00:20:46.640 +more Linux distros and window managers + +00:20:46.640 --> 00:20:47.760 +such as i3 + +00:20:47.760 --> 00:20:51.200 +and stuff, you can also add new EAF + +00:20:51.200 --> 00:20:52.080 +applications, + +00:20:52.080 --> 00:20:54.240 +or debug and enhance existing EAF + +00:20:54.240 --> 00:20:55.440 +applications, + +00:20:55.440 --> 00:20:58.000 +or you can port EAF to native Wayland + +00:20:58.000 --> 00:21:00.240 +which I just discussed with + +00:21:00.240 --> 00:21:03.840 +the emacs-webkit author + +00:21:03.840 --> 00:21:07.919 +Akira Kyle, and he told me that + +00:21:07.919 --> 00:21:11.200 +EAF doesn't really work on + +00:21:11.200 --> 00:21:14.320 +native Wayland, because it uses + +00:21:14.320 --> 00:21:16.799 +XWayland, so it doesn't work on the pgtk + +00:21:16.799 --> 00:21:18.159 +port of Emacs. + +00:21:18.159 --> 00:21:20.559 +And we also need people to port EAF to + +00:21:20.559 --> 00:21:22.080 +non-free operating systems + +00:21:22.080 --> 00:21:25.600 +including Windows and macOS, + +00:21:25.600 --> 00:21:28.480 +and that's because, like, D-Bus is a Linux + +00:21:28.480 --> 00:21:30.080 +specific feature, so it doesn't really + +00:21:30.080 --> 00:21:31.360 +work on other platform. + +00:21:31.360 --> 00:21:33.039 +We need to check, replace it with some + +00:21:33.039 --> 00:21:34.640 +alternative, and + +00:21:34.640 --> 00:21:36.720 +QGraphicsScene somehow doesn't really + +00:21:36.720 --> 00:21:38.640 +work on macOS, + +00:21:38.640 --> 00:21:40.320 +and there are many other to-do lists + +00:21:40.320 --> 00:21:42.880 +available, so please have a look + +00:21:42.880 --> 00:21:45.039 +and see if there is anything you want to + +00:21:45.039 --> 00:21:46.640 +work on. + +00:21:46.640 --> 00:21:49.039 +All right. So, since this is a + +00:21:49.039 --> 00:21:51.120 +pre-recorded talk I won't be able to do + +00:21:51.120 --> 00:21:53.520 +the Q & A real time in the video. + +00:21:53.520 --> 00:21:56.080 +However, I will be around on the + +00:21:56.080 --> 00:21:57.200 +collaborative pad + +00:21:57.200 --> 00:22:00.239 +and the IRC #emacsconf, + +00:22:00.239 --> 00:22:01.360 +#emacsconf-questions + +00:22:01.360 --> 00:22:04.139 +to answer any questions when it pops up, + +00:22:04.139 --> 00:22:05.760 +and you can also submit an issue + +00:22:05.760 --> 00:22:09.120 +on the repo, and you can check the wiki + +00:22:09.120 --> 00:22:12.640 +for some other guides and tricks. + +00:22:12.640 --> 00:22:15.039 +All right. Thank you guys, and hopefully + +00:22:15.039 --> 00:22:16.000 +you find + +00:22:16.000 --> 00:22:18.320 +this EAF project very interesting, and + +00:22:18.320 --> 00:22:24.320 +enjoy the rest of EmacsConf 2020. diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt new file mode 100644 index 00000000..c60bd115 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt @@ -0,0 +1,490 @@ +WEBVTT + +00:00:02.800 --> 00:00:09.200 +I can, yes. + +00:00:09.200 --> 00:00:13.120 +Okay, yeah, so I'm Zachary Kanfer, + +00:00:13.120 --> 00:00:14.920 +let's go to the + +00:00:14.920 --> 00:00:17.520 +questions. The first question, "Why + +00:00:17.520 --> 00:00:19.119 +do we go top to bottom for time + +00:00:19.119 --> 00:00:19.840 +progression, + +00:00:19.840 --> 00:00:23.920 +and left to right for low to high?" + +00:00:23.920 --> 00:00:27.279 +Interesting, I think…, so the initial + +00:00:27.279 --> 00:00:30.000 +thing I was copying, that initial app + +00:00:30.000 --> 00:00:35.280 +work this way, and + +00:00:35.280 --> 00:00:36.960 +yeah, I mean, certainly traditional music, + +00:00:36.960 --> 00:00:38.960 +you know, on a staff + +00:00:38.960 --> 00:00:43.040 +does go left to right like this. + +00:00:43.040 --> 00:00:46.000 +I mean, going top to bottom does make + +00:00:46.000 --> 00:00:47.440 +it easier to add more beats without + +00:00:47.440 --> 00:00:48.960 +having to wrap, but certainly that could + +00:00:48.960 --> 00:00:49.920 +be managed. + +00:00:49.920 --> 00:00:52.239 +Yeah, I had not really thought about + +00:00:52.239 --> 00:00:53.760 +it, but it is definitely something worth + +00:00:53.760 --> 00:00:55.199 +looking into. + +00:00:55.199 --> 00:01:02.480 +Yeah. + +00:01:02.480 --> 00:01:05.680 +Ah, good point, thank you. Let me go ahead + +00:01:05.680 --> 00:01:06.960 +and do that. + +00:01:06.960 --> 00:01:14.240 +The entire screen… + +00:01:14.240 --> 00:01:16.880 +Okay, so the screen share should be + +00:01:16.880 --> 00:01:18.320 +starting, + +00:01:18.320 --> 00:01:21.439 +there we go. Cool, all right. + +00:01:21.439 --> 00:01:24.880 +Two, "Will you play us another song?" Not + +00:01:24.880 --> 00:01:26.640 +now, I can make some recordings of + +00:01:26.640 --> 00:01:28.080 +it, or certainly you can try it. + +00:01:28.080 --> 00:01:30.720 +I couldn't quite get the + +00:01:30.720 --> 00:01:33.119 +microphone and the webcam and everything + +00:01:33.119 --> 00:01:37.040 +to work with the sound playing now. So, + +00:01:37.040 --> 00:01:40.079 +I can record some. Also, please… + +00:01:40.079 --> 00:01:43.520 +I have put a link at the… here in the + +00:01:43.520 --> 00:01:46.640 +Etherpad, zck.org/emacsconf2020 [updated], + +00:01:46.640 --> 00:01:48.479 +where you can go and get the source, + +00:01:48.479 --> 00:01:49.920 +and you can try it yourself. There's + +00:01:49.920 --> 00:01:51.920 +no dependencies needed, so it's just all + +00:01:51.920 --> 00:01:54.560 +in Emacs. So, please, you know, try it + +00:01:54.560 --> 00:01:57.040 +yourself. + +00:01:57.040 --> 00:02:00.079 +"Any chance for an Emacs tracker or mod + +00:02:00.079 --> 00:02:01.040 +player?" + +00:02:01.040 --> 00:02:03.680 +I don't really know what a mod player + +00:02:03.680 --> 00:02:04.479 +or tracker + +00:02:04.479 --> 00:02:08.000 +are, but I mean, I'm sure + +00:02:08.000 --> 00:02:09.679 +that would be cool, maybe there's one + +00:02:09.679 --> 00:02:11.599 +on now, but I don't know. + +00:02:11.599 --> 00:02:13.920 +My musical background. So, I've played + +00:02:13.920 --> 00:02:15.200 +various instruments since about the + +00:02:15.200 --> 00:02:15.840 +third grade. + +00:02:15.840 --> 00:02:18.160 +Started recorder, play cello, I play + +00:02:18.160 --> 00:02:19.520 +guitar now. + +00:02:19.520 --> 00:02:22.560 +But yeah, so just kind of random + +00:02:22.560 --> 00:02:23.680 +instruments, and + +00:02:23.680 --> 00:02:26.959 +I guess kind of some of those + +00:02:26.959 --> 00:02:27.280 +things + +00:02:27.280 --> 00:02:30.480 +influence how I think about music. + +00:02:33.519 --> 00:02:35.360 +"Are there any open source musical + +00:02:35.360 --> 00:02:36.640 +management sample libraries that could + +00:02:36.640 --> 00:02:37.840 +be used?" + +00:02:37.840 --> 00:02:41.200 +Good question, I'm sure there are, I + +00:02:41.200 --> 00:02:42.400 +don't know any of that integrate really + +00:02:42.400 --> 00:02:43.360 +well with Emacs. + +00:02:43.360 --> 00:02:44.560 +One of the cool things that I liked + +00:02:44.560 --> 00:02:45.680 +about this is that there are no + +00:02:45.680 --> 00:02:47.440 +dependencies, + +00:02:47.440 --> 00:02:49.360 +you know, you don't need any external + +00:02:49.360 --> 00:02:50.800 +program to + +00:02:50.800 --> 00:02:53.040 +generate the music. I mean, it does + +00:02:53.040 --> 00:02:54.160 +shell out to + +00:02:54.160 --> 00:02:57.280 +to play, but that + +00:02:57.280 --> 00:02:58.640 +should be able to be done on any + +00:02:58.640 --> 00:02:59.840 +operating system, as always, you have + +00:02:59.840 --> 00:03:03.519 +something that can play WAVE files, + +00:03:03.519 --> 00:03:05.599 +but yeah, it is interesting to kind of + +00:03:05.599 --> 00:03:10.000 +try the different sounds and different + +00:03:10.000 --> 00:03:12.239 +tones that you could get with + +00:03:12.239 --> 00:03:14.400 +different instruments. + +00:03:14.400 --> 00:03:16.959 +Have I written any actual songs? + +00:03:16.959 --> 00:03:21.040 +Nothing super + +00:03:21.040 --> 00:03:23.680 +well put together, I kind of just + +00:03:23.680 --> 00:03:25.519 +been playing around with this. + +00:03:25.519 --> 00:03:27.440 +It's kind of… making this was one of + +00:03:27.440 --> 00:03:29.040 +those things where once I made it, I + +00:03:29.040 --> 00:03:30.080 +was like, okay, + +00:03:30.080 --> 00:03:31.280 +now I can play with it, and I did a + +00:03:31.280 --> 00:03:32.720 +little bit, and was like, I don't know if + +00:03:32.720 --> 00:03:33.920 +I feel like it right now. + +00:03:33.920 --> 00:03:37.280 +You know, which I've found that to + +00:03:37.280 --> 00:03:38.720 +be the case with some things that I've + +00:03:38.720 --> 00:03:39.599 +implemented + +00:03:39.599 --> 00:03:41.360 +in Emacs where it's… I make it, and then + +00:03:41.360 --> 00:03:43.519 +it's the kind of some of the desire to + +00:03:43.519 --> 00:03:44.480 +use it all the time + +00:03:44.480 --> 00:03:46.879 +goes away, but I'm sure I'll circle back + +00:03:46.879 --> 00:03:47.760 +around + +00:03:47.760 --> 00:03:51.040 +at some point especially kind of maybe + +00:03:51.040 --> 00:03:52.400 +once I add in different tones or + +00:03:52.400 --> 00:03:54.640 +something. + +00:03:54.640 --> 00:03:56.400 +I guess a similar question for + +00:03:56.400 --> 00:03:57.840 +pre-recorded sounds. Yeah, I mean, + +00:03:57.840 --> 00:04:01.120 +if it's… part of what I did, what I wrote + +00:04:01.120 --> 00:04:02.080 +was a + +00:04:02.080 --> 00:04:04.720 +WAVE generation library, so, if you kind + +00:04:04.720 --> 00:04:06.720 +of have the data, + +00:04:06.720 --> 00:04:08.400 +you could use those and chop them + +00:04:08.400 --> 00:04:10.159 +up and take certain lengths of them + +00:04:10.159 --> 00:04:13.360 +and make a WAVE file, so it's not plug and + +00:04:13.360 --> 00:04:14.959 +play right now, but you could certainly + +00:04:14.959 --> 00:04:19.120 +add those notes to do it. + +00:04:19.120 --> 00:04:22.720 +"Any MIDI mapping possibilities?" + +00:04:22.720 --> 00:04:24.560 +I haven't looked into it, but I'm sure + +00:04:24.560 --> 00:04:26.160 +you definitely could output to MIDI + +00:04:26.160 --> 00:04:28.800 +which is another benefit of having + +00:04:28.800 --> 00:04:30.400 +that multiple layers with the top layer + +00:04:30.400 --> 00:04:31.520 +is just, + +00:04:31.520 --> 00:04:33.360 +you know, if the root note is this, + +00:04:33.360 --> 00:04:35.120 +we're just two semitones up or seven + +00:04:35.120 --> 00:04:36.560 +semitones up or whatever it is. + +00:04:36.560 --> 00:04:38.160 +It should be relatively simple to + +00:04:38.160 --> 00:04:40.720 +kind of switch out that layer underneath + +00:04:40.720 --> 00:04:44.479 +from WAVE to MIDI or other things. + +00:04:44.479 --> 00:04:45.759 +"What were some of the challenges with + +00:04:45.759 --> 00:04:47.520 +writing a special mode for Emacs?" + +00:04:47.520 --> 00:04:49.759 +Interested in getting into this, not + +00:04:49.759 --> 00:04:51.040 +sure where to start. + +00:04:51.040 --> 00:04:54.960 +There… yeah, it so… + +00:04:54.960 --> 00:04:57.120 +this isn't the first mode I've written, + +00:04:57.120 --> 00:04:58.320 +so that's right…, + +00:04:58.320 --> 00:05:01.759 +certainly that helps. I actually… + +00:05:01.759 --> 00:05:05.600 +I have a video that we recorded it + +00:05:05.600 --> 00:05:08.240 +as part of EmacsNYC on making a major + +00:05:08.240 --> 00:05:09.039 +mode. + +00:05:09.039 --> 00:05:10.720 +That's basically starts from + +00:05:10.720 --> 00:05:12.639 +nothing, and kind of builds up to + +00:05:12.639 --> 00:05:15.680 +an implementation of tic-tac-toe, + +00:05:15.680 --> 00:05:17.039 +but so it kind of goes into printing + +00:05:17.039 --> 00:05:19.600 +things out and buttons and making the + +00:05:19.600 --> 00:05:21.280 +mode. + +00:05:21.280 --> 00:05:22.800 +I mean, one of the best parts about Emacs + +00:05:22.800 --> 00:05:24.560 +is, because it's so + +00:05:24.560 --> 00:05:26.479 +configurable and so introspectible, + +00:05:26.479 --> 00:05:28.479 +you can start pretty simply, + +00:05:28.479 --> 00:05:30.320 +and just kind of ask Emacs about things, + +00:05:30.320 --> 00:05:32.320 +and then make one little + +00:05:32.320 --> 00:05:34.960 +change. It's really… it's not that bad, + +00:05:34.960 --> 00:05:39.039 +so, I'll try to throw a link up on that + +00:05:39.039 --> 00:05:40.560 +page I put up, or + +00:05:40.560 --> 00:05:42.000 +please email me for whoever asked this + +00:05:42.000 --> 00:05:44.479 +question to get a link to that video, + +00:05:44.479 --> 00:05:46.240 +or just look at the source + +00:05:46.240 --> 00:05:47.919 +code of this or any other major mode. + +00:05:47.919 --> 00:05:50.479 +Emacs makes it + +00:05:50.479 --> 00:05:52.880 +pretty easy to extend + +00:05:52.880 --> 00:05:56.479 +major modes. And I think that's + +00:05:56.479 --> 00:05:57.600 +the last question + +00:05:57.600 --> 00:06:00.240 +in the Etherpad, so, thanks so much + +00:06:00.240 --> 00:06:02.479 +everybody for coming. + +00:06:04.033 --> 00:06:06.720 +(Amin: Thank you so much + +00:06:06.720 --> 00:06:09.039 +to Zachary for your awesome talk, + +00:06:09.039 --> 00:06:12.960 +and for doing live questions. + +00:06:12.960 --> 00:06:19.840 +Thank you.) Thank you. (Amin: Cheers.) diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt new file mode 100644 index 00000000..57837210 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt @@ -0,0 +1,730 @@ +WEBVTT + +00:00:04.080 --> 00:00:04.960 +Hi. + +00:00:04.960 --> 00:00:08.559 +I'm Zachary Kanfer, and this is waving + +00:00:08.559 --> 00:00:11.679 +at repetitive repetitive repetitive + +00:00:11.679 --> 00:00:15.759 +music. Over quarantine, I've been bored, + +00:00:15.759 --> 00:00:18.400 +and I found this Android app that has a + +00:00:18.400 --> 00:00:19.680 +bunch of mini-games, + +00:00:19.680 --> 00:00:23.519 +one of which lets you compose music. + +00:00:23.519 --> 00:00:26.640 +And it works, but I + +00:00:26.640 --> 00:00:28.160 +want a little bit more functionality + +00:00:28.160 --> 00:00:30.720 +than it offers, it's not very flexible. + +00:00:30.720 --> 00:00:33.760 +So, I thought what if I made this, + +00:00:33.760 --> 00:00:35.360 +and what programs could I make this + +00:00:35.360 --> 00:00:37.760 +in that are really flexible, are really + +00:00:37.760 --> 00:00:40.320 +customizable. + +00:00:40.320 --> 00:00:44.239 +Emacs. So, I looked into it, and + +00:00:44.239 --> 00:00:46.320 +Emacs can play sounds, right? If you hit + +00:00:46.320 --> 00:00:47.840 +control g a couple of times, you'll hear + +00:00:47.840 --> 00:00:49.760 +like an error tone, + +00:00:49.760 --> 00:00:51.360 +and it turns out that, that is actually + +00:00:51.360 --> 00:00:54.559 +playing a WAVE file, + +00:00:54.559 --> 00:00:58.960 +but what's a WAVE file? + +00:00:58.960 --> 00:01:01.920 +Well, it turns out that WAVE is a musical + +00:01:01.920 --> 00:01:03.440 +file format, + +00:01:03.440 --> 00:01:07.840 +or really an annoying file format. + +00:01:07.840 --> 00:01:12.080 +So, data in it can be an unsigned integer + +00:01:12.080 --> 00:01:15.360 +or a signed integer, it's not consistent, + +00:01:15.360 --> 00:01:17.920 +and it's little-endian by default which + +00:01:17.920 --> 00:01:20.320 +is not the way I like to think about it. + +00:01:20.320 --> 00:01:21.600 +Now, you can + +00:01:21.600 --> 00:01:23.733 +set a WAVE file to be big-endian, + +00:01:23.733 --> 00:01:25.200 +but if you do that, + +00:01:25.200 --> 00:01:26.600 +Emacs can't play it. + +00:01:26.600 --> 00:01:30.479 +So, little-endian it is. + +00:01:30.479 --> 00:01:33.520 +There's also duplicate data fields. + +00:01:33.520 --> 00:01:35.360 +Here are some fields that are fine, but + +00:01:35.360 --> 00:01:36.960 +then there's a fourth field that's + +00:01:36.960 --> 00:01:38.960 +calculated based on multiplying two of + +00:01:38.960 --> 00:01:40.799 +the other ones together, + +00:01:40.799 --> 00:01:42.399 +and then there's another data field + +00:01:42.399 --> 00:01:44.880 +that's… you multiply those three ones + +00:01:44.880 --> 00:01:48.479 +together. So, it's just repetitive and + +00:01:48.479 --> 00:01:50.479 +unnecessary, but you have to do it, or + +00:01:50.479 --> 00:01:54.159 +it's not a valid WAVE file. + +00:01:54.159 --> 00:01:56.479 +Also, the last part of the file is + +00:01:56.479 --> 00:01:58.159 +described as data + +00:01:58.159 --> 00:02:01.759 +or as one website I found said, + +00:02:01.759 --> 00:02:05.200 +the actual sound data. Now, + +00:02:05.200 --> 00:02:06.960 +I don't know about you but when I see + +00:02:06.960 --> 00:02:09.039 +that, I think, + +00:02:09.039 --> 00:02:12.080 +what is data? It turns out + +00:02:12.080 --> 00:02:15.120 +that sound is just a wave, and + +00:02:15.120 --> 00:02:17.760 +the data is just a bunch of measurements + +00:02:17.760 --> 00:02:19.120 +of the height of that wave forming each + +00:02:19.120 --> 00:02:20.400 +sample. + +00:02:20.400 --> 00:02:24.480 +So, this wave starts at 8 goes 9, 11, 13, + +00:02:24.480 --> 00:02:27.840 +14, 15, and then back down. If you just + +00:02:27.840 --> 00:02:29.520 +take those measurements, those numbers, + +00:02:29.520 --> 00:02:30.700 +put them in a file, + +00:02:30.700 --> 00:02:35.200 +that's all your data is. + +00:02:35.200 --> 00:02:36.560 +All right. Let's go to a demo of my + +00:02:36.560 --> 00:02:38.959 +program. + +00:02:38.959 --> 00:02:41.920 +So, this is what zmusic looks like. The + +00:02:41.920 --> 00:02:44.080 +blue highlighted row is a single beat, + +00:02:44.080 --> 00:02:48.319 +there's 16 of them in this zmusic file, + +00:02:48.319 --> 00:02:52.000 +and each dash in the row + +00:02:52.000 --> 00:02:55.040 +is a single note increasing…, starting + +00:02:55.040 --> 00:02:57.920 +really low all the way on the left and + +00:02:57.920 --> 00:02:58.959 +going up + +00:02:58.959 --> 00:03:01.680 +as we go to the right. So, if we started + +00:03:01.680 --> 00:03:02.400 +playing, + +00:03:02.400 --> 00:03:05.040 +we won't hear anything, but we'll see the + +00:03:05.040 --> 00:03:06.400 +highlighted beat is the currently + +00:03:06.400 --> 00:03:07.680 +playing one, + +00:03:07.680 --> 00:03:09.833 +and we see that it loops. + +00:03:09.833 --> 00:03:12.720 +So, we can stop it, + +00:03:12.720 --> 00:03:20.633 +and now we can click to add some notes. + +00:03:20.633 --> 00:03:30.879 +[Music] + +00:03:30.879 --> 00:03:33.120 +Even more than one note at the same time + +00:03:33.120 --> 00:03:37.333 +works. + +00:03:37.333 --> 00:03:43.920 +[Music] + +00:03:43.920 --> 00:03:45.567 +And we can even add notes + +00:03:45.567 --> 00:03:56.160 +while it's playing. + +00:03:56.160 --> 00:04:08.239 +[Music] + +00:04:08.239 --> 00:04:10.480 +Okay, here are some other features that I + +00:04:10.480 --> 00:04:12.959 +didn't have time to demo. + +00:04:12.959 --> 00:04:16.000 +So, you can save the music to a file, and + +00:04:16.000 --> 00:04:18.239 +this is interesting because normally + +00:04:18.239 --> 00:04:20.880 +if there's no note in a beat, we just + +00:04:20.880 --> 00:04:22.800 +don't play that beat, + +00:04:22.800 --> 00:04:24.639 +but if you're writing to a file you have + +00:04:24.639 --> 00:04:25.919 +to put something in, + +00:04:25.919 --> 00:04:27.840 +so when it's playing it knows to not + +00:04:27.840 --> 00:04:31.360 +make a sound there. + +00:04:31.360 --> 00:04:33.800 +We can also use different scales. + +00:04:33.800 --> 00:04:36.240 +We're using the minor pentatonic + +00:04:36.240 --> 00:04:38.080 +in the demo, but you can use the major + +00:04:38.080 --> 00:04:39.680 +scale the minor scale + +00:04:39.680 --> 00:04:40.967 +or anything else. + +00:04:40.967 --> 00:04:43.367 +And there's also keyboard support, + +00:04:43.367 --> 00:04:45.199 +but it sounds really bad, + +00:04:45.199 --> 00:04:48.240 +and I'll explain why later. + +00:04:48.240 --> 00:04:50.800 +Here are some things I learned while + +00:04:50.800 --> 00:04:53.520 +writing zmusic. + +00:04:53.520 --> 00:04:56.479 +Emacs has buttons which are great as + +00:04:56.479 --> 00:04:58.240 +long + +00:04:58.240 --> 00:04:59.919 +as you don't put two of them right next + +00:04:59.919 --> 00:05:02.160 +to each other. So, if you do that, + +00:05:02.160 --> 00:05:04.400 +mousing over one of them highlights both + +00:05:04.400 --> 00:05:06.160 +of them. + +00:05:06.160 --> 00:05:07.919 +Now, that's because a button is really + +00:05:07.919 --> 00:05:10.080 +just a series of characters with a text + +00:05:10.080 --> 00:05:11.680 +property to highlight them. + +00:05:11.680 --> 00:05:15.120 +So, the fix is, you put another character + +00:05:15.120 --> 00:05:16.479 +between the two buttons, + +00:05:16.479 --> 00:05:18.080 +then mousing over one of them only + +00:05:18.080 --> 00:05:19.759 +highlights the one you want, + +00:05:19.759 --> 00:05:21.600 +but even this doesn't work really great + +00:05:21.600 --> 00:05:22.800 +for zmusic, + +00:05:22.800 --> 00:05:25.440 +because zmusic has a lot of very + +00:05:25.440 --> 00:05:27.120 +small buttons in a row. + +00:05:27.120 --> 00:05:29.840 +So, it's really easy to accidentally put + +00:05:29.840 --> 00:05:31.600 +your cursor over the space + +00:05:31.600 --> 00:05:34.639 +and click on that instead of the button. + +00:05:34.639 --> 00:05:37.120 +So, I looked into unicode, and I found + +00:05:37.120 --> 00:05:38.160 +this character called + +00:05:38.160 --> 00:05:40.800 +a zero-width space. So, we should be able + +00:05:40.800 --> 00:05:42.560 +to put that between buttons and not be + +00:05:42.560 --> 00:05:45.120 +able to accidentally click on it. + +00:05:45.120 --> 00:05:46.960 +Unfortunately, a zero-width space isn't + +00:05:46.960 --> 00:05:50.080 +actually zero width. + +00:05:50.080 --> 00:05:51.680 +If we put a hundred of them between two + +00:05:51.680 --> 00:05:53.759 +other characters, you can see there's + +00:05:53.759 --> 00:05:54.880 +space there, + +00:05:54.880 --> 00:05:56.240 +and I think what's happening is, the + +00:05:56.240 --> 00:05:58.160 +space is zero width + +00:05:58.160 --> 00:06:01.360 +but then Emacs `put` uses one pixel between + +00:06:01.360 --> 00:06:02.800 +each pair of characters + +00:06:02.800 --> 00:06:08.080 +for the cursor, so it's almost zero width. + +00:06:08.080 --> 00:06:09.919 +Some ways to play sound that don't quite + +00:06:09.919 --> 00:06:12.960 +work! `play-sound` plays music, + +00:06:12.960 --> 00:06:14.800 +but it blocks, you can't do things like, + +00:06:14.800 --> 00:06:17.280 +set other notes or even pause the music. + +00:06:17.280 --> 00:06:19.600 +And if you throw it into async.el, it's + +00:06:19.600 --> 00:06:21.600 +silent, and I don't know why. + +00:06:21.600 --> 00:06:24.479 +So, the solution I went with is taking + +00:06:24.479 --> 00:06:25.440 +that WAVE file, + +00:06:25.440 --> 00:06:27.039 +ran into the file system, and then + +00:06:27.039 --> 00:06:29.199 +shelling out to a native executable to + +00:06:29.199 --> 00:06:30.639 +play the sound. + +00:06:30.639 --> 00:06:32.880 +And that works fine as long as you only + +00:06:32.880 --> 00:06:34.240 +do it once, + +00:06:34.240 --> 00:06:36.080 +because if you do it a couple of times at + +00:06:36.080 --> 00:06:37.600 +the same time like if you have a chord, + +00:06:37.600 --> 00:06:38.639 +and you want to play three notes + +00:06:38.639 --> 00:06:40.000 +simultaneously, + +00:06:40.000 --> 00:06:42.319 +you get this weird interference, and + +00:06:42.319 --> 00:06:43.680 +that's actually why the keyboard from + +00:06:43.680 --> 00:06:46.319 +before didn't work. + +00:06:46.319 --> 00:06:49.199 +Also, side effects have this unexpected + +00:06:49.199 --> 00:06:50.240 +impact, + +00:06:50.240 --> 00:06:53.039 +when you saw the demo it was running + +00:06:53.039 --> 00:06:55.120 +pretty smoothly, + +00:06:55.120 --> 00:06:57.680 +but if I just add one message statement + +00:06:57.680 --> 00:06:58.479 +every beat for + +00:06:58.479 --> 00:07:00.960 +debugging purposes, I was getting lag and + +00:07:00.960 --> 00:07:03.759 +jitter. + +00:07:03.759 --> 00:07:05.440 +Here's the one thing I learned about + +00:07:05.440 --> 00:07:08.319 +music theory, music theory + +00:07:08.319 --> 00:07:11.599 +is not easy to program. + +00:07:11.599 --> 00:07:12.880 +I was looking around to see what + +00:07:12.880 --> 00:07:15.440 +concepts we can use to code the scales, + +00:07:15.440 --> 00:07:16.933 +to code the notes, + +00:07:16.933 --> 00:07:18.160 +the first thing that I saw is + +00:07:18.160 --> 00:07:20.240 +scale degrees, + +00:07:20.240 --> 00:07:23.360 +and this when I looked into it, you don't + +00:07:23.360 --> 00:07:26.319 +want to program in scale degrees. + +00:07:26.319 --> 00:07:28.240 +So, you see we have the first, second, + +00:07:28.240 --> 00:07:29.759 +third, fourth, fifth, sixth, seventh but + +00:07:29.759 --> 00:07:32.080 +then it wraps around. That octave up + +00:07:32.080 --> 00:07:33.919 +is also a first, and that's because both + +00:07:33.919 --> 00:07:36.000 +of those notes are C, + +00:07:36.000 --> 00:07:38.479 +so that didn't work, and also you + +00:07:38.479 --> 00:07:39.759 +couldn't really easily + +00:07:39.759 --> 00:07:43.599 +specify a flat or sharp. You could say + +00:07:43.599 --> 00:07:47.680 +a sharp third or + +00:07:47.680 --> 00:07:50.879 +you know, a flat seventh or whatever, but + +00:07:50.879 --> 00:07:52.319 +then you kind of have these two pieces + +00:07:52.319 --> 00:07:53.759 +of data that indicate the note, and I + +00:07:53.759 --> 00:07:55.840 +didn't love that. + +00:07:55.840 --> 00:07:57.440 +So, I looked again, and I + +00:07:57.440 --> 00:07:59.280 +found intervals, + +00:07:59.280 --> 00:08:01.120 +and then I thought about it, and you + +00:08:01.120 --> 00:08:02.080 +don't really want to program in + +00:08:02.080 --> 00:08:03.440 +intervals either. + +00:08:03.440 --> 00:08:05.520 +It fixes some of the problems with scale + +00:08:05.520 --> 00:08:07.039 +degrees, you see, + +00:08:07.039 --> 00:08:08.319 +all the way on the right you have an + +00:08:08.319 --> 00:08:10.319 +octave, so you wrap to 8, and you + +00:08:10.319 --> 00:08:13.039 +go 9, 10 and that works. But you solve the + +00:08:13.039 --> 00:08:14.319 +same problem, you see you have a major + +00:08:14.319 --> 00:08:16.400 +third but below we also have a minor + +00:08:16.400 --> 00:08:18.080 +third, so you saw that problem of having + +00:08:18.080 --> 00:08:20.160 +two pieces of information. + +00:08:20.160 --> 00:08:23.360 +So, I thought about it. Music is really + +00:08:23.360 --> 00:08:27.120 +frequencies. Like an A is 440 hertz. + +00:08:27.120 --> 00:08:28.400 +So, at a low level that's what we're + +00:08:28.400 --> 00:08:29.360 +going to do, we're just going to use + +00:08:29.360 --> 00:08:30.560 +frequencies. + +00:08:30.560 --> 00:08:32.800 +And then at the one level above that, + +00:08:32.800 --> 00:08:34.159 +that's a little bit easier for humans to + +00:08:34.159 --> 00:08:35.360 +think about, + +00:08:35.360 --> 00:08:37.039 +we're going to use semitones up from the + +00:08:37.039 --> 00:08:39.519 +root, which is kind of like scale degrees, + +00:08:39.519 --> 00:08:40.959 +but instead of just counting each note + +00:08:40.959 --> 00:08:42.880 +as one more, we're going to say how many + +00:08:42.880 --> 00:08:44.560 +semitones up it is. + +00:08:44.560 --> 00:08:47.200 +So, if there's a sharp between two notes, + +00:08:47.200 --> 00:08:48.480 +that's going to be two steps up instead + +00:08:48.480 --> 00:08:50.000 +of just one. + +00:08:50.000 --> 00:08:51.279 +And then we translate those two + +00:08:51.279 --> 00:08:54.160 +frequencies, so your A is 440 hertz, + +00:08:54.160 --> 00:08:56.920 +another note might be + +00:08:56.920 --> 00:08:58.480 +613.5, + +00:08:58.480 --> 00:09:00.720 +or whatever, and that's we use the low + +00:09:00.720 --> 00:09:02.959 +level to play. + +00:09:02.959 --> 00:09:05.200 +Some future work I have, I want to add + +00:09:05.200 --> 00:09:06.480 +some drums. + +00:09:06.480 --> 00:09:08.240 +I want to make that keyboard actually + +00:09:08.240 --> 00:09:09.680 +work, + +00:09:09.680 --> 00:09:12.399 +and computers and synthesizers are + +00:09:12.399 --> 00:09:14.320 +the only place you hear a pure sine wave + +00:09:14.320 --> 00:09:16.000 +like the one we have here, + +00:09:16.000 --> 00:09:17.680 +so I want to add overtones or other + +00:09:17.680 --> 00:09:19.440 +octaves above it just to make it + +00:09:19.440 --> 00:09:23.120 +sound a little bit more realistic. + +00:09:23.120 --> 00:09:25.360 +I've put notes references and the source + +00:09:25.360 --> 00:09:26.000 +code up + +00:09:26.000 --> 00:09:30.067 +at zck.org/emacsconf2020 [updated]. + +00:09:30.067 --> 00:09:33.040 +I'm one of the organizers of EmacsNYC + +00:09:33.040 --> 00:09:36.080 +check that out. And if you take a look + +00:09:36.080 --> 00:09:38.240 +or have any thoughts, I'd love to hear + +00:09:38.240 --> 00:09:39.839 +them, and + +00:09:39.839 --> 00:09:46.160 +thanks so much for coming to my talk. diff --git a/2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt b/2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt new file mode 100644 index 00000000..43c39857 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt @@ -0,0 +1,454 @@ +WEBVTT + +00:00:00.080 --> 00:00:03.040 +Hello EmacsConf! This is John Wiegley, I'm + +00:00:03.040 --> 00:00:04.960 +one of the co-maintainers of Emacs along + +00:00:04.960 --> 00:00:06.319 +with Eli Zaretskii + +00:00:06.319 --> 00:00:09.280 +and Lars Ingebrigtsen, and I wanted to + +00:00:09.280 --> 00:00:09.840 +give you + +00:00:09.840 --> 00:00:12.639 +a technical update on what has been + +00:00:12.639 --> 00:00:14.960 +happening + +00:00:14.960 --> 00:00:17.573 +with the Emacs in the last year. + +00:00:17.573 --> 00:00:20.640 +So, specifically we have a few notes that + +00:00:20.640 --> 00:00:21.600 +I've gotten from + +00:00:21.600 --> 00:00:24.480 +a call with Eli, he's been in charge of + +00:00:24.480 --> 00:00:25.840 +directing most of the + +00:00:25.840 --> 00:00:28.000 +technical contributions on the mailing + +00:00:28.000 --> 00:00:30.160 +list and monitoring all the patches. + +00:00:30.160 --> 00:00:33.200 +So, I'm more here just as a messenger. + +00:00:33.200 --> 00:00:35.840 +He says that we have good progress and + +00:00:35.840 --> 00:00:37.120 +support for Cairo, + +00:00:37.120 --> 00:00:39.040 +this is going to be enabled by default + +00:00:39.040 --> 00:00:40.320 +in Emacs 28, + +00:00:40.320 --> 00:00:42.480 +and Cairo plus HarfBuzz is going to be + +00:00:42.480 --> 00:00:44.800 +the preferred rendering combination. + +00:00:44.800 --> 00:00:46.879 +So, Cairo support is not new, but in the + +00:00:46.879 --> 00:00:48.719 +past there were a lot of bugs in the + +00:00:48.719 --> 00:00:51.440 +code, and so it was made experimental. + +00:00:51.440 --> 00:00:52.960 +Most of those bugs have been fixed + +00:00:52.960 --> 00:00:54.960 +recently, and now it becomes the default + +00:00:54.960 --> 00:00:56.320 +in the next major version, + +00:00:56.320 --> 00:00:58.320 +which will enable several good features + +00:00:58.320 --> 00:01:00.320 +such as color emojis, if you're looking + +00:01:00.320 --> 00:01:01.680 +forward to those. + +00:01:01.680 --> 00:01:04.720 +Xft, as a result is deprecated. There are + +00:01:04.720 --> 00:01:06.560 +bugs not getting fixed in that code, it + +00:01:06.560 --> 00:01:07.760 +doesn't appear to be very well + +00:01:07.760 --> 00:01:08.720 +maintained. + +00:01:08.720 --> 00:01:10.960 +It was the most advanced font backend + +00:01:10.960 --> 00:01:13.760 +in Emacs before Cairo became dependable. + +00:01:13.760 --> 00:01:15.920 +So, now that we have a more a better + +00:01:15.920 --> 00:01:17.840 +maintained and available solution in + +00:01:17.840 --> 00:01:19.360 +Cairo, we're going to go from that, + +00:01:19.360 --> 00:01:21.839 +go from Xft to that. + +00:01:21.839 --> 00:01:23.840 +Native compilation in Lisp + +00:01:23.840 --> 00:01:26.400 +will also be landing soon. It's currently + +00:01:26.400 --> 00:01:28.080 +on a branch, but there are several people + +00:01:28.080 --> 00:01:28.799 +using it, + +00:01:28.799 --> 00:01:31.040 +they say, they're very impressed. It does + +00:01:31.040 --> 00:01:32.479 +require live GCC + +00:01:32.479 --> 00:01:35.600 +JIT to be installed for it to work, and + +00:01:35.600 --> 00:01:37.439 +this means you have to have GCC 10 + +00:01:37.439 --> 00:01:38.960 +installed. + +00:01:38.960 --> 00:01:41.040 +Execution of Emacs Lisp with native + +00:01:41.040 --> 00:01:42.240 +compilation on + +00:01:42.240 --> 00:01:45.280 +is about 2.5 times faster than the + +00:01:45.280 --> 00:01:46.159 +bytecode + +00:01:46.159 --> 00:01:48.399 +interpreter, we don't yet have any + +00:01:48.399 --> 00:01:49.439 +measurements on + +00:01:49.439 --> 00:01:51.600 +memory or how it affects resources + +00:01:51.600 --> 00:01:52.960 +besides CPU, so, + +00:01:52.960 --> 00:01:54.720 +we do look forward to having more + +00:01:54.720 --> 00:01:56.399 +numbers and analysis to see what the + +00:01:56.399 --> 00:01:58.320 +real impact of that is going to be, + +00:01:58.320 --> 00:02:01.360 +also, it may vary in compute advantage + +00:02:01.360 --> 00:02:02.799 +based on the type of workload that + +00:02:02.799 --> 00:02:04.320 +you're performing. + +00:02:04.320 --> 00:02:06.240 +A downside to the native compilation at + +00:02:06.240 --> 00:02:08.080 +the moment is that, it takes a long + +00:02:08.080 --> 00:02:10.720 +time to compile even when you're doing a + +00:02:10.720 --> 00:02:12.720 +16 core build of Emacs, + +00:02:12.720 --> 00:02:14.959 +it can still take 15 minutes to compile + +00:02:14.959 --> 00:02:15.760 +Emacs + +00:02:15.760 --> 00:02:17.840 +and all of its Lisp code + +00:02:17.840 --> 00:02:19.520 +with this enabled. + +00:02:19.520 --> 00:02:21.840 +Also, this is going to have to happen on + +00:02:21.840 --> 00:02:23.120 +every user's machine + +00:02:23.120 --> 00:02:25.360 +because we cannot distribute the native + +00:02:25.360 --> 00:02:27.520 +compilation products, they are specific + +00:02:27.520 --> 00:02:29.760 +to the processor that you might be + +00:02:29.760 --> 00:02:30.806 +running on. + +00:02:30.806 --> 00:02:33.920 +So, the Emacs distribution will remain much + +00:02:33.920 --> 00:02:35.680 +as it is now, but if you want to have the + +00:02:35.680 --> 00:02:37.760 +benefits of natively compiled + +00:02:37.760 --> 00:02:39.599 +core Lisp files, you're going to have to + +00:02:39.599 --> 00:02:41.519 +spend that time and have GCC 10 + +00:02:41.519 --> 00:02:42.400 +available + +00:02:42.400 --> 00:02:45.840 +to get that compilation support. + +00:02:45.840 --> 00:02:48.959 +The GTK only build is being prepared + +00:02:48.959 --> 00:02:52.160 +for merging. What this does is, it + +00:02:52.160 --> 00:02:52.959 +throws away + +00:02:52.959 --> 00:02:55.120 +most of the other tool kits that Emacs + +00:02:55.120 --> 00:02:56.000 +was using + +00:02:56.000 --> 00:02:59.280 +and relies only on GTK, making Emacs + +00:02:59.280 --> 00:03:01.760 +much more of a GTK application than it + +00:03:01.760 --> 00:03:03.920 +has been. + +00:03:03.920 --> 00:03:06.480 +The main issue here is that we were + +00:03:06.480 --> 00:03:08.480 +abusing GTK in some ways that weren't + +00:03:08.480 --> 00:03:09.360 +really meant, + +00:03:09.360 --> 00:03:10.879 +and now we're going to be more of a + +00:03:10.879 --> 00:03:12.879 +first club…, GTK will be more of a first + +00:03:12.879 --> 00:03:14.080 +class citizen in the + +00:03:14.080 --> 00:03:17.440 +approach and the ways that we use it, and + +00:03:17.440 --> 00:03:19.280 +be using it in the ways that the GTK + +00:03:19.280 --> 00:03:21.200 +developers intended. + +00:03:21.200 --> 00:03:23.360 +There is going to be much more support + +00:03:23.360 --> 00:03:24.640 +for xt-mouse. + +00:03:24.640 --> 00:03:27.280 +So, xt-mouse allows you to use your mouse + +00:03:27.280 --> 00:03:29.120 +inside of a terminal window, + +00:03:29.120 --> 00:03:30.799 +which you could do before, but there were + +00:03:30.799 --> 00:03:33.120 +certain aspects such as menus + +00:03:33.120 --> 00:03:36.159 +that weren't supported. So, instead of + +00:03:36.159 --> 00:03:38.239 +having kind of partial support for mouse + +00:03:38.239 --> 00:03:40.473 +inside of an XTerm, with xt-mouse, + +00:03:40.473 --> 00:03:42.879 +you get full support. This is going + +00:03:42.879 --> 00:03:44.959 +to allow + +00:03:44.959 --> 00:03:46.720 +changes in the way that things can be + +00:03:46.720 --> 00:03:48.159 +bound, the ways that + +00:03:48.159 --> 00:03:51.200 +key bindings can…, the mouse events can + +00:03:51.200 --> 00:03:53.200 +be mapped to key bindings while in + +00:03:53.200 --> 00:03:56.879 +XTerms, and yeah, little by little + +00:03:56.879 --> 00:03:58.480 +this support is being extended even + +00:03:58.480 --> 00:03:59.040 +further, + +00:03:59.040 --> 00:04:01.599 +so we look forward to seeing that + +00:04:01.599 --> 00:04:04.080 +develop in the near term. + +00:04:04.080 --> 00:04:06.239 +Once this is merged by the way, also then + +00:04:06.239 --> 00:04:08.080 +Emacs will have mouse support in every + +00:04:08.080 --> 00:04:09.840 +one of its available configurations, + +00:04:09.840 --> 00:04:12.173 +which has not been true until now. + +00:04:12.173 --> 00:04:14.680 +Emacs 27 will be soon releasing + +00:04:14.680 --> 00:04:17.519 +27.2, and the pretest for that should + +00:04:17.519 --> 00:04:19.919 +begin sometime soon after EmacsConf is + +00:04:19.919 --> 00:04:20.880 +done. + +00:04:20.880 --> 00:04:23.360 +And finally Emacs 28 is going to get + +00:04:23.360 --> 00:04:24.800 +better emoji support, + +00:04:24.800 --> 00:04:26.479 +right now emojis are registered + +00:04:26.479 --> 00:04:29.120 +internally within Emacs as symbols + +00:04:29.120 --> 00:04:31.759 +which works in some ways but does not + +00:04:31.759 --> 00:04:33.759 +support some of the special features + +00:04:33.759 --> 00:04:37.360 +of emojis such as different + +00:04:37.360 --> 00:04:40.000 +skin tones for the hand emoji or face + +00:04:40.000 --> 00:04:41.120 +emojis. + +00:04:41.120 --> 00:04:43.280 +In Emacs 28, emojis are going to have + +00:04:43.280 --> 00:04:45.199 +their own support within the + +00:04:45.199 --> 00:04:47.199 +C code, and then this is going to allow + +00:04:47.199 --> 00:04:49.360 +those types of variations and other + +00:04:49.360 --> 00:04:51.439 +emoji specific font setups. + +00:04:51.439 --> 00:04:54.639 +So, that is everything for Emacs + +00:04:54.639 --> 00:04:56.720 +in the future, I don't have a timeline + +00:04:56.720 --> 00:04:59.120 +for you on when 28 will be available, + +00:04:59.120 --> 00:05:01.520 +but 27 is going to keep improving until + +00:05:01.520 --> 00:05:02.720 +we're ready to get there. + +00:05:02.720 --> 00:05:04.906 +So, have fun with the rest of EmacsConf, + +00:05:04.906 --> 00:05:06.479 +and I hope to see you there, + +00:05:06.479 --> 00:05:09.199 +Bye. diff --git a/2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt new file mode 100644 index 00000000..3588810e --- /dev/null +++ b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt @@ -0,0 +1,2707 @@ +WEBVTT + +00:00:00.640 --> 00:00:04.160 +Okay. So, the first question is, "What is an + +00:00:04.160 --> 00:00:08.800 +example of a package currently in + +00:00:08.800 --> 00:00:12.160 +a non-ELPA repo that does not work well + +00:00:12.160 --> 00:00:13.759 +with Emacs?" + +00:00:13.759 --> 00:00:18.000 +Well, one of them is s.el, + +00:00:18.000 --> 00:00:19.760 +and this is what made me aware that + +00:00:19.760 --> 00:00:21.920 +there was an issue here that caused + +00:00:21.920 --> 00:00:25.760 +problems. Well, s.el + +00:00:25.760 --> 00:00:29.439 +is a beautifully written package + +00:00:29.439 --> 00:00:31.279 +that appears to be very useful for + +00:00:31.279 --> 00:00:32.800 +people. + +00:00:32.800 --> 00:00:36.320 +And there's just one thing wrong with it. + +00:00:36.320 --> 00:00:39.520 +It gobbled up the name space + +00:00:39.520 --> 00:00:43.680 +of symbols starting with s dash. + +00:00:43.680 --> 00:00:47.039 +And I was shocked to discover that + +00:00:47.039 --> 00:00:49.440 +somebody who had not coordinated with + +00:00:49.440 --> 00:00:51.760 +the Emacs developers at all, + +00:00:51.760 --> 00:00:55.360 +had implemented a package using such a + +00:00:55.360 --> 00:00:56.800 +short prefix, which + +00:00:56.800 --> 00:00:58.723 +isn't the right way to do things. + +00:00:58.723 --> 00:01:01.520 +Oh, by the way, the questions have moved off the + +00:01:01.520 --> 00:01:04.000 +screen, this is no good. I can continue + +00:01:04.000 --> 00:01:05.360 +answering this one, + +00:01:05.360 --> 00:01:08.880 +but I'll be stuck when this one is over. + +00:01:08.880 --> 00:01:12.159 +Anyway, so… + +00:01:12.159 --> 00:01:15.040 +I was told that there was nothing I + +00:01:15.040 --> 00:01:16.560 +could do about it, + +00:01:16.560 --> 00:01:19.920 +that so many users, packages were using + +00:01:19.920 --> 00:01:22.960 +s.el and thus essentially using that + +00:01:22.960 --> 00:01:24.240 +definition + +00:01:24.240 --> 00:01:28.080 +of the s-* symbols, + +00:01:28.080 --> 00:01:31.360 +that any attempt to use them + +00:01:31.360 --> 00:01:34.720 +publicly or privately for anything else + +00:01:34.720 --> 00:01:38.079 +would lead to horrible problems. + +00:01:38.079 --> 00:01:41.680 +And I don't like that. + +00:01:41.680 --> 00:01:45.520 +I decided, I wanted to do something + +00:01:45.520 --> 00:01:49.040 +a) so that wouldn't happen again + +00:01:49.040 --> 00:01:52.320 +and b) to make it unhappen + +00:01:52.320 --> 00:01:55.119 +in that case. Well, the way to make it + +00:01:55.119 --> 00:01:57.840 +unhappen in that case is with a new + +00:01:57.840 --> 00:02:02.240 +symbol renaming feature. The idea is, + +00:02:02.240 --> 00:02:05.360 +you rename that file to something else, + +00:02:05.360 --> 00:02:09.119 +and then you define an s.el that + +00:02:09.119 --> 00:02:11.520 +sets up symbol renaming and then loads + +00:02:11.520 --> 00:02:13.040 +the something else. + +00:02:13.040 --> 00:02:15.590 +So, it actually runs the same code, + +00:02:15.590 --> 00:02:16.400 +it just + +00:02:16.400 --> 00:02:20.879 +doesn't globally define the symbols + +00:02:20.879 --> 00:02:23.920 +s dash whatever, but they + +00:02:23.920 --> 00:02:26.160 +appear to work for the programs that + +00:02:26.160 --> 00:02:32.640 +explicitly require s.el + +00:02:32.640 --> 00:02:36.000 +or the s package. So, this gets the same + +00:02:36.000 --> 00:02:38.080 +behavior for all the programs that are + +00:02:38.080 --> 00:02:40.239 +using that library + +00:02:40.239 --> 00:02:43.360 +and doesn't interfere + +00:02:43.360 --> 00:02:47.840 +with the global name space at all. + +00:02:47.840 --> 00:02:50.319 +However, to do that we need to have a + +00:02:50.319 --> 00:02:52.080 +package + +00:02:52.080 --> 00:02:55.360 +s.el, that isn't the same + +00:02:55.360 --> 00:02:57.760 +totally. A short one file that's totally + +00:02:57.760 --> 00:02:58.640 +different. + +00:02:58.640 --> 00:03:01.440 +Plus, we've got to have the file that + +00:03:01.440 --> 00:03:02.840 +normally is called + +00:03:02.840 --> 00:03:06.239 +s.el available, but + +00:03:06.239 --> 00:03:10.319 +under another name. Well, + +00:03:10.319 --> 00:03:13.040 +how are we going to do that? We can't put + +00:03:13.040 --> 00:03:18.879 +this into Emacs in a nice way that + +00:03:18.879 --> 00:03:24.560 +won't make the maintainer angry. + +00:03:24.560 --> 00:03:28.159 +(or the developer of that package.) + +00:03:28.159 --> 00:03:32.080 +But we can do it with NonGNU + +00:03:32.080 --> 00:03:34.640 +ELPA. We can put those two things into + +00:03:34.640 --> 00:03:36.239 +NonGNU ELPA + +00:03:36.239 --> 00:03:38.720 +without any difficulty. And this shows + +00:03:38.720 --> 00:03:40.720 +one of the advantages. + +00:03:40.720 --> 00:03:43.280 +We can put files, we can put packages + +00:03:43.280 --> 00:03:45.440 +into NonGNU ELPA + +00:03:45.440 --> 00:03:48.400 +and make changes in them. Now, in general + +00:03:48.400 --> 00:03:49.599 +we wouldn't + +00:03:49.599 --> 00:03:51.760 +go to the effort of making big changes. + +00:03:51.760 --> 00:03:54.319 +That's just too much to do + +00:03:54.319 --> 00:03:56.400 +unless something's really important. But + +00:03:56.400 --> 00:03:58.000 +small changes + +00:03:58.000 --> 00:04:01.120 +that help things fit in are + +00:04:01.120 --> 00:04:04.319 +easy to do. + +00:04:04.319 --> 00:04:07.120 +Okay, oh, so basically the recording + +00:04:07.120 --> 00:04:10.319 +didn't get anything until now. I just saw + +00:04:10.319 --> 00:04:13.439 +a note pop up, "this session is now being + +00:04:13.439 --> 00:04:14.319 +recorded". + +00:04:14.319 --> 00:04:16.320 +I hope it's been recorded all along. It + +00:04:16.320 --> 00:04:18.160 +would be a shame to + +00:04:18.160 --> 00:04:21.280 +spoil… Oh, good okay. + +00:04:21.280 --> 00:04:27.120 +So, that's one of the issues. + +00:04:27.120 --> 00:04:30.479 +"Does NonGNU ELPA already exist + +00:04:30.479 --> 00:04:33.840 +or is this a sort of "plan"?" I don't + +00:04:33.840 --> 00:04:35.360 +know why you have to + +00:04:35.360 --> 00:04:37.919 +put scare quotes around the word plan. + +00:04:37.919 --> 00:04:40.400 +It's sort of in between. + +00:04:40.400 --> 00:04:44.160 +The creation of it is started. You + +00:04:44.160 --> 00:04:45.440 +will find + +00:04:45.440 --> 00:04:48.160 +that there is an archive that it's + +00:04:48.160 --> 00:04:51.520 +possible to download packages from, + +00:04:51.520 --> 00:04:54.880 +and there is a repository to put them in, + +00:04:54.880 --> 00:04:57.120 +but that's not the way it's really + +00:04:57.120 --> 00:04:58.560 +supposed to work. + +00:04:58.560 --> 00:05:02.800 +This is not supposed to be like the + +00:05:02.800 --> 00:05:04.320 +GNU ELPA, where there's + +00:05:04.320 --> 00:05:07.280 +one repo for all the packages and thus + +00:05:07.280 --> 00:05:09.039 +anyone who wants to edit any of them, + +00:05:09.039 --> 00:05:11.199 +anyone that we want to have edit any of + +00:05:11.199 --> 00:05:11.680 +them, + +00:05:11.680 --> 00:05:13.280 +has got to have access to the whole + +00:05:13.280 --> 00:05:15.440 +thing for one thing. + +00:05:15.440 --> 00:05:18.560 +Some packages will make + +00:05:18.560 --> 00:05:21.840 +an arrangement with the developers, + +00:05:21.840 --> 00:05:25.120 +and they'll assure us that they will + +00:05:25.120 --> 00:05:27.039 +do things as things should be done, and + +00:05:27.039 --> 00:05:28.400 +then we'll + +00:05:28.400 --> 00:05:32.080 +have their repo copied automatically + +00:05:32.080 --> 00:05:35.919 +or in other cases, say, + +00:05:35.919 --> 00:05:38.160 +copied manually with a little checking + +00:05:38.160 --> 00:05:40.160 +every so often. + +00:05:40.160 --> 00:05:46.400 +In other cases we'll need to have our own + +00:05:46.400 --> 00:05:49.440 +repo for a particular package. + +00:05:49.440 --> 00:05:52.479 +But we shouldn't have a single repo for + +00:05:52.479 --> 00:05:54.400 +all the packages. We should have a repo + +00:05:54.400 --> 00:05:55.919 +for each package, + +00:05:55.919 --> 00:05:57.840 +so that the people working on that can + +00:05:57.840 --> 00:06:01.120 +get access to modify it. + +00:06:01.120 --> 00:06:04.319 +This has to be finished setting up, + +00:06:04.319 --> 00:06:06.080 +and we're still working out the + +00:06:06.080 --> 00:06:07.680 +procedures. + +00:06:07.680 --> 00:06:11.039 +For instance, for making the arrangements + +00:06:11.039 --> 00:06:14.400 +with the developers of a package so that + +00:06:14.400 --> 00:06:15.440 +we can, + +00:06:15.440 --> 00:06:18.840 +we hope, entrust its development to + +00:06:18.840 --> 00:06:24.800 +them and rely on them directly. + +00:06:24.800 --> 00:06:26.560 +And there may be more that needs to be + +00:06:26.560 --> 00:06:29.840 +worked on. + +00:06:29.840 --> 00:06:36.639 +Oh! There's so many questions. + +00:06:36.639 --> 00:06:39.280 +Well, I hope you… The third question is, + +00:06:39.280 --> 00:06:40.880 +what are the benefits? + +00:06:40.880 --> 00:06:43.680 +I hope that people now see the benefits. + +00:06:43.680 --> 00:06:46.240 +I've described them. + +00:06:46.240 --> 00:06:49.599 +Next question, "Is it possible to work + +00:06:49.599 --> 00:06:51.440 +with the MELPA team + +00:06:51.440 --> 00:06:54.720 +to integrate that into Emacs?" + +00:06:54.720 --> 00:06:59.440 +No, because the goal doesn't make sense. + +00:06:59.440 --> 00:07:03.759 +MELPA the way it's done, does not belong + +00:07:03.759 --> 00:07:07.199 +inside Emacs in any sense. Well, first of + +00:07:07.199 --> 00:07:08.560 +all, it can't literally be + +00:07:08.560 --> 00:07:11.280 +inside Emacs. We don't have copyright + +00:07:11.280 --> 00:07:13.280 +assignments for that code + +00:07:13.280 --> 00:07:18.160 +and to get it would be unfeasible, + +00:07:18.160 --> 00:07:20.560 +but we're not asking for copyright + +00:07:20.560 --> 00:07:21.520 +assignments for + +00:07:21.520 --> 00:07:25.280 +NonGNU ELPA so that's + +00:07:25.280 --> 00:07:27.599 +you might wonder could MELPA be merged + +00:07:27.599 --> 00:07:31.440 +with NonGNU ELPA? The problem is, + +00:07:31.440 --> 00:07:35.039 +MELPA doesn't modify the packages. + +00:07:35.039 --> 00:07:38.240 +It's just a place to find releases of + +00:07:38.240 --> 00:07:41.360 +packages wherever they happen to be, + +00:07:41.360 --> 00:07:44.800 +and they put packages in with + +00:07:44.800 --> 00:07:48.319 +only a little bit of checking. + +00:07:48.319 --> 00:07:51.520 +So, no. There are a lot of packages + +00:07:51.520 --> 00:07:51.919 +that are + +00:07:51.919 --> 00:07:55.280 +in MELPA that we'd like to get into + +00:07:55.280 --> 00:07:58.479 +NonGNU ELPA. I don't know the names of + +00:07:58.479 --> 00:08:00.800 +most of them, but I expect most of them + +00:08:00.800 --> 00:08:04.160 +would be fine to have. But they've got to + +00:08:04.160 --> 00:08:08.560 +be looked at one by one. + +00:08:08.560 --> 00:08:12.000 +There are some rules for NonGNU ELPA, + +00:08:12.000 --> 00:08:14.479 +and the only way to check them is to + +00:08:14.479 --> 00:08:18.000 +check them on one package at a time, + +00:08:18.000 --> 00:08:22.160 +and that's going to take effort. + +00:08:22.160 --> 00:08:25.039 +Now, with the people who work on MELPA + +00:08:25.039 --> 00:08:26.080 +want to get involved + +00:08:26.080 --> 00:08:29.440 +of this, that would be great. + +00:08:29.440 --> 00:08:32.800 +I haven't tried asking them. First we've + +00:08:32.800 --> 00:08:33.919 +got to get this thing + +00:08:33.919 --> 00:08:37.599 +set up. I doubt they would want to, + +00:08:37.599 --> 00:08:40.479 +but if they said yes, that would be + +00:08:40.479 --> 00:08:44.159 +wonderful. + +00:08:44.159 --> 00:08:48.399 +"Any thoughts of packages being + +00:08:48.399 --> 00:09:00.959 +added…" I'm afraid. + +00:09:05.440 --> 00:09:08.959 +Any thoughts of packages being added as + +00:09:08.959 --> 00:09:11.040 +some URL I don't know anything about, but + +00:09:11.040 --> 00:09:13.120 +it talks about open source, + +00:09:13.120 --> 00:09:17.680 +which means I'm very unlikely to have much + +00:09:17.680 --> 00:09:20.959 +in common with whatever they say about + +00:09:20.959 --> 00:09:24.080 +either licensing or + +00:09:24.080 --> 00:09:27.760 +what's right and wrong. + +00:09:27.760 --> 00:09:29.959 +But this seems to be something about + +00:09:29.959 --> 00:09:33.523 +disregarding licenses altogether. + +00:09:33.523 --> 00:09:35.680 +Well, that is basically + +00:09:35.680 --> 00:09:39.360 +asking to lose. There are reasons + +00:09:39.360 --> 00:09:43.360 +why we developed GNU licenses to release + +00:09:43.360 --> 00:09:46.490 +software, why we have criteria for which + +00:09:46.490 --> 00:09:49.519 +licenses make a program free software. + +00:09:49.519 --> 00:09:52.640 +If the program doesn't carry a license + +00:09:52.640 --> 00:09:55.057 +or if it carries a non-free license, + +00:09:55.057 --> 00:09:58.323 +that program is not free software. + +00:09:58.323 --> 00:10:01.857 +Now, you can maybe get away with + +00:10:01.857 --> 00:10:04.800 +disregarding that fact unless + +00:10:04.800 --> 00:10:08.959 +somebody, an author or publisher stops you. + +00:10:08.959 --> 00:10:11.360 +But we're not going to take… we're not + +00:10:11.360 --> 00:10:12.399 +basically going to + +00:10:12.399 --> 00:10:15.200 +disregard the question of whether the + +00:10:15.200 --> 00:10:16.399 +software we + +00:10:16.399 --> 00:10:19.040 +recommend to people, really is free + +00:10:19.040 --> 00:10:21.360 +software or not. + +00:10:21.360 --> 00:10:24.560 +That's basically + +00:10:24.560 --> 00:10:27.519 +blindfolding yourself to the legal + +00:10:27.519 --> 00:10:29.120 +situation of the software you're + +00:10:29.120 --> 00:10:33.519 +distributing, it's a terrible idea. If they + +00:10:33.519 --> 00:10:35.920 +disregard our licenses they will hear + +00:10:35.920 --> 00:10:38.640 +from us about it. + +00:10:38.640 --> 00:10:40.959 +And if you want to contribute to the + +00:10:40.959 --> 00:10:42.720 +free world + +00:10:42.720 --> 00:10:46.320 +put free licenses on your code + +00:10:46.320 --> 00:10:47.823 +and choose good ones. + +00:10:47.823 --> 00:10:50.000 +To get this information, + +00:10:50.000 --> 00:10:57.120 +look at gnu.org/licenses, + +00:10:57.120 --> 00:10:59.839 +and one page that's important + +00:10:59.839 --> 00:11:05.040 +is license-recommendations.html, + +00:11:05.040 --> 00:11:07.360 +that's where we advise you on what + +00:11:07.360 --> 00:11:09.279 +license we would recommend you use + +00:11:09.279 --> 00:11:11.360 +depending on the circumstances. + +00:11:11.360 --> 00:11:15.600 +There's also license-list.html + +00:11:15.600 --> 00:11:20.160 +which describes a lot of licenses and + +00:11:20.160 --> 00:11:22.160 +says which ones are free, + +00:11:22.160 --> 00:11:23.957 +which ones are compatible + +00:11:23.957 --> 00:11:26.160 +with the GNU GPL. + +00:11:26.160 --> 00:11:28.640 +It's really important to use only GPL + +00:11:28.640 --> 00:11:31.519 +compatible licenses + +00:11:31.519 --> 00:11:34.320 +so that the various programs can be + +00:11:34.320 --> 00:11:40.720 +combined together or linked. + +00:11:40.720 --> 00:11:43.120 +You can also get other information about + +00:11:43.120 --> 00:11:44.240 +GNU licenses + +00:11:44.240 --> 00:11:47.040 +and the reasons why they are written the + +00:11:47.040 --> 00:11:55.279 +way they are. + +00:11:55.279 --> 00:12:03.200 +Oh sorry, I don't see the next question. + +00:12:03.200 --> 00:12:07.519 +"Why do I insist on using per and pers?" + +00:12:07.519 --> 00:12:11.680 +I'm not happy with using + +00:12:11.680 --> 00:12:14.959 +they, which is a plural pronoun with a + +00:12:14.959 --> 00:12:17.440 +singular antecedent. + +00:12:17.440 --> 00:12:20.480 +It's bad because it causes + +00:12:20.480 --> 00:12:24.800 +confusion that is completely gratuitous. + +00:12:24.800 --> 00:12:28.639 +Many sentences become a lot of work + +00:12:28.639 --> 00:12:33.200 +to parse and understand if you + +00:12:33.200 --> 00:12:36.480 +add that ambiguity, that source of + +00:12:36.480 --> 00:12:39.839 +regular ambiguity. Now, + +00:12:39.839 --> 00:12:42.720 +I do not accept the demands of other + +00:12:42.720 --> 00:12:43.680 +people + +00:12:43.680 --> 00:12:47.519 +in regard to changing my grammar. + +00:12:47.519 --> 00:12:50.800 +You can try to convince me, but + +00:12:50.800 --> 00:12:54.240 +no one is entitled to give me orders + +00:12:54.240 --> 00:12:55.440 +about that + +00:12:55.440 --> 00:12:58.880 +or state their desires and expect + +00:12:58.880 --> 00:13:03.200 +obedience, not for me and not from you + +00:13:03.200 --> 00:13:06.560 +or anyone. We are all + +00:13:06.560 --> 00:13:09.839 +equally entitled to decide + +00:13:09.839 --> 00:13:13.200 +how we will speak and how we won't speak. + +00:13:13.200 --> 00:13:18.000 +I've spelled out all of these points + +00:13:18.000 --> 00:13:19.857 +in a file called + +00:13:19.857 --> 00:13:29.423 +stallman.org/articles/genderless-pronouns.html + +00:13:29.423 --> 00:13:31.600 +(corrected), + +00:13:31.600 --> 00:13:33.760 +of course, this is not a GNU project + +00:13:33.760 --> 00:13:36.000 +policy, + +00:13:36.000 --> 00:13:46.839 +it's my own personal ideas on the + +00:13:46.839 --> 00:13:53.920 +subject. + +00:13:53.920 --> 00:13:57.120 +If any of you feels offended + +00:13:57.120 --> 00:14:01.040 +by my referring to you with a singular + +00:14:01.040 --> 00:14:04.320 +gender-neutral pronoun, feel free + +00:14:04.320 --> 00:14:07.680 +to contact me privately + +00:14:07.680 --> 00:14:10.720 +and explain to me your reasons. + +00:14:10.720 --> 00:14:14.000 +I will pay attention to them, I'll + +00:14:14.000 --> 00:14:16.639 +think about them assuming that they're + +00:14:16.639 --> 00:14:18.399 +not something I've already + +00:14:18.399 --> 00:14:24.079 +considered and decided to dismiss before. + +00:14:24.079 --> 00:14:27.760 +But you must not speak to me as if I had + +00:14:27.760 --> 00:14:30.240 +no business not obeying you because + +00:14:30.240 --> 00:14:31.690 +that's rude, + +00:14:31.690 --> 00:14:34.320 +and it is not likely to convince me + +00:14:34.320 --> 00:14:40.720 +to change my mind. + +00:14:40.720 --> 00:14:44.240 +I believe it is not actually + +00:14:44.240 --> 00:14:48.320 +of stating offense to anyone, + +00:14:48.320 --> 00:14:50.560 +and the fact that somebody disagrees + +00:14:50.560 --> 00:14:52.880 +with me does not mean I'm wrong, + +00:14:52.880 --> 00:15:00.720 +but I always can be wrong. + +00:15:00.720 --> 00:15:02.560 +"When you wrote that you could add a + +00:15:02.560 --> 00:15:05.680 +package to NonGNU ELPA, + +00:15:05.680 --> 00:15:07.120 +are you implying that you would add + +00:15:07.120 --> 00:15:09.199 +packages with or without package + +00:15:09.199 --> 00:15:11.120 +maintainer's knowledge?" + +00:15:11.120 --> 00:15:15.279 +Of course, the packages we would + +00:15:15.279 --> 00:15:18.000 +distribute in this way are free + +00:15:18.000 --> 00:15:19.519 +software. + +00:15:19.519 --> 00:15:22.720 +Everyone is entitled to redistribute them + +00:15:22.720 --> 00:15:26.560 +and everyone is also entitled to modify + +00:15:26.560 --> 00:15:26.959 +them + +00:15:26.959 --> 00:15:29.199 +and redistribute them, that's part of the + +00:15:29.199 --> 00:15:31.680 +meaning of free software. + +00:15:31.680 --> 00:15:35.040 +I have been unable to understand + +00:15:35.040 --> 00:15:38.320 +how there came to be an idea + +00:15:38.320 --> 00:15:42.560 +that those who redistribute packages + +00:15:42.560 --> 00:15:49.360 +have some obligation to be mere mirrors + +00:15:49.360 --> 00:15:54.480 +and not modify things themselves. + +00:15:54.480 --> 00:15:58.560 +Well, if a package is + +00:15:58.560 --> 00:16:01.440 +being maintained by developers who are + +00:16:01.440 --> 00:16:03.440 +cooperating with us, + +00:16:03.440 --> 00:16:06.240 +we'll normally just leave it to them. + +00:16:06.240 --> 00:16:07.360 +After all, + +00:16:07.360 --> 00:16:09.590 +we have lots of other work to do. + +00:16:09.590 --> 00:16:12.390 +They are clearly experts on + +00:16:12.390 --> 00:16:15.600 +the packages they've developed, + +00:16:15.600 --> 00:16:18.399 +let's leave it to them if they make that + +00:16:18.399 --> 00:16:22.800 +sort of arrangement with us. But + +00:16:22.800 --> 00:16:26.480 +that's up to them, we can't insist that + +00:16:26.480 --> 00:16:29.120 +anyone make an arrangement with us, + +00:16:29.120 --> 00:16:30.720 +but since those programs are free + +00:16:30.720 --> 00:16:35.723 +software, anyone is free to redistribute them, + +00:16:35.723 --> 00:16:41.839 +and we will do that. + +00:16:41.839 --> 00:16:45.519 +"Have you ever used vi or vim or + +00:16:45.519 --> 00:16:52.079 +evil mode?" No. + +00:16:52.079 --> 00:16:53.920 +"Are there any plans to implement + +00:16:53.920 --> 00:16:56.800 +security considerations in NonGNU + +00:16:56.800 --> 00:16:58.657 +ELPA?" + +00:16:58.657 --> 00:17:01.890 +We probably should, + +00:17:01.890 --> 00:17:04.959 +and this will have to be implemented, + +00:17:04.959 --> 00:17:08.559 +but at the moment + +00:17:08.559 --> 00:17:12.000 +developer Emacs maintainers will copy + +00:17:12.000 --> 00:17:13.280 +packages + +00:17:13.280 --> 00:17:18.160 +into it, and so as long as they are + +00:17:18.160 --> 00:17:20.160 +verifying the packages and getting the + +00:17:20.160 --> 00:17:22.480 +packages from the right place + +00:17:22.480 --> 00:17:24.690 +that will take care of the security. + +00:17:24.690 --> 00:17:25.919 +Once there is… + +00:17:25.919 --> 00:17:30.160 +When with automatic copying in, + +00:17:30.160 --> 00:17:33.200 +will have to do something to + +00:17:33.200 --> 00:17:35.200 +make sure that we're fetching the + +00:17:35.200 --> 00:17:40.320 +packages securely. + +00:17:40.320 --> 00:17:44.000 +Some of you might be interested in + +00:17:44.000 --> 00:17:46.080 +helping to design and implement this + +00:17:46.080 --> 00:17:48.000 +system. + +00:17:48.000 --> 00:17:52.559 +"What distro do I use?" + +00:17:52.559 --> 00:17:56.720 +Well, which distro of GNU/Linux + +00:17:56.720 --> 00:17:58.000 +do I use? + +00:17:58.000 --> 00:18:03.520 +I use Trisquel, + +00:18:03.520 --> 00:18:07.200 +I haven't tried most of the free distros + +00:18:07.200 --> 00:18:10.080 +and the reason is, it's not crucial that + +00:18:10.080 --> 00:18:11.120 +I do so, + +00:18:11.120 --> 00:18:13.520 +we don't need me to rate the various + +00:18:13.520 --> 00:18:14.799 +free distros on + +00:18:14.799 --> 00:18:17.520 +practical questions because anyone can + +00:18:17.520 --> 00:18:20.000 +do that as well as I can. + +00:18:20.000 --> 00:18:24.400 +And so you can tell people what + +00:18:24.400 --> 00:18:27.760 +you think of using them. For me, what's + +00:18:27.760 --> 00:18:29.360 +important to me + +00:18:29.360 --> 00:18:32.400 +is to inform people of the difference + +00:18:32.400 --> 00:18:34.160 +between the free distros + +00:18:34.160 --> 00:18:36.799 +and the non-free distros, making sure + +00:18:36.799 --> 00:18:38.799 +people are aware that if you + +00:18:38.799 --> 00:18:42.000 +install a non-free GNU/Linux + +00:18:42.000 --> 00:18:45.600 +distro, you'll get a free operating + +00:18:45.600 --> 00:18:46.720 +system with + +00:18:46.720 --> 00:18:49.919 +non-free stuff in various quantities + +00:18:49.919 --> 00:18:54.160 +added, thus you will not reach freedom, + +00:18:54.160 --> 00:18:56.240 +although you'll make a lot of + +00:18:56.240 --> 00:18:57.520 +progress compared + +00:18:57.520 --> 00:19:01.039 +with using for instance, Windows or + +00:19:01.039 --> 00:19:03.919 +macOS or whatever vicious thing it + +00:19:03.919 --> 00:19:06.160 +might be. + +00:19:06.160 --> 00:19:09.760 +I'd like people to be aware + +00:19:09.760 --> 00:19:12.799 +of this next step towards + +00:19:12.799 --> 00:19:14.720 +getting freedom for yourself and your + +00:19:14.720 --> 00:19:16.160 +own computing, + +00:19:16.160 --> 00:19:24.480 +so that you can do that if you want to. + +00:19:29.039 --> 00:19:31.360 +"Who gets to make the final decision + +00:19:31.360 --> 00:19:35.157 +regarding NonGNU ELPA?" + +00:19:35.157 --> 00:19:38.690 +The Emacs maintainers are + +00:19:38.690 --> 00:19:40.960 +going to be in charge of this, + +00:19:40.960 --> 00:19:44.480 +because it's not + +00:19:44.480 --> 00:19:47.760 +just a technical decision it has with + +00:19:47.760 --> 00:19:51.360 +only technical consequences + +00:19:51.360 --> 00:19:54.960 +but in general unless there's some + +00:19:54.960 --> 00:19:57.760 +severe problem with the package we will + +00:19:57.760 --> 00:20:03.600 +want to put it in, + +00:20:03.600 --> 00:20:05.757 +and I expect most packages + +00:20:05.757 --> 00:20:07.440 +won't have a problem, + +00:20:07.440 --> 00:20:09.357 +and we can just put them in + +00:20:09.357 --> 00:20:11.679 +when we get to them. + +00:20:11.679 --> 00:20:15.919 +"Won't the ELPA link to non-free sites + +00:20:15.919 --> 00:20:17.600 +like GitHub?" + +00:20:17.600 --> 00:20:20.799 +It's a mistake to talk about a + +00:20:20.799 --> 00:20:25.760 +non-free site, + +00:20:25.760 --> 00:20:29.120 +because a site is not a program. + +00:20:29.120 --> 00:20:32.123 +A program is either free or non-free, + +00:20:32.123 --> 00:20:32.960 +and we have + +00:20:32.960 --> 00:20:36.480 +clearly stated criteria for that in + +00:20:36.480 --> 00:20:42.457 +gnu.org/philosophy/free-sw.html + +00:20:42.457 --> 00:20:45.360 +we have the free software definition, + +00:20:45.360 --> 00:20:51.919 +but a site, well, there're programs on it, + +00:20:51.919 --> 00:20:54.000 +but it doesn't make sense to ask whether + +00:20:54.000 --> 00:20:55.120 +the site is + +00:20:55.120 --> 00:20:58.000 +free or not, it's too simplistic a + +00:20:58.000 --> 00:20:58.880 +question + +00:20:58.880 --> 00:21:02.000 +to have a meaningful answer. Now, one + +00:21:02.000 --> 00:21:05.679 +thing you can ask about is, does the site + +00:21:05.679 --> 00:21:08.799 +send JavaScript to the user's machine, + +00:21:08.799 --> 00:21:11.760 +to the user's browser and if so, is that + +00:21:11.760 --> 00:21:12.960 +JavaScript + +00:21:12.960 --> 00:21:17.120 +non-free. Well, GitHub + +00:21:17.120 --> 00:21:19.919 +does send non-free JavaScript for some + +00:21:19.919 --> 00:21:21.200 +operations, + +00:21:21.200 --> 00:21:24.240 +so we consider it unsatisfactory as a + +00:21:24.240 --> 00:21:26.159 +repository, + +00:21:26.159 --> 00:21:29.600 +but that doesn't mean linking to it + +00:21:29.600 --> 00:21:33.360 +is a bad thing to do regardless of + +00:21:33.360 --> 00:21:34.720 +what the purpose is. + +00:21:34.720 --> 00:21:36.640 +For instance, if the purpose is to refer + +00:21:36.640 --> 00:21:38.240 +to some things + +00:21:38.240 --> 00:21:40.799 +that you can access without running the + +00:21:40.799 --> 00:21:42.880 +non-free JavaScript, + +00:21:42.880 --> 00:21:47.200 +then it's okay for that purpose. + +00:21:47.200 --> 00:21:50.480 +So, if now that you understand the + +00:21:50.480 --> 00:21:52.559 +details of this issue, + +00:21:52.559 --> 00:21:54.880 +you think that there is a problem with + +00:21:54.880 --> 00:22:00.080 +the link to caml…, there's, + +00:22:00.080 --> 00:22:03.679 +sorry, a link in caml.html, + +00:22:03.679 --> 00:22:08.823 +well, report it to bug-gnu-emacs, + +00:22:08.823 --> 00:22:10.880 +report it as an Emacs bug, + +00:22:10.880 --> 00:22:14.159 +but do think about the criteria I've + +00:22:14.159 --> 00:22:15.840 +just said because maybe it's not a + +00:22:15.840 --> 00:22:18.000 +problem. + +00:22:18.000 --> 00:22:21.840 +"Is it okay to use the GNU Affero GPL + +00:22:21.840 --> 00:22:24.559 +for Emacs packages?" + +00:22:24.559 --> 00:22:28.880 +Yes it is. + +00:22:28.880 --> 00:22:31.120 +"Which is your favorite programming + +00:22:31.120 --> 00:22:32.080 +language? + +00:22:32.080 --> 00:22:35.200 +If Lisp, which variant?" + +00:22:35.200 --> 00:22:38.400 +Well, I don't exactly have a + +00:22:38.400 --> 00:22:41.760 +favorite variant, but + +00:22:41.760 --> 00:22:45.120 +when I designed Emacs Lisp, I + +00:22:45.120 --> 00:22:47.520 +did the best thing I could think of at + +00:22:47.520 --> 00:22:48.799 +the time, + +00:22:48.799 --> 00:22:52.559 +subject to the need to keep it small. + +00:22:52.559 --> 00:22:55.520 +For the first few years it was important + +00:22:55.520 --> 00:22:56.960 +for GNU Emacs + +00:22:56.960 --> 00:22:59.840 +to run in a machine which could only + +00:22:59.840 --> 00:23:00.799 +give it half + +00:23:00.799 --> 00:23:04.480 +a meg of user space. + +00:23:04.480 --> 00:23:06.559 +So, there are a lot of constructs that + +00:23:06.559 --> 00:23:09.200 +clearly were desirable to include + +00:23:09.200 --> 00:23:12.320 +that I left out because we could + +00:23:12.320 --> 00:23:16.880 +make it work without them + +00:23:16.880 --> 00:23:18.960 +and then a lot of those have been added + +00:23:18.960 --> 00:23:20.640 +since because + +00:23:20.640 --> 00:23:23.200 +it's been a long time since we needed to + +00:23:23.200 --> 00:23:40.960 +keep Emacs so rigorously small. + +00:23:40.960 --> 00:23:44.240 +Someone is + +00:23:44.240 --> 00:23:47.679 +asking about the + +00:23:47.679 --> 00:23:51.360 +FSF's repository project. Well, + +00:23:51.360 --> 00:23:54.400 +we agreed that there would be another + +00:23:54.400 --> 00:23:55.440 +virtual machine + +00:23:55.440 --> 00:23:59.919 +running one of those for the GNU project, + +00:23:59.919 --> 00:24:15.840 +but that's as far as the discussion went. + +00:24:15.840 --> 00:24:20.480 +Question 17 is extremely insulting! + +00:24:20.480 --> 00:24:25.600 +I have not engaged in sexual harassment, + +00:24:25.600 --> 00:24:28.720 +don't expect me to plead guilty to such + +00:24:28.720 --> 00:24:32.640 +a nasty claim. + +00:24:32.640 --> 00:24:35.600 +People have been accusing me of many + +00:24:35.600 --> 00:24:36.799 +things, + +00:24:36.799 --> 00:24:39.919 +some of which are + +00:24:39.919 --> 00:24:43.120 +basically mole hills and some of which + +00:24:43.120 --> 00:24:44.423 +are false. + +00:24:44.423 --> 00:24:50.640 +So, I'm not going to give them + +00:24:50.640 --> 00:24:53.840 +anything, I have been bullied in a + +00:24:53.840 --> 00:24:59.679 +horrible way, that was wrong. + +00:24:59.679 --> 00:25:02.720 +I would like the bullies to apologize to + +00:25:02.720 --> 00:25:03.520 +me, + +00:25:03.520 --> 00:25:06.320 +and when I see that they're not bullying, + +00:25:06.320 --> 00:25:08.960 +I will forgive them. + +00:25:08.960 --> 00:25:11.279 +I would like to have conversations with + +00:25:11.279 --> 00:25:14.799 +them if any of the mole hills + +00:25:14.799 --> 00:25:17.840 +annoyed someone, I'm happy to talk + +00:25:17.840 --> 00:25:20.880 +with per and thus + +00:25:20.880 --> 00:25:31.120 +help resolve things with peace. + +00:25:31.120 --> 00:25:39.200 +And my opinion on "diversity" within + +00:25:39.200 --> 00:25:42.720 +Emacs. Well, Emacs is + +00:25:42.720 --> 00:25:45.679 +never going to be diverse, it is extended + +00:25:45.679 --> 00:25:49.760 +in one language, Emacs Lisp. ;-} + +00:25:49.760 --> 00:25:53.279 +Well, I don't know, we did have an idea + +00:25:53.279 --> 00:25:55.840 +of implementing extensibility using + +00:25:55.840 --> 00:25:58.400 +Scheme and the hope was that Guile + +00:25:58.400 --> 00:26:01.120 +could be integrated with Emacs, that + +00:26:01.120 --> 00:26:02.960 +turned out to be difficult, it may be + +00:26:02.960 --> 00:26:05.279 +impossible but in principle + +00:26:05.279 --> 00:26:07.520 +it might be a good thing, that would be a + +00:26:07.520 --> 00:26:11.039 +small amount of diversity, + +00:26:11.039 --> 00:26:14.960 +but it's not that important. + +00:26:14.960 --> 00:26:16.960 +What I think is really important for + +00:26:16.960 --> 00:26:18.880 +developing Emacs + +00:26:18.880 --> 00:26:22.799 +is to make it do word processing. + +00:26:22.799 --> 00:26:27.039 +I sometimes use LibreOffice, + +00:26:27.039 --> 00:26:30.080 +and yeah I can make it do things. + +00:26:30.080 --> 00:26:32.799 +It has features for WYSIWYG which are + +00:26:32.799 --> 00:26:34.880 +very nice, + +00:26:34.880 --> 00:26:38.000 +but it's in other regards, + +00:26:38.000 --> 00:26:40.400 +it's not Emacs, and it doesn't have the + +00:26:40.400 --> 00:26:42.400 +abilities of Emacs, + +00:26:42.400 --> 00:26:45.600 +and it should. + +00:26:45.600 --> 00:26:48.400 +So, I urge people to work on extending + +00:26:48.400 --> 00:26:49.039 +Emacs + +00:26:49.039 --> 00:26:51.600 +in that direction adding the features + +00:26:51.600 --> 00:27:13.600 +that a word processor has to have. + +00:27:13.600 --> 00:27:17.957 +The last question I can answer is 18. + +00:27:17.957 --> 00:27:21.679 +Yes, it's a very sad thing + +00:27:21.679 --> 00:27:24.960 +how many companies + +00:27:24.960 --> 00:27:28.399 +insist on using non-free software. + +00:27:28.399 --> 00:27:33.200 +Well, I would get a different kind of job, + +00:27:33.200 --> 00:27:36.799 +that's a decision I made many years ago + +00:27:36.799 --> 00:27:40.320 +early in the GNU project, + +00:27:40.320 --> 00:27:42.799 +I decided, I would not… first I would not + +00:27:42.799 --> 00:27:47.679 +get a job developing non-free software. + +00:27:47.679 --> 00:27:50.960 +And later on I decided, + +00:27:50.960 --> 00:27:54.880 +once I could stop using non-free + +00:27:54.880 --> 00:27:57.120 +software, that is once we had + +00:27:57.120 --> 00:28:00.799 +a GNU/Linux system that we could + +00:28:00.799 --> 00:28:08.320 +switch over to and… + +00:28:08.320 --> 00:28:11.679 +Oh, wait. I thought magic wand + +00:28:11.679 --> 00:28:16.240 +time meant it was time to stop, + +00:28:16.240 --> 00:28:21.039 +but now I rather ask the question. + +00:28:27.760 --> 00:28:32.480 +So, what do you do, well, if I were you, + +00:28:32.480 --> 00:28:35.679 +I'd probably not work for any of those + +00:28:35.679 --> 00:28:37.440 +companies. + +00:28:37.440 --> 00:28:39.679 +If I needed to make money, I'd get a job, + +00:28:39.679 --> 00:28:40.799 +but I get some + +00:28:40.799 --> 00:28:43.840 +other kind of job + +00:28:43.840 --> 00:28:48.080 +that didn't involve using software + +00:28:48.080 --> 00:28:51.039 +or that let me choose the + +00:28:51.039 --> 00:28:53.600 +software I would use. + +00:28:53.600 --> 00:28:56.880 +But I would live cheaply, you know, the + +00:28:56.880 --> 00:28:58.000 +less you spend, + +00:28:58.000 --> 00:29:00.640 +the less you need to make and the more + +00:29:00.640 --> 00:29:01.120 +time + +00:29:01.120 --> 00:29:04.720 +you can take away from your paid work + +00:29:04.720 --> 00:29:07.200 +and the more flexibility you have in + +00:29:07.200 --> 00:29:08.640 +which paid work + +00:29:08.640 --> 00:29:13.039 +you can do. Being in a position + +00:29:13.039 --> 00:29:16.399 +to say no to avoid being + +00:29:16.399 --> 00:29:23.679 +desperate to say yes + +00:29:23.679 --> 00:29:27.440 +strengthens your position, + +00:29:27.440 --> 00:29:31.200 +and you need that. One way you can help + +00:29:31.200 --> 00:29:33.279 +do that is by + +00:29:33.279 --> 00:29:36.559 +not having children. Now, that is a + +00:29:36.559 --> 00:29:38.960 +tangent, but it can't be denied that + +00:29:38.960 --> 00:29:41.760 +raising children is very expensive, I + +00:29:41.760 --> 00:29:42.399 +have heard + +00:29:42.399 --> 00:29:45.559 +many people say that they are + +00:29:45.559 --> 00:29:48.080 +uncomfortable with their jobs, + +00:29:48.080 --> 00:29:50.880 +but they have to do those jobs to make + +00:29:50.880 --> 00:29:52.240 +enough money + +00:29:52.240 --> 00:29:55.440 +to support their children. + +00:29:55.440 --> 00:29:59.120 +Well, think about that, be aware + +00:29:59.120 --> 00:30:01.520 +that's likely to happen to you, before + +00:30:01.520 --> 00:30:06.159 +you make that decision. + +00:30:06.159 --> 00:30:13.279 +"What would I change about free software?" + +00:30:13.279 --> 00:30:16.960 +Well, since this is + +00:30:16.960 --> 00:30:20.880 +magic, I would magically find + +00:30:20.880 --> 00:30:25.600 +a way of showing everyone why + +00:30:25.600 --> 00:30:28.000 +most free software needs to be copy + +00:30:28.000 --> 00:30:29.679 +lefted, + +00:30:29.679 --> 00:30:32.480 +so that our community would not + +00:30:32.480 --> 00:30:34.880 +basically + +00:30:34.880 --> 00:30:38.640 +submit to abuse by proprietary software + +00:30:38.640 --> 00:30:45.919 +developers. + +00:30:45.919 --> 00:30:49.760 +Of course, I could go further if I could + +00:30:49.760 --> 00:30:53.279 +magically recruit a hundred thousand + +00:30:53.279 --> 00:30:55.760 +good programmers to do lots of work + +00:30:55.760 --> 00:30:57.919 +improving free software. + +00:30:57.919 --> 00:31:01.039 +We might… Well, if we could do this 20 + +00:31:01.039 --> 00:31:03.279 +years ago, we might have wiped out + +00:31:03.279 --> 00:31:06.559 +non-free systems, and then we wouldn't + +00:31:06.559 --> 00:31:07.200 +have had + +00:31:07.200 --> 00:31:10.320 +horrible things like + +00:31:10.320 --> 00:31:14.480 +World Wide Web DRM, that + +00:31:14.480 --> 00:31:18.000 +no one has the courage to resist + +00:31:18.000 --> 00:31:20.480 +if they're desperately trying to get + +00:31:20.480 --> 00:31:22.640 +money for anything, + +00:31:22.640 --> 00:31:26.240 +and if they need approval of companies, + +00:31:26.240 --> 00:31:29.519 +of the big companies that push for DRM, + +00:31:29.519 --> 00:31:32.960 +then they don't dare even resist as + +00:31:32.960 --> 00:31:38.240 +much as they can resist. + +00:31:38.240 --> 00:31:40.880 +And look what happened to the World Wide + +00:31:40.880 --> 00:31:43.200 +Web consortium, + +00:31:43.200 --> 00:31:47.279 +they surrendered blatantly + +00:31:47.279 --> 00:31:50.399 +and ignominiously by + +00:31:50.399 --> 00:31:55.760 +endorsing the DRM system. + +00:31:55.760 --> 00:31:59.600 +So what can you do? I don't have a magic + +00:31:59.600 --> 00:32:00.880 +wand, + +00:32:00.880 --> 00:32:04.720 +I'm a human being with the capabilities + +00:32:04.720 --> 00:32:09.919 +I have, but the advantage of + +00:32:09.919 --> 00:32:12.840 +great firmness in campaigning for free + +00:32:12.840 --> 00:32:14.000 +software, + +00:32:14.000 --> 00:32:18.240 +and this enables me to do things + +00:32:18.240 --> 00:32:27.679 +that no one else will do. + +00:32:27.679 --> 00:32:30.480 +"What tools from pre-UNIX days do you + +00:32:30.480 --> 00:32:31.519 +miss?" + +00:32:31.519 --> 00:32:34.240 +Well, I don't. I don't think about them + +00:32:34.240 --> 00:32:38.640 +with missing them actually. + +00:32:38.640 --> 00:32:42.080 +It was sort of nice to have + +00:32:42.080 --> 00:32:46.240 +ddt as your login shell. + +00:32:46.240 --> 00:32:49.600 +So, in using modern terminology, + +00:32:49.600 --> 00:32:52.640 +because that meant at any time you could + +00:32:52.640 --> 00:32:55.519 +stop a program, load its debugging symbols, + +00:32:55.519 --> 00:32:57.519 +and start examining the data in the + +00:32:57.519 --> 00:32:58.799 +instructions. + +00:32:58.799 --> 00:33:01.519 +You could debug it that way, and then you + +00:33:01.519 --> 00:33:03.039 +could even + +00:33:03.039 --> 00:33:06.720 +patch in instructions to continue + +00:33:06.720 --> 00:33:09.760 +running that job with the bug fixed, + +00:33:09.760 --> 00:33:11.600 +in fact, you could even do this with the + +00:33:11.600 --> 00:33:13.919 +system kernel, + +00:33:13.919 --> 00:33:16.423 +so that your jobs wouldn't get lost. + +00:33:16.423 --> 00:33:17.840 +I did that + +00:33:17.840 --> 00:33:20.559 +quite a few times, of course, sometimes I + +00:33:20.559 --> 00:33:22.720 +saw what was wrong, and I just had to + +00:33:22.720 --> 00:33:25.919 +fix a piece of data, but sometimes + +00:33:25.919 --> 00:33:28.240 +it took me a long time to figure out how + +00:33:28.240 --> 00:33:29.679 +to get the system to + +00:33:29.679 --> 00:33:32.480 +keep on going. But with the work I had + +00:33:32.480 --> 00:33:34.240 +done, + +00:33:34.240 --> 00:33:39.279 +I didn't want to lose that work, + +00:33:39.279 --> 00:33:41.600 +and, so one of the first features I put + +00:33:41.600 --> 00:33:43.039 +into GNU Emacs was + +00:33:43.039 --> 00:33:47.760 +auto save. + +00:33:47.760 --> 00:33:50.640 +I'm not going to try to figure out + +00:33:50.640 --> 00:33:54.320 +which packages I actually used. + +00:33:54.320 --> 00:33:56.480 +"If I knew, I would get hit by a bus + +00:33:56.480 --> 00:33:59.039 +tomorrow, + +00:33:59.039 --> 00:34:02.320 +say because of a fortune-teller." + +00:34:02.320 --> 00:34:05.039 +No, a fortune-teller doesn't give you any + +00:34:05.039 --> 00:34:06.240 +knowledge, it's just + +00:34:06.240 --> 00:34:10.159 +superstitious hand waving. + +00:34:10.159 --> 00:34:13.760 +So, assuming that I + +00:34:13.760 --> 00:34:16.480 +talked… that I got a reading from a + +00:34:16.480 --> 00:34:18.879 +fortune-teller, which is + +00:34:18.879 --> 00:34:23.119 +implausible enough to begin with, + +00:34:23.119 --> 00:34:25.040 +that wouldn't give me any knowledge + +00:34:25.040 --> 00:34:28.320 +about what was going to happen to me. + +00:34:28.320 --> 00:34:32.879 +Oh, by the way fortune-tellers generally + +00:34:32.879 --> 00:34:34.960 +play back to you facts that they've + +00:34:34.960 --> 00:34:36.879 +discovered about you + +00:34:36.879 --> 00:34:40.480 +together with cold reading, which means, + +00:34:40.480 --> 00:34:43.440 +they say things calculated to make it + +00:34:43.440 --> 00:34:44.639 +appear that they know + +00:34:44.639 --> 00:34:49.119 +more than they do or things that + +00:34:49.119 --> 00:34:52.399 +sound wise to anyone, + +00:34:52.399 --> 00:34:55.679 +so you can say the same thing to, + +00:34:55.679 --> 00:34:58.800 +say, 100 people + +00:34:58.800 --> 00:35:02.000 +and 80 or 90 of them will say, "boy that + +00:35:02.000 --> 00:35:06.480 +was really accurate". + +00:35:06.480 --> 00:35:15.119 +But what if for some reason… + +00:35:15.119 --> 00:35:17.440 +"What advice would I give for + +00:35:17.440 --> 00:35:18.560 +stewardship of + +00:35:18.560 --> 00:35:25.359 +Emacs?" Well, basically focus on + +00:35:25.359 --> 00:35:28.480 +keeping the community strong in + +00:35:28.480 --> 00:35:29.280 +defending + +00:35:29.280 --> 00:35:32.640 +freedom, if you have a choice between + +00:35:32.640 --> 00:35:34.400 +keeping the community strong in + +00:35:34.400 --> 00:35:36.079 +defending freedom + +00:35:36.079 --> 00:35:38.800 +and getting more people to participate + +00:35:38.800 --> 00:35:40.720 +in the development, + +00:35:40.720 --> 00:35:42.890 +you've got to choose the freedom. + +00:35:42.890 --> 00:35:44.400 +It is very + +00:35:44.400 --> 00:35:48.400 +easy for free software projects to + +00:35:48.400 --> 00:35:52.320 +subordinate freedom to other criteria, + +00:35:52.320 --> 00:35:55.359 +and once that happens, it's + +00:35:55.359 --> 00:35:58.079 +easy for those who don't care much about + +00:35:58.079 --> 00:35:58.720 +freedom, + +00:35:58.720 --> 00:36:00.800 +such as, sometimes companies that might + +00:36:00.800 --> 00:36:02.640 +offer you some money + +00:36:02.640 --> 00:36:08.160 +to purchase your soul, + +00:36:08.160 --> 00:36:10.560 +not that there are really things that + +00:36:10.560 --> 00:36:14.240 +exist called souls, it's a metaphor, but + +00:36:14.240 --> 00:36:16.560 +it's an important metaphor for something + +00:36:16.560 --> 00:36:18.800 +important. + +00:36:18.800 --> 00:36:20.880 +People in the community have to be + +00:36:20.880 --> 00:36:24.320 +thinking about freedom + +00:36:24.320 --> 00:36:27.280 +when they make decisions about what is + +00:36:27.280 --> 00:36:31.839 +wise to do. + +00:36:31.839 --> 00:36:36.480 +The decision to set up NonGNU ELPA + +00:36:36.480 --> 00:36:39.357 +has a drawback, it was a compromise. + +00:36:39.357 --> 00:36:41.520 +Now, a lot of people will + +00:36:41.520 --> 00:36:44.560 +tell you that I am uncompromising and + +00:36:44.560 --> 00:36:46.240 +say that, that's a flaw. + +00:36:46.240 --> 00:36:48.720 +Well, they're wrong. I make little + +00:36:48.720 --> 00:36:50.320 +compromises + +00:36:50.320 --> 00:36:53.040 +very often, and occasionally I make a + +00:36:53.040 --> 00:36:55.359 +medium-sized compromise. + +00:36:55.359 --> 00:36:58.880 +The compromise is, in the past we wanted + +00:36:58.880 --> 00:36:59.359 +to get + +00:36:59.359 --> 00:37:01.599 +copyright assignments for the packages + +00:37:01.599 --> 00:37:03.823 +in GNU ELPA, + +00:37:03.823 --> 00:37:06.240 +so that we could move them into + +00:37:06.240 --> 00:37:09.119 +core Emacs, and of course, sometimes we + +00:37:09.119 --> 00:37:11.200 +move packages in the other direction, + +00:37:11.200 --> 00:37:14.480 +that way where we distribute a + +00:37:14.480 --> 00:37:16.160 +given package, + +00:37:16.160 --> 00:37:18.160 +is something we can decide purely + +00:37:18.160 --> 00:37:20.880 +technically. + +00:37:20.880 --> 00:37:25.200 +And however make insisting on getting + +00:37:25.200 --> 00:37:26.800 +copyright assignments for all the + +00:37:26.800 --> 00:37:28.640 +packages in GNU ELPA + +00:37:28.640 --> 00:37:32.079 +meant that we had to say "sorry, no, + +00:37:32.079 --> 00:37:35.119 +we will not install that + +00:37:35.119 --> 00:37:38.560 +package in GNU ELPA, unless the + +00:37:38.560 --> 00:37:40.957 +authors sign copyright assignments". + +00:37:40.957 --> 00:37:44.079 +And sometimes that's a lot of trouble. + +00:37:44.079 --> 00:37:47.520 +Well, NonGNU ELPA + +00:37:47.520 --> 00:37:50.123 +won't require copyright assignments. + +00:37:50.123 --> 00:37:51.520 +If there's a free package, + +00:37:51.520 --> 00:37:54.560 +we can make whatever changes, presumably + +00:37:54.560 --> 00:37:57.200 +small, otherwise, we would probably say + +00:37:57.200 --> 00:38:00.560 +we don't have time, and then + +00:38:00.560 --> 00:38:04.560 +put it in. But it does have the drawback + +00:38:04.560 --> 00:38:05.599 +that, + +00:38:05.599 --> 00:38:07.680 +in general we won't be able to move + +00:38:07.680 --> 00:38:09.119 +those packages + +00:38:09.119 --> 00:38:12.960 +into core Emacs without + +00:38:12.960 --> 00:38:14.960 +getting the legal papers then that we + +00:38:14.960 --> 00:38:20.160 +didn't get before. + +00:38:20.160 --> 00:38:24.320 +"How do you see the future of GNU Emacs?" + +00:38:24.320 --> 00:38:27.599 +I don't see the future. + +00:38:27.599 --> 00:38:29.839 +I used to say that my crystal ball is + +00:38:29.839 --> 00:38:31.680 +cloudy today, + +00:38:31.680 --> 00:38:35.680 +unfortunately, that has another + +00:38:35.680 --> 00:38:38.423 +meaning which is quite ironic. + +00:38:38.423 --> 00:38:41.200 +We certainly don't want + +00:38:41.200 --> 00:38:44.800 +our lives to be + +00:38:44.800 --> 00:38:48.480 +somewhere in a cloud, because + +00:38:48.480 --> 00:38:51.119 +that clouds remind, and then people + +00:38:51.119 --> 00:38:51.599 +start + +00:38:51.599 --> 00:38:54.240 +cheating you and taking advantage of you, + +00:38:54.240 --> 00:38:56.880 +and it's horrible. + +00:38:56.880 --> 00:39:00.160 +But I don't see the future, I just + +00:39:00.160 --> 00:39:02.720 +can be sure from the past that there + +00:39:02.720 --> 00:39:03.839 +will be + +00:39:03.839 --> 00:39:07.599 +challenges where some of the people + +00:39:07.599 --> 00:39:10.720 +involved want to make a big compromise + +00:39:10.720 --> 00:39:12.960 +that isn't worth it, + +00:39:12.960 --> 00:39:16.880 +and they may even get the + +00:39:16.880 --> 00:39:18.079 +impression that it's + +00:39:18.079 --> 00:39:21.200 +up to them. Well, actually + +00:39:21.200 --> 00:39:24.480 +Emacs has appointed maintainers just as + +00:39:24.480 --> 00:39:27.440 +every GNU package does, and they are the + +00:39:27.440 --> 00:39:29.280 +ones in charge of developing that + +00:39:29.280 --> 00:39:30.480 +package, + +00:39:30.480 --> 00:39:34.400 +and this is for a good reason + +00:39:34.400 --> 00:39:38.200 +because the appointed maintainers take + +00:39:38.200 --> 00:39:39.760 +responsibility + +00:39:39.760 --> 00:39:42.240 +to carry out the GNU project policies, + +00:39:42.240 --> 00:39:44.079 +and most important of all + +00:39:44.079 --> 00:39:46.160 +are the ones that make the whole system + +00:39:46.160 --> 00:39:47.520 +work together, + +00:39:47.520 --> 00:39:52.640 +and the ethical standards + +00:39:52.640 --> 00:39:59.920 +to respect freedom and defend freedom. + +00:39:59.920 --> 00:40:02.240 +"Is there any plan to move more packages + +00:40:02.240 --> 00:40:04.960 +from core Emacs into ELPA?" + +00:40:04.960 --> 00:40:08.480 +I don't know + +00:40:08.480 --> 00:40:11.440 +whether there is a plan, I suppose if + +00:40:11.440 --> 00:40:12.720 +there's a plan, + +00:40:12.720 --> 00:40:15.680 +we probably would have done it. If there + +00:40:15.680 --> 00:40:16.960 +had been a plan, + +00:40:16.960 --> 00:40:18.657 +some have been moved. + +00:40:18.657 --> 00:40:20.319 +I don't see this as a + +00:40:20.319 --> 00:40:22.400 +fundamentally important issue, it's a + +00:40:22.400 --> 00:40:24.160 +matter of what's convenient for + +00:40:24.160 --> 00:40:26.640 +the users, and their advantages and + +00:40:26.640 --> 00:40:29.599 +disadvantages to each choice. + +00:40:29.599 --> 00:40:32.800 +"What is your opinion on higher education + +00:40:32.800 --> 00:40:35.760 +requiring non-free software, for + +00:40:35.760 --> 00:40:36.720 +instance…" + +00:40:36.720 --> 00:40:40.400 +Well, I wouldn't + +00:40:40.400 --> 00:40:43.440 +matriculate in a school which did that, + +00:40:43.440 --> 00:40:50.960 +unless I saw a way I could refuse. + +00:40:50.960 --> 00:40:54.960 +Now, of course, I do this + +00:40:54.960 --> 00:40:57.760 +because I can get away with it, and + +00:40:57.760 --> 00:41:00.240 +therefore my doing it is extremely + +00:41:00.240 --> 00:41:04.960 +important to show somebody does resist. + +00:41:04.960 --> 00:41:08.400 +I don't expect most people who support + +00:41:08.400 --> 00:41:09.359 +free school, + +00:41:09.359 --> 00:41:12.319 +who advocate free software to go that + +00:41:12.319 --> 00:41:13.599 +far. + +00:41:13.599 --> 00:41:17.760 +I published an article in the spring + +00:41:17.760 --> 00:41:21.040 +entitled saying no even once + +00:41:21.040 --> 00:41:24.640 +is helping, saying no to non-free + +00:41:24.640 --> 00:41:25.359 +software + +00:41:25.359 --> 00:41:29.040 +even once, because + +00:41:29.040 --> 00:41:32.240 +the more you do it, the more you help, but + +00:41:32.240 --> 00:41:34.640 +even doing it a little in a way that + +00:41:34.640 --> 00:41:36.640 +other people notice, + +00:41:36.640 --> 00:41:39.920 +is starting to help. So, + +00:41:39.920 --> 00:41:43.440 +please don't think that your choices + +00:41:43.440 --> 00:41:45.119 +are either + +00:41:45.119 --> 00:41:48.480 +be as firm and stubborn as I am + +00:41:48.480 --> 00:41:52.240 +or just give up and let yourself drift + +00:41:52.240 --> 00:41:56.240 +helplessly as if you had no volition. + +00:41:56.240 --> 00:41:58.079 +There are a lot of points in between + +00:41:58.079 --> 00:42:00.720 +there, and you can surely + +00:42:00.720 --> 00:42:04.079 +manage to say no some of the time + +00:42:04.079 --> 00:42:07.839 +and show people an example of saying no + +00:42:07.839 --> 00:42:11.040 +some of the time, for instance, you could + +00:42:11.040 --> 00:42:12.720 +say to people, + +00:42:12.720 --> 00:42:15.520 +"You know I hate the fact that my school + +00:42:15.520 --> 00:42:16.000 +makes me + +00:42:16.000 --> 00:42:20.400 +use Zoom, so whenever + +00:42:20.400 --> 00:42:22.240 +I'm not being forced, I'm not going to + +00:42:22.240 --> 00:42:25.760 +use it". + +00:42:25.760 --> 00:42:29.200 +Or "I hate the fact that the only way I + +00:42:29.200 --> 00:42:31.200 +can talk to that group of people + +00:42:31.200 --> 00:42:35.200 +is with Zoom, + +00:42:35.200 --> 00:42:38.400 +but for anything else I will feel better + +00:42:38.400 --> 00:42:40.079 +about myself if I don't". + +00:42:40.079 --> 00:42:42.880 +See, lots of ways to say no some of the + +00:42:42.880 --> 00:42:44.000 +time, + +00:42:44.000 --> 00:42:47.040 +and yield some of the time, + +00:42:47.040 --> 00:42:50.960 +and when you try saying no occasionally, + +00:42:50.960 --> 00:42:53.920 +you may just develop the ability to say + +00:42:53.920 --> 00:42:56.400 +no more often. + +00:42:56.400 --> 00:42:58.800 +Now, whether you would ever get to be as + +00:42:58.800 --> 00:43:00.640 +stubborn as I am? + +00:43:00.640 --> 00:43:04.480 +I don't know, but what I find is that + +00:43:04.480 --> 00:43:08.480 +I like the fact that I've never made + +00:43:08.480 --> 00:43:12.480 +this kind of compromise. + +00:43:12.480 --> 00:43:15.839 +I feel I have a reputation to maintain, + +00:43:15.839 --> 00:43:19.319 +nobody's forcing me, but I get + +00:43:19.319 --> 00:43:21.119 +satisfaction + +00:43:21.119 --> 00:43:24.319 +out of maintaining…, out of being able to + +00:43:24.319 --> 00:43:26.400 +continue to say + +00:43:26.400 --> 00:43:30.880 +I will not. + +00:43:30.880 --> 00:43:34.480 +And that also + +00:43:34.480 --> 00:43:40.480 +can happen at various different levels, + +00:43:40.480 --> 00:43:43.520 +so, you can get that satisfaction + +00:43:43.520 --> 00:43:46.640 +of fully maintaining a refusal + +00:43:46.640 --> 00:43:54.400 +that applies only to certain areas. + +00:43:54.400 --> 00:43:57.040 +(Amin: since it's noon already, let's maybe + +00:43:57.040 --> 00:43:58.880 +take one or two more questions and then + +00:43:58.880 --> 00:43:59.599 +break for + +00:43:59.599 --> 00:44:03.200 +the lunch break) Okay. (Amin: Thank you). + +00:44:03.200 --> 00:44:05.757 +"How often do you personally use Emacs?" + +00:44:05.757 --> 00:44:10.640 +is the lowest question now. + +00:44:10.640 --> 00:44:16.640 +Well, I use it most of the day. + +00:44:16.640 --> 00:44:18.880 +I occasionally do use other things, in + +00:44:18.880 --> 00:44:20.160 +fact, I occasionally edit with + +00:44:20.160 --> 00:44:21.599 +LibreOffice, + +00:44:21.599 --> 00:44:24.240 +I occasionally use media players, + +00:44:24.240 --> 00:44:32.480 +I occasionally ssh to a machine and type + +00:44:32.480 --> 00:44:34.000 +some commands on it, + +00:44:34.000 --> 00:44:35.440 +which occasionally includes running + +00:44:35.440 --> 00:44:42.319 +Emacs on it. + +00:44:42.319 --> 00:44:45.760 +I read PDF files a lot, + +00:44:45.760 --> 00:44:47.520 +would be nice if you could get those + +00:44:47.520 --> 00:44:49.599 +into Emacs, so that I could read them + +00:44:49.599 --> 00:44:52.240 +with Emacs commands, + +00:44:52.240 --> 00:44:55.040 +and I maybe even edit them with the Emacs + +00:44:55.040 --> 00:44:56.160 +commands + +00:44:56.160 --> 00:44:59.440 +when they can be edited. I use + +00:44:59.440 --> 00:45:02.960 +Xournal sometimes + +00:45:02.960 --> 00:45:10.079 +to write on a PDF file. + +00:45:10.079 --> 00:45:12.160 +"Are there any more interesting projects + +00:45:12.160 --> 00:45:13.760 +you have in mind over and above + +00:45:13.760 --> 00:45:18.400 +NonGNU ELPA?" + +00:45:18.400 --> 00:45:22.079 +I can't think of one right now, well, + +00:45:22.079 --> 00:45:25.520 +there are things that + +00:45:25.520 --> 00:45:27.119 +the GNU project needs + +00:45:27.119 --> 00:45:30.560 +doing, there are packages that don't have + +00:45:30.560 --> 00:45:32.319 +maintainers or could use + +00:45:32.319 --> 00:45:35.839 +more maintainers. + +00:45:35.839 --> 00:45:38.880 +Talk with maintainers@gnu.org, + +00:45:38.880 --> 00:45:42.000 +and the assistant GNUisances will + +00:45:42.000 --> 00:45:44.960 +help you find a package where you can do + +00:45:44.960 --> 00:45:48.400 +good. + +00:45:48.400 --> 00:45:50.560 +Not for beginners though, + +00:45:50.560 --> 00:45:52.079 +you got to learn + +00:45:52.079 --> 00:45:55.599 +a substantive substantial level of + +00:45:55.599 --> 00:45:58.160 +capacity to develop and debug programs + +00:45:58.160 --> 00:45:59.440 +before you can + +00:45:59.440 --> 00:46:00.823 +be a maintainer. + +00:46:00.823 --> 00:46:04.480 +"Have I ever looked at Magit?" + +00:46:04.480 --> 00:46:08.400 +No, I haven't, + +00:46:08.400 --> 00:46:11.920 +but I believe + +00:46:11.920 --> 00:46:14.880 +work is being done to get it put into + +00:46:14.880 --> 00:46:16.560 +Emacs, + +00:46:16.560 --> 00:46:22.240 +and at that point I'll give it a try. + +00:46:22.240 --> 00:46:25.200 +I do not want to share my configuration + +00:46:25.200 --> 00:46:29.520 +files they're personal. + +00:46:29.520 --> 00:46:33.599 +How about if we end this now? + +00:46:33.599 --> 00:46:36.880 +(Amin: sounds good to me, + +00:46:36.880 --> 00:46:38.880 +thank you very much Richard for joining + +00:46:38.880 --> 00:46:41.520 +in for live questions.) + +00:46:41.520 --> 00:46:43.839 +Okay. diff --git a/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt new file mode 100644 index 00000000..89dc142e --- /dev/null +++ b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt @@ -0,0 +1,400 @@ +WEBVTT + +00:00:00.320 --> 00:00:03.280 +Hello, I'm Richard Stallman, + +00:00:03.280 --> 00:00:07.816 +founder of the GNU project. + +00:00:07.816 --> 00:00:09.200 +In 1976, I developed the first + +00:00:09.200 --> 00:00:12.320 +Emacs editor with some help + +00:00:12.320 --> 00:00:13.440 +from Guy Steele. + +00:00:13.440 --> 00:00:15.839 +Then, shortly after starting to develop + +00:00:15.839 --> 00:00:19.119 +the GNU operating system in 1984, + +00:00:19.119 --> 00:00:22.240 +I wanted an Emacs editor for it. + +00:00:22.240 --> 00:00:29.519 +So I started writing GNU Emacs in +September 1984. + +00:00:29.519 --> 00:00:32.640 +Several years ago we decided to move + +00:00:32.640 --> 00:00:35.920 +many of the Emacs Lisp packages outside + +00:00:35.920 --> 00:00:39.866 +the core Emacs distribution into + +00:00:39.866 --> 00:00:46.480 +a separate package archive that we call +the Emacs Lisp package archive ELPA. + +00:00:46.480 --> 00:00:49.555 +There were two main reasons for this. + +00:00:49.555 --> 00:00:51.520 +One is to make the Emacs +distribution smaller + +00:00:51.520 --> 00:00:54.870 +so every user wouldn't have to + +00:00:54.870 --> 00:00:55.680 +get all the packages + +00:00:55.680 --> 00:00:58.820 +and install all the packages. + +00:00:58.820 --> 00:01:00.480 +And the other reason was to make it +possible to + +00:01:00.480 --> 00:01:03.485 +release individual packages + +00:01:03.485 --> 00:01:08.880 +separately from Emacs releases. + +00:01:08.880 --> 00:01:13.119 +Now, at that point somehow we decided to + +00:01:13.119 --> 00:01:17.040 +support loading packages from + +00:01:17.040 --> 00:01:21.119 +a variety of different Emacs Lisp +package archives + +00:01:21.119 --> 00:01:25.520 +and ours would be called the GNU ELPA, + +00:01:25.520 --> 00:01:29.280 +but ELPA could be any other. + +00:01:29.280 --> 00:01:32.945 +Now, I think that naming was a mistake. + +00:01:32.945 --> 00:01:35.119 +We should have meant, we should have +decided that ELPA + +00:01:35.119 --> 00:01:37.759 +referred to our package archive + +00:01:37.759 --> 00:01:39.297 +and any other package archive + +00:01:39.297 --> 00:01:42.479 +should be called some other name. + +00:01:42.479 --> 00:01:46.128 +Oh, well! Uh this is a mistake, + +00:01:46.128 --> 00:01:48.320 +I believe, because it leads + +00:01:48.320 --> 00:01:49.397 +to a lot of confusion. + +00:01:49.397 --> 00:01:51.119 +It would have been clearer + +00:01:51.119 --> 00:01:55.759 +if we had used the other naming. + +00:01:55.759 --> 00:01:59.812 +Because the difference between + +00:01:59.812 --> 00:02:04.159 +having a package in core Emacs and +having it in GNU ELPA, + +00:02:04.159 --> 00:02:07.840 +is purely a practical convenience matter. + +00:02:07.840 --> 00:02:10.501 +Convenience of distribution + +00:02:10.501 --> 00:02:12.000 +and convenience of maintenance. + +00:02:12.000 --> 00:02:14.879 +We wanted to be able to move packages + +00:02:14.879 --> 00:02:16.800 +between the two + +00:02:16.800 --> 00:02:19.258 +whenever that was convenient. + +00:02:19.258 --> 00:02:21.200 +So, to make that possible + +00:02:21.200 --> 00:02:23.200 +we insisted on getting copyright + +00:02:23.200 --> 00:02:26.319 +assignments for packages in GNU ELPA + +00:02:26.319 --> 00:02:31.360 +just the same way we do for packages in +core Emacs. + +00:02:31.360 --> 00:02:33.760 +Having the facility for installing + +00:02:33.760 --> 00:02:36.239 +packages from package archives, + +00:02:36.239 --> 00:02:39.440 +led to a tremendous boost in the + +00:02:39.440 --> 00:02:42.239 +development and release of Emacs packages. + +00:02:42.239 --> 00:02:44.879 +Unfortunately there was a problem with + +00:02:44.879 --> 00:02:46.560 +the way that was done. + +00:02:46.560 --> 00:02:50.000 +For the most part, the developers of +these packages + +00:02:50.000 --> 00:02:52.218 +wouldn't even tell us about them. + +00:02:52.218 --> 00:02:56.027 +They posted them in another package +archive + +00:02:56.027 --> 00:02:58.480 +where we didn't know about them + +00:02:58.480 --> 00:03:03.120 +and no attempt was made to +try to fit them + +00:03:03.120 --> 00:03:06.560 +into Emacs so that they could make sense + +00:03:06.560 --> 00:03:10.879 +as parts of the Emacs distribution. + +00:03:10.879 --> 00:03:14.480 +This led to both moral problems, + +00:03:14.480 --> 00:03:16.375 +(packages that depended on + +00:03:16.375 --> 00:03:19.599 +non-free software in order to be usable) + +00:03:19.599 --> 00:03:21.354 +and technical problems, + +00:03:21.354 --> 00:03:24.877 +because the developers of those packages + +00:03:24.877 --> 00:03:26.159 +didn't coordinate with us + +00:03:26.159 --> 00:03:29.519 +about how to make it useful and + +00:03:29.519 --> 00:03:36.560 +convenient and clean to have them in +Emacs. + +00:03:36.560 --> 00:03:41.120 +So, the idea of NonGNU ELPA + +00:03:41.120 --> 00:03:45.337 +is an effort to smooth these +things out. + +00:03:45.337 --> 00:03:48.319 +The fundamental plan of + +00:03:48.319 --> 00:03:51.680 +NonGNU ELPA is that + +00:03:51.680 --> 00:03:54.480 +we won't ask for copyright assignments + +00:03:54.480 --> 00:03:56.159 +for those packages. + +00:03:56.159 --> 00:04:00.000 +So, we won't be able to put them into +core Emacs; + +00:04:00.000 --> 00:04:03.550 +at least not easily, + +00:04:03.550 --> 00:04:09.519 +but we will have some control over how +we distribute them. + +00:04:09.519 --> 00:04:14.691 +We can put any package into NonGNU ELPA + +00:04:14.691 --> 00:04:16.320 +as long as it's free software. + +00:04:16.320 --> 00:04:23.360 +If we like it, we can set up that way +for users to get it. + +00:04:23.360 --> 00:04:26.720 +We could put the package in +exactly as it is + +00:04:26.720 --> 00:04:29.919 +if there's no problem at all with it. + +00:04:29.919 --> 00:04:32.647 +We can make an arrangement + +00:04:32.647 --> 00:04:34.160 +with the package's developers + +00:04:34.160 --> 00:04:38.000 +to work on it with us and maintain it + +00:04:38.000 --> 00:04:42.560 +directly for distribution by NonGNU ELPA, + +00:04:42.560 --> 00:04:45.778 +but if they are not interested, + +00:04:45.778 --> 00:04:48.729 +we can put it in ourselves, + +00:04:48.729 --> 00:04:50.453 +and if we need to make any changes, + +00:04:50.453 --> 00:04:52.000 +we can do so. + +00:04:52.000 --> 00:04:58.688 +So, NonGNU ELPA is not meant to be + +00:04:58.688 --> 00:05:02.720 +just a way that others can distribute +their packages. + +00:05:02.720 --> 00:05:04.336 +It's meant, at least in + +00:05:04.336 --> 00:05:07.574 +a minimal technical sense, + +00:05:07.574 --> 00:05:10.686 +to work with GNU Emacs, + +00:05:10.686 --> 00:05:12.305 +and we'll make changes if necessary, + +00:05:12.305 --> 00:05:17.928 +so that it works smoothly with Emacs. + +00:05:17.928 --> 00:05:25.365 +And this means that we're going to +maintain it differently from GNU ELPA. + +00:05:25.365 --> 00:05:31.520 +Well, GNU ELPA is hosted in a way that +is actually rather inconvenient. + +00:05:31.520 --> 00:05:35.600 +It is one single Git repository. + +00:05:35.600 --> 00:05:39.039 +And so anybody that has access +to write it + +00:05:39.039 --> 00:05:41.239 +can write any part of it. + +00:05:41.239 --> 00:05:46.080 +There are many different packages in +there, maintained by different people, + +00:05:46.080 --> 00:05:48.080 +and we have no way to give each one of + +00:05:48.080 --> 00:05:50.960 +them access to per own package + +00:05:50.960 --> 00:05:53.122 +and not to the others. + +00:05:53.122 --> 00:05:57.035 +Well, with NonGNU ELPA, +we plan to fix that. + +00:05:57.035 --> 00:06:01.411 +The idea is to have +a single Git repository + +00:06:01.411 --> 00:06:05.600 +where you can download various packages from. + +00:06:05.600 --> 00:06:08.400 +But they won't be maintained there. + +00:06:08.400 --> 00:06:10.800 +Each of those packages will be + +00:06:10.800 --> 00:06:15.280 +copied automatically from some other place. + +00:06:15.280 --> 00:06:18.311 +Probably some other repository + +00:06:18.311 --> 00:06:22.960 +where the right people have access to work on it. + +00:06:22.960 --> 00:06:26.375 +And this way we can avoid giving + +00:06:26.375 --> 00:06:28.160 +a gigantic number of people + +00:06:28.160 --> 00:06:32.240 +access to every part of it. + +00:06:32.240 --> 00:06:37.039 +So far NonGNU ELPA is just a plan, + +00:06:37.039 --> 00:06:40.479 +we need people to implement the plan. + +00:06:40.479 --> 00:06:43.825 +So, if you would like to help, + +00:06:43.825 --> 00:06:45.120 +please write to me. + +00:06:45.120 --> 00:06:49.520 +I think this is a very important step for progress + +00:06:49.520 --> 00:06:52.639 +and it's got to be implemented. + +00:06:52.639 --> 00:06:57.919 +Thanks and happy hacking! diff --git a/2020/subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt b/2020/subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt new file mode 100644 index 00000000..fd49bf4e --- /dev/null +++ b/2020/subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt @@ -0,0 +1,205 @@ +WEBVTT + +00:00:07.359 --> 00:00:09.519 +alrighty + +00:00:09.519 --> 00:00:19.840 +we're all set up waiting for corbin + +00:00:19.840 --> 00:00:22.960 +you are now muted + +00:00:22.960 --> 00:00:26.240 +oh it might be having a kid emergency so + +00:00:26.240 --> 00:00:28.080 +if you want we can get started with our + +00:00:28.080 --> 00:00:30.080 +closing remarks you are now unmuted and + +00:00:30.080 --> 00:00:31.199 +then we will + +00:00:31.199 --> 00:00:35.120 +um you know bring corwin in when when um + +00:00:35.120 --> 00:00:38.879 +things permit + +00:00:38.879 --> 00:00:42.840 +let me just share the closing remarks + +00:00:42.840 --> 00:00:44.160 +notes + +00:00:44.160 --> 00:00:46.879 +so that we can see what that's like + +00:00:46.879 --> 00:00:48.879 +actually + +00:00:48.879 --> 00:00:55.440 +um + +00:00:55.440 --> 00:00:58.399 +yeah sure I guess we can do the closing + +00:00:58.399 --> 00:01:00.719 +remarks + +00:01:00.719 --> 00:01:03.680 +okay not actually closing yet there + +00:01:03.680 --> 00:01:06.400 +might be another talk after this but + +00:01:06.400 --> 00:01:08.479 +since we have a little time before uh + +00:01:08.479 --> 00:01:09.680 +before + +00:01:09.680 --> 00:01:12.320 +uh cornbread comes well you know share + +00:01:12.320 --> 00:01:13.439 +some of the interesting things we've + +00:01:13.439 --> 00:01:14.799 +seen today + +00:01:14.799 --> 00:01:18.479 +so uh there have been about 12 20 talks + +00:01:18.479 --> 00:01:21.840 +21 out once once ong macros + +00:01:21.840 --> 00:01:25.360 +happens that's all today there's 16 more + +00:01:25.360 --> 00:01:26.159 +talks tomorrow + +00:01:26.159 --> 00:01:28.560 +so if you thought today was lots of fun + +00:01:28.560 --> 00:01:30.880 +be sure to tune in tomorrow as well + +00:01:30.880 --> 00:01:33.920 +uh for reference last year's EmacsConf + +00:01:33.920 --> 00:01:36.240 +had 30 talks many of which were lighting + +00:01:36.240 --> 00:01:37.600 +talks this year + +00:01:37.600 --> 00:01:39.680 +we had slightly longer talks and a lot + +00:01:39.680 --> 00:01:41.360 +more interactivities or a lot more + +00:01:41.360 --> 00:01:43.119 +question and answer sections + +00:01:43.119 --> 00:01:45.360 +they're worth more than there were about + +00:01:45.360 --> 00:01:47.040 +391 viewers + +00:01:47.040 --> 00:01:50.079 +on the main main stream + +00:01:50.079 --> 00:01:52.320 +and about 26 in the lower resolution + +00:01:52.320 --> 00:01:53.680 +stream + +00:01:53.680 --> 00:01:55.680 +last year's viewers were last year had + +00:01:55.680 --> 00:01:58.960 +about 270 viewers at the same time so + +00:01:58.960 --> 00:02:01.280 +the max clock is getting bigger and + +00:02:01.280 --> 00:02:02.719 +etherpad has been working out + +00:02:02.719 --> 00:02:05.360 +really really well uh people have been + +00:02:05.360 --> 00:02:07.280 +using that to pose their questions + +00:02:07.280 --> 00:02:08.800 +so I think at some point I saw there + +00:02:08.800 --> 00:02:11.120 +were 124 people working on it and we + +00:02:11.120 --> 00:02:12.640 +only managed to + +00:02:12.640 --> 00:02:17.440 +accidentally erase it once so yay us + +00:02:17.440 --> 00:02:19.599 +and yay everybody for helping thank you + +00:02:19.599 --> 00:02:24.319 +so much + +00:02:24.319 --> 00:02:27.920 +so yeah so the videos and other + +00:02:27.920 --> 00:02:29.200 +resources + +00:02:29.200 --> 00:02:31.840 +um we're planning to post uh sometime + +00:02:31.840 --> 00:02:33.680 +over the next few weeks + +00:02:33.680 --> 00:02:36.000 +um it actually took a couple weeks last + +00:02:36.000 --> 00:02:37.519 +year but this year + +00:02:37.519 --> 00:02:39.519 +I'm hoping that we can at least + +00:02:39.519 --> 00:02:41.040 +partially partially + +00:02:41.040 --> 00:02:44.160 +um release them much sooner um + +00:02:44.160 --> 00:02:45.440 +you know I might be able to get around + +00:02:45.440 --> 00:02:47.280 +to uploading some of the pre-recorded + +00:02:47.280 --> 00:02:48.160 +talks + +00:02:48.160 --> 00:02:53.360 +um later tonight after the conference + +00:02:53.360 --> 00:02:57.760 +so keep an eye on emacsconf.org/2020 for that + +00:02:57.760 --> 00:03:01.120 +Join our mailing lists which is + +00:03:01.120 --> 00:03:07.840 +a list that you know. https://lists.gnu.org/mailman/listinfo/emacsconf-discuss diff --git a/2020/subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt b/2020/subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt new file mode 100644 index 00000000..b7b770ac --- /dev/null +++ b/2020/subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt @@ -0,0 +1,1000 @@ +WEBVTT + +00:00:03.760 --> 00:00:04.480 +this is the + +00:00:04.480 --> 00:00:06.640 +closing remarks section where we get to + +00:00:06.640 --> 00:00:07.680 +again thank people + +00:00:07.680 --> 00:00:09.440 +and get people to share their lessons + +00:00:09.440 --> 00:00:10.800 +learned and whatnot + +00:00:10.800 --> 00:00:13.599 +but uh leo since you've stayed up to uh + +00:00:13.599 --> 00:00:14.080 +to + +00:00:14.080 --> 00:00:16.000 +say something let's let's let's turn it + +00:00:16.000 --> 00:00:17.520 +over to you + +00:00:17.520 --> 00:00:20.240 +oh what should I be saying I mean let me + +00:00:20.240 --> 00:00:22.640 +just turn on the webcam first + +00:00:22.640 --> 00:00:25.279 +and uh as you can see the day has + +00:00:25.279 --> 00:00:26.480 +progressed I'm not + +00:00:26.480 --> 00:00:28.640 +blasting light into my face I'm now + +00:00:28.640 --> 00:00:30.080 +sitting instead of + +00:00:30.080 --> 00:00:32.160 +you know standing so you can tell that + +00:00:32.160 --> 00:00:33.760 +it's getting quite late for europe right + +00:00:33.760 --> 00:00:38.239 +now + +00:00:38.239 --> 00:00:40.320 +but uh yeah I'm not sure if you want me + +00:00:40.320 --> 00:00:42.559 +to to go we've already done a little bit + +00:00:42.559 --> 00:00:44.800 +of our closing remarks anyway before uh + +00:00:44.800 --> 00:00:45.920 +colleen's talk + +00:00:45.920 --> 00:00:48.719 +so yeah what do you want me to add I + +00:00:48.719 --> 00:00:49.120 +mean we've + +00:00:49.120 --> 00:00:50.800 +all we've all been thanking one another + +00:00:50.800 --> 00:00:52.719 +we've been spanking the speakers + +00:00:52.719 --> 00:00:55.440 +uh you know nothing would have been + +00:00:55.440 --> 00:00:56.800 +possible without the efforts + +00:00:56.800 --> 00:00:59.359 +of you know all the other organizers in + +00:00:59.359 --> 00:01:01.280 +the team but also the speakers so + +00:01:01.280 --> 00:01:03.039 +I'll just reiterate what corwin has been + +00:01:03.039 --> 00:01:05.040 +telling you thank you so much for being + +00:01:05.040 --> 00:01:05.680 +so + +00:01:05.680 --> 00:01:07.920 +so many today I believe we've tripled + +00:01:07.920 --> 00:01:09.520 +the amount of viewers that we had for + +00:01:09.520 --> 00:01:11.360 +the previous imax conf + +00:01:11.360 --> 00:01:14.960 +and that's mind-boggling to have + +00:01:14.960 --> 00:01:17.600 +so many people have seen me to think + +00:01:17.600 --> 00:01:19.119 +that so many people have seen me spill + +00:01:19.119 --> 00:01:20.479 +water on myself + +00:01:20.479 --> 00:01:22.560 +and do a fool of myself for the entire + +00:01:22.560 --> 00:01:24.040 +day it is + +00:01:24.040 --> 00:01:26.320 +outstandingly stupid but still thank you + +00:01:26.320 --> 00:01:27.119 +so much + +00:01:27.119 --> 00:01:30.880 +it's fine yeah it's this one + +00:01:30.880 --> 00:01:32.640 +yeah this is this is going going really + +00:01:32.640 --> 00:01:34.240 +really well um + +00:01:34.240 --> 00:01:36.079 +but of course there's always ideas we + +00:01:36.079 --> 00:01:37.360 +can you can try to + +00:01:37.360 --> 00:01:39.439 +make it even even better so if you have + +00:01:39.439 --> 00:01:41.840 +any ideas or if you have any + +00:01:41.840 --> 00:01:43.280 +uh comments on the things that work + +00:01:43.280 --> 00:01:44.479 +really well that you'd like us to keep + +00:01:44.479 --> 00:01:45.600 +doing tomorrow + +00:01:45.600 --> 00:01:47.040 +please make sure to leave them in the + +00:01:47.040 --> 00:01:49.920 +other pad uh so the url is somewhere in + +00:01:49.920 --> 00:01:51.600 +all the different places we put it + +00:01:51.600 --> 00:01:53.200 +and there's a section all the way at the + +00:01:53.200 --> 00:01:55.439 +end where you people can drop in their + +00:01:55.439 --> 00:01:56.640 +general feedback + +00:01:56.640 --> 00:01:59.200 +and what went well what can be improved + +00:01:59.200 --> 00:02:01.040 +if you want to volunteer to help out + +00:02:01.040 --> 00:02:01.439 +with + +00:02:01.439 --> 00:02:04.240 +copying questions for example that might + +00:02:04.240 --> 00:02:05.439 +be great + +00:02:05.439 --> 00:02:08.879 +anyways it's all there uh and um + +00:02:08.879 --> 00:02:12.879 +that's that's my part + +00:02:12.879 --> 00:02:16.000 +um sorry + +00:02:16.000 --> 00:02:18.400 +so say that again uh it's been lots of + +00:02:18.400 --> 00:02:20.480 +fun and there's tomorrow oh my goodness + +00:02:20.480 --> 00:02:23.280 +you're still tomorrow that's tomorrow + +00:02:23.280 --> 00:02:26.720 +damn it + +00:02:26.720 --> 00:02:30.239 +yeah it's so it's been a lot of fun + +00:02:30.239 --> 00:02:31.680 +today + +00:02:31.680 --> 00:02:35.280 +um let's see so yeah I'm + +00:02:35.280 --> 00:02:38.080 +I guess we did go through the stats + +00:02:38.080 --> 00:02:39.280 +before but I'll + +00:02:39.280 --> 00:02:42.319 +also quickly add that um + +00:02:42.319 --> 00:02:44.879 +you know I've been looking a bit of an + +00:02:44.879 --> 00:02:45.680 +eye on the + +00:02:45.680 --> 00:02:47.920 +server's network bandwidth usage and you + +00:02:47.920 --> 00:02:49.280 +know today we've + +00:02:49.280 --> 00:02:51.920 +had about 1.3 terabytes of outbound + +00:02:51.920 --> 00:02:53.200 +traffic + +00:02:53.200 --> 00:02:56.319 +um which is definitely something + +00:02:56.319 --> 00:02:59.280 +and it's a record it's by by far you + +00:02:59.280 --> 00:03:00.800 +know shattered last year's numbers we + +00:03:00.800 --> 00:03:01.680 +had I think + +00:03:01.680 --> 00:03:04.959 +about like 400 viewers live um peaking + +00:03:04.959 --> 00:03:06.159 +at one point + +00:03:06.159 --> 00:03:09.280 +um and it's very humble + +00:03:09.280 --> 00:03:13.040 +humbling to see um like so many people + +00:03:13.040 --> 00:03:16.480 +um you know tune in to watch talks + +00:03:16.480 --> 00:03:18.080 +um about their favorite piece of + +00:03:18.080 --> 00:03:20.319 +software um about Emacs + +00:03:20.319 --> 00:03:23.760 +and um you know be part of the community + +00:03:23.760 --> 00:03:27.280 +and you know have us be be part of the + +00:03:27.280 --> 00:03:28.239 +community or + +00:03:28.239 --> 00:03:30.799 +I guess um you know run this sort of an + +00:03:30.799 --> 00:03:32.080 +event so it's been absolutely + +00:03:32.080 --> 00:03:35.680 +awesome um I guess I can quickly get to + +00:03:35.680 --> 00:03:36.319 +the + +00:03:36.319 --> 00:03:38.879 +thanks if you leo or sasha don't have + +00:03:38.879 --> 00:03:40.799 +anything else to add + +00:03:40.799 --> 00:03:44.000 +nope all good alrighty um + +00:03:44.000 --> 00:03:47.040 +yeah so let's see I'd like to thank the + +00:03:47.040 --> 00:03:48.400 +free software foundation + +00:03:48.400 --> 00:03:51.840 +especially the tech team um for + +00:03:51.840 --> 00:03:53.680 +for their general support for letting us + +00:03:53.680 --> 00:03:55.599 +use their big blue button + +00:03:55.599 --> 00:03:58.640 +um yeah thank you so much it's + +00:03:58.640 --> 00:04:00.640 +it's made a lot of difference this year + +00:04:00.640 --> 00:04:02.720 +um you know last year for EmacsConf + +00:04:02.720 --> 00:04:04.000 +2019 we used + +00:04:04.000 --> 00:04:07.040 +um jitsi meat um + +00:04:07.040 --> 00:04:10.799 +which was awesome but um + +00:04:10.799 --> 00:04:13.280 +you know we did run into some technical + +00:04:13.280 --> 00:04:15.599 +difficulties with it but this time + +00:04:15.599 --> 00:04:17.840 +um you know big blue button was for the + +00:04:17.840 --> 00:04:19.519 +most part smooth sailing + +00:04:19.519 --> 00:04:22.639 +um so yeah thank you very much to the + +00:04:22.639 --> 00:04:23.919 +free software foundation + +00:04:23.919 --> 00:04:25.520 +foundation for letting us use their + +00:04:25.520 --> 00:04:27.360 +weekly watson instance + +00:04:27.360 --> 00:04:29.199 +allow me to just interject for a second + +00:04:29.199 --> 00:04:31.280 +it was smooth sailing for absolutely + +00:04:31.280 --> 00:04:33.360 +every single speaker but myself + +00:04:33.360 --> 00:04:35.520 +well I managed to have three different + +00:04:35.520 --> 00:04:37.600 +problems with big blue buttons so + +00:04:37.600 --> 00:04:39.440 +I'll be fighting buggy pulse all night + +00:04:39.440 --> 00:04:42.000 +you can be sure of that + +00:04:42.000 --> 00:04:44.560 +please do um yeah that's that's the + +00:04:44.560 --> 00:04:46.000 +beauty of free software I guess + +00:04:46.000 --> 00:04:48.240 +is you know it it can be frustrating but + +00:04:48.240 --> 00:04:49.360 +at least you know there's + +00:04:49.360 --> 00:04:51.040 +multiple ways forward with you know + +00:04:51.040 --> 00:04:52.880 +reporting bugs and sending patches + +00:04:52.880 --> 00:04:55.840 +um and you know that's part of I guess + +00:04:55.840 --> 00:04:56.960 +the message that + +00:04:56.960 --> 00:04:59.360 +I'm I'm hoping that like you know people + +00:04:59.360 --> 00:05:01.680 +who take away from an event like this + +00:05:01.680 --> 00:05:04.560 +um around a community like this um you + +00:05:04.560 --> 00:05:05.440 +know Emacs + +00:05:05.440 --> 00:05:08.320 +you know being such an um long-standing + +00:05:08.320 --> 00:05:10.960 +piece of free software um + +00:05:10.960 --> 00:05:13.840 +and having this large of a community + +00:05:13.840 --> 00:05:15.840 +around it who who's been continuing to + +00:05:15.840 --> 00:05:17.520 +grow + +00:05:17.520 --> 00:05:20.160 +and mature with Emacs and you know every + +00:05:20.160 --> 00:05:23.199 +year we get new people in + +00:05:23.199 --> 00:05:26.240 +more and more people discover Emacs um + +00:05:26.240 --> 00:05:27.840 +you know join the community + +00:05:27.840 --> 00:05:31.520 +or communities I should say um + +00:05:31.520 --> 00:05:34.720 +it's just wonderful and + +00:05:34.720 --> 00:05:36.560 +a large part of it is possible because + +00:05:36.560 --> 00:05:38.800 +Emacs is free software um + +00:05:38.800 --> 00:05:42.560 +so I mean at the risk of spoiling my own + +00:05:42.560 --> 00:05:43.280 +talk + +00:05:43.280 --> 00:05:46.400 +uh-huh I I I + +00:05:46.400 --> 00:05:48.000 +I want to say that's that's what we're + +00:05:48.000 --> 00:05:50.000 +going to pivot to tomorrow that's that's + +00:05:50.000 --> 00:05:50.400 +what + +00:05:50.400 --> 00:05:52.800 +uh welcome to the dungeon talk is really + +00:05:52.800 --> 00:05:55.199 +about why it has to be free software + +00:05:55.199 --> 00:05:58.080 +and as you peel the project apart I + +00:05:58.080 --> 00:05:58.960 +think you'll see + +00:05:58.960 --> 00:06:02.000 +eric and I have for a long time that it + +00:06:02.000 --> 00:06:05.440 +is shameful to even think about trying + +00:06:05.440 --> 00:06:06.560 +to put + +00:06:06.560 --> 00:06:10.240 +some things outside of the public domain + +00:06:10.240 --> 00:06:14.639 +right yeah exactly and I think that's a + +00:06:14.639 --> 00:06:17.120 +good point to bring this up um this is a + +00:06:17.120 --> 00:06:18.240 +closing remark + +00:06:18.240 --> 00:06:19.919 +but it's only for today you know we've + +00:06:19.919 --> 00:06:22.319 +got tomorrow a long day of events + +00:06:22.319 --> 00:06:25.919 +um much like today um you know I say it + +00:06:25.919 --> 00:06:26.639 +long but + +00:06:26.639 --> 00:06:28.720 +in a way like thinking back it kind of + +00:06:28.720 --> 00:06:29.840 +like went by like this + +00:06:29.840 --> 00:06:34.160 +so um yeah it's gonna be a lot of fun + +00:06:34.160 --> 00:06:37.120 +much like today was so yeah definitely + +00:06:37.120 --> 00:06:38.800 +tune in tomorrow + +00:06:38.800 --> 00:06:41.039 +um we're going to be starting at the + +00:06:41.039 --> 00:06:43.240 +same time same place you know + +00:06:43.240 --> 00:06:45.919 +live.emacsconf.org + +00:06:45.919 --> 00:06:47.360 +for the specific mount points for + +00:06:47.360 --> 00:06:48.960 +example you know we'll be using + +00:06:48.960 --> 00:06:50.000 +main.webm + +00:06:50.000 --> 00:06:53.599 +and main dash 480p dot webm + +00:06:53.599 --> 00:06:57.680 +um I want to say thank you to sasha for + +00:06:57.680 --> 00:07:00.000 +setting that up and getting it running + +00:07:00.000 --> 00:07:00.800 +because + +00:07:00.800 --> 00:07:04.240 +I remember last year um + +00:07:04.240 --> 00:07:06.960 +you know we had a couple of people um + +00:07:06.960 --> 00:07:08.080 +requesting + +00:07:08.080 --> 00:07:11.280 +that you know a a lower resolution + +00:07:11.280 --> 00:07:14.000 +stream or mount point be made available + +00:07:14.000 --> 00:07:14.560 +um + +00:07:14.560 --> 00:07:18.000 +because of their limited bandwidth and + +00:07:18.000 --> 00:07:19.840 +it like when you have like free software + +00:07:19.840 --> 00:07:21.759 +tools it's not too hard + +00:07:21.759 --> 00:07:25.919 +um to get something like that going um + +00:07:25.919 --> 00:07:27.919 +I mean not impossible I should say it + +00:07:27.919 --> 00:07:29.199 +wasn't too easy + +00:07:29.199 --> 00:07:32.000 +we did have some difficulties with it + +00:07:32.000 --> 00:07:33.120 +today + +00:07:33.120 --> 00:07:34.800 +I'm learning more about ffmpeg and I + +00:07:34.800 --> 00:07:36.160 +expected to know at this point but it's + +00:07:36.160 --> 00:07:37.840 +great + +00:07:37.840 --> 00:07:41.599 +maybe it'll work tomorrow too yeah + +00:07:41.599 --> 00:07:44.720 +um yeah sasha can attest to it um + +00:07:44.720 --> 00:07:46.160 +you know there were still some king + +00:07:46.160 --> 00:07:47.759 +spitting iron out + +00:07:47.759 --> 00:07:51.039 +um and it's a process but you know we're + +00:07:51.039 --> 00:07:51.840 +all learning + +00:07:51.840 --> 00:07:54.879 +um each each of us in our own ways + +00:07:54.879 --> 00:07:58.000 +um yeah so there's that + +00:07:58.000 --> 00:08:00.400 +I'm very happy to have had that mount + +00:08:00.400 --> 00:08:02.800 +points to making banks conf accessible + +00:08:02.800 --> 00:08:03.599 +to people + +00:08:03.599 --> 00:08:06.560 +in um you know areas of the world where + +00:08:06.560 --> 00:08:08.160 +bandwidth may not be + +00:08:08.160 --> 00:08:10.160 +um you know as cheap or as readily + +00:08:10.160 --> 00:08:12.240 +available + +00:08:12.240 --> 00:08:13.680 +or just you know someone wanting to + +00:08:13.680 --> 00:08:15.280 +watch on their phone um + +00:08:15.280 --> 00:08:17.520 +even here um you know in the us and + +00:08:17.520 --> 00:08:18.560 +canada + +00:08:18.560 --> 00:08:20.160 +data plans are not exactly cheap or + +00:08:20.160 --> 00:08:21.919 +unlimited so + +00:08:21.919 --> 00:08:24.960 +um yeah that's great + +00:08:24.960 --> 00:08:29.520 +let's see yeah so + +00:08:29.520 --> 00:08:31.199 +we are already halfway through this + +00:08:31.199 --> 00:08:33.599 +one's uh network bandwidth usage for our + +00:08:33.599 --> 00:08:34.560 +server + +00:08:34.560 --> 00:08:38.839 +um for tomorrow we should save some for + +00:08:38.839 --> 00:08:41.360 +tomorrow + +00:08:41.360 --> 00:08:44.240 +all right yeah but for for tomorrow I'll + +00:08:44.240 --> 00:08:45.680 +probably try bumping up the server a + +00:08:45.680 --> 00:08:47.600 +little bit more to get us some bandwidth + +00:08:47.600 --> 00:08:50.959 +some more bandwidth um + +00:08:50.959 --> 00:08:54.399 +yeah um in terms of thank yous + +00:08:54.399 --> 00:08:56.320 +um can you scroll down a little bit + +00:08:56.320 --> 00:08:58.880 +please of course + +00:08:58.880 --> 00:09:02.000 +uh thank you + +00:09:02.000 --> 00:09:05.440 +right um yeah so the fsf and fsf tech + +00:09:05.440 --> 00:09:06.800 +team again for letting us use their + +00:09:06.800 --> 00:09:08.320 +picture button instance + +00:09:08.320 --> 00:09:11.839 +um volunteers and organizers + +00:09:11.839 --> 00:09:15.120 +um so there's there's me + +00:09:15.120 --> 00:09:17.519 +um there's valvin 192 there's david + +00:09:17.519 --> 00:09:19.279 +bremner david o'toole + +00:09:19.279 --> 00:09:22.399 +um corwin who + +00:09:22.399 --> 00:09:24.399 +both presented and also has been helping + +00:09:24.399 --> 00:09:26.399 +out um + +00:09:26.399 --> 00:09:30.240 +and especially um oops can you scroll + +00:09:30.240 --> 00:09:33.600 +up again in the past + +00:09:33.600 --> 00:09:36.959 +leo leo + +00:09:36.959 --> 00:09:40.240 +um right so sorry I got distracted by + +00:09:40.240 --> 00:09:45.680 +cool stuff + +00:09:45.680 --> 00:09:48.160 +sorry go ahead okay go no no go ahead I + +00:09:48.160 --> 00:09:48.880 +was just + +00:09:48.880 --> 00:09:52.480 +being distracted um yeah we'll have some + +00:09:52.480 --> 00:09:53.680 +time to check it out later + +00:09:53.680 --> 00:09:57.360 +after the event today um but yeah + +00:09:57.360 --> 00:10:00.399 +a special thank you um to to to you + +00:10:00.399 --> 00:10:02.160 +sasha and to you leo + +00:10:02.160 --> 00:10:05.839 +um you know for hanging out all day um + +00:10:05.839 --> 00:10:08.240 +and helping with like you know juggling + +00:10:08.240 --> 00:10:09.120 +everything + +00:10:09.120 --> 00:10:11.360 +me for the most part I was just you know + +00:10:11.360 --> 00:10:12.959 +running the stream and making sure that + +00:10:12.959 --> 00:10:13.920 +I joined the + +00:10:13.920 --> 00:10:17.360 +the right room um but you know a lot of + +00:10:17.360 --> 00:10:18.640 +it was um + +00:10:18.640 --> 00:10:21.680 +sasha um and leo doing a lot of stuff + +00:10:21.680 --> 00:10:23.120 +behind the scenes you know doing quick + +00:10:23.120 --> 00:10:24.240 +tech checks with + +00:10:24.240 --> 00:10:27.360 +with the speakers to to make sure um you + +00:10:27.360 --> 00:10:27.680 +know + +00:10:27.680 --> 00:10:29.120 +things are generally working pretty + +00:10:29.120 --> 00:10:31.120 +smoothly and + +00:10:31.120 --> 00:10:34.160 +you know I'm happy to say that of course + +00:10:34.160 --> 00:10:37.279 +except for um leo's bad luck a little + +00:10:37.279 --> 00:10:37.839 +bit with + +00:10:37.839 --> 00:10:41.040 +with big blue button um we didn't really + +00:10:41.040 --> 00:10:42.399 +have any technical issue + +00:10:42.399 --> 00:10:44.160 +other technical issues this year um + +00:10:44.160 --> 00:10:46.480 +which is awesome compared to last year + +00:10:46.480 --> 00:10:49.360 +um yeah and leo I do look forward to + +00:10:49.360 --> 00:10:50.640 +those bug reports too + +00:10:50.640 --> 00:10:53.760 +people watching you can make sure I'll + +00:10:53.760 --> 00:10:56.480 +cc you into them so don't worry about it + +00:10:56.480 --> 00:11:00.560 +please do um yes so + +00:11:00.560 --> 00:11:03.040 +I'll say briefly I very much like to + +00:11:03.040 --> 00:11:04.480 +thank our speakers + +00:11:04.480 --> 00:11:08.720 +and um our participants um the audience + +00:11:08.720 --> 00:11:12.560 +for hanging out with us watching and + +00:11:12.560 --> 00:11:14.160 +you know just being a part of this + +00:11:14.160 --> 00:11:16.480 +making Emacs conf20 + +00:11:16.480 --> 00:11:18.160 +as awesome as it turned out as it's + +00:11:18.160 --> 00:11:19.920 +turned out to be and + +00:11:19.920 --> 00:11:22.160 +um I'm personally very much looking + +00:11:22.160 --> 00:11:24.160 +forward to an awesome tomorrow as well + +00:11:24.160 --> 00:11:27.360 +um and with that I'll basically speak + +00:11:27.360 --> 00:11:29.600 +less and pass it on to sasha and leo to + +00:11:29.600 --> 00:11:31.440 +conclude + +00:11:31.440 --> 00:11:33.040 +well you're just expecting us to have + +00:11:33.040 --> 00:11:34.770 +anything left to say after you + +00:11:34.770 --> 00:11:38.880 +[Laughter] + +00:11:38.880 --> 00:11:41.200 +but the fighter deals you're the lead + +00:11:41.200 --> 00:11:44.640 +organizer you get to have the last word + +00:11:44.640 --> 00:11:48.320 +most definitely yes + +00:11:48.320 --> 00:11:51.680 +come on um okay I mean + +00:11:51.680 --> 00:11:54.000 +if I start talking again if I start + +00:11:54.000 --> 00:11:55.200 +talking again + +00:11:55.200 --> 00:11:58.320 +also just ramp us right back up I have + +00:11:58.320 --> 00:12:00.079 +so much positive to say about this + +00:12:00.079 --> 00:12:02.160 +community um + +00:12:02.160 --> 00:12:04.000 +if I'm jumping back in again it's only + +00:12:04.000 --> 00:12:05.279 +to say thank you for + +00:12:05.279 --> 00:12:08.000 +uh running the show for closing the show + +00:12:08.000 --> 00:12:10.560 +for being in the show cheers + +00:12:10.560 --> 00:12:12.160 +absolutely I mean I couldn't say it + +00:12:12.160 --> 00:12:14.160 +better myself um + +00:12:14.160 --> 00:12:17.519 +yeah so on that great positive note we + +00:12:17.519 --> 00:12:19.839 +I guess we will conclude today and we'll + +00:12:19.839 --> 00:12:21.440 +catch you all at uh + +00:12:21.440 --> 00:12:24.880 +9am tomorrow by the way you can start + +00:12:24.880 --> 00:12:26.160 +placing beds to know which + +00:12:26.160 --> 00:12:30.560 +color my suit is going to be tomorrow + +00:12:30.560 --> 00:12:33.600 +sounds good bye alrighty + +00:12:33.600 --> 00:12:39.839 +bye guys bye diff --git a/2020/subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt b/2020/subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt new file mode 100644 index 00000000..8bbb4f17 --- /dev/null +++ b/2020/subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt @@ -0,0 +1,1036 @@ +WEBVTT + +00:00:09.360 --> 00:00:10.719 +so we can't hear you right now just to + +00:00:10.719 --> 00:00:11.280 +make sure + +00:00:11.280 --> 00:00:15.120 +no now we can hello + +00:00:15.120 --> 00:00:18.560 +hello morning good morning + +00:00:18.560 --> 00:00:21.680 +good morning all right so looks like + +00:00:21.680 --> 00:00:25.039 +um you can hear me let's see if the um + +00:00:25.039 --> 00:00:28.240 +stream can hear me can someone in Emacs + +00:00:28.240 --> 00:00:28.880 +con + +00:00:28.880 --> 00:00:32.000 +confirm that they can hear me as well + +00:00:32.000 --> 00:00:35.920 +yes awesome yep apparently they can + +00:00:35.920 --> 00:00:39.520 +awesome okay great um + +00:00:39.520 --> 00:00:42.399 +alrighty let's get started do you guys + +00:00:42.399 --> 00:00:42.719 +wanna + +00:00:42.719 --> 00:00:45.840 +go ahead with the opening sure + +00:00:45.840 --> 00:00:48.160 +sasha do you want to start okay hello + +00:00:48.160 --> 00:00:50.160 +and welcome to the second day of Emacs + +00:00:50.160 --> 00:00:51.920 +con 2020 + +00:00:51.920 --> 00:00:54.719 +and you could we've got a whole lot of + +00:00:54.719 --> 00:00:55.520 +uh + +00:00:55.520 --> 00:00:57.600 +of development talks and coding related + +00:00:57.600 --> 00:00:59.840 +talks scheduled for today so you can + +00:00:59.840 --> 00:01:02.160 +do a quick scan of the schedule again + +00:01:02.160 --> 00:01:04.559 +all the times are very approximate + +00:01:04.559 --> 00:01:07.200 +so if you happen to be earlier late for + +00:01:07.200 --> 00:01:08.320 +something that you wanted to + +00:01:08.320 --> 00:01:11.600 +see we'll figure it out uh we've got um + +00:01:11.600 --> 00:01:12.240 +we've got + +00:01:12.240 --> 00:01:14.560 +talks about the Emacs development itself + +00:01:14.560 --> 00:01:15.439 +as well as + +00:01:15.439 --> 00:01:18.799 +developing with Emacs uh and a couple of + +00:01:18.799 --> 00:01:19.439 +things that + +00:01:19.439 --> 00:01:21.200 +were more user talks but got moved to + +00:01:21.200 --> 00:01:22.960 +the second day for timing reasons + +00:01:22.960 --> 00:01:24.080 +because there's so much stuff on the + +00:01:24.080 --> 00:01:25.759 +first day + +00:01:25.759 --> 00:01:27.280 +that's uh that's our quick schedule + +00:01:27.280 --> 00:01:29.119 +overview the schedule page has more + +00:01:29.119 --> 00:01:31.680 +of course now how do you actually do all + +00:01:31.680 --> 00:01:32.479 +that uh + +00:01:32.479 --> 00:01:35.680 +leo you want to tell them yep so as + +00:01:35.680 --> 00:01:37.119 +yesterday if you want to participate + +00:01:37.119 --> 00:01:38.320 +well I suppose you're + +00:01:38.320 --> 00:01:40.159 +watching the stream right now so I won't + +00:01:40.159 --> 00:01:41.600 +go into detail as far as this is + +00:01:41.600 --> 00:01:42.399 +concerned + +00:01:42.399 --> 00:01:44.079 +but for the questions and for taking + +00:01:44.079 --> 00:01:46.000 +notes we are using an after pad + +00:01:46.000 --> 00:01:47.840 +where basically you just go onto the + +00:01:47.840 --> 00:01:49.360 +page and you add your questions + +00:01:49.360 --> 00:01:51.439 +under the topic which is being discussed + +00:01:51.439 --> 00:01:53.040 +at the moment so I'm sure the people + +00:01:53.040 --> 00:01:54.560 +will be putting the legs back in the + +00:01:54.560 --> 00:01:55.840 +chat I'm just going to do this real + +00:01:55.840 --> 00:01:57.280 +quick + +00:01:57.280 --> 00:02:00.880 +there we go so now it's in the chat sir + +00:02:00.880 --> 00:02:04.000 +we have on isc three rooms that you can + +00:02:04.000 --> 00:02:04.399 +use + +00:02:04.399 --> 00:02:05.840 +if you want to get in touch with us + +00:02:05.840 --> 00:02:07.439 +first if you want to discuss whatever is + +00:02:07.439 --> 00:02:08.959 +going on during this stream you can go + +00:02:08.959 --> 00:02:09.679 +on + +00:02:09.679 --> 00:02:12.560 +imax cont okay and that's where most of + +00:02:12.560 --> 00:02:13.760 +the discussion happens + +00:02:13.760 --> 00:02:16.319 +we also have #emacsconf-accessible + +00:02:16.319 --> 00:02:18.239 +for the people who either can't see or + +00:02:18.239 --> 00:02:19.920 +can't hear and you know they + +00:02:19.920 --> 00:02:21.520 +we have lovely volunteers who have been + +00:02:21.520 --> 00:02:22.720 +describing what has been going on + +00:02:22.720 --> 00:02:23.680 +yesterday + +00:02:23.680 --> 00:02:25.599 +uh and we really thank you for this + +00:02:25.599 --> 00:02:27.760 +because it's really great for getting + +00:02:27.760 --> 00:02:29.760 +you know more people giving the chance + +00:02:29.760 --> 00:02:31.120 +to more people to follow the conference + +00:02:31.120 --> 00:02:32.800 +so thank you so much for this + +00:02:32.800 --> 00:02:34.080 +and also if you want to get in touch + +00:02:34.080 --> 00:02:36.640 +with us the organizers either if you are + +00:02:36.640 --> 00:02:38.640 +a speaker or if you have anything that + +00:02:38.640 --> 00:02:40.319 +you'd like us to know about + +00:02:40.319 --> 00:02:42.400 +something like a streaming problem or + +00:02:42.400 --> 00:02:43.840 +audio problem or anything along those + +00:02:43.840 --> 00:02:45.599 +lines you know + +00:02:45.599 --> 00:02:46.959 +maybe other programs actually keep them + +00:02:46.959 --> 00:02:48.480 +in imax conf we are looking at both + +00:02:48.480 --> 00:02:49.280 +charts anyway + +00:02:49.280 --> 00:02:52.160 +but to get in touch Emacsconf that oh + +00:02:52.160 --> 00:02:52.560 +sorry + +00:02:52.560 --> 00:02:56.480 +dash.org and also we had I don't believe + +00:02:56.480 --> 00:02:57.120 +we have + +00:02:57.120 --> 00:02:58.720 +we had all that much of this yesterday + +00:02:58.720 --> 00:03:00.560 +but if you would like to continue the + +00:03:00.560 --> 00:03:01.680 +discussion + +00:03:01.680 --> 00:03:03.920 +with some of the speakers like you had a + +00:03:03.920 --> 00:03:05.360 +topic that you really liked and you'd + +00:03:05.360 --> 00:03:07.120 +like to continue talking with them + +00:03:07.120 --> 00:03:10.159 +well we invite you to go on jitsi and to + +00:03:10.159 --> 00:03:11.120 +create a room + +00:03:11.120 --> 00:03:13.040 +uh all together and to have a direct + +00:03:13.040 --> 00:03:15.280 +direct chat with the speaker + +00:03:15.280 --> 00:03:17.280 +or whichever people might be interested + +00:03:17.280 --> 00:03:18.560 +in the topic as well + +00:03:18.560 --> 00:03:20.640 +okay I believe that's me I'm not sure to + +00:03:20.640 --> 00:03:21.760 +whom I'm handing + +00:03:21.760 --> 00:03:23.360 +the rest of the presentation is it to + +00:03:23.360 --> 00:03:26.080 +you I mean um yeah sure I can take it + +00:03:26.080 --> 00:03:29.760 +um all right so hello everyone welcome + +00:03:29.760 --> 00:03:32.480 +to the second day of ux comp 2020 um + +00:03:32.480 --> 00:03:33.840 +thank you for being here + +00:03:33.840 --> 00:03:35.360 +today and for those of you who were + +00:03:35.360 --> 00:03:36.799 +around yesterday thank you for being + +00:03:36.799 --> 00:03:38.239 +around yesterday as well + +00:03:38.239 --> 00:03:40.959 +um it was an awesome day and you know + +00:03:40.959 --> 00:03:42.400 +like leo and sasha said + +00:03:42.400 --> 00:03:44.400 +today I think is also very much gonna be + +00:03:44.400 --> 00:03:46.560 +another awesome day of great talks + +00:03:46.560 --> 00:03:49.040 +um yeah so I'm very much looking forward + +00:03:49.040 --> 00:03:49.760 +to it + +00:03:49.760 --> 00:03:53.040 +um so yeah the schedule is up um + +00:03:53.040 --> 00:03:56.560 +at emacsconf.org/2020/schedule you + +00:03:56.560 --> 00:03:57.760 +gotta scroll down + +00:03:57.760 --> 00:04:00.959 +to the second day uh let's see people + +00:04:00.959 --> 00:04:02.640 +tell me that my mic is quiet + +00:04:02.640 --> 00:04:05.840 +um I guess I can on the stream + +00:04:05.840 --> 00:04:09.120 +um I think so yeah let me double check + +00:04:09.120 --> 00:04:09.599 +this + +00:04:09.599 --> 00:04:12.720 +real quick okay I can also try + +00:04:12.720 --> 00:04:14.959 +um like increasing the volume here a + +00:04:14.959 --> 00:04:17.919 +little bit + +00:04:17.919 --> 00:04:20.000 +okay it doesn't sound all that quiet to + +00:04:20.000 --> 00:04:21.440 +me just because we are + +00:04:21.440 --> 00:04:23.840 +I'm being very familiar right now so the + +00:04:23.840 --> 00:04:24.479 +volume + +00:04:24.479 --> 00:04:27.360 +must be quite high compared to you no + +00:04:27.360 --> 00:04:28.479 +yeah it's it's fine um + +00:04:28.479 --> 00:04:32.240 +okay I think it's better now um anyways + +00:04:32.240 --> 00:04:35.919 +let's see awesome yeah so yesterday + +00:04:35.919 --> 00:04:38.479 +um you know so the setup that I'm using + +00:04:38.479 --> 00:04:40.800 +this year for streaming the desktop + +00:04:40.800 --> 00:04:44.400 +and the talks is that I use the um + +00:04:44.400 --> 00:04:47.919 +script a a script by the fsf forks which + +00:04:47.919 --> 00:04:52.000 +they also used for liquor planet + +00:04:52.000 --> 00:04:54.400 +and so the thing with this script is + +00:04:54.400 --> 00:04:56.240 +that it only takes one audio source by + +00:04:56.240 --> 00:04:57.040 +default + +00:04:57.040 --> 00:04:59.120 +and so I have that set to the desktop + +00:04:59.120 --> 00:05:01.520 +audio so yesterday on the spot I had to + +00:05:01.520 --> 00:05:03.440 +improvise to how to get my own audio on + +00:05:03.440 --> 00:05:05.199 +the stream and I used mumbo + +00:05:05.199 --> 00:05:06.880 +but then that added a delay which was + +00:05:06.880 --> 00:05:08.720 +pretty annoying um + +00:05:08.720 --> 00:05:10.720 +but today this morning I figured I could + +00:05:10.720 --> 00:05:13.120 +use pulse audio's um monitor system to + +00:05:13.120 --> 00:05:14.240 +add myself + +00:05:14.240 --> 00:05:17.039 +um right on this machine um so that the + +00:05:17.039 --> 00:05:18.479 +delay is shorter and + +00:05:18.479 --> 00:05:19.840 +seems to be working well so I'm very + +00:05:19.840 --> 00:05:21.759 +happy about that um + +00:05:21.759 --> 00:05:24.080 +but anyways yeah so let's get on we have + +00:05:24.080 --> 00:05:24.960 +the schedule + +00:05:24.960 --> 00:05:26.880 +um I'm thanking again the free software + +00:05:26.880 --> 00:05:28.479 +foundation tech team + +00:05:28.479 --> 00:05:31.680 +um for um you know + +00:05:31.680 --> 00:05:33.600 +uh allowing us to use this very big + +00:05:33.600 --> 00:05:35.280 +button uh instance + +00:05:35.280 --> 00:05:38.720 +um that uh you know for live talks um + +00:05:38.720 --> 00:05:41.039 +let's see um I'd like to thank all the + +00:05:41.039 --> 00:05:42.240 +volunteers once again + +00:05:42.240 --> 00:05:45.680 +um you know uh bavin david bremner + +00:05:45.680 --> 00:05:48.240 +david dave o'toole who's been specially + +00:05:48.240 --> 00:05:49.280 +helping out a lot + +00:05:49.280 --> 00:05:51.360 +in the e-max imax conf dash accessible + +00:05:51.360 --> 00:05:53.120 +channel with describing what's going on + +00:05:53.120 --> 00:05:54.800 +at any given moment + +00:05:54.800 --> 00:05:58.000 +um of course corwin + +00:05:58.000 --> 00:06:01.039 +carl boyd and um the two folks that + +00:06:01.039 --> 00:06:02.639 +you're seeing right beside me right now + +00:06:02.639 --> 00:06:04.080 +uh leon sasha + +00:06:04.080 --> 00:06:06.479 +who's been doing so much this year um + +00:06:06.479 --> 00:06:08.240 +thank you all very much + +00:06:08.240 --> 00:06:12.479 +um yeah let's see oh and also of course + +00:06:12.479 --> 00:06:15.440 +our wonderful speakers and audience um + +00:06:15.440 --> 00:06:15.840 +which + +00:06:15.840 --> 00:06:18.000 +are basically the main thing that this + +00:06:18.000 --> 00:06:18.880 +conference + +00:06:18.880 --> 00:06:21.199 +is about and is centered about us people + +00:06:21.199 --> 00:06:23.280 +talking about their experiences + +00:06:23.280 --> 00:06:25.360 +um sharing the things they've learned or + +00:06:25.360 --> 00:06:26.880 +they find interesting and + +00:06:26.880 --> 00:06:29.840 +for everyone to discussing in chat um + +00:06:29.840 --> 00:06:31.440 +yeah so it's awesome + +00:06:31.440 --> 00:06:33.759 +uh if you scroll down a little bit on + +00:06:33.759 --> 00:06:34.880 +the page + +00:06:34.880 --> 00:06:37.600 +um I just want to plug the mailing list + +00:06:37.600 --> 00:06:38.319 +right + +00:06:38.319 --> 00:06:40.639 +yeah so we have the emacsconf-discuss + +00:06:40.639 --> 00:06:41.919 +mailing list + +00:06:41.919 --> 00:06:45.039 +once again um which you know is + +00:06:45.039 --> 00:06:47.600 +we use for discussions around the + +00:06:47.600 --> 00:06:48.240 +conference + +00:06:48.240 --> 00:06:51.039 +including announcements before and after + +00:06:51.039 --> 00:06:52.479 +it's a fairly quiet list + +00:06:52.479 --> 00:06:55.520 +um so if you do like to subscribe um you + +00:06:55.520 --> 00:06:55.840 +know + +00:06:55.840 --> 00:06:57.199 +you won't get bombarded with emails + +00:06:57.199 --> 00:06:59.440 +really um + +00:06:59.440 --> 00:07:01.759 +uh yeah so that's something to consider + +00:07:01.759 --> 00:07:02.880 +um for example you know + +00:07:02.880 --> 00:07:04.639 +after the conference we're gonna be + +00:07:04.639 --> 00:07:06.240 +posting all the videos + +00:07:06.240 --> 00:07:07.759 +and um that's where I'm gonna be + +00:07:07.759 --> 00:07:09.440 +announcing it um at least + +00:07:09.440 --> 00:07:12.880 +in in one place one of the places um + +00:07:12.880 --> 00:07:15.680 +yeah and I'd also like to draw attention + +00:07:15.680 --> 00:07:16.720 +to our + +00:07:16.720 --> 00:07:19.360 +conduct guidelines at emacsconf.org + +00:07:19.360 --> 00:07:21.199 +conduct + +00:07:21.199 --> 00:07:23.120 +which is a series of guidelines and + +00:07:23.120 --> 00:07:25.599 +suggestions to to help make the event + +00:07:25.599 --> 00:07:28.800 +you know enjoyable and um you know an + +00:07:28.800 --> 00:07:30.000 +awesome experience for everyone + +00:07:30.000 --> 00:07:33.280 +involved um I think um so I wasn't + +00:07:33.280 --> 00:07:34.639 +keeping a close eye on the chat + +00:07:34.639 --> 00:07:36.160 +yesterday because it was super busy but + +00:07:36.160 --> 00:07:36.880 +I think + +00:07:36.880 --> 00:07:38.479 +uh in general you know everything was + +00:07:38.479 --> 00:07:40.240 +going pretty well pretty smoothly + +00:07:40.240 --> 00:07:42.319 +um so thank you so much everyone for + +00:07:42.319 --> 00:07:44.319 +keeping these in mind + +00:07:44.319 --> 00:07:46.879 +and um yeah that's it for me let's see + +00:07:46.879 --> 00:07:48.479 +if lee or sasha would like to add + +00:07:48.479 --> 00:07:51.520 +anything + +00:07:51.520 --> 00:07:52.879 +no but if you're all good to go you've + +00:07:52.879 --> 00:07:54.319 +said everything and we've said + +00:07:54.319 --> 00:07:55.680 +everything + +00:07:55.680 --> 00:07:59.120 +have a great day awesome yeah um + +00:07:59.120 --> 00:08:02.000 +uh okay someone okay so dave is asking + +00:08:02.000 --> 00:08:03.280 +what is the hallway track + +00:08:03.280 --> 00:08:06.319 +uh slash on conference um do either of + +00:08:06.319 --> 00:08:07.520 +you want to explain that or should I + +00:08:07.520 --> 00:08:08.160 +take it + +00:08:08.160 --> 00:08:10.080 +uh basically we're gonna have our hands + +00:08:10.080 --> 00:08:12.400 +full keeping the keeping the main track + +00:08:12.400 --> 00:08:14.080 +running but of course + +00:08:14.080 --> 00:08:15.360 +people have all sorts of interesting + +00:08:15.360 --> 00:08:17.280 +conversation ideas and sometimes it's + +00:08:17.280 --> 00:08:18.879 +nice to do it in real time or with + +00:08:18.879 --> 00:08:20.960 +shared screens or things like that + +00:08:20.960 --> 00:08:23.360 +so if you're having a conversation and + +00:08:23.360 --> 00:08:24.639 +you want to have + +00:08:24.639 --> 00:08:28.000 +more of a webcam or screen sharing thing + +00:08:28.000 --> 00:08:31.039 +to enrich that discussion feel free to + +00:08:31.039 --> 00:08:32.800 +set up a web conference using any of + +00:08:32.800 --> 00:08:35.360 +your okay + +00:08:35.360 --> 00:08:36.880 +can you do time in practice later all + +00:08:36.880 --> 00:08:38.880 +right feel free to + +00:08:38.880 --> 00:08:41.760 +set up your own conference c type web + +00:08:41.760 --> 00:08:43.120 +conference thingy + +00:08:43.120 --> 00:08:46.080 +and um and go find the people who are + +00:08:46.080 --> 00:08:47.279 +interested in the same thing + +00:08:47.279 --> 00:08:49.839 +and I'll do all that stuff right + +00:08:49.839 --> 00:08:50.480 +absolutely + +00:08:50.480 --> 00:08:53.120 +thanks sasha yeah so basically the idea + +00:08:53.120 --> 00:08:53.760 +is that + +00:08:53.760 --> 00:08:55.360 +so you know because of the limited time + +00:08:55.360 --> 00:08:58.080 +we kind of have to um keep moving along + +00:08:58.080 --> 00:09:00.720 +uh from one talk to the next and you + +00:09:00.720 --> 00:09:02.240 +know sometimes there's a lot of awesome + +00:09:02.240 --> 00:09:04.080 +questions or discussions going on + +00:09:04.080 --> 00:09:05.760 +from for example you know in Emacs con + +00:09:05.760 --> 00:09:08.240 +for like for the questions on the pad + +00:09:08.240 --> 00:09:11.440 +um yeah so the I guess hallway track or + +00:09:11.440 --> 00:09:12.160 +unconference + +00:09:12.160 --> 00:09:15.360 +is basically a suggestion for those who + +00:09:15.360 --> 00:09:16.160 +are interested + +00:09:16.160 --> 00:09:19.120 +to for example set up a jutsu meet room + +00:09:19.120 --> 00:09:21.120 +and then you know I'll go join there + +00:09:21.120 --> 00:09:23.519 +and discuss the talk if you know if the + +00:09:23.519 --> 00:09:25.279 +speaker can join after their talk + +00:09:25.279 --> 00:09:26.240 +wonderful + +00:09:26.240 --> 00:09:29.519 +um but if not even um you know if if + +00:09:29.519 --> 00:09:31.519 +only like you know the audience and + +00:09:31.519 --> 00:09:34.000 +folks you know from the emax campfire c + +00:09:34.000 --> 00:09:35.760 +would like to join and discuss that + +00:09:35.760 --> 00:09:37.279 +definitely works too + +00:09:37.279 --> 00:09:40.320 +um yeah that's it um + +00:09:40.320 --> 00:09:42.000 +I think oh one other thing that we I + +00:09:42.000 --> 00:09:44.560 +guess wanted to mention possibly is that + +00:09:44.560 --> 00:09:46.560 +um yesterday I think I noticed that a + +00:09:46.560 --> 00:09:48.640 +lot of the questions were getting added + +00:09:48.640 --> 00:09:52.240 +um like top to bottom on the pad but um + +00:09:52.240 --> 00:09:54.560 +I think the suggestion is to put them + +00:09:54.560 --> 00:09:56.000 +like stack them up so like + +00:09:56.000 --> 00:09:58.000 +um add new at the new questions on the + +00:09:58.000 --> 00:09:59.360 +top um + +00:09:59.360 --> 00:10:01.600 +that might make it easier both for you + +00:10:01.600 --> 00:10:03.120 +know the people + +00:10:03.120 --> 00:10:05.760 +to who are typing the questions um but + +00:10:05.760 --> 00:10:07.120 +also for the speaker to + +00:10:07.120 --> 00:10:09.519 +sort of have a fixed I guess um point + +00:10:09.519 --> 00:10:10.720 +where they're looking at for new + +00:10:10.720 --> 00:10:11.760 +questions + +00:10:11.760 --> 00:10:13.839 +um so don't put your questions under + +00:10:13.839 --> 00:10:15.200 +somebody else's question + +00:10:15.200 --> 00:10:17.760 +put it at that top level sort of you + +00:10:17.760 --> 00:10:18.640 +know thing + +00:10:18.640 --> 00:10:21.519 +right get your own bullet points yeah + +00:10:21.519 --> 00:10:23.040 +and on the same topic yesterday some + +00:10:23.040 --> 00:10:24.480 +people were a little scared + +00:10:24.480 --> 00:10:26.959 +when all the colors were removed it was + +00:10:26.959 --> 00:10:27.839 +me basically + +00:10:27.839 --> 00:10:29.839 +in order to help the speakers know which + +00:10:29.839 --> 00:10:31.680 +is the section that should be looking at + +00:10:31.680 --> 00:10:33.680 +at the start of every presentation what + +00:10:33.680 --> 00:10:35.200 +I will do is that I will wipe all the + +00:10:35.200 --> 00:10:35.760 +colors + +00:10:35.760 --> 00:10:38.480 +so all the attributions of modifications + +00:10:38.480 --> 00:10:39.360 +to authors + +00:10:39.360 --> 00:10:41.600 +so that the streamer sorry the speaker + +00:10:41.600 --> 00:10:43.200 +has a little easier time finding their + +00:10:43.200 --> 00:10:44.480 +talk in the list + +00:10:44.480 --> 00:10:47.200 +right yeah so yeah for for speakers just + +00:10:47.200 --> 00:10:48.560 +keep scrolling down until you hit a + +00:10:48.560 --> 00:10:49.360 +colorful + +00:10:49.360 --> 00:10:52.079 +colorful section um with the author + +00:10:52.079 --> 00:10:52.640 +colors + +00:10:52.640 --> 00:10:55.600 +and um yeah double check that um that's + +00:10:55.600 --> 00:10:57.200 +you know it is your talk + +00:10:57.200 --> 00:11:00.560 +um yeah with that said I think that's + +00:11:00.560 --> 00:11:04.240 +all of it for our opening remarks right + +00:11:04.240 --> 00:11:07.760 +um okay awesome so in that case + +00:11:07.760 --> 00:11:12.320 +um we will start queuing up the talks + +00:11:12.320 --> 00:11:14.560 +next up right after this opening remark + +00:11:14.560 --> 00:11:16.959 +we have Emacs development updates by + +00:11:16.959 --> 00:11:18.880 +um one of the co-maintainers of Emacs + +00:11:18.880 --> 00:11:20.240 +john weekley + +00:11:20.240 --> 00:11:24.320 +um it is a pre-recording and um + +00:11:24.320 --> 00:11:27.519 +I don't think john is awake yet because + +00:11:27.519 --> 00:11:28.399 +of right he's + +00:11:28.399 --> 00:11:31.279 +probably uh still asleep but um he will + +00:11:31.279 --> 00:11:31.839 +be + +00:11:31.839 --> 00:11:33.920 +um looking taking a look at the + +00:11:33.920 --> 00:11:35.120 +questions on the pad + +00:11:35.120 --> 00:11:38.160 +later on um so yeah please keep posting + +00:11:38.160 --> 00:11:40.160 +your questions on the path for him to + +00:11:40.160 --> 00:11:43.279 +later look and try to answer awesome + +00:11:43.279 --> 00:11:48.800 +so see you guys in a bit diff --git a/2020/subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt b/2020/subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt new file mode 100644 index 00000000..db71c0cc --- /dev/null +++ b/2020/subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt @@ -0,0 +1,2905 @@ +WEBVTT + +00:00:02.240 --> 00:00:03.120 +all right + +00:00:03.120 --> 00:00:05.359 +in the meantime while waiting for corwin + +00:00:05.359 --> 00:00:06.399 +wow we did it + +00:00:06.399 --> 00:00:09.599 +look at that + +00:00:09.599 --> 00:00:12.799 +yeah it's I mean who would have thought + +00:00:12.799 --> 00:00:14.960 +right + +00:00:14.960 --> 00:00:17.279 +I mean I I surely didn't when we started + +00:00:17.279 --> 00:00:18.640 +no knowing how + +00:00:18.640 --> 00:00:20.560 +exhausted I was at the end of the first + +00:00:20.560 --> 00:00:22.000 +day I would have imagined + +00:00:22.000 --> 00:00:24.480 +to survive the second day of more of + +00:00:24.480 --> 00:00:29.279 +this same nonsense + +00:00:29.279 --> 00:00:32.320 +um yeah it's it's been fun + +00:00:32.320 --> 00:00:35.200 +it's been a lot of work um especially + +00:00:35.200 --> 00:00:36.880 +for you and sasha + +00:00:36.880 --> 00:00:39.680 +but um you know it's it's incredible I'm + +00:00:39.680 --> 00:00:41.040 +I'm very happy + +00:00:41.040 --> 00:00:43.520 +that um you know we managed to pull + +00:00:43.520 --> 00:00:44.399 +through + +00:00:44.399 --> 00:00:46.960 +um you know for two days straight not + +00:00:46.960 --> 00:00:48.800 +one day + +00:00:48.800 --> 00:00:52.320 +yeah well hey we did try + +00:00:52.320 --> 00:00:54.000 +well we actually did manage to accept + +00:00:54.000 --> 00:00:55.360 +all the top proposals + +00:00:55.360 --> 00:00:57.360 +so if you're thinking oh I could I could + +00:00:57.360 --> 00:00:59.039 +give an even better talk than the ones I + +00:00:59.039 --> 00:00:59.840 +heard today + +00:00:59.840 --> 00:01:01.680 +or yesterday please send us a talk + +00:01:01.680 --> 00:01:03.440 +proposal for next year + +00:01:03.440 --> 00:01:04.960 +we might be able to fit it's all in but + +00:01:04.960 --> 00:01:06.720 +we might have to declare an Emacs week I + +00:01:06.720 --> 00:01:09.840 +don't know + +00:01:09.840 --> 00:01:12.799 +yeah absolutely yeah it's it's funny + +00:01:12.799 --> 00:01:13.200 +like + +00:01:13.200 --> 00:01:15.360 +um I remember a little bit last year but + +00:01:15.360 --> 00:01:16.880 +also this year we kind of + +00:01:16.880 --> 00:01:19.439 +we're trying to set up um I guess sort + +00:01:19.439 --> 00:01:20.960 +of a procedure for + +00:01:20.960 --> 00:01:23.200 +accepting and rejecting talks but then + +00:01:23.200 --> 00:01:24.720 +you know we have got the actual + +00:01:24.720 --> 00:01:27.680 +submissions and oh my god so much + +00:01:27.680 --> 00:01:28.880 +awesome stuff + +00:01:28.880 --> 00:01:30.799 +um I mean I definitely wouldn't have + +00:01:30.799 --> 00:01:33.360 +been a movie + +00:01:33.360 --> 00:01:35.360 +how can you say not anything it's emad + +00:01:35.360 --> 00:01:36.720 +so you just throw it all in + +00:01:36.720 --> 00:01:38.159 +including the kitchen sink and then + +00:01:38.159 --> 00:01:40.640 +we'll sort it all out later + +00:01:40.640 --> 00:01:42.720 +so if you went through all this the + +00:01:42.720 --> 00:01:44.240 +entire conference and you missed some + +00:01:44.240 --> 00:01:46.079 +interesting talks because a we started + +00:01:46.079 --> 00:01:46.640 +early + +00:01:46.640 --> 00:01:48.240 +because you're very excited and didn't + +00:01:48.240 --> 00:01:50.399 +need the technical you know buffer time + +00:01:50.399 --> 00:01:53.119 +uh or b you really had to step away at + +00:01:53.119 --> 00:01:54.159 +some point so you must + +00:01:54.159 --> 00:01:55.840 +talk you really wanted to recordings + +00:01:55.840 --> 00:01:58.960 +will eventually be available + +00:01:58.960 --> 00:02:02.320 +yes absolutely um yeah I know + +00:02:02.320 --> 00:02:05.360 +so many people asked in the chat um you + +00:02:05.360 --> 00:02:06.000 +know + +00:02:06.000 --> 00:02:08.000 +is did I already miss the stock or are + +00:02:08.000 --> 00:02:09.200 +the pre-recordings up + +00:02:09.200 --> 00:02:12.319 +um yeah so they're not up yet but + +00:02:12.319 --> 00:02:15.280 +um you know especially with the + +00:02:15.280 --> 00:02:16.400 +pre-recordings that + +00:02:16.400 --> 00:02:18.560 +those are basically um ready to be + +00:02:18.560 --> 00:02:19.920 +uploaded so + +00:02:19.920 --> 00:02:22.879 +you know right after we finish this talk + +00:02:22.879 --> 00:02:23.760 +um + +00:02:23.760 --> 00:02:26.879 +I'm going to um start uploading them + +00:02:26.879 --> 00:02:29.599 +um because you know those are just ready + +00:02:29.599 --> 00:02:30.480 +we have them + +00:02:30.480 --> 00:02:32.720 +and then for the ones that were only + +00:02:32.720 --> 00:02:33.519 +live + +00:02:33.519 --> 00:02:36.879 +also as well as the live q a sessions um + +00:02:36.879 --> 00:02:40.080 +we will try to process them + +00:02:40.080 --> 00:02:43.440 +and get those up as well yes after + +00:02:43.440 --> 00:02:45.680 +you've had some sleep + +00:02:45.680 --> 00:02:49.040 +yeah after after some rest um + +00:02:49.040 --> 00:02:51.920 +yeah and I'm I'm just with us oh there + +00:02:51.920 --> 00:02:55.040 +you go hey corbin + +00:02:55.040 --> 00:02:57.280 +um yeah I don't think we have your sound + +00:02:57.280 --> 00:02:58.959 +yet so double check that + +00:02:58.959 --> 00:03:03.440 +but um hi how about now yes + +00:03:03.440 --> 00:03:05.920 +um yeah I'm just seeing the chatbot go + +00:03:05.920 --> 00:03:07.360 +by an EmacsConf and + +00:03:07.360 --> 00:03:09.360 +everyone is being so nice um it's just + +00:03:09.360 --> 00:03:12.239 +making me smile + +00:03:12.239 --> 00:03:14.159 +okay people want a question section so + +00:03:14.159 --> 00:03:15.360 +I'm gonna add a question + +00:03:15.360 --> 00:03:17.599 +thing and people can throw in their + +00:03:17.599 --> 00:03:18.720 +questions + +00:03:18.720 --> 00:03:22.159 +somewhere just telling you if you want + +00:03:22.159 --> 00:03:23.840 +three Emacs conference per year the + +00:03:23.840 --> 00:03:26.159 +answer is no judging by the amount of + +00:03:26.159 --> 00:03:28.159 +stress that we've accrued all together + +00:03:28.159 --> 00:03:28.959 +today + +00:03:28.959 --> 00:03:30.799 +we are not ready to do this three times + +00:03:30.799 --> 00:03:32.640 +every year the answer is + +00:03:32.640 --> 00:03:34.480 +you're welcome to organize it and we'll + +00:03:34.480 --> 00:03:36.000 +happily share our notes + +00:03:36.000 --> 00:03:38.159 +um and I will take a mention of it in my + +00:03:38.159 --> 00:03:39.040 +Emacs news + +00:03:39.040 --> 00:03:41.200 +so please feel free to go ahead and put + +00:03:41.200 --> 00:03:43.920 +things together yourselves + +00:03:43.920 --> 00:03:46.959 +yeah absolutely um you know for me I + +00:03:46.959 --> 00:03:48.400 +think once a year is + +00:03:48.400 --> 00:03:51.680 +quite enough but um if + +00:03:51.680 --> 00:03:55.040 +go ahead oh however if I if today leaves + +00:03:55.040 --> 00:03:56.080 +you wanting more + +00:03:56.080 --> 00:03:58.720 +there are emax meetups and I think there + +00:03:58.720 --> 00:04:00.000 +are a couple of a + +00:04:00.000 --> 00:04:02.239 +couple of them coming up in december so + +00:04:02.239 --> 00:04:04.319 +if you check back in my talk + +00:04:04.319 --> 00:04:06.560 +for Emacs news highlights I've linked to + +00:04:06.560 --> 00:04:08.080 +a couple that are coming up in the next + +00:04:08.080 --> 00:04:09.760 +couple of weeks + +00:04:09.760 --> 00:04:12.000 +nice yeah and I think zakariya mentioned + +00:04:12.000 --> 00:04:12.959 +that um + +00:04:12.959 --> 00:04:15.920 +he's either participating or he runs or + +00:04:15.920 --> 00:04:17.840 +is one of the people that runs the Emacs + +00:04:17.840 --> 00:04:19.120 +nyc meetup + +00:04:19.120 --> 00:04:22.079 +um yeah so definitely check that out and + +00:04:22.079 --> 00:04:23.759 +you know all the other ones that may be + +00:04:23.759 --> 00:04:24.639 +out there + +00:04:24.639 --> 00:04:29.120 +um yeah for sure uh + +00:04:29.120 --> 00:04:32.160 +yeah so so I'll jump in on there + +00:04:32.160 --> 00:04:34.720 +on that point too I I have a lot of + +00:04:34.720 --> 00:04:36.000 +energy for + +00:04:36.000 --> 00:04:39.840 +um for helping people get together um + +00:04:39.840 --> 00:04:43.440 +adam uh uh from melpa + +00:04:43.440 --> 00:04:46.880 +suggested uh I should do some twitch + +00:04:46.880 --> 00:04:48.880 +stuff I'll probably try that I have put + +00:04:48.880 --> 00:04:50.320 +a couple things out there and even a few + +00:04:50.320 --> 00:04:51.360 +people came by + +00:04:51.360 --> 00:04:53.919 +so I I think I would agree the interest + +00:04:53.919 --> 00:04:54.840 +is there + +00:04:54.840 --> 00:04:57.600 +and I definitely would love to spend + +00:04:57.600 --> 00:04:59.120 +that time talking to people that want to + +00:04:59.120 --> 00:05:00.000 +organize + +00:05:00.000 --> 00:05:01.759 +as well as people that are interested in + +00:05:01.759 --> 00:05:04.160 +just learning to use Emacs as an editor + +00:05:04.160 --> 00:05:07.120 +I think it's um I think it's a fantastic + +00:05:07.120 --> 00:05:08.880 +journey speaking for myself as somebody + +00:05:08.880 --> 00:05:10.560 +that um I don't + +00:05:10.560 --> 00:05:12.080 +always have the right keystrokes right + +00:05:12.080 --> 00:05:13.759 +at hand sometimes yeah + +00:05:13.759 --> 00:05:16.160 +my mentor in in computer programming is + +00:05:16.160 --> 00:05:17.840 +david dyer bennett and + +00:05:17.840 --> 00:05:21.440 +um I started uh apprenticing with him + +00:05:21.440 --> 00:05:24.800 +as when he was a freelancer um + +00:05:24.800 --> 00:05:28.160 +many decades ago now and + +00:05:28.160 --> 00:05:31.919 +you know he has a mantra that is uh + +00:05:31.919 --> 00:05:33.440 +you know I can do that in about five + +00:05:33.440 --> 00:05:35.280 +minutes if it's + +00:05:35.280 --> 00:05:37.840 +the right five minutes and and that's + +00:05:37.840 --> 00:05:39.919 +kind of the story of my life + +00:05:39.919 --> 00:05:43.360 +um and Emacs is just a tool to + +00:05:43.360 --> 00:05:45.759 +get the right five minutes more often no + +00:05:45.759 --> 00:05:46.560 +matter + +00:05:46.560 --> 00:05:48.720 +you know how can how cooperative the + +00:05:48.720 --> 00:05:49.600 +fingers are + +00:05:49.600 --> 00:05:52.400 +or or whether the ideas are free-flowing + +00:05:52.400 --> 00:05:52.800 +you know + +00:05:52.800 --> 00:05:55.680 +and getting that right environment is a + +00:05:55.680 --> 00:05:56.800 +lot of things for a lot of different + +00:05:56.800 --> 00:05:58.720 +people a lot of things to us on a + +00:05:58.720 --> 00:06:00.639 +different day + +00:06:00.639 --> 00:06:04.080 +um so yeah I have a ton of energy + +00:06:04.080 --> 00:06:08.400 +around you know hey let's talk more + +00:06:08.400 --> 00:06:11.919 +absolutely um yes so + +00:06:11.919 --> 00:06:14.560 +you know I think we are everyone's + +00:06:14.560 --> 00:06:15.600 +pretty energetic + +00:06:15.600 --> 00:06:18.080 +oh before I forget I know I will forget + +00:06:18.080 --> 00:06:18.639 +um + +00:06:18.639 --> 00:06:20.800 +to speakers uh those of you who are + +00:06:20.800 --> 00:06:22.400 +still watching right now + +00:06:22.400 --> 00:06:24.720 +um I would very much appreciate it if + +00:06:24.720 --> 00:06:26.240 +you could send us you know + +00:06:26.240 --> 00:06:27.520 +any of the materials you know for + +00:06:27.520 --> 00:06:29.919 +example the slides or any links and + +00:06:29.919 --> 00:06:31.600 +resources to us + +00:06:31.600 --> 00:06:34.880 +so we could add them to to the + +00:06:34.880 --> 00:06:38.880 +EmacsConf wiki + +00:06:38.880 --> 00:06:41.840 +or you can add them directly yourself if + +00:06:41.840 --> 00:06:43.759 +you go to Emacsconf.org + +00:06:43.759 --> 00:06:46.400 +edit there's instructions for basically + +00:06:46.400 --> 00:06:47.120 +anyone + +00:06:47.120 --> 00:06:50.800 +to edit the wiki if they like to um + +00:06:50.800 --> 00:06:54.000 +yes so now uh back to getting + +00:06:54.000 --> 00:06:57.039 +uh getting back to corwin's point um and + +00:06:57.039 --> 00:06:58.800 +also what sasha mentioned + +00:06:58.800 --> 00:07:01.520 +so um you know maybe one EmacsConf + +00:07:01.520 --> 00:07:02.800 +might be enough + +00:07:02.800 --> 00:07:06.319 +um for us for one year or for me but + +00:07:06.319 --> 00:07:09.840 +um in terms of Emacs related events + +00:07:09.840 --> 00:07:14.160 +um so this this conference was + +00:07:14.160 --> 00:07:17.360 +uh is like you know mainly about Emacs + +00:07:17.360 --> 00:07:20.960 +um but it's also in my opinion a + +00:07:20.960 --> 00:07:22.319 +showcase of + +00:07:22.319 --> 00:07:24.160 +um just how much you can do with free + +00:07:24.160 --> 00:07:27.440 +software Emacs itself is free software + +00:07:27.440 --> 00:07:30.800 +but um also all the tools that we used + +00:07:30.800 --> 00:07:34.400 +um these two days for like uh streaming + +00:07:34.400 --> 00:07:37.759 +for you know playing back to videos um + +00:07:37.759 --> 00:07:39.840 +yeah it's all free software and anyone + +00:07:39.840 --> 00:07:41.440 +can use and improve them + +00:07:41.440 --> 00:07:43.840 +so um one thing that I wanted to put out + +00:07:43.840 --> 00:07:45.440 +there before I forget + +00:07:45.440 --> 00:07:48.960 +is that um so we have these couple of + +00:07:48.960 --> 00:07:50.000 +servers set up + +00:07:50.000 --> 00:07:52.960 +for streaming for imax conf and I would + +00:07:52.960 --> 00:07:54.639 +be very much happy to + +00:07:54.639 --> 00:07:59.039 +um help any other group basically + +00:07:59.039 --> 00:08:00.319 +you know look into using our + +00:08:00.319 --> 00:08:03.199 +infrastructure for + +00:08:03.199 --> 00:08:06.720 +doing their own live event using only + +00:08:06.720 --> 00:08:09.360 +free software so if you are interested + +00:08:09.360 --> 00:08:10.080 +in that + +00:08:10.080 --> 00:08:12.639 +please feel free to ping me either in + +00:08:12.639 --> 00:08:14.879 +the max conf channel on freenode + +00:08:14.879 --> 00:08:17.840 +um where my nick is bandali or just + +00:08:17.840 --> 00:08:18.720 +email me at + +00:08:18.720 --> 00:08:21.440 +bandeli gnu.org um I would be happy to + +00:08:21.440 --> 00:08:22.800 +help you with that + +00:08:22.800 --> 00:08:29.199 +um yeah I'll defer to others + +00:08:29.199 --> 00:08:31.440 +we'll jump in and jump in there george I + +00:08:31.440 --> 00:08:34.080 +mean + +00:08:34.080 --> 00:08:35.760 +it's okay you've been you've been quiet + +00:08:35.760 --> 00:08:37.839 +for too long now I I have this I have to + +00:08:37.839 --> 00:08:39.279 +pick on people when there's more than + +00:08:39.279 --> 00:08:40.640 +three people in a group + +00:08:40.640 --> 00:08:42.000 +you know somehow that's the point of + +00:08:42.000 --> 00:08:44.000 +wait I'm afraid somebody gets shy + +00:08:44.000 --> 00:08:47.920 +and when it's not me I I you know + +00:08:47.920 --> 00:08:51.440 +um so you know I I + +00:08:51.440 --> 00:08:54.080 +uh yeah I can't thank you enough for the + +00:08:54.080 --> 00:08:55.360 +for all you've done I mean I have a + +00:08:55.360 --> 00:08:57.040 +whole list of thank yous here that I + +00:08:57.040 --> 00:08:58.320 +could just start reading + +00:08:58.320 --> 00:09:01.360 +uh but but they you know they start with + +00:09:01.360 --> 00:09:02.880 +you and that was the abbreviated list I + +00:09:02.880 --> 00:09:04.480 +gave at the beginning of the first talk + +00:09:04.480 --> 00:09:05.200 +right + +00:09:05.200 --> 00:09:06.800 +I just appreciate the sense of + +00:09:06.800 --> 00:09:08.399 +encouragement and + +00:09:08.399 --> 00:09:12.320 +openness that you bring to it I think + +00:09:12.320 --> 00:09:15.519 +you know we share uh + +00:09:15.519 --> 00:09:17.120 +taking inspiration from a lot of people + +00:09:17.120 --> 00:09:19.279 +in the community and want to give that + +00:09:19.279 --> 00:09:20.800 +back and that's a great thing to have in + +00:09:20.800 --> 00:09:21.440 +common + +00:09:21.440 --> 00:09:24.880 +around any any volunteer + +00:09:24.880 --> 00:09:27.920 +thank you it's a it's a pleasure um to + +00:09:27.920 --> 00:09:29.040 +be part of this + +00:09:29.040 --> 00:09:31.920 +awesome community around Emacs um this + +00:09:31.920 --> 00:09:33.600 +piece of free software that has been + +00:09:33.600 --> 00:09:36.800 +around for more than 40 years as + +00:09:36.800 --> 00:09:38.720 +impressive as that is I think more + +00:09:38.720 --> 00:09:41.440 +impressive is a community around it + +00:09:41.440 --> 00:09:44.720 +and all the people people around it + +00:09:44.720 --> 00:09:52.640 +um yeah definitely + +00:09:52.640 --> 00:09:54.560 +sorry I'm just smiling because I've + +00:09:54.560 --> 00:09:56.240 +managed to catch a glimpse of the first + +00:09:56.240 --> 00:09:57.760 +question that we have + +00:09:57.760 --> 00:10:00.560 +and I'm trying to suit myself literally + +00:10:00.560 --> 00:10:02.560 +to know how to answer this question + +00:10:02.560 --> 00:10:04.640 +and I'm not exactly sure how to do this + +00:10:04.640 --> 00:10:11.040 +to the best of my ability so + +00:10:11.040 --> 00:10:12.880 +I don't know I think this at this point + +00:10:12.880 --> 00:10:14.240 +we would like to remind all of our + +00:10:14.240 --> 00:10:15.680 +viewers of the + +00:10:15.680 --> 00:10:18.800 +conduct guidelines + +00:10:18.800 --> 00:10:22.800 +try not to objectify our speakers + +00:10:22.800 --> 00:10:24.959 +yeah that's a generally good point to + +00:10:24.959 --> 00:10:25.920 +remember + +00:10:25.920 --> 00:10:29.680 +um even in the closing remarks + +00:10:29.680 --> 00:10:31.680 +because that's that's a thing I do and I + +00:10:31.680 --> 00:10:34.000 +just wa I want to go on record saying I + +00:10:34.000 --> 00:10:34.320 +am + +00:10:34.320 --> 00:10:36.399 +ready to take it on any live stream any + +00:10:36.399 --> 00:10:38.880 +day of the week please call me on that + +00:10:38.880 --> 00:10:40.720 +it's always you it's always a new + +00:10:40.720 --> 00:10:42.320 +experience for somebody + +00:10:42.320 --> 00:10:44.399 +I've definitely been across lines that + +00:10:44.399 --> 00:10:46.160 +embarrass me before and + +00:10:46.160 --> 00:10:48.320 +I want to know about that thank you in + +00:10:48.320 --> 00:10:50.320 +advance + +00:10:50.320 --> 00:10:52.800 +okay so do you want to do like someone's + +00:10:52.800 --> 00:10:53.519 +official + +00:10:53.519 --> 00:10:55.760 +closing of people so closing up stuff + +00:10:55.760 --> 00:10:56.560 +just in case + +00:10:56.560 --> 00:10:58.000 +people want to know what the next steps + +00:10:58.000 --> 00:10:59.839 +are and then we can do all the fun + +00:10:59.839 --> 00:11:02.800 +questions and hanging out thing + +00:11:02.800 --> 00:11:07.040 +okay um right so yeah + +00:11:07.040 --> 00:11:09.680 +okay following up um emax meetups and + +00:11:09.680 --> 00:11:11.279 +mention those uh if you want to keep + +00:11:11.279 --> 00:11:12.640 +connecting with people you can do that + +00:11:12.640 --> 00:11:14.079 +throughout the year + +00:11:14.079 --> 00:11:16.240 +we'll figure out some kind of like list + +00:11:16.240 --> 00:11:18.399 +on Emacs wiki or whatever that will list + +00:11:18.399 --> 00:11:19.600 +the different meetups or you can just + +00:11:19.600 --> 00:11:21.839 +search for emats meetup in your area + +00:11:21.839 --> 00:11:23.360 +but of course since many of them have + +00:11:23.360 --> 00:11:25.680 +online meetups now um Emacs news will + +00:11:25.680 --> 00:11:27.600 +mention those whenever people remember + +00:11:27.600 --> 00:11:29.600 +to tell me in advance + +00:11:29.600 --> 00:11:31.920 +um okay so Emacs meetups that's the + +00:11:31.920 --> 00:11:33.440 +thing collaborative pad + +00:11:33.440 --> 00:11:36.160 +the either pad isn't great there is a + +00:11:36.160 --> 00:11:38.079 +meta discussion so if you want to add + +00:11:38.079 --> 00:11:40.000 +things that worked well or make notes of + +00:11:40.000 --> 00:11:41.760 +things that could work even better next + +00:11:41.760 --> 00:11:42.560 +year + +00:11:42.560 --> 00:11:44.880 +then write it while it's fresh we'll + +00:11:44.880 --> 00:11:46.720 +make a copy and we'll post it + +00:11:46.720 --> 00:11:49.440 +to the wiki somewhere like we did last + +00:11:49.440 --> 00:11:50.160 +year + +00:11:50.160 --> 00:11:52.000 +we can also copy and paste the links + +00:11:52.000 --> 00:11:53.680 +from the individual sections + +00:11:53.680 --> 00:11:56.079 +into top pages so you can follow the + +00:11:56.079 --> 00:11:58.240 +links from there + +00:11:58.240 --> 00:12:00.240 +and if you spoke at a conference and you + +00:12:00.240 --> 00:12:01.680 +would like to make it easier for people + +00:12:01.680 --> 00:12:02.880 +to follow up with you + +00:12:02.880 --> 00:12:04.560 +please let us know your follow-up + +00:12:04.560 --> 00:12:06.079 +information and we can add it to that + +00:12:06.079 --> 00:12:07.040 +page also + +00:12:07.040 --> 00:12:09.600 +or it's a wiki you can edit yourself if + +00:12:09.600 --> 00:12:11.120 +you have questions when the videos + +00:12:11.120 --> 00:12:12.079 +finally come out + +00:12:12.079 --> 00:12:13.519 +when you watch them after the videos + +00:12:13.519 --> 00:12:15.360 +have come out then you can look at the + +00:12:15.360 --> 00:12:17.120 +page for follow-up information + +00:12:17.120 --> 00:12:20.000 +and subscribe to the mailing list low + +00:12:20.000 --> 00:12:22.000 +traffic you can get updates like when we + +00:12:22.000 --> 00:12:24.480 +release the photos I release the videos + +00:12:24.480 --> 00:12:26.320 +and uh and they're ready for you to + +00:12:26.320 --> 00:12:28.800 +check out so that's what I got for + +00:12:28.800 --> 00:12:32.160 +next steps awesome + +00:12:32.160 --> 00:12:34.880 +thank you sasha um do one of you guys + +00:12:34.880 --> 00:12:35.680 +want to do + +00:12:35.680 --> 00:12:39.760 +the um the thanks or should I do them + +00:12:39.760 --> 00:12:42.800 +no read to you so good + +00:12:42.800 --> 00:12:44.480 +I was gonna I was gonna say the same + +00:12:44.480 --> 00:12:46.560 +thing you are so you go ahead + +00:12:46.560 --> 00:12:50.240 +okay + +00:12:50.240 --> 00:12:51.920 +thinking that that was an awesome thing + +00:12:51.920 --> 00:12:53.760 +for for ramen to do if you would be + +00:12:53.760 --> 00:12:57.360 +willing + +00:12:57.360 --> 00:12:59.120 +yeah you're the lead organizer you get + +00:12:59.120 --> 00:13:00.959 +stuck with other fun jobs + +00:13:00.959 --> 00:13:05.440 +all the difficult stuff yeah + +00:13:05.440 --> 00:13:07.360 +yeah you don't know dating upwards read + +00:13:07.360 --> 00:13:08.720 +my crap if you don't want to + +00:13:08.720 --> 00:13:12.320 +but um oh no that's + +00:13:12.320 --> 00:13:14.959 +I definitely want to read that corbin um + +00:13:14.959 --> 00:13:16.399 +yeah I'll pull it up + +00:13:16.399 --> 00:13:20.399 +but um yeah before we get into that um + +00:13:20.399 --> 00:13:23.279 +I want to read what we have here so uh + +00:13:23.279 --> 00:13:25.040 +thank you very much to the free software + +00:13:25.040 --> 00:13:26.079 +foundation + +00:13:26.079 --> 00:13:29.040 +especially the tech team for lending us + +00:13:29.040 --> 00:13:29.600 +allowing + +00:13:29.600 --> 00:13:31.760 +us to use this very big blue button + +00:13:31.760 --> 00:13:32.720 +instance + +00:13:32.720 --> 00:13:35.839 +that we've used for live calls and um + +00:13:35.839 --> 00:13:38.000 +live q a with so many of the speakers + +00:13:38.000 --> 00:13:39.199 +this year + +00:13:39.199 --> 00:13:42.959 +um thank you so much uh shout out to the + +00:13:42.959 --> 00:13:43.760 +tech team + +00:13:43.760 --> 00:13:47.040 +um especially reuben who does a lot + +00:13:47.040 --> 00:13:50.240 +especially with big blue button um + +00:13:50.240 --> 00:13:53.199 +and like streaming in general um but + +00:13:53.199 --> 00:13:53.680 +also + +00:13:53.680 --> 00:13:55.519 +the other members of the tech team like + +00:13:55.519 --> 00:13:57.360 +ian andrew and michael + +00:13:57.360 --> 00:14:01.519 +thank you all um next stop volunteers + +00:14:01.519 --> 00:14:05.920 +bobbin david bremner uh dave o'toole for + +00:14:05.920 --> 00:14:09.199 +taking um on basically writing + +00:14:09.199 --> 00:14:10.240 +descriptive text + +00:14:10.240 --> 00:14:15.279 +in our #emacsconf-accessible channel + +00:14:15.279 --> 00:14:18.480 +along with uh joe corneli and + +00:14:18.480 --> 00:14:21.920 +um sea bass or sea bass um + +00:14:21.920 --> 00:14:25.199 +basically for transcribing talks + +00:14:25.199 --> 00:14:27.950 +um in a way live um + +00:14:27.950 --> 00:14:29.120 +[Music] + +00:14:29.120 --> 00:14:32.320 +yes thank you to corwin of course + +00:14:32.320 --> 00:14:35.600 +uh thank you to carl voight uh thank you + +00:14:35.600 --> 00:14:35.920 +to + +00:14:35.920 --> 00:14:39.519 +sasha and leo very much um + +00:14:39.519 --> 00:14:42.639 +for all your hard work um this event + +00:14:42.639 --> 00:14:44.240 +literally wouldn't have been possible + +00:14:44.240 --> 00:14:45.680 +without all of your uh + +00:14:45.680 --> 00:14:49.279 +guys's helps um so thank you + +00:14:49.279 --> 00:14:51.760 +and as I told you in the chat you know + +00:14:51.760 --> 00:14:52.639 +you would have been + +00:14:52.639 --> 00:14:54.800 +really happy to one-man army the entire + +00:14:54.800 --> 00:14:58.160 +thing if we hadn't been there so + +00:14:58.160 --> 00:15:00.560 +I I don't know I may have been able to + +00:15:00.560 --> 00:15:01.839 +but I definitely would have been happy + +00:15:01.839 --> 00:15:02.320 +to + +00:15:02.320 --> 00:15:05.760 +I'm much more happier this way so um + +00:15:05.760 --> 00:15:07.600 +I guess it's the moment when we ask you + +00:15:07.600 --> 00:15:09.519 +uh your energy level is it at + +00:15:09.519 --> 00:15:12.560 +50 is it at 40 can you give us an + +00:15:12.560 --> 00:15:13.120 +estimate + +00:15:13.120 --> 00:15:16.399 +roughly um yeah which is what uh + +00:15:16.399 --> 00:15:19.120 +corbin had mentioned um I think I'm at a + +00:15:19.120 --> 00:15:19.519 +good + +00:15:19.519 --> 00:15:22.320 +like 50 or 60 percent um it's just + +00:15:22.320 --> 00:15:23.040 +blended + +00:15:23.040 --> 00:15:24.800 +yeah definitely more than I can say last + +00:15:24.800 --> 00:15:27.199 +for last year + +00:15:27.199 --> 00:15:30.320 +but yes thank you um + +00:15:30.320 --> 00:15:33.519 +thank you to um all of the + +00:15:33.519 --> 00:15:36.720 +our awesome audience members um everyone + +00:15:36.720 --> 00:15:39.279 +who participated in any way + +00:15:39.279 --> 00:15:42.880 +in the conference also + +00:15:42.880 --> 00:15:44.959 +of course a big thank you to all the + +00:15:44.959 --> 00:15:46.399 +awesome speakers + +00:15:46.399 --> 00:15:48.720 +for submitting all of these amazing + +00:15:48.720 --> 00:15:49.440 +talks + +00:15:49.440 --> 00:15:52.320 +um on a very wide range of topics from a + +00:15:52.320 --> 00:15:53.120 +wide + +00:15:53.120 --> 00:15:56.160 +range of backgrounds it was just awesome + +00:15:56.160 --> 00:15:59.680 +thank you um and now corbin do you want + +00:15:59.680 --> 00:16:03.600 +to read over your text or should I do it + +00:16:03.600 --> 00:16:07.759 +it's entirely up to you I mean I + +00:16:07.759 --> 00:16:09.920 +I would have to find it again but I will + +00:16:09.920 --> 00:16:11.759 +I just have to bring the right Emacs to + +00:16:11.759 --> 00:16:12.720 +the front here + +00:16:12.720 --> 00:16:16.240 +my story of today yeah sure go forward + +00:16:16.240 --> 00:16:18.959 +um I've already talked enough so I kind + +00:16:18.959 --> 00:16:20.480 +of like the idea of putting words in + +00:16:20.480 --> 00:16:20.880 +your mouth + +00:16:20.880 --> 00:16:23.600 +honestly if you feel good saying go go + +00:16:23.600 --> 00:16:25.440 +for it and that'll be good for me + +00:16:25.440 --> 00:16:27.759 +or if we want to segue into random next + +00:16:27.759 --> 00:16:29.680 +conversation I'm up for that too but I'm + +00:16:29.680 --> 00:16:30.720 +conscious of + +00:16:30.720 --> 00:16:33.839 +other people with uh um + +00:16:33.839 --> 00:16:35.600 +young friends wandering about the house + +00:16:35.600 --> 00:16:37.120 +and beginning to thump on things + +00:16:37.120 --> 00:16:39.360 +I got it I probably didn't what have you + +00:16:39.360 --> 00:16:41.440 +pasted me before + +00:16:41.440 --> 00:16:44.399 +right that one is that what you wanted + +00:16:44.399 --> 00:16:44.800 +yeah + +00:16:44.800 --> 00:16:46.399 +I saw the question in there about + +00:16:46.399 --> 00:16:48.399 +windows that's definitely a subject I'm + +00:16:48.399 --> 00:16:50.320 +happy to talk about I think others on + +00:16:50.320 --> 00:16:51.519 +the call have gotten + +00:16:51.519 --> 00:16:54.000 +uh gotten some of that in in as part of + +00:16:54.000 --> 00:16:55.600 +other conversations + +00:16:55.600 --> 00:16:58.800 +um in brief summary it's kind of a + +00:16:58.800 --> 00:16:59.839 +necessity thing + +00:16:59.839 --> 00:17:03.040 +it's um + +00:17:03.040 --> 00:17:06.160 +it's it's complicated you know it's but + +00:17:06.160 --> 00:17:09.280 +I I guess I I can say uh + +00:17:09.280 --> 00:17:11.760 +I'd ask you not to not to make free + +00:17:11.760 --> 00:17:13.280 +software purity tests right + +00:17:13.280 --> 00:17:17.439 +you know I um need windows right now + +00:17:17.439 --> 00:17:19.839 +and so that has to be fine because I + +00:17:19.839 --> 00:17:33.840 +want to be able to give back + +00:17:33.840 --> 00:17:35.360 +I'm looking at it I had the wrong part + +00:17:35.360 --> 00:17:48.799 +of the buffer open I think karen + +00:17:48.799 --> 00:17:56.799 +let me briefly say um + +00:17:56.799 --> 00:17:58.559 +we're using okay so I can I can talk + +00:17:58.559 --> 00:18:00.960 +about crdt we experimented with it um + +00:18:00.960 --> 00:18:04.320 +and I quite a bit and then eric and I + +00:18:04.320 --> 00:18:07.039 +significantly further we uh messed up + +00:18:07.039 --> 00:18:08.880 +some of our slides significantly getting + +00:18:08.880 --> 00:18:10.480 +a little too ambitious with having + +00:18:10.480 --> 00:18:12.080 +multiple people editing it + +00:18:12.080 --> 00:18:14.400 +and letting everybody go to work on the + +00:18:14.400 --> 00:18:15.360 +presentations + +00:18:15.360 --> 00:18:17.919 +so we wasted we found many different + +00:18:17.919 --> 00:18:19.679 +ways to use Emacs to waste time and + +00:18:19.679 --> 00:18:21.360 +preparing for emax conf + +00:18:21.360 --> 00:18:23.840 +but I'm pretty confident we have we have + +00:18:23.840 --> 00:18:25.520 +all the good parts saved and + +00:18:25.520 --> 00:18:28.480 +we'll just need to pull those together + +00:18:28.480 --> 00:18:28.880 +uh + +00:18:28.880 --> 00:18:30.720 +for you back into a single or more file + +00:18:30.720 --> 00:18:33.600 +that we can put up with those videos + +00:18:33.600 --> 00:18:36.000 +thanks again for bearing with us um + +00:18:36.000 --> 00:18:37.919 +hopefully my point about + +00:18:37.919 --> 00:18:54.640 +Emacs being there for you came across + +00:18:54.640 --> 00:18:56.480 +oh yes I can scroll I can scroll back + +00:18:56.480 --> 00:18:57.679 +down to your text if you like + +00:18:57.679 --> 00:19:04.320 +okay here we go + +00:19:04.320 --> 00:19:06.559 +uh we're figuring out carwin here's your + +00:19:06.559 --> 00:19:08.240 +text + +00:19:08.240 --> 00:19:10.080 +if you want to read it otherwise I'll be + +00:19:10.080 --> 00:19:11.600 +plenty happy to read it if you want me + +00:19:11.600 --> 00:19:12.480 +to + +00:19:12.480 --> 00:19:15.919 +take it all right + +00:19:15.919 --> 00:19:18.400 +obviously you had to ask the esl learner + +00:19:18.400 --> 00:19:20.480 +so english as a second language to read + +00:19:20.480 --> 00:19:24.000 +a chunk of text so thank you for this + +00:19:24.000 --> 00:19:28.960 +all right okay so uh this is my call win + +00:19:28.960 --> 00:19:32.400 +so Emacs is very very complicated + +00:19:32.400 --> 00:19:35.440 +and using computer is hard with Emacs we + +00:19:35.440 --> 00:19:37.200 +have an ideal opportunity to learn + +00:19:37.200 --> 00:19:40.160 +from our errors to take on hard work + +00:19:40.160 --> 00:19:41.600 +with diverse groups + +00:19:41.600 --> 00:19:44.160 +and to effect lasting solutions to make + +00:19:44.160 --> 00:19:44.960 +Emacs + +00:19:44.960 --> 00:19:47.600 +and thereby any word of software thing + +00:19:47.600 --> 00:19:48.320 +in practically + +00:19:48.320 --> 00:19:50.799 +any human and spoken language easier to + +00:19:50.799 --> 00:19:52.320 +learn and to use + +00:19:52.320 --> 00:19:55.520 +forever life doesn't come with warning + +00:19:55.520 --> 00:19:56.080 +labels + +00:19:56.080 --> 00:19:59.039 +or margin notes we have a blank map and + +00:19:59.039 --> 00:20:00.799 +an uncertain number of batteries for the + +00:20:00.799 --> 00:20:01.840 +torch + +00:20:01.840 --> 00:20:04.159 +but there's light in the darkness it's + +00:20:04.159 --> 00:20:05.200 +freedom + +00:20:05.200 --> 00:20:07.200 +it's the idea of giving to people + +00:20:07.200 --> 00:20:12.240 +something that cannot be taken away + +00:20:12.240 --> 00:20:14.320 +ultraman to say that that was very + +00:20:14.320 --> 00:20:15.440 +beautiful uh + +00:20:15.440 --> 00:20:21.120 +thank you corbin for writing that + +00:20:21.120 --> 00:20:26.960 +okay so uh are there any questions + +00:20:26.960 --> 00:20:32.159 +oh muted + +00:20:32.159 --> 00:20:34.240 +I still can't I'm muted I think I'm + +00:20:34.240 --> 00:20:36.400 +sorry + +00:20:36.400 --> 00:20:40.559 +um what I said was thank you uh + +00:20:40.559 --> 00:20:45.600 +just thanks + +00:20:45.600 --> 00:20:48.640 +I just this community has really been + +00:20:48.640 --> 00:20:49.760 +there for me it's + +00:20:49.760 --> 00:20:56.080 +hard to learn and need + +00:20:56.080 --> 00:20:58.080 +so yeah I keep laughing because I I see + +00:20:58.080 --> 00:21:00.000 +things coming through the chat and I do + +00:21:00.000 --> 00:21:01.600 +not know how to react visually + +00:21:01.600 --> 00:21:02.960 +I'm not used to getting those types of + +00:21:02.960 --> 00:21:04.640 +messages + +00:21:04.640 --> 00:21:08.000 +it is very upsetting I don't know which + +00:21:08.000 --> 00:21:11.120 +one to use I'm using my english as well + +00:21:11.120 --> 00:21:13.120 +I'm intentionally not looking over there + +00:21:13.120 --> 00:21:14.320 +because I'll just get dragged into + +00:21:14.320 --> 00:21:16.799 +conversation and then this we will be on + +00:21:16.799 --> 00:21:18.080 +live stream all night I don't know if + +00:21:18.080 --> 00:21:19.600 +you know me at all in fact I + +00:21:19.600 --> 00:21:21.679 +I my apologies you probably don't hi my + +00:21:21.679 --> 00:21:24.080 +name is corwin I like to talk + +00:21:24.080 --> 00:21:27.039 +I like to get you excited about ideas + +00:21:27.039 --> 00:21:28.720 +that I think we agree about + +00:21:28.720 --> 00:21:31.440 +so we can get somewhere solving an + +00:21:31.440 --> 00:21:33.200 +important problem and there's a lot of + +00:21:33.200 --> 00:21:35.520 +important problems in the world so + +00:21:35.520 --> 00:21:37.840 +I have been living in a devil's paradise + +00:21:37.840 --> 00:21:39.600 +throughout covet as people are sitting + +00:21:39.600 --> 00:21:40.159 +at home + +00:21:40.159 --> 00:21:42.799 +and really frustrated especially in the + +00:21:42.799 --> 00:21:44.480 +united states where I live + +00:21:44.480 --> 00:21:46.640 +about political and social justice + +00:21:46.640 --> 00:21:47.520 +issues you + +00:21:47.520 --> 00:21:49.760 +probably heard of the town where I live + +00:21:49.760 --> 00:21:50.799 +recently + +00:21:50.799 --> 00:21:54.559 +as a direct um + +00:21:54.559 --> 00:21:58.000 +uh kind of crucible there right + +00:21:58.000 --> 00:22:02.400 +um we are a troubled people + +00:22:02.400 --> 00:22:04.559 +we're arguing about freedom it's to the + +00:22:04.559 --> 00:22:06.320 +point where it's hard to put those words + +00:22:06.320 --> 00:22:07.280 +down + +00:22:07.280 --> 00:22:10.400 +without assuming people are gonna write + +00:22:10.400 --> 00:22:12.320 +you off as a shyster + +00:22:12.320 --> 00:22:15.600 +that's insanity we know exactly what + +00:22:15.600 --> 00:22:16.640 +that means + +00:22:16.640 --> 00:22:20.480 +especially in this community we uh + +00:22:20.480 --> 00:22:23.679 +we're here because we want to + +00:22:23.679 --> 00:22:26.640 +um because we want to make sure that + +00:22:26.640 --> 00:22:27.200 +some + +00:22:27.200 --> 00:22:29.280 +part of what the potential that + +00:22:29.280 --> 00:22:30.880 +technology offers + +00:22:30.880 --> 00:22:32.880 +is indelibly written out there that + +00:22:32.880 --> 00:22:34.320 +nobody can take away + +00:22:34.320 --> 00:22:36.799 +that's the bottom line on that that that + +00:22:36.799 --> 00:22:38.240 +closing thought I mean that's where I'd + +00:22:38.240 --> 00:22:40.240 +leave you at with Emacs conference + +00:22:40.240 --> 00:22:41.919 +you want to make stuff that other people + +00:22:41.919 --> 00:22:43.280 +can't take away because that's where + +00:22:43.280 --> 00:22:44.320 +freedom + +00:22:44.320 --> 00:22:48.320 +is hiding + +00:22:48.320 --> 00:22:51.360 +thank you and I agree there is something + +00:22:51.360 --> 00:22:52.799 +to be said about + +00:22:52.799 --> 00:22:55.039 +um you know this idea of having some + +00:22:55.039 --> 00:22:56.080 +piece of software + +00:22:56.080 --> 00:22:59.360 +or an art form to um + +00:22:59.360 --> 00:23:01.679 +setting it free to to live on + +00:23:01.679 --> 00:23:03.360 +indefinitely into the future and for + +00:23:03.360 --> 00:23:04.400 +everyone else + +00:23:04.400 --> 00:23:06.320 +um and for people who may have not + +00:23:06.320 --> 00:23:07.600 +already even been born + +00:23:07.600 --> 00:23:09.679 +to you know at some point someday + +00:23:09.679 --> 00:23:11.280 +discover it and + +00:23:11.280 --> 00:23:13.840 +um you know start using it and making it + +00:23:13.840 --> 00:23:15.039 +even better + +00:23:15.039 --> 00:23:18.880 +um yeah so I think on that note + +00:23:18.880 --> 00:23:21.120 +this might be a good note to conclude on + +00:23:21.120 --> 00:23:23.039 +what you folks think + +00:23:23.039 --> 00:23:24.720 +I always like to go around the room one + +00:23:24.720 --> 00:23:26.640 +time but again I'll keep everybody on + +00:23:26.640 --> 00:23:28.240 +the phone forever so don't + +00:23:28.240 --> 00:23:30.960 +don't don't use my definitely I have to + +00:23:30.960 --> 00:23:31.860 +be seconded + +00:23:31.860 --> 00:23:33.840 +[Laughter] + +00:23:33.840 --> 00:23:38.000 +okay um leo sasha + +00:23:38.000 --> 00:23:40.240 +uh I was just wondering if we'd answered + +00:23:40.240 --> 00:23:41.760 +as many questions as we could + +00:23:41.760 --> 00:23:43.840 +from the people because I believe we've + +00:23:43.840 --> 00:23:45.440 +answered some of them and sasha has been + +00:23:45.440 --> 00:23:47.520 +kind enough to answer them in line + +00:23:47.520 --> 00:23:49.360 +but maybe we wanted to take some of them + +00:23:49.360 --> 00:23:50.960 +live especially some of the later ones + +00:23:50.960 --> 00:23:52.080 +just to + +00:23:52.080 --> 00:23:54.320 +send people off with a feeling that we + +00:23:54.320 --> 00:23:56.240 +answered to the very last question that + +00:23:56.240 --> 00:23:58.640 +they had + +00:23:58.640 --> 00:24:01.360 +and until the sound over my head gets + +00:24:01.360 --> 00:24:03.360 +too loud and I have to mute I'll be here + +00:24:03.360 --> 00:24:04.400 +and then I'll uh + +00:24:04.400 --> 00:24:07.039 +be here if I can convince the loud ones + +00:24:07.039 --> 00:24:10.799 +to come watch with me + +00:24:10.799 --> 00:24:13.039 +so it's really up to you I mean we I'm + +00:24:13.039 --> 00:24:14.559 +the one crumbling right now you know I'm + +00:24:14.559 --> 00:24:15.200 +just + +00:24:15.200 --> 00:24:17.200 +it's pure showmanship that is keeping me + +00:24:17.200 --> 00:24:18.799 +up right now the energy that I've been + +00:24:18.799 --> 00:24:21.120 +accumulating over the last few days + +00:24:21.120 --> 00:24:22.799 +but what's going to happen basically + +00:24:22.799 --> 00:24:24.400 +when we finish this live stream + +00:24:24.400 --> 00:24:26.240 +firstly I'm going to turn off this light + +00:24:26.240 --> 00:24:27.840 +which has been blasting + +00:24:27.840 --> 00:24:30.000 +a very white light in my eyes and up + +00:24:30.000 --> 00:24:31.039 +until 11 pm + +00:24:31.039 --> 00:24:34.400 +every single day you see this very comfy + +00:24:34.400 --> 00:24:37.120 +uh you know so far what not I'm just + +00:24:37.120 --> 00:24:37.919 +going to + +00:24:37.919 --> 00:24:42.880 +crush on it right away so + +00:24:42.880 --> 00:24:45.440 +that sounds like a good plan to me um + +00:24:45.440 --> 00:24:47.279 +you know we've all worked hard + +00:24:47.279 --> 00:24:50.159 +especially you all um and definitely + +00:24:50.159 --> 00:24:51.360 +deserve some rest + +00:24:51.360 --> 00:24:54.640 +to um you know rejuvenate our job + +00:24:54.640 --> 00:24:58.159 +and get back into it again um + +00:24:58.159 --> 00:25:01.279 +yeah sasha did you want to add anything + +00:25:01.279 --> 00:25:05.919 +else + +00:25:05.919 --> 00:25:08.240 +you just muted yourself yes you've just + +00:25:08.240 --> 00:25:12.640 +muted yourself + +00:25:12.640 --> 00:25:14.799 +uh yeah just answering questions at the + +00:25:14.799 --> 00:25:15.780 +moment um + +00:25:15.780 --> 00:25:17.039 +[Music] + +00:25:17.039 --> 00:25:18.400 +at some point I will have to do two + +00:25:18.400 --> 00:25:20.320 +things but in the meantime I can do + +00:25:20.320 --> 00:25:25.520 +Emacs grown-up Emacs things wow + +00:25:25.520 --> 00:25:26.880 +what are you saying grown-up Emacs but + +00:25:26.880 --> 00:25:28.799 +we still had a talk by uh + +00:25:28.799 --> 00:25:32.400 +someone today who was uh 17 I believe + +00:25:32.400 --> 00:25:36.480 +so yeah I was very impressed by this + +00:25:36.480 --> 00:25:39.039 +yeah it's awesome just seeing the wide + +00:25:39.039 --> 00:25:40.320 +diversity and the wide + +00:25:40.320 --> 00:25:43.600 +age range of people um just getting into + +00:25:43.600 --> 00:25:45.200 +Emacs picking up + +00:25:45.200 --> 00:25:48.240 +for all sorts of different things um + +00:25:48.240 --> 00:25:49.840 +corbin and I had a bit of a chat about + +00:25:49.840 --> 00:25:51.440 +this about this + +00:25:51.440 --> 00:25:53.440 +piece of free software that is Emacs and + +00:25:53.440 --> 00:25:54.960 +all the freedoms + +00:25:54.960 --> 00:25:58.320 +freedoms that it grants us um but yeah + +00:25:58.320 --> 00:25:58.960 +we could + +00:25:58.960 --> 00:26:02.080 +go on forever and ever um yeah I really + +00:26:02.080 --> 00:26:02.559 +can + +00:26:02.559 --> 00:26:05.039 +and then and you know and it has to be + +00:26:05.039 --> 00:26:06.400 +about getting something done and that's + +00:26:06.400 --> 00:26:07.440 +where I think + +00:26:07.440 --> 00:26:11.679 +sasha your work and organization is so + +00:26:11.679 --> 00:26:15.679 +uh vital to us + +00:26:15.679 --> 00:26:18.799 +we uh you know we have to direct that + +00:26:18.799 --> 00:26:20.720 +energy into self-organizing + +00:26:20.720 --> 00:26:22.480 +and and that's where I'd like probably + +00:26:22.480 --> 00:26:24.159 +to focus my work + +00:26:24.159 --> 00:26:26.159 +over the probably the next several years + +00:26:26.159 --> 00:26:27.200 +is + +00:26:27.200 --> 00:26:31.120 +um is is putting that thought and some + +00:26:31.120 --> 00:26:32.000 +of the + +00:26:32.000 --> 00:26:34.720 +uh some of the ideas that are built into + +00:26:34.720 --> 00:26:35.600 +org mode and + +00:26:35.600 --> 00:26:37.200 +in fact some of the implementation + +00:26:37.200 --> 00:26:38.720 +that's built into org one and in fact + +00:26:38.720 --> 00:26:40.240 +probably org mode + +00:26:40.240 --> 00:26:43.440 +because hey there it is + +00:26:43.440 --> 00:26:46.159 +to work on that yeah you should see all + +00:26:46.159 --> 00:26:47.279 +the org scripts I wrote + +00:26:47.279 --> 00:26:50.320 +so cool not that other people but anyway + +00:26:50.320 --> 00:26:51.760 +we wrote this like fancy scheduling + +00:26:51.760 --> 00:26:52.000 +thing + +00:26:52.000 --> 00:26:52.799 +and you should check out the + +00:26:52.799 --> 00:26:55.360 +submissions.org to to try to use it + +00:26:55.360 --> 00:26:57.279 +because then if other people use it they + +00:26:57.279 --> 00:26:59.360 +can improve it and then I get to use the + +00:26:59.360 --> 00:27:00.720 +improvements next year + +00:27:00.720 --> 00:27:04.159 +also erc ux irc clients awesome + +00:27:04.159 --> 00:27:06.159 +so a lot of automation was a lot of fun + +00:27:06.159 --> 00:27:07.919 +to work on absolutely + +00:27:07.919 --> 00:27:10.400 +yeah sasha did a lot of cool automation + +00:27:10.400 --> 00:27:11.440 +stuff this year + +00:27:11.440 --> 00:27:13.200 +um you know around generating the + +00:27:13.200 --> 00:27:15.039 +schedules and everything the pages in + +00:27:15.039 --> 00:27:17.200 +the Emacs freaky with org mode + +00:27:17.200 --> 00:27:19.919 +um and you know for the calls with uh + +00:27:19.919 --> 00:27:21.039 +speakers + +00:27:21.039 --> 00:27:24.159 +and coordinating in imaxcom.org + +00:27:24.159 --> 00:27:26.720 +um or like you know updating the topics + +00:27:26.720 --> 00:27:27.600 +all this stuff + +00:27:27.600 --> 00:27:30.480 +she basically automated all of this um + +00:27:30.480 --> 00:27:32.240 +which is definitely very impressive and + +00:27:32.240 --> 00:27:34.480 +I know I'm gonna be looking into + +00:27:34.480 --> 00:27:37.600 +um yeah definitely check out um + +00:27:37.600 --> 00:27:40.720 +erc I'm a little biased um I + +00:27:40.720 --> 00:27:43.360 +started sort of maintaining it a little + +00:27:43.360 --> 00:27:44.320 +bit ago + +00:27:44.320 --> 00:27:47.760 +but um it's been there forever and + +00:27:47.760 --> 00:27:49.279 +you know I'm just following the + +00:27:49.279 --> 00:27:51.919 +footsteps of giants or standing on their + +00:27:51.919 --> 00:27:53.120 +shoulders + +00:27:53.120 --> 00:27:56.640 +so definitely check it out um yeah + +00:27:56.640 --> 00:27:59.919 +any uh last notes to add before we get + +00:27:59.919 --> 00:28:00.559 +back + +00:28:00.559 --> 00:28:03.120 +to um playing the last few demos that we + +00:28:03.120 --> 00:28:04.960 +have + +00:28:04.960 --> 00:28:07.600 +I just wanted to say that I'm really sad + +00:28:07.600 --> 00:28:08.480 +for the people + +00:28:08.480 --> 00:28:11.360 +uh viewing uh viewers right now who + +00:28:11.360 --> 00:28:12.000 +won't get + +00:28:12.000 --> 00:28:14.320 +the thrill of receiving a message by + +00:28:14.320 --> 00:28:16.080 +sasha at 3am telling + +00:28:16.080 --> 00:28:17.679 +oh I found a way to automate all the + +00:28:17.679 --> 00:28:18.960 +talks I found a way to have this + +00:28:18.960 --> 00:28:20.480 +schedule be generated automatically in + +00:28:20.480 --> 00:28:21.760 +an old mode file + +00:28:21.760 --> 00:28:23.520 +and you know I'm having my team in the + +00:28:23.520 --> 00:28:25.360 +morning I'm waking up I see an email + +00:28:25.360 --> 00:28:27.760 +which was unless three am and I say + +00:28:27.760 --> 00:28:31.039 +wow impressive + +00:28:31.039 --> 00:28:33.600 +that works like quite nicely for you um + +00:28:33.600 --> 00:28:34.159 +leo + +00:28:34.159 --> 00:28:36.000 +with like you know the times and time + +00:28:36.000 --> 00:28:37.360 +zones and everything + +00:28:37.360 --> 00:28:39.440 +and with sasha usually getting it on + +00:28:39.440 --> 00:28:40.480 +later at night + +00:28:40.480 --> 00:28:44.399 +um yeah you do get this bedtime right + +00:28:44.399 --> 00:28:45.919 +wait until bedtime and then up until + +00:28:45.919 --> 00:28:47.279 +like one or two because it's too much + +00:28:47.279 --> 00:28:49.200 +fun + +00:28:49.200 --> 00:28:52.559 +yeah exactly um yeah + +00:28:52.559 --> 00:28:56.240 +so uh on that note + +00:28:56.240 --> 00:28:59.919 +if uh there isn't much else to say then + +00:28:59.919 --> 00:29:03.200 +I will uh thank each and every one once + +00:29:03.200 --> 00:29:04.000 +again + +00:29:04.000 --> 00:29:07.039 +um who was in any way + +00:29:07.039 --> 00:29:10.240 +part of this um and helped with um + +00:29:10.240 --> 00:29:13.520 +any of this um basically + +00:29:13.520 --> 00:29:16.640 +um Emacs company anyway um and watched + +00:29:16.640 --> 00:29:17.039 +it + +00:29:17.039 --> 00:29:20.640 +helped whatever um submitted the talk um + +00:29:20.640 --> 00:29:22.960 +I very much thank you um this wouldn't + +00:29:22.960 --> 00:29:23.760 +have been + +00:29:23.760 --> 00:29:27.120 +what it has been without um all of + +00:29:27.120 --> 00:29:30.240 +you folks participation and help and + +00:29:30.240 --> 00:29:32.960 +um just being out there and spreading + +00:29:32.960 --> 00:29:34.720 +the gospel of Emacs + +00:29:34.720 --> 00:29:37.760 +um yeah so + +00:29:37.760 --> 00:29:40.799 +yep there we go leo + +00:29:40.799 --> 00:29:42.399 +sorry someone just asked me if I was + +00:29:42.399 --> 00:29:44.159 +still wearing jeans today so I just felt + +00:29:44.159 --> 00:29:46.799 +obligated to show it + +00:29:46.799 --> 00:29:50.320 +nice I never got my thanks in I I have + +00:29:50.320 --> 00:29:51.039 +to thank + +00:29:51.039 --> 00:29:54.399 +uh leo and uh + +00:29:54.399 --> 00:29:57.760 +and I'll just stare at you but I I won't + +00:29:57.760 --> 00:29:58.480 +say your name + +00:29:58.480 --> 00:30:01.520 +yet again um for the insane work that + +00:30:01.520 --> 00:30:02.000 +you do + +00:30:02.000 --> 00:30:06.320 +and and and sasha um + +00:30:06.320 --> 00:30:09.039 +you are an asset to our whole community + +00:30:09.039 --> 00:30:11.039 +with the vibrance that you bring and the + +00:30:11.039 --> 00:30:13.200 +the passion that you have for + +00:30:13.200 --> 00:30:16.720 +um for community itself uh + +00:30:16.720 --> 00:30:18.480 +I think a lot of us can say that you're + +00:30:18.480 --> 00:30:20.000 +you're driving a lot of our work + +00:30:20.000 --> 00:30:24.240 +in in certain ways um + +00:30:24.240 --> 00:30:25.919 +and then I I want to thank all the + +00:30:25.919 --> 00:30:28.480 +presenters for uh + +00:30:28.480 --> 00:30:30.399 +for working with us to get every + +00:30:30.399 --> 00:30:31.760 +everything scheduled + +00:30:31.760 --> 00:30:35.520 +and also my team and project + +00:30:35.520 --> 00:30:39.279 +um for helping uh get the project + +00:30:39.279 --> 00:30:41.200 +actually testable we had some + +00:30:41.200 --> 00:30:43.279 +interesting stuff to show + +00:30:43.279 --> 00:30:46.720 +and my family for uh all that they do + +00:30:46.720 --> 00:30:49.279 +to make it possible for me to give back + +00:30:49.279 --> 00:30:56.080 +to free software + +00:30:56.080 --> 00:30:57.679 +oh there's a question um someone's + +00:30:57.679 --> 00:30:59.440 +volunteering to help just get the stream + +00:30:59.440 --> 00:31:00.399 +recordings out + +00:31:00.399 --> 00:31:02.880 +so it's it's up to you yeah your call + +00:31:02.880 --> 00:31:03.600 +you want + +00:31:03.600 --> 00:31:05.760 +them out and then you have some time to + +00:31:05.760 --> 00:31:07.200 +prepare nice + +00:31:07.200 --> 00:31:09.600 +cut up versions or do you want everyone + +00:31:09.600 --> 00:31:11.120 +to hang on and then just link to like + +00:31:11.120 --> 00:31:12.960 +the EmacsConf website + +00:31:12.960 --> 00:31:16.159 +right right um I would very much + +00:31:16.159 --> 00:31:17.679 +appreciate help with that + +00:31:17.679 --> 00:31:20.880 +in fact um for last year's um live + +00:31:20.880 --> 00:31:21.919 +recordings + +00:31:21.919 --> 00:31:25.279 +we had someone to help us um + +00:31:25.279 --> 00:31:28.320 +uh andrew jordy in fact who also helped + +00:31:28.320 --> 00:31:30.159 +light a bunch of transcripts last year + +00:31:30.159 --> 00:31:32.559 +did an awesome job um + +00:31:32.559 --> 00:31:34.240 +yeah I really wanted to have him around + +00:31:34.240 --> 00:31:36.080 +this year but you know circumstances + +00:31:36.080 --> 00:31:36.720 +with + +00:31:36.720 --> 00:31:39.279 +um everything going on around around the + +00:31:39.279 --> 00:31:39.840 +world + +00:31:39.840 --> 00:31:42.880 +um just didn't work out but um yeah I + +00:31:42.880 --> 00:31:43.279 +could + +00:31:43.279 --> 00:31:46.240 +definitely use um help with cutting up + +00:31:46.240 --> 00:31:48.159 +the videos + +00:31:48.159 --> 00:31:49.679 +you know for the pre-recordings that's + +00:31:49.679 --> 00:31:51.519 +pretty trivial it's just me having to + +00:31:51.519 --> 00:31:52.640 +upload them + +00:31:52.640 --> 00:31:55.120 +and create the pages so I will do that + +00:31:55.120 --> 00:31:55.679 +but + +00:31:55.679 --> 00:31:58.320 +um to whoever asked the question if it's + +00:31:58.320 --> 00:31:59.279 +on the pad + +00:31:59.279 --> 00:32:01.200 +or if it's in irc sorry I missed it I + +00:32:01.200 --> 00:32:03.440 +will go I'll look back later + +00:32:03.440 --> 00:32:06.240 +um yeah just ping me message me or email + +00:32:06.240 --> 00:32:07.200 +me + +00:32:07.200 --> 00:32:10.080 +at vandalia gnu.org and um I would + +00:32:10.080 --> 00:32:17.840 +appreciate your help + +00:32:17.840 --> 00:32:20.159 +so have we finished the roundtable uh I + +00:32:20.159 --> 00:32:20.880 +believe we're + +00:32:20.880 --> 00:32:23.760 +doing the last thinking so colwin did it + +00:32:23.760 --> 00:32:24.640 +sasha did it + +00:32:24.640 --> 00:32:27.679 +should I go next + +00:32:27.679 --> 00:32:30.320 +so well as you can see I've lowered + +00:32:30.320 --> 00:32:31.200 +myself + +00:32:31.200 --> 00:32:33.360 +ever since the last time I've spoken so + +00:32:33.360 --> 00:32:34.399 +the dynasty started + +00:32:34.399 --> 00:32:36.640 +starting to set in but uh yeah I just + +00:32:36.640 --> 00:32:37.600 +wanted to + +00:32:37.600 --> 00:32:40.399 +um rejoin everyone and just say that + +00:32:40.399 --> 00:32:40.880 +thank you + +00:32:40.880 --> 00:32:42.320 +so much to all the organizers who have + +00:32:42.320 --> 00:32:44.640 +been helping us uh we've done a stellar + +00:32:44.640 --> 00:32:45.279 +job + +00:32:45.279 --> 00:32:47.279 +that I believe at least this year of + +00:32:47.279 --> 00:32:48.880 +keeping things on track + +00:32:48.880 --> 00:32:51.440 +and I hope that all of you have been + +00:32:51.440 --> 00:32:53.039 +able to enjoy this + +00:32:53.039 --> 00:32:56.240 +and yeah I don't have any anyone + +00:32:56.240 --> 00:32:58.480 +in particular to thank you know uh for + +00:32:58.480 --> 00:32:59.840 +me free software was + +00:32:59.840 --> 00:33:01.919 +for a very long time something I did in + +00:33:01.919 --> 00:33:02.960 +my bedroom + +00:33:02.960 --> 00:33:04.559 +on the side of my studies and generally + +00:33:04.559 --> 00:33:06.080 +when I was procrastinating + +00:33:06.080 --> 00:33:08.720 +from writing that one particular essay + +00:33:08.720 --> 00:33:10.559 +or that one particular thesis + +00:33:10.559 --> 00:33:13.120 +you know I did my old mood stuff in the + +00:33:13.120 --> 00:33:13.919 +background so + +00:33:13.919 --> 00:33:16.159 +just to be able to you know join the + +00:33:16.159 --> 00:33:17.440 +community + +00:33:17.440 --> 00:33:19.360 +when normally I got the chance to you + +00:33:19.360 --> 00:33:21.279 +know write some code for it and try to + +00:33:21.279 --> 00:33:23.600 +animate to community but also to be part + +00:33:23.600 --> 00:33:24.399 +of an event + +00:33:24.399 --> 00:33:28.480 +that is so genuine + +00:33:28.480 --> 00:33:30.960 +in its mission so genuine in the way + +00:33:30.960 --> 00:33:31.519 +that + +00:33:31.519 --> 00:33:34.799 +we got speakers together we had you know + +00:33:34.799 --> 00:33:36.399 +we had this excitement that we wanted to + +00:33:36.399 --> 00:33:38.000 +share and judging + +00:33:38.000 --> 00:33:39.360 +by the reactions we've had over the + +00:33:39.360 --> 00:33:41.200 +couple of days you know I I believe + +00:33:41.200 --> 00:33:41.840 +we've + +00:33:41.840 --> 00:33:44.799 +completely hit our target and as corwin + +00:33:44.799 --> 00:33:45.679 +said yesterday I + +00:33:45.679 --> 00:33:48.320 +am I guess I suppose a little humbled I + +00:33:48.320 --> 00:33:50.000 +know it might sound weird for me because + +00:33:50.000 --> 00:33:50.320 +I'm + +00:33:50.320 --> 00:33:52.240 +from britain all the time but when we're + +00:33:52.240 --> 00:33:53.760 +going to press stop + +00:33:53.760 --> 00:33:56.080 +to diet you know for the broadcast I + +00:33:56.080 --> 00:33:56.799 +think it's + +00:33:56.799 --> 00:33:59.840 +going to start slowly dawning slowly + +00:33:59.840 --> 00:34:02.880 +sorry french accent coming back slowly + +00:34:02.880 --> 00:34:06.480 +dawning on me what we've done and + +00:34:06.480 --> 00:34:08.320 +yeah it'll take me a couple of weeks to + +00:34:08.320 --> 00:34:09.520 +recover mentally + +00:34:09.520 --> 00:34:12.000 +spiritually physically and whatnot but I + +00:34:12.000 --> 00:34:13.599 +believe after I'll be able to enjoy what + +00:34:13.599 --> 00:34:15.599 +we've been able to do and for that + +00:34:15.599 --> 00:34:20.800 +thank you so much + +00:34:20.800 --> 00:34:24.480 +um yeah it's you're still you know kind + +00:34:24.480 --> 00:34:25.919 +of in the moment and + +00:34:25.919 --> 00:34:29.359 +um kind of maybe you haven't quite grabs + +00:34:29.359 --> 00:34:32.159 +grasped at all yet but yeah I think + +00:34:32.159 --> 00:34:33.359 +it'll + +00:34:33.359 --> 00:34:36.079 +start hitting us all individually at + +00:34:36.079 --> 00:34:37.599 +different points over the next couple of + +00:34:37.599 --> 00:34:39.119 +days or weeks + +00:34:39.119 --> 00:34:42.079 +um as we take some time to you know rest + +00:34:42.079 --> 00:34:43.599 +up and re-energize + +00:34:43.599 --> 00:34:47.359 +and you know keep going forward um + +00:34:47.359 --> 00:34:50.960 +yeah so on that note if um + +00:34:50.960 --> 00:34:53.839 +no one else has anything to add I will + +00:34:53.839 --> 00:34:54.320 +um + +00:34:54.320 --> 00:34:57.200 +[ __ ] you all farewell and thank you + +00:34:57.200 --> 00:34:59.680 +everyone once again for joining us + +00:34:59.680 --> 00:35:03.839 +and making an awesome amazing EmacsConf 2020. + +00:35:03.839 --> 00:35:06.079 +um just quickly say we weren't sure that + +00:35:06.079 --> 00:35:07.680 +we will be able to pull it off + +00:35:07.680 --> 00:35:09.599 +given all the madness going on around + +00:35:09.599 --> 00:35:10.720 +the world but + +00:35:10.720 --> 00:35:13.839 +for us to have broken um so many of our + +00:35:13.839 --> 00:35:14.880 +numbers and records + +00:35:14.880 --> 00:35:17.440 +for all of them basically um you know we + +00:35:17.440 --> 00:35:18.240 +just had + +00:35:18.240 --> 00:35:20.240 +just about like two and a half or three + +00:35:20.240 --> 00:35:22.320 +terabytes of streaming bandwidth usage + +00:35:22.320 --> 00:35:22.960 +so that's + +00:35:22.960 --> 00:35:25.520 +incredible and so many people join in so + +00:35:25.520 --> 00:35:26.400 +many talks + +00:35:26.400 --> 00:35:30.079 +so it's amazing thank you um + +00:35:30.079 --> 00:35:31.839 +yes I see a question coming will the + +00:35:31.839 --> 00:35:34.040 +ether pad be archived somewhere on + +00:35:34.040 --> 00:35:35.440 +imageconf.org + +00:35:35.440 --> 00:35:37.920 +um and the answer is yes I think sasha + +00:35:37.920 --> 00:35:38.960 +is answering + +00:35:38.960 --> 00:35:41.800 +um yes it will be linked under + +00:35:41.800 --> 00:35:43.200 +imanxconf.org + +00:35:43.200 --> 00:35:46.400 +2020 um that page will contain all the + +00:35:46.400 --> 00:35:47.680 +resources about + +00:35:47.680 --> 00:35:50.880 +everything um you know + +00:35:50.880 --> 00:35:54.880 +uh about imsgufton20 2020 sorry + +00:35:54.880 --> 00:35:57.599 +um yeah now you see some people saying + +00:35:57.599 --> 00:35:59.119 +early happy birthday to me + +00:35:59.119 --> 00:36:02.320 +um thank you so very much um I think + +00:36:02.320 --> 00:36:02.800 +this + +00:36:02.800 --> 00:36:05.760 +uh this conference was an incredible um + +00:36:05.760 --> 00:36:06.160 +I guess + +00:36:06.160 --> 00:36:09.200 +prelude to to my birthday um + +00:36:09.200 --> 00:36:12.880 +so thank you all and on that note + +00:36:12.880 --> 00:36:15.599 +I will end the stream and say goodbye + +00:36:15.599 --> 00:36:15.920 +and + +00:36:15.920 --> 00:36:19.680 +beat you very well bye + +00:36:19.680 --> 00:36:23.040 +bye everyone and then you're going to + +00:36:23.040 --> 00:36:23.839 +play the + +00:36:23.839 --> 00:36:27.119 +devils yep exactly okay + +00:36:27.119 --> 00:36:30.960 +bye bye diff --git a/2020/subtitles/fix.py b/2020/subtitles/fix.py new file mode 100644 index 00000000..5fc8fd4f --- /dev/null +++ b/2020/subtitles/fix.py @@ -0,0 +1,9 @@ +import webvtt +import sys +filename = sys.argv[1] +if (filename.find('sbv')): + vtt = webvtt.from_sbv(filename) +length = len(vtt) +for i in range(0, length - 1): + vtt[i].end = vtt[i + 1].start +vtt.save() |