summaryrefslogtreecommitdiffstats
path: root/2020/subtitles
diff options
context:
space:
mode:
Diffstat (limited to '2020/subtitles')
-rw-r--r--2020/subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt604
-rw-r--r--2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.srt503
-rw-r--r--2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt304
-rw-r--r--2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt1758
-rw-r--r--2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt124
-rw-r--r--2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt470
-rw-r--r--2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt559
-rw-r--r--2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt1062
-rw-r--r--2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt719
-rw-r--r--2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt792
-rw-r--r--2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt353
-rw-r--r--2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt1067
-rw-r--r--2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt839
-rw-r--r--2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt385
-rw-r--r--2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt349
-rw-r--r--2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt1066
-rw-r--r--2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt1342
-rw-r--r--2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt968
-rw-r--r--2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt1250
-rw-r--r--2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt1057
-rw-r--r--2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt1674
-rw-r--r--2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt1631
-rw-r--r--2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt1640
-rw-r--r--2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt664
-rw-r--r--2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt1446
-rw-r--r--2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt2848
-rw-r--r--2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt1723
-rw-r--r--2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt1087
-rw-r--r--2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt1235
-rw-r--r--2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt553
-rw-r--r--2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt490
-rw-r--r--2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt769
-rw-r--r--2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt630
-rw-r--r--2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt3187
-rw-r--r--2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt526
-rw-r--r--2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt385
-rw-r--r--2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt859
-rw-r--r--2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt412
-rw-r--r--2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt2164
-rw-r--r--2020/subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt1708
-rw-r--r--2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt1675
-rw-r--r--2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt490
-rw-r--r--2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt730
-rw-r--r--2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt454
-rw-r--r--2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt2707
-rw-r--r--2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt400
-rw-r--r--2020/subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt205
-rw-r--r--2020/subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt1000
-rw-r--r--2020/subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt1036
-rw-r--r--2020/subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt2905
-rw-r--r--2020/subtitles/fix.py9
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()