summaryrefslogtreecommitdiffstats
path: root/2020
diff options
context:
space:
mode:
Diffstat (limited to '2020')
-rw-r--r--2020/info/01.md5
-rw-r--r--2020/info/02.md870
-rw-r--r--2020/info/03.md157
-rw-r--r--2020/info/04.md283
-rw-r--r--2020/info/05.md929
-rw-r--r--2020/info/06.md249
-rw-r--r--2020/info/07.md329
-rw-r--r--2020/info/08.md380
-rw-r--r--2020/info/09.md153
-rw-r--r--2020/info/10.md100
-rw-r--r--2020/info/11.md374
-rw-r--r--2020/info/12.md489
-rw-r--r--2020/info/13.md380
-rw-r--r--2020/info/14.md437
-rw-r--r--2020/info/15.md990
-rw-r--r--2020/info/17.md3
-rw-r--r--2020/info/18.md3
-rw-r--r--2020/info/19.md3
-rw-r--r--2020/info/20.md489
-rw-r--r--2020/info/21.md5
-rw-r--r--2020/info/22.md540
-rw-r--r--2020/info/23.md382
-rw-r--r--2020/info/24.md3
-rw-r--r--2020/info/25.md182
-rw-r--r--2020/info/26.md175
-rw-r--r--2020/info/27.md219
-rw-r--r--2020/info/28.md3
-rw-r--r--2020/info/30.md188
-rw-r--r--2020/info/31.md6
-rw-r--r--2020/info/32.md3
-rw-r--r--2020/info/33.md3
-rw-r--r--2020/info/34.md568
-rw-r--r--2020/info/35.md240
-rw-r--r--2020/info/38.md3
-rw-r--r--2020/info/39.md212
-rw-r--r--2020/info/40.md6
-rw-r--r--2020/info/41.md3
-rw-r--r--2020/info/42.md3
-rw-r--r--2020/meetings.md120
-rw-r--r--2020/meetings.org155
-rw-r--r--2020/organizers-notebook.md12
-rw-r--r--2020/organizers-notebook.org95
-rw-r--r--2020/submissions.org121
-rw-r--r--2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt1775
-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.vtt522
-rw-r--r--2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt1101
-rw-r--r--2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt606
-rw-r--r--2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt1033
-rw-r--r--2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt1360
-rw-r--r--2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt839
-rw-r--r--2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt18
-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.vtt4
-rw-r--r--2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt303
-rw-r--r--2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt6
-rw-r--r--2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt2
-rw-r--r--2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt3301
-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-autogen.vtt2386
-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--tuan-anh-nguyen-autogen.vtt1522
-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-autogen.vtt757
-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-autogen.vtt769
-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--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann-autogen.vtt913
-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.vtt5988
-rw-r--r--2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt634
-rw-r--r--2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt526
-rw-r--r--2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt905
-rw-r--r--2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt (renamed from 2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt)1083
-rw-r--r--2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt (renamed from 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt)296
-rw-r--r--2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt (renamed from 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt)454
-rw-r--r--2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt442
-rw-r--r--2020/talks/16.md2
-rw-r--r--2020/talks/17.md1
-rw-r--r--2020/talks/18.md2
-rw-r--r--2020/talks/28.md5
-rw-r--r--2020/talks/30.md1
-rw-r--r--2020/talks/31.md5
-rw-r--r--2020/talks/32.md7
83 files changed, 24412 insertions, 20975 deletions
diff --git a/2020/info/01.md b/2020/info/01.md
index 65b37947..70db1190 100644
--- a/2020/info/01.md
+++ b/2020/info/01.md
@@ -2,7 +2,9 @@
Sacha Chua
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--01-emacs-news-highlights--sacha-chua.webm" subtitles="/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt" duration="3:58" download="Download with subtitles" size="11MB"]]
-[Download compressed .webm video (10M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--01-emacs-news-highlights--sacha-chua--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (13.4M)](https://media.emacsconf.org/2020/emacsconf-2020--01-emacs-news-highlights--sacha-chua--compressed32.webm)
+[Download compressed .webm video (10M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--01-emacs-news-highlights--sacha-chua--vp9-q56-video-original-audio.webm)
+[View transcript](https://github.com/sachac/emacsconf-2020-emacs-news-highlights)
Quick highlights from Emacs News since the last EmacsConf
@@ -10,7 +12,6 @@ Quick highlights from Emacs News since the last EmacsConf
- <https://github.com/sachac/emacsconf-2020-emacs-news-highlights>
-
# Following up
Got any cool Emacs links you'd like me to share? You can post
diff --git a/2020/info/02.md b/2020/info/02.md
index c6cac107..fab7aa9d 100644
--- a/2020/info/02.md
+++ b/2020/info/02.md
@@ -1,7 +1,7 @@
# An Emacs Developer Story: From User to Package Maintainer
Leo Vivier
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.webm" size="296MB" subtitles="/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt" duration="24:15"]]
+[[!template vidid="mainVideo" id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.webm" size="296MB" subtitles="/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt" duration="24:15"]]
In light of the new development philosophy for Org-mode, I would like
to present my developer story from discovering Org-mode in 2014 to
@@ -81,343 +81,535 @@ development via emacs
resources for learning; the people were SO generous with their time,
to share comments and ideas to improve code.
-<!-- transcript: 2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt -->
+<a name="transcript"></a>
# Transcript
-(Amin: Alrighty, Leo Vivier, take it away.) Leo Vivier: Okay, well, thank you. I'm
-in. So you've just had a little roundup of the news, and we're going
-to get started now with some presentations. We're starting with user
-developer stories. I was extremely interested in this section because
-I wanted to get a chance, basically, to tell you a little more about
-who I am and how I got from basically being a user of Emacs to being
-nowadays a package maintainer, and maybe more in the future. I don't
-know.
-
-So, just for the organizers, I'm planning to speak for 15 minutes, and
-I'll have five more minutes of questions at the end. As I told you
-before, if you want to have questions, you know you can use the pad,
-and I'll be reading the questions from there. Okay.
-
-So hi there, as Amin introduced me before, my name is Leo Vivier. I'm
-a freelance software engineer in France, and I have been using Emacs
-now for i believe close to eight years. I can't believe it's been so
-long. But yes, it's been a journey because, in a way, nothing made me
-go for Emacs. You know I'm an-- sorry, I was about to say Emacs major,
-but no, I'm an English major. I went to university to study English
-literature and linguistics, and I just got started in Emacs because I
-was looking for ways to take better notes. I was looking for ways to
-[Applause] structure the way I was learning, structure the way I was
-taking notes. I stumbled one day upon this weird piece of software
-which was called Emacs, and I've been trapped forever since,
-basically, because eight years ago, when I discovered Emacs I just
-couldn't let go. There was just something very interesting about the
-way you configured your setup, and I just wanted to dive deeper and
-deeper.
-
-So the title is of this talk exactly is how I went from user to
-package maintainer, and the package now that I'm maintaining is called
-org-roam. I'm not the only one doing this. I'm helped with many lovely
-people working on org-roam. I got started as a maintainer only this
-year, so that means that for the eight years I've been an Emacs user,
-seven of those years were spent merely being a user trying to be a
-sponge for knowledge, trying to learn as much as I could. I believe it
-would be interesting for me to share my story because I believe that
-I'm far from being the only user who can make the jump to being a
-maintainer.
-
-A lot of you have a lot of knowledge when it comes to Emacs. Some of
-you are at different steps in your journey. Some of you, for instance,
-are just starting to copy stuff out of StackExchange into your Emacs
-configuration. let's say you want to do something very particular and
-you haven't found a way to do so. You go on StackExchange. You find
-something that's interesting. You add it to your Emacs configuration.
-You barely understand anything that's going on. You know that it's
-supposed to be Emacs Lisp. "I hardly know Emacs and I know even less
-what is Lisp supposed to be." But you paste it in and it does what you
-want it to do, and you say "Great, I'll move on to my work now." So
-that's how I got started. I had a very spartan setup for Emacs, which
-a lot of you must know... The first time you launch Emacs, you have
-this feeling that you're jumping 20 years back in time, as far as the
-user interface is concerned. But as you get to spend more time with
-Emacs... Some would call it Stockholm syndrome insofar as you can't
-see how spartan the entire thing is, but it actually is a lovely
-prison so to speak.
-
-That's how I got started eight years ago. I just wanted to find a way
-to do my research properly. I wanted to have a tool that I could use
-to write my notes in plain text, because I was already fairly averse
-to Microsoft solutions when it came to taking notes. So yeah, I got
-started in Emacs. I read a little bit about what plain text was about.
-Just to be clear, at the time, yes, I was very good with computers,
-but I was not a computer science student. I had barely any experience
-with programming and coding, and I was even less of a hacker back
-then. It just goes to show you that at the beginning, I had close to
-no knowledge, whether it be about the free software world, whether it
-be about...
-
-Sacha, do you want to say something? (Sacha: just confirming, you're
-not sharing anything on the screen at the moment, right?) No, I'm not
-sharing anything, I'm just presenting.
-
-So when I started, I had no experience whatsoever. I was just a
-literature major trying to get better at taking notes. I stumbled upon
-LaTeX. As many people who stumble upon LaTeX know, you don't just
-stumble upon LaTeX, you embroil yourself in the turmoil of suffering,
-of late nights tweaking, so that your document is exactly in the
-perfect shape you want it to be.
-
-Soon after, when I got started with Emacs and LaTeX, I discovered
-something that truly changed my life, and it was Org Mode. As you'll
-get a lot of presentations this afternoon about Org Mode, I won't be
-spending too much time on it. But Org Mode, for me, was a revelation.
-It's... There was something that, upon reading articles on how to use
-Org Mode, especially one of the key article that I'd read which really
-made a huge impact on me was the "Organize Your Life in Plain Text"
-one which i'm sure many of you must have stumbled upon in your Emacs
-journey... For me, when I stumbled upon this document, I was starting
-to get interested in Getting Things Done and all the nitty-gritty
-stuff about organization and self-organization. It just felt like
-everything was under my fingertips to make the perfect workflow. There
-was something incredibly satisfying about having a system that gave
-you so many options to configure your experience exactly how you
-wanted. You had this feeling that the people behind Org Mode had
-thought of everything, whichever small adjustment that you needed in
-workflow whether it be more states for your TODOs, whether it be, oh,
-I want my weeks to start on Monday and not on Saturday, oh, it's half
-past one and I need to... in the morning, I mean, and I need to make
-sure that the item that i'm marking as done is done for the day before
-and not for the current day. You see what I'm talking about. So many
-details that were already present in Org Mode. At first you're really
-impressed, because you think, wow, they thought of everything, but
-then you realize that it's just a matter of experience, just a matter
-of people contributing code, because the development of Org Mode,
-Emacs, and everything is just open to the public.
-
-You know, it's like everything is being done with the garage
-door opened. You can just go on Org Mode on Savannah and see
-everything that is being developed. For me, the shift that occurred in
-my mind was when I was reading all the options, I was looking at all
-the variables that i could modify for Org Mode, and there came a time,
-maybe two to three years ago, where I thought, oh wow, maybe for the
-first time in a while, there is no option for me to do what I want to
-be doing with Org Mode. I believe at the time the the key issue that
-triggered this reflex for me was I wanted to do something with the
-agenda. I wanted to have a super category so, you know, in the... for
-those of you who know, in your agenda, you have the ability to have
-many files, and you have the ability to have categories. I wanted
-somehow to group my TODOs in smaller groups, or bigger groups, I
-should say, so that, for instance, I could have one group for my
-professional life, I could have a group for one work, the second
-work... I could have something for university and all this. I thought,
-yeah, I think I'd like this. After having spent so long working with
-Emacs and working with Org Mode, I had some ideas about what was
-within the realm of possibility and what wasn't. Here I thought to
-myself, this is definitely something that I can do. And so thus
-started my journey into the Org Mode libraries.
-
-I won't go too much into details right now, because right now, the
-main objective that I have is just to show you how simple it is to
-become a maintainer, how to become more involved with the development.
-The libraries in Org Mode, they're written in Elisp, which is a
-very... It might seem like an obscure language, and it certainly is,
-but as soon as you get the logic of the language--and what i'm telling
-you is coming from someone who's never studied programming-- it made
-sense. Everything is so verbose when you get into the code. When you
-learn the rudiments of Elisp, you start getting to the code, and you
-start thinking, wow, okay that makes sense, and you start developing a
-logic for all this. So, equipped as I was with this new knowledge, I
-went on my project, i went into the Org agenda code, and I thought,
-okay, is there anything that I can use to do my bidding? Fast forward
-maybe two to three weeks of intense turmoil and many nights which were
-spent single-mindedly working on this project, two weeks after, I had
-something that was working, and I was pretty happy about it. That was
-a key landmark for me, because when that happened, it just felt like,
-okay, I can contribute something to Org Mode, and I can do something
-that would benefit as many people as possible. And to me, that was the
-click. That's when it occurred. That's when I went on my first project
-and I did something that felt useful to the community.
-
-And nowadays, as I told you, I maintain packages, but really, nothing
-has changed. The only thing, maybe, that has changed that I've turned
-my mind onto other problems. Maybe I've got three more minutes and I'd
-like to finish by maybe something a little different.
-
-I've told you my Emacs story and I hope I've stressed how little
-effort it took me to move from steps to steps on the ladder. The
-ladder implies a sense of hierarchy, but it really isn't. Whatever
-your step on the journey of Emacs is... Some of you might be at the
-step where you're really worried about learning Elisp because it feels
-like such a monumental task to be undertaking and you have no
-experience whatsoever, but the thing is, maybe you could try climbing
-this first step on the ladder. Maybe you could try, if you have any
-project, if you've been using Org Mode, maybe one day you thought,
-"oh, yes, I wish I could do this but I can't," or maybe do try to do
-this, maybe do try to change something in a major mode that you're
-using and which you feel might be better. I think Emacs, Org Mode, and
-all free software in general has this tendency to give you this idea
-that I can be a hacker in the sense of the term that you're modifying
-things to do your bidding. For me, I believe this to be a very healthy
-attitude towards software. As Amin said in the very beginning, we are
-doing this entire presentation-- sorry, this entire conference with
-free software. Just see all the things we've been able to do in free
-software. For me, Emacs was my gateway, so to speak, into how to
-contribute to free software, about the philosophy that surrounds it.
-
-What I would like to do... I'll finish on this note and then I'll be
-taking your questions. Just try. You've read on Reddit that you need
-to go through the Elisp manual in Emacs. You might be scared, but just
-do it. Just give it a shot. Just give it maybe one afternoon. Try to
-read it. Try to see if this appeals to your mind. If you've been
-interested enough in my presentation right now, and if you're
-interested enough in any of the talks you're going to have during the
-entire conference, do give it a shot. I'm pretty sure you will like
-the journey on which you will be embarking upon. So
-
-I believe I'm finishing one minute early, but I see quite a bit of
-questions already. I'm not sure. Sacha, should I just be reading the
-questions, or do you want to be feeding me the questions? (Amin: It's
-really up to you. it's completely up to you. If you've got the
-questions open and can take them or read them, by all means please.)
-Okay, well, I'm going to read them because I've got them on the side.
-I'm going to start with the one at the bottom.
-
-"Do you feel that being a white male contributed to your experience?"
-Yeah. I mean, I do believe... There's an idea of privilege. I mean,
-I'm French. I live in... I'm lucky enough to be here at university,
-okay, and I'm fairly aware of the discrepancies that happen, even in
-France, according to this... So, yes, I believe my journey was heavily
-influenced by this. If you would like to specify the question, please
-do, but I don't have really all that much to ask on this.
-
-"What is your advice to start learning Elisp language? Any
-particularly good resource or any other tips?" I finished um my
-presentation by telling you about the Elisp introduction which is
-built into Emacs. What I might do... I'm going to share my screen just
-to show you how this works. I will be sharing this window. I believe
-it's frozen on my end, so I can't see anything. i'm not sure if you
-can see me or if my camera is moving. Okay, so my Firefox is frozen.
-So i'll answer the question, but I won't be able to show you what I
-wanted to show you. There's a built-in guide inside Emacs to learn
-Elisp. Maybe the best chance that you have is just to go open these
-info pages. I'm sure someone will be kind enough to mention this to
-you in the #emacsconf channel on IRC but it's probably the best way to
-get started with Elisp. You know, we tend to get obsessed, with
-software and with programming, about what's the best way to get
-started. You see so many people who are heavily interested in getting
-started with programming but they never managed to get started because
-there's so much choice. My advice would be to just get started. Don't
-get so worried about the first step. Well, if I may still recommend
-the first step, even after saying this, do try to start with the
-built-in guides. I believe they're pretty pretty good.
-
-There was another question. It's the last question that I can read and
-after that, you will have to read the questions for me because
-everything is frozen on my end. I hope I'm not frozen in a very bad
-position so please excuse me if my mouth is open or anything. (Amin:
-no, we just completely lost the video feed, so no worries.) Oh,
-splendid, so I won't have to make a fool out of myself.
-
-So the last question I wanted to answer was "Have you read Dirk
-Gently's Holistic Detective Agency?" No, I haven't. I hope it's not a
-jab at the way i'm dressing for the conference, but yeah, I haven't
-read it. Was there any other question?
-
-(Amin: I see one other question. "Any recommendation for good
-packaging guides or places to start? i get a bit overwhelmed by some
-things. For example, the choice of different test frameworks.") Right.
-Okay. So that's a very good question. I believe alphapapa is in the
-chat right now. As myself a new lisp developer for org-roam, i'd
-really recommend you to look into his package developers' guide
-because you have a list of all the softwares that are extremely useful
-to be using when you're getting started. If you're looking into a
-first step for how to develop elast package, i'd really advise you to
-look into edebug. It's one word, edebug, and you have a section in the
-manual for this, because for me, it was the key step to getting to
-develop good packages. It was understanding basically what the code
-did and having us something like a REPL (read-evaluate-print-loop)
-that allows you to step through the code and see exactly which states
-the variables are at which at this point in the program. That's really
-my biggest advice to you. Any other question? Thanks. Yeah, I
-see one or two more. So there's one.
-
-They ask, "How did the freedom of Emacs help you on your way?" So the
-freedom of Emacs... I mentioned that Emacs, for me, was my gateway
-into free software and the freedom of Emacs was that you could
-maybe... First and foremost, compared to other software, was that you
-had behind Emacs, Elisp, which allows you to read the code, read
-whatever is going on in the background. Surely, if you go deep enough,
-you'll end up on C functions that you might not be able to read if you
-do not have the experience. But for Org Mode, which was my gateway
-into Emacs, most of it is written in Elisp, and all the commands have
-a very verbose name, like something simple as org go to next subtree
-or org go to a parent subtree. You know, things like this. It's so
-elegant. It's verbose. That's a sense of freedom insofar as you can go
-into the code and see, oh, okay, that's how it's implemented. I
-believe in a way that's the freedom and the liberty that is given to
-you to look into the code is something that invites you to do the same
-with your life. As someone who does a little bit of philosophy on the
-side, I believe it's a very healthy message to be gathering from a
-piece of software.
-
-(Amin: Awesome, thank you. Let's see... So we have... I think I saw
-another question pop up.) I'm not sure how we're doing as far as time
-is concerned... I believe we have like one or two minutes more. (Amin:
-Yeah, actually, we're quite a bit ahead of the schedule, so if we take
-a little bit longer, we're fine. If you do have more questions, please
-do.) I'm just sorry that my video is not working anymore. (Amin: No
-problem. Someone was actually saying... What's the most recent...
-Actually, yeah well before that.
-
-"Please show off your three-piece suit before you end your talk, which
-requires fixing your frozen camera. if this is not possible, please
-post suit selfies in an easily accessible location." Okay, I'll make
-sure to do this. But yes, I wanted to hype things up for the
-conference, so yes, I did get the three-piece suit out. I'm very glad
-you like it. By the way when you get a chance to see me live again, do
-appreciate that my tie has both the colors of Emacs purple and also
-Org Mode green. It took me a while to find this one, so I hope you
-will appreciate this.
-
-(Amin: Awesome. Let's see. We have one other question. "What's the
-most recent Emacs package or tool that you've discovered that you've
-added to your repertoire?") Very interesting question. The thing is,
-when you've spent as long as I have on Emacs--and I know that I've
-only spent eight years and some of you might have spent maybe 10, 20,
-maybe even more years on Emacs-- but for me, I believe the the coolest
-neat trick that I found in Emacs was a mode which is called
-beacon-mode. It's something that allows you to show when you're
-jumping between buffers or when you're dropping between windows, it
-shows exactly where your point is in that buffer by making a slight
-ray of light which looks like a beacon, hence the name. It really
-helps you navigate buffers because it always shows in a very visual
-way where your point is. I'll get a chance to show this to you later
-today when i'll be presenting my other talks.
-
-(Amin: AWesome. We have one question from Jonas, the maintainer from
-Magit. He asks, "When you touched your webcam, that blew a fuse at my
-place. How did you do that?") Well, I'm very sorry, Jonas, that it
-happened to you, but i'll make sure not to touch my webcam again.
-(Amin: Do we have any other questions?) I have to trust you on this
-one. I'm really sorry. Everything is frozen on my end. (Amin: No
-problem.)
-
-Yeah I'm more talking to the audience, I guess. I hope my lack of
-slides didn't bother you. I really wanted to have this verbose time
-with people, to be able to... it's a message that i've been trying to
-share with as many people as possible. In france we do have an Emacs
-workshop that we have on a monthly basis. I've been learning a lot
-with those people and I felt like doing the same with Emacs conference
-would be good. That's why i'm really happy, and I'm really lucky to
-have had the chance to do this today. I hope some of you I've
-convinced you of climbing up a step on a ladder or making a step in a
-journey. (Amin: Absolutely. Thank you so much, Leo. I happen to
-completely agree with your not necessarily using a slide when it's not
-really needed and to help give some face-to-face time with the
-audience. Unfortunately your webcam cut out, but I mean before that.)
-Yes, I'll make sure to fix the problems later on, so don't worry about
-it. (Amin: Awesome. Alrighty. I guess we're wrapping up for your talk
-and getting ready for the next talk.) Sure. Well, thank you so much.
-I'll see you all later, I suppose! (Amin: Sounds good. Thank you
-again, Leo. Bye-bye)
-
-<!-- /transcript -->
+[[!template text="(Amin: Alrighty, Leo Vivier, take it away.)" start="00:00:00.000" video="mainVideo" id=subtitle]]
+[[!template text="Okay, well, thank you. I'm in." start="00:00:03.760" video="mainVideo" id=subtitle]]
+[[!template text="So you've just had a little roundup of the news," start="00:00:05.319" video="mainVideo" id=subtitle]]
+[[!template text="and we're going to get started now with some presentations." start="00:00:08.393" video="mainVideo" id=subtitle]]
+[[!template text="We're starting with user developer stories." start="00:00:11.120" video="mainVideo" id=subtitle]]
+[[!template text="I was extremely interested in this section" start="00:00:15.920" video="mainVideo" id=subtitle]]
+[[!template text="because I wanted to get a chance, basically," start="00:00:18.568" video="mainVideo" id=subtitle]]
+[[!template text="to tell you a little more about who I am and" start="00:00:21.133" video="mainVideo" id=subtitle]]
+[[!template text="how I got from basically being a user of Emacs" start="00:00:24.160" video="mainVideo" id=subtitle]]
+[[!template text="to being nowadays a package maintainer," start="00:00:28.160" video="mainVideo" id=subtitle]]
+[[!template text="and maybe more in the future. I don't know." start="00:00:31.279" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, just for the organizers, I'm planning to speak for 15 minutes," start="00:00:34.156" video="mainVideo" id=subtitle]]
+[[!template text="and I'll have five more minutes of questions at the end." start="00:00:36.954" video="mainVideo" id=subtitle]]
+[[!template text="As I told you before, if you want to have questions," start="00:00:39.680" video="mainVideo" id=subtitle]]
+[[!template text="you know you can use the pad," start="00:00:41.880" video="mainVideo" id=subtitle]]
+[[!template text="and I'll be reading the questions from there." start="00:00:43.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay. So hi there, as Amin introduced me before," start="00:00:45.871" video="mainVideo" id=subtitle]]
+[[!template text="my name is Leo Vivier." start="00:00:49.600" video="mainVideo" id=subtitle]]
+[[!template text="I'm a freelance software engineer in France," start="00:00:51.280" video="mainVideo" id=subtitle]]
+[[!template text="and I have been using Emacs now for" start="00:00:55.662" video="mainVideo" id=subtitle]]
+[[!template text="I believe close to eight years." start="00:00:59.359" video="mainVideo" id=subtitle]]
+[[!template text="I can't believe it's been so long." start="00:01:00.885" video="mainVideo" id=subtitle]]
+[[!template text="But yes, it's been a journey because, in a way," start="00:01:03.039" video="mainVideo" id=subtitle]]
+[[!template text="nothing made me go for Emacs." start="00:01:09.967" video="mainVideo" id=subtitle]]
+[[!template text="You know I'm an-- sorry, I was about to say Emacs major," start="00:01:13.255" video="mainVideo" id=subtitle]]
+[[!template text="but no, I'm an English major." start="00:01:17.011" video="mainVideo" id=subtitle]]
+[[!template text="I went to university to study English literature and linguistics," start="00:01:18.638" video="mainVideo" id=subtitle]]
+[[!template text="and I just got started in Emacs" start="00:01:23.990" video="mainVideo" id=subtitle]]
+[[!template text="because I was looking for ways to take" start="00:01:26.159" video="mainVideo" id=subtitle]]
+[[!template text="better notes. I was looking for ways to" start="00:01:28.240" video="mainVideo" id=subtitle]]
+[[!template text="structure the way I was learning," start="00:01:32.640" video="mainVideo" id=subtitle]]
+[[!template text="structure the way I was taking notes." start="00:01:34.640" video="mainVideo" id=subtitle]]
+[[!template text="I stumbled one day" start="00:01:38.084" video="mainVideo" id=subtitle]]
+[[!template text="upon this weird piece of software" start="00:01:40.079" video="mainVideo" id=subtitle]]
+[[!template text="which was called Emacs," start="00:01:42.032" video="mainVideo" id=subtitle]]
+[[!template text="and I've been trapped forever since," start="00:01:43.759" video="mainVideo" id=subtitle]]
+[[!template text="basically, because eight years ago," start="00:01:46.479" video="mainVideo" id=subtitle]]
+[[!template text="when I discovered Emacs," start="00:01:48.328" video="mainVideo" id=subtitle]]
+[[!template text="I just couldn't let go." start="00:01:49.515" video="mainVideo" id=subtitle]]
+[[!template text="There was just something very" start="00:01:50.632" video="mainVideo" id=subtitle]]
+[[!template text="interesting about the way" start="00:01:52.720" video="mainVideo" id=subtitle]]
+[[!template text="you configured your setup," start="00:01:54.487" video="mainVideo" id=subtitle]]
+[[!template text="and I just wanted to dive deeper and deeper." start="00:01:56.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So the title is of this talk exactly is" start="00:01:59.759" video="mainVideo" id=subtitle]]
+[[!template text="how I went from user to package maintainer," start="00:02:04.320" video="mainVideo" id=subtitle]]
+[[!template text="and the package now that I'm maintaining" start="00:02:07.637" video="mainVideo" id=subtitle]]
+[[!template text="is called org-roam. I'm not the only one doing this." start="00:02:09.686" video="mainVideo" id=subtitle]]
+[[!template text="I'm helped with many lovely people working on org-roam." start="00:02:12.080" video="mainVideo" id=subtitle]]
+[[!template text="I got started as a maintainer only this year," start="00:02:18.720" video="mainVideo" id=subtitle]]
+[[!template text="so that means that for" start="00:02:22.149" video="mainVideo" id=subtitle]]
+[[!template text="the eight years I've been" start="00:02:23.360" video="mainVideo" id=subtitle]]
+[[!template text="an Emacs user, seven of those years were" start="00:02:24.720" video="mainVideo" id=subtitle]]
+[[!template text="spent merely being a user" start="00:02:27.360" video="mainVideo" id=subtitle]]
+[[!template text="trying to be a sponge for knowledge," start="00:02:29.200" video="mainVideo" id=subtitle]]
+[[!template text="trying to learn as much as I could." start="00:02:31.040" video="mainVideo" id=subtitle]]
+[[!template text="I believe it would be" start="00:02:33.920" video="mainVideo" id=subtitle]]
+[[!template text="interesting for me to share my story" start="00:02:36.800" video="mainVideo" id=subtitle]]
+[[!template text="because I believe that I'm far from" start="00:02:39.040" video="mainVideo" id=subtitle]]
+[[!template text="being the only user" start="00:02:40.959" video="mainVideo" id=subtitle]]
+[[!template text="who can make the jump to being a maintainer." start="00:02:42.160" video="mainVideo" id=subtitle]]
+[[!template new="1" text="A lot of you have a lot of knowledge when it comes to Emacs." start="00:02:44.327" video="mainVideo" id=subtitle]]
+[[!template text="Some of you are at different steps in your journey." start="00:02:47.572" video="mainVideo" id=subtitle]]
+[[!template text="Some of you, for instance, are just" start="00:02:51.040" video="mainVideo" id=subtitle]]
+[[!template text="starting to copy stuff out of" start="00:02:52.720" video="mainVideo" id=subtitle]]
+[[!template text="StackExchange into your Emacs configuration." start="00:02:55.680" video="mainVideo" id=subtitle]]
+[[!template text="Let's say you want to do something very particular" start="00:02:59.058" video="mainVideo" id=subtitle]]
+[[!template text="and you haven't found a way to do so." start="00:03:01.599" video="mainVideo" id=subtitle]]
+[[!template text="You go on StackExchange." start="00:03:04.480" video="mainVideo" id=subtitle]]
+[[!template text="You find something that's interesting." start="00:03:05.527" video="mainVideo" id=subtitle]]
+[[!template text="You add it to your Emacs configuration." start="00:03:07.930" video="mainVideo" id=subtitle]]
+[[!template text="You barely understand anything that's going on." start="00:03:10.077" video="mainVideo" id=subtitle]]
+[[!template text="You know that it's supposed to be Emacs Lisp." start="00:03:11.680" video="mainVideo" id=subtitle]]
+[[!template text="&quot;I hardly know Emacs and" start="00:03:14.800" video="mainVideo" id=subtitle]]
+[[!template text="I know even less what is Lisp supposed to be.&quot;" start="00:03:17.200" video="mainVideo" id=subtitle]]
+[[!template text="But you paste it in, and it does what you want it to do," start="00:03:19.440" video="mainVideo" id=subtitle]]
+[[!template text="and you say &quot;Great, I'll move on to my work now.&quot;" start="00:03:22.172" video="mainVideo" id=subtitle]]
+[[!template text="So that's how I got started." start="00:03:26.682" video="mainVideo" id=subtitle]]
+[[!template text="I had a very spartan setup for Emacs, which a lot of you must know..." start="00:03:28.821" video="mainVideo" id=subtitle]]
+[[!template text="The first time you launch Emacs," start="00:03:33.888" video="mainVideo" id=subtitle]]
+[[!template text="you have this feeling" start="00:03:36.000" video="mainVideo" id=subtitle]]
+[[!template text="that you're jumping 20 years back in time," start="00:03:36.920" video="mainVideo" id=subtitle]]
+[[!template text="as far as the user interface is concerned." start="00:03:38.852" video="mainVideo" id=subtitle]]
+[[!template text="But as you get to spend more time with Emacs..." start="00:03:43.260" video="mainVideo" id=subtitle]]
+[[!template text="Some would call it Stockholm syndrome" start="00:03:46.959" video="mainVideo" id=subtitle]]
+[[!template text="insofar as you can't see" start="00:03:49.120" video="mainVideo" id=subtitle]]
+[[!template text="how spartan the entire thing is," start="00:03:50.959" video="mainVideo" id=subtitle]]
+[[!template text="but it actually is a lovely prison, so to speak." start="00:03:52.929" video="mainVideo" id=subtitle]]
+[[!template new="1" text="That's how I got started eight years ago." start="00:03:58.400" video="mainVideo" id=subtitle]]
+[[!template text="I just wanted to find a way to do my research properly." start="00:04:00.400" video="mainVideo" id=subtitle]]
+[[!template text="I wanted to have a tool" start="00:04:04.319" video="mainVideo" id=subtitle]]
+[[!template text="that I could use to write my notes" start="00:04:05.699" video="mainVideo" id=subtitle]]
+[[!template text="in plain text, because I was already" start="00:04:07.280" video="mainVideo" id=subtitle]]
+[[!template text="fairly averse to Microsoft solutions when it came to taking notes." start="00:04:08.959" video="mainVideo" id=subtitle]]
+[[!template text="So yeah, I got started in Emacs." start="00:04:16.320" video="mainVideo" id=subtitle]]
+[[!template text="I read a little bit about what plain text was about." start="00:04:19.180" video="mainVideo" id=subtitle]]
+[[!template text="Just to be clear, at the time, yes," start="00:04:21.651" video="mainVideo" id=subtitle]]
+[[!template text="I was very good with computers," start="00:04:24.364" video="mainVideo" id=subtitle]]
+[[!template text="but I was not a computer science student." start="00:04:27.120" video="mainVideo" id=subtitle]]
+[[!template text="I had barely any experience with programming and coding," start="00:04:30.160" video="mainVideo" id=subtitle]]
+[[!template text="and I was even less of a hacker back then." start="00:04:34.302" video="mainVideo" id=subtitle]]
+[[!template text="It just goes to show you that at the beginning," start="00:04:39.919" video="mainVideo" id=subtitle]]
+[[!template text="I had close to no knowledge," start="00:04:43.052" video="mainVideo" id=subtitle]]
+[[!template text="whether it be about" start="00:04:44.479" video="mainVideo" id=subtitle]]
+[[!template text="the free software world," start="00:04:45.840" video="mainVideo" id=subtitle]]
+[[!template text="whether it be about..." start="00:04:47.457" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Sacha, do you want to say something?" start="00:04:48.880" video="mainVideo" id=subtitle]]
+[[!template text="(Sacha: just confirming, you're not sharing anything" start="00:04:50.290" video="mainVideo" id=subtitle]]
+[[!template text="on the screen at the moment, right?)" start="00:04:52.479" video="mainVideo" id=subtitle]]
+[[!template text="No, I'm not sharing anything," start="00:04:54.080" video="mainVideo" id=subtitle]]
+[[!template text="I'm just presenting." start="00:04:55.204" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So when I started," start="00:04:59.040" video="mainVideo" id=subtitle]]
+[[!template text="I had no experience whatsoever." start="00:05:01.173" video="mainVideo" id=subtitle]]
+[[!template text="I was just a literature major" start="00:05:03.680" video="mainVideo" id=subtitle]]
+[[!template text="trying to get better at taking notes." start="00:05:07.199" video="mainVideo" id=subtitle]]
+[[!template text="I stumbled upon LaTeX." start="00:05:11.039" video="mainVideo" id=subtitle]]
+[[!template text="As many people who stumble upon LaTeX know," start="00:05:12.466" video="mainVideo" id=subtitle]]
+[[!template text="you don't just stumble upon LaTeX," start="00:05:15.280" video="mainVideo" id=subtitle]]
+[[!template text="you embroil yourself in the turmoil of suffering," start="00:05:17.519" video="mainVideo" id=subtitle]]
+[[!template text="of late nights tweaking," start="00:05:21.950" video="mainVideo" id=subtitle]]
+[[!template text="so that your document is exactly" start="00:05:24.560" video="mainVideo" id=subtitle]]
+[[!template text="in the perfect shape you want it to be." start="00:05:26.923" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Soon after, when I got started with Emacs and LaTeX," start="00:05:33.440" video="mainVideo" id=subtitle]]
+[[!template text="I discovered something that truly changed my life," start="00:05:36.639" video="mainVideo" id=subtitle]]
+[[!template text="and it was Org Mode." start="00:05:39.334" video="mainVideo" id=subtitle]]
+[[!template text="As you'll get a lot of presentations" start="00:05:40.560" video="mainVideo" id=subtitle]]
+[[!template text="this afternoon about Org Mode," start="00:05:44.479" video="mainVideo" id=subtitle]]
+[[!template text="I won't be spending too much time on it." start="00:05:46.960" video="mainVideo" id=subtitle]]
+[[!template text="But Org Mode, for me, was a revelation. It's..." start="00:05:49.360" video="mainVideo" id=subtitle]]
+[[!template text="There was something that," start="00:05:53.680" video="mainVideo" id=subtitle]]
+[[!template text="upon reading articles on how to use Org Mode," start="00:05:55.869" video="mainVideo" id=subtitle]]
+[[!template text="especially one of the key articles" start="00:05:59.039" video="mainVideo" id=subtitle]]
+[[!template text="that I'd read which really made" start="00:06:02.453" video="mainVideo" id=subtitle]]
+[[!template text="a huge impact on me" start="00:06:04.160" video="mainVideo" id=subtitle]]
+[[!template text="was the &quot;Organize Your Life in Plain Text&quot; one," start="00:06:06.000" video="mainVideo" id=subtitle]]
+[[!template text="which I'm sure many of you must have stumbled upon" start="00:06:09.199" video="mainVideo" id=subtitle]]
+[[!template text="in your Emacs journey..." start="00:06:12.240" video="mainVideo" id=subtitle]]
+[[!template text="For me, when I stumbled upon this document," start="00:06:15.919" video="mainVideo" id=subtitle]]
+[[!template text="I was starting to get interested" start="00:06:20.307" video="mainVideo" id=subtitle]]
+[[!template text="in Getting Things Done and" start="00:06:22.488" video="mainVideo" id=subtitle]]
+[[!template text="all the nitty-gritty stuff about" start="00:06:24.240" video="mainVideo" id=subtitle]]
+[[!template text="organization and self-organization." start="00:06:26.560" video="mainVideo" id=subtitle]]
+[[!template text="It just felt like everything was under my fingertips" start="00:06:29.199" video="mainVideo" id=subtitle]]
+[[!template text="to make the perfect workflow." start="00:06:32.960" video="mainVideo" id=subtitle]]
+[[!template text="There was something incredibly satisfying about" start="00:06:36.960" video="mainVideo" id=subtitle]]
+[[!template text="having a system that gave you" start="00:06:44.080" video="mainVideo" id=subtitle]]
+[[!template text="so many options to configure your experience" start="00:06:45.834" video="mainVideo" id=subtitle]]
+[[!template text="exactly how you wanted." start="00:06:48.319" video="mainVideo" id=subtitle]]
+[[!template text="You had this feeling that" start="00:06:50.160" video="mainVideo" id=subtitle]]
+[[!template text="the people behind Org Mode had thought of everything," start="00:06:54.479" video="mainVideo" id=subtitle]]
+[[!template text="whichever small adjustment" start="00:06:57.599" video="mainVideo" id=subtitle]]
+[[!template text="that you needed in workflow" start="00:07:00.479" video="mainVideo" id=subtitle]]
+[[!template text="whether it be more states for your TODOs," start="00:07:02.000" video="mainVideo" id=subtitle]]
+[[!template text="whether it be, oh, I want my weeks to" start="00:07:05.440" video="mainVideo" id=subtitle]]
+[[!template text="start on Monday and not on Saturday," start="00:07:07.520" video="mainVideo" id=subtitle]]
+[[!template text="oh, it's half past one and I need to..." start="00:07:09.360" video="mainVideo" id=subtitle]]
+[[!template text="in the morning, I mean, and I need to make" start="00:07:13.520" video="mainVideo" id=subtitle]]
+[[!template text="sure that the item that I'm marking as done" start="00:07:15.280" video="mainVideo" id=subtitle]]
+[[!template text="is done for the day before" start="00:07:17.680" video="mainVideo" id=subtitle]]
+[[!template text="and not for the current day." start="00:07:18.759" video="mainVideo" id=subtitle]]
+[[!template text="You see what I'm talking about." start="00:07:20.233" video="mainVideo" id=subtitle]]
+[[!template text="So many details that were already" start="00:07:21.919" video="mainVideo" id=subtitle]]
+[[!template text="present in Org Mode." start="00:07:25.280" video="mainVideo" id=subtitle]]
+[[!template text="At first you're really impressed, because you think, wow," start="00:07:27.235" video="mainVideo" id=subtitle]]
+[[!template text="they thought of everything," start="00:07:31.335" video="mainVideo" id=subtitle]]
+[[!template text="but then you realize that it's just a matter of experience," start="00:07:33.470" video="mainVideo" id=subtitle]]
+[[!template text="just a matter of people contributing code," start="00:07:36.378" video="mainVideo" id=subtitle]]
+[[!template text="because the development of Org Mode, Emacs," start="00:07:39.712" video="mainVideo" id=subtitle]]
+[[!template text="and everything is just open to the public." start="00:07:42.171" video="mainVideo" id=subtitle]]
+[[!template new="1" text="You know, it's like" start="00:07:44.455" video="mainVideo" id=subtitle]]
+[[!template text="everything is being done with the garage door opened." start="00:07:45.440" video="mainVideo" id=subtitle]]
+[[!template text="You can just go on Org Mode on Savannah" start="00:07:47.685" video="mainVideo" id=subtitle]]
+[[!template text="and see everything that is being developed." start="00:07:50.402" video="mainVideo" id=subtitle]]
+[[!template text="For me, the shift that occurred in my mind was" start="00:07:54.800" video="mainVideo" id=subtitle]]
+[[!template text="when I was reading all the options," start="00:08:01.586" video="mainVideo" id=subtitle]]
+[[!template text="I was looking at all the variables" start="00:08:04.139" video="mainVideo" id=subtitle]]
+[[!template text="that I could modify for Org Mode," start="00:08:05.881" video="mainVideo" id=subtitle]]
+[[!template text="and there came a time, maybe two to three years ago," start="00:08:08.160" video="mainVideo" id=subtitle]]
+[[!template text="where I thought, oh wow," start="00:08:12.560" video="mainVideo" id=subtitle]]
+[[!template text="maybe for the first time in a while," start="00:08:15.599" video="mainVideo" id=subtitle]]
+[[!template text="there is no option for me to do" start="00:08:17.759" video="mainVideo" id=subtitle]]
+[[!template text="what I want to be doing with Org Mode." start="00:08:19.260" video="mainVideo" id=subtitle]]
+[[!template text="I believe at the time," start="00:08:21.440" video="mainVideo" id=subtitle]]
+[[!template text="the key issue that triggered this reflex for me was" start="00:08:23.668" video="mainVideo" id=subtitle]]
+[[!template text="I wanted to do something with the agenda." start="00:08:29.199" video="mainVideo" id=subtitle]]
+[[!template text="I wanted to have a super category so, you know, in the..." start="00:08:31.039" video="mainVideo" id=subtitle]]
+[[!template text="for those of you who know, in your agenda," start="00:08:34.159" video="mainVideo" id=subtitle]]
+[[!template text="you have the ability to have many files," start="00:08:36.606" video="mainVideo" id=subtitle]]
+[[!template text="and you have the ability to have categories." start="00:08:38.376" video="mainVideo" id=subtitle]]
+[[!template text="I wanted somehow to group my" start="00:08:41.200" video="mainVideo" id=subtitle]]
+[[!template text="TODOs in smaller groups, or bigger" start="00:08:47.920" video="mainVideo" id=subtitle]]
+[[!template text="groups, I should say," start="00:08:51.680" video="mainVideo" id=subtitle]]
+[[!template text="so that, for instance, I could have" start="00:08:52.560" video="mainVideo" id=subtitle]]
+[[!template text="one group for my professional life," start="00:08:53.780" video="mainVideo" id=subtitle]]
+[[!template text="I could have a group for one work," start="00:08:55.131" video="mainVideo" id=subtitle]]
+[[!template text="the second work..." start="00:08:57.462" video="mainVideo" id=subtitle]]
+[[!template text="I could have something for university and all this." start="00:08:59.600" video="mainVideo" id=subtitle]]
+[[!template text="I thought, yeah, I think I'd like this." start="00:09:02.800" video="mainVideo" id=subtitle]]
+[[!template text="After having spent so long working" start="00:09:09.600" video="mainVideo" id=subtitle]]
+[[!template text="with Emacs and working with Org Mode," start="00:09:12.959" video="mainVideo" id=subtitle]]
+[[!template text="I had some ideas about" start="00:09:15.519" video="mainVideo" id=subtitle]]
+[[!template text="what was within the realm of possibility and what wasn't." start="00:09:16.766" video="mainVideo" id=subtitle]]
+[[!template text="Here I thought to myself," start="00:09:19.292" video="mainVideo" id=subtitle]]
+[[!template text="this is definitely something that I can do." start="00:09:21.120" video="mainVideo" id=subtitle]]
+[[!template text="And so thus started my journey" start="00:09:24.320" video="mainVideo" id=subtitle]]
+[[!template text="into the Org Mode libraries." start="00:09:27.839" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I won't go too much into details right now," start="00:09:31.360" video="mainVideo" id=subtitle]]
+[[!template text="because right now, the main objective" start="00:09:33.222" video="mainVideo" id=subtitle]]
+[[!template text="that I have is just to show you" start="00:09:34.959" video="mainVideo" id=subtitle]]
+[[!template text="how simple it is to become a maintainer," start="00:09:37.040" video="mainVideo" id=subtitle]]
+[[!template text="how to become more involved with the development." start="00:09:40.240" video="mainVideo" id=subtitle]]
+[[!template text="The libraries in Org Mode," start="00:09:42.800" video="mainVideo" id=subtitle]]
+[[!template text="they're written in Elisp, which is a very..." start="00:09:46.320" video="mainVideo" id=subtitle]]
+[[!template text="It might seem like an obscure language," start="00:09:50.320" video="mainVideo" id=subtitle]]
+[[!template text="and it certainly is," start="00:09:52.080" video="mainVideo" id=subtitle]]
+[[!template text="but as soon as you get the logic of the language--and" start="00:09:54.080" video="mainVideo" id=subtitle]]
+[[!template text="what I'm telling you is coming from someone" start="00:09:57.279" video="mainVideo" id=subtitle]]
+[[!template text="who's never studied programming--" start="00:10:00.136" video="mainVideo" id=subtitle]]
+[[!template text="it made sense." start="00:10:01.760" video="mainVideo" id=subtitle]]
+[[!template text="Everything is so verbose" start="00:10:04.399" video="mainVideo" id=subtitle]]
+[[!template text="when you get into the code." start="00:10:05.534" video="mainVideo" id=subtitle]]
+[[!template text="When you learn the rudiments of Elisp," start="00:10:07.279" video="mainVideo" id=subtitle]]
+[[!template text="you start getting to the code," start="00:10:11.065" video="mainVideo" id=subtitle]]
+[[!template text="and you start thinking, wow," start="00:10:13.360" video="mainVideo" id=subtitle]]
+[[!template text="okay that makes sense," start="00:10:15.229" video="mainVideo" id=subtitle]]
+[[!template text="and you start developing a logic for all this." start="00:10:17.120" video="mainVideo" id=subtitle]]
+[[!template text="So, equipped as I was with this" start="00:10:21.360" video="mainVideo" id=subtitle]]
+[[!template text="new knowledge, I went on my project," start="00:10:24.720" video="mainVideo" id=subtitle]]
+[[!template text="I went into the Org agenda code," start="00:10:27.760" video="mainVideo" id=subtitle]]
+[[!template text="and I thought, okay," start="00:10:30.000" video="mainVideo" id=subtitle]]
+[[!template text="is there anything that I can use to do my bidding?" start="00:10:30.880" video="mainVideo" id=subtitle]]
+[[!template text="Fast forward maybe two to three weeks of intense turmoil" start="00:10:34.640" video="mainVideo" id=subtitle]]
+[[!template text="and many nights which were spent single-mindedly working on this project," start="00:10:39.733" video="mainVideo" id=subtitle]]
+[[!template text="two weeks after, I had something that was working," start="00:10:46.079" video="mainVideo" id=subtitle]]
+[[!template text="and I was pretty happy about it." start="00:10:48.781" video="mainVideo" id=subtitle]]
+[[!template text="That was a key landmark for me," start="00:10:51.680" video="mainVideo" id=subtitle]]
+[[!template text="because when that happened," start="00:10:54.849" video="mainVideo" id=subtitle]]
+[[!template text="it just felt like, okay," start="00:10:56.800" video="mainVideo" id=subtitle]]
+[[!template text="I can contribute something to Org Mode," start="00:10:58.860" video="mainVideo" id=subtitle]]
+[[!template text="and I can do something that would benefit as many people as possible." start="00:11:01.335" video="mainVideo" id=subtitle]]
+[[!template text="And to me, that was the click." start="00:11:07.600" video="mainVideo" id=subtitle]]
+[[!template text="That's when it occurred." start="00:11:08.970" video="mainVideo" id=subtitle]]
+[[!template text="That's when I went on my first project and I did something" start="00:11:10.530" video="mainVideo" id=subtitle]]
+[[!template text="that felt useful to the community." start="00:11:14.640" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And nowadays, as I told you," start="00:11:18.079" video="mainVideo" id=subtitle]]
+[[!template text="I maintain packages, but really, nothing has changed." start="00:11:19.945" video="mainVideo" id=subtitle]]
+[[!template text="The only thing, maybe, that has changed" start="00:11:22.640" video="mainVideo" id=subtitle]]
+[[!template text="is that I've turned my mind onto other problems." start="00:11:24.399" video="mainVideo" id=subtitle]]
+[[!template text="Maybe I've got three more minutes," start="00:11:28.320" video="mainVideo" id=subtitle]]
+[[!template text="and I'd like to finish by" start="00:11:32.000" video="mainVideo" id=subtitle]]
+[[!template text="maybe something a little different." start="00:11:35.279" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I've told you my Emacs story" start="00:11:38.399" video="mainVideo" id=subtitle]]
+[[!template text="and I hope I've stressed how little effort it took me" start="00:11:39.449" video="mainVideo" id=subtitle]]
+[[!template text="to move from steps to steps on the ladder." start="00:11:42.924" video="mainVideo" id=subtitle]]
+[[!template text="The ladder implies a sense of hierarchy, but it really isn't." start="00:11:46.560" video="mainVideo" id=subtitle]]
+[[!template text="Whatever your step on the journey of Emacs is..." start="00:11:48.959" video="mainVideo" id=subtitle]]
+[[!template text="Some of you might be at the step" start="00:11:53.920" video="mainVideo" id=subtitle]]
+[[!template text="where you're really worried" start="00:11:55.830" video="mainVideo" id=subtitle]]
+[[!template text="about learning Elisp because it feels" start="00:11:57.440" video="mainVideo" id=subtitle]]
+[[!template text="like such a monumental task to be undertaking" start="00:11:59.360" video="mainVideo" id=subtitle]]
+[[!template text="and you have no experience whatsoever," start="00:12:02.399" video="mainVideo" id=subtitle]]
+[[!template text="but the thing is," start="00:12:04.720" video="mainVideo" id=subtitle]]
+[[!template text="maybe you could try climbing this first" start="00:12:06.079" video="mainVideo" id=subtitle]]
+[[!template text="step on the ladder. Maybe you could try," start="00:12:07.839" video="mainVideo" id=subtitle]]
+[[!template text="if you have any project," start="00:12:09.600" video="mainVideo" id=subtitle]]
+[[!template text="if you've been using Org Mode," start="00:12:11.200" video="mainVideo" id=subtitle]]
+[[!template text="maybe one day you thought, &quot;oh, yes," start="00:12:13.120" video="mainVideo" id=subtitle]]
+[[!template text="I wish I could do this but I can't,&quot;" start="00:12:15.600" video="mainVideo" id=subtitle]]
+[[!template text="or maybe do try to do this," start="00:12:18.160" video="mainVideo" id=subtitle]]
+[[!template text="maybe do try to change something" start="00:12:19.920" video="mainVideo" id=subtitle]]
+[[!template text="in a major mode that you're using" start="00:12:21.442" video="mainVideo" id=subtitle]]
+[[!template text="and which you feel might be better." start="00:12:23.279" video="mainVideo" id=subtitle]]
+[[!template text="I think Emacs, Org Mode," start="00:12:26.560" video="mainVideo" id=subtitle]]
+[[!template text="and all free software in general" start="00:12:28.722" video="mainVideo" id=subtitle]]
+[[!template text="has this tendency to give you this idea" start="00:12:31.040" video="mainVideo" id=subtitle]]
+[[!template text="that I can be a hacker" start="00:12:34.720" video="mainVideo" id=subtitle]]
+[[!template text="in the sense of the term" start="00:12:38.720" video="mainVideo" id=subtitle]]
+[[!template text="that you're modifying things" start="00:12:41.360" video="mainVideo" id=subtitle]]
+[[!template text="to do your bidding." start="00:12:43.200" video="mainVideo" id=subtitle]]
+[[!template text="For me, I believe this to be" start="00:12:46.320" video="mainVideo" id=subtitle]]
+[[!template text="a very healthy attitude towards software." start="00:12:48.042" video="mainVideo" id=subtitle]]
+[[!template text="As Amin said in the very beginning," start="00:12:50.320" video="mainVideo" id=subtitle]]
+[[!template text="we are doing this entire presentation--" start="00:12:54.079" video="mainVideo" id=subtitle]]
+[[!template text="sorry, this entire conference with free software." start="00:12:57.279" video="mainVideo" id=subtitle]]
+[[!template text="Just see all the things" start="00:13:00.800" video="mainVideo" id=subtitle]]
+[[!template text="we've been able to do in free software." start="00:13:01.686" video="mainVideo" id=subtitle]]
+[[!template text="For me, Emacs was my gateway, so to speak," start="00:13:03.920" video="mainVideo" id=subtitle]]
+[[!template text="into how to contribute to free software," start="00:13:10.399" video="mainVideo" id=subtitle]]
+[[!template text="about the philosophy that surrounds it." start="00:13:14.399" video="mainVideo" id=subtitle]]
+[[!template new="1" text="What I would like to do..." start="00:13:18.639" video="mainVideo" id=subtitle]]
+[[!template text="I'll finish on this note and then" start="00:13:20.003" video="mainVideo" id=subtitle]]
+[[!template text="I'll be taking your questions." start="00:13:21.375" video="mainVideo" id=subtitle]]
+[[!template text="Just try." start="00:13:23.360" video="mainVideo" id=subtitle]]
+[[!template text="You've read on Reddit" start="00:13:26.480" video="mainVideo" id=subtitle]]
+[[!template text="that you need to go through the Elisp manual in Emacs." start="00:13:28.592" video="mainVideo" id=subtitle]]
+[[!template text="You might be scared, but just do it. Just give it a shot." start="00:13:31.807" video="mainVideo" id=subtitle]]
+[[!template text="Just give it maybe one afternoon." start="00:13:35.920" video="mainVideo" id=subtitle]]
+[[!template text="Try to read it." start="00:13:38.560" video="mainVideo" id=subtitle]]
+[[!template text="Try to see if this appeals to your mind." start="00:13:39.199" video="mainVideo" id=subtitle]]
+[[!template text="If you've been interested enough" start="00:13:43.120" video="mainVideo" id=subtitle]]
+[[!template text="in my presentation right now," start="00:13:44.230" video="mainVideo" id=subtitle]]
+[[!template text="and if you're interested enough in any of the talks" start="00:13:45.241" video="mainVideo" id=subtitle]]
+[[!template text="you're going to have during the entire conference," start="00:13:47.199" video="mainVideo" id=subtitle]]
+[[!template text="do give it a shot." start="00:13:49.519" video="mainVideo" id=subtitle]]
+[[!template text="I'm pretty sure you will like the journey" start="00:13:50.747" video="mainVideo" id=subtitle]]
+[[!template text="on which you will be embarking upon." start="00:13:52.959" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I believe I'm finishing one minute early," start="00:13:55.418" video="mainVideo" id=subtitle]]
+[[!template text="but I see quite a bit of questions already." start="00:13:57.120" video="mainVideo" id=subtitle]]
+[[!template text="I'm not sure. Sacha, should I" start="00:14:01.040" video="mainVideo" id=subtitle]]
+[[!template text="just be reading the questions," start="00:14:04.320" video="mainVideo" id=subtitle]]
+[[!template text="or do you want to be feeding me the questions?" start="00:14:05.847" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: It's really up to you." start="00:14:08.639" video="mainVideo" id=subtitle]]
+[[!template text="It's completely up to you." start="00:14:10.755" video="mainVideo" id=subtitle]]
+[[!template text="If you've got the questions" start="00:14:12.320" video="mainVideo" id=subtitle]]
+[[!template text="open and can take them or read them," start="00:14:13.600" video="mainVideo" id=subtitle]]
+[[!template text="by all means, please.)" start="00:14:15.839" video="mainVideo" id=subtitle]]
+[[!template text="Okay, well, I'm going to read them" start="00:14:18.320" video="mainVideo" id=subtitle]]
+[[!template text="because I've got them on the side." start="00:14:19.420" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to start with the one at the bottom." start="00:14:20.581" video="mainVideo" id=subtitle]]
+[[!template new="1" text="&quot;Do you feel that being a white male" start="00:14:22.800" video="mainVideo" id=subtitle]]
+[[!template text="contributed to your experience?&quot;" start="00:14:24.959" video="mainVideo" id=subtitle]]
+[[!template text="Yeah. I mean, I do believe..." start="00:14:26.959" video="mainVideo" id=subtitle]]
+[[!template text="There's an idea of privilege." start="00:14:29.165" video="mainVideo" id=subtitle]]
+[[!template text="I mean, I'm French. I live in..." start="00:14:30.771" video="mainVideo" id=subtitle]]
+[[!template text="I'm lucky enough to be here at university, okay," start="00:14:33.250" video="mainVideo" id=subtitle]]
+[[!template text="and I'm fairly aware of the discrepancies that happen," start="00:14:36.959" video="mainVideo" id=subtitle]]
+[[!template text="even in France," start="00:14:40.714" video="mainVideo" id=subtitle]]
+[[!template text="according to this..." start="00:14:41.600" video="mainVideo" id=subtitle]]
+[[!template text="So, yes, I believe my journey" start="00:14:42.880" video="mainVideo" id=subtitle]]
+[[!template text="was heavily influenced by this." start="00:14:46.320" video="mainVideo" id=subtitle]]
+[[!template text="If you would like to specify the question, please do," start="00:14:51.199" video="mainVideo" id=subtitle]]
+[[!template text="but I don't have really all that much to ask on this." start="00:14:53.547" video="mainVideo" id=subtitle]]
+[[!template new="1" text="&quot;What is your advice to start learning" start="00:14:56.560" video="mainVideo" id=subtitle]]
+[[!template text="Elisp language? Any particularly good" start="00:14:59.839" video="mainVideo" id=subtitle]]
+[[!template text="resource or any other tips?&quot;" start="00:15:01.279" video="mainVideo" id=subtitle]]
+[[!template text="I finished my presentation by telling you about" start="00:15:03.421" video="mainVideo" id=subtitle]]
+[[!template text="the Elisp introduction which is built into Emacs." start="00:15:07.760" video="mainVideo" id=subtitle]]
+[[!template text="What I might do... I'm going to share my screen" start="00:15:10.937" video="mainVideo" id=subtitle]]
+[[!template text="just to show you how this works." start="00:15:13.936" video="mainVideo" id=subtitle]]
+[[!template text="I will be sharing this window." start="00:15:17.819" video="mainVideo" id=subtitle]]
+[[!template text="I believe it's frozen on my end," start="00:15:22.880" video="mainVideo" id=subtitle]]
+[[!template text="so I can't see anything." start="00:15:24.234" video="mainVideo" id=subtitle]]
+[[!template text="I'm not sure if you can see me" start="00:15:27.199" video="mainVideo" id=subtitle]]
+[[!template text="or if my camera is moving." start="00:15:28.597" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so my Firefox is frozen." start="00:15:32.560" video="mainVideo" id=subtitle]]
+[[!template text="So I'll answer the question," start="00:15:34.387" video="mainVideo" id=subtitle]]
+[[!template text="but I won't be able to show you what I wanted to show you." start="00:15:35.361" video="mainVideo" id=subtitle]]
+[[!template text="There's a built-in guide inside Emacs to learn Elisp." start="00:15:40.000" video="mainVideo" id=subtitle]]
+[[!template text="Maybe the best chance that you have" start="00:15:44.320" video="mainVideo" id=subtitle]]
+[[!template text="is just to go open these info pages." start="00:15:46.880" video="mainVideo" id=subtitle]]
+[[!template text="I'm sure someone will be kind enough to" start="00:15:49.040" video="mainVideo" id=subtitle]]
+[[!template text="mention this to you in the #emacsconf channel on IRC" start="00:15:50.959" video="mainVideo" id=subtitle]]
+[[!template text="but it's probably the best way" start="00:15:54.880" video="mainVideo" id=subtitle]]
+[[!template text="to get started with Elisp." start="00:15:56.880" video="mainVideo" id=subtitle]]
+[[!template text="You know, we tend to get obsessed," start="00:15:59.040" video="mainVideo" id=subtitle]]
+[[!template text="with software and with programming," start="00:16:00.991" video="mainVideo" id=subtitle]]
+[[!template text="about what's the best way to get started." start="00:16:03.013" video="mainVideo" id=subtitle]]
+[[!template text="You see so many people who are heavily interested" start="00:16:04.880" video="mainVideo" id=subtitle]]
+[[!template text="in getting started with programming" start="00:16:08.399" video="mainVideo" id=subtitle]]
+[[!template text="but they never managed to get started" start="00:16:10.409" video="mainVideo" id=subtitle]]
+[[!template text="because there's so much choice." start="00:16:12.320" video="mainVideo" id=subtitle]]
+[[!template text="My advice would be to just get started." start="00:16:14.320" video="mainVideo" id=subtitle]]
+[[!template text="Don't get so worried about the first step." start="00:16:16.320" video="mainVideo" id=subtitle]]
+[[!template text="Well, if I may still recommend the first step," start="00:16:18.800" video="mainVideo" id=subtitle]]
+[[!template text="even after saying this," start="00:16:22.493" video="mainVideo" id=subtitle]]
+[[!template text="do try to start with the built-in guides." start="00:16:23.920" video="mainVideo" id=subtitle]]
+[[!template text="I believe they're pretty, pretty good." start="00:16:27.073" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There was another question." start="00:16:29.600" video="mainVideo" id=subtitle]]
+[[!template text="It's the last question that I can read" start="00:16:31.691" video="mainVideo" id=subtitle]]
+[[!template text="and after that, you will have to" start="00:16:33.055" video="mainVideo" id=subtitle]]
+[[!template text="read the questions for me because everything is frozen on my end." start="00:16:34.564" video="mainVideo" id=subtitle]]
+[[!template text="I hope I'm not frozen in a very bad position," start="00:16:37.920" video="mainVideo" id=subtitle]]
+[[!template text="so please excuse me if my mouth is open or anything." start="00:16:43.935" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: no, we just completely lost the video feed, so no worries.)" start="00:16:47.406" video="mainVideo" id=subtitle]]
+[[!template text="Oh, splendid, so I won't have to make a fool out of myself." start="00:16:51.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So the last question I wanted to answer was" start="00:16:54.800" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Have you read Dirk Gently's Holistic Detective Agency?&quot;" start="00:16:56.800" video="mainVideo" id=subtitle]]
+[[!template text="No, I haven't. I hope it's not a jab at the way I'm dressing for the conference," start="00:16:59.199" video="mainVideo" id=subtitle]]
+[[!template text="but yeah, I haven't read it. Was there any other question?" start="00:17:05.741" video="mainVideo" id=subtitle]]
+[[!template new="1" text="(Amin: I see one other question." start="00:17:10.559" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Any recommendation for good packaging guides or places to start?" start="00:17:15.919" video="mainVideo" id=subtitle]]
+[[!template text="I get a bit overwhelmed by some things." start="00:17:19.679" video="mainVideo" id=subtitle]]
+[[!template text="For example, the choice of different test frameworks.&quot;)" start="00:17:23.199" video="mainVideo" id=subtitle]]
+[[!template text="Right. Okay. So that's a very good question." start="00:17:26.799" video="mainVideo" id=subtitle]]
+[[!template text="I believe alphapapa is in the chat right now." start="00:17:29.263" video="mainVideo" id=subtitle]]
+[[!template text="As myself a new Lisp developer for org-roam," start="00:17:33.840" video="mainVideo" id=subtitle]]
+[[!template text="I'd really recommend you to look into" start="00:17:36.314" video="mainVideo" id=subtitle]]
+[[!template text="his package developers' guide," start="00:17:38.320" video="mainVideo" id=subtitle]]
+[[!template text="because you have a list of all the softwares" start="00:17:40.032" video="mainVideo" id=subtitle]]
+[[!template text="that are extremely useful to be using when" start="00:17:42.507" video="mainVideo" id=subtitle]]
+[[!template text="you're getting started." start="00:17:44.559" video="mainVideo" id=subtitle]]
+[[!template text="If you're looking into a first step" start="00:17:45.760" video="mainVideo" id=subtitle]]
+[[!template text="for how to develop elisp packages," start="00:17:48.347" video="mainVideo" id=subtitle]]
+[[!template text="I'd really advise you to" start="00:17:50.947" video="mainVideo" id=subtitle]]
+[[!template text="look into edebug." start="00:17:52.640" video="mainVideo" id=subtitle]]
+[[!template text="It's one word, edebug," start="00:17:53.520" video="mainVideo" id=subtitle]]
+[[!template text="and you have a section in the manual for this," start="00:17:56.559" video="mainVideo" id=subtitle]]
+[[!template text="because for me, it was the key step to" start="00:17:58.400" video="mainVideo" id=subtitle]]
+[[!template text="getting to develop good packages." start="00:18:00.799" video="mainVideo" id=subtitle]]
+[[!template text="It was understanding basically what the code did" start="00:18:03.791" video="mainVideo" id=subtitle]]
+[[!template text="and having us something like" start="00:18:06.160" video="mainVideo" id=subtitle]]
+[[!template text="a REPL (read-evaluate-print-loop)" start="00:18:08.866" video="mainVideo" id=subtitle]]
+[[!template text="that allows you to step through the code" start="00:18:09.919" video="mainVideo" id=subtitle]]
+[[!template text="and see exactly which states" start="00:18:11.760" video="mainVideo" id=subtitle]]
+[[!template text="the variables are at which at this point" start="00:18:13.210" video="mainVideo" id=subtitle]]
+[[!template text="in the program. That's really my biggest advice to you." start="00:18:15.643" video="mainVideo" id=subtitle]]
+[[!template text="Any other question? Thanks. Yeah, I see one or two more." start="00:18:21.200" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So there's one. They ask, &quot;How did the freedom of Emacs help you on your way?&quot;" start="00:18:26.160" video="mainVideo" id=subtitle]]
+[[!template text="So the freedom of Emacs..." start="00:18:33.120" video="mainVideo" id=subtitle]]
+[[!template text="I mentioned that Emacs, for me, was my gateway" start="00:18:35.507" video="mainVideo" id=subtitle]]
+[[!template text="into free software" start="00:18:38.080" video="mainVideo" id=subtitle]]
+[[!template text="and the freedom of Emacs" start="00:18:39.216" video="mainVideo" id=subtitle]]
+[[!template text="was that you could maybe..." start="00:18:40.652" video="mainVideo" id=subtitle]]
+[[!template text="First and foremost," start="00:18:42.551" video="mainVideo" id=subtitle]]
+[[!template text="compared to other software," start="00:18:43.840" video="mainVideo" id=subtitle]]
+[[!template text="was that you had behind Emacs, Elisp," start="00:18:46.385" video="mainVideo" id=subtitle]]
+[[!template text="which allows you to read the code," start="00:18:49.003" video="mainVideo" id=subtitle]]
+[[!template text="read whatever is going on in the background." start="00:18:51.039" video="mainVideo" id=subtitle]]
+[[!template text="Surely, if you go deep enough," start="00:18:53.039" video="mainVideo" id=subtitle]]
+[[!template text="you'll end up in C functions that you might not be able to read" start="00:18:54.380" video="mainVideo" id=subtitle]]
+[[!template text="if you do not have the experience." start="00:18:58.172" video="mainVideo" id=subtitle]]
+[[!template text="But for Org Mode, which was my gateway into Emacs," start="00:18:59.679" video="mainVideo" id=subtitle]]
+[[!template text="most of it is written in Elisp," start="00:19:03.520" video="mainVideo" id=subtitle]]
+[[!template text="and all the commands have a very verbose name," start="00:19:05.883" video="mainVideo" id=subtitle]]
+[[!template text="like something simple as" start="00:19:08.546" video="mainVideo" id=subtitle]]
+[[!template text="org go to next subtree or" start="00:19:10.080" video="mainVideo" id=subtitle]]
+[[!template text="org go to a parent subtree. You know, things like this." start="00:19:13.440" video="mainVideo" id=subtitle]]
+[[!template text="It's so elegant. It's verbose." start="00:19:16.880" video="mainVideo" id=subtitle]]
+[[!template text="That's a sense of freedom" start="00:19:20.240" video="mainVideo" id=subtitle]]
+[[!template text="insofar as you can go into the code and see," start="00:19:22.799" video="mainVideo" id=subtitle]]
+[[!template text="oh, okay, that's how it's implemented." start="00:19:24.491" video="mainVideo" id=subtitle]]
+[[!template text="I believe in a way that's the freedom" start="00:19:26.160" video="mainVideo" id=subtitle]]
+[[!template text="and the liberty that is given to you" start="00:19:28.640" video="mainVideo" id=subtitle]]
+[[!template text="to look into the code" start="00:19:30.264" video="mainVideo" id=subtitle]]
+[[!template text="is something that invites you" start="00:19:31.600" video="mainVideo" id=subtitle]]
+[[!template text="to do the same with your life." start="00:19:32.670" video="mainVideo" id=subtitle]]
+[[!template text="As someone who does a little bit of philosophy on the side," start="00:19:34.460" video="mainVideo" id=subtitle]]
+[[!template text="I believe it's a very healthy message" start="00:19:36.776" video="mainVideo" id=subtitle]]
+[[!template text="to be gathering from a piece of software." start="00:19:38.799" video="mainVideo" id=subtitle]]
+[[!template new="1" text="(Amin: Awesome, thank you." start="00:19:42.320" video="mainVideo" id=subtitle]]
+[[!template text="Let's see... So we have..." start="00:19:45.440" video="mainVideo" id=subtitle]]
+[[!template text="I think I saw another question pop up.)" start="00:19:50.960" video="mainVideo" id=subtitle]]
+[[!template text="I'm not sure how we're doing as far" start="00:19:57.200" video="mainVideo" id=subtitle]]
+[[!template text="as time is concerned... I believe we" start="00:19:58.559" video="mainVideo" id=subtitle]]
+[[!template text="have like one or two minutes more." start="00:19:59.760" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: Yeah, actually, we're quite a bit" start="00:20:02.080" video="mainVideo" id=subtitle]]
+[[!template text="ahead of the schedule, so if we take a" start="00:20:04.240" video="mainVideo" id=subtitle]]
+[[!template text="little bit longer, we're fine." start="00:20:05.679" video="mainVideo" id=subtitle]]
+[[!template text="If you do have more questions, please do.)" start="00:20:07.840" video="mainVideo" id=subtitle]]
+[[!template text="I'm just sorry that my video is not working anymore." start="00:20:10.225" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: No problem. Someone was actually saying..." start="00:20:12.880" video="mainVideo" id=subtitle]]
+[[!template text="What's the most recent... Actually, yeah well before that." start="00:20:17.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="&quot;Please show off your three-piece suit before you end your talk," start="00:20:24.159" video="mainVideo" id=subtitle]]
+[[!template text="which requires fixing your frozen camera." start="00:20:27.440" video="mainVideo" id=subtitle]]
+[[!template text="If this is not possible," start="00:20:30.080" video="mainVideo" id=subtitle]]
+[[!template text="please post suit selfies in an easily accessible location.&quot;" start="00:20:31.306" video="mainVideo" id=subtitle]]
+[[!template text="Okay, I'll make sure to do this." start="00:20:36.240" video="mainVideo" id=subtitle]]
+[[!template text="But yes, I wanted to hype things up for the conference," start="00:20:38.143" video="mainVideo" id=subtitle]]
+[[!template text="so yes, I did get the three-piece suit out." start="00:20:41.200" video="mainVideo" id=subtitle]]
+[[!template text="I'm very glad you like it." start="00:20:43.039" video="mainVideo" id=subtitle]]
+[[!template text="By the way, when you get" start="00:20:44.563" video="mainVideo" id=subtitle]]
+[[!template text="a chance to see me live again," start="00:20:45.919" video="mainVideo" id=subtitle]]
+[[!template text="do appreciate that my tie has both the" start="00:20:47.760" video="mainVideo" id=subtitle]]
+[[!template text="colors of Emacs purple" start="00:20:50.080" video="mainVideo" id=subtitle]]
+[[!template text="and also Org Mode green." start="00:20:51.280" video="mainVideo" id=subtitle]]
+[[!template text="It took me a while to find this one," start="00:20:53.679" video="mainVideo" id=subtitle]]
+[[!template text="so I hope you will appreciate this." start="00:20:55.556" video="mainVideo" id=subtitle]]
+[[!template new="1" text="(Amin: Awesome. Let's see." start="00:21:00.840" video="mainVideo" id=subtitle]]
+[[!template text="We have one other question. &quot;What's the" start="00:21:03.094" video="mainVideo" id=subtitle]]
+[[!template text="most recent Emacs package or tool that" start="00:21:06.880" video="mainVideo" id=subtitle]]
+[[!template text="you've discovered that you've added to your repertoire?&quot;)" start="00:21:08.960" video="mainVideo" id=subtitle]]
+[[!template text="Very interesting question." start="00:21:14.480" video="mainVideo" id=subtitle]]
+[[!template text="The thing is, when you've spent as long as I have on Emacs--" start="00:21:17.600" video="mainVideo" id=subtitle]]
+[[!template text="and I know that I've only spent" start="00:21:22.614" video="mainVideo" id=subtitle]]
+[[!template text="eight years and some of you" start="00:21:23.919" video="mainVideo" id=subtitle]]
+[[!template text="might have spent maybe 10, 20," start="00:21:25.120" video="mainVideo" id=subtitle]]
+[[!template text="maybe even more years on Emacs--" start="00:21:27.901" video="mainVideo" id=subtitle]]
+[[!template text="but for me, I believe the coolest neat trick that I found in Emacs" start="00:21:30.000" video="mainVideo" id=subtitle]]
+[[!template text="was a mode which is called beacon-mode." start="00:21:34.926" video="mainVideo" id=subtitle]]
+[[!template text="It's something that allows you to show" start="00:21:40.080" video="mainVideo" id=subtitle]]
+[[!template text="when you're jumping between buffers" start="00:21:43.679" video="mainVideo" id=subtitle]]
+[[!template text="or when you're dropping between windows," start="00:21:45.006" video="mainVideo" id=subtitle]]
+[[!template text="it shows exactly where your point is in that buffer" start="00:21:46.960" video="mainVideo" id=subtitle]]
+[[!template text="by making a slight ray of light which looks like a beacon, hence the name." start="00:21:50.681" video="mainVideo" id=subtitle]]
+[[!template text="It really helps you navigate buffers" start="00:21:55.440" video="mainVideo" id=subtitle]]
+[[!template text="because it always shows" start="00:21:57.760" video="mainVideo" id=subtitle]]
+[[!template text="in a very visual way where your point is." start="00:21:58.986" video="mainVideo" id=subtitle]]
+[[!template text="I'll get a chance to show this to you later today" start="00:22:01.760" video="mainVideo" id=subtitle]]
+[[!template text="when I'll be presenting my other talks." start="00:22:04.640" video="mainVideo" id=subtitle]]
+[[!template new="1" text="(Amin: Awesome. We have one question from Jonas, the maintainer of Magit." start="00:22:10.159" video="mainVideo" id=subtitle]]
+[[!template text="He asks, &quot;When you touched your webcam," start="00:22:20.880" video="mainVideo" id=subtitle]]
+[[!template text="that blew a fuse at my place." start="00:22:25.128" video="mainVideo" id=subtitle]]
+[[!template text="How did you do that?&quot;)" start="00:22:26.880" video="mainVideo" id=subtitle]]
+[[!template text="Well, I'm very sorry, Jonas," start="00:22:29.760" video="mainVideo" id=subtitle]]
+[[!template text="that it happened to you, but I'll make sure not to touch my webcam again." start="00:22:31.242" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: Do we have any other questions?)" start="00:22:36.960" video="mainVideo" id=subtitle]]
+[[!template text="I have to trust you on this one." start="00:22:41.600" video="mainVideo" id=subtitle]]
+[[!template text="I'm really sorry. Everything is frozen on my end." start="00:22:43.919" video="mainVideo" id=subtitle]]
+[[!template new="1" text="(Amin: No problem.) Yeah I'm more talking to the audience, I guess." start="00:22:46.960" video="mainVideo" id=subtitle]]
+[[!template text="I hope my lack of slides didn't bother you." start="00:22:51.520" video="mainVideo" id=subtitle]]
+[[!template text="I really wanted to have this verbose time with people," start="00:22:56.018" video="mainVideo" id=subtitle]]
+[[!template text="to be able to..." start="00:23:00.481" video="mainVideo" id=subtitle]]
+[[!template text="It's a message that I've been trying" start="00:23:01.600" video="mainVideo" id=subtitle]]
+[[!template text="to share with as many people as possible." start="00:23:04.880" video="mainVideo" id=subtitle]]
+[[!template text="In France, we do have an Emacs workshop" start="00:23:08.640" video="mainVideo" id=subtitle]]
+[[!template text="that we have on a monthly basis." start="00:23:11.760" video="mainVideo" id=subtitle]]
+[[!template text="I've been learning a lot" start="00:23:14.159" video="mainVideo" id=subtitle]]
+[[!template text="with those people and I felt like" start="00:23:16.000" video="mainVideo" id=subtitle]]
+[[!template text="doing the same with Emacs conference" start="00:23:18.960" video="mainVideo" id=subtitle]]
+[[!template text="would be good. That's why I'm really happy," start="00:23:20.400" video="mainVideo" id=subtitle]]
+[[!template text="and I'm really lucky to have had" start="00:23:22.713" video="mainVideo" id=subtitle]]
+[[!template text="the chance to do this today." start="00:23:24.000" video="mainVideo" id=subtitle]]
+[[!template text="I hope some of you, I've convinced you" start="00:23:26.418" video="mainVideo" id=subtitle]]
+[[!template text="of climbing up a step on a ladder" start="00:23:29.200" video="mainVideo" id=subtitle]]
+[[!template text="or making a step in a journey." start="00:23:31.472" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: Absolutely. Thank you so much, Leo." start="00:23:34.480" video="mainVideo" id=subtitle]]
+[[!template text="I happen to completely agree" start="00:23:38.080" video="mainVideo" id=subtitle]]
+[[!template text="with your not necessarily using a slide" start="00:23:41.279" video="mainVideo" id=subtitle]]
+[[!template text="when it's not really needed" start="00:23:43.600" video="mainVideo" id=subtitle]]
+[[!template text="and to help give some face-to-face time" start="00:23:45.600" video="mainVideo" id=subtitle]]
+[[!template text="with the audience." start="00:23:49.200" video="mainVideo" id=subtitle]]
+[[!template text="Unfortunately, your webcam cut out," start="00:23:50.685" video="mainVideo" id=subtitle]]
+[[!template text="but I mean before that.)" start="00:23:52.923" video="mainVideo" id=subtitle]]
+[[!template text="Yes, I'll make sure to fix the problems later on," start="00:23:55.200" video="mainVideo" id=subtitle]]
+[[!template text="so don't worry about it." start="00:23:57.914" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: Awesome. Alrighty. I guess we're" start="00:23:59.679" video="mainVideo" id=subtitle]]
+[[!template text="wrapping up for your talk and getting ready for the next talk.)" start="00:24:02.240" video="mainVideo" id=subtitle]]
+[[!template text="Sure. Well, thank you so much." start="00:24:08.000" video="mainVideo" id=subtitle]]
+[[!template text="I'll see you all later, I suppose!" start="00:24:09.538" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: Sounds good. Thank you again, Leo. Bye-bye)" start="00:24:11.760" video="mainVideo" id=subtitle]]
diff --git a/2020/info/03.md b/2020/info/03.md
index 07ae6b4f..db3be888 100644
--- a/2020/info/03.md
+++ b/2020/info/03.md
@@ -2,10 +2,13 @@
Bala Ramadurai
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.webm" subtitles="/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt"]]
-[Download compressed .webm video (8.1M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (17.3M)](https://media.emacsconf.org/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai--compressed32.webm)
+[Download compressed .webm video (8.1M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai--vp9-q56-video-original-audio.webm)
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm" download="Download Q&A .webm video, 720p"]]
-[Download compressed Q&A .webm video (10.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai--vp9-q56-video-original-audio.webm)
+[[!template id=vid vidid="qnaVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm" download="Download Q&A .webm video, 720p" subtitles="/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt"]]
+[Download compressed Q&A .webm video (22.4M)](https://media.emacsconf.org/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai--compressed32.webm)
+[Download compressed Q&A .webm video (10.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript-questions)
You want to write a novel, but you don't know how to create an
outline. You have a seed idea for a novel, and you intend to expand
@@ -99,3 +102,151 @@ We will use:
- Uses pandoc to export from org
- Author of Karmic Design Thinking (<https://dt.balaramadurai.net/>)
- Uses Spacemacs
+
+<a name="transcript-questions"></a>
+# Transcript (questions)
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:00:00.000" text="I have the pad open. So, I can start."]]
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:00:05.333" text="Do you have occasions to use Emacs for multilingual text composition?"]]
+[[!template id=subtitle video="qnaVideo" start="00:00:11.333" text="How do you deal with spell-checking?"]]
+[[!template id=subtitle video="qnaVideo" start="00:00:15.333" text="I have written only in English. For English, Emacs works great."]]
+[[!template id=subtitle video="qnaVideo" start="00:00:15.333" text="Spell-check works great."]]
+[[!template id=subtitle video="qnaVideo" start="00:00:23.767" text="I have not used it for any other languages."]]
+[[!template id=subtitle video="qnaVideo" start="00:00:29.300" text="I have indeed tried local South Indian language, but only the script"]]
+[[!template id=subtitle video="qnaVideo" start="00:00:40.333" text="I could get, but not the spell-checker, really. I've not really figured it out."]]
+[[!template id=subtitle video="qnaVideo" start="00:00:47.567" text="So that was my trial to answer the first question."]]
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:00:51.067" text="The second question is: &quot;is it possible to align the subcolumns"]]
+[[!template id=subtitle video="qnaVideo" start="00:00:57.031" text="and headings and subheadings?&quot;"]]
+[[!template id=subtitle video="qnaVideo" start="00:00:59.967" text="Oh boy. That's a good one. I actually felt the lack of having the..."]]
+[[!template id=subtitle video="qnaVideo" start="00:01:04.967" text="The theme I had was great for... It looked like a novel"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:11.100" text="when I'm typing on the novel itself,"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:14.533" text="but when I expand into the subtrees,"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:19.800" text="it sort of goes haywire. It's a bit hacky."]]
+[[!template id=subtitle video="qnaVideo" start="00:01:22.233" text="You can probably switch to a monospace font,"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:24.900" text="and that works better than"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:27.133" text="the font that I have demoed it."]]
+[[!template id=subtitle video="qnaVideo" start="00:01:30.967" text="You can perhaps try monospace font"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:36.033" text="and it should work, I think,"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:37.700" text="as far as I know."]]
+[[!template id=subtitle video="qnaVideo" start="00:01:39.600" text="So, that's the second question."]]
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:01:42.667" text="The third question is maybe there should be an Emacs for Writing"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:47.600" text="mailing list, an online writer's workshop?"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:50.433" text="This is a great one."]]
+[[!template id=subtitle video="qnaVideo" start="00:01:51.300" text="I have conducted an online writer's workshop"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:54.433" text="here in India. Of course, it wasn't"]]
+[[!template id=subtitle video="qnaVideo" start="00:01:58.000" text="an Emacs-focused workshop. We used Notion as the tool. It worked pretty good."]]
+[[!template id=subtitle video="qnaVideo" start="00:02:05.467" text="for people who are not aware of Emacs and how to use Emacs, the keystrokes,"]]
+[[!template id=subtitle video="qnaVideo" start="00:02:12.633" text="the fact that I wasn't using the mouse unnerved them."]]
+[[!template id=subtitle video="qnaVideo" start="00:02:16.200" text="It was a scary experience for most people."]]
+[[!template id=subtitle video="qnaVideo" start="00:02:19.267" text="I had to switch to Notion."]]
+[[!template id=subtitle video="qnaVideo" start="00:02:22.333" text="People used that as a template"]]
+[[!template id=subtitle video="qnaVideo" start="00:02:23.567" text="and then they could type it out."]]
+[[!template id=subtitle video="qnaVideo" start="00:02:28.233" text="It wasn't my perfect experience. I liked the Emacs Org Mode experience much better."]]
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:02:33.633" text="The next question is, &quot;How do you share drafts of your novel?"]]
+[[!template id=subtitle video="qnaVideo" start="00:02:41.300" text="If you use pandoc to export to Word, etc., how do you incorporate feedback"]]
+[[!template id=subtitle video="qnaVideo" start="00:02:44.867" text="on the document back into Org?&quot;"]]
+[[!template id=subtitle video="qnaVideo" start="00:02:46.867" text="Thank you for the kind words."]]
+[[!template id=subtitle video="qnaVideo" start="00:02:50.767" text="Yes, it is a problem."]]
+[[!template id=subtitle video="qnaVideo" start="00:02:53.100" text="This is my ??, and I have a dedication to Spacemacs also and the Emacs Org Mode"]]
+[[!template id=subtitle video="qnaVideo" start="00:03:02.033" text="community in there. I don't know if you can see it."]]
+[[!template id=subtitle video="qnaVideo" start="00:03:04.433" text="Probably not."]]
+[[!template id=subtitle video="qnaVideo" start="00:03:05.467" text="I did export it to Word."]]
+[[!template id=subtitle video="qnaVideo" start="00:03:10.600" text="My editor did complain that there were a whole bunch of things,"]]
+[[!template id=subtitle video="qnaVideo" start="00:03:13.333" text="that it wasn't convenient for her."]]
+[[!template id=subtitle video="qnaVideo" start="00:03:16.633" text="So I tried having the raw Org Mode itself in a DOC embedded,"]]
+[[!template id=subtitle video="qnaVideo" start="00:03:20.933" text="and I will do a copy and paste."]]
+[[!template id=subtitle video="qnaVideo" start="00:03:26.067" text="Didn't work so well either."]]
+[[!template id=subtitle video="qnaVideo" start="00:03:27.867" text="So I'm still on the edge on how do I do this."]]
+[[!template id=subtitle video="qnaVideo" start="00:03:31.267" text="Should I train my editor to use Org Mode"]]
+[[!template id=subtitle video="qnaVideo" start="00:03:34.933" text="in Gitlab or one of those"]]
+[[!template id=subtitle video="qnaVideo" start="00:03:37.167" text="other tools, which is not a great experience?"]]
+[[!template id=subtitle video="qnaVideo" start="00:03:39.833" text="But... I don't know. It could be tricky for working with people"]]
+[[!template id=subtitle video="qnaVideo" start="00:03:47.633" text="who are not well-versed with Emacs."]]
+[[!template id=subtitle video="qnaVideo" start="00:03:50.867" text="Pandoc is very, very useful in converting it to PDF"]]
+[[!template id=subtitle video="qnaVideo" start="00:04:02.000" text="and integrating it with LaTeX, the styling, formatting into e-reader,"]]
+[[!template id=subtitle video="qnaVideo" start="00:04:02.000" text="EPUB format. For all that, Pandoc works great. You can customize it"]]
+[[!template id=subtitle video="qnaVideo" start="00:04:13.133" text="and of course there's a lot of support in the community"]]
+[[!template id=subtitle video="qnaVideo" start="00:04:16.233" text="for any style changes that you want to make, any images that you want to add."]]
+[[!template id=subtitle video="qnaVideo" start="00:04:20.133" text="It works great."]]
+[[!template id=subtitle video="qnaVideo" start="00:04:22.967" text="That was my trial to answer the pandoc question."]]
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:04:28.367" text="&quot;Can you show exported PDF of any of your novels?&quot;"]]
+[[!template id=subtitle video="qnaVideo" start="00:04:35.100" text="Unfortunately, it's still not published, so I'm..."]]
+[[!template id=subtitle video="qnaVideo" start="00:04:38.600" text="I will put it and share it on the community,"]]
+[[!template id=subtitle video="qnaVideo" start="00:04:42.067" text="or part of this in the schedule itself. Thank you for the question."]]
+[[!template id=subtitle video="qnaVideo" start="00:04:48.067" text="Unfortunately, it's not yet published, so I'm unable to publish the exported PDF."]]
+[[!template id=subtitle video="qnaVideo" start="00:04:55.000" text="But I'll make a test of an open-source novel that I'm working on"]]
+[[!template id=subtitle video="qnaVideo" start="00:05:01.300" text="I will definitely publish that so that you can see"]]
+[[!template id=subtitle video="qnaVideo" start="00:05:05.767" text="how it works also."]]
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:05:10.433" text="Can you text-wrap in the columns?"]]
+[[!template id=subtitle video="qnaVideo" start="00:05:13.167" text="I have not found a way to do text-wrap in the columns."]]
+[[!template id=subtitle video="qnaVideo" start="00:05:19.667" text="That only shows my limitation in config setup,"]]
+[[!template id=subtitle video="qnaVideo" start="00:05:23.633" text="but I'm sure people can figure this out"]]
+[[!template id=subtitle video="qnaVideo" start="00:05:27.033" text="That's a good one. I would have loved to have it."]]
+[[!template id=subtitle video="qnaVideo" start="00:05:29.900" text="Every time I want to write more on the headline,"]]
+[[!template id=subtitle video="qnaVideo" start="00:05:34.000" text="I would get out of the column-view mode and I would do the typing and expand it,"]]
+[[!template id=subtitle video="qnaVideo" start="00:05:42.467" text="and then come back into the column view when I want to set the other meta parameters."]]
+[[!template id=subtitle video="qnaVideo" start="00:05:46.700" text="So that's how I manage without the text-wrapping feature built into column."]]
+[[!template id=subtitle video="qnaVideo" start="00:05:54.133" text="But I think it's a great idea to have text wrap."]]
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:05:58.000" text="Did I leave out any questions? I don't think so."]]
+[[!template id=subtitle video="qnaVideo" start="00:06:05.333" text="Amin: I think there's at least one question on IRC,"]]
+[[!template id=subtitle video="qnaVideo" start="00:06:10.600" text="which I shall read to you."]]
+[[!template id=subtitle video="qnaVideo" start="00:06:14.500" text="Bala: Please, can you do that? Thank you."]]
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:06:17.300" text="Amin: So they asked, &quot;How do you collaborate with others while writing your novel?"]]
+[[!template id=subtitle video="qnaVideo" start="00:06:21.278" text="For example, sharing your file and getting feedback.&quot;"]]
+[[!template id=subtitle video="qnaVideo" start="00:06:28.100" text="Okay. Good question. So far, I have used... Let's see..."]]
+[[!template id=subtitle video="qnaVideo" start="00:06:37.100" text="What did I use... This is a crazy hack."]]
+[[!template id=subtitle video="qnaVideo" start="00:06:40.833" text="But it's a long-winded way of..."]]
+[[!template id=subtitle video="qnaVideo" start="00:06:44.667" text="Right now we're working on an e-book for sustainability"]]
+[[!template id=subtitle video="qnaVideo" start="00:06:50.300" text="and kids contribute their stories into this long Org Mode file"]]
+[[!template id=subtitle video="qnaVideo" start="00:06:57.767" text="and I want my editors to see it"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:00.233" text="so what we have done, actually, is with the tags and all that, I have actually"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:05.333" text="pasted it into Google Docs"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:08.167" text="so that my collaborators and"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:11.833" text="editors can see it."]]
+[[!template id=subtitle video="qnaVideo" start="00:07:14.000" text="That's my current solution. It's not elegant."]]
+[[!template id=subtitle video="qnaVideo" start="00:07:16.667" text="I'm trying to see if I can use Python code to make the copy and paste work,"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:23.900" text="but it's not so elegant for now."]]
+[[!template id=subtitle video="qnaVideo" start="00:07:26.900" text="I don't know how to work this out,"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:28.933" text="but this is my hack. That is,"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:31.100" text="the entire Org Mode text, I would paste it into"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:34.300" text="Google Docs"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:35.433" text="so that my collaborators and editors"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:37.700" text="can see it. Whenever they edit it, I ask them not to make any changes"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:41.667" text="to the Org Mode tags."]]
+[[!template id=subtitle video="qnaVideo" start="00:07:43.500" text="So just copy the entire text"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:45.633" text="and put it back into my Org Mode file"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:51.167" text="and export it using Pandoc into a PDF"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:53.300" text="and since it's synced to Google Drive"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:56.000" text="it shows up in the Google Drive"]]
+[[!template id=subtitle video="qnaVideo" start="00:07:58.600" text="and then the collaborators can see the PDF/EPUB"]]
+[[!template id=subtitle video="qnaVideo" start="00:08:03.633" text="if they want to open it up"]]
+[[!template id=subtitle video="qnaVideo" start="00:08:05.333" text="in their own space."]]
+[[!template id=subtitle video="qnaVideo" start="00:08:06.200" text="It's very very hacky and I think primitive, Stone Age sort of solution."]]
+[[!template id=subtitle video="qnaVideo" start="00:08:11.467" text="I did see a Python solution."]]
+[[!template id=subtitle video="qnaVideo" start="00:08:15.567" text="to at least help me with the copying and paste."]]
+[[!template id=subtitle video="qnaVideo" start="00:08:18.967" text="I'm still working on how do I convert this."]]
+[[!template id=subtitle video="qnaVideo" start="00:08:21.574" text="Interconvertability is driving me nuts."]]
+[[!template id=subtitle video="qnaVideo" start="00:08:24.300" text="I think most of the questions"]]
+[[!template id=subtitle video="qnaVideo" start="00:08:26.533" text="are around interconvertability."]]
+[[!template id=subtitle video="qnaVideo" start="00:08:29.333" text="This is sort of what I have right now."]]
+
+[[!template new="1" id=subtitle video="qnaVideo" start="00:08:34.767" text="Any other questions, Amin,"]]
+[[!template id=subtitle video="qnaVideo" start="00:08:37.567" text="on IRC or not?"]]
+[[!template id=subtitle video="qnaVideo" start="00:08:40.233" text="Amin: Let's see. I think that's about it."]]
+[[!template id=subtitle video="qnaVideo" start="00:08:46.433" text="Bala: Okay. Cool. That was fun."]]
+[[!template id=subtitle video="qnaVideo" start="00:08:50.033" text="Thank you so much to"]]
+[[!template id=subtitle video="qnaVideo" start="00:08:51.833" text="the organizers of Emacs conference,"]]
+[[!template id=subtitle video="qnaVideo" start="00:08:54.577" text="and the community at large,"]]
+[[!template id=subtitle video="qnaVideo" start="00:08:57.100" text="the Org Mode community and the Emacs community for helping me out."]]
+[[!template id=subtitle video="qnaVideo" start="00:09:01.303" text="Thank you so much."]]
+[[!template id=subtitle video="qnaVideo" start="00:09:02.900" text="Thanks for the opportunity as well."]]
+[[!template id=subtitle video="qnaVideo" start="00:09:05.233" text="Amin: And thank you, Bala, for your awesome talk."]]
+[[!template id=subtitle video="qnaVideo" start="00:09:07.300" text="Bala: Thanks. Thanks a lot, Amin."]]
diff --git a/2020/info/04.md b/2020/info/04.md
index 303cb2a0..40ad0ec9 100644
--- a/2020/info/04.md
+++ b/2020/info/04.md
@@ -1,8 +1,9 @@
# Music in Plain Text
Jonathan Gregory
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.webm" subtitles="/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt"]]
-[Download compressed .webm video (13.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--04-music-in-plain-text--jonathan-gregory--vp9-q56-video-original-audio.webm)
+[[!template id=vid vidid=mainVideo src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.webm" subtitles="/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt"]]
+[Download compressed .webm video (15.6M)](https://media.emacsconf.org/2020/emacsconf-2020--04-music-in-plain-text--jonathan-gregory--compressed32.webm)
+[Download compressed .webm video (13.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--04-music-in-plain-text--jonathan-gregory--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
LilyPond is an extensible program for producing high-quality sheet
@@ -68,113 +69,171 @@ No.
<a name="transcript"></a>
# Transcript
-Hello, everyone, and welcome to the EmacsConf. I am Jonathan. In this
-talk, I'm going to demonstrate ways of producing sheet music in Emacs
-using Lilypond, and maybe also convince you to use Emacs for writing
-your scores. I'll start with an overview of the syntax for those who
-are new to using text-based notation as a shallow dive into the deep
-pond of lilies and Lilypond, and move on to showcase some of its
-functionalities using Org Mode and lilypond-mode. One disclaimer,
-however: I am not a Lilypond developer.
-
-(00:40) So what is Lilypond? Lilypond is a file format and music engraving
-system for producing high-quality sheet music. It translates textual
-representations of music to graphical objects. It's similar to LaTeX
-in that its input format describes the visual layouts of the score,
-using commands to define musical expressions. Commands begin with a
-backslash. For example, the formatter command, as shown on the left,
-yields its graphical equivalents on the right, the fermata symbol over
-the low B and so on and so forth. It's also fully extensible, like
-Emacs, allowing users to extend and override Lilypond's
-functionalities using the Scheme scripting language. It can be used
-for early and contemporary music tablature, vocal music lead sheets,
-and so on. Above all, it works with Emacs. In fact, Lilypond ships
-with Emacs Lisp libraries, including a major mode for editing Lilypond
-files.
-
-(01:47) So the input files are similar to source files. They contain
-expressions formed with curly braces, comments that start with the
-percent sign, and the code is indented. Notes are entered using
-lowercase letters, and rests with the letter r. In this case, the
-lowercase r or r4 is the equivalence of a crotchet or quarter note
-rest. Durations are entered using numbers and dots after the note
-name. If you do not specify one, the previous duration is used. You
-can also tie notes together using the tilde symbol (~). In fact, you
-can input chords, lyrics, embellishments, and a lot more. I encourage
-you to read the manual for more information. Now let's switch to a
-terminal window. With Lilypond installed, let's create a test file
-with the extension .ly and open it in Emacs.
-
-(02:50) At the top of the file is the version statement, which tells Lilypond
-which version to use when compiling the file. Here I'm using version
-2.20.0. I've added the clef and time signature. Let's add some notes.
-I'm going to close this now and compile the file by running lilypond
-followed by the file name. So now let's view the output. Okay.
-
-(03:27) So here's a more complex example for randomizing note sequences. The
-idea is to create new reading materials each time the code blocks are
-evaluated. As usual, we begin with a header. I've added the title and
-composer. Then we add the note sequences to use in the composition. In
-this case, sn is a note name just like a b c d and so on, and stands
-for snare drum, the percussion instruments. Now here's a function
-that's going to shuffle the notes in the table. Finally, we expand the
-notes inside the Lilypond source block. So whatever the function
-returns is expanded inside the drums block. Now let's press C-c C-c to
-view the results. Okay. And if I run this again, it should create a
-new composition. Great. You can also audition a piece using the midi
-command, which creates a midi file of the score.
-
-(04:34) Note also that the ob library-- sorry, the ob-lilypond library comes
-with two modes. The one I'm using now is called arrange mode and is
-useful for assembling complete scores. The basic mode on the other
-hand allows you to mix text and music by embedding Lilypond snippets
-and export them using typical Org Mode commands.
-
-(05:00) Now to demonstrate the basic mode in action. I'm going to export this
-document to a PDF file. In this case, the :file header argument is
-required, so you have to provide one and include the file name. Again,
-you can run the code and view the results. Here it is. So now let's
-export this to a PDF file. And here it is, what it generates.
-
-(05:39) Now I'm going to show you the workflow I used to produce music books
-in Emacs, combining Lilypond and LaTeX for a perfect marriage. I begin
-by sketching the first draft of the manuscript using pencil and paper.
-Then I move to Emacs to input the notes in a git repository. This is a
-typical source file. It begins with a stylesheet where I set variables
-and layout settings, although in general, there's no need for tweaking
-the layout unless you have specific requirements to do so. The easiest
-way to compile the file from Emacs is by pressing C-c C-l, so let's do
-this now, and the compilation buffer will tell you if there were any
-errors in the file. Now to automate the process of compiling several
-files and building the PDF, I use GNU Make, so all I have to do is
-open the shell and run the make command. Don't worry, I'll provide a
-link to the source code on the last slide.
-
-(06:41) As I moved forward with the project, I found at least two things
-missing. One, I had no access to a metronome, at least not from the
-editor, so I built one for casual use and made it available in the
-MELPA repository. I also missed bar numbers in the source file. This
-is useful when going back and forth between input and output files
-without getting lost. So I wrote a command for toggling bar numbers,
-which I hope you can see on the left. Also, some expressions are
-difficult or slow to write on the keyboard-- accents and tuplets, for
-example--so I use template expansion extensively for this purpose,
-mainly yasnippet.
-
-(07:23) So what do I think? Well, I think Lilypond can be a
-sharp paradigm shift for people used to GUI alternatives, but the
-results are impressive. You don't have to dive too deeply to start
-using Lilypond. Likewise, the ability to extend the software, I think,
-is especially appealing for music professionals, enthusiasts,
-composers, and the academic community: for example, allowing users to
-create alternative notation systems required in non-Western music
-traditions and other non-conventional requirements. Also, Lilypond and
-Emacs both have extensive and well-written manuals and active
-communities of users. But if you're still not sure where to start and
-when to wedge your feet in the deep but warm pond of lilies, Lilypond,
-and Lilypond users, I invite you to contribute to my Lilypond
-projects, which you can do so from the links on the screen. So, thank
-you all. I look forward to your comments, and I hope you enjoy the
-rest of the conference.
-
-<!-- /transcript -->
+[[!template new="1" text="Hello, everyone, and welcome to the EmacsConf." start="00:00:02.000" video="mainVideo" id=subtitle]]
+[[!template text="I am Jonathan. In this talk," start="00:00:04.799" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to demonstrate ways of producing sheet music in Emacs" start="00:00:06.631" video="mainVideo" id=subtitle]]
+[[!template text="using Lilypond, and maybe also convince you" start="00:00:10.880" video="mainVideo" id=subtitle]]
+[[!template text="to use Emacs for writing your scores." start="00:00:14.636" video="mainVideo" id=subtitle]]
+[[!template text="I'll start with an overview of the syntax" start="00:00:18.640" video="mainVideo" id=subtitle]]
+[[!template text="for those who are new to using" start="00:00:20.698" video="mainVideo" id=subtitle]]
+[[!template text="text-based notation" start="00:00:22.240" video="mainVideo" id=subtitle]]
+[[!template text="as a shallow dive into the deep pond" start="00:00:24.400" video="mainVideo" id=subtitle]]
+[[!template text="of lilies and Lilypond," start="00:00:26.615" video="mainVideo" id=subtitle]]
+[[!template text="and move on to showcase" start="00:00:28.800" video="mainVideo" id=subtitle]]
+[[!template text="some of its functionalities using Org Mode and lilypond-mode." start="00:00:30.171" video="mainVideo" id=subtitle]]
+[[!template text="One disclaimer, however:" start="00:00:34.723" video="mainVideo" id=subtitle]]
+[[!template text="I am not a Lilypond developer." start="00:00:37.173" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So what is Lilypond?" start="00:00:40.480" video="mainVideo" id=subtitle]]
+[[!template text="Lilypond is a file format and music engraving system" start="00:00:42.841" video="mainVideo" id=subtitle]]
+[[!template text="for producing high-quality sheet music." start="00:00:46.800" video="mainVideo" id=subtitle]]
+[[!template text="It translates textual representations" start="00:00:50.000" video="mainVideo" id=subtitle]]
+[[!template text="of music to graphical objects." start="00:00:52.442" video="mainVideo" id=subtitle]]
+[[!template text="It's similar to LaTeX in that" start="00:00:55.120" video="mainVideo" id=subtitle]]
+[[!template text="its input format describes" start="00:00:57.520" video="mainVideo" id=subtitle]]
+[[!template text="the visual layouts of the score," start="00:00:59.329" video="mainVideo" id=subtitle]]
+[[!template text="using commands to define musical expressions." start="00:01:01.600" video="mainVideo" id=subtitle]]
+[[!template text="Commands begin with a backslash." start="00:01:05.119" video="mainVideo" id=subtitle]]
+[[!template text="For example, the formatter command, as shown on the left," start="00:01:07.760" video="mainVideo" id=subtitle]]
+[[!template text="yields its graphical equivalents on the right," start="00:01:10.791" video="mainVideo" id=subtitle]]
+[[!template text="the fermata symbol over the low B" start="00:01:13.920" video="mainVideo" id=subtitle]]
+[[!template text="and so on and so forth." start="00:01:16.345" video="mainVideo" id=subtitle]]
+[[!template text="It's also fully extensible, like Emacs," start="00:01:19.119" video="mainVideo" id=subtitle]]
+[[!template text="allowing users to extend" start="00:01:21.600" video="mainVideo" id=subtitle]]
+[[!template text="and override Lilypond's functionalities" start="00:01:23.119" video="mainVideo" id=subtitle]]
+[[!template text="using the Scheme scripting language." start="00:01:25.600" video="mainVideo" id=subtitle]]
+[[!template text="It can be used for early and contemporary music tablature," start="00:01:28.452" video="mainVideo" id=subtitle]]
+[[!template text="vocal music lead sheets, and so on." start="00:01:32.422" video="mainVideo" id=subtitle]]
+[[!template text="Above all, it works with Emacs." start="00:01:35.200" video="mainVideo" id=subtitle]]
+[[!template text="In fact, Lilypond ships with Emacs Lisp libraries," start="00:01:38.000" video="mainVideo" id=subtitle]]
+[[!template text="including a major mode for editing Lilypond files." start="00:01:41.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So the input files are similar to source files." start="00:01:47.360" video="mainVideo" id=subtitle]]
+[[!template text="They contain expressions formed with curly braces," start="00:01:50.560" video="mainVideo" id=subtitle]]
+[[!template text="comments that start with the percent sign," start="00:01:54.079" video="mainVideo" id=subtitle]]
+[[!template text="and the code is indented." start="00:01:56.549" video="mainVideo" id=subtitle]]
+[[!template text="Notes are entered using lowercase letters," start="00:02:00.240" video="mainVideo" id=subtitle]]
+[[!template text="and rests with the letter r." start="00:02:02.903" video="mainVideo" id=subtitle]]
+[[!template text="In this case, the lowercase r or r4" start="00:02:05.600" video="mainVideo" id=subtitle]]
+[[!template text="is the equivalence of a crotchet or" start="00:02:08.800" video="mainVideo" id=subtitle]]
+[[!template text="quarter note rest." start="00:02:11.039" video="mainVideo" id=subtitle]]
+[[!template text="Durations are entered using numbers" start="00:02:14.000" video="mainVideo" id=subtitle]]
+[[!template text="and dots after the note name." start="00:02:15.938" video="mainVideo" id=subtitle]]
+[[!template text="If you do not specify one," start="00:02:18.480" video="mainVideo" id=subtitle]]
+[[!template text="the previous duration is used." start="00:02:20.196" video="mainVideo" id=subtitle]]
+[[!template text="You can also tie notes together using the tilde symbol (~)." start="00:02:22.640" video="mainVideo" id=subtitle]]
+[[!template text="In fact, you can input chords, lyrics," start="00:02:27.360" video="mainVideo" id=subtitle]]
+[[!template text="embellishments, and a lot more." start="00:02:30.000" video="mainVideo" id=subtitle]]
+[[!template text="I encourage you to read the manual for more information." start="00:02:32.080" video="mainVideo" id=subtitle]]
+[[!template text="Now let's switch to a terminal window." start="00:02:36.160" video="mainVideo" id=subtitle]]
+[[!template text="With Lilypond installed," start="00:02:39.680" video="mainVideo" id=subtitle]]
+[[!template text="let's create a test file with the extension .ly and open it in Emacs." start="00:02:41.247" video="mainVideo" id=subtitle]]
+[[!template new="1" text="At the top of the file is the version statement," start="00:02:50.560" video="mainVideo" id=subtitle]]
+[[!template text="which tells Lilypond" start="00:02:53.048" video="mainVideo" id=subtitle]]
+[[!template text="which version to use when compiling the file." start="00:02:54.395" video="mainVideo" id=subtitle]]
+[[!template text="Here I'm using version 2.20.0." start="00:02:57.440" video="mainVideo" id=subtitle]]
+[[!template text="I've added the clef and time signature." start="00:03:00.959" video="mainVideo" id=subtitle]]
+[[!template text="Let's add some notes." start="00:03:04.159" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to close this now" start="00:03:09.280" video="mainVideo" id=subtitle]]
+[[!template text="and compile the file" start="00:03:12.098" video="mainVideo" id=subtitle]]
+[[!template text="by running lilypond followed by the file name." start="00:03:13.765" video="mainVideo" id=subtitle]]
+[[!template text="So now let's view the output." start="00:03:19.760" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay. So here's a more complex example" start="00:03:27.360" video="mainVideo" id=subtitle]]
+[[!template text="for randomizing note sequences." start="00:03:29.760" video="mainVideo" id=subtitle]]
+[[!template text="The idea is to create" start="00:03:32.239" video="mainVideo" id=subtitle]]
+[[!template text="new reading materials each time the code blocks are evaluated." start="00:03:33.410" video="mainVideo" id=subtitle]]
+[[!template text="As usual, we begin with a header." start="00:03:37.760" video="mainVideo" id=subtitle]]
+[[!template text="I've added the title and composer." start="00:03:40.640" video="mainVideo" id=subtitle]]
+[[!template text="Then we add the note sequences to use in the composition." start="00:03:43.541" video="mainVideo" id=subtitle]]
+[[!template text="In this case, sn is a note name just like" start="00:03:47.920" video="mainVideo" id=subtitle]]
+[[!template text="a b c d and so on, and stands for snare drum," start="00:03:51.200" video="mainVideo" id=subtitle]]
+[[!template text="the percussion instruments." start="00:03:54.959" video="mainVideo" id=subtitle]]
+[[!template text="Now here's a function that's going to" start="00:03:58.879" video="mainVideo" id=subtitle]]
+[[!template text="shuffle the notes in the table." start="00:04:00.720" video="mainVideo" id=subtitle]]
+[[!template text="Finally, we expand the notes inside" start="00:04:04.080" video="mainVideo" id=subtitle]]
+[[!template text="the Lilypond source block." start="00:04:06.560" video="mainVideo" id=subtitle]]
+[[!template text="So whatever the function returns" start="00:04:08.799" video="mainVideo" id=subtitle]]
+[[!template text="is expanded inside the drums block." start="00:04:10.684" video="mainVideo" id=subtitle]]
+[[!template text="Now let's press C-c C-c to view the results." start="00:04:13.680" video="mainVideo" id=subtitle]]
+[[!template text="Okay. And if I run this again, it should create a new composition." start="00:04:20.079" video="mainVideo" id=subtitle]]
+[[!template text="Great. You can also audition a piece using the midi command," start="00:04:26.840" video="mainVideo" id=subtitle]]
+[[!template text="which creates a midi file of the score." start="00:04:31.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Note also that the ob library--" start="00:04:34.320" video="mainVideo" id=subtitle]]
+[[!template text="sorry, the ob-lilypond library comes" start="00:04:36.560" video="mainVideo" id=subtitle]]
+[[!template text="with two modes." start="00:04:39.040" video="mainVideo" id=subtitle]]
+[[!template text="The one I'm using now is called arrange mode" start="00:04:40.400" video="mainVideo" id=subtitle]]
+[[!template text="and is useful for assembling complete scores." start="00:04:43.440" video="mainVideo" id=subtitle]]
+[[!template text="The basic mode, on the other hand," start="00:04:47.120" video="mainVideo" id=subtitle]]
+[[!template text="allows you to mix text and music" start="00:04:49.015" video="mainVideo" id=subtitle]]
+[[!template text="by embedding Lilypond snippets and" start="00:04:51.199" video="mainVideo" id=subtitle]]
+[[!template text="export them using typical Org Mode commands." start="00:04:53.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now to demonstrate the basic mode in action." start="00:05:00.240" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to export this document" start="00:05:02.661" video="mainVideo" id=subtitle]]
+[[!template text="to a PDF file." start="00:05:04.320" video="mainVideo" id=subtitle]]
+[[!template text="In this case, the :file header argument is required," start="00:05:05.120" video="mainVideo" id=subtitle]]
+[[!template text="so you have to provide one" start="00:05:10.077" video="mainVideo" id=subtitle]]
+[[!template text="and include the file name." start="00:05:11.919" video="mainVideo" id=subtitle]]
+[[!template text="Again, you can run the code and view the results." start="00:05:15.600" video="mainVideo" id=subtitle]]
+[[!template text="Here it is. So now let's export this to a PDF file." start="00:05:22.160" video="mainVideo" id=subtitle]]
+[[!template text="And here it is, what it generates." start="00:05:33.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now I'm going to show you the workflow I used" start="00:05:39.680" video="mainVideo" id=subtitle]]
+[[!template text="to produce music books in Emacs," start="00:05:41.716" video="mainVideo" id=subtitle]]
+[[!template text="combining Lilypond and LaTeX for a" start="00:05:44.000" video="mainVideo" id=subtitle]]
+[[!template text="perfect marriage." start="00:05:46.160" video="mainVideo" id=subtitle]]
+[[!template text="I begin by sketching the first draft" start="00:05:48.000" video="mainVideo" id=subtitle]]
+[[!template text="of the manuscript using pencil and paper." start="00:05:49.858" video="mainVideo" id=subtitle]]
+[[!template text="Then I move to Emacs to input the notes" start="00:05:53.039" video="mainVideo" id=subtitle]]
+[[!template text="in a git repository." start="00:05:55.039" video="mainVideo" id=subtitle]]
+[[!template text="This is a typical source file." start="00:05:57.440" video="mainVideo" id=subtitle]]
+[[!template text="It begins with a stylesheet" start="00:05:59.486" video="mainVideo" id=subtitle]]
+[[!template text="where I set variables and layout settings," start="00:06:01.360" video="mainVideo" id=subtitle]]
+[[!template text="although in general," start="00:06:03.690" video="mainVideo" id=subtitle]]
+[[!template text="there's no need for tweaking the layout" start="00:06:04.875" video="mainVideo" id=subtitle]]
+[[!template text="unless you have specific requirements to do so." start="00:06:07.039" video="mainVideo" id=subtitle]]
+[[!template text="The easiest way to compile the file from Emacs is by pressing C-c C-l," start="00:06:11.199" video="mainVideo" id=subtitle]]
+[[!template text="so let's do this now," start="00:06:15.520" video="mainVideo" id=subtitle]]
+[[!template text="and the compilation buffer will tell you" start="00:06:19.280" video="mainVideo" id=subtitle]]
+[[!template text="if there were any errors in the file." start="00:06:21.199" video="mainVideo" id=subtitle]]
+[[!template text="Now to automate the process of" start="00:06:23.759" video="mainVideo" id=subtitle]]
+[[!template text="compiling several files and building the PDF," start="00:06:25.439" video="mainVideo" id=subtitle]]
+[[!template text="I use GNU Make, so all I have to do is" start="00:06:28.560" video="mainVideo" id=subtitle]]
+[[!template text="open the shell and run the make command. Don't worry," start="00:06:31.280" video="mainVideo" id=subtitle]]
+[[!template text="I'll provide a link to the source code" start="00:06:36.000" video="mainVideo" id=subtitle]]
+[[!template text="on the last slide." start="00:06:37.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="As I moved forward with the project," start="00:06:41.600" video="mainVideo" id=subtitle]]
+[[!template text="I found at least two things missing." start="00:06:43.494" video="mainVideo" id=subtitle]]
+[[!template text="One, I had no access to a metronome," start="00:06:46.000" video="mainVideo" id=subtitle]]
+[[!template text="at least not from the editor," start="00:06:48.720" video="mainVideo" id=subtitle]]
+[[!template text="so I built one for casual use" start="00:06:50.479" video="mainVideo" id=subtitle]]
+[[!template text="and made it available in the MELPA repository." start="00:06:52.437" video="mainVideo" id=subtitle]]
+[[!template text="I also missed bar numbers in the source file." start="00:06:55.919" video="mainVideo" id=subtitle]]
+[[!template text="This is useful when going back and forth" start="00:06:59.039" video="mainVideo" id=subtitle]]
+[[!template text="between input and output files without getting lost." start="00:07:00.880" video="mainVideo" id=subtitle]]
+[[!template text="So I wrote a command for toggling bar numbers," start="00:07:04.479" video="mainVideo" id=subtitle]]
+[[!template text="which I hope you can see on the left." start="00:07:07.290" video="mainVideo" id=subtitle]]
+[[!template text="Also, some expressions are difficult or" start="00:07:10.000" video="mainVideo" id=subtitle]]
+[[!template text="slow to write on the keyboard--" start="00:07:12.080" video="mainVideo" id=subtitle]]
+[[!template text="accents and tuplets, for example--" start="00:07:14.160" video="mainVideo" id=subtitle]]
+[[!template text="so I use template expansion extensively for this purpose," start="00:07:16.490" video="mainVideo" id=subtitle]]
+[[!template text="mainly yasnippet." start="00:07:20.160" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So what do I think?" start="00:07:23.440" video="mainVideo" id=subtitle]]
+[[!template text="Well, I think Lilypond can be a sharp paradigm shift" start="00:07:24.797" video="mainVideo" id=subtitle]]
+[[!template text="for people used to GUI alternatives," start="00:07:28.080" video="mainVideo" id=subtitle]]
+[[!template text="but the results are impressive." start="00:07:30.817" video="mainVideo" id=subtitle]]
+[[!template text="You don't have to dive too deeply to" start="00:07:32.720" video="mainVideo" id=subtitle]]
+[[!template text="start using Lilypond." start="00:07:34.639" video="mainVideo" id=subtitle]]
+[[!template text="Likewise, the ability to extend the software, I think," start="00:07:36.960" video="mainVideo" id=subtitle]]
+[[!template text="is especially appealing for music professionals," start="00:07:39.635" video="mainVideo" id=subtitle]]
+[[!template text="enthusiasts, composers, and the academic community:" start="00:07:42.400" video="mainVideo" id=subtitle]]
+[[!template text="for example, allowing users to create" start="00:07:46.560" video="mainVideo" id=subtitle]]
+[[!template text="alternative notation systems" start="00:07:48.400" video="mainVideo" id=subtitle]]
+[[!template text="required in non-Western music traditions" start="00:07:50.187" video="mainVideo" id=subtitle]]
+[[!template text="and other non-conventional requirements." start="00:07:53.120" video="mainVideo" id=subtitle]]
+[[!template text="Also, Lilypond and Emacs both have" start="00:07:56.160" video="mainVideo" id=subtitle]]
+[[!template text="extensive and well-written manuals" start="00:07:58.400" video="mainVideo" id=subtitle]]
+[[!template text="and active communities of users." start="00:08:00.720" video="mainVideo" id=subtitle]]
+[[!template text="But if you're still not sure" start="00:08:04.639" video="mainVideo" id=subtitle]]
+[[!template text="where to start and when to wedge your feet in the deep but warm pond" start="00:08:05.971" video="mainVideo" id=subtitle]]
+[[!template text="of lilies, Lilypond, and Lilypond users," start="00:08:10.475" video="mainVideo" id=subtitle]]
+[[!template text="I invite you to contribute to my Lilypond projects," start="00:08:13.680" video="mainVideo" id=subtitle]]
+[[!template text="which you can do so from the links on the screen." start="00:08:16.960" video="mainVideo" id=subtitle]]
+[[!template text="So, thank you all. I look forward to your comments," start="00:08:20.720" video="mainVideo" id=subtitle]]
+[[!template text="and I hope you enjoy the rest of the conference." start="00:08:23.271" video="mainVideo" id=subtitle]]
diff --git a/2020/info/05.md b/2020/info/05.md
index 852caff3..c892d04f 100644
--- a/2020/info/05.md
+++ b/2020/info/05.md
@@ -1,12 +1,15 @@
# Bard Bivou(m)acs - Building a bandcamp-like page for an album of music
Grant Shangreaux
-[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.webm" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt"]]
-[Download compressed .webm video (20.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux--vp9-q56-video-original-audio.webm)
+[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.webm" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt"
+other_resources="""[Download compressed .webm video (65.2M)](https://media.emacsconf.org/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux--compressed32.webm)
+[Download compressed .webm video (20.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux--vp9-q56-video-original-audio.webm)
+"""]]
[View transcript](#transcript)
[[!template id=vid vidid="qnaVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.webm" download="Download Q&A video, 720p" subtitles="/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt"]]
-[Download compressed Q&A .webm video (15.7M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (40.1M)](https://media.emacsconf.org/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux--compressed32.webm)
+[Download compressed Q&A .webm video (15.7M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux--vp9-q56-video-original-audio.webm)
[View transcript for Q&A](#transcript-questions)
I hoped to become a successful musician someday, and while that has
@@ -112,390 +115,546 @@ screenshots from within Emacs as SVG (if compiled `--with-cairo`).
<a name="transcript"></a>
# Transcript
-Hello, my name is Grant Shangreaux. This is my talk titled Bard
-Bivou(m)acs: Publishing Music with Emacs. I'm a software developer
-with Unabridged Software in Lincoln, Nebraska. Long time Emacs user,
-relatively new Emacs hacker. Hopefully, I'll be able to show you my
-workflow, with how I publish music with Emacs. All right.
-
-(<a href="#mainVideo" class="time-link">00:30</a>)
-So as a musician, I would like to publish my music online. I could
-publish with popular online music services, but I'm more of a
-DIY-type, so I chose to go ahead and publish with Emacs. What's the
-motivation behind this? A lot of it comes down to some fundamental
-freedoms that Emacs and GNU software represent to me, as well as my
-ideas on culture and my background. I don't believe that music is a
-consumer good. It's a form of knowledge, like an algorithm. And it's
-just such a part of culture, like in tribal cultures, music was seen
-as a gift from the cosmos or the gods. It was a gift maybe through an
-individual vessel, but was shared with the people and shared with
-everyone, kept alive by the culture itself. So to me, music is
-something that should be shared and should be freely enjoyed by
-everyone. Of course, artists should be compensated as well, but that's
-a whole different topic.
-
-(<a href="#mainVideo" class="time-link" data-timestamp="99">01:39</a>)
-So when I want to share my music, I want to do it without
-impacting anyone's freedom. Using GNU software like Emacs is a good
-way that I can ensure that I won't be requiring people to sign away
-their freedoms for anything. There's a lot more I could say about this
-but I don't have time. Feel free to reach out to me by email or IRC.
-Part of the motivation for me, personally, is that Emacs is super
-magical. It's an all-in-one solution. Like I said, the GNU software
-aligns with Creative Commons' ideas. I can do file management. I can
-author HTML, all the web stuff I need even, literate-style. I can
-handle media and metadata. I've got version control, remote server
-access... All the tools I need are right under my fingertips with this
-tool that I use every day for a long time. I don't need to look
-elsewhere.
-
-(<a href="#mainVideo" class="time-link">02:31</a>)
-It was a challenge. I wanted to see if I could do this all
-within Emacs itself. So, how do you use Emacs to publish music? Well,
-for me, I needed a couple of things. I needed to be able to audition
-and label unlabeled audio tracks. I have a lot of files that I don't
-know where they came from. I don't know what they are. I need to be
-able to listen to them, and I need to be able to add metadata to
-whatever audio format it is and rename the files based on that
-metadata, potentially. And in the end, I wanted to take those files
-and programmatically produce a web page for people to consume.
-
-(<a href="#mainVideo" class="time-link">03:08</a>)
-I found out that Emacs scores a hundred percent on all of
-these requirements that I had for this, and a lot of that came from
-EMMS, the Emacs multimedia system. EMMS is great. If you haven't
-checked it out, please do. It's a little bit unintuitive, but once you
-get into it, you know it works. Basically, what EMMS gave me was the
-ability to listen to the tracks, organize playlists. On top of that,
-it gave me super-powered metadata authoring.
-
-(<a href="#mainVideo" class="time-link">03:42</a>)
-I'm going to demonstrate that to you. So in order to do this,
-you have to require markable playlists, so (require 'emms-mark). I'm
-going to go through, and I'm going to open the red... I've got this.
-These files here. So you can see these files are mp3s. They're
-recorded on a digital recorder. If I had the choice, I would have a
-recorder that used a different format, but so be it. I can mark all
-these files and I can do EMMS add to .., and now they've been loaded
-into a playlist. So you can see the playlist here. There's some
-leftover files.
-
-(<a href="#mainVideo" class="time-link">04:30</a>)
-So I've got these three files in my playlist, and as
-you can see, it's just the file name, the path. I don't have any
-metadata associated with them. In this playlist, I can hit E, and
-it'll bring up a buffer showing the tag information that I have. I
-could edit these here. I could edit them one at a time, but that's not
-really great. I want superpower metadata authoring. So, by marking
-them, I can then hit E, and I have all three of the tracks loaded up
-in this tags buffer. On top of that, I can do EMMS tag editor, set
-all, C-c C-r, and I want to set the artist. so these are some
-recordings of my family. So, Shangreaux, set all three of them. I want
-to set the album: Spring Walk with Lap Harp. I want to set the year.
-And then I'm going to go ahead and put these in manually, but with the
-power of Emacs keyboard macros and registers and so on. I could do
-this programmatically as well, which would make it a lot easier if I
-had much more than three files to do this with. Submit the changes
-with C-c C-c, and now we've got the playlist. You can see the artist
-and track number have been updated here.
-
-(<a href="#mainVideo" class="time-link">6:15</a>)
-And then the final piece of this is that if you look at this,
-you can see that the file name is still the same. So if I were looking
-at the directory, I would still have this file name. When packaging
-these up for a release, for people to download, it's nice to be able
-to have that filename reflect the track number and the artist and so
-on. So there's another command, EMMS rename tag editor, rename, so it
-could be just capital R. I think I need to mark all of these, hit
-capital R, and then it's going to ask me to confirm and say yes to all
-of them. And now, if you look in the-- whoops I have to update
-it--you'll see it's been updated with the artist, track number and
-track name. This format is a format string, so it's customizable of
-course. I just decided to go with the default.
-
-(<a href="#mainVideo" class="time-link">7:21</a>)
-So that's pretty great, this workflow just with EMMS. I didn't
-have to do anything. This is all there. It's all built in. It gave me
-exactly what I was looking for in terms of being able to process a lot
-of raw audio files add metadata to them and get them ready for
-publishing. And this is for publishing for playback in any media
-player. It'll be useful. Not just for the web page that I'm building.
-
-(<a href="#mainVideo" class="time-link">7:48</a>)
-So the final part, of course, is to build the web page. Emacs
-makes authoring HTML trivial. As I was going through this, I wanted to
-challenge myself and just be, like, can I do this just all with Emacs?
-Can I just make this? I don't need a... I don't need Ruby. I don't
-need Rails. I don't need Node. I don't need any of this other stuff. I
-have my tool right here. It's a fully... It's a whole operating
-system, basically, plus programming languages. So the first thing I
-started with was buffer scripting for manipulating text. That's kind
-of the easiest way to do it. Basically, anything you can do in a
-buffer, you can do programmatically with Elisp. So this might be a
-good example for beginners. If you haven't done any Elisp yet, a
-simple example is to create this this div output here. You can use
-this with-temp-buffer, so basically creating an imaginary buffer.
-insert is just like typing, so you put strings in, you put new lines
-in, you can build some strings together. Here you can see I'm doing a
-random number, so every time I execute this, my content change. I
-can generate dynamic content in HTML blocks with Elisp.
-
-(<a href="#mainVideo" class="time-link">9:04</a>)
-For my web page builder, It's a little more complex. I'm
-pulling data out using EMMS data structures, so it's pulling that out
-from the track data. And then I'm using some program to generate list
-elements, so each track is going to have the title and track number,
-and then a button for playing it, plus the source of the audio file,
-which will get added here. Right now, this is hard coded for Opus, so
-it won't work for my MP3s. I'm going to skip over snippets. Turns out
-format strings were good enough for me. Snippets could be useful, but
-format is super powerful, and I didn't really even need all that much
-power, basically, just doing string interpolation. So if you haven't
-seen format before, you basically put these control strings or control
-characters inside of a string, and you can generate an output string
-that you want. So in my generator code, basically, it's down here, I'm
-calling format with this Bard Bivou(m)acs template, and that's
-basically a big a big string of HTML. It's just my whole page of HTML
-with those control characters in just four places. One of them
-populates the track list. That's really the meat of the program.
-Again, this is a combination of using buffer scripting, using HTML
-mode, inserting text format strings, and then I can indent-region so
-the HTML actually looks pretty when it comes out of it as well. I will
-show that, just really quick actually. So you can see, this is the
-HTML that got generated. I've got my template. I inserted the title
-here, the style, the font was all inserted, and then this whole list
-of of tracks here. It's kind of messy to look at, but this track list,
-this whole div here, is all generated by my generator code, and it
-works. It's great. Okay, moving on.
-
-(<a href="#mainVideo" class="time-link">11:27</a>)
-So the other thing was that as I was developing this, I
-decided to use Org Babel and some of his its features for
-multi-language things because I needed to style it with CSS and and
-put actions in Javascript, and also I used SVG for authoring stuff. It
-was a little bit complicated. It probably would have been simpler had
-I not used Org Babel, but it's also really fun. I think it's a cool,
-cool idea to use literate programming. My idea was to create HTML
-components. I could name it like this, put a format string inside it,
-and build a function in Elisp to format it and spit out the HTML that
-I want. By doing this, then, I can just change things in my Org file
-which, not getting a whole lot of time to work on it, I can come back
-to it and I have a lot of notes. I can kind of generate things as I'm
-going and keep notes for myself, and keep the... I don't know. It's
-cool. Literate programming is fun. So I don't need to go into that too
-much, but you can see if I execute this here, I get the the div that I
-want. It's a little bit funny. You'll see I have the string like this,
-the way that noweb expands, I can't do this on a single line. It looks
-funny when you do that, so that might be something to work out later.
-CSS blocks can either be tangled out and referenced in the HTML source
-or inlined. Here's an example I have of inlining it. So I've got my
-little CSS block named style, Javascript named script, and then I've
-got this HTML source block with noweb expansion. These double angle
-brackets here are where I'm going to expand the block named style. I'm
-actually calling a function, so I want the result of the function
-here, and then the script will just get expanded here. So
-org-babel-expand-src-block, you can see what it looks like. I've got
-my style here. I've got my title. I've got that main content class I
-showed before, and the script as well. So that's kind of cool. I could
-just run org-babel-tangle and get my thing out and just edit one file
-instead of multiple files. Not for everyone, but I thought it was kind
-of fun. All right.
-
-(<a href="#mainVideo" class="time-link">13:45</a>)
-Oh, and the final thing is that in Emacs, you can author and
-view SVG. So this is just an Org. This SVG, I used to make the play
-and pause buttons. I didn't know this, but if you edit an SVG file,
-you can toggle back and forth between the code and the image. It's
-pretty sweet. So I can iteratively work through this because of how
-Emacs is.
-
-(<a href="#mainVideo" class="time-link">14:20</a>)
-Final considerations here, like when doing this, I want it to
-be all free, so I want to use fonts that use a free license. I found
-GNU Unifont. It's kind of cool. The content license... I chose
-Creative Commons Attribution ShareAlike, which is kind of like the
-GPL. Ideally, I could serve it with Emacs. I'd like to remove
-idiosyncrasy so other people can use it. It's pretty much just my tool
-right now. Not requiring the web browser... I can ship playlists so
-that you can just click or link to a playlist on your favorite player,
-even EMMS if you want, and then packing up those albums in like a ZIP
-or .tar file.
-
-(<a href="#mainVideo" class="time-link">15:04</a>)
-So you can go to churls.world . It just has a link to this
-album. I'll display it here in just a second. You can contact me. I'm
-shoshin on #emacs in IRC and on sourcehut. You can email me
-grant@churls.world, personal, or grant@unabridgedsoftware.com. All
-right, now. Let's see about this... This is up online, so if you want
-to listen to my college band's album from 20 years ago, here it is:
-Casiopeia Basement Days. Whoops. I made this art in Krita. You can
-press play. You can skip around. I do have the playlist up here too.
-So yeah, thanks for listening. I hope you enjoyed it, and enjoy the
-rest of EmacsConf. Goodbye!
-
-<!-- /transcript -->
+[[!template text="Hello, my name is Grant Shangreaux." start="00:00:01.360" video="mainVideo" id=subtitle]]
+[[!template text="This is my talk titled Bard Bivou(m)acs: Publishing Music with Emacs." start="00:00:04.480" video="mainVideo" id=subtitle]]
+[[!template text="I'm a software developer with Unabridged Software in Lincoln, Nebraska." start="00:00:09.519" video="mainVideo" id=subtitle]]
+[[!template text="Long time Emacs user, relatively new Emacs hacker." start="00:00:14.400" video="mainVideo" id=subtitle]]
+[[!template text="Hopefully, I'll be able to show you my workflow," start="00:00:18.720" video="mainVideo" id=subtitle]]
+[[!template text="with how I publish music with Emacs." start="00:00:22.487" video="mainVideo" id=subtitle]]
+[[!template new="1" text="All right. So as a musician, I would like to publish my music online." start="00:00:30.480" video="mainVideo" id=subtitle]]
+[[!template text="I could publish with popular online music services," start="00:00:35.520" video="mainVideo" id=subtitle]]
+[[!template text="but I'm more of a DIY-type," start="00:00:39.040" video="mainVideo" id=subtitle]]
+[[!template text="so I chose to go ahead and publish with Emacs." start="00:00:41.061" video="mainVideo" id=subtitle]]
+[[!template text="What's the motivation behind this?" start="00:00:44.719" video="mainVideo" id=subtitle]]
+[[!template text="A lot of it comes down to some fundamental freedoms" start="00:00:48.160" video="mainVideo" id=subtitle]]
+[[!template text="that Emacs and GNU software represent to me," start="00:00:51.600" video="mainVideo" id=subtitle]]
+[[!template text="as well as my ideas on culture and my background." start="00:00:57.178" video="mainVideo" id=subtitle]]
+[[!template text="I don't believe that music is a consumer good." start="00:01:01.840" video="mainVideo" id=subtitle]]
+[[!template text="It's a form of knowledge, like an algorithm." start="00:01:04.080" video="mainVideo" id=subtitle]]
+[[!template text="And it's just such a part of culture," start="00:01:08.320" video="mainVideo" id=subtitle]]
+[[!template text="like in tribal cultures," start="00:01:11.036" video="mainVideo" id=subtitle]]
+[[!template text="music was seen as a gift from the cosmos or the gods." start="00:01:12.780" video="mainVideo" id=subtitle]]
+[[!template text="It was a gift maybe through an individual vessel," start="00:01:17.405" video="mainVideo" id=subtitle]]
+[[!template text="but was shared with the people" start="00:01:20.288" video="mainVideo" id=subtitle]]
+[[!template text="and shared with everyone," start="00:01:21.920" video="mainVideo" id=subtitle]]
+[[!template text="kept alive by the culture itself." start="00:01:23.520" video="mainVideo" id=subtitle]]
+[[!template text="So to me, music is something that" start="00:01:26.799" video="mainVideo" id=subtitle]]
+[[!template text="should be shared and should be" start="00:01:29.840" video="mainVideo" id=subtitle]]
+[[!template text="freely enjoyed by everyone." start="00:01:31.520" video="mainVideo" id=subtitle]]
+[[!template text="Of course, artists should be compensated as well," start="00:01:33.818" video="mainVideo" id=subtitle]]
+[[!template text="but that's a whole different topic." start="00:01:36.560" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So when I want to share my music," start="00:01:39.040" video="mainVideo" id=subtitle]]
+[[!template text="I want to do it without impacting anyone's freedom." start="00:01:41.040" video="mainVideo" id=subtitle]]
+[[!template text="Using GNU software like Emacs" start="00:01:43.520" video="mainVideo" id=subtitle]]
+[[!template text="is a good way that I can ensure that" start="00:01:45.425" video="mainVideo" id=subtitle]]
+[[!template text="I won't be requiring people" start="00:01:49.200" video="mainVideo" id=subtitle]]
+[[!template text="to sign away their freedoms for anything." start="00:01:52.597" video="mainVideo" id=subtitle]]
+[[!template text="There's a lot more I could say about this" start="00:01:55.840" video="mainVideo" id=subtitle]]
+[[!template text="but I don't have time." start="00:01:57.367" video="mainVideo" id=subtitle]]
+[[!template text="Feel free to reach out to me by email or IRC." start="00:01:58.799" video="mainVideo" id=subtitle]]
+[[!template text="Part of the motivation for me," start="00:02:03.439" video="mainVideo" id=subtitle]]
+[[!template text="personally, is that Emacs is super magical." start="00:02:06.479" video="mainVideo" id=subtitle]]
+[[!template text="It's an all-in-one solution." start="00:02:08.775" video="mainVideo" id=subtitle]]
+[[!template text="Like I said, the GNU software aligns with" start="00:02:10.720" video="mainVideo" id=subtitle]]
+[[!template text="Creative Commons' ideas." start="00:02:12.720" video="mainVideo" id=subtitle]]
+[[!template text="I can do file management." start="00:02:14.480" video="mainVideo" id=subtitle]]
+[[!template text="I can author HTML, all the web stuff I need even, literate-style." start="00:02:16.067" video="mainVideo" id=subtitle]]
+[[!template text="I can handle media and metadata." start="00:02:20.239" video="mainVideo" id=subtitle]]
+[[!template text="I've got version control, remote server access..." start="00:02:22.171" video="mainVideo" id=subtitle]]
+[[!template text="All the tools I need are right under my fingertips with this tool" start="00:02:24.640" video="mainVideo" id=subtitle]]
+[[!template text="that I use every day for a long time." start="00:02:28.080" video="mainVideo" id=subtitle]]
+[[!template text="I don't need to look elsewhere." start="00:02:30.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="It was a challenge." start="00:02:31.440" video="mainVideo" id=subtitle]]
+[[!template text="I wanted to see if I could do this" start="00:02:34.319" video="mainVideo" id=subtitle]]
+[[!template text="all within Emacs itself." start="00:02:36.319" video="mainVideo" id=subtitle]]
+[[!template text="So, how do you use Emacs to publish music?" start="00:02:39.440" video="mainVideo" id=subtitle]]
+[[!template text="Well, for me, I needed" start="00:02:41.680" video="mainVideo" id=subtitle]]
+[[!template text="a couple of things." start="00:02:43.440" video="mainVideo" id=subtitle]]
+[[!template text="I needed to be able to audition and label unlabeled audio tracks." start="00:02:44.258" video="mainVideo" id=subtitle]]
+[[!template text="I have a lot of files that I don't know where they came from." start="00:02:47.564" video="mainVideo" id=subtitle]]
+[[!template text="I don't know what they are." start="00:02:50.320" video="mainVideo" id=subtitle]]
+[[!template text="I need to be able to listen to them," start="00:02:51.213" video="mainVideo" id=subtitle]]
+[[!template text="and I need to be able to add metadata to" start="00:02:53.840" video="mainVideo" id=subtitle]]
+[[!template text="whatever audio format it is" start="00:02:56.800" video="mainVideo" id=subtitle]]
+[[!template text="and rename the files based on that" start="00:02:58.480" video="mainVideo" id=subtitle]]
+[[!template text="metadata, potentially." start="00:03:00.800" video="mainVideo" id=subtitle]]
+[[!template text="And in the end, I wanted to take those" start="00:03:03.200" video="mainVideo" id=subtitle]]
+[[!template text="files and programmatically produce a web page" start="00:03:05.120" video="mainVideo" id=subtitle]]
+[[!template text="for people to consume." start="00:03:08.319" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I found out that Emacs scores a hundred percent on all of" start="00:03:10.442" video="mainVideo" id=subtitle]]
+[[!template text="these requirements that I had for this," start="00:03:14.879" video="mainVideo" id=subtitle]]
+[[!template text="and a lot of that came from EMMS, the Emacs multimedia system." start="00:03:17.709" video="mainVideo" id=subtitle]]
+[[!template text="EMMS is great." start="00:03:22.640" video="mainVideo" id=subtitle]]
+[[!template text="If you haven't checked it out, please do." start="00:03:26.080" video="mainVideo" id=subtitle]]
+[[!template text="It's a little bit unintuitive," start="00:03:27.760" video="mainVideo" id=subtitle]]
+[[!template text="but once you get into it, you know it works." start="00:03:29.736" video="mainVideo" id=subtitle]]
+[[!template text="Basically, what EMMS gave me was" start="00:03:34.000" video="mainVideo" id=subtitle]]
+[[!template text="the ability to listen to the tracks," start="00:03:36.420" video="mainVideo" id=subtitle]]
+[[!template text="organize playlists." start="00:03:38.720" video="mainVideo" id=subtitle]]
+[[!template text="On top of that, it gave me" start="00:03:39.680" video="mainVideo" id=subtitle]]
+[[!template text="super-powered metadata authoring." start="00:03:41.280" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I'm going to demonstrate that to you." start="00:03:42.959" video="mainVideo" id=subtitle]]
+[[!template text="So in order to do this," start="00:03:45.040" video="mainVideo" id=subtitle]]
+[[!template text="you have to require markable playlists," start="00:03:47.200" video="mainVideo" id=subtitle]]
+[[!template text="so (require 'emms-mark). I'm going to" start="00:03:50.879" video="mainVideo" id=subtitle]]
+[[!template text="go through, and I'm going to open the red..." start="00:03:54.879" video="mainVideo" id=subtitle]]
+[[!template text="I've got this. These files here." start="00:03:59.680" video="mainVideo" id=subtitle]]
+[[!template text="So you can see these files are mp3s." start="00:04:02.092" video="mainVideo" id=subtitle]]
+[[!template text="They're recorded on a digital recorder." start="00:04:04.480" video="mainVideo" id=subtitle]]
+[[!template text="If I had the choice, I would have a" start="00:04:07.599" video="mainVideo" id=subtitle]]
+[[!template text="recorder that used a different format," start="00:04:09.920" video="mainVideo" id=subtitle]]
+[[!template text="but so be it. I can mark all these files" start="00:04:12.319" video="mainVideo" id=subtitle]]
+[[!template text="and I can do EMMS add to .., and now they've been loaded into a playlist." start="00:04:14.640" video="mainVideo" id=subtitle]]
+[[!template text="So you can see the playlist here." start="00:04:27.040" video="mainVideo" id=subtitle]]
+[[!template text="There's some leftover files." start="00:04:28.698" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I've got these three files" start="00:04:30.400" video="mainVideo" id=subtitle]]
+[[!template text="in my playlist, and as you can see," start="00:04:31.771" video="mainVideo" id=subtitle]]
+[[!template text="it's just the file name, the path." start="00:04:33.361" video="mainVideo" id=subtitle]]
+[[!template text="I don't have any metadata associated with them." start="00:04:35.194" video="mainVideo" id=subtitle]]
+[[!template text="In this playlist, I can hit E," start="00:04:38.560" video="mainVideo" id=subtitle]]
+[[!template text="and it'll bring up a buffer showing" start="00:04:41.360" video="mainVideo" id=subtitle]]
+[[!template text="the tag information that I have." start="00:04:43.440" video="mainVideo" id=subtitle]]
+[[!template text="I could edit these here." start="00:04:47.360" video="mainVideo" id=subtitle]]
+[[!template text="I could edit them one at a time," start="00:04:49.840" video="mainVideo" id=subtitle]]
+[[!template text="but that's not really great. I want superpower metadata authoring." start="00:04:51.129" video="mainVideo" id=subtitle]]
+[[!template text="So, by marking them, I can then hit E," start="00:05:03.101" video="mainVideo" id=subtitle]]
+[[!template text="and I have all three of the tracks loaded up in this tags buffer." start="00:05:07.159" video="mainVideo" id=subtitle]]
+[[!template text="On top of that, I can do EMMS tag editor," start="00:05:12.639" video="mainVideo" id=subtitle]]
+[[!template text="set all, C-c C-r, and I want to set the artist." start="00:05:16.912" video="mainVideo" id=subtitle]]
+[[!template text="so these are some recordings of my family." start="00:05:22.840" video="mainVideo" id=subtitle]]
+[[!template text="So, Shangreaux, set all three of them." start="00:05:26.320" video="mainVideo" id=subtitle]]
+[[!template text="I want to set the album:" start="00:05:31.039" video="mainVideo" id=subtitle]]
+[[!template text="Spring Walk with Lap Harp." start="00:05:35.600" video="mainVideo" id=subtitle]]
+[[!template text="I want to set the year." start="00:05:40.160" video="mainVideo" id=subtitle]]
+[[!template text="And then I'm going to go ahead and put these in manually," start="00:05:45.520" video="mainVideo" id=subtitle]]
+[[!template text="but with the power of Emacs keyboard macros" start="00:05:53.759" video="mainVideo" id=subtitle]]
+[[!template text="and registers and so on. I could do this" start="00:05:56.759" video="mainVideo" id=subtitle]]
+[[!template text="programmatically as well," start="00:05:59.600" video="mainVideo" id=subtitle]]
+[[!template text="which would make it a lot easier" start="00:06:02.319" video="mainVideo" id=subtitle]]
+[[!template text="if I had much more than three files to do this with." start="00:06:03.818" video="mainVideo" id=subtitle]]
+[[!template text="Submit the changes with C-c C-c," start="00:06:07.440" video="mainVideo" id=subtitle]]
+[[!template text="and now we've got the playlist." start="00:06:09.919" video="mainVideo" id=subtitle]]
+[[!template text="You can see the artist and track number have been updated here." start="00:06:11.232" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And then the final piece of this is that" start="00:06:15.039" video="mainVideo" id=subtitle]]
+[[!template text="if you look at this, you can see that" start="00:06:17.360" video="mainVideo" id=subtitle]]
+[[!template text="the file name is still the same." start="00:06:18.875" video="mainVideo" id=subtitle]]
+[[!template text="So if I were looking at the directory," start="00:06:20.479" video="mainVideo" id=subtitle]]
+[[!template text="I would still have this file name." start="00:06:22.639" video="mainVideo" id=subtitle]]
+[[!template text="When packaging these up for a release," start="00:06:24.560" video="mainVideo" id=subtitle]]
+[[!template text="for people to download," start="00:06:26.479" video="mainVideo" id=subtitle]]
+[[!template text="it's nice to be able to have that" start="00:06:28.000" video="mainVideo" id=subtitle]]
+[[!template text="filename reflect the track number" start="00:06:30.319" video="mainVideo" id=subtitle]]
+[[!template text="and the artist and so on." start="00:06:32.044" video="mainVideo" id=subtitle]]
+[[!template text="So there's another command," start="00:06:33.609" video="mainVideo" id=subtitle]]
+[[!template text="EMMS rename tag editor, rename," start="00:06:40.250" video="mainVideo" id=subtitle]]
+[[!template text="so it could be just capital R." start="00:06:42.970" video="mainVideo" id=subtitle]]
+[[!template text="I think I need to mark all of these," start="00:06:45.120" video="mainVideo" id=subtitle]]
+[[!template text="hit capital R, and then it's going to ask me to confirm" start="00:06:46.991" video="mainVideo" id=subtitle]]
+[[!template text="and say yes to all of them." start="00:06:50.000" video="mainVideo" id=subtitle]]
+[[!template text="And now, if you look in the--" start="00:06:54.400" video="mainVideo" id=subtitle]]
+[[!template text="whoops I have to update it--you'll see" start="00:07:02.720" video="mainVideo" id=subtitle]]
+[[!template text="it's been updated with the artist," start="00:07:04.319" video="mainVideo" id=subtitle]]
+[[!template text="track number and track name." start="00:07:06.319" video="mainVideo" id=subtitle]]
+[[!template text="This format is a format string," start="00:07:11.120" video="mainVideo" id=subtitle]]
+[[!template text="so it's customizable of course." start="00:07:14.432" video="mainVideo" id=subtitle]]
+[[!template text="I just decided to go with the default." start="00:07:17.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So that's pretty great, this workflow just with EMMS." start="00:07:21.039" video="mainVideo" id=subtitle]]
+[[!template text="I didn't have to do anything. This is all there." start="00:07:24.948" video="mainVideo" id=subtitle]]
+[[!template text="It's all built in. It gave me exactly what I was looking for" start="00:07:27.585" video="mainVideo" id=subtitle]]
+[[!template text="in terms of being able to process a lot of raw audio files," start="00:07:31.673" video="mainVideo" id=subtitle]]
+[[!template text="add metadata to them, and get them ready for publishing." start="00:07:35.599" video="mainVideo" id=subtitle]]
+[[!template text="And this is for publishing for playback" start="00:07:39.280" video="mainVideo" id=subtitle]]
+[[!template text="in any media player. It'll be useful." start="00:07:41.599" video="mainVideo" id=subtitle]]
+[[!template text="Not just for the web page that I'm building." start="00:07:44.026" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So the final part, of course, is to build the web page." start="00:07:47.639" video="mainVideo" id=subtitle]]
+[[!template text="Emacs makes authoring HTML trivial." start="00:07:51.440" video="mainVideo" id=subtitle]]
+[[!template text="As I was going through this," start="00:07:54.960" video="mainVideo" id=subtitle]]
+[[!template text="I wanted to challenge myself and just be, like," start="00:07:57.357" video="mainVideo" id=subtitle]]
+[[!template text="can I do this just all with Emacs? Can I just make this?" start="00:07:59.701" video="mainVideo" id=subtitle]]
+[[!template text="I don't need a... I don't need Ruby." start="00:08:03.520" video="mainVideo" id=subtitle]]
+[[!template text="I don't need Rails. I don't need Node." start="00:08:05.134" video="mainVideo" id=subtitle]]
+[[!template text="I don't need any of this other stuff." start="00:08:06.707" video="mainVideo" id=subtitle]]
+[[!template text="I have my tool right here. It's a fully..." start="00:08:08.528" video="mainVideo" id=subtitle]]
+[[!template text="It's a whole operating system, basically," start="00:08:10.560" video="mainVideo" id=subtitle]]
+[[!template text="plus programming languages." start="00:08:12.560" video="mainVideo" id=subtitle]]
+[[!template text="So the first thing I started with" start="00:08:15.039" video="mainVideo" id=subtitle]]
+[[!template text="was buffer scripting for manipulating text." start="00:08:17.171" video="mainVideo" id=subtitle]]
+[[!template text="That's kind of the easiest way to do it." start="00:08:19.919" video="mainVideo" id=subtitle]]
+[[!template text="Basically, anything you can do in a buffer," start="00:08:22.560" video="mainVideo" id=subtitle]]
+[[!template text="you can do programmatically with Elisp." start="00:08:24.692" video="mainVideo" id=subtitle]]
+[[!template text="So this might be a good example for beginners." start="00:08:27.834" video="mainVideo" id=subtitle]]
+[[!template text="If you haven't done any Elisp yet," start="00:08:30.217" video="mainVideo" id=subtitle]]
+[[!template text="a simple example is to create this div output here." start="00:08:33.919" video="mainVideo" id=subtitle]]
+[[!template text="You can use this with-temp-buffer," start="00:08:39.557" video="mainVideo" id=subtitle]]
+[[!template text="so basically creating an imaginary buffer." start="00:08:41.581" video="mainVideo" id=subtitle]]
+[[!template text="insert is just like typing," start="00:08:44.240" video="mainVideo" id=subtitle]]
+[[!template text="so you put strings in, you put new lines in," start="00:08:45.945" video="mainVideo" id=subtitle]]
+[[!template text="you can build some strings together." start="00:08:48.800" video="mainVideo" id=subtitle]]
+[[!template text="Here you can see I'm doing a random number," start="00:08:50.959" video="mainVideo" id=subtitle]]
+[[!template text="so every time I execute this," start="00:08:53.551" video="mainVideo" id=subtitle]]
+[[!template text="my content changes." start="00:08:55.360" video="mainVideo" id=subtitle]]
+[[!template text="I can generate dynamic content in HTML blocks with Elisp." start="00:08:56.790" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For my web page builder, it's a little more complex." start="00:09:03.685" video="mainVideo" id=subtitle]]
+[[!template text="I'm pulling data out" start="00:09:06.493" video="mainVideo" id=subtitle]]
+[[!template text="using EMMS data structures," start="00:09:08.000" video="mainVideo" id=subtitle]]
+[[!template text="so it's pulling that out from the track data." start="00:09:12.080" video="mainVideo" id=subtitle]]
+[[!template text="And then I'm using some program to" start="00:09:16.080" video="mainVideo" id=subtitle]]
+[[!template text="generate list elements, so each track is" start="00:09:19.440" video="mainVideo" id=subtitle]]
+[[!template text="going to have the title and track number," start="00:09:21.440" video="mainVideo" id=subtitle]]
+[[!template text="and then a button for playing it," start="00:09:24.086" video="mainVideo" id=subtitle]]
+[[!template text="plus the source of the audio file," start="00:09:25.869" video="mainVideo" id=subtitle]]
+[[!template text="which will get added here." start="00:09:28.206" video="mainVideo" id=subtitle]]
+[[!template text="Right now, this is hard coded for Opus," start="00:09:30.480" video="mainVideo" id=subtitle]]
+[[!template text="so it won't work for my MP3s." start="00:09:32.485" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to skip over snippets." start="00:09:37.200" video="mainVideo" id=subtitle]]
+[[!template text="Turns out format strings were good enough for me." start="00:09:38.867" video="mainVideo" id=subtitle]]
+[[!template text="Snippets could be useful," start="00:09:42.017" video="mainVideo" id=subtitle]]
+[[!template text="but format is super powerful," start="00:09:45.035" video="mainVideo" id=subtitle]]
+[[!template text="and I didn't really even need all that much power," start="00:09:47.267" video="mainVideo" id=subtitle]]
+[[!template text="basically, just doing string interpolation." start="00:09:49.839" video="mainVideo" id=subtitle]]
+[[!template text="So if you haven't seen format before," start="00:09:52.187" video="mainVideo" id=subtitle]]
+[[!template text="you basically put these control strings" start="00:09:54.560" video="mainVideo" id=subtitle]]
+[[!template text="or control characters inside of a string," start="00:09:56.720" video="mainVideo" id=subtitle]]
+[[!template text="and you can generate an output string that you want." start="00:09:59.120" video="mainVideo" id=subtitle]]
+[[!template text="So in my generator code, basically," start="00:10:05.040" video="mainVideo" id=subtitle]]
+[[!template text="it's down here," start="00:10:07.344" video="mainVideo" id=subtitle]]
+[[!template text="I'm calling format with this Bard Bivou(m)acs template," start="00:10:08.720" video="mainVideo" id=subtitle]]
+[[!template text="and that's basically a big string of HTML." start="00:10:12.800" video="mainVideo" id=subtitle]]
+[[!template text="It's just my whole page of HTML" start="00:10:17.491" video="mainVideo" id=subtitle]]
+[[!template text="with those control characters in just four places." start="00:10:21.200" video="mainVideo" id=subtitle]]
+[[!template text="One of them populates the track list." start="00:10:24.399" video="mainVideo" id=subtitle]]
+[[!template text="That's really the meat of the program." start="00:10:26.399" video="mainVideo" id=subtitle]]
+[[!template text="Again, this is a combination of using buffer scripting, using HTML mode," start="00:10:29.760" video="mainVideo" id=subtitle]]
+[[!template text="inserting text format strings," start="00:10:34.746" video="mainVideo" id=subtitle]]
+[[!template text="and then I can indent-region" start="00:10:37.279" video="mainVideo" id=subtitle]]
+[[!template text="so the HTML actually looks pretty" start="00:10:39.251" video="mainVideo" id=subtitle]]
+[[!template text="when it comes out of it as well." start="00:10:41.920" video="mainVideo" id=subtitle]]
+[[!template text="I will show that, just really quick actually." start="00:10:45.200" video="mainVideo" id=subtitle]]
+[[!template text="So you can see, this is the HTML that got generated." start="00:10:54.000" video="mainVideo" id=subtitle]]
+[[!template text="I've got my template." start="00:10:57.540" video="mainVideo" id=subtitle]]
+[[!template text="I inserted the title here, the style," start="00:10:58.800" video="mainVideo" id=subtitle]]
+[[!template text="the font was all inserted," start="00:11:02.193" video="mainVideo" id=subtitle]]
+[[!template text="and then this whole list of of tracks here." start="00:11:05.760" video="mainVideo" id=subtitle]]
+[[!template text="It's kind of messy to look at," start="00:11:07.920" video="mainVideo" id=subtitle]]
+[[!template text="but this track list, this whole div here," start="00:11:11.200" video="mainVideo" id=subtitle]]
+[[!template text="is all generated by my generator code, and it works. It's great." start="00:11:14.399" video="mainVideo" id=subtitle]]
+[[!template text="Okay, moving on." start="00:11:22.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So the other thing was that as I was developing this," start="00:11:27.120" video="mainVideo" id=subtitle]]
+[[!template text="I decided to use Org Babel" start="00:11:30.945" video="mainVideo" id=subtitle]]
+[[!template text="and some of its features for multi-language things" start="00:11:32.547" video="mainVideo" id=subtitle]]
+[[!template text="because I needed to style it with CSS" start="00:11:35.588" video="mainVideo" id=subtitle]]
+[[!template text="and put actions in Javascript," start="00:11:37.839" video="mainVideo" id=subtitle]]
+[[!template text="and also I used SVG for authoring stuff." start="00:11:39.835" video="mainVideo" id=subtitle]]
+[[!template text="It was a little bit complicated." start="00:11:42.480" video="mainVideo" id=subtitle]]
+[[!template text="It probably would have been simpler" start="00:11:46.079" video="mainVideo" id=subtitle]]
+[[!template text="had I not used Org Babel," start="00:11:47.484" video="mainVideo" id=subtitle]]
+[[!template text="but it's also really fun." start="00:11:48.680" video="mainVideo" id=subtitle]]
+[[!template text="I think it's a cool, cool idea to use literate programming." start="00:11:49.894" video="mainVideo" id=subtitle]]
+[[!template text="My idea was to create HTML components." start="00:11:53.663" video="mainVideo" id=subtitle]]
+[[!template text="I could name it like this," start="00:11:57.001" video="mainVideo" id=subtitle]]
+[[!template text="put a format string inside it," start="00:11:59.519" video="mainVideo" id=subtitle]]
+[[!template text="and build a function" start="00:12:00.959" video="mainVideo" id=subtitle]]
+[[!template text="in Elisp to format it" start="00:12:02.800" video="mainVideo" id=subtitle]]
+[[!template text="and spit out the HTML that I want." start="00:12:04.302" video="mainVideo" id=subtitle]]
+[[!template text="By doing this, then," start="00:12:07.120" video="mainVideo" id=subtitle]]
+[[!template text="I can just change things in my Org file," start="00:12:09.581" video="mainVideo" id=subtitle]]
+[[!template text="which, not getting a whole lot of time to work on it," start="00:12:12.388" video="mainVideo" id=subtitle]]
+[[!template text="I can come back to it" start="00:12:14.814" video="mainVideo" id=subtitle]]
+[[!template text="and I have a lot of notes." start="00:12:16.615" video="mainVideo" id=subtitle]]
+[[!template text="I can kind of generate things as I'm going" start="00:12:19.335" video="mainVideo" id=subtitle]]
+[[!template text="and keep notes for myself, and keep the..." start="00:12:21.695" video="mainVideo" id=subtitle]]
+[[!template text="I don't know. It's cool." start="00:12:24.399" video="mainVideo" id=subtitle]]
+[[!template text="Literate programming is fun." start="00:12:25.308" video="mainVideo" id=subtitle]]
+[[!template text="So I don't need to" start="00:12:26.672" video="mainVideo" id=subtitle]]
+[[!template text="go into that too much, but you can see if" start="00:12:27.519" video="mainVideo" id=subtitle]]
+[[!template text="I execute this here," start="00:12:29.279" video="mainVideo" id=subtitle]]
+[[!template text="I get the the div that I want." start="00:12:31.040" video="mainVideo" id=subtitle]]
+[[!template text="It's a little bit funny." start="00:12:32.983" video="mainVideo" id=subtitle]]
+[[!template text="You'll see I have the string like this," start="00:12:34.013" video="mainVideo" id=subtitle]]
+[[!template text="the way that noweb expands, I can't do this on a single line." start="00:12:35.786" video="mainVideo" id=subtitle]]
+[[!template text="It looks funny when you do that," start="00:12:40.000" video="mainVideo" id=subtitle]]
+[[!template text="so that might be something to work out later." start="00:12:43.839" video="mainVideo" id=subtitle]]
+[[!template text="CSS blocks can either be tangled out" start="00:12:45.931" video="mainVideo" id=subtitle]]
+[[!template text="and referenced in the HTML source, or inlined." start="00:12:48.959" video="mainVideo" id=subtitle]]
+[[!template text="Here's an example I have of inlining it." start="00:12:52.639" video="mainVideo" id=subtitle]]
+[[!template text="So I've got my little CSS block named style," start="00:12:54.639" video="mainVideo" id=subtitle]]
+[[!template text="Javascript named script," start="00:12:57.609" video="mainVideo" id=subtitle]]
+[[!template text="and then I've got this HTML source block" start="00:13:00.320" video="mainVideo" id=subtitle]]
+[[!template text="with noweb expansion." start="00:13:03.040" video="mainVideo" id=subtitle]]
+[[!template text="These double angle brackets here" start="00:13:04.839" video="mainVideo" id=subtitle]]
+[[!template text="are where I'm going to expand" start="00:13:07.920" video="mainVideo" id=subtitle]]
+[[!template text="the block named style. I'm actually calling a function," start="00:13:09.396" video="mainVideo" id=subtitle]]
+[[!template text="so I want the result of the function here," start="00:13:12.639" video="mainVideo" id=subtitle]]
+[[!template text="and then the script will just get expanded here." start="00:13:14.737" video="mainVideo" id=subtitle]]
+[[!template text="So org-babel-expand-src-block," start="00:13:18.881" video="mainVideo" id=subtitle]]
+[[!template text="you can see what it looks like." start="00:13:22.959" video="mainVideo" id=subtitle]]
+[[!template text="I've got my style here. I've got my title." start="00:13:25.360" video="mainVideo" id=subtitle]]
+[[!template text="I've got that main content class I showed before," start="00:13:28.160" video="mainVideo" id=subtitle]]
+[[!template text="and the script as well. So that's kind of cool." start="00:13:31.279" video="mainVideo" id=subtitle]]
+[[!template text="I could just run org-babel-tangle and get my thing out" start="00:13:34.480" video="mainVideo" id=subtitle]]
+[[!template text="and just edit one file instead of multiple files." start="00:13:37.527" video="mainVideo" id=subtitle]]
+[[!template text="Not for everyone, but I thought it was kind of fun. All right." start="00:13:40.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Oh, and the final thing is that in Emacs," start="00:13:46.455" video="mainVideo" id=subtitle]]
+[[!template text="you can author and view SVG." start="00:13:48.807" video="mainVideo" id=subtitle]]
+[[!template text="So this is just an Org. This SVG, I used to make the play and pause buttons." start="00:13:51.320" video="mainVideo" id=subtitle]]
+[[!template text="I didn't know this," start="00:13:58.297" video="mainVideo" id=subtitle]]
+[[!template text="but if you edit an SVG file," start="00:13:59.519" video="mainVideo" id=subtitle]]
+[[!template text="you can toggle back and forth" start="00:14:02.162" video="mainVideo" id=subtitle]]
+[[!template text="between the code and the image." start="00:14:08.800" video="mainVideo" id=subtitle]]
+[[!template text="It's pretty sweet. So I can iteratively" start="00:14:13.199" video="mainVideo" id=subtitle]]
+[[!template text="work through this because of how Emacs is." start="00:14:17.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Final considerations here," start="00:14:20.560" video="mainVideo" id=subtitle]]
+[[!template text="like when doing this," start="00:14:24.959" video="mainVideo" id=subtitle]]
+[[!template text="I want it to be all free," start="00:14:26.247" video="mainVideo" id=subtitle]]
+[[!template text="so I want to use fonts that use a free license." start="00:14:27.606" video="mainVideo" id=subtitle]]
+[[!template text="I found GNU Unifont. It's kind of cool." start="00:14:30.079" video="mainVideo" id=subtitle]]
+[[!template text="The content license..." start="00:14:32.800" video="mainVideo" id=subtitle]]
+[[!template text="I chose Creative Commons Attribution ShareAlike," start="00:14:34.333" video="mainVideo" id=subtitle]]
+[[!template text="which is kind of like the GPL." start="00:14:37.600" video="mainVideo" id=subtitle]]
+[[!template text="Ideally, I could serve it with Emacs." start="00:14:39.920" video="mainVideo" id=subtitle]]
+[[!template text="I'd like to remove idiosyncrasy so other people can use it." start="00:14:42.663" video="mainVideo" id=subtitle]]
+[[!template text="It's pretty much just my tool right now." start="00:14:46.320" video="mainVideo" id=subtitle]]
+[[!template text="Not requiring the web browser..." start="00:14:48.720" video="mainVideo" id=subtitle]]
+[[!template text="I can ship playlists so that you can just click or link to a playlist" start="00:14:50.734" video="mainVideo" id=subtitle]]
+[[!template text="on your favorite player, even EMMS if you want," start="00:14:56.648" video="mainVideo" id=subtitle]]
+[[!template text="and then packing up those albums in like a ZIP or .tar file." start="00:15:00.068" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So you can go to churls.world ." start="00:15:04.320" video="mainVideo" id=subtitle]]
+[[!template text="It just has a link to this album." start="00:15:08.639" video="mainVideo" id=subtitle]]
+[[!template text="I'll display it here in just a second." start="00:15:10.644" video="mainVideo" id=subtitle]]
+[[!template text="You can contact me. I'm shoshin on #emacs" start="00:15:14.000" video="mainVideo" id=subtitle]]
+[[!template text="in IRC and on sourcehut. You can email me:" start="00:15:17.519" video="mainVideo" id=subtitle]]
+[[!template text="grant@churls.world, personal, or" start="00:15:21.040" video="mainVideo" id=subtitle]]
+[[!template text="grant@unabridgedsoftware.com. All right, now." start="00:15:23.680" video="mainVideo" id=subtitle]]
+[[!template text="Let's see about this..." start="00:15:26.800" video="mainVideo" id=subtitle]]
+[[!template text="This is up online, so if you want to listen" start="00:15:32.079" video="mainVideo" id=subtitle]]
+[[!template text="to my college band's album from 20 years ago," start="00:15:34.316" video="mainVideo" id=subtitle]]
+[[!template text="here it is: Cassiopeia Basement Days." start="00:15:39.199" video="mainVideo" id=subtitle]]
+[[!template text="Whoops. I made this art in Krita." start="00:15:43.040" video="mainVideo" id=subtitle]]
+[[!template text="You can press play. You can skip around." start="00:15:46.887" video="mainVideo" id=subtitle]]
+[[!template text="I do have the playlist up here too." start="00:15:51.199" video="mainVideo" id=subtitle]]
+[[!template text="So yeah, thanks for listening." start="00:15:55.040" video="mainVideo" id=subtitle]]
+[[!template text="I hope you enjoyed it, and enjoy the rest of EmacsConf. Goodbye!" start="00:15:58.560" video="mainVideo" id=subtitle]]
<!-- transcript: 2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt -->
<a name="transcript-questions"></a>
-# Transcript: Q&A
-
-So first question, what does Bard Bivou(m)acs mean? Good question. In
-one version of my talk, I spent too long explaining it, and decided to
-cut it out. It's basically a bad pun on band camp. A bivouac--I don't
-even know if I'm pronouncing that correctly--it's like a tent or a
-camp that you put up hastily, and a bard is a musician, of course.
-Yeah, I don't know. I like puns. I'm a dad. That's the best I could
-come up with. I'll probably find a different name for it but I liked
-that "bivoaucs," if you stick an m in there, it becomes Bivou(m)acs.
-It's kind of like editor macros for generating some HTML. Yes, it is
-confusing, chatting on IRC at the same time. Great question. (Amin:
-Grant, so right now, you're sharing your screen. Are you planning on
-showing something with it, or for example, should I maximize you?) I
-don't know. I can turn it off for now. Okay. (Amin: You can turn on
-the webcam.) Yeah, okay. (Amin: I'll maximize your webcam.) Okay,
-thanks. I'll get to the answer for my color theme here in a bit in
-IRC.
-
-(<a href="#qnaVideo" class="time-link">1:31</a>)
-Next question on the Etherpad, does this metadata workflow also
-support unsynchronized lyrics within ID3 tags, multi-line metadata? I
-don't know, actually. It's funny because I was trying out different
-things with metadata, and really the biggest thing was to figure out
-how to do mass tag editing. And that was like... It wasn't very
-intuitive, like I said, with EMMS. I think EMMS is really great, but
-its interface is huge. like if you do M-x and type emms, you get I
-don't know, 270-some candidates. There's a lot of functions going on.
-I basically found the features that I needed to get this workflow
-working. I would guess that you probably can do it, and if you don't,
-if you can't do it out of the box, I think you could script EMMS to do
-that. I'd like to know more, and I'm certainly going to be
-investigating it. I will try and post my findings somewhere online.
-
-(<a href="#qnaVideo" class="time-link">2:39</a>)
-Is it possible to import batch metadata? I'm not sure. I would
-guess yes is the answer. EMMS can connect to metadata services. I
-haven't done that because I was just using audio files that I created
-myself. I know that on the back end, it calls out to shell programs
-for tagging things. there's a lot of different options that can shell
-out too. I was using the the vorbis tools to tag the particular files
-I was working with. You can also use tiny tag, and there's some
-other... That might be the python library. I can't remember. There's
-two other libraries that I can shell out to for doing metadata.
-
-(<a href="#qnaVideo" class="time-link">3:24</a>)
-My current workflow for tagging music is to first apply replay
-gain in fubar 2000, fix egregious mistakes, use beats to apply
-metadata from music brains, or discogs, go over remaining albums with
-fubar 2000 again. Is there a chance textual tagging could allow doing
-it all in one program? Have I experimented with mass tag update
-queries? I have not. Again, I was just doing this workflow, taking raw
-files with no tags and doing that. I believe because it calls out to
-the programs in the back end, I'm sure you could work that out. I
-think EMMS would benefit from having something like that because we
-work with text, and being able to use Emacs as a front end for those
-updates would be really fantastic. So really, it's just a matter of
-writing the interface to the external tool.
-
-(<a href="#qnaVideo" class="time-link">4:22</a>)
-Is there a link to some info expanding philosophy of how to
-compensate musicians? No, I don't really have a lot of philosophy
-around that. I guess the first thing I could say would be something
-like a universal income. I feel like that would solve a lot of
-problems, if musicians could just be musicians and not have to worry
-about their pay. I will think about it more. This is one of my first
-forays into getting public with some of these ideas, so I will try to
-do more and let the community know.
-
-(<a href="#qnaVideo" class="time-link">4:54</a>)
-What Emacs theme am I using? Can't remember. It's one of the
-Kaolin themes. I think it was Aurora or or Bubble Gum, maybe, but the
-Kaolin themes are nice. I recommend them. Not using Doom Emacs, Doom
-mode line though. It's very pretty.
-
-(<a href="#qnaVideo" class="time-link">5:17</a>)
-SVG support built into Emacs? I'm using Emacs 27.1, and yes,
-SVG support is built in. I may have had to compile it with some Cairo
-support. I don't remember for sure. But yes, you can even take
-screenshots of your Emacs from within Emacs in SVG. It's pretty great.
-I don't know how much more time we have left for questions. That's
-most of the things on the etherpad. (Amin: I think we have like 10
-more minutes to catch up with the schedule. If there are more
-questions, feel free to answer them.) I'll start looking through IRC.
-(Amin: And keep an eye on the pad too.) Thank you all for listening
-and for enjoying the talk. I'm glad it turned out well. Awesome. Yeah,
-it's been fun so far. How did I manage? I can post a snippet of that,
-or actually I can share my screen, can't I... Okay. I actually have it
-up right here.
-
-(<a href="#qnaVideo" class="time-link">6:49</a>)
-So I think I got this from alphapapa, to be honest. I define
-screenshot-svg. It's an interactive command. Oh yeah, there's
-alphae.papa Okay, there we go. I would like to change this so that I
-can get it into the copy-paste buffer so I don't have to copy the file
-in, but I haven't really hacked on it yet.
-
-(<a href="#qnaVideo" class="time-link">7:20</a>)
-Okay, org heading colors. That might be a good question. I know, the
-presentation... Sorry, it's hard to think and type at the same time.
-Think and talk and type.
-
-(<a href="#qnaVideo" class="time-link">7:41</a>)
-So the presentation is just a normal org file, right, so I have my
-headers, and the author--you can even stick your email and other
-headers in there. But there's a package called org-tree-slide. Whoops,
-why is it not... I must have not required it. Good question. (Amin:
-Grant, can you try sharing your screen maybe?) Oh, is it not shared?
-I'm sorry. (Amin: Thank you.) There we go, should be coming up. (Amin:
-It's coming up. Yep, we see it.) Awesome. All right. Okay. I don't
-know why this isn't working. It was working. Okay, you want to see the
-screenshot. Whoops. Okay, I just took a screenshot. So, org-tree-slide.
-I don't know why it's not launching. I thought that I had required it,
-but I must not have. Maybe I'll try. Okay. So there we go. So
-org-tree-slide is a way that basically uses narrowing and some kind of
-font tricks to... it changes your titles or your metadata into this
-banner for the title here, and it automatically sets the faces for
-you. You can customize that, of course. And then, as you go through
-the Org file, you get these kind of nice animations and-- what's it
-called--breadcrumbs up at the top. So org-tree-slide. I highly
-recommend it. It's really nice because you can give your presentation
-and practice it, and while you're practicing it, you can edit things
-as well, because it's still just an Org document using narrowing, you
-know. It doesn't actually change anything. Definitely recommend
-org-tree-slide mode. Okay, let's see, what else...
-
-(<a href="#qnaVideo" class="time-link">10:29</a>)
-Share my screen to demo. Oh, that's the SVG. Let's see. Okay, so I
-don't know if you can see this now, but I'm actually viewing the SVG
-screenshot that I took with Emacs. See here's the source of it. So
-Emacs made that. And here's the image. It's cool because you can even
-do it again and again, and open more screenshots of screenshots. Yeah,
-definitely Emacsception. Fun stuff. Anything else in chat? Heading
-colors? Oh, yeah. I talked about the themes. This is another Kaolin
-theme. I think the one in the talk was maybe this one, Aurora. Oh,
-here, there's something funny when you start org-tree-slide with a
-different theme. This top header bar gets the faces from that previous
-theme. I have not figured out how to fix that yet. Did I have to
-compile to get the screenshot? I think maybe I did. Yes, if I'm
-remembering correctly. I got Emacs 27. I'm not on a Mac. I saw
-alphapapa's comment on reddit, and then I recompiled it with Cairo
-support. Yes.
-
-(<a href="#qnaVideo" class="time-link">12:18</a>)
-Okay, lots of good conversation on here. Yep, I have like one or two
-more minutes. Okay I guess while I'm here, I might as well say thank
-you to the organizers. I really appreciate everybody's work on this.
-It's fun to be a part of this community. I'm enjoying the other talks
-I've seen so far today, and I'm looking forward to to the rest. It's
-really interesting, just from being on Emacs in IRC for a few months,
-I've already connected with a lot of interesting people and have a lot
-of cool connections already. (Amin: Thank you for being a part of the
-community, Grant.) That's good to be here. I have another talk
-tomorrow as well. Oh, thanks for everyone in the Etherpad for putting
-more comments on these questions here and taking the notes. (Amin: I
-think that's about all the time that we have for the Q&A. Okay. Thank
-you again so much, Grant, for your awesome talk and for popping in for
-questions.) Yeah, thanks again for hosting. See you later. Cheers!
-
-<!-- /transcript -->
+# Transcript (questions)
+
+[[!template new="1" text="So first question, what does Bard Bivou(m)acs mean? Good question." start="00:00:03.360" video="qnaVideo" id=subtitle]]
+[[!template text="In one version of my talk, I spent too long explaining it," start="00:00:07.440" video="qnaVideo" id=subtitle]]
+[[!template text="and decided to cut it out." start="00:00:10.800" video="qnaVideo" id=subtitle]]
+[[!template text="It's basically a bad pun on band camp." start="00:00:14.559" video="qnaVideo" id=subtitle]]
+[[!template text="A bivouac--I don't even know if I'm" start="00:00:20.960" video="qnaVideo" id=subtitle]]
+[[!template text="pronouncing that correctly--it's like" start="00:00:22.480" video="qnaVideo" id=subtitle]]
+[[!template text="a tent or a camp that you put up hastily," start="00:00:25.199" video="qnaVideo" id=subtitle]]
+[[!template text="and a bard is a musician, of course." start="00:00:29.199" video="qnaVideo" id=subtitle]]
+[[!template text="Yeah, I don't know. I like puns. I'm a dad." start="00:00:32.239" video="qnaVideo" id=subtitle]]
+[[!template text="That's the best I could come up with." start="00:00:36.480" video="qnaVideo" id=subtitle]]
+[[!template text="I'll probably find a different name for" start="00:00:40.960" video="qnaVideo" id=subtitle]]
+[[!template text="it but I liked that &quot;bivoaucs,&quot;" start="00:00:42.879" video="qnaVideo" id=subtitle]]
+[[!template text="if you stick an m in there, it becomes Bivou(m)acs." start="00:00:45.039" video="qnaVideo" id=subtitle]]
+[[!template text="It's kind of like editor macros for generating some HTML." start="00:00:48.719" video="qnaVideo" id=subtitle]]
+[[!template text="Yes, it is confusing, chatting on IRC at the same time. Great question." start="00:01:00.160" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: Grant, so right now, you're sharing your screen." start="00:01:07.782" video="qnaVideo" id=subtitle]]
+[[!template text="Are you planning on showing something with it, or for example," start="00:01:11.398" video="qnaVideo" id=subtitle]]
+[[!template text="should I maximize you?)" start="00:01:14.479" video="qnaVideo" id=subtitle]]
+[[!template text="I don't know. I can turn it off for now. Okay." start="00:01:16.036" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: You can turn on the webcam.)" start="00:01:20.400" video="qnaVideo" id=subtitle]]
+[[!template text="Yeah, okay." start="00:01:22.299" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: I'll maximize your webcam.)" start="00:01:22.880" video="qnaVideo" id=subtitle]]
+[[!template text="Okay, thanks." start="00:01:25.694" video="qnaVideo" id=subtitle]]
+[[!template text="I'll get to the answer for my color" start="00:01:28.240" video="qnaVideo" id=subtitle]]
+[[!template text="theme here in a bit in IRC." start="00:01:30.000" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="Next question on the Etherpad," start="00:01:31.360" video="qnaVideo" id=subtitle]]
+[[!template text="does this metadata workflow also support" start="00:01:35.105" video="qnaVideo" id=subtitle]]
+[[!template text="unsynchronized lyrics within ID3 tags," start="00:01:38.479" video="qnaVideo" id=subtitle]]
+[[!template text="multi-line metadata?" start="00:01:41.360" video="qnaVideo" id=subtitle]]
+[[!template text="I don't know, actually." start="00:01:42.720" video="qnaVideo" id=subtitle]]
+[[!template text="It's funny because I was trying out" start="00:01:45.920" video="qnaVideo" id=subtitle]]
+[[!template text="different things with metadata," start="00:01:47.920" video="qnaVideo" id=subtitle]]
+[[!template text="and really the biggest thing was to" start="00:01:49.280" video="qnaVideo" id=subtitle]]
+[[!template text="figure out how to do mass tag editing." start="00:01:52.640" video="qnaVideo" id=subtitle]]
+[[!template text="And that was like..." start="00:01:55.360" video="qnaVideo" id=subtitle]]
+[[!template text="It wasn't very intuitive, like I said, with EMMS." start="00:01:56.399" video="qnaVideo" id=subtitle]]
+[[!template text="I think EMMS is really great, but its interface is huge." start="00:01:59.600" video="qnaVideo" id=subtitle]]
+[[!template text="like if you do M-x and type emms, you get," start="00:02:03.040" video="qnaVideo" id=subtitle]]
+[[!template text="I don't know, 270-some candidates." start="00:02:07.040" video="qnaVideo" id=subtitle]]
+[[!template text="There's a lot of functions going on." start="00:02:10.160" video="qnaVideo" id=subtitle]]
+[[!template text="I basically found the features that I needed to get this workflow working." start="00:02:13.200" video="qnaVideo" id=subtitle]]
+[[!template text="I would guess that you probably can do it, and if you don't," start="00:02:18.879" video="qnaVideo" id=subtitle]]
+[[!template text="if you can't do it out of the box," start="00:02:22.160" video="qnaVideo" id=subtitle]]
+[[!template text="I think you could script EMMS to do that." start="00:02:24.026" video="qnaVideo" id=subtitle]]
+[[!template text="I'd like to know more, and I'm certainly going to be investigating it." start="00:02:28.160" video="qnaVideo" id=subtitle]]
+[[!template text="I will try and post my findings somewhere online." start="00:02:33.268" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="Is it possible to import batch metadata?" start="00:02:39.519" video="qnaVideo" id=subtitle]]
+[[!template text="I'm not sure. I would guess yes is the answer." start="00:02:42.080" video="qnaVideo" id=subtitle]]
+[[!template text="EMMS can connect to metadata services." start="00:02:46.496" video="qnaVideo" id=subtitle]]
+[[!template text="I haven't done that because I was just" start="00:02:50.712" video="qnaVideo" id=subtitle]]
+[[!template text="using audio files that I created myself." start="00:02:53.040" video="qnaVideo" id=subtitle]]
+[[!template text="I know that on the back end, it calls out" start="00:02:56.959" video="qnaVideo" id=subtitle]]
+[[!template text="to shell programs for tagging things." start="00:03:00.165" video="qnaVideo" id=subtitle]]
+[[!template text="There's a lot of different options that can shell out too." start="00:03:02.319" video="qnaVideo" id=subtitle]]
+[[!template text="I was using the vorbis tools to tag the particular files I was working with." start="00:03:06.165" video="qnaVideo" id=subtitle]]
+[[!template text="You can also use tiny tag, and there's some other..." start="00:03:12.239" video="qnaVideo" id=subtitle]]
+[[!template text="That might be the python library." start="00:03:15.840" video="qnaVideo" id=subtitle]]
+[[!template text="I can't remember. There's two other libraries that I can shell out to" start="00:03:17.498" video="qnaVideo" id=subtitle]]
+[[!template text="for doing metadata." start="00:03:20.971" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="My current workflow for tagging music is" start="00:03:24.400" video="qnaVideo" id=subtitle]]
+[[!template text="to first apply replay gain in fubar 2000," start="00:03:26.400" video="qnaVideo" id=subtitle]]
+[[!template text="fix egregious mistakes," start="00:03:29.040" video="qnaVideo" id=subtitle]]
+[[!template text="use beats to apply metadata from music brains or discogs," start="00:03:31.119" video="qnaVideo" id=subtitle]]
+[[!template text="go over remaining albums with fubar 2000 again." start="00:03:35.118" video="qnaVideo" id=subtitle]]
+[[!template text="Is there a chance textual tagging could allow doing it all in one program?" start="00:03:38.400" video="qnaVideo" id=subtitle]]
+[[!template text="Have I experimented with mass tag update queries?" start="00:03:43.280" video="qnaVideo" id=subtitle]]
+[[!template text="I have not." start="00:03:46.400" video="qnaVideo" id=subtitle]]
+[[!template text="Again, I was just doing this workflow," start="00:03:47.280" video="qnaVideo" id=subtitle]]
+[[!template text="taking raw files with no tags and doing that." start="00:03:49.120" video="qnaVideo" id=subtitle]]
+[[!template text="I believe because it calls out to" start="00:03:54.799" video="qnaVideo" id=subtitle]]
+[[!template text="the programs in the back end," start="00:03:58.159" video="qnaVideo" id=subtitle]]
+[[!template text="I'm sure you could work that out." start="00:04:00.811" video="qnaVideo" id=subtitle]]
+[[!template text="I think EMMS would benefit from" start="00:04:03.040" video="qnaVideo" id=subtitle]]
+[[!template text="having something like that because" start="00:04:06.159" video="qnaVideo" id=subtitle]]
+[[!template text="we work with text, and being able" start="00:04:08.239" video="qnaVideo" id=subtitle]]
+[[!template text="to use Emacs as a front end for those" start="00:04:11.280" video="qnaVideo" id=subtitle]]
+[[!template text="updates would be really fantastic." start="00:04:14.000" video="qnaVideo" id=subtitle]]
+[[!template text="So really, it's just a matter of" start="00:04:16.647" video="qnaVideo" id=subtitle]]
+[[!template text="writing the interface to the external tool." start="00:04:18.560" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="Is there a link to some info expanding" start="00:04:22.720" video="qnaVideo" id=subtitle]]
+[[!template text="philosophy of how to compensate musicians?" start="00:04:24.560" video="qnaVideo" id=subtitle]]
+[[!template text="No, I don't really have a lot of" start="00:04:28.479" video="qnaVideo" id=subtitle]]
+[[!template text="philosophy around that." start="00:04:31.199" video="qnaVideo" id=subtitle]]
+[[!template text="I guess the first thing I could say would be" start="00:04:32.052" video="qnaVideo" id=subtitle]]
+[[!template text="something like a universal income." start="00:04:33.919" video="qnaVideo" id=subtitle]]
+[[!template text="I feel like that would solve a lot of problems," start="00:04:36.378" video="qnaVideo" id=subtitle]]
+[[!template text="if musicians could just be musicians" start="00:04:38.960" video="qnaVideo" id=subtitle]]
+[[!template text="and not have to worry about their pay." start="00:04:41.772" video="qnaVideo" id=subtitle]]
+[[!template text="I will think about it more." start="00:04:44.742" video="qnaVideo" id=subtitle]]
+[[!template text="This is one of my first forays into getting public with some of these ideas," start="00:04:46.240" video="qnaVideo" id=subtitle]]
+[[!template text="so I will try to do more" start="00:04:52.015" video="qnaVideo" id=subtitle]]
+[[!template text="and let the community know." start="00:04:53.360" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="What Emacs theme am I using?" start="00:04:55.187" video="qnaVideo" id=subtitle]]
+[[!template text="Can't remember. It's one of the Kaolin themes." start="00:04:57.199" video="qnaVideo" id=subtitle]]
+[[!template text="I think it was Aurora" start="00:05:02.240" video="qnaVideo" id=subtitle]]
+[[!template text="or Bubble Gum, maybe, but the" start="00:05:05.680" video="qnaVideo" id=subtitle]]
+[[!template text="Kaolin themes are nice. I recommend them." start="00:05:09.120" video="qnaVideo" id=subtitle]]
+[[!template text="Not using Doom Emacs, Doom mode line though." start="00:05:12.880" video="qnaVideo" id=subtitle]]
+[[!template text="It's very pretty." start="00:05:16.000" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="SVG support built into Emacs?" start="00:05:17.296" video="qnaVideo" id=subtitle]]
+[[!template text="I'm using Emacs 27.1, and yes, SVG support is built in." start="00:05:20.080" video="qnaVideo" id=subtitle]]
+[[!template text="I may have had to compile it with some Cairo support." start="00:05:25.520" video="qnaVideo" id=subtitle]]
+[[!template text="I don't remember for sure." start="00:05:30.639" video="qnaVideo" id=subtitle]]
+[[!template text="But yes, you can even take screenshots of your Emacs from within Emacs, in SVG." start="00:05:33.840" video="qnaVideo" id=subtitle]]
+[[!template text="It's pretty great." start="00:05:41.199" video="qnaVideo" id=subtitle]]
+[[!template text="I don't know how much more time we have" start="00:05:44.320" video="qnaVideo" id=subtitle]]
+[[!template text="left for questions." start="00:05:46.160" video="qnaVideo" id=subtitle]]
+[[!template text="That's most of the things on the etherpad." start="00:05:48.000" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: I think we have like 10 more minutes to" start="00:05:52.639" video="qnaVideo" id=subtitle]]
+[[!template text="catch up with the schedule." start="00:05:54.320" video="qnaVideo" id=subtitle]]
+[[!template text="If there are more questions," start="00:05:56.479" video="qnaVideo" id=subtitle]]
+[[!template text="feel free to answer them.)" start="00:05:59.120" video="qnaVideo" id=subtitle]]
+[[!template text="I'll start looking through IRC." start="00:06:01.919" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: And keep an eye on the pad too.)" start="00:06:05.440" video="qnaVideo" id=subtitle]]
+[[!template text="Thank you all for listening" start="00:06:09.680" video="qnaVideo" id=subtitle]]
+[[!template text="and for enjoying the talk. I'm glad it turned out well." start="00:06:12.688" video="qnaVideo" id=subtitle]]
+[[!template text="Awesome. Yeah, it's been fun so far." start="00:06:19.440" video="qnaVideo" id=subtitle]]
+[[!template text="How did I manage? I can post a snippet of that," start="00:06:36.000" video="qnaVideo" id=subtitle]]
+[[!template text="or actually I can share my screen, can't I..." start="00:06:40.015" video="qnaVideo" id=subtitle]]
+[[!template text="Okay. I actually have it up right here." start="00:06:46.319" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="So I think I got this from alphapapa, to be honest." start="00:06:49.599" video="qnaVideo" id=subtitle]]
+[[!template text="I define screenshot-svg." start="00:06:53.440" video="qnaVideo" id=subtitle]]
+[[!template text="It's an interactive command. Oh yeah, there's alphapapa." start="00:07:00.960" video="qnaVideo" id=subtitle]]
+[[!template text="Okay, there we go." start="00:07:04.960" video="qnaVideo" id=subtitle]]
+[[!template text="I would like to change this so that I can get it into the copy-paste buffer" start="00:07:08.560" video="qnaVideo" id=subtitle]]
+[[!template text="so I don't have to copy the file in, but I haven't really hacked on it yet." start="00:07:13.249" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="Okay, org heading colors." start="00:07:20.560" video="qnaVideo" id=subtitle]]
+[[!template text="That might be a good question." start="00:07:24.400" video="qnaVideo" id=subtitle]]
+[[!template text="I know, the presentation..." start="00:07:26.319" video="qnaVideo" id=subtitle]]
+[[!template text="Sorry, it's hard to think and type at" start="00:07:33.199" video="qnaVideo" id=subtitle]]
+[[!template text="the same time." start="00:07:35.520" video="qnaVideo" id=subtitle]]
+[[!template text="Think and talk and type." start="00:07:36.479" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="So the presentation is just a" start="00:07:41.680" video="qnaVideo" id=subtitle]]
+[[!template text="normal org file, right, so I have my headers," start="00:07:45.120" video="qnaVideo" id=subtitle]]
+[[!template text="and the author--you can even stick" start="00:07:48.960" video="qnaVideo" id=subtitle]]
+[[!template text="your email and other headers in there." start="00:07:50.466" video="qnaVideo" id=subtitle]]
+[[!template text="But there's a package called org-tree-slide." start="00:07:52.560" video="qnaVideo" id=subtitle]]
+[[!template text="Whoops, why is it not..." start="00:07:57.599" video="qnaVideo" id=subtitle]]
+[[!template text="I must have not required it." start="00:08:01.440" video="qnaVideo" id=subtitle]]
+[[!template text="Good question." start="00:08:03.618" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: Grant, can you try sharing your screen maybe?)" start="00:08:04.594" video="qnaVideo" id=subtitle]]
+[[!template text="Oh, is it not shared? I'm sorry." start="00:08:09.599" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: Thank you.)" start="00:08:13.199" video="qnaVideo" id=subtitle]]
+[[!template text="There we go, should be coming up." start="00:08:17.039" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: It's coming up. Yep, we see it.)" start="00:08:22.000" video="qnaVideo" id=subtitle]]
+[[!template text="Awesome. All right. Okay. I don't know why this isn't working." start="00:08:26.720" video="qnaVideo" id=subtitle]]
+[[!template text="It was working." start="00:08:38.800" video="qnaVideo" id=subtitle]]
+[[!template text="Okay, you want to see the screenshot." start="00:08:56.080" video="qnaVideo" id=subtitle]]
+[[!template text="Whoops. Okay, I just took a screenshot." start="00:09:01.839" video="qnaVideo" id=subtitle]]
+[[!template text="So, org-tree-slide." start="00:09:06.839" video="qnaVideo" id=subtitle]]
+[[!template text="I don't know why it's not launching." start="00:09:09.760" video="qnaVideo" id=subtitle]]
+[[!template text="I thought that I had required it, but I must not have." start="00:09:12.800" video="qnaVideo" id=subtitle]]
+[[!template text="Maybe I'll try. Okay." start="00:09:16.000" video="qnaVideo" id=subtitle]]
+[[!template text="So there we go. So org-tree-slide is a way that basically uses" start="00:09:30.959" video="qnaVideo" id=subtitle]]
+[[!template text="narrowing and some kind of font tricks to..." start="00:09:34.560" video="qnaVideo" id=subtitle]]
+[[!template text="it changes your titles or your metadata into" start="00:09:38.880" video="qnaVideo" id=subtitle]]
+[[!template text="this banner for the title here," start="00:09:42.640" video="qnaVideo" id=subtitle]]
+[[!template text="and it automatically sets the faces for you." start="00:09:44.560" video="qnaVideo" id=subtitle]]
+[[!template text="You can customize that, of course. And then, as you go through the Org file," start="00:09:46.560" video="qnaVideo" id=subtitle]]
+[[!template text="you get these kind of nice animations and--" start="00:09:53.938" video="qnaVideo" id=subtitle]]
+[[!template text="what's it called--breadcrumbs up at the top." start="00:09:59.600" video="qnaVideo" id=subtitle]]
+[[!template text="So org-tree-slide. I highly recommend it." start="00:10:04.160" video="qnaVideo" id=subtitle]]
+[[!template text="It's really nice because you can give your presentation and practice it," start="00:10:06.399" video="qnaVideo" id=subtitle]]
+[[!template text="and while you're practicing it, you can edit things as well," start="00:10:10.024" video="qnaVideo" id=subtitle]]
+[[!template text="because it's still just an Org document using narrowing, you know." start="00:10:12.560" video="qnaVideo" id=subtitle]]
+[[!template text="It doesn't actually change anything." start="00:10:16.160" video="qnaVideo" id=subtitle]]
+[[!template text="Definitely recommend org-tree-slide mode." start="00:10:20.079" video="qnaVideo" id=subtitle]]
+[[!template text="Okay, let's see, what else..." start="00:10:24.079" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="Share my screen to demo. Oh, that's the SVG." start="00:10:29.760" video="qnaVideo" id=subtitle]]
+[[!template text="Let's see." start="00:10:32.880" video="qnaVideo" id=subtitle]]
+[[!template text="Okay, so I don't know if you can see this now," start="00:10:39.519" video="qnaVideo" id=subtitle]]
+[[!template text="but I'm actually viewing the SVG screenshot that I took with Emacs." start="00:10:41.279" video="qnaVideo" id=subtitle]]
+[[!template text="See here's the source of it. So Emacs made that." start="00:10:49.360" video="qnaVideo" id=subtitle]]
+[[!template text="And here's the image." start="00:10:52.720" video="qnaVideo" id=subtitle]]
+[[!template text="It's cool because you can even do it again and again," start="00:10:58.160" video="qnaVideo" id=subtitle]]
+[[!template text="and open more screenshots of screenshots." start="00:11:01.570" video="qnaVideo" id=subtitle]]
+[[!template text="Yeah, definitely Emacsception. Fun stuff." start="00:11:05.360" video="qnaVideo" id=subtitle]]
+[[!template text="Anything else in chat?" start="00:11:14.880" video="qnaVideo" id=subtitle]]
+[[!template text="Heading colors? Oh, yeah. I talked about the" start="00:11:18.079" video="qnaVideo" id=subtitle]]
+[[!template text="themes. This is another Kaolin theme." start="00:11:20.160" video="qnaVideo" id=subtitle]]
+[[!template text="I think the one in the talk was maybe this one, Aurora." start="00:11:24.800" video="qnaVideo" id=subtitle]]
+[[!template text="Oh, here, there's something funny when" start="00:11:34.959" video="qnaVideo" id=subtitle]]
+[[!template text="you start org-tree-slide" start="00:11:36.560" video="qnaVideo" id=subtitle]]
+[[!template text="with a different theme." start="00:11:37.785" video="qnaVideo" id=subtitle]]
+[[!template text="This top header bar gets the faces" start="00:11:38.880" video="qnaVideo" id=subtitle]]
+[[!template text="from that previous theme." start="00:11:41.823" video="qnaVideo" id=subtitle]]
+[[!template text="I have not figured out how to fix that yet." start="00:11:43.395" video="qnaVideo" id=subtitle]]
+[[!template text="Did I have to compile to get the" start="00:11:47.760" video="qnaVideo" id=subtitle]]
+[[!template text="screenshot? I think maybe I did." start="00:11:49.200" video="qnaVideo" id=subtitle]]
+[[!template text="Yes, if I'm remembering correctly." start="00:11:51.120" video="qnaVideo" id=subtitle]]
+[[!template text="I got Emacs 27. I'm not on a Mac." start="00:11:54.480" video="qnaVideo" id=subtitle]]
+[[!template text="I saw alphapapa's comment on reddit," start="00:11:58.399" video="qnaVideo" id=subtitle]]
+[[!template text="and then I recompiled it with Cairo support." start="00:12:01.424" video="qnaVideo" id=subtitle]]
+[[!template text="Yes." start="00:12:08.839" video="qnaVideo" id=subtitle]]
+[[!template new="1" text="Okay, lots of good conversation on here." start="00:12:18.000" video="qnaVideo" id=subtitle]]
+[[!template text="Yep, I have like one or two more minutes." start="00:12:21.920" video="qnaVideo" id=subtitle]]
+[[!template text="Okay. I guess while I'm here, I might as" start="00:12:25.839" video="qnaVideo" id=subtitle]]
+[[!template text="well say thank you to the organizers." start="00:12:34.240" video="qnaVideo" id=subtitle]]
+[[!template text="I really appreciate everybody's work on this." start="00:12:36.993" video="qnaVideo" id=subtitle]]
+[[!template text="It's fun to be a part of this community." start="00:12:40.320" video="qnaVideo" id=subtitle]]
+[[!template text="I'm enjoying the other talks I've seen so far today," start="00:12:42.720" video="qnaVideo" id=subtitle]]
+[[!template text="and I'm looking forward to to the rest." start="00:12:45.929" video="qnaVideo" id=subtitle]]
+[[!template text="It's really interesting, just from being on Emacs in IRC for a few months," start="00:12:48.560" video="qnaVideo" id=subtitle]]
+[[!template text="I've already connected" start="00:12:53.570" video="qnaVideo" id=subtitle]]
+[[!template text="with a lot of interesting people" start="00:12:54.720" video="qnaVideo" id=subtitle]]
+[[!template text="and have a lot of cool connections already." start="00:12:56.959" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: Thank you for being a part of the community, Grant.)" start="00:13:04.079" video="qnaVideo" id=subtitle]]
+[[!template text="That's good to be here." start="00:13:07.519" video="qnaVideo" id=subtitle]]
+[[!template text="I have another talk tomorrow as well." start="00:13:08.883" video="qnaVideo" id=subtitle]]
+[[!template text="Oh, thanks for everyone in the Etherpad" start="00:13:16.560" video="qnaVideo" id=subtitle]]
+[[!template text="for putting more comments on these questions here" start="00:13:18.399" video="qnaVideo" id=subtitle]]
+[[!template text="and taking the notes." start="00:13:21.680" video="qnaVideo" id=subtitle]]
+[[!template text="(Amin: I think that's about all the time" start="00:13:29.360" video="qnaVideo" id=subtitle]]
+[[!template text="that we have for the Q&A." start="00:13:31.680" video="qnaVideo" id=subtitle]]
+[[!template text="Okay. Thank you again so much, Grant," start="00:13:33.040" video="qnaVideo" id=subtitle]]
+[[!template text="for your awesome talk and for popping in for questions.)" start="00:13:36.720" video="qnaVideo" id=subtitle]]
+[[!template text="Yeah, thanks again for hosting. See you later. Cheers!" start="00:13:39.920" video="qnaVideo" id=subtitle]]
diff --git a/2020/info/06.md b/2020/info/06.md
index 7c187a0f..2eae273f 100644
--- a/2020/info/06.md
+++ b/2020/info/06.md
@@ -1,16 +1,16 @@
# Trivial Emacs Kits
Corwin Brust
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.webm" size="114M" duration="13:41" subtitles="/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt"]]
-[Download compressed .webm video (12M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--06-trivial-emacs-kits--corwin-brust--vp9-q56-video-original-audio.webm)
+[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.webm" size="114M" duration="13:41" subtitles="/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt"]]
+[Download compressed .webm video (20.2M)](https://media.emacsconf.org/2020/emacsconf-2020--06-trivial-emacs-kits--corwin-brust--compressed32.webm)
+[Download compressed .webm video (12M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--06-trivial-emacs-kits--corwin-brust--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
Techniques to help new users bootstrap a more gentle introduction to
Emacs, one (short) init.el file at a time.
[[!inline pages="internal(2020/info/dm-notes)" raw="yes"]]
-[[!inline pages="internal(2020/info/06-transcription)" raw="yes"]]
-
<!-- from the pad --->
- Actual start and end time (EST): Start: 2020-11-28T10.45.48; Q&A
@@ -52,3 +52,244 @@ important problem space in free software, FWIW.
- LISP wasn't on the list.
- Disagreement is not the barrier.
- Emacs is threatening as something that addresses many different needs/use-cases.
+
+<a name="transcript"></a>
+# Transcript
+
+ There is a visual gimmick underlaying the initial remarks. We are
+ looking at the first (first-slide ("Welcome") showing how the org
+ markdown looks on other editors, including cygwin emacs, Notepad++,
+ Sublime, VS Code, and cygwin vim. As each is closed we see the next,
+ until we reveal GUI Emacs running org-mode in a full-both frame.
+
+[[!template new="1" text="My name is Corwin Brust" start="00:00:00.399" video="mainVideo" id=subtitle]]
+[[!template text="and I will be talking about getting started with Emacs today." start="00:00:02.683" video="mainVideo" id=subtitle]]
+[[!template text="I have been an Emacs user for a long time." start="00:00:08.960" video="mainVideo" id=subtitle]]
+[[!template new="1" text="First of all, thanks and a huge welcome to the conference" start="00:00:11.448" video="mainVideo" id=subtitle]]
+[[!template text="from me and and on behalf" start="00:00:15.360" video="mainVideo" id=subtitle]]
+[[!template text="and back to the other people" start="00:00:22.400" video="mainVideo" id=subtitle]]
+[[!template text="that have been helping to organize." start="00:00:24.368" video="mainVideo" id=subtitle]]
+[[!template text="It's been amazing just to be involved" start="00:00:26.080" video="mainVideo" id=subtitle]]
+[[!template text="with that and just, kind of, see backstage." start="00:00:30.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I've used a lot of different editors in my time." start="00:00:36.399" video="mainVideo" id=subtitle]]
+[[!template text="That's about 25 years as a professional software engineer." start="00:00:42.281" video="mainVideo" id=subtitle]]
+[[!template text="And most of that time I've been using Emacs." start="00:00:52.399" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I'll talk a little bit in a minute" start="00:00:54.247" video="mainVideo" id=subtitle]]
+[[!template text="(if I can ever find my slides)" start="00:00:56.160" video="mainVideo" id=subtitle]]
+[[!template text="about how I got into Emacs," start="00:01:00.960" video="mainVideo" id=subtitle]]
+[[!template text="but I think if you've used Emacs and a" start="00:01:04.479" video="mainVideo" id=subtitle]]
+[[!template text="lot of other editors for a long time," start="00:01:07.200" video="mainVideo" id=subtitle]]
+[[!template text="something that you notice right away" start="00:01:10.240" video="mainVideo" id=subtitle]]
+[[!template text="is that you get good with it in a way that stays meaningful." start="00:01:14.410" video="mainVideo" id=subtitle]]
+[[!template text="You learn new things. Those things stick with you." start="00:01:18.560" video="mainVideo" id=subtitle]]
+[[!template text="You learn how to make it do new tricks and then keep doing those tricks." start="00:01:24.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I want to mention that this conference--oops," start="00:01:33.759" video="mainVideo" id=subtitle]]
+[[!template text="this talk isn't about how to adjust" start="00:01:39.439" video="mainVideo" id=subtitle]]
+[[!template text="your configuration specifically." start="00:01:44.829" video="mainVideo" id=subtitle]]
+[[!template text="I don't have a bunch of good code samples in here." start="00:01:46.802" video="mainVideo" id=subtitle]]
+[[!template text="There are other great talks at the conference," start="00:01:50.000" video="mainVideo" id=subtitle]]
+[[!template text="particularly Andrew's, that I looked at," start="00:01:52.451" video="mainVideo" id=subtitle]]
+[[!template text="that looked like they might be more aimed at that" start="00:01:56.411" video="mainVideo" id=subtitle]]
+[[!template text="&quot;hey, I'm just getting started with Emacs," start="00:01:59.920" video="mainVideo" id=subtitle]]
+[[!template text="what are some things to try to make" start="00:02:02.240" video="mainVideo" id=subtitle]]
+[[!template text="it more comfortable for me starting?&quot;" start="00:02:05.280" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This is about how to think about the problem space." start="00:02:07.017" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Hopefully, a good warm up as we start thinking about" start="00:02:09.759" video="mainVideo" id=subtitle]]
+[[!template text="some of the lightning talks a little later on." start="00:02:13.337" video="mainVideo" id=subtitle]]
+[[!template text="I'm just gonna quickly make sure" start="00:02:17.200" video="mainVideo" id=subtitle]]
+[[!template text="I can see my IRC buffer in case" start="00:02:19.835" video="mainVideo" id=subtitle]]
+[[!template text="I run into time. I didn't get my stopwatch started for this one." start="00:02:21.789" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So all right, let's dive in." start="00:02:25.680" video="mainVideo" id=subtitle]]
+[[!template new="1" text="We assume that we want to install packages" start="00:02:29.680" video="mainVideo" id=subtitle]]
+[[!template text="and maybe configure some features." start="00:02:33.840" video="mainVideo" id=subtitle]]
+[[!template text="This is particularly from the perspective of" start="00:02:36.281" video="mainVideo" id=subtitle]]
+[[!template text="where we're working" start="00:02:38.319" video="mainVideo" id=subtitle]]
+[[!template text="with a bunch of people on a team" start="00:02:39.120" video="mainVideo" id=subtitle]]
+[[!template text="and we want to get something done." start="00:02:40.541" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Some of us probably already have mature" start="00:02:42.160" video="mainVideo" id=subtitle]]
+[[!template text="Emacs workflows." start="00:02:44.800" video="mainVideo" id=subtitle]]
+[[!template text="Others are installing it for the first time." start="00:02:46.560" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So the first question is, you know, in that context:" start="00:02:53.519" video="mainVideo" id=subtitle]]
+[[!template text="what's the value proposition?" start="00:02:57.889" video="mainVideo" id=subtitle]]
+[[!template text="Why should I mess with my machine," start="00:02:59.784" video="mainVideo" id=subtitle]]
+[[!template text="my mature Emacs configuration," start="00:03:01.532" video="mainVideo" id=subtitle]]
+[[!template text="and impose my ideas over the way somebody else is learning Emacs?" start="00:03:04.219" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Well, it can be.. I'm off my slides here a little bit." start="00:03:09.815" video="mainVideo" id=subtitle]]
+[[!template new="1" text="It can be a little bit tricky" start="00:03:13.840" video="mainVideo" id=subtitle]]
+[[!template text="to learn Emacs. One thing that helps us a lot" start="00:03:16.959" video="mainVideo" id=subtitle]]
+[[!template text="is if people that we're working with" start="00:03:21.440" video="mainVideo" id=subtitle]]
+[[!template text="can tell us, kinda, keystroke for keystroke at times," start="00:03:24.720" video="mainVideo" id=subtitle]]
+[[!template text="what to do and explain what everything is doing." start="00:03:27.301" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Using the same packages can really help us working together on a project." start="00:03:30.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Speaking from my personal experience," start="00:03:35.840" video="mainVideo" id=subtitle]]
+[[!template text="it took me decades to get to the point" start="00:03:40.720" video="mainVideo" id=subtitle]]
+[[!template text="where I was excited to program in Emacs Lisp." start="00:03:42.959" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I've programmed in a lot of programming languages," start="00:03:45.226" video="mainVideo" id=subtitle]]
+[[!template text="but Lisp wasn't on my list." start="00:03:47.840" video="mainVideo" id=subtitle]]
+[[!template text="I looked at my config that I was copy-pasting around" start="00:03:50.252" video="mainVideo" id=subtitle]]
+[[!template text="from generation after generation of .emacs file," start="00:03:53.680" video="mainVideo" id=subtitle]]
+[[!template text="or recrafting it from hand and from Internet searches," start="00:03:57.279" video="mainVideo" id=subtitle]]
+[[!template text="to get the things that I needed when" start="00:04:00.799" video="mainVideo" id=subtitle]]
+[[!template text="I would quickly go install Emacs at some" start="00:04:03.519" video="mainVideo" id=subtitle]]
+[[!template text="new job or contract," start="00:04:05.680" video="mainVideo" id=subtitle]]
+[[!template text="and be able to to quickly get through that workflow" start="00:04:07.680" video="mainVideo" id=subtitle]]
+[[!template text="that caused me to install the program." start="00:04:14.016" video="mainVideo" id=subtitle]]
+[[!template new="1" text="You know, just little simple one-liners that got committed to memory" start="00:04:17.440" video="mainVideo" id=subtitle]]
+[[!template text="over decades eventually just led me to a sort of &quot;hey what's going on here.&quot;" start="00:04:24.049" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And I credit Jeff Goff, my good friend who died earlier in 2020," start="00:04:27.675" video="mainVideo" id=subtitle]]
+[[!template text="for my lifelong love of Emacs." start="00:04:33.520" video="mainVideo" id=subtitle]]
+[[!template text="Perhaps Erik and I will talk about that" start="00:04:37.759" video="mainVideo" id=subtitle]]
+[[!template text="a little bit more in another talk we have scheduled," start="00:04:39.280" video="mainVideo" id=subtitle]]
+[[!template text="but Jeff was a huge influence on us" start="00:04:42.000" video="mainVideo" id=subtitle]]
+[[!template text="in a number of ways," start="00:04:44.400" video="mainVideo" id=subtitle]]
+[[!template text="and a huge contributor" start="00:04:46.027" video="mainVideo" id=subtitle]]
+[[!template text="to the Raku programming language, which is very cool." start="00:04:47.732" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, understanding how to make a good decision" start="00:04:54.840" video="mainVideo" id=subtitle]]
+[[!template text="about splitting up configuration in a way to share it across" start="00:05:00.153" video="mainVideo" id=subtitle]]
+[[!template text="people with really different uses of Emacs..." start="00:05:03.680" video="mainVideo" id=subtitle]]
+[[!template text="That's actually a complicated topic" start="00:05:06.292" video="mainVideo" id=subtitle]]
+[[!template text="and I want to sort of back off and stare at it for a second." start="00:05:08.546" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I think Emacs is about people, so that means it's about community." start="00:05:12.639" video="mainVideo" id=subtitle]]
+[[!template text="And community means we're going to invite disagreement." start="00:05:18.720" video="mainVideo" id=subtitle]]
+[[!template text="In fact, that disagreement isn't necessarily a road-block to our project." start="00:05:24.960" video="mainVideo" id=subtitle]]
+[[!template text="In fact, some of the work that a community project can invite us to do" start="00:05:32.687" video="mainVideo" id=subtitle]]
+[[!template text="is to get closer to each other" start="00:05:37.759" video="mainVideo" id=subtitle]]
+[[!template text="by inviting those disagreements," start="00:05:39.505" video="mainVideo" id=subtitle]]
+[[!template text="by learning from them--learning from" start="00:05:40.840" video="mainVideo" id=subtitle]]
+[[!template text="different people's styles and from how they argue," start="00:05:42.080" video="mainVideo" id=subtitle]]
+[[!template text="and thinking about why they have that perspective" start="00:05:46.880" video="mainVideo" id=subtitle]]
+[[!template text="and what technical benefits" start="00:05:50.058" video="mainVideo" id=subtitle]]
+[[!template text="that perhaps radical point of view might carry away." start="00:05:53.227" video="mainVideo" id=subtitle]]
+[[!template text="Some people are really aggressive arguers," start="00:05:55.800" video="mainVideo" id=subtitle]]
+[[!template text="and others are very passive and really" start="00:05:58.266" video="mainVideo" id=subtitle]]
+[[!template text="couch their ideas in distancing terms, to say," start="00:06:01.919" video="mainVideo" id=subtitle]]
+[[!template text="&quot;well probably, this is a good idea&quot;" start="00:06:05.824" video="mainVideo" id=subtitle]]
+[[!template text="or &quot;please double check me.&quot;" start="00:06:07.906" video="mainVideo" id=subtitle]]
+[[!template text="Those don't always necessarily indicate" start="00:06:12.479" video="mainVideo" id=subtitle]]
+[[!template text="how certain a person is, because we're different." start="00:06:15.520" video="mainVideo" id=subtitle]]
+[[!template text="We have different ways of communicating" start="00:06:17.497" video="mainVideo" id=subtitle]]
+[[!template text="ideas like certainty or excitement." start="00:06:19.520" video="mainVideo" id=subtitle]]
+[[!template new="1" text="When we think about a bunch of" start="00:06:24.560" video="mainVideo" id=subtitle]]
+[[!template text="really diverse programmers approaching Emacs," start="00:06:26.235" video="mainVideo" id=subtitle]]
+[[!template text="probably one of our first really big challenges is just" start="00:06:30.000" video="mainVideo" id=subtitle]]
+[[!template text="to pick what we're going to go after." start="00:06:36.479" video="mainVideo" id=subtitle]]
+[[!template text="There are a lot of existing kit installs and things like this." start="00:06:40.085" video="mainVideo" id=subtitle]]
+[[!template text="My argument is that you could actually get pretty far" start="00:06:49.599" video="mainVideo" id=subtitle]]
+[[!template text="just trading files around." start="00:06:54.400" video="mainVideo" id=subtitle]]
+[[!template text="Maybe the more valuable conversation to have" start="00:06:56.020" video="mainVideo" id=subtitle]]
+[[!template text="is making the hard decisions about, well," start="00:07:03.698" video="mainVideo" id=subtitle]]
+[[!template text="&quot;should we have vertical completion,&quot;" start="00:07:06.080" video="mainVideo" id=subtitle]]
+[[!template text="should that be the out of the box," start="00:07:08.000" video="mainVideo" id=subtitle]]
+[[!template text="and the people that want" start="00:07:10.080" video="mainVideo" id=subtitle]]
+[[!template text="the traditional splayed out over a single line completion," start="00:07:11.759" video="mainVideo" id=subtitle]]
+[[!template text="for example in the mode line," start="00:07:17.440" video="mainVideo" id=subtitle]]
+[[!template text="those people are going to add a line of config to their own setup?" start="00:07:19.428" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The way to get there?" start="00:07:29.039" video="mainVideo" id=subtitle]]
+[[!template text="I mean, how do we find out what works?" start="00:07:30.979" video="mainVideo" id=subtitle]]
+[[!template new="1" text="We don't want to slow down the people that are super productive with Emacs" start="00:07:33.344" video="mainVideo" id=subtitle]]
+[[!template text="by asking them to completely break their workflows" start="00:07:38.587" video="mainVideo" id=subtitle]]
+[[!template text="and make it easier for new folks." start="00:07:40.879" video="mainVideo" id=subtitle]]
+[[!template new="1" text="At the same time, we do want to make sure those new people" start="00:07:42.560" video="mainVideo" id=subtitle]]
+[[!template text="are excited by Emacs and not turned off by having to learn" start="00:07:48.673" video="mainVideo" id=subtitle]]
+[[!template text="the entire jungle of Emacs history in the form of its unique" start="00:07:52.720" video="mainVideo" id=subtitle]]
+[[!template text="technical stylings for things like frames, buffers," start="00:08:00.363" video="mainVideo" id=subtitle]]
+[[!template text="and other unique Emacs viewpoints" start="00:08:07.610" video="mainVideo" id=subtitle]]
+[[!template text="on important interface concepts, especially." start="00:08:11.668" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The encouragement here is to keep" start="00:08:16.240" video="mainVideo" id=subtitle]]
+[[!template text="the initialization for a project team" start="00:08:19.520" video="mainVideo" id=subtitle]]
+[[!template text="together as a crucible." start="00:08:21.680" video="mainVideo" id=subtitle]]
+[[!template text="Rather than necessarily following" start="00:08:23.280" video="mainVideo" id=subtitle]]
+[[!template text="our defaults of finding the simplest configurations" start="00:08:25.117" video="mainVideo" id=subtitle]]
+[[!template text="that generally work and letting people customize it," start="00:08:33.279" video="mainVideo" id=subtitle]]
+[[!template text="what if we tried to look" start="00:08:37.440" video="mainVideo" id=subtitle]]
+[[!template text="for fairly specific configurations" start="00:08:40.479" video="mainVideo" id=subtitle]]
+[[!template text="that we'll expect essentially all of our" start="00:08:42.346" video="mainVideo" id=subtitle]]
+[[!template text="developers to be using," start="00:08:44.159" video="mainVideo" id=subtitle]]
+[[!template text="at least when they submit bug reports." start="00:08:46.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="In particular, with this," start="00:08:52.839" video="mainVideo" id=subtitle]]
+[[!template text="I think that degree of experimentation" start="00:08:55.920" video="mainVideo" id=subtitle]]
+[[!template text="can drive back into the Emacs development process." start="00:08:59.839" video="mainVideo" id=subtitle]]
+[[!template text="In the development mailing list..." start="00:09:02.584" video="mainVideo" id=subtitle]]
+[[!template text="I'm hoping I'll get a timing cue here." start="00:09:04.800" video="mainVideo" id=subtitle]]
+[[!template text="In the context of Emacs development as a greater entity," start="00:09:15.120" video="mainVideo" id=subtitle]]
+[[!template text="we see some of these struggles." start="00:09:18.835" video="mainVideo" id=subtitle]]
+[[!template text="Should we change this default?" start="00:09:20.959" video="mainVideo" id=subtitle]]
+[[!template text="Sometimes we can have the sense that defaults in Emacs will never change." start="00:09:22.399" video="mainVideo" id=subtitle]]
+[[!template text="The conversation is too difficult." start="00:09:27.146" video="mainVideo" id=subtitle]]
+[[!template text="I think one thing that can help us get there is evidence" start="00:09:29.279" video="mainVideo" id=subtitle]]
+[[!template text="that says, &quot;hey my 30- to 40-person project" start="00:09:32.560" video="mainVideo" id=subtitle]]
+[[!template text="is using this set of bindings," start="00:09:36.160" video="mainVideo" id=subtitle]]
+[[!template text="and here's what we learned" start="00:09:38.560" video="mainVideo" id=subtitle]]
+[[!template text="about brand new Emacs users trying to come in" start="00:09:40.111" video="mainVideo" id=subtitle]]
+[[!template text="and get work done with that.&quot;" start="00:09:42.240" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: Yeah you still have" start="00:09:46.800" video="mainVideo" id=subtitle]]
+[[!template text="a couple more minutes.)" start="00:09:49.360" video="mainVideo" id=subtitle]]
+[[!template text="Oh, beautiful. Okay, great." start="00:09:50.720" video="mainVideo" id=subtitle]]
+[[!template text="I will try to get through my last few slides that I cut" start="00:09:51.984" video="mainVideo" id=subtitle]]
+[[!template text="in my last walkthrough, but I think I'm" start="00:09:54.720" video="mainVideo" id=subtitle]]
+[[!template text="going quicker today, thank you." start="00:09:56.320" video="mainVideo" id=subtitle]]
+[[!template text="Thank you." start="00:09:58.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's just recap real quick:" start="00:10:02.000" video="mainVideo" id=subtitle]]
+[[!template text="in theory, Emacs works out of the box." start="00:10:05.120" video="mainVideo" id=subtitle]]
+[[!template text="That means we're free to experiment." start="00:10:08.760" video="mainVideo" id=subtitle]]
+[[!template text="We can throw it all away and start over." start="00:10:12.853" video="mainVideo" id=subtitle]]
+[[!template text="As an organizational principle..." start="00:10:17.120" video="mainVideo" id=subtitle]]
+[[!template text="I don't know what I was thinking on that slide, excuse me." start="00:10:26.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Bringing it back around to the free" start="00:10:30.079" video="mainVideo" id=subtitle]]
+[[!template text="and open source software community," start="00:10:33.440" video="mainVideo" id=subtitle]]
+[[!template text="our goal is to enable users" start="00:10:35.680" video="mainVideo" id=subtitle]]
+[[!template text="to unlock their computers, to do as much" start="00:10:39.519" video="mainVideo" id=subtitle]]
+[[!template text="with them as possible." start="00:10:41.440" video="mainVideo" id=subtitle]]
+[[!template text="That's the context to take with project initialization, but sometimes" start="00:10:43.040" video="mainVideo" id=subtitle]]
+[[!template text="it could make sense" start="00:10:47.680" video="mainVideo" id=subtitle]]
+[[!template text="to put some gloves on." start="00:10:50.800" video="mainVideo" id=subtitle]]
+[[!template text="I've thrown up on the screen here" start="00:10:52.032" video="mainVideo" id=subtitle]]
+[[!template text="just a couple of other ideas," start="00:10:53.766" video="mainVideo" id=subtitle]]
+[[!template text="ways to maybe think outside of the box." start="00:10:55.276" video="mainVideo" id=subtitle]]
+[[!template text="As you're putting together project nets," start="00:10:57.920" video="mainVideo" id=subtitle]]
+[[!template text="my words of encouragement are to experiment with it," start="00:11:01.440" video="mainVideo" id=subtitle]]
+[[!template text="try different things, and think really specifically" start="00:11:05.519" video="mainVideo" id=subtitle]]
+[[!template text="about how different the development users might be from each other" start="00:11:09.941" video="mainVideo" id=subtitle]]
+[[!template text="as you define standards for configuring" start="00:11:17.010" video="mainVideo" id=subtitle]]
+[[!template text="the user environment of Emacs" start="00:11:21.680" video="mainVideo" id=subtitle]]
+[[!template text="specifically for developing on a project." start="00:11:23.519" video="mainVideo" id=subtitle]]
+[[!template new="1" text="That's pretty much my talk." start="00:11:26.552" video="mainVideo" id=subtitle]]
+[[!template text="If there's any time, I would take a couple questions." start="00:11:29.120" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: Thank you for your awesome talk, Corwin." start="00:11:32.959" video="mainVideo" id=subtitle]]
+[[!template text="I think we have one or two minutes for a few questions." start="00:11:36.480" video="mainVideo" id=subtitle]]
+[[!template text="Do you have the pad open or would you" start="00:11:49.519" video="mainVideo" id=subtitle]]
+[[!template text="like me to read the questions for you?)" start="00:11:52.000" video="mainVideo" id=subtitle]]
+[[!template text="Corwin: Oh, I managed to close the pad" start="00:11:53.839" video="mainVideo" id=subtitle]]
+[[!template text="and I am trying to open it again." start="00:11:58.000" video="mainVideo" id=subtitle]]
+[[!template text="All right, there it opened." start="00:12:00.352" video="mainVideo" id=subtitle]]
+[[!template text="Bringing it onto a screen where I can see it." start="00:12:03.519" video="mainVideo" id=subtitle]]
+[[!template text="Will you read me the first question while I drag windows around, please?" start="00:12:05.500" video="mainVideo" id=subtitle]]
+[[!template new="1" text="(Amin: Sure. It says, &quot;do you use Emacs as a community building tool?&quot;)" start="00:12:09.360" video="mainVideo" id=subtitle]]
+[[!template text="Do I use Emacs as a community building tool, or how do I?" start="00:12:15.600" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: It just says do you.) Yes, absolutely." start="00:12:19.760" video="mainVideo" id=subtitle]]
+[[!template text="I think Emacs is an ambassador to the GNU tool chain." start="00:12:23.519" video="mainVideo" id=subtitle]]
+[[!template text="I think that in the fullness of time," start="00:12:29.920" video="mainVideo" id=subtitle]]
+[[!template text="we will see an Emacs" start="00:12:33.027" video="mainVideo" id=subtitle]]
+[[!template text="that makes iOS and Android and other closed-source tools dream." start="00:12:36.558" video="mainVideo" id=subtitle]]
+[[!template text="That's why they mock us and call Emacs" start="00:12:43.760" video="mainVideo" id=subtitle]]
+[[!template text="an operating system. It's because" start="00:12:46.689" video="mainVideo" id=subtitle]]
+[[!template text="it could be, if we cared for it to be." start="00:12:49.200" video="mainVideo" id=subtitle]]
+[[!template text="It's quite a threatening product" start="00:12:51.440" video="mainVideo" id=subtitle]]
+[[!template text="from the perspective of how many problem" start="00:12:55.680" video="mainVideo" id=subtitle]]
+[[!template text="spaces it can address," start="00:12:57.440" video="mainVideo" id=subtitle]]
+[[!template text="how many types of users it can satisfy," start="00:12:58.540" video="mainVideo" id=subtitle]]
+[[!template text="the things that we can do to make" start="00:13:01.519" video="mainVideo" id=subtitle]]
+[[!template text="it robust in those environments." start="00:13:04.399" video="mainVideo" id=subtitle]]
+[[!template text="I mean, we're always thinking about the weak points," start="00:13:06.456" video="mainVideo" id=subtitle]]
+[[!template text="but is Emacs a community building tool? Heck yeah." start="00:13:09.524" video="mainVideo" id=subtitle]]
+[[!template new="1" text="(Amin: There's like one or two more questions." start="00:13:14.639" video="mainVideo" id=subtitle]]
+[[!template text="I think they're more long-form so it might be better" start="00:13:18.480" video="mainVideo" id=subtitle]]
+[[!template text="if you took them off stream so you could keep the schedule on time.)" start="00:13:22.480" video="mainVideo" id=subtitle]]
+[[!template text="I would love to take those questions offline." start="00:13:26.880" video="mainVideo" id=subtitle]]
+[[!template text="I will respond to you" start="00:13:29.463" video="mainVideo" id=subtitle]]
+[[!template text="in writing if we don't get to it" start="00:13:30.908" video="mainVideo" id=subtitle]]
+[[!template text="in a breakout room." start="00:13:32.237" video="mainVideo" id=subtitle]]
+[[!template text="Thanks so much for joining us." start="00:13:33.360" video="mainVideo" id=subtitle]]
+[[!template text="I can't wait to see the rest of the" start="00:13:35.451" video="mainVideo" id=subtitle]]
+[[!template text="conference. See you there!" start="00:13:36.639" video="mainVideo" id=subtitle]]
+[[!template text="(Amin: Awesome. Thank you again so much, Corwin.)" start="00:13:38.000" video="mainVideo" id=subtitle]]
diff --git a/2020/info/07.md b/2020/info/07.md
index f4f793e7..2fd5352f 100644
--- a/2020/info/07.md
+++ b/2020/info/07.md
@@ -1,11 +1,14 @@
# Beyond Vim and Emacs: A Scalable UI Paradigm
Sid Kasivajhula
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt" size="161MB"]]
-[Download compressed .webm video (45.1M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula--vp9-q56-video-original-audio.webm)
+[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt" size="161MB"]]
+[Download compressed .webm video (40M)](https://media.emacsconf.org/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula--compressed32.webm)
+[Download compressed .webm video (45.1M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.webm" subtitles="/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt" size="40MB"]]
-[Download compressed .webm video (5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (9.2M)](https://media.emacsconf.org/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula--compressed32.webm)
+[Download compressed .webm video (5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula--vp9-q56-video-original-audio.webm)
A practiced dexterity with the arcane incantations known as keybindings is
the true mark of the veteran Emacs user. Yet, it takes years to get there,
@@ -196,3 +199,323 @@ green phosphor.
epistemic-mode, now called rigpa (concept in Tibetan Buddhism, in
Dzogchen teaching, or the great completion).
- Similar idea from <http://emacs-versor.sourceforge.net>
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="&quot;Far away in the heavenly abode" start="00:00:02.960" video="mainVideo" id=subtitle]]
+[[!template text="of the great god Indra," start="00:00:04.644" video="mainVideo" id=subtitle]]
+[[!template text="there is a wonderful net" start="00:00:06.560" video="mainVideo" id=subtitle]]
+[[!template text="which has been hung by some cunning artificer" start="00:00:07.688" video="mainVideo" id=subtitle]]
+[[!template text="in such a manner that it stretches out" start="00:00:10.160" video="mainVideo" id=subtitle]]
+[[!template text="infinitely in all directions." start="00:00:12.080" video="mainVideo" id=subtitle]]
+[[!template text="In accordance with the extravagant tastes of deities," start="00:00:14.320" video="mainVideo" id=subtitle]]
+[[!template text="the artificer has hung" start="00:00:16.938" video="mainVideo" id=subtitle]]
+[[!template text="a single glittering jewel" start="00:00:18.240" video="mainVideo" id=subtitle]]
+[[!template text="in each eye of the net," start="00:00:20.277" video="mainVideo" id=subtitle]]
+[[!template text="and since the net itself is infinite," start="00:00:22.080" video="mainVideo" id=subtitle]]
+[[!template text="the jewels are infinite in number." start="00:00:23.859" video="mainVideo" id=subtitle]]
+[[!template text="There hang the jewels," start="00:00:26.480" video="mainVideo" id=subtitle]]
+[[!template text="glittering like stars in the first magnitude," start="00:00:27.642" video="mainVideo" id=subtitle]]
+[[!template text="a wonderful sight to behold." start="00:00:30.480" video="mainVideo" id=subtitle]]
+[[!template text="Were we to select one of these jewels for inspection," start="00:00:32.681" video="mainVideo" id=subtitle]]
+[[!template text="we would discover that in its polished surface" start="00:00:35.680" video="mainVideo" id=subtitle]]
+[[!template text="there are reflected" start="00:00:38.216" video="mainVideo" id=subtitle]]
+[[!template text="all the other jewels in the net," start="00:00:39.520" video="mainVideo" id=subtitle]]
+[[!template text="infinite in number." start="00:00:41.451" video="mainVideo" id=subtitle]]
+[[!template text="If we look still more closely," start="00:00:43.360" video="mainVideo" id=subtitle]]
+[[!template text="we would see that each of the jewels reflected in this one jewel" start="00:00:45.140" video="mainVideo" id=subtitle]]
+[[!template text="reflects all the others.&quot;" start="00:00:48.960" video="mainVideo" id=subtitle]]
+[[!template text="This is the metaphor of Indra's Net," start="00:00:51.264" video="mainVideo" id=subtitle]]
+[[!template text="which is told in some schools of philosophy." start="00:00:54.000" video="mainVideo" id=subtitle]]
+[[!template text="Let's keep this metaphor in mind," start="00:00:57.615" video="mainVideo" id=subtitle]]
+[[!template text="because it'll help us understand" start="00:01:00.160" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs extension that we're about to discuss." start="00:01:01.773" video="mainVideo" id=subtitle]]
+[[!template new="1" text="In editing text, there's two main paradigms:" start="00:01:06.960" video="mainVideo" id=subtitle]]
+[[!template text="one is editing at the ground level," start="00:01:12.810" video="mainVideo" id=subtitle]]
+[[!template text="where the characters that we type" start="00:01:16.880" video="mainVideo" id=subtitle]]
+[[!template text="actually appear on the screen," start="00:01:19.439" video="mainVideo" id=subtitle]]
+[[!template text="the changes we make actually occur." start="00:01:22.159" video="mainVideo" id=subtitle]]
+[[!template text="The other editing paradigm" start="00:01:28.479" video="mainVideo" id=subtitle]]
+[[!template text="is where we escape to a higher level" start="00:01:30.126" video="mainVideo" id=subtitle]]
+[[!template text="and now the characters that we type are not..." start="00:01:33.439" video="mainVideo" id=subtitle]]
+[[!template text="They don't actually appear on the screen" start="00:01:36.479" video="mainVideo" id=subtitle]]
+[[!template text="because we're not at the ground level with the text," start="00:01:39.040" video="mainVideo" id=subtitle]]
+[[!template text="we are at a higher level" start="00:01:42.748" video="mainVideo" id=subtitle]]
+[[!template text="looking down at the text" start="00:01:44.799" video="mainVideo" id=subtitle]]
+[[!template text="and regarding the text," start="00:01:48.479" video="mainVideo" id=subtitle]]
+[[!template text="referring to this world of text in terms of a language." start="00:01:50.773" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For instance, we could describe this" start="00:01:56.159" video="mainVideo" id=subtitle]]
+[[!template text="world as having words and paragraphs and sentences and lines and so on." start="00:01:57.920" video="mainVideo" id=subtitle]]
+[[!template text="We could reason about this text" start="00:02:03.404" video="mainVideo" id=subtitle]]
+[[!template text="in terms of these textual entities and this textual language." start="00:02:05.985" video="mainVideo" id=subtitle]]
+[[!template text="This is the second paradigm of text editing." start="00:02:13.120" video="mainVideo" id=subtitle]]
+[[!template text="When we're in the second paradigm," start="00:02:18.640" video="mainVideo" id=subtitle]]
+[[!template text="there is a way to go down to ground level." start="00:02:22.800" video="mainVideo" id=subtitle]]
+[[!template text="You hit Enter now--or we'll hit Enter to go down to the ground level," start="00:02:25.304" video="mainVideo" id=subtitle]]
+[[!template text="and you can hit Escape" start="00:02:28.997" video="mainVideo" id=subtitle]]
+[[!template text="to go back out to the referential level." start="00:02:30.480" video="mainVideo" id=subtitle]]
+[[!template text="Enter to go down to ground level" start="00:02:33.200" video="mainVideo" id=subtitle]]
+[[!template text="and Escape to go up to the referential level." start="00:02:35.200" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now, in Vim, the nouns in this world of text" start="00:02:40.160" video="mainVideo" id=subtitle]]
+[[!template text="all share the same referential plane which we call normal mode." start="00:02:47.565" video="mainVideo" id=subtitle]]
+[[!template text="So in normal mode, all of the nouns" start="00:02:52.319" video="mainVideo" id=subtitle]]
+[[!template text="of the world of text are available," start="00:02:54.959" video="mainVideo" id=subtitle]]
+[[!template text="whether it's words or sentences or paragraphs," start="00:02:57.360" video="mainVideo" id=subtitle]]
+[[!template text="and they all share this same referential plane." start="00:03:00.959" video="mainVideo" id=subtitle]]
+[[!template text="They compete for space on the keyboard." start="00:03:08.319" video="mainVideo" id=subtitle]]
+[[!template new="1" text="An alternative way to structure these modes is" start="00:03:12.720" video="mainVideo" id=subtitle]]
+[[!template text="instead of having a single mode where all the nouns coexist," start="00:03:17.037" video="mainVideo" id=subtitle]]
+[[!template text="peacefully or otherwise," start="00:03:21.840" video="mainVideo" id=subtitle]]
+[[!template text="you instead have a dedicated mode for every noun." start="00:03:24.005" video="mainVideo" id=subtitle]]
+[[!template text="In that case, what happens is" start="00:03:30.400" video="mainVideo" id=subtitle]]
+[[!template text="because your modal spaces are now much smaller," start="00:03:32.540" video="mainVideo" id=subtitle]]
+[[!template text="you're just talking about words or paragraphs or lines or something," start="00:03:35.440" video="mainVideo" id=subtitle]]
+[[!template text="the keys that you use" start="00:03:40.593" video="mainVideo" id=subtitle]]
+[[!template text="can be much more targeted." start="00:03:42.560" video="mainVideo" id=subtitle]]
+[[!template text="You can use the same keystrokes" start="00:03:45.760" video="mainVideo" id=subtitle]]
+[[!template text="in all of your modes and they would have" start="00:03:48.560" video="mainVideo" id=subtitle]]
+[[!template text="the same ideas behind them," start="00:03:50.400" video="mainVideo" id=subtitle]]
+[[!template text="but they would have different effects" start="00:03:51.845" video="mainVideo" id=subtitle]]
+[[!template text="depending on which context you're using." start="00:03:53.280" video="mainVideo" id=subtitle]]
+[[!template text="It's the same keystrokes, different contexts." start="00:03:55.519" video="mainVideo" id=subtitle]]
+[[!template text="The advantage of that is it's often easier to change context" start="00:03:59.120" video="mainVideo" id=subtitle]]
+[[!template text="than it is to learn new key bindings." start="00:04:04.244" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's see an example of how that works." start="00:04:07.888" video="mainVideo" id=subtitle]]
+[[!template text="We go into character mode, and if you look at the mode line" start="00:04:11.289" video="mainVideo" id=subtitle]]
+[[!template text="at the bottom of the screen there," start="00:04:14.039" video="mainVideo" id=subtitle]]
+[[!template text="you'll see that we're in character mode." start="00:04:15.439" video="mainVideo" id=subtitle]]
+[[!template text="Now, when we move up, down, left, and right," start="00:04:18.720" video="mainVideo" id=subtitle]]
+[[!template text="we're moving by character." start="00:04:21.955" video="mainVideo" id=subtitle]]
+[[!template text="We can also transform the text," start="00:04:23.919" video="mainVideo" id=subtitle]]
+[[!template text="and the transformations occur in terms of character." start="00:04:28.088" video="mainVideo" id=subtitle]]
+[[!template text="You can also go into word mode." start="00:04:32.400" video="mainVideo" id=subtitle]]
+[[!template text="In word mode, the transformations that you do are on words." start="00:04:34.207" video="mainVideo" id=subtitle]]
+[[!template text="and you try... Your movement is also in terms of words." start="00:04:40.000" video="mainVideo" id=subtitle]]
+[[!template text="So that's the level of granularity that you have." start="00:04:43.440" video="mainVideo" id=subtitle]]
+[[!template text="You could also go to line mode." start="00:04:46.560" video="mainVideo" id=subtitle]]
+[[!template text="When you're in line mode," start="00:04:49.191" video="mainVideo" id=subtitle]]
+[[!template text="you go up and down by line," start="00:04:50.720" video="mainVideo" id=subtitle]]
+[[!template text="and you can move lines" start="00:04:52.901" video="mainVideo" id=subtitle]]
+[[!template text="up and down left and right and so on." start="00:04:54.240" video="mainVideo" id=subtitle]]
+[[!template text="The transformations you do are in" start="00:04:59.120" video="mainVideo" id=subtitle]]
+[[!template text="terms of lines." start="00:05:00.880" video="mainVideo" id=subtitle]]
+[[!template text="You could also go to window mode," start="00:05:02.800" video="mainVideo" id=subtitle]]
+[[!template text="where now the objects that you're referring to are windows." start="00:05:07.682" video="mainVideo" id=subtitle]]
+[[!template text="You can move spatially amongst the windows" start="00:05:11.695" video="mainVideo" id=subtitle]]
+[[!template text="or do transformations on the windows" start="00:05:15.578" video="mainVideo" id=subtitle]]
+[[!template text="using the same keystrokes." start="00:05:17.520" video="mainVideo" id=subtitle]]
+[[!template text="So let's go to..." start="00:05:25.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Right. One of the things," start="00:05:28.720" video="mainVideo" id=subtitle]]
+[[!template text="the principles at play here" start="00:05:32.800" video="mainVideo" id=subtitle]]
+[[!template text="is something called the Rumpelstiltskin principle," start="00:05:35.114" video="mainVideo" id=subtitle]]
+[[!template text="which is something that's known in computer science." start="00:05:37.266" video="mainVideo" id=subtitle]]
+[[!template text="If you can name something," start="00:05:40.720" video="mainVideo" id=subtitle]]
+[[!template text="then you have power over it." start="00:05:42.113" video="mainVideo" id=subtitle]]
+[[!template text="This is kind of an adaptation of that principle" start="00:05:45.824" video="mainVideo" id=subtitle]]
+[[!template text="which says that if you can name something" start="00:05:48.560" video="mainVideo" id=subtitle]]
+[[!template text="and if you can talk about it," start="00:05:51.123" video="mainVideo" id=subtitle]]
+[[!template text="then it's a noun in your editing language." start="00:05:52.572" video="mainVideo" id=subtitle]]
+[[!template text="If it's a noun, then it has..." start="00:05:56.334" video="mainVideo" id=subtitle]]
+[[!template text="It's a mode. So if we can talk about it, it's a noun." start="00:05:58.960" video="mainVideo" id=subtitle]]
+[[!template text="If it's a noun, then it's a mode." start="00:06:02.319" video="mainVideo" id=subtitle]]
+[[!template new="1" text="One of the things we've been talking a lot about is modes." start="00:06:04.818" video="mainVideo" id=subtitle]]
+[[!template text="In fact, by this principle," start="00:06:08.919" video="mainVideo" id=subtitle]]
+[[!template text="modes also should be a mode." start="00:06:12.699" video="mainVideo" id=subtitle]]
+[[!template text="You should have a mode that can reason" start="00:06:17.280" video="mainVideo" id=subtitle]]
+[[!template text="in terms of modes as objects," start="00:06:19.039" video="mainVideo" id=subtitle]]
+[[!template text="just like you have modes" start="00:06:20.639" video="mainVideo" id=subtitle]]
+[[!template text="where you can reason in terms of" start="00:06:22.300" video="mainVideo" id=subtitle]]
+[[!template text="words or lines as objects." start="00:06:23.759" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's do that. Let's go to mode mode." start="00:06:26.560" video="mainVideo" id=subtitle]]
+[[!template text="When you go to mode mode, you see that" start="00:06:30.479" video="mainVideo" id=subtitle]]
+[[!template text="the objects that are depicted here" start="00:06:34.000" video="mainVideo" id=subtitle]]
+[[!template text="are the modes that are present in the buffer," start="00:06:35.915" video="mainVideo" id=subtitle]]
+[[!template text="which we knew about because" start="00:06:40.960" video="mainVideo" id=subtitle]]
+[[!template text="the style of editing that we had in this buffer" start="00:06:44.500" video="mainVideo" id=subtitle]]
+[[!template text="was the Vim style of editing" start="00:06:46.797" video="mainVideo" id=subtitle]]
+[[!template text="where there's an insert mode at the ground level" start="00:06:48.720" video="mainVideo" id=subtitle]]
+[[!template text="and a normal mode that you can escape to." start="00:06:51.143" video="mainVideo" id=subtitle]]
+[[!template text="You insert, enter the ground level." start="00:06:53.039" video="mainVideo" id=subtitle]]
+[[!template text="Enter to the insert mode and escape to normal mode." start="00:06:57.280" video="mainVideo" id=subtitle]]
+[[!template text="When you look at the mode mode representation," start="00:07:01.352" video="mainVideo" id=subtitle]]
+[[!template text="you see that in fact that" start="00:07:04.647" video="mainVideo" id=subtitle]]
+[[!template text="is the structure that's depicted." start="00:07:06.160" video="mainVideo" id=subtitle]]
+[[!template text="But in different situations, you might find" start="00:07:10.479" video="mainVideo" id=subtitle]]
+[[!template text="that these modes are not the" start="00:07:14.080" video="mainVideo" id=subtitle]]
+[[!template text="ones that you want." start="00:07:16.080" video="mainVideo" id=subtitle]]
+[[!template text="You want something more tailored for the specific application." start="00:07:16.922" video="mainVideo" id=subtitle]]
+[[!template text="For instance, if you're editing Lisp code" start="00:07:20.880" video="mainVideo" id=subtitle]]
+[[!template text="(or code in general, but" start="00:07:25.065" video="mainVideo" id=subtitle]]
+[[!template text="Lisp code is a particular example)," start="00:07:27.360" video="mainVideo" id=subtitle]]
+[[!template text="you might want to take advantage" start="00:07:30.880" video="mainVideo" id=subtitle]]
+[[!template text="of the structure of the code." start="00:07:32.640" video="mainVideo" id=subtitle]]
+[[!template text="For Lisp code in particular," start="00:07:34.852" video="mainVideo" id=subtitle]]
+[[!template text="we have a mode called symex-mode" start="00:07:37.599" video="mainVideo" id=subtitle]]
+[[!template text="which is able to reason about your code" start="00:07:40.960" video="mainVideo" id=subtitle]]
+[[!template text="in terms of its tree structure." start="00:07:45.414" video="mainVideo" id=subtitle]]
+[[!template text="So you can use the same keystrokes: hjkl goes left, right, up, and down," start="00:07:47.919" video="mainVideo" id=subtitle]]
+[[!template text="but you also have other keystrokes that are more specialized to the application." start="00:07:52.397" video="mainVideo" id=subtitle]]
+[[!template text="You can run the code." start="00:07:58.080" video="mainVideo" id=subtitle]]
+[[!template text="We'll see that happen here in a minute." start="00:08:01.520" video="mainVideo" id=subtitle]]
+[[!template text="You can make changes to it really quickly" start="00:08:06.960" video="mainVideo" id=subtitle]]
+[[!template text="and see the effects of those changes." start="00:08:12.240" video="mainVideo" id=subtitle]]
+[[!template text="You're doing this all in a mode" start="00:08:18.000" video="mainVideo" id=subtitle]]
+[[!template text="that's convenient for this particular application," start="00:08:19.440" video="mainVideo" id=subtitle]]
+[[!template text="which is editing Lisp code," start="00:08:22.625" video="mainVideo" id=subtitle]]
+[[!template text="and that is, in this case, symex-mode." start="00:08:25.039" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Typically, when you're editing code like this," start="00:08:28.960" video="mainVideo" id=subtitle]]
+[[!template text="you'd want to be in insert mode" start="00:08:31.631" video="mainVideo" id=subtitle]]
+[[!template text="actually typing out the code," start="00:08:33.435" video="mainVideo" id=subtitle]]
+[[!template text="and then you'd want to escape to symex mode rather than normal mode," start="00:08:36.640" video="mainVideo" id=subtitle]]
+[[!template text="and then you could escape again" start="00:08:40.959" video="mainVideo" id=subtitle]]
+[[!template text="and you'd end up in normal mode." start="00:08:42.021" video="mainVideo" id=subtitle]]
+[[!template text="So this, if we go to mode mode, we see is depicted" start="00:08:44.080" video="mainVideo" id=subtitle]]
+[[!template text="as this tower where insert is at the" start="00:08:48.000" video="mainVideo" id=subtitle]]
+[[!template text="bottom and normal is at the top," start="00:08:51.040" video="mainVideo" id=subtitle]]
+[[!template text="but symex-mode is in between the two." start="00:08:52.604" video="mainVideo" id=subtitle]]
+[[!template text="You could also change that if you like." start="00:08:55.305" video="mainVideo" id=subtitle]]
+[[!template text="If you don't want symex-mode to be there," start="00:08:57.551" video="mainVideo" id=subtitle]]
+[[!template text="you could just move it to the top." start="00:08:59.566" video="mainVideo" id=subtitle]]
+[[!template text="Now you find symex is at the top" start="00:09:02.187" video="mainVideo" id=subtitle]]
+[[!template text="and you enter down to normal." start="00:09:04.392" video="mainVideo" id=subtitle]]
+[[!template text="You can see it on the status bar at the bottom there." start="00:09:06.160" video="mainVideo" id=subtitle]]
+[[!template text="Enter to insert, escape to normal, escape to symex." start="00:09:08.848" video="mainVideo" id=subtitle]]
+[[!template text="In fact, you can even add more modes" start="00:09:13.839" video="mainVideo" id=subtitle]]
+[[!template text="if you don't like the existing ones." start="00:09:16.344" video="mainVideo" id=subtitle]]
+[[!template text="Now we have an additional mode here." start="00:09:21.519" video="mainVideo" id=subtitle]]
+[[!template text="We have window mode. It goes down to symex," start="00:09:23.839" video="mainVideo" id=subtitle]]
+[[!template text="it goes down to normal." start="00:09:25.855" video="mainVideo" id=subtitle]]
+[[!template text="Enter the insert, escape to normal," start="00:09:27.519" video="mainVideo" id=subtitle]]
+[[!template text="escape to symex, escape to window." start="00:09:29.919" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So we've talked... Okay, so another thing actually to note here" start="00:09:33.600" video="mainVideo" id=subtitle]]
+[[!template text="is that in editing modes," start="00:09:41.232" video="mainVideo" id=subtitle]]
+[[!template text="if you look at the mode line" start="00:09:45.360" video="mainVideo" id=subtitle]]
+[[!template text="at the bottom of the screen," start="00:09:46.486" video="mainVideo" id=subtitle]]
+[[!template text="you'll see that we are currently," start="00:09:48.399" video="mainVideo" id=subtitle]]
+[[!template text="in this buffer," start="00:09:50.257" video="mainVideo" id=subtitle]]
+[[!template text="we are currently in line mode." start="00:09:51.519" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to hit Enter now" start="00:09:54.560" video="mainVideo" id=subtitle]]
+[[!template text="and you'll see that when I hit Enter," start="00:09:57.296" video="mainVideo" id=subtitle]]
+[[!template text="nothing is happening." start="00:09:59.119" video="mainVideo" id=subtitle]]
+[[!template text="It's still in line mode." start="00:10:00.627" video="mainVideo" id=subtitle]]
+[[!template text="If you hit Escape, it's still in line mode." start="00:10:02.160" video="mainVideo" id=subtitle]]
+[[!template text="You can find out the reason for that" start="00:10:05.120" video="mainVideo" id=subtitle]]
+[[!template text="by taking another meta jump out of this." start="00:10:07.200" video="mainVideo" id=subtitle]]
+[[!template text="You'll see that, in fact, the reason" start="00:10:10.640" video="mainVideo" id=subtitle]]
+[[!template text="is that we're currently in line mode," start="00:10:12.800" video="mainVideo" id=subtitle]]
+[[!template text="and line mode is the only one available" start="00:10:15.279" video="mainVideo" id=subtitle]]
+[[!template text="in this tower" start="00:10:17.360" video="mainVideo" id=subtitle]]
+[[!template text="for editing the modes that are" start="00:10:19.519" video="mainVideo" id=subtitle]]
+[[!template text="in operation in your ground level." start="00:10:21.556" video="mainVideo" id=subtitle]]
+[[!template text="In fact, line mode is all you need here," start="00:10:24.880" video="mainVideo" id=subtitle]]
+[[!template text="because this is just the nature of how these modes are laid out is in rows." start="00:10:26.898" video="mainVideo" id=subtitle]]
+[[!template text="So line mode is the most appropriate thing here." start="00:10:32.796" video="mainVideo" id=subtitle]]
+[[!template text="But you could change it to something else if you like." start="00:10:36.399" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now we've seen two towers." start="00:10:40.959" video="mainVideo" id=subtitle]]
+[[!template text="We've seen the Vim tower and we've seen also the symex tower, the Lisp tower." start="00:10:43.659" video="mainVideo" id=subtitle]]
+[[!template text="It turns out that, because we've been talking about towers now," start="00:10:53.680" video="mainVideo" id=subtitle]]
+[[!template text="by the Rumpelstiltskin principle, towers also can be talked about," start="00:10:58.880" video="mainVideo" id=subtitle]]
+[[!template text="and therefore they also are a mode." start="00:11:06.399" video="mainVideo" id=subtitle]]
+[[!template text="So how do we go to tower mode?" start="00:11:09.127" video="mainVideo" id=subtitle]]
+[[!template text="The way we go to tower mode is" start="00:11:11.200" video="mainVideo" id=subtitle]]
+[[!template text="we go in a slightly different direction," start="00:11:14.640" video="mainVideo" id=subtitle]]
+[[!template text="and we find that we are now in tower mode." start="00:11:19.200" video="mainVideo" id=subtitle]]
+[[!template text="We see that there are many towers available. We're now..." start="00:11:23.360" video="mainVideo" id=subtitle]]
+[[!template text="We're seeing several possible towers" start="00:11:29.279" video="mainVideo" id=subtitle]]
+[[!template text="that we have written to be available and for use in different buffers." start="00:11:33.440" video="mainVideo" id=subtitle]]
+[[!template text="You can edit them on the fly." start="00:11:40.344" video="mainVideo" id=subtitle]]
+[[!template text="For instance, let's enter this tower." start="00:11:42.110" video="mainVideo" id=subtitle]]
+[[!template text="Now you see that in the bottom of the..." start="00:11:48.000" video="mainVideo" id=subtitle]]
+[[!template text="In the mode line, you see that we're" start="00:11:50.180" video="mainVideo" id=subtitle]]
+[[!template text="going across all of these different modes" start="00:11:51.519" video="mainVideo" id=subtitle]]
+[[!template text="that were in the tower." start="00:11:53.944" video="mainVideo" id=subtitle]]
+[[!template text="You could escape and you could even move things around." start="00:11:56.480" video="mainVideo" id=subtitle]]
+[[!template text="You could put window mode" start="00:11:59.724" video="mainVideo" id=subtitle]]
+[[!template text="all the way at the bottom," start="00:12:00.880" video="mainVideo" id=subtitle]]
+[[!template text="right above insert mode." start="00:12:02.573" video="mainVideo" id=subtitle]]
+[[!template text="Let's see that happen. There it is," start="00:12:04.079" video="mainVideo" id=subtitle]]
+[[!template text="window is right above insert, and so on." start="00:12:06.479" video="mainVideo" id=subtitle]]
+[[!template text="The tower always reflects your current position," start="00:12:10.444" video="mainVideo" id=subtitle]]
+[[!template text="so if you're in buffer mode here and you go down to line mode," start="00:12:14.240" video="mainVideo" id=subtitle]]
+[[!template text="when you go back to mode mode, you see that we are in line mode." start="00:12:17.600" video="mainVideo" id=subtitle]]
+[[!template text="But in practice, you wouldn't have a tower this elaborate" start="00:12:22.480" video="mainVideo" id=subtitle]]
+[[!template text="because you'd rather have several smaller towers you enter," start="00:12:25.620" video="mainVideo" id=subtitle]]
+[[!template text="that you alternate between." start="00:12:29.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay. So one other thing of interest here is that" start="00:12:33.360" video="mainVideo" id=subtitle]]
+[[!template text="when you're in tower mode," start="00:12:39.839" video="mainVideo" id=subtitle]]
+[[!template text="if you look at the status line at the bottom there," start="00:12:42.240" video="mainVideo" id=subtitle]]
+[[!template text="we are currently in buffer mode while we are in tower mode." start="00:12:44.740" video="mainVideo" id=subtitle]]
+[[!template text="Tower mode actually isn't a mode really. Neither is mode mode." start="00:12:49.839" video="mainVideo" id=subtitle]]
+[[!template text="They're really referential planes or meta planes." start="00:12:53.151" video="mainVideo" id=subtitle]]
+[[!template text="In any case, you can see that we're in buffer mode." start="00:12:58.000" video="mainVideo" id=subtitle]]
+[[!template text="We can take a meta jump out of this" start="00:13:01.679" video="mainVideo" id=subtitle]]
+[[!template text="to confirm that buffer mode is the only mode available" start="00:13:03.840" video="mainVideo" id=subtitle]]
+[[!template text="when we're editing towers" start="00:13:08.000" video="mainVideo" id=subtitle]]
+[[!template text="because that's the one we need," start="00:13:09.664" video="mainVideo" id=subtitle]]
+[[!template text="given that our towers are represented in individual buffers." start="00:13:11.915" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Right. So let's see where we're at." start="00:13:23.200" video="mainVideo" id=subtitle]]
+[[!template text="Rumpelstiltskin principle..." start="00:13:26.320" video="mainVideo" id=subtitle]]
+[[!template text="We talked about mode mode." start="00:13:27.785" video="mainVideo" id=subtitle]]
+[[!template text="We talked about the strange loop" start="00:13:30.160" video="mainVideo" id=subtitle]]
+[[!template text="application of ground level modes in meta levels." start="00:13:32.240" video="mainVideo" id=subtitle]]
+[[!template text="We saw the different towers," start="00:13:39.600" video="mainVideo" id=subtitle]]
+[[!template text="and in fact, we're currently in Vim tower," start="00:13:41.992" video="mainVideo" id=subtitle]]
+[[!template text="where you can go to Emacs tower." start="00:13:50.720" video="mainVideo" id=subtitle]]
+[[!template text="Now, with a single keystroke, you can" start="00:13:52.860" video="mainVideo" id=subtitle]]
+[[!template text="alternate between Emacs and Vim," start="00:13:54.720" video="mainVideo" id=subtitle]]
+[[!template text="which are represented--" start="00:13:59.695" video="mainVideo" id=subtitle]]
+[[!template text="which are modeled as towers." start="00:14:01.638" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So there's... One thing" start="00:14:13.360" video="mainVideo" id=subtitle]]
+[[!template text="that we've sort of alluded to is that there are two directions" start="00:14:14.760" video="mainVideo" id=subtitle]]
+[[!template text="that you can travel in" start="00:14:18.160" video="mainVideo" id=subtitle]]
+[[!template text="when you're going through this framework." start="00:14:19.494" video="mainVideo" id=subtitle]]
+[[!template text="One direction is--and we'll visualize it like so..." start="00:14:22.399" video="mainVideo" id=subtitle]]
+[[!template text="There's two directions you can travel," start="00:14:33.760" video="mainVideo" id=subtitle]]
+[[!template text="and you can either go sideways or you" start="00:14:35.120" video="mainVideo" id=subtitle]]
+[[!template text="can go up and down." start="00:14:37.040" video="mainVideo" id=subtitle]]
+[[!template text="If you go sideways, you're changing your perspective." start="00:14:38.399" video="mainVideo" id=subtitle]]
+[[!template text="So normal mode, word mode, line mode," start="00:14:41.680" video="mainVideo" id=subtitle]]
+[[!template text="window mode, and so on" start="00:14:45.440" video="mainVideo" id=subtitle]]
+[[!template text="are all different perspectives on your ground editing experience." start="00:14:46.544" video="mainVideo" id=subtitle]]
+[[!template text="The other direction you can travel in" start="00:14:51.680" video="mainVideo" id=subtitle]]
+[[!template text="is up or down, which takes you through meta levels." start="00:14:53.265" video="mainVideo" id=subtitle]]
+[[!template text="So you go from the ground level editing experience," start="00:14:56.811" video="mainVideo" id=subtitle]]
+[[!template text="up to mode mode, and then up to the tower plane, and so on, and so on." start="00:14:59.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So this all sounds very complex," start="00:15:07.040" video="mainVideo" id=subtitle]]
+[[!template text="but the truth is it's not really that complicated," start="00:15:12.568" video="mainVideo" id=subtitle]]
+[[!template text="even though it feels that way." start="00:15:18.160" video="mainVideo" id=subtitle]]
+[[!template text="The reason it isn't that complicated" start="00:15:20.699" video="mainVideo" id=subtitle]]
+[[!template text="is because no matter how many levels" start="00:15:22.959" video="mainVideo" id=subtitle]]
+[[!template text="up or down you go and no matter where you are," start="00:15:26.480" video="mainVideo" id=subtitle]]
+[[!template text="whether you're in at the ground level" start="00:15:30.160" video="mainVideo" id=subtitle]]
+[[!template text="editing the actual text" start="00:15:32.399" video="mainVideo" id=subtitle]]
+[[!template text="or whether you're at a meta level," start="00:15:34.079" video="mainVideo" id=subtitle]]
+[[!template text="some unknown meta level and you don't know where you are," start="00:15:35.802" video="mainVideo" id=subtitle]]
+[[!template text="no matter where you are," start="00:15:39.279" video="mainVideo" id=subtitle]]
+[[!template text="the way in which you interact with it" start="00:15:41.133" video="mainVideo" id=subtitle]]
+[[!template text="is the same at every level." start="00:15:44.399" video="mainVideo" id=subtitle]]
+[[!template text="That is the great power of this approach:" start="00:15:47.519" video="mainVideo" id=subtitle]]
+[[!template text="that all of the different levels are the same." start="00:15:54.751" video="mainVideo" id=subtitle]]
+[[!template text="In fact, the complexity of the whole" start="00:16:00.880" video="mainVideo" id=subtitle]]
+[[!template text="is exactly identical to" start="00:16:03.839" video="mainVideo" id=subtitle]]
+[[!template text="the complexity of each part," start="00:16:05.545" video="mainVideo" id=subtitle]]
+[[!template text="so if you know how to edit words" start="00:16:07.657" video="mainVideo" id=subtitle]]
+[[!template text="in the ground level buffer" start="00:16:10.000" video="mainVideo" id=subtitle]]
+[[!template text="and you know how to move lines around using line mode," start="00:16:12.048" video="mainVideo" id=subtitle]]
+[[!template text="then you know how to edit any aspect of your editing experience at any level." start="00:16:15.378" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So this is a pre-release demo." start="00:16:30.079" video="mainVideo" id=subtitle]]
+[[!template text="This doesn't exist on MELPA yet, but you can follow updates at this repo on github." start="00:16:31.780" video="mainVideo" id=subtitle]]
+[[!template text="If you can also be a beta tester" start="00:16:40.079" video="mainVideo" id=subtitle]]
+[[!template text="or something like that, if you like, that would be very helpful." start="00:16:43.850" video="mainVideo" id=subtitle]]
+[[!template text="You can learn more about this at" start="00:16:46.775" video="mainVideo" id=subtitle]]
+[[!template text="drym.org, which is where I house" start="00:16:50.560" video="mainVideo" id=subtitle]]
+[[!template text="the research that I work on." start="00:16:53.920" video="mainVideo" id=subtitle]]
+[[!template text="In particular, the research on epistemic levels" start="00:16:55.726" video="mainVideo" id=subtitle]]
+[[!template text="is what inspired this particular Emacs extension." start="00:17:00.154" video="mainVideo" id=subtitle]]
+[[!template text="You can also learn about" start="00:17:03.600" video="mainVideo" id=subtitle]]
+[[!template text="dialectical inheritance attribution, which is the basis of" start="00:17:05.600" video="mainVideo" id=subtitle]]
+[[!template text="a new economic system that could be fair" start="00:17:10.880" video="mainVideo" id=subtitle]]
+[[!template text="and could lead to a prosperous and happy world." start="00:17:14.559" video="mainVideo" id=subtitle]]
+[[!template text="You can follow me on Twitter at @countvajhula." start="00:17:19.439" video="mainVideo" id=subtitle]]
+[[!template text="That's it! Thank you." start="00:17:26.319" video="mainVideo" id=subtitle]]
diff --git a/2020/info/08.md b/2020/info/08.md
index 17769bd3..da17faf5 100644
--- a/2020/info/08.md
+++ b/2020/info/08.md
@@ -1,8 +1,10 @@
# Building reproducible Emacs
Andrew Tropin
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.webm"]]
-[Download compressed .webm video (18.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin--vp9-q56-video-original-audio.webm)
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.webm" subtitles="/2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt"]]
+[Download compressed .webm video (29.4M)](https://media.emacsconf.org/2020/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin--compressed32.webm)
+[Download compressed .webm video (18.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
It's not always easy to take part of someone's configuration and make
it work, it's almost never easy to move your configuration to fresh OS
@@ -57,3 +59,377 @@ Currently trying it, and also in-process of switching from Nix to Guix.
- Reproducible development environment: <https://github.com/abcdw/rde>
- Using Org-roam to demo how to config a Nix layer(?)
- custom.el conflicts with Nix(?)
+
+# Related talks
+
+- [rde Emacs introduction](/2022/talks/rde/) - Andrew's 2022 talk
+
+<a name="transcript"></a>
+# Transcript
+
+00:00:00.000 --> 00:00:24.056
+Hello, everyone. I am Andrew Tropin. I
+am a professional software engineer I
+was playing with NixOS It's an operating
+system based on the Nix package manager.
+I came up with this interesting approach
+for configuring Emacs. I want to share
+it with you.
+
+00:00:24.056 --> 00:01:31.389
+I will start with the bold statement
+that Emacs configuration is almost the
+same as system configuration. It's not
+related to that Emacs joke about Emacs
+being an operating system. It's more
+about Emacs being integrated with so
+many tools inside the environment. For
+example, if you don't even use any fancy
+workflows, you use only plain Emacs
+without any configuration, dired uses
+ls, grep.el uses grep, and info files
+placed somewhere in your system. Also
+Emacs can interact with gpg, git, make,
+and other stuff. When you grow your
+Emacs Lisp init.el file or other files
+in your .emacs.d directory, you get much
+more integration with underlying
+operating system.
+
+00:01:31.389 --> 00:02:08.622
+The question is: how to manage such
+configuration? Because you can't just
+take a bunch of .el files and move to a
+different machine and be sure that
+everything will work. Because you didn't
+move your executables. You didn't move
+configuration of other programs. You
+didn't move your service configurations.
+And you can't even just create dotfiles
+for each program and move it with your
+.el files. The approach would be a
+little broader.
+
+00:02:08.622 --> 00:02:23.722
+Everything that I am showing today is
+available on Github. Any source code,
+you can find here. but my copy of the
+repository is on my local machine.
+
+00:02:23.722 --> 00:03:45.889
+As you can see, the font is a little
+small. And also, my terminal font is
+also a little small. I can do a quick
+fix and increase the font. But imagine
+how cool it will be if you can have a
+file which contains the configuration
+for a system. You change some value.
+Here, for example, fontSize = 16 and run
+some command and based on this file and
+some other includes your operating
+system is built and all your environment
+is set up and ready for use. For example
+here, we already built the new operating
+system, and everything is already
+installed in my SSD. Now I can run the
+program and you can see that my alacrity
+terminal has much bigger font and also
+if I restart my Emacs instance it by
+default uses a much bigger font for any
+buffer. Practical, and as you can see,
+it's already working, thanks to Nix and
+NixOS.
+
+00:03:45.889 --> 00:04:44.556
+I will explain a little later how it
+works inside, but for now, let's specify
+a little more what happened right now. I
+fed my... Oh. It doesn't work. Sorry. I
+want... I have my whole operating system
+defined in a few Nix files. For example,
+here you saw the file which defines some
+variables for my environment and then a
+few more files for different programs.
+There is a folder which contains all
+Emacs-related configuration. Also, there
+are package definitions defined in Nix
+package repositories which is also
+included for the function which
+generates the operating system.
+
+00:04:44.556 --> 00:05:11.689
+Getting all my configurations written in
+Nix language and a few firewalls in ??
+languages, everything is gathered
+together, and from that input and only
+from that input, the new operating
+system is built. Emacs now is a part of
+this operating system. I can distribute
+this Emacs configuration with all the
+environment that I want.
+
+00:05:11.689 --> 00:05:50.789
+Practical so far. Let's clarify which
+problems does it solve. First of all,
+the integration problem. For example, a
+few minutes ago, you saw that I changed
+one variable. That was to update... The
+first one, for my terminal, and the
+second one, for my Emacs. It's pretty
+good that a few different programs can
+share some data. For example, you can
+have one of them for every application,
+or something like that and you change
+only one value in one place and the
+whole operating system is updated.
+
+00:05:50.789 --> 00:06:20.856
+Also, another problem is
+reproducibility. For example, when you
+install your new instance of Emacs on
+your laptop or something like that, you
+can be sure that you will get the same
+package versions and you can be sure
+that the configuration of your work
+results in newly-updated or
+newly-installed packages.
+
+00:06:20.856 --> 00:06:43.256
+Also, if you update packages, sometimes
+it's hard to revert, because it's the
+way your package manager almost every
+time works. You're just getting the
+latest available packages. If they are
+broken, you need to wait for the
+maintainer to update them.
+
+00:06:43.256 --> 00:07:39.656
+And also, your basic configuration
+almost always doesn't contain any native
+dependencies, like executables or
+something else. Recently, I saw some
+attempts to make it possible to use
+use-package for those needs, like
+ensuring native dependencies or
+something like that. It's obviously...
+If your configuration isn't reproducible
+and it doesn't have your whole
+environment, placed in one repository,
+it's very hard to share such
+configuration. You can share part of
+your configuration and some instruction
+how to get a similar environment, but it
+doesn't always work. Let's go closer to
+actually Emacs configuration itself.
+
+00:07:39.656 --> 00:08:10.839
+I had some experience with Spacemacs and
+Doom Emacs distributions. I also watched
+a lot of videos and articles by
+Protesilaos and a lot of other custom
+configurations of many different cool
+people. And also I was inspired by
+use-package and decided that I will
+create a folding structure for my Emacs
+configuration.
+
+00:08:10.839 --> 00:09:01.306
+I will be using subconfigs. It's almost
+the same as layers in Spacemacs, or
+modules in Doom Emacs, which are
+self-contained. They contain Emacs Lisp
+code which configures all packages
+necessary for this part of
+configuration. It contains all Emacs
+dependencies like Emacs packages. It
+contains all native dependencies like
+binaries or maybe info pages or
+something like that. It also contains
+variables that can be shared between
+Emacs and other applications, and it can
+contain service or system definitions
+which configure your systemd service or
+something like that that you use in your
+workflow. For example, for synchronizing
+your e-mails.
+
+00:09:01.306 --> 00:10:06.922
+Let's start from just the example that I
+already am... I have a folding structure
+for my configuration. I have some files
+here. early-init just has this. Nothing
+changes. It will be copied to that
+.emacs.d directory later with some
+exceptions that it will replace the Nix
+dir and a symlink will be created to it.
+I have use-package-init.el. It's part of
+configuration that will be on top of
+everything to be able to use use-package
+in my subconfigurations. And actually
+some Nix code to glue everything up and
+config dirs which contain all my
+subconfigs.
+
+00:10:06.922 --> 00:11:10.105
+Let's start from faces subconfig. Let's
+start from config.el which can be
+familiar for many people. Just
+use-package definition for faces package
+and some configuration for it which are
+setting some attributes. It reads some
+variables. Those variables are actually
+defined in a different place. If I open
+default.nix file, you can see that it
+contains the definition or subconfig,
+and it should contain a definition of
+variables that it uses by... I forgot to
+move it from my original default.nix
+file somewhere here. You probably can
+find definition of those variables just
+right here.
+
+00:11:10.105 --> 00:11:38.422
+I took values from my Nix expressions.
+Those values will be shared across my
+alacrity, Emacs, and other applications.
+Later, they will be placed in generated
+Emacs configuration. They will be
+available for faces config. Here I will
+be referencing them just like Emacs
+variables.
+
+00:11:38.422 --> 00:12:39.222
+Let's take a look at another more
+complicated example. For example,
+org-roam package. Just a basic
+use-package configuration which uses a
+variable and the definition. It's a
+little more complex than the previous
+one. Elisp configuration in the same
+file. emacsPackages specified here.
+Those two packages: org-roam and
+company-org-roam. systemPackages: it's
+something that should be available on
+your host operating system. And for
+emacsPackages, you need sqlite package,
+and also the definition of the variable
+which will be passed in my Emacs
+configuration later. It's equal to my
+workDir, which is defined in my
+environment, 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:13:26.222
+Oh, okay. I'm almost finished. It was
+last example. Let me open my Org file.
+Okay. Right here. I won't give you an
+introduction to Nix itself and the
+underlying mechanism, but I can say that
+there's already a proof of concept
+framework for utilizing Nix and NixOS
+for configuring Emacs and making a very
+complex workflow reproducible on other
+machines. It gives everything that we
+saw right now.
+
+00:13:26.222 --> 00:14:05.389
+For the future work, I plan to
+reimplement it in Guile, which is a
+Scheme dialect, which is another Lisp
+language, for the GNU Guix operating
+system, because I like Lisp languages a
+little more than Nix languages and I
+want to make this project from proof of
+concept to some state which will be
+user-friendly and available for other
+people. If I will have a lot of time, I
+will make an operating system which will
+be inspired by Lisp machines to make the
+whole experience very Lispy.
+
+00:14:05.389 --> 00:14:22.622
+Thank you for your attention and now I
+will answer questions. 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:59.456
+Ideally, in the folding way, I create a
+separate directory called
+local/share/emacs, and I place custom el
+files here. It's not synchronized in any
+way, and it will be just lost in case
+you move to a separate machine. I do it
+for a purpose, because I don't use
+custom.el. 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:32.989
+I read a lot of documentation. Also, I
+saw the course like Learn Nix in 15
+minutes. And also there was another
+resource. Better to ask this question in
+Nix or NixOS channel in IRC, which will
+be treated in more details.
+
+00:15:32.989 --> 00:15:38.909
+What are the main advantages besides
+switching computers, which most people
+rarely do?
+
+00:15:38.909 --> 00:16:10.556
+For example, the original idea was to
+make part of configurations available
+for projects. For example, you have some
+project, you made the setup, and want
+other developers to use the same setup
+on their machine, but you implement only
+the part of stuff, like one subconfig
+especially for this language for this
+project. With such approach, you can
+easily 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:41.239
+Yes, I tried it, and currently I am in
+the state of switching from Nix to Guix.
+You can follow my Youtube channel, I
+think, I do streams twice in a month
+talking about reproducibility and
+related stuff. Probably soon I will be
+talking about installation of Guix and
+configuration of it.
+
+00:16:41.239 --> 00:16:50.406
+In case you're watching this video
+later, you can find me somewhere on the
+network using those contacts. It's my
+nickname and my e-mail address.
+
+00:16:54.072 --> 00:17:04.622
+([Amin:] Awesome. I think we're wrapping
+up just on time. Thank you so much,
+Andrew, for your great talk, and for
+hanging out to answer the questions
+live.)
+
+00:17:04.622 --> 00:17:18.000
+[Andrew:] Thank you for organizing the
+conference and thank you all
+participants for questions and
+participation. See you soon!
diff --git a/2020/info/09.md b/2020/info/09.md
index fbefd155..6c3f6a45 100644
--- a/2020/info/09.md
+++ b/2020/info/09.md
@@ -1,11 +1,14 @@
# Orgmode - your life in plain text
Rainer König
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.webm" subtitles="/2020/subtitles/https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt"]]
-[Download compressed .webm video (12M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig--vp9-q56-video-original-audio.webm)
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.webm" subtitles="/2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt"]]
+[Download compressed .webm video (22.5M)](https://media.emacsconf.org/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig--compressed32.webm)
+[Download compressed .webm video (12M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--questions--rainer-konig.webm" download="Download Q&A video, 720p"]]
-[Download compressed Q&A .webm video (5.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--09-orgmode-your-life-in-plain-text--questions--rainer-konig--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (12.2M)](https://media.emacsconf.org/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--questions--rainer-konig--compressed32.webm)
+[Download compressed Q&A .webm video (5.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--09-orgmode-your-life-in-plain-text--questions--rainer-konig--vp9-q56-video-original-audio.webm)
In this talk I'll give you a quick overview of my Orgmode GTD
system. We start with capturing a small project, scheduling
@@ -137,3 +140,147 @@ which helps me to identify the tasks I procrastinate. ;-)
customized setup. It's rather out-of-the-box only.
- Org-mode tutorial YouTube playlist:
<https://www.youtube.com/playlist?list=PLVtKhBrRV_ZkPnBtt_TD1Cs9PJlU0IIdE>
+
+<a name="transcript"></a>
+# Transcript
+
+00:00:02.480 --> 00:00:22.560
+Hi there, this is Rainer. I have a
+10-minute time slot at the EmacsConf and
+I will show you a quick walk through my
+GTD system in Org mode, so let's start
+with capturing. We want to capture what
+we do here.
+
+00:00:22.560 --> 00:01:03.600
+So the idea is I press F6 and I say: "I
+want to make a small project because
+this video will be a small project," so
+the thing is: "Record a video for Emacs
+Conf 2020." Video is recorded, edited,
+and uploaded. We can also set the
+timeline because we want to upload it.
+The time, the deadline for uploads
+is--we know it already--the 14th of
+November. so let me put this in here.
+See, this is done.
+
+00:01:03.600 --> 00:01:40.400
+Now, because it's a project... I mean, I
+could say just one task to record a
+video, but it's too much, so let's split
+it down in a few small tasks. The next
+one...
+
+00:01:40.400 --> 00:02:18.560
+So you see, I've just typed a few quick
+tasks. We can see them if we look in the
+capture file. You see, there's my
+project entry and there are all my
+tasks. Since it's a project, I can now
+make it easy. I just indent every task
+by one and then, so...
+
+00:02:18.560 --> 00:02:45.599
+Okay, so you see we have one project
+here, and this one we refile now to our
+backlog. So if we look in our backlog,
+you see my project with all the tasks.
+
+00:02:45.599 --> 00:03:30.879
+So now, next one. I pretend now I'm
+doing a weekly review. C-c x b. And I
+already did some things, and now the
+point where I am is scheduled tasks with
+no date. Those are all those tasks. So I
+have a weekly review helper that says,
+okay, show me everything that I need to
+schedule, plan. So schedule this class.
+We do everything.
+
+00:03:30.879 --> 00:04:03.200
+So everything is scheduled now, and we
+can check off that and so on. We can...
+I have a plan for every day. That's my
+free plan. I press F6, and I say p p
+plan. Private things. You see there is
+the first day, 12th of November, German.
+And now I can look at what I have to do
+today.
+
+00:04:04.239 --> 00:04:37.680
+My agenda view is very long, and I just
+want to focus on a few tasks, so I
+copied them to my daily plan. I just
+want to show you. So I have a daily plan
+for every day, and that means this one
+is what I see, and this one is gone.
+
+00:04:37.680 --> 00:05:15.605
+So now, let's pretend we are working on
+the first: we find the requirements for
+the video. We had a look. Okay, I can
+mark this task as done here because I
+knew the requirements. C-c t. Done.
+Format is 720p, webm codec. So this one
+is done and I can mark it off here as
+well. So now I have marked it off
+everywhere.
+
+00:05:15.605 --> 00:05:24.639
+The good thing of my daily plan is that
+I can really see it all the day. I stick
+to this, what I decided in the morning
+what I want to do.
+
+00:05:24.639 --> 00:05:58.319
+So let's go to the next one. Make a
+quick test. Yeah, I did the test
+already. I will do a small trick. I say,
+okay, I record the video here. Video
+recorded. Then let me do what to show.
+Now I'm recording the video.
+
+00:05:58.319 --> 00:07:02.560
+Let's see. What we do: we had capture,
+we had weekly review, we had daily
+planning. How are we processing this?
+Very nice. So let's pretend the video is
+recorded C-c t done. Let me put this to
+NEXT again. Start kdenlive to time
+lapse. After recording it, I pretend
+this is done now. C-c t done. Then I
+have a video ready. Let's pretend I did
+the upload as well. Done. Video
+uploaded. So I can say everything now is
+done. Save it, so tomorrow I see what I
+did yesterday. Here I'm completely done.
+
+00:07:02.560 --> 00:07:40.455
+We have the weekly review. We put
+another buffer here because I want to
+show you the final step of my weekly
+review. If you see, there's a final step
+that says: select finished tasks and
+make a bulk archive action. So if you
+look at my EmacsConf thing, okay, the
+project is done as well. Project C-c t
+done. And then, what I can do is now see
+a weekly review helper. Finished tasks.
+
+00:07:40.455 --> 00:08:00.320
+I could make a bulk operation that says
+archive everything, but at the moment I
+don't need to do that because we have a
+tree structure, so it's C-c x a I have
+this task away, and the task is done. So
+that's it.
+
+00:08:00.320 --> 00:08:21.959
+That's my system you see: from capturing
+tasks, to scheduling tasks, to putting
+it on the daily plan, performing it, and
+at the end, when everything is done, the
+next weekly review they will go to the
+archive file, because it's finished.
+Thank you for watching. That's it.
diff --git a/2020/info/10.md b/2020/info/10.md
index c2728cb8..9d0cb53d 100644
--- a/2020/info/10.md
+++ b/2020/info/10.md
@@ -2,7 +2,9 @@
Andrea
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--10-lead-your-future-with-org--andrea.webm" subtitles="/2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt"]]
-[Download compressed .webm video (10.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--10-lead-your-future-with-org--andrea--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (16.5M)](https://media.emacsconf.org/2020/emacsconf-2020--10-lead-your-future-with-org--andrea--compressed32.webm)
+[Download compressed .webm video (10.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--10-lead-your-future-with-org--andrea--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
The world is full of possibilities. A person life is rather short
though, and one can easily end up carry on without focus.
@@ -39,6 +41,100 @@ in. And programming in OCaml was so nice in there :)
- Blog: <https://ag91.github.io>
- <https://ag91.github.io/blog/2020/09/27/org-agenda-and-your-future-or-how-to-keep-score-of-your-long-term-goals-with-org-mode/>
+<a name="transcript"></a>
# Transcript
-Welcome to my talk, Lead Your Future with Org. Who am I? I'm Andrea. I work as a Scala software engineer somewhere in the Netherlands, and I inherited my passion for Emacs from my PhD supervisor. From that moment on, I got in synergy with it. You can find more about me and my interests at https://ag91.github.io. That is the place where I keep my blog and I blog on a weekly basis. Let's get into the bulk of the talk. Why I needed a vision. The main, main problem is that I have too many interests. I like a lot of things, and these things take time. Then I have too little time to do other things that are very important as well. And so I need priority. And the vision in my mind is both an ambition, something that I want to do with my life, and at the same time, it's a way to focus my efforts and get rid of some stuff that fundamentally is not something I really care so much about. Even if you come up with a vision and so with a smaller scope of things that you want to do, even then, you have to take this ambition of yours, this vision, and disassemble it in very small steps. Org Mode is very good at taking care of this because you can keep track of TODOs in Org Mode. So let me show you how I keep an agenda that also keeps track of my vision. For this talk, I have a running example. Vision will be "I want to bring joy to people." and "I want to live in synergy with the planet." Okay, so, given these two visions, let's open the agenda. You will see on the right that now I have some tasks, both on Tuesday and on Friday. Things to notice is that we said one of our visions is synergy with the planet, so some tasks are annotated on the left with this category and some with "Bring joy to people." In this way, you can distinguish where are my... In this day, where my effort is going in this day. The other thing is the specification of these tasks, and then at the end, you can notice a tag on the right that is essentially a guess of how long this task will have an effect over the future. So, for example, installing solar panel onto my roof is going to have an effect of 10 years over my life, if I manage to achieve that. That is my rough guess. You will notice that the ones that have a bigger amount, so 10 years over the 5 year one, because I order my day so that the tasks that are more important or that I believe are more effective over my future, I sort them so that they appear at the top. In this way, I can basically decide, okay, today, what should I... Find a video on Youtube, but I should take into consideration when I look at my agenda that I've traded that small fun for today with something that could have had an effect over a longer period of time. Let me show you how I also exploit the facilities that Org Mode comes with. I will... I have two templates available to me. I will choose one. The first thing that it asks to me is "How long will this affect your life?" So I like ... It will affect a long time, if I manage to produce only for myself. So I choose 10 years. And then I specify the task. So, "Learn how to keep bees." I collect this task. It will now appear in the middle because 10 years is between 20 years and 5 years. So I know that if I put some effort in learning how to keep bees, I should be quite happy for today. Okay. So, say that I do it, say that that's it... Once I've done this task, how can I be... How do I know how much progress I am doing? The way I can do that is by retrospecting weekly or monthly about the successes or the progress that I am doing. How I do it is simply by running this kind of snippet that shows me that for this month, I have done three tasks for bringing joy to people and three tasks for synergy with planet. This is useful because you can repeat it and it will be appended, so every time you run it again, you can compare if you are... how you are working towards your goal and if you're focusing more on bringing joy to people or if you're focusing more on synergy. Balance the effort. A thing that I want to share that I think will be useful to you is this function I use that I made for myself to create these statistics. It's a wrapper around the very enjoyable library org-ql, which allows you to query and group headings, do analysis on headings, or restructuring and view headings in a SQL fashion. The syntax is very similar to SQL. You can manipulate your headings and visualize them or just get statistics as I have done here. Finally, for this talk, say that you are doing progress, that progress most likely will generate some useful knowledge for yourself. My way to store this knowledge is through org-roam, another interesting mode that is very... that is becoming very relevant and known today. The idea is that I simply... If I learn how to make, how to install solar panels, that can be useful knowledge. I can link to some other knowledge that I have and so create my own knowledgebase, and save it for later use. My later use is typically, in this case, my blog. In here, I have a few notes that are basically a synthesis of knowledge that I have collected doing my tasks towards my vision. With this, this is all I wanted to show you for this talk. You can follow me on my blog at https://ag91.github.io . That is also where I am going to share a version of this Org Mode file that allows you basically to create the same kind of configuration I have here, and you can create an instance by running this snippet of Emacs in which you can just run this example. An extended example I will also add, to just play around safely with this kind of configuration. So enjoy the rest of the conference. Catch you later! Nice to meet you!
+Welcome to my talk, Lead Your Future with Org. Who am I? I'm Andrea. I
+work as a Scala software engineer somewhere in the Netherlands, and I
+inherited my passion for Emacs from my PhD supervisor. From that
+moment on, I got in synergy with it. You can find more about me and my
+interests at https://ag91.github.io. That is the place where I keep my
+blog and I blog on a weekly basis. Let's get into the bulk of the
+talk.
+
+Why I needed a vision. The main, main problem is that I have too many
+interests. I like a lot of things, and these things take time. Then I
+have too little time to do other things that are very important as
+well. And so I need priority. And the vision in my mind is both an
+ambition, something that I want to do with my life, and at the same
+time, it's a way to focus my efforts and get rid of some stuff that
+fundamentally is not something I really care so much about. Even if
+you come up with a vision and so with a smaller scope of things that
+you want to do, even then, you have to take this ambition of yours,
+this vision, and disassemble it in very small steps. Org Mode is very
+good at taking care of this because you can keep track of TODOs in Org
+Mode.
+
+So let me show you how I keep an agenda that also keeps track of my
+vision. For this talk, I have a running example. Vision will be "I
+want to bring joy to people." and "I want to live in synergy with the
+planet." Okay, so, given these two visions, let's open the agenda. You
+will see on the right that now I have some tasks, both on Tuesday and
+on Friday. Things to notice is that we said one of our visions is
+synergy with the planet, so some tasks are annotated on the left with
+this category and some with "Bring joy to people." In this way, you
+can distinguish where are my... In this day, where my effort is going
+in this day.
+
+The other thing is the specification of these tasks, and then at the
+end, you can notice a tag on the right that is essentially a guess of
+how long this task will have an effect over the future. So, for
+example, installing solar panel onto my roof is going to have an
+effect of 10 years over my life, if I manage to achieve that. That is
+my rough guess. You will notice that the ones that have a bigger
+amount, so 10 years over the 5 year one, because I order my day so
+that the tasks that are more important or that I believe are more
+effective over my future, I sort them so that they appear at the top.
+In this way, I can basically decide, okay, today, what should I...
+Find a video on Youtube, but I should take into consideration when I
+look at my agenda that I've traded that small fun for today with
+something that could have had an effect over a longer period of time.
+
+Let me show you how I also exploit the facilities that Org Mode comes
+with. I will... I have two templates available to me. I will choose
+one. The first thing that it asks to me is "How long will this affect
+your life?" So I like ... It will affect a long time, if I manage to
+produce only for myself. So I choose 10 years. And then I specify the
+task. So, "Learn how to keep bees." I collect this task. It will now
+appear in the middle because 10 years is between 20 years and 5 years.
+So I know that if I put some effort in learning how to keep bees, I
+should be quite happy for today. Okay. So, say that I do it, say that
+that's it... Once I've done this task, how can I be...
+
+How do I know how much progress I am doing? The way I can do that is
+by retrospecting weekly or monthly about the successes or the progress
+that I am doing. How I do it is simply by running this kind of snippet
+that shows me that for this month, I have done three tasks for
+bringing joy to people and three tasks for synergy with planet. This
+is useful because you can repeat it and it will be appended, so every
+time you run it again, you can compare if you are... how you are
+working towards your goal and if you're focusing more on bringing joy
+to people or if you're focusing more on synergy. Balance the effort.
+
+A thing that I want to share that I think will be useful to you is
+this function I use that I made for myself to create these statistics.
+It's a wrapper around the very enjoyable library org-ql, which allows
+you to query and group headings, do analysis on headings, or
+restructuring and view headings in a SQL fashion. The syntax is very
+similar to SQL. You can manipulate your headings and visualize them or
+just get statistics as I have done here.
+
+Finally, for this talk, say that you are doing progress, that progress
+most likely will generate some useful knowledge for yourself. My way
+to store this knowledge is through org-roam, another interesting mode
+that is very... that is becoming very relevant and known today. The
+idea is that I simply... If I learn how to make, how to install solar
+panels, that can be useful knowledge. I can link to some other
+knowledge that I have and so create my own knowledgebase, and save it
+for later use. My later use is typically, in this case, my blog. In
+here, I have a few notes that are basically a synthesis of knowledge
+that I have collected doing my tasks towards my vision.
+
+With this, this is all I wanted to show you for this talk. You can
+follow me on my blog at https://ag91.github.io . That is also where I
+am going to share a version of this Org Mode file that allows you
+basically to create the same kind of configuration I have here, and
+you can create an instance by running this snippet of Emacs in which
+you can just run this example. An extended example I will also add, to
+just play around safely with this kind of configuration. So enjoy the
+rest of the conference. Catch you later! Nice to meet you!
diff --git a/2020/info/11.md b/2020/info/11.md
index b04683b4..709efcf7 100644
--- a/2020/info/11.md
+++ b/2020/info/11.md
@@ -2,7 +2,8 @@
Aldric
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.webm" subtitles="/2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt"]]
-[Download compressed .webm video (19MB)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (19MB)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
Come see how org-gtd leverages org-mode to automate the GTD inbox
management. Stick around to see how the various org-mode tools get
@@ -83,3 +84,374 @@ etc.
- I'm using org-edna as well and I want to point others to
<https://github.com/toshism/org-linker-edna> which is an enormous
help when working with edna.
+
+<a name="transcript"></a>
+# Transcript
+
+00:00:01.680 --> 00:00:29.199
+Hello, and welcome to my Org GTD talk. I
+wrote this package because I was
+overwhelmed with all the stuff I had to
+manage working at home. I'd heard about
+GTD. I saw someone using it with just a
+small notebook. I wanted to do it in
+Emacs because, well, Emacs can do
+everything, right?
+
+00:00:29.199 --> 00:01:12.640
+I'm going to jump in quickly. Just so
+you know, here's kind of a list of the
+resources. Obviously, org-gtd, which you
+can find there. You can open an issue,
+ask me questions there about it. I use
+org-edna, a package for state triggers.
+I'm going to show this briefly when I
+finish item in a project.
+org-agenda-property, you will see in the
+agenda. It's going to show to whom an
+action has been delegated to. You will
+see org-roam briefly as a reference
+because that is what I have chosen for
+my knowledge archival tool. You can
+choose whatever you prefer.
+
+00:01:12.640 --> 00:01:57.520
+This is a quick, quick reminder on what
+GTD is and how it works. This is not a
+lesson on--a presentation on gtd because
+that would be... Well, other people have
+done it better than me. In short,
+everything goes into the inbox. Then you
+process the inbox, and you decide what
+to do, if it could be actionable or not.
+If it's actionable, it could be a
+project or it could be a single action,
+which you could delegate or schedule or
+just do it. If it's not actionable, you
+could just throw it away, incubate it
+for later, or move it into your files,
+reference.
+
+00:01:57.520 --> 00:02:27.200
+Over here, you can see the global
+bindings for org-gtd. Those are the
+actions, the functions I have made
+available. This is in progress. There's
+more to come. Some stuff is probably
+missing. It's grown mostly from my own
+personal use so far, so it doesn't have
+things. In the bottom right, you can see
+the agenda.
+
+00:02:27.200 --> 00:02:54.319
+One thing I wanted to do with this
+package was leverage Org Mode as much as
+possible. So I tried to not reinvent the
+wheel as much as I could. That meant
+reusing the agenda. You can see here a
+couple of the things that are made
+available or kind of customized or
+configured for you, some of the opinions
+that org-gtd has.
+
+00:02:54.319 --> 00:03:49.280
+Up here, for instance, you can see a
+delegated action. So a delegated action
+has someone to whom it's delegated. It's
+my parents in this case. It has the name
+of the action: ask parents what gift
+they want. It's marked as the state of
+WAIT because I'm waiting. It is
+scheduled because you should ping people
+or check on the status status of a task
+when you're waiting for it, so you don't
+forget about it or it gets lost forever.
+I have a scheduled action to give a
+talk. That's what I'm doing right now. I
+have an incubated action which is also
+scheduled: to make money through the
+lottery. This is a thing to take a look
+at for later, decide later what I want
+to do. It might be actionable, it might
+not be. I don't know right now, or I
+didn't know when I processed it, so I
+incubated it.
+
+00:03:49.280 --> 00:03:59.360
+Underneath, we have all the things that
+are direct actions for me to take.
+
+00:03:59.360 --> 00:04:33.384
+All right. You see a little bit of the
+preparation seeps through the actual
+talk. I have here two... I have a single
+action of "Steal Andrea's GTD
+configuration" and an action to read the
+GTD book. It's part of a project. So
+most of the day-to-day operation with
+with this package should come through
+just having the agenda open and having
+it be your source for the information
+you need to know, so that you can do the
+right thing.
+
+00:04:33.384 --> 00:05:18.960
+So let's take a look at what's
+underneath all of this really quickly.
+We have--There's three primary files. We
+have the inbox. I'm gonna process it in
+a second because there's two things
+here. One thing to cancel, like an
+action to not take. It's nothing. And
+then something I will just put into
+org-roam, just so you can see that there
+is the incubate file. You can see here:
+make money through the lottery,
+captured, refiled here, and scheduled so
+it would show up in the agenda right at
+a given time. On the right, you have the
+actionable file. This is the one that
+has the most information, where most
+things should go.
+
+00:05:18.960 --> 00:05:37.919
+So I have the single actions. They all
+go underneath here. This is marked as
+next because it's an action for me to
+take. Delegated is marked as WAIT. It is
+not an action for me to take. It's an
+action for somebody else to take, but it
+is scheduled because I may wanna... I
+can check in at some point.
+
+00:05:38.400 --> 00:05:53.840
+Things that are scheduled, like "give a
+talk," do not have a TODO or NEXT or
+WAIT state because they are not bound
+that way. They are time-bound, so they
+will show up in the agenda when the time
+comes. I shouldn't act on them or I
+can't act on them beforehand.
+
+00:05:53.840 --> 00:06:07.520
+You can see here, I have two projects: a
+test project (and I will do something
+with this in a second) and then there's
+this package "Make a GTD package."
+There's a project here for me to create
+this. It's made of a bunch of actions.
+
+00:06:07.520 --> 00:07:03.840
+I'm going to show you two things here.
+One is: since I was trying to leverage
+Org Mode as much as possible, I didn't
+try to create very clever operations,
+because Org Mode has a lot of very
+powerful tools already. There's
+automations I can add, but I thought it
+might be better to leave more things in
+the hands of the user. So here, in this
+case, this test project we can just
+archive. Right. That's just C-c C-x C-a
+is the org-archive action. Save this. So
+now if we go to... This will create an
+archive file which will have this
+information for later perusal if you're
+interested.
+
+00:07:03.840 --> 00:07:27.680
+That's one thing. If we go back to the
+agenda for a second, you can see these
+things here. Org. So by the way, this
+"parents" here was the org agenda
+property. This is what shows here,
+right? And here, if I finish "Read the
+GTD book," I mark it as done. Now
+refresh.
+
+00:07:27.680 --> 00:07:57.280
+You'll see that another item shows up,
+and that is where org-edna comes in.
+When an action is marked as done in a
+project, the next to do action is
+automatically marked as next, so your
+agenda is automatically updated. This
+was one of the nice things for me
+because I didn't want to have to open my
+file, go find the action, mark it as
+done, find the next one, mark it as
+next, and so forth. I didn't want to
+bother with it.
+
+00:07:57.280 --> 00:08:20.720
+Oh, actually, you know what, let me show
+you something else. This simple
+project... I don't need this timestamp
+to be here but I like having a capture
+timestamp here, so I'm gonna make one
+up. So this is the most convenient thing
+that I think... This is one of the most
+convenient things that I get out of this
+binding.
+
+00:08:20.720 --> 00:09:00.080
+The next really convenient thing is the
+way this gets processed. Let me show you
+this. When you process the entire inbox,
+what you see is the items one at a time,
+so you can work with them. You can see
+at the bottom... You can work with them
+without being distracted. You can see at
+the bottom the list of things you can
+do, which are all the decisions you can
+take from GTD, right? In this case, this
+is one to throw out, so press t. You
+have the option to make modifications to
+this if you want to. If you have any
+reason to store it, then you finish
+editing. You can add a tag if you want
+to, because this might still be
+interesting,
+
+00:09:00.080 --> 00:09:37.457
+and then enter and it's done. Important
+knowledge, I'm going to hit a for
+archive it. I'm gonna start looking at
+org-roam. So this is important
+knowledge. I have to capture this.
+That's it. I've captured it. It is done.
+I go back to buffer, and I can mark it
+with C-c. There's no archiving because
+this is just knowledge. There's no
+tagging. It's just knowledge.
+
+00:09:37.457 --> 00:10:15.440
+But then the simple project... I want to
+show you this because there's some
+automation that's pretty helpful. In the
+simple project, I have my first action,
+second action, third action. and you
+see, this is all I'm writing. I'm not
+adding any of the states, any of the
+tags. They're going to be added by...
+Here, I can add a tag if I want to this
+project. I don't care right now, but you
+know... I leave the tags to the user, so
+they're not super relevant to me as a
+package provider.
+
+00:10:15.440 --> 00:11:04.880
+This is where we are. This is the whole
+thing. So now if we go back to the
+agenda, I have a first action, right.
+And if I go to the actionable file, and
+now see, I have a simple project that
+has my first action as NEXT, second
+option TODO, third action as TODO. So
+what I've... You know, as you can see...
+I hope what I've tried to do is take all
+of the tedium out of working with with
+Emacs and Org Mode when working with
+your actions so you could focus on what
+you want to do, what you need to do,
+what you care about, and the package
+would take care of the rest.
+
+00:11:04.880 --> 00:12:32.000
+So the last thing I wanted to take a
+quick look at was some of the the tests.
+The code is available here. You can see
+the code on... the code on Github if you
+want. I've had some trouble writing good
+tests for this because Org Mode was
+written at a time before testing was
+quite as important, I think, or valued
+quite the same way, let's put it this
+way. And as a result, a number of things
+actually... It might also be a feature
+of Emacs at the time, I don't know. But
+a lot of things in Org Mode aren't very
+testable, and so what I ended up doing
+was just having an actual directory in
+which I actually... with files, right?
+So I don't have much mocking I can do. I
+can't just do a bunch of fake files,
+fake directories. So I actually go
+through the process, actually create
+files, and then actually have Emacs
+pointing at this directory to process
+and get the information. So I have to
+define the key to test that it gets
+bound properly. I have to set the
+capture templates. The capture templates
+are how things get added. I have a
+wrapper control... org-gtd-capture
+essentially is a wrapper around the
+capture that makes sure the inbox is
+there and then captures to the inbox.
+
+00:12:36.240 --> 00:13:45.360
+Making sure the items show in the agenda
+when I'm done with the processing was a
+little bit tricky. I had a bug and I had
+to to fix it, so I just wrote this test,
+but it's it's pretty convenient now to
+have that, because it gives me a bunch
+of sanity. So again, I have a capture,
+and this is... I wanted to be able to do
+this automatically but org-capture
+itself is not super testable right now,
+so the way it's... the way you test it
+is just by programmatically calling it,
+which is not exactly what I wanted,
+because I wanted something more like the
+user action, but I'll... You know, what
+I can get. And then I can... I'll just
+insert these words into the buffer and
+then I'll finalize the capture. Then I
+have another... I have a test package
+here called with simulated input which
+basically calls this and then enters
+these user actions. Right, so like the
+letter s, C-c c and then RET. And that
+is, you know, choosing a single action,
+then finishing the edit, and then adding
+zero and not adding tags.
+
+00:13:46.480 --> 00:14:05.040
+As you can tell, there's a strong layer
+of disconnect between the tests and what
+they represent. That's a work in
+progress. I have four tests. It's not a
+lot, but I want to... I intend to add
+more as I keep on adding more behavior.
+
+00:14:05.040 --> 00:14:34.880
+I would like this to be eventually a
+sane starting point for GTD. There's a
+lot of people like like Andrea, like
+Rainer, like... I mean, if you search
+for Org Mode and GTD, you'll find a lot
+of blog entries, a lot of entries, a lot
+of articles that explain how to connect
+it together, how to think that way, how
+to use all the tools that Org Mode makes
+available.
+
+00:14:34.880 --> 00:15:20.560
+Hopefully, this package is a way to get
+started without having to write too much
+of your own code. Then eventually, you
+can move away from the package if you
+want, if you realize that you are
+developing different opinions and you
+don't want to... If GTD doesn't work
+this way for you, if you have a
+different way, it is a better fit for
+the way you want to organize your life,
+then move away from the package. In the
+meanwhile, I welcome all thoughts. I
+welcome contributions. I welcome
+questions, bug reports, everything So,
+you know, come say hi. Try the package.
+And yeah, see you. I'll see you online!
diff --git a/2020/info/12.md b/2020/info/12.md
index d8d077c4..32ed9f83 100644
--- a/2020/info/12.md
+++ b/2020/info/12.md
@@ -2,7 +2,9 @@
Leo Vivier
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.webm" subtitles="/2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt"]]
-[Download compressed .webm video (22.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (52.1M)](https://media.emacsconf.org/2020/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier--compressed32.webm)
+[Download compressed .webm video (22.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
Many discussions have been had over the years on the debate between
using few big files versus many small files. However, more often than
@@ -105,3 +107,488 @@ in many more.
- "the problem is to let org-element to make sense of the item (?)
&#x2026;".
+<a name="transcript"></a>
+# Transcript
+
+00:00:24.160 --> 00:00:58.434
+Hello again, everyone! I hope you had,
+well, quite a lot of talks ever since
+the last one I did, and all more
+interesting one after the other. You
+know, I'm a bit in a bit of a weird spot
+right now, because I'm supposed to be
+presenting to you (as you can see on my
+screen) "One big-ass Org file or
+multiple tiny ones: finally, the end of
+the debate," and it sounds about as
+clickbaity as you can possibly get with
+those topics. By the way, credit where
+credit is due, the title is not mine.
+It's actually from Bastien Guerry, the
+current Org maintainer.
+
+00:00:58.434 --> 00:01:22.823
+Yeah, I wanted to talk to you a little
+bit today about this question because if
+you are used to going on
+reddit.com/r/emacs , you know the
+subreddit that we have, if you go on
+Hacker News often, you know it's a
+question that you see pop up every once
+in a while. "Should I be using one big
+file, or should I be using a lot of tiny
+files?"
+
+00:01:22.823 --> 00:01:58.575
+I believe you know we've got defenders
+on both sides. If I just show you one
+example... We have Karl Voit. He's one
+of the organizers for the conference. He
+is the guy who probably has the biggest
+Org Mode files right now in all the
+people I know, and god knows I know
+plenty of people use Org Mode.
+But if you just look at this line--I hope
+it's not too small; you just
+make it a little larger--but
+Karl basically has a file with
+126,000 lines.
+
+00:01:58.575 --> 00:02:57.040
+I'm just going to pause and try to have
+you imagine how large a file it actually
+is. Just think about all of these lines
+being tasks in your days. Think about
+all those lines being about little
+thoughts you know that you've had
+throughout the day or project that you
+were working on. It's massive. You know
+one of the problems that Karl Voit
+actually approaches on this topic is
+that it takes him roughly 20 seconds to
+get his Org agenda going, which is a
+massive amount of time. I mean, we have
+very fast computers now. You know, ever
+since Emacs was created in 1976,
+computers... I have no idea how much
+faster they've gotten. And yet, you
+know, for 100,000 lines, Emacs seems to
+be choking. It's certainly not
+reasonable, in a way, to have to wait 20
+seconds just for your entire file to be
+parsed. So basically what I want to do--
+
+00:02:57.040 --> 00:03:50.720
+By the way, I forgot to introduce the
+presentation, but I'm Leo Vivier. I did
+this before, for those who were around.
+I help maintain a software which is
+called org-roam, and that's the
+expertise that I have on the topic.
+Actually, if you go online, I do have a
+Github page. I will make sure that you
+have all the links available afterwards.
+But I do publish my init files, and you
+can see, if you scroll at the bottom, I
+have a little demonstration which shows
+you the fancy things that I can do with
+my Org Mode setup. That might be even
+interesting in light of the talk you've
+just had about GTD stuff, because the
+first one is about how I handle my
+projects, the second one is about the
+flow from a task as I work on it... So I
+won't spend too much time on this, but
+basically that's my expertise. I have
+spent eight years working with Org Mode,
+three of them actually thinking about
+writing packages.
+
+00:03:50.720 --> 00:04:32.880
+The thing is, if I go into a little bit
+of detail (and obviously it's only a
+lighting talk, so I won't have time to
+actually go really in depth about it),
+but there is something in the Org Mode
+library which is called org-element. You
+have the name right there,
+org-element.el, .el being for Elisp
+file. As you can see, the page is on the
+Worg wiki, so it's accessible by
+everyone. It's basically the API that
+Org Mode uses to parse Org Mode files.
+For those who don't know, parsing means
+basically checking a file, checking all
+the contents of the file, and extracting
+all the information that we need from
+that file.
+
+00:04:32.880 --> 00:04:58.960
+As you can imagine, you all have Org
+Mode files in your mind, well you know
+they can be fairly complex. You can have
+properties, you can have contextual
+information, like if you write a line
+which starts at column zero (which means
+at the left), it doesn't have the same
+meaning, whether or not it is before the
+beginning of a headline or if it is
+after the beginning of a headline. It's
+going to be relatively different,
+hierarchically speaking.
+
+00:04:58.960 --> 00:05:39.280
+So the problem, when it comes to the
+question of many files versus one big
+file or few big files, is that we always
+have to keep in mind what org-element
+wants you to do. The thing is, there are
+plenty of problems when it comes to
+parsing files, the first one being
+obviously that Emacs is a single-thread
+process (or has some threading
+capabilities; we're not going to go into
+the details right now, that's not my
+goal). It makes it incredibly hard to
+parallelize parsing processes with the
+current technology.
+
+00:05:39.280 --> 00:07:03.759
+So you'd have to imagine that if you
+have a very large file--if you go back
+to the example of Karl Voit from before:
+100,000 lines--that means that you have
+to scan through every single line,
+basically. Because sometimes... Let's
+just say that you have a property
+drawer, for instance, which tells you,
+oh okay, this tree has the tag :foo:. So
+the problem is, there are multiple ways
+for you to define a tag. You can use the
+usual way, which is about wrapping in
+columns the :tag: at the end of a
+heading. For instance, if I... (I'm not
+going to switch to Emacs, that's going
+to waste too much time) That's one way
+to say your tag. But say, you have tag
+inheritance, which means that when you
+have a parent with a tag, you also want
+the child to inherit the tag. If you
+have first heading with the tag :foo:,
+you have the first subheading, and the
+tag :foo: is implied. Now imagine having
+to do that with a file that is
+completely nested, a file that has maybe
+9, 10, 11 levels of depth to it. It's
+mind-bogglingly complicated for the
+software to do that, knowing that...
+I've told you about tags, but any
+property can be inheritable. Anything
+like priorities, even. Though why would
+you do this? You can have groups. You
+can have all this.
+
+00:07:03.759 --> 00:07:21.957
+And as someone who went through the
+trouble of optimizing his Org agenda...
+So basically, if we go back to the
+GIFs--oh god we've already had this
+discussion between the "git" and "magit"
+and now I've started "gif" and "gif" and
+I only have one more minute left to do
+so, so let's just
+say I'm going to say "gif"
+just to spite people...
+
+00:07:21.957 --> 00:07:41.360
+So if you go on the way I organize my
+agenda, what I did in order to keep my
+agenda build time under two seconds, is
+that I've rewritten a whole lot of codes
+to be able to parse my Org agenda files.
+So the thing is, I'm going to be talking
+more about this later.
+
+00:07:41.360 --> 00:07:44.479
+I only have, let's say, one minute to
+conclude.
+
+00:07:44.479 --> 00:08:15.199
+So as you've gathered, I'm not going to
+be giving you the answer right now. I'm
+going to be talking about org-roam a
+little later, which is about following
+the principle of having many small
+files. But as someone who has been using
+one large file to manage my life, you
+know, I'm sitting on the fence. I do not
+know which one is the best, but I hope
+that my presentation has given you a
+little idea of what goes on behind the
+principles.
+
+00:08:15.520 --> 00:08:52.000
+You also need to think about the
+philosophy behind the organization of
+your notes. I hope to be approaching
+this topic with you in about two hours
+or so (maybe one hour actually). I'm
+actually finished. I've decided to leave
+you two minutes of questions. If someone
+could feed me the questions, that might
+be best, because I don't want... oh
+actually I can just open the pad. I can
+just open it. Give me a second, okay.
+Just loading up. I might stop showing my
+screen. That might make it easier. So I
+mean if you can make myself big now on
+the screen, that would be splendid.
+([Amin]: yeah sure)
+
+00:08:52.000 --> 00:09:13.920
+Thank you. Where are we... Question 12.
+Okay, so what's better, one big file
+or...? Is it a jab to tell me that I
+haven't answered the question because
+someone just
+asked me the question? Well, personally, if
+I were to give you a quick answer in
+20 seconds, personally, I think it's a
+question that is contextually based.
+
+00:09:13.920 --> 00:09:45.890
+Do you want something that is efficient
+as far as optimization is concerned?
+Then you need to think about this.
+Personally, for all the organization
+that I do, all this stuff, all the TODOs
+that I handle, I like to do this in one
+simple big file because you benefit from
+all the refiling capabilities of Org
+Mode, so I would do that. But for
+knowledge management, for note-taking
+and all this, well I'd much rather
+follow the org-roam way of doing things,
+which is about having many small files.
+
+00:09:45.890 --> 00:09:57.040
+I'm not getting any more questions. I'm
+not sure if there is one on IRC that
+could be fed to me. Otherwise, I'm happy
+to pass over to the next speaker.
+
+00:09:57.040 --> 00:10:06.520
+By the way, just before I finish, your
+world is a lie. It's not a three-piece
+suit. I'm wearing jeans below, so I hope
+that satisfies your curiosity.
+
+00:10:10.640 --> 00:10:35.680
+Okay, there's one more question
+appearing. "but otherwise one big file
+to have everything..." So I'm putting
+you on the spot, I believe. It was such
+a short talk. You know the problem is, I
+just wanted to give you a little answer.
+A little, you know, path of thinking on
+this topic. Obviously it's a topic I
+could be spending 40 minutes on, but I'm
+going to be drained, you're going to be
+drained, nobody's going to be happy if I
+do this.
+
+00:10:39.440 --> 00:11:08.240
+Someone asked me if I switch between
+British and French accents. A little
+secret for you: when I'm stressed, I
+tend to revert to a French accent, so
+you can measure the amount of stress
+that I'm feeling during this talk with
+the amount of h's that I drop and the
+amount of sheer fright that you can see
+sometimes in my eyes, when I'm thinking
+about what to say next.
+
+00:11:08.240 --> 00:11:17.040
+All right sir. So, Amin, do you believe
+we can leave it at that? I'll be...
+People will see plenty more of me later
+on, anyway.
+
+00:11:17.040 --> 00:11:27.120
+([Amin:] So, looking at the schedule, I
+think your talk has until like 2:02,
+meaning like five or six minutes from
+now.)
+
+00:11:27.120 --> 00:11:28.000
+Oh, right.
+
+00:11:28.000 --> 00:11:33.920
+([Amin:] So if you do like to take one
+or two questions, to add two more
+questions, by all means.)
+
+00:11:33.920 --> 00:12:20.555
+So someone has asked me what is the
+Emacs icon (sorry, see, another French
+accent) here in my status bar... Oh
+sorry, I'm not sharing any more. I might
+just share again just so that everyone
+can catch a glimpse of that. There we
+go. Allow... So it should be... So if
+you could make me small again, Amin, I'm
+not sure if it's going to do it by
+itself, but I do have a little icon here
+in my status bar which is basically a
+way to interact with org-protocol. I'm
+not going to look for it right now, but
+it's a browser extension that is
+developed by one of my friends over at
+Ranger whose name is Li Fong (??) and
+it's very useful. I'm someone who uses a
+lot of Org protocols.
+
+00:12:20.555 --> 00:12:53.600
+And by the way, I used to teach English
+to high schoolers, and they were
+supremely worried when I showed them my
+status line and they saw "kill" and
+"explore" in my status line. As fellow
+Emacs users, you know that obviously
+kill means to kill a selection of text
+and keep it inside your clipboard, but
+for my students, they were very worried
+about what their professor was up to
+during his nights.
+
+00:12:53.600 --> 00:13:01.920
+So let's see if we've got more
+questions. I'm showing you the questions
+on the rainbow. Let's see if we've got
+more. People are posting a lot of
+questions now.
+
+00:13:01.920 --> 00:13:06.399
+So how do you feel about archiving files
+in Org Mode and how can that work?
+
+00:13:06.399 --> 00:13:59.519
+So one of the things when we think about
+optimization is: yes, archiving done
+trees is a good idea because it means
+that if we go back to the org-element,
+the way it works (and we'll get into
+technical details afterwards; I'm giving
+a presentation about org-roam technical
+aspects, sorry, so I'll have a chance to
+expand a little more on this) but
+basically, org-element needs to... Every
+time it sees a TODO, it has to consider
+it, even though it is a done TODO. Why?
+Because let's say, for instance, that in
+your agenda you want to activate log
+mode, which is going to show the tasks
+which are done... Now you could be
+clever and say, oh okay, the Org agenda
+does not need to show done items, so
+it's not going to look for them, but the
+problem is that org-element is always
+called. It always needs to parse the
+buffer.
+
+00:13:59.519 --> 00:14:22.079
+You know, Nicolas Goaziou, who is the
+French developer who's worked a whole
+lot on org-element has gone through a
+lot of trouble to optimize org-element,
+but the problem is there's just so much
+that we can do with a concurrent
+process. Right now it leaves somewhat
+things to be desired, but we're working
+on it.
+
+00:14:22.079 --> 00:14:32.639
+One more time... I feel like I spent
+half of this talk teasing my next talks,
+but I'll be talking more about this in
+my future talks in about one to two
+hours.
+
+00:14:32.639 --> 00:14:36.079
+So, continuing with questions, how big
+are my Org files?
+
+00:14:36.079 --> 00:15:04.880
+So in the background, I'm just going to
+check how many lines I have in my main
+file.
+In my own file, so the one I told you
+about where I keep all
+my TODO GTD stuff, I have
+38,000 lines, which is...
+It's sizable, definitely.
+But I do archive a lot of stuff,
+so that might be a slight difference
+between myself and Karl Voit,
+even though I don't remember if they
+actually archive stuff.
+
+00:15:04.880 --> 00:15:12.560
+So does it not consume more resources
+and time to load multiple files files
+than a large file or the same content
+now?
+
+00:15:12.560 --> 00:16:00.560
+Theoretically, yes, having many files
+open concurrently is slightly slower
+than having one main file opened. Now
+the problem is for those of you who have
+large files, you may have noticed that
+when you are scrolling in a very large
+file, it starts taking quite a bit of
+time. Why? It's because in Org Mode, you
+have a lot of content that is hidden, so
+when you have the view mode which hides
+as much stuff as possible, meaning that
+you only see the top heading--and I'm
+checking the time, Amin, don't worry,
+I'm finished on this one-- when you're
+hiding a whole lot of stuff, Org Mode
+needs to keep track, or I should say,
+Emacs needs to keep track of which areas
+of text to show and which areas of text
+to hide.
+
+00:16:00.560 --> 00:16:21.199
+The problem is that when you're hiding
+stuff-- let's say you're moving from the
+first heading to the second heading, but
+you've got like 10,000 lines between
+those two headings-- well, Emacs needs
+to compute the difference between the
+two passages, and that takes quite a lot
+of time. That's why you might realize
+that it's a little choppy when you start
+scrolling in large files.
+
+00:16:21.199 --> 00:16:30.719
+Anyway I could be answering questions
+about Org Mode for literally two hours
+straight,
+so I'm gonna hand it over to the next
+speakers. I'll be seeing
+you guys a little later.
+
+00:16:30.719 --> 00:16:33.440
+([Amin]: Thank you very much, Leo.)
+
+00:16:33.440 --> 00:16:34.889
+Oh, thank you.
+
+00:16:34.889 --> 00:16:36.959
+([Amin:] Yes. Bye.)
+
+00:16:36.959 --> 00:16:39.839
+Bye.
diff --git a/2020/info/13.md b/2020/info/13.md
index 3140b467..346d1d40 100644
--- a/2020/info/13.md
+++ b/2020/info/13.md
@@ -2,7 +2,9 @@
Joseph Corneli, Raymond Puzio, and Cameron Ray Smith
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.webm" subtitles="/2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt"]]
-[Download compressed .webm video (8.6M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (14.7M)](https://media.emacsconf.org/2020/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith--compressed32.webm)
+[Download compressed .webm video (8.6M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
We present a short experience report from the perspective of two
long-time Emacs users and one relative newcomer. Our motivations
@@ -52,3 +54,379 @@ I think he used org-tree-slides, like some earlier presentations.
# Notes
- <https://github.com/exp2exp/ob-servant>
+
+<a name="transcript"></a>
+# Transcripts
+
+00:00:00.320 --> 00:00:30.800
+Joe: Hi, I'm Joe Corneli. This is work I
+did with Ray Puzio and Cameron Smith.
+They're the main protagonists in this
+story. They are researchers who've been
+working on theoretical biology. In a
+typical project, they may use Maxima and
+Julia. Their work combines biology,
+physics and computer science. The latest
+work-in-progress is on branching
+processes for cancer modeling.
+
+00:00:30.800 --> 00:00:48.640
+How can Emacs possibly help? Let's have
+a look. Moving code and data between
+these different programs by hand is
+annoying. Separate workflows for writing
+up notes and preparing publications is
+perhaps even more annoying. All of it is
+time consuming and error-prone.
+
+00:00:48.640 --> 00:01:10.057
+So what about maybe using Jupyter? We
+found something called Script of
+Scripts. It solves some of those
+problems because you can use Maxima and
+Julia together, but we were quite happy
+to explore Emacs-based solutions, being
+Emacs enthusiasts. We even got Cameron to
+be enthusiastic about doing Emacs, so
+that went nice.
+
+00:01:10.057 --> 00:02:05.657
+Here's a little feature grid of Emacs +
+Org versus your generic tools that are
+in a different, more general ecosystem.
+As you can see, it's quite
+feature-complete. You've got your
+maxima-mode, julia-mode. You can use
+both of them inside of org-mode. You can
+present things with org-tree-slide. You
+can set up a wiki inside of org-roam.
+This is one I found rather recently. You
+can even use compatibly with org-roam,
+something called logseq, which is in the
+browser, so that's nice. You can do
+real-time collaborative editing, either
+in a kind of pairing style or in a more
+Etherpad style. Obviously, you can
+manage your references. You can typeset
+whatever you want. You can publish work
+in progress on a blog. Firn is another
+one of these external Org Mode tools.
+It's not actually in Emacs, but works
+with Org Mode stuff. And, you know... So
+we're good to go with all of that.
+
+00:02:05.657 --> 00:02:13.890
+So what does that look like? Well,
+here's a little example from before they
+were doing... before we started really
+thinking seriously about this stuff.
+
+00:02:13.890 --> 00:02:45.280
+So this is just Maxima. Well, Maxima
+doesn't have a long running process by
+default. If you've ever used Python, you
+have something called sessions. They
+don't have that for Maxima, at least not
+by default. So how... What was the
+workaround? There's this thing called
+solve-for-u here that shows up down
+below again in these angle brackets,
+which you've seen maybe in someone
+else's talk, which means go to the
+previous thing that was named
+solve-for-u and do that all over again,
+so they do that over again.
+
+00:02:45.280 --> 00:03:00.640
+Here's the little Maxima code for
+defining usol, so you've now defined
+usol, and then you can use it in the
+next expression. You get out a nice
+juicy zero at the end. It's a little bit
+like a partridge in a pear tree to have
+to redefine everything every time.
+
+00:03:00.640 --> 00:03:22.590
+So this is clearly at the level of
+work-around. Maybe just one more time
+looking through that stuff. Sorry. So,
+looking through that stuff, this is...
+We're going to need something like that,
+probably, for stitching Maxima and Julia
+together. so it's good to look a little
+bit about how that might work.
+
+00:03:22.590 --> 00:03:46.923
+First of all, you can cache results, so
+if you wanted to save the date out of
+block one at a certain time and then use
+it again later... At the time when I ran
+this code, you can see I've got two
+slightly different time stamps down
+below. One's the cached result, and the
+other was the result of reevaluating the
+block. So you can move things around.
+That's going to be useful. But you know,
+that's not really the main problem.
+
+00:03:46.923 --> 00:04:11.760
+The main problem is making Maxima
+long-running. The core of this talk is a
+new observant facility, which is a
+general purpose way to do that kind of
+thing, which involves a very simple
+change to ob-core. We'll give a quick
+overview of that and show an example. So
+here's the example, a very simple sort
+of silly example.
+
+00:04:11.760 --> 00:04:30.240
+What does it mean to have a long-running
+process? Here, I've set this display2d
+to be false, which just means that
+things are going to come come across in
+1d. Then I ask it to expand something. I
+get LaTeX by default. So that's what it
+means. It's that I've sent something in
+and it's going to come across in one
+view, which is great.
+
+00:04:30.240 --> 00:04:40.320
+Maybe you'll also notice that there's no
+semicolon, if you're a Maxima fan, and
+things are coming across as TeX. So
+those were some little bonus features.
+I'll show you how that works later.
+
+00:04:41.040 --> 00:05:13.759
+The change to ob-core is as follows.
+Actually, this should say... Instead of
+stream here, it should say servant.
+Sorry. We tried an experimental version
+which was called stream, so now it's
+called servant. But all it does is it
+overrides org-babel-execute lang for
+arbitrary lang if you have a servant in
+your params. So that's the change that
+hasn't been pushed out or sent as a
+patch to anybody, but it's a pretty
+minor change.
+
+00:05:13.759 --> 00:05:30.720
+Here's an overview without the code.
+Just a high level overview of
+observant.el. It stores information
+about these processes in a hash table.
+It can do pre-processing and
+post-processing. It does all these
+things. It stores the output.
+
+00:05:30.720 --> 00:05:40.639
+I mentioned here that, in principle, we
+could store lots of output and have a
+kind of browsable history, although we
+don't do that presently. But that's what
+observant does. It does what you might
+expect.
+
+00:05:41.440 --> 00:06:16.960
+Here's the Maxima on-ramp to get Maxima
+brought in. You have to obviously have a
+Maxima process you can call. puthash...
+this is the preprocessing thing I
+mentioned, adding in some Tex and adding
+in-- or deleting, rather--a substring.
+Here is why you delete the substring.
+It's because Maxima thinks it's a good
+idea to tell you false once you run
+check on things. You've got to delete
+that back out to get something coherent
+out of it. So this is how to set up
+Maxima.
+
+00:06:16.960 --> 00:06:25.440
+That's enough, really, of the demo. It's
+not really a demo for show and tell, but
+as this is an experience report, I
+wanted to talk about the experience of
+doing this.
+
+00:06:25.440 --> 00:06:42.880
+Some negatives, like we tried to get
+Emacs Jupyter working prior to working
+on observant. We couldn't get it doing
+everything we wanted, despite a bit of
+heavy lifting and debugging and stuff.
+So that's not finished. That was a bit
+difficult.
+
+00:06:42.880 --> 00:07:11.695
+On the other hand, working on observant
+was fun, pretty lightweight, and easy.
+We got some experience co-editing things
+with these real-time tools. Obviously,
+the stack is somewhat work in progress.
+I just wanted to give a shout out to
+crdt which was really fun, and Qiantan
+was making bug fixes for that as we go.
+Similarly, for firn and logseq, the
+maintainers were really responsive, so
+that was nice.
+
+00:07:11.695 --> 00:07:27.120
+We did try to get Emacs running in the
+browser, thinking it would be really
+nice for people who didn't want to
+install it to get a chance to just try
+it, but actually, browsers capture
+things like C-n, so that was a bit
+annoying.
+
+00:07:27.120 --> 00:07:33.759
+But we did get lots of great feedback
+and interaction with people, including
+around this conference. Thank you to
+those who we've had discussions with.
+
+00:07:35.599 --> 00:08:19.120
+So, future work. Okay, so... Maybe you
+remember, I gave a talk a few years back
+on Arxana. What might this have to do
+with Org Mode? That's always the
+question one asks about Arxana.
+Arxana... One of the things it does is
+transclusions, and so that could be
+actually very helpful in connection with
+this "combined notes and write-up"
+workflow. So you might have an Org Mode.
+Some of these results we got back as raw
+results could go right into your
+write-up in a convenient way, at a level
+above-- transparently, a level above the
+notebook. So you'd have the notebook
+alongside the write-up in that case,
+which is a variation on the literate
+programming workflow. This is
+speculative. Who knows?
+
+00:08:19.120 --> 00:08:33.357
+The other thought is,
+it just relates to the idea of network
+programming. So we can imagine these
+networks of computational nodes
+sitting inside of org-roam,
+calling each other.
+You would want to maintain some
+kind of model of that process.
+
+00:08:33.357 --> 00:09:11.680
+A general question is: how do we have a
+remote control for long-running
+processes? You could do that in Lisp or
+Clojure, but maybe we could have
+something a little bit like that here.
+Conclusions: what have we actually
+addressed? Well, we addressed accessing
+any long-running process with a simple
+Org Mode interface. Obviously, we're not
+the only people to think about
+notebooks, but we think that Emacs has
+some advantages related to reproducible
+research and interdisciplinary
+collaboration. Let's just say that we
+think something is reproducible if it's
+actually teachable to someone new and
+they can do it. Org Mode seems very
+useful for that. Many of the other talks
+have touched on this.
+
+00:09:11.680 --> 00:09:27.857
+Interdisciplinary collaboration is
+great. This was an interdisciplinary
+collaboration on some level, but what
+about future work for bringing in
+scenario planners, simulation
+scientists, and local farmers, and
+building something that they can all use
+that's more than the sum of the parts?
+
+00:09:27.857 --> 00:09:38.135
+So a little future work for everybody
+else here. We think science should be
+widely teachable, shareable,
+semi-automated, transdisciplinary, and
+real-time like EmacsConf.
+
+00:09:38.135 --> 00:10:00.240
+So you can get in touch via these
+methods. The code--which is very much
+early stage work in progress, as this
+was meant to be an experience report,
+not a "it's all done, here, it is
+polished" report-- it's also online if
+you'd like to have a look. That's the
+end of the talk. I don't know if there's
+time for questions or not, but um I'm at
+your disposal now. Thank you.
+
+00:10:00.240 --> 00:10:14.240
+(Amin: Many thanks for the tough job.
+Let's see. We have about I think four
+minutes for questions, and we have a
+couple of questions on the pad. Would
+you like to read them yourself or should
+I read them to you?)
+
+00:10:14.240 --> 00:10:18.079
+Just for the sake of easy management why
+don't you read them out, if that's okay?
+
+00:10:18.079 --> 00:10:33.760
+(Amin: yeah, sure. They ask, "Have you
+looked into trying Sage Math? I've long
+wanted to use Sage Math in Org files.")
+
+00:10:33.760 --> 00:10:44.839
+Ray: Right. I wrote the answer that it
+should be possible because one can call
+it from a command.
+
+00:10:44.839 --> 00:11:00.640
+(Amin: okay, and I see there's another
+Sage Math question that you seem to have
+answered as well, so I guess I won't
+repeat that. There's... "Let's not
+forget about embedded Calc in Emacs.")
+
+00:11:00.640 --> 00:11:08.240
+Joe: So the first demos actually were
+with Calc. That's useful. Although I
+think it was a 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:57.290
+(Amin: Still looking for questions.
+Okay, I think that's about it. I don't
+see any questions on the Etherpad. And
+let's see... Anything on irc? Nothing
+but praises and everyone thanking you.
+Thank you.)
+
+00:11:57.290 --> 00:11:59.120
+Ray: all right, you're welcome.
+
+00:11:59.120 --> 00:12:01.923
+Joe: Thanks a lot!
+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/info/14.md b/2020/info/14.md
index 9d7ee315..dfb65c43 100644
--- a/2020/info/14.md
+++ b/2020/info/14.md
@@ -2,7 +2,9 @@
Adam Ard
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--14-readme-driven-design--adam-ard.webm" subtitles="/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt"]]
-[Download compressed .webm video (21.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--14-readme-driven-design--adam-ard--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (26.6M)](https://media.emacsconf.org/2020/emacsconf-2020--14-readme-driven-design--adam-ard--compressed32.webm)
+[Download compressed .webm video (21.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--14-readme-driven-design--adam-ard--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
Many source code projects these days begin with a README file. While
most people use markdown, if you use org-mode, you can use literate
@@ -104,3 +106,436 @@ from the talk is at: <https://github.com/adam-ard/literate-demo>
- I am thinking about org-transclusion; similar ideas to deal with
notes instead of codes.
- FYI: <https://github.com/alphapapa/transclusion-in-emacs>.
+
+<a name="transcript"></a>
+# Transcript
+
+00:00:03.600 --> 00:00:37.120
+Adam: Hello! Welcome to Readme Driven
+Design in Emacs by Adam Aard. If you're
+a programmer, you're accustomed to
+putting a README file at the root of
+your project. It's usually a Markdown
+file But if you use an Org Mode file
+instead, you can take advantage of the
+great features that Org Mode provides,
+including literate programming, which
+lets you generate your source code and
+Markdown documentation dynamically.
+I want to walk you through a little bit
+of what this looks like.
+
+00:00:37.120 --> 00:01:03.520
+When you start a project, especially if
+if you use something like Github you
+begin with an automatically generated
+README.md file. So just delete that
+and instead create a README.org file.
+Starting with an empty Org file,
+like you see here, you can begin
+by recording important information about
+your project goals. You can add diagrams,
+code snippets, to-do lists, time tracking
+and much more.
+
+00:01:03.520 --> 00:01:38.880
+I'm going to drop in some documentation
+that I've written about about my project
+here, so you can see what this would
+look like. As you can see, I have a
+title, and a description, and then a
+subsection as well as some code
+snippets. You can see that Org Mode does
+a great job of formatting lists, code
+sections, diagrams, and so forth. It's
+as good or better than Markdown, but
+when you use it in Emacs you can do a
+lot more.
+
+00:01:38.880 --> 00:02:08.000
+For example, you can dynamically create
+diagrams using Graphviz from a text
+description. If you go to this source
+block here and hit C-c C-c, you'll see
+that we generate a diagram dynamically
+You can run these code snippets in place
+and get the results to show up inside of
+your file, which is a really powerful
+paradigm.
+
+00:02:08.000 --> 00:02:19.520
+But most importantly, for my purposes
+here, Org Mode provides you the ability
+to do literate programming.
+
+00:02:19.520 --> 00:02:34.720
+So take a quick look at this diagram
+that I generated here. It gives you a
+quick overview of what I mean by
+literate programming and how I'm using
+it. You can see that we start with a
+README.org file on top.
+
+00:02:34.720 --> 00:03:17.120
+At this point, we can do one of two
+things: tangle or weave. Tangle is used
+to describe the process of generating
+source code, while weave is the process
+of generating documentation. These are
+terms that Donald Knuth used. He's the
+one that came up with the idea of
+literate programming in the early 1980s.
+But this is really all that there is to
+it. You just... You are simply using a
+literate source file, in this case the
+README.org, to generate the rest of the
+project files, basically.
+
+00:03:17.120 --> 00:03:59.479
+So let's dig in to the details of how
+this works. I hope you... Hopefully
+you'll see how cool this is. So
+returning to the file here. Let's assume
+we have enough documentation now, that
+we want to get started coding. So maybe
+we'll just start with like a Hello World
+app, just so we can make sure that our
+environment is set up correctly. Let's
+get started with a code block. So I
+created a little snippet to help me add
+a source block for literate programming
+quickly. There's not much to it, but
+there are some important annotations
+here.
+
+00:04:01.599 --> 00:04:55.360
+Excuse me. There's a property called
+:tangle and that takes a value of a file
+name. Then there's also a :noweb
+property called no-export. Basically,
+the noexport--we'll explain that a
+little bit more later It has to do with
+how the tangling is done in the tangle
+step versus the weave step. I'll explain
+that a little bit more. But the tangle
+field just simply tells Emacs where it
+needs to generate the main.go file and
+where it needs to put it on the file
+system.
+
+00:04:55.360 --> 00:05:21.520
+You'll notice that we're going to use
+Go. That's just the language that I've
+been using the most lately, but this
+programming strategy is
+language-agnostic. You could use any
+language or any mix of languages. You
+could create some files in Python, some
+files in Go, some files in Lisp, or
+whatever you want.
+
+00:05:24.720 --> 00:05:56.400
+Let's create just a little Hello World.
+Let's use another snippet here to
+generate the basics of a Go program. I'm
+just going to print Hello World. So
+that's... And then let's make it a
+section in our file. So now you can see,
+we've got this snippet.
+
+00:05:56.400 --> 00:06:42.319
+When you have a source block in inside
+of Org Mode, you can easily pop into a
+language-specific buffer by typing C-c '
+(single quote). So you can see, now I
+have a buffer that's in go-mode and
+gives you all the ability to edit like
+you would normally. If you hit C-c '
+(single quote) again, it goes back and
+any changes you make will be updated
+there. But you can do quite a bit just
+inside of here too. There's quite a bit
+of language-specific functionality just
+in place, so you don't always have to go
+over to a separate buffer. It's a nice
+option sometimes.
+
+00:06:42.319 --> 00:07:12.240
+Now that you have the code in here,
+you're going to want to run it. Right
+now, it just lives here in this
+documentation. You need to get a copy of
+it into a separate file, and that's the
+tangle process that you you need to
+follow there. So I'm gonna drop in a
+little bit more doc, a little bit more
+documentation really quick here.
+
+00:07:12.240 --> 00:07:44.879
+Okay, all right. So just as a side note,
+I like to follow this process. Whenever
+I have an operation to perform, I'd like
+to document it here with a snippet that
+can be executed inline. Then I don't
+have to leave Org Mode, and I don't have
+to try to remember what I did later. So
+instead of just trying to do an
+operation, the first time I do
+something, I take the time to figure out
+what it is and document it, so then it's
+recorded.
+
+00:07:44.879 --> 00:08:14.400
+So here we find that to do a tangle
+operation, you run the command
+org-babel-tangle, which is an Elisp
+command. If you hit C-c C-c to run it in
+place, you get the result of main.go,
+which basically is telling us that we've
+tangled one file called main.go. You can
+see that that's true if you go to the
+file system and you look.
+
+00:08:14.400 --> 00:08:41.120
+Now in our demo directory, we have a
+README.org, we have that PNG that we
+generated, but we also have a main.go.
+If you visit that file, you'll see that
+it's just the source code that was in
+our documentation, which is exactly what
+we expected and what we wanted. So
+that's good.
+So if we return to where we were at...
+
+00:08:41.120 --> 00:09:43.012
+Now we're at the point where we have a
+file on the file system. Now we need to
+build it and to run it. So let's follow
+the same philosophy, where let's
+document these operations that we're
+going to perform. I'm dropping in a a
+build instruction section and a run
+instruction section. As you can see
+here, we have a little a bash source
+block, and another bash source block.
+This one compiles. The go build command
+is what compiles a file. Then the file
+that gets generated should be called
+demo. So we just run it here. If I type
+C-c C-c, we get an empty results block.
+When you compile things, no news is good
+news. It means there's no errors.
+
+00:09:43.012 --> 00:10:30.839
+So presumably, we've created an
+executable that's called demo. Let's
+look again at the file system and
+regenerate... Yep. What we have here is
+a demo executable, which is exactly what
+we wanted. Let's go back. Now we should
+be able to run it. C-c C-c, and we get
+Hello World as a result, which was
+exactly what we were expecting. So
+that's already pretty cool. You can do
+that much.
+
+00:10:33.040 --> 00:11:09.760
+That's really just the tip of the
+iceberg. To really use the more
+impressive features of literate
+programming, we need to do a little bit
+more at least. Really, to get the full
+benefit of it, we need to add some
+sections that will cause Emacs to have
+to tangle or assemble this file from
+different pieces.
+
+00:11:09.760 --> 00:11:36.240
+Imagine that we wanted to take this file
+and maybe kind of templatize it. So,
+using literature programming syntax,
+this angle bracket syntax, let's say
+that we want to create an imports
+section, a functions section, and then
+maybe just a main section. We'll get rid
+of this.
+
+00:11:36.240 --> 00:11:56.639
+So now you see, we've created something
+that looks a little bit like a template
+or a scaffolding or outline for what our
+file is going to be. It looks a little
+bit like pseudocode. What we're going to
+have literate programming do is
+dynamically insert those things into
+those slots.
+
+00:11:56.639 --> 00:12:36.639
+So the first thing we need to do is...
+So let's create a section called "Say
+Hello." We want to add some
+functionality that makes our program say
+hello. So using a different snippet that
+I have for creating something that I
+call like a literate section, basically,
+we create a another source block that's
+almost the same as the one for the file.
+It just has a few differences. Say we
+want to drop code into the import
+section and we want it to be in Go.
+
+00:12:36.639 --> 00:13:14.399
+Here we use the same :noweb no-export
+syntax, but then we've added this
+:noweb-ref imports, and this ties that
+slot to this reference. It tells Emacs
+that when you tangle, we want to stick
+whatever's in here in that spot. You
+skip the tangle file name section
+because you're not actually creating a
+file name. You're putting information
+into an existing file. So here, we would
+just add the "fmt" for the imports.
+
+00:13:14.399 --> 00:14:10.320
+Let's add another section for functions.
+Let's just create a function called
+sayHello that doesn't have any
+arguments. No return types. All it does
+is pretty much the same thing as we did
+before: just print something. Let's just
+say "Hello EmacsConf" this time. Now we
+have a function, and now the function
+won't do anything unless we invoke it.
+Let's do one last literate section
+called main. Make that Go source block.
+Then let's invoke that function.
+
+00:14:10.320 --> 00:14:39.839
+Now you can see that we've got our
+scaffolding outline, and then we have
+the sections that we want to get tangled
+or inserted. I've used this syntax. It's
+kinda borrowed from literate programming
+a little bit with a +=, so really it's
+just saying that I want to append this
+item into the import section It's really
+just to make a little bit more clear
+what's going on.
+
+00:14:39.839 --> 00:14:57.760
+When you generate documentation, you
+won't see these particular property
+annotations, and so you won't know
+immediately that this section goes in
+the imports area. So I usually put a
+little bit of documentation on top
+there, so that it's easy to see.
+
+00:14:57.760 --> 00:15:21.120
+You would, probably, if this was very
+complicated, you'd put some
+documentation above to explain what you
+were doing, maybe right here. You could
+picture yourself maybe explaining a
+complicated algorithm or something up
+here and having a nice way to document
+it.
+
+00:15:21.120 --> 00:15:28.045
+So now that we've got that here in the
+documentation, we need to figure out...
+We need to make sure that it's going to
+tangle properly.
+
+00:15:28.045 --> 00:16:20.479
+Your best friend at this point is a
+keyboard shortcut that lets you preview
+the tangled operation. If you say C-c
+C-v C-v, it will create a new buffer
+with the tangled contents and so you can
+see here that the fmt import went to the
+right place, that function went to the
+right place, the function invocation
+went to the right place. We're feeling
+good. You can nest these things many
+layers deep. If you came into the
+sayHello function, you could add more
+sections. It'll go through and it'll
+keep track of all that and tangle it for
+you so you really get a lot of freedom
+and flexibility for how you want to
+document things by doing this.
+
+00:16:20.479 --> 00:16:57.645
+So now that we've previewed it and we
+feel good about it, we need to tangle so
+we get the file on the file system. so
+C-c C-c and get... just main.go comes
+back again. C-c C-c and no errors come
+back. Then if we did this right, when we
+run this, we should get "Hello,
+EmacsConf." So C-c C-c, Hello EmacsConf.
+I think that's pretty, pretty cool,
+actually.
+
+00:16:57.645 --> 00:17:23.280
+So we've got the breadcrumbs of the
+process we've gone through to get to
+this point, this initial document that
+has some tangling in it. We have
+documentation for how to tangle, how to
+build, how to run. We've really built a
+nice foundation for moving forward on
+our project and a nice way of breaking
+things out and documenting further.
+
+00:17:23.280 --> 00:17:38.640
+The last piece that we need to
+take care of is the weave that
+I showed you in the diagram above.
+So one more time, we'll drop in
+
+00:17:38.640 --> 00:18:35.520
+some documentation, this time on how to
+weave. It's really just an export
+function. it's not... There's not a
+separate weave command going on here.
+we're just going to export what we've
+got here into a Markdown format. We're
+using org-gfm-export-to-markdown, which
+is the Github style markdown. You can
+use the other, more standard type as
+well. Hit C-c C-c. Now you see we've got
+a README file, and if you look in the
+file system, we've got that right there.
+If you go to something like ghostwriter
+and open that file, now you can see that
+it's generated some documentation.
+
+00:18:35.520 --> 00:18:48.559
+It puts a index at top at the top. I
+usually turn that off. It's easy to do
+that by putting a property at the top of
+your Org file, but some people like to
+have an index.
+
+00:18:48.559 --> 00:19:22.802
+Here you can see that it has generated
+pretty nicely and formatted snippets
+well, put the diagram in there, and then
+it's preserved this literate programming
+syntax, which is important because
+that's how we want to view the
+documentation. That's what the
+no-exports property was trying to
+maintain. no-exports means when you
+export, do not try to tangle.
+
+00:19:22.802 --> 00:19:43.600
+Hopefully that makes more sense now. Now
+you can see all the documentation. I
+think it demonstrates a pretty useful
+feature that's inside of Emacs.
+Hopefully you'll have as much fun using
+that as I have. So thanks!
diff --git a/2020/info/15.md b/2020/info/15.md
index c61cd24f..d559901d 100644
--- a/2020/info/15.md
+++ b/2020/info/15.md
@@ -2,7 +2,9 @@
Adolfo Villafiorita
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.webm" subtitles="/2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt"]]
-[Download compressed .webm video (13.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (23.6M)](https://media.emacsconf.org/2020/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita--compressed32.webm)
+[Download compressed .webm video (13.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
I have been a long time user of static site generators, such as
Jekyll.
@@ -48,3 +50,989 @@ website.
- Org mode files support in Jekyll - <https://emacs.cc/jekyll-org/>.
- Mentioned: <http://juanjose.garciaripoll.com/blog/org-mode-html-templates/index.html> (org-html).
- Other static webpage generators: <https://github.com/novoid/lazyblorg/wiki/Similar-Projects>.
+
+<a name="transcript"></a>
+# Transcript
+
+00:00:00.080 --> 00:00:03.120 Adolfo: Okay, excellent. Hello, everyone
+and nice meeting you. Let me thank the the organizer for all the
+organization and all the work they are doing to support us. My name is
+Adolfo Villafiorita. I'm teaching at the University of Trento. I will
+shortly be working at shared.tech, which is a non-profit organization
+developing applications to recover surplus food.
+
+00:00:35.680 --> 00:00:38.600 The reason of the talk today and the
+reason I'm here today is to talk about my experience in moving from
+Jekyll static website generator to Org Mode. The reason I moved to Org
+Mode is to have better support for literate programming on the
+websites at the University of Trento, where we make available the
+content for the the students.
+
+00:01:04.720 --> 00:01:08.900 First of all, what is a static website
+generator? It is basically a tool which allows you to generate HTML
+files out of text files containing basically two types of information:
+metadata and content.
+
+00:01:20.700 --> 00:01:23.119
+Metadata is a
+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/info/17.md b/2020/info/17.md
index 37a07710..83675788 100644
--- a/2020/info/17.md
+++ b/2020/info/17.md
@@ -2,7 +2,8 @@
Noorah Alhasan
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.webm" subtitles="/2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt"]]
-[Download compressed .webm video (22.2M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (50.8M)](https://media.emacsconf.org/2020/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan--compressed32.webm)
+[Download compressed .webm video (22.2M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
Org-mode improved so much over the years, and the use-cases in org-mode are
diff --git a/2020/info/18.md b/2020/info/18.md
index 67794237..80390a73 100644
--- a/2020/info/18.md
+++ b/2020/info/18.md
@@ -2,7 +2,8 @@
Leo Vivier
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.webm" subtitles="/2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt"]]
-[Download compressed .webm video (23.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (47.4M)](https://media.emacsconf.org/2020/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier--compressed32.webm)
+[Download compressed .webm video (23.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier--vp9-q56-video-original-audio.webm)
Org-roam is a Roam replica built on top of the all-powerful Org-mode.
diff --git a/2020/info/19.md b/2020/info/19.md
index ec5f5442..4dc84a04 100644
--- a/2020/info/19.md
+++ b/2020/info/19.md
@@ -2,7 +2,8 @@
Brett Gilio
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.webm" subtitles="/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt"]]
-[Download compressed .webm video (20.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (25.8M)](https://media.emacsconf.org/2020/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio--compressed32.webm)
+[Download compressed .webm video (20.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio--vp9-q56-video-original-audio.webm)
In this talk I will detail the ways in which static website generation
results may be enhanced using org-webring. This talk will cover not
diff --git a/2020/info/20.md b/2020/info/20.md
index 4e346503..a8af5e35 100644
--- a/2020/info/20.md
+++ b/2020/info/20.md
@@ -1,8 +1,10 @@
# OMG Macros
Corwin Brust
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm" subtitles="/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt"]]
-[Download compressed .webm video (24.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--20-omg-macros--corwin-brust--vp9-q56-video-original-audio.webm)
+[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm" subtitles="/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt"]]
+[Download compressed .webm video (45.8M)](https://media.emacsconf.org/2020/emacsconf-2020--20-omg-macros--corwin-brust--compressed32.webm)
+[Download compressed .webm video (24.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--20-omg-macros--corwin-brust--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
Macros are a powerful tool. In the context of Emacs Lisp programming
they can also provide us with a "foot-gun" of immense proportions.
@@ -47,3 +49,486 @@ Macros are powerful and necessary. Consider how you use them?
## Do you mind if I use your macro code as inspiration for an elisp uglifier?
Have At! It's GPLv3 and you are welcome; let me know if you have any
trouble finding fruit to throw.
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template id=subtitle video="mainVideo" start="00:00:00.480" text="Good evening again. I think"]]
+[[!template id=subtitle video="mainVideo" start="00:00:02.796" text="I have a little time here"]]
+[[!template id=subtitle video="mainVideo" start="00:00:04.319" text="to talk about macros."]]
+[[!template id=subtitle video="mainVideo" start="00:00:06.447" text="Is there still room in our schedule for that,"]]
+[[!template id=subtitle video="mainVideo" start="00:00:09.440" text="or should I just jump to some of"]]
+[[!template id=subtitle video="mainVideo" start="00:00:11.440" text="my thoughts on the day?"]]
+[[!template id=subtitle video="mainVideo" start="00:00:12.559" text="(Amin: Pretty sure we"]]
+[[!template id=subtitle video="mainVideo" start="00:00:15.920" text="have some time.)"]]
+[[!template id=subtitle video="mainVideo" start="00:00:17.039" text="Corwin: All right. Great. (Amin: Yeah, go for it.)"]]
+[[!template id=subtitle video="mainVideo" start="00:00:19.039" text="Well, I'll just dive into my"]]
+[[!template id=subtitle video="mainVideo" start="00:00:20.720" text="prepared thing here then."]]
+[[!template id=subtitle video="mainVideo" start="00:00:22.384" text="(Amin: yeah, actually, you're right on time, so...)"]]
+[[!template id=subtitle video="mainVideo" start="00:00:24.720" text="Corwin: oh what an amazing thing."]]
+[[!template id=subtitle video="mainVideo" start="00:00:27.664" text="I just... You know, I have been trying to do what I..."]]
+[[!template id=subtitle video="mainVideo" start="00:00:31.199" text="I've got a big thank you planned"]]
+[[!template id=subtitle video="mainVideo" start="00:00:33.040" text="at the end, but let me just say,"]]
+[[!template id=subtitle video="mainVideo" start="00:00:36.239" text="it's been really cool to watch the"]]
+[[!template id=subtitle video="mainVideo" start="00:00:39.200" text="way that people work together."]]
+[[!template id=subtitle video="mainVideo" start="00:00:42.160" text="(Amin: Absolutely. It's... This whole event today has been"]]
+[[!template id=subtitle video="mainVideo" start="00:00:46.800" text="nothing but awesome, and"]]
+[[!template id=subtitle video="mainVideo" start="00:00:50.879" text="no little part thanks to all of the help"]]
+[[!template id=subtitle video="mainVideo" start="00:00:53.120" text="from all of you guys and everyone."]]
+[[!template id=subtitle video="mainVideo" start="00:00:56.909" text="Yeah, it's awesome."]]
+[[!template id=subtitle video="mainVideo" start="00:00:59.120" text="With that, I'll just shut up for now."]]
+[[!template id=subtitle video="mainVideo" start="00:01:03.065" text="Take it away, Corwin.)"]]
+[[!template id=subtitle video="mainVideo" start="00:01:04.891" text="Corwin: Who knows how to make"]]
+[[!template id=subtitle video="mainVideo" start="00:01:06.479" text="make that the default in good old smex?"]]
+
+[[!template id=subtitle video="mainVideo" start="00:01:09.840" text="All right. So I'm gonna try to continue"]]
+[[!template id=subtitle video="mainVideo" start="00:01:12.799" text="my theme from the previous talk."]]
+[[!template id=subtitle video="mainVideo" start="00:01:14.551" text="I'm a longtime Emacs user,"]]
+[[!template id=subtitle video="mainVideo" start="00:01:16.393" text="but I'm a pretty new person"]]
+[[!template id=subtitle video="mainVideo" start="00:01:20.240" text="to trying to really understand"]]
+[[!template id=subtitle video="mainVideo" start="00:01:22.380" text="what's going on within Emacs and make"]]
+[[!template id=subtitle video="mainVideo" start="00:01:24.960" text="my customizations to it--simple for"]]
+[[!template id=subtitle video="mainVideo" start="00:01:28.240" text="what I tend to just think of will work."]]
+[[!template id=subtitle video="mainVideo" start="00:01:30.960" text="And maybe that's a nice bow"]]
+[[!template id=subtitle video="mainVideo" start="00:01:33.566" text="to put on that earlier talk."]]
+[[!template id=subtitle video="mainVideo" start="00:01:40.479" text="Let's see here now. It's C-x M-i."]]
+[[!template id=subtitle video="mainVideo" start="00:01:44.981" text="That's right."]]
+[[!template id=subtitle video="mainVideo" start="00:01:48.159" text="And let's try that again. Okay, good."]]
+[[!template id=subtitle video="mainVideo" start="00:01:52.960" text="So demoing is fun,"]]
+[[!template id=subtitle video="mainVideo" start="00:01:55.240" text="but I will save most of that"]]
+[[!template id=subtitle video="mainVideo" start="00:01:57.192" text="for tomorrow where my"]]
+[[!template id=subtitle video="mainVideo" start="00:01:59.759" text="dear friend and co-collaborator"]]
+[[!template id=subtitle video="mainVideo" start="00:02:02.750" text="in bringing you the dungeon-mode project,"]]
+[[!template id=subtitle video="mainVideo" start="00:02:04.799" text="which is sort of the exciting thing"]]
+[[!template id=subtitle video="mainVideo" start="00:02:07.261" text="that we hope you'll be interested in,"]]
+[[!template id=subtitle video="mainVideo" start="00:02:10.800" text="gets a little more of a reveal."]]
+
+[[!template id=subtitle video="mainVideo" start="00:02:15.680" text="Tonight, I'll just close saying"]]
+[[!template id=subtitle video="mainVideo" start="00:02:19.360" text="a few things about the process of"]]
+[[!template id=subtitle video="mainVideo" start="00:02:22.640" text="making it and continuing my theme of community."]]
+[[!template id=subtitle video="mainVideo" start="00:02:25.680" text="First of all, a specific and upfront shout out"]]
+[[!template id=subtitle video="mainVideo" start="00:02:29.760" text="to tv's wasamasa who"]]
+[[!template id=subtitle video="mainVideo" start="00:02:33.120" text="absolutely shaped and guided this"]]
+[[!template id=subtitle video="mainVideo" start="00:02:36.239" text="this program. I may have taken out"]]
+[[!template id=subtitle video="mainVideo" start="00:02:38.582" text="a slide with your name on it,"]]
+[[!template id=subtitle video="mainVideo" start="00:02:39.898" text="but thank you."]]
+
+[[!template id=subtitle video="mainVideo" start="00:02:43.599" text="So when we think about Emacs macros"]]
+[[!template id=subtitle video="mainVideo" start="00:02:46.479" text="and the power that they give us,"]]
+[[!template id=subtitle video="mainVideo" start="00:02:53.280" text="I think about them as a really"]]
+[[!template id=subtitle video="mainVideo" start="00:02:54.720" text="deep rabbit hole. They confuse"]]
+[[!template id=subtitle video="mainVideo" start="00:02:56.400" text="people a lot. And so, to try to center"]]
+[[!template id=subtitle video="mainVideo" start="00:03:00.239" text="myself on that, I remember first that"]]
+[[!template id=subtitle video="mainVideo" start="00:03:03.599" text="they're going to be talking to us about code."]]
+[[!template id=subtitle video="mainVideo" start="00:03:09.599" text="Excuse me, I realize I hadn't set my timer."]]
+[[!template id=subtitle video="mainVideo" start="00:03:13.519" text="Here we are."]]
+
+[[!template id=subtitle video="mainVideo" start="00:03:18.000" text="So a simple macro syntax is"]]
+[[!template id=subtitle video="mainVideo" start="00:03:20.543" text="going to generate"]]
+[[!template id=subtitle video="mainVideo" start="00:03:22.239" text="something that is implicitly confusing"]]
+[[!template id=subtitle video="mainVideo" start="00:03:25.920" text="to somebody that knows the syntax"]]
+[[!template id=subtitle video="mainVideo" start="00:03:27.657" text="of Emacs Lisp well."]]
+[[!template id=subtitle video="mainVideo" start="00:03:28.988" text="We see something like this"]]
+[[!template id=subtitle video="mainVideo" start="00:03:30.785" text="and a veteran eye says"]]
+[[!template id=subtitle video="mainVideo" start="00:03:32.784" text="&quot;That x isn't quoted. What's going on?&quot;"]]
+[[!template id=subtitle video="mainVideo" start="00:03:36.239" text="but it can be hard to miss."]]
+[[!template id=subtitle video="mainVideo" start="00:03:39.840" text="A lot of the functions (as we'll talk"]]
+[[!template id=subtitle video="mainVideo" start="00:03:43.040" text="about in a moment) that are built into Emacs"]]
+[[!template id=subtitle video="mainVideo" start="00:03:46.640" text="really are macros, so a lot of"]]
+[[!template id=subtitle video="mainVideo" start="00:03:48.572" text="Emacs features work this way."]]
+[[!template id=subtitle video="mainVideo" start="00:03:50.480" text="It might be scary, but we have to look at"]]
+[[!template id=subtitle video="mainVideo" start="00:03:53.040" text="it closely if we really want to get"]]
+[[!template id=subtitle video="mainVideo" start="00:03:54.640" text="friendly with Emacs."]]
+
+[[!template id=subtitle video="mainVideo" start="00:03:58.400" text="Let's just jump right into defmacro,"]]
+[[!template id=subtitle video="mainVideo" start="00:04:01.439" text="which is our key entry point."]]
+[[!template id=subtitle video="mainVideo" start="00:04:04.720" text="The notes from this talk"]]
+[[!template id=subtitle video="mainVideo" start="00:04:05.833" text="include the link to that,"]]
+[[!template id=subtitle video="mainVideo" start="00:04:09.420" text="which... Definitely"]]
+[[!template id=subtitle video="mainVideo" start="00:04:12.000" text="read through a couple of times."]]
+[[!template id=subtitle video="mainVideo" start="00:04:14.640" text="That may take you through"]]
+[[!template id=subtitle video="mainVideo" start="00:04:16.000" text="into the cl-def macro, which adds"]]
+[[!template id=subtitle video="mainVideo" start="00:04:19.440" text="the Common Lisp extensions."]]
+[[!template id=subtitle video="mainVideo" start="00:04:23.440" text="Definitely challenging."]]
+[[!template id=subtitle video="mainVideo" start="00:04:28.080" text="I've struggled there,"]]
+[[!template id=subtitle video="mainVideo" start="00:04:30.560" text="as we'll take a look at"]]
+[[!template id=subtitle video="mainVideo" start="00:04:31.759" text="in a moment."]]
+[[!template id=subtitle video="mainVideo" start="00:04:34.800" text="So I haven't played too much with"]]
+[[!template id=subtitle video="mainVideo" start="00:04:36.266" text="cl-maclet. Perhaps success in"]]
+[[!template id=subtitle video="mainVideo" start="00:04:38.320" text="in that keyword space"]]
+[[!template id=subtitle video="mainVideo" start="00:04:40.804" text="and figuring out what the right balance is there"]]
+[[!template id=subtitle video="mainVideo" start="00:04:44.320" text="will give me the confidence to try"]]
+[[!template id=subtitle video="mainVideo" start="00:04:46.000" text="some more lexical macros."]]
+
+[[!template id=subtitle video="mainVideo" start="00:04:51.680" text="Let me also briefly introduce"]]
+[[!template id=subtitle video="mainVideo" start="00:04:53.402" text="the comma (,) and back quote (`)."]]
+[[!template id=subtitle video="mainVideo" start="00:04:55.134" text="If you have allowed your eyes"]]
+[[!template id=subtitle video="mainVideo" start="00:04:57.389" text="to cross when you see these,"]]
+[[!template id=subtitle video="mainVideo" start="00:04:59.321" text="that's not a shameful, shameful thing."]]
+[[!template id=subtitle video="mainVideo" start="00:05:03.113" text="It's confusing, and we should be"]]
+[[!template id=subtitle video="mainVideo" start="00:05:06.080" text="alerting each other"]]
+[[!template id=subtitle video="mainVideo" start="00:05:07.543" text="when we stick macros in,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:09.520" text="often by putting them in"]]
+[[!template id=subtitle video="mainVideo" start="00:05:11.199" text="different library spaces"]]
+[[!template id=subtitle video="mainVideo" start="00:05:12.255" text="for complicated projects,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:14.160" text="or otherwise warning people"]]
+[[!template id=subtitle video="mainVideo" start="00:05:17.520" text="that this is not an interactive function,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:19.520" text="even if you get away with using it like one."]]
+[[!template id=subtitle video="mainVideo" start="00:05:22.639" text="Watch your back."]]
+
+[[!template id=subtitle video="mainVideo" start="00:05:26.000" text="The manual itself talks about macros"]]
+[[!template id=subtitle video="mainVideo" start="00:05:32.800" text="as being a way of evaluating,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:35.840" text="as being an evaluator that will take"]]
+[[!template id=subtitle video="mainVideo" start="00:05:39.993" text="our Emacs Lisp expression"]]
+[[!template id=subtitle video="mainVideo" start="00:05:42.800" text="and the set of forms that"]]
+[[!template id=subtitle video="mainVideo" start="00:05:44.800" text="will feed to it our code,"]]
+[[!template id=subtitle video="mainVideo" start="00:05:48.960" text="but it also provides us with"]]
+[[!template id=subtitle video="mainVideo" start="00:05:50.792" text="this concept of an environment."]]
+[[!template id=subtitle video="mainVideo" start="00:05:53.467" text="That's really where the power comes in."]]
+[[!template id=subtitle video="mainVideo" start="00:05:57.027" text="Through that, we can have"]]
+[[!template id=subtitle video="mainVideo" start="00:05:58.240" text="lexical variables and"]]
+[[!template id=subtitle video="mainVideo" start="00:06:00.080" text="think about--bring in some of the"]]
+[[!template id=subtitle video="mainVideo" start="00:06:03.199" text="capabilities that"]]
+[[!template id=subtitle video="mainVideo" start="00:06:06.400" text="can be harder to reach with"]]
+[[!template id=subtitle video="mainVideo" start="00:06:09.759" text="a pure declarative statement that"]]
+[[!template id=subtitle video="mainVideo" start="00:06:13.840" text="doesn't allow for top level"]]
+[[!template id=subtitle video="mainVideo" start="00:06:21.440" text="asynchronous... Asynchronicity..."]]
+[[!template id=subtitle video="mainVideo" start="00:06:28.639" text="I'm gonna basically"]]
+[[!template id=subtitle video="mainVideo" start="00:06:33.520" text="ignore the byte-compilation phase"]]
+[[!template id=subtitle video="mainVideo" start="00:06:35.577" text="for this talk"]]
+[[!template id=subtitle video="mainVideo" start="00:06:36.880" text="in order to have any prayer"]]
+[[!template id=subtitle video="mainVideo" start="00:06:38.463" text="of getting through it in the"]]
+[[!template id=subtitle video="mainVideo" start="00:06:39.919" text="remaining 9 or 11 minutes or whatever."]]
+[[!template id=subtitle video="mainVideo" start="00:06:43.600" text="But suffice to say, that's a scary space,"]]
+[[!template id=subtitle video="mainVideo" start="00:06:50.441" text="and that's really"]]
+[[!template id=subtitle video="mainVideo" start="00:06:52.240" text="the thing that you want to"]]
+[[!template id=subtitle video="mainVideo" start="00:06:53.800" text="start learning about"]]
+[[!template id=subtitle video="mainVideo" start="00:06:55.277" text="as you think about"]]
+[[!template id=subtitle video="mainVideo" start="00:06:57.199" text="taking macros on in earnest."]]
+
+[[!template id=subtitle video="mainVideo" start="00:07:02.160" text="Coming back to the comma syntax,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:05.919" text="then, having given ourselves a"]]
+[[!template id=subtitle video="mainVideo" start="00:07:09.759" text="working definition for the Emacs Lisp"]]
+[[!template id=subtitle video="mainVideo" start="00:07:12.479" text="runtime environment, then we can say that"]]
+[[!template id=subtitle video="mainVideo" start="00:07:14.479" text="macros are going to"]]
+[[!template id=subtitle video="mainVideo" start="00:07:15.840" text="inject code back into that stream,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:21.120" text="whereas backquote (`)"]]
+[[!template id=subtitle video="mainVideo" start="00:07:25.280" text="is going to give code back."]]
+[[!template id=subtitle video="mainVideo" start="00:07:28.479" text="to the stream--or interject, sorry,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:31.919" text="it's going to interject"]]
+[[!template id=subtitle video="mainVideo" start="00:07:33.632" text="back into the stream."]]
+[[!template id=subtitle video="mainVideo" start="00:07:35.360" text="Sort of an exclamatory &quot;Excuse me,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:39.840" text="I'd like to have a value here.&quot; We can take that value"]]
+[[!template id=subtitle video="mainVideo" start="00:07:46.966" text="from the environment as it exists"]]
+[[!template id=subtitle video="mainVideo" start="00:07:48.639" text="when our macro is evaluated."]]
+[[!template id=subtitle video="mainVideo" start="00:07:54.160" text="Backquote, on the other hand,"]]
+[[!template id=subtitle video="mainVideo" start="00:07:56.003" text="takes the result from that"]]
+[[!template id=subtitle video="mainVideo" start="00:08:00.560" text="and returns it back to the stream"]]
+[[!template id=subtitle video="mainVideo" start="00:08:02.201" text="for evaluation at the"]]
+[[!template id=subtitle video="mainVideo" start="00:08:03.467" text="processing level that invoked us."]]
+[[!template id=subtitle video="mainVideo" start="00:08:05.680" text="So in other words, perhaps back up to"]]
+[[!template id=subtitle video="mainVideo" start="00:08:08.720" text="a top-level eval expression where our"]]
+[[!template id=subtitle video="mainVideo" start="00:08:10.960" text="macro is invoked."]]
+
+[[!template id=subtitle video="mainVideo" start="00:08:20.080" text="I'm going to briefly bring"]]
+[[!template id=subtitle video="mainVideo" start="00:08:22.560" text="you back to the game"]]
+[[!template id=subtitle video="mainVideo" start="00:08:23.759" text="for just a moment."]]
+[[!template id=subtitle video="mainVideo" start="00:08:30.240" text="I won't linger on this slide,"]]
+[[!template id=subtitle video="mainVideo" start="00:08:32.479" text="but briefly: this is a"]]
+[[!template id=subtitle video="mainVideo" start="00:08:37.039" text="role-playing, pen and pencil,"]]
+[[!template id=subtitle video="mainVideo" start="00:08:41.615" text="physical dice tradition"]]
+[[!template id=subtitle video="mainVideo" start="00:08:43.829" text="that dates back a long time"]]
+[[!template id=subtitle video="mainVideo" start="00:08:46.320" text="from a technology perspective."]]
+[[!template id=subtitle video="mainVideo" start="00:08:48.080" text="It's old in the same way"]]
+[[!template id=subtitle video="mainVideo" start="00:08:50.727" text="that other tools that I like are old."]]
+[[!template id=subtitle video="mainVideo" start="00:08:58.560" text="It's simple to understand."]]
+[[!template id=subtitle video="mainVideo" start="00:09:00.185" text="I can communicate a lot with it"]]
+[[!template id=subtitle video="mainVideo" start="00:09:01.873" text="with a simple amount of typing"]]
+[[!template id=subtitle video="mainVideo" start="00:09:03.952" text="or scribbling something on a piece of paper."]]
+[[!template id=subtitle video="mainVideo" start="00:09:09.120" text="It has a complicated problem space of its own."]]
+
+[[!template id=subtitle video="mainVideo" start="00:09:13.500" text="Again, I don't want to"]]
+[[!template id=subtitle video="mainVideo" start="00:09:15.519" text="get too much into the game here,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:18.212" text="but in this talk,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:20.177" text="for the last five minutes,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:22.590" text="I'll focus on the process"]]
+[[!template id=subtitle video="mainVideo" start="00:09:24.751" text="that we took to"]]
+[[!template id=subtitle video="mainVideo" start="00:09:26.640" text="automate getting data out of"]]
+[[!template id=subtitle video="mainVideo" start="00:09:29.190" text="the Org Mode tables which eventually"]]
+[[!template id=subtitle video="mainVideo" start="00:09:31.564" text="(as we'll talk about more tomorrow)"]]
+[[!template id=subtitle video="mainVideo" start="00:09:33.855" text="are used to draw"]]
+[[!template id=subtitle video="mainVideo" start="00:09:36.000" text="game maps and other things."]]
+[[!template id=subtitle video="mainVideo" start="00:09:39.440" text="Here I talk about why we did that."]]
+[[!template id=subtitle video="mainVideo" start="00:09:42.543" text="I'm going to skip briefly past that,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:45.279" text="and say instead that at a high level,"]]
+[[!template id=subtitle video="mainVideo" start="00:09:49.360" text="it's symbolic informatics."]]
+[[!template id=subtitle video="mainVideo" start="00:09:51.440" text="We're giving a symbolic name"]]
+[[!template id=subtitle video="mainVideo" start="00:09:53.519" text="to a tile set,"]]
+[[!template id=subtitle video="mainVideo" start="00:10:02.000" text="and then assigning that tile set some"]]
+[[!template id=subtitle video="mainVideo" start="00:10:04.000" text="some characteristics"]]
+[[!template id=subtitle video="mainVideo" start="00:10:04.840" text="like physical speeds, screen space"]]
+[[!template id=subtitle video="mainVideo" start="00:10:06.820" text="(a variable that we might"]]
+[[!template id=subtitle video="mainVideo" start="00:10:08.399" text="want to swap in), and so forth."]]
+[[!template id=subtitle video="mainVideo" start="00:10:12.800" text="You know, our project rests heavily on"]]
+[[!template id=subtitle video="mainVideo" start="00:10:15.200" text="Org Mode and its fundamental capabilities."]]
+[[!template id=subtitle video="mainVideo" start="00:10:21.040" text="The code I'm going to show here"]]
+[[!template id=subtitle video="mainVideo" start="00:10:28.320" text="is focused around a sticky"]]
+[[!template id=subtitle video="mainVideo" start="00:10:31.360" text="problem space in"]]
+[[!template id=subtitle video="mainVideo" start="00:10:32.380" text="information technology."]]
+[[!template id=subtitle video="mainVideo" start="00:10:33.861" text="I'm a professional software engineer"]]
+[[!template id=subtitle video="mainVideo" start="00:10:38.240" text="turned technology architect."]]
+[[!template id=subtitle video="mainVideo" start="00:10:40.362" text="I support the websites for"]]
+[[!template id=subtitle video="mainVideo" start="00:10:43.495" text="a recognizable financial services brand"]]
+[[!template id=subtitle video="mainVideo" start="00:10:46.533" text="that I don't identify"]]
+[[!template id=subtitle video="mainVideo" start="00:10:48.500" text="just so I don't accidentally end up"]]
+[[!template id=subtitle video="mainVideo" start="00:10:50.720" text="inadvertently misrepresenting my firm"]]
+[[!template id=subtitle video="mainVideo" start="00:10:54.399" text="in some financial perspective"]]
+[[!template id=subtitle video="mainVideo" start="00:10:56.456" text="if I let some other"]]
+[[!template id=subtitle video="mainVideo" start="00:10:57.760" text="companies' name slip, or my own."]]
+[[!template id=subtitle video="mainVideo" start="00:11:03.300" text="It's certainly no representation"]]
+[[!template id=subtitle video="mainVideo" start="00:11:07.700" text="of an opinion other than my own."]]
+[[!template id=subtitle video="mainVideo" start="00:11:18.800" text="So ETL has to do with moving data around."]]
+[[!template id=subtitle video="mainVideo" start="00:11:22.720" text="We have the idea of"]]
+[[!template id=subtitle video="mainVideo" start="00:11:26.240" text="a pipeline where we'll be able to verify"]]
+[[!template id=subtitle video="mainVideo" start="00:11:29.200" text="certain assumptions,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:30.560" text="nominally about data quality,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:32.106" text="but it could be about anything."]]
+[[!template id=subtitle video="mainVideo" start="00:11:33.600" text="Before the pipeline starts, okay,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:35.630" text="we've got a state where we think"]]
+[[!template id=subtitle video="mainVideo" start="00:11:36.886" text="it should work if we run it."]]
+[[!template id=subtitle video="mainVideo" start="00:11:38.560" text="We have some extraction where we'll"]]
+[[!template id=subtitle video="mainVideo" start="00:11:41.920" text="get our sources, and we may have"]]
+[[!template id=subtitle video="mainVideo" start="00:11:43.973" text="the opportunity to"]]
+[[!template id=subtitle video="mainVideo" start="00:11:45.040" text="make some assertions there."]]
+[[!template id=subtitle video="mainVideo" start="00:11:47.327" text="In the transform stage, as well as the load,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:50.510" text="things get a little dicer,"]]
+[[!template id=subtitle video="mainVideo" start="00:11:52.720" text="to the point where we come out of the"]]
+[[!template id=subtitle video="mainVideo" start="00:11:54.079" text="load stage and we should have some"]]
+[[!template id=subtitle video="mainVideo" start="00:11:55.360" text="really solid assertions again"]]
+[[!template id=subtitle video="mainVideo" start="00:11:56.676" text="that we can even go back"]]
+[[!template id=subtitle video="mainVideo" start="00:11:57.724" text="and compare to the extract stage."]]
+[[!template id=subtitle video="mainVideo" start="00:11:59.680" text="From this, we have the rudimentaries"]]
+[[!template id=subtitle video="mainVideo" start="00:12:02.639" text="of a data quality practice."]]
+[[!template id=subtitle video="mainVideo" start="00:12:04.959" text="In this case, we have a number of"]]
+[[!template id=subtitle video="mainVideo" start="00:12:08.120" text="Org Mode files that will all"]]
+[[!template id=subtitle video="mainVideo" start="00:12:09.360" text="be distributed across a"]]
+[[!template id=subtitle video="mainVideo" start="00:12:12.639" text="number of players' computers,"]]
+[[!template id=subtitle video="mainVideo" start="00:12:16.720" text="so we might not want to update every"]]
+[[!template id=subtitle video="mainVideo" start="00:12:18.959" text="part of every buffer."]]
+[[!template id=subtitle video="mainVideo" start="00:12:20.320" text="I think it's a complicated problem space."]]
+[[!template id=subtitle video="mainVideo" start="00:12:22.720" text="So we tried to take"]]
+[[!template id=subtitle video="mainVideo" start="00:12:24.560" text="a long-term view of"]]
+[[!template id=subtitle video="mainVideo" start="00:12:27.839" text="the solution that we needed."]]
+[[!template id=subtitle video="mainVideo" start="00:12:30.321" text="So I'll go ahead"]]
+[[!template id=subtitle video="mainVideo" start="00:12:32.160" text="and open up the function that..."]]
+[[!template id=subtitle video="mainVideo" start="00:12:36.279" text="Let's actually start with the one"]]
+[[!template id=subtitle video="mainVideo" start="00:12:39.020" text="that's pretty easy to read."]]
+[[!template id=subtitle video="mainVideo" start="00:12:41.680" text="I'm gonna go ahead and just crank it up huge,"]]
+[[!template id=subtitle video="mainVideo" start="00:12:46.800" text="in case anybody's watching in 480."]]
+
+[[!template id=subtitle video="mainVideo" start="00:12:51.680" text="This program is not a work of art."]]
+[[!template id=subtitle video="mainVideo" start="00:12:57.733" text="It's a simple implementation of the idea that"]]
+[[!template id=subtitle video="mainVideo" start="00:13:01.120" text="an alist of functions"]]
+[[!template id=subtitle video="mainVideo" start="00:13:04.000" text="that return maybe some data,"]]
+[[!template id=subtitle video="mainVideo" start="00:13:06.633" text="maybe some data and an entry back into that alist,"]]
+[[!template id=subtitle video="mainVideo" start="00:13:10.399" text="can be done quite extensively with"]]
+[[!template id=subtitle video="mainVideo" start="00:13:13.040" text="very few lines of code."]]
+[[!template id=subtitle video="mainVideo" start="00:13:15.680" text="Neither is it an especially tight"]]
+[[!template id=subtitle video="mainVideo" start="00:13:17.586" text="or thrifty implementation."]]
+[[!template id=subtitle video="mainVideo" start="00:13:19.600" text="It's just trying to get the job done"]]
+[[!template id=subtitle video="mainVideo" start="00:13:22.000" text="with a doc statement for everything."]]
+[[!template id=subtitle video="mainVideo" start="00:13:25.056" text="At the heart, we see a call to"]]
+[[!template id=subtitle video="mainVideo" start="00:13:28.595" text="this macro called dm-coalesce-hash,"]]
+[[!template id=subtitle video="mainVideo" start="00:13:32.067" text="and that's what I'd like to focus in on."]]
+[[!template id=subtitle video="mainVideo" start="00:13:33.714" text="You can see... I think"]]
+[[!template id=subtitle video="mainVideo" start="00:13:35.360" text="that something unpleasant is happening here."]]
+[[!template id=subtitle video="mainVideo" start="00:13:38.800" text="I've got an eval in what is..."]]
+
+[[!template id=subtitle video="mainVideo" start="00:13:43.991" text="I will share a fairly central function"]]
+[[!template id=subtitle video="mainVideo" start="00:13:49.519" text="that those implementing this ETL pattern are"]]
+[[!template id=subtitle video="mainVideo" start="00:13:52.160" text="welcome to derive from."]]
+[[!template id=subtitle video="mainVideo" start="00:13:54.933" text="That is, this is a default transform"]]
+[[!template id=subtitle video="mainVideo" start="00:13:57.680" text="that you can get when loading certain kinds of"]]
+[[!template id=subtitle video="mainVideo" start="00:14:00.959" text="org-mode tables that have been"]]
+[[!template id=subtitle video="mainVideo" start="00:14:04.560" text="properly adorned. Again, we'll get"]]
+[[!template id=subtitle video="mainVideo" start="00:14:06.399" text="into that all tomorrow."]]
+[[!template id=subtitle video="mainVideo" start="00:14:09.120" text="So, keeping an eye on time. Couple minutes left."]]
+
+[[!template id=subtitle video="mainVideo" start="00:14:11.900" text="Let's look at the macro itself."]]
+[[!template id=subtitle video="mainVideo" start="00:14:13.760" text="I have a slide on this,"]]
+[[!template id=subtitle video="mainVideo" start="00:14:15.000" text="but let's go ahead and risk getting off page."]]
+[[!template id=subtitle video="mainVideo" start="00:14:24.639" text="Oh boy. Here we go. So this is my"]]
+[[!template id=subtitle video="mainVideo" start="00:14:27.199" text="utilities bucket."]]
+[[!template id=subtitle video="mainVideo" start="00:14:28.959" text="It has such basic features as &quot;give me a"]]
+[[!template id=subtitle video="mainVideo" start="00:14:31.920" text="hash table with some defaults, I'll think"]]
+[[!template id=subtitle video="mainVideo" start="00:14:34.000" text="about that later,&quot;"]]
+[[!template id=subtitle video="mainVideo" start="00:14:36.000" text="and &quot;add to list,&quot; a special version"]]
+[[!template id=subtitle video="mainVideo" start="00:14:44.720" text="that enables us to be a little cavalier"]]
+[[!template id=subtitle video="mainVideo" start="00:14:47.600" text="in experimenting with alist versus"]]
+[[!template id=subtitle video="mainVideo" start="00:14:49.360" text="hashes versus plists."]]
+[[!template id=subtitle video="mainVideo" start="00:14:50.967" text="We've made a right mess for ourselves"]]
+[[!template id=subtitle video="mainVideo" start="00:14:53.178" text="in the proof of concept area,"]]
+[[!template id=subtitle video="mainVideo" start="00:14:54.399" text="and it's ripe for someone to write a"]]
+[[!template id=subtitle video="mainVideo" start="00:14:57.433" text="whitepaper about"]]
+[[!template id=subtitle video="mainVideo" start="00:14:58.560" text="when to prefer these things."]]
+[[!template id=subtitle video="mainVideo" start="00:15:04.800" text="The merge alist..."]]
+[[!template id=subtitle video="mainVideo" start="00:15:08.000" text="Same work here. Let's get down to business."]]
+
+[[!template id=subtitle video="mainVideo" start="00:15:12.959" text="This function has quite a..."]]
+[[!template id=subtitle video="mainVideo" start="00:15:14.667" text="This macro has quite a doc string."]]
+[[!template id=subtitle video="mainVideo" start="00:15:17.467" text="I think I mentioned earlier that I got myself into"]]
+[[!template id=subtitle video="mainVideo" start="00:15:20.720" text="trouble with the keyword properties."]]
+[[!template id=subtitle video="mainVideo" start="00:15:22.088" text="You can see that we have"]]
+[[!template id=subtitle video="mainVideo" start="00:15:23.519" text="not only quite a number of them,"]]
+[[!template id=subtitle video="mainVideo" start="00:15:27.359" text="but a lot of default values,"]]
+[[!template id=subtitle video="mainVideo" start="00:15:31.155" text="many of which may be relying on"]]
+[[!template id=subtitle video="mainVideo" start="00:15:35.446" text="the values that are passed in here."]]
+[[!template id=subtitle video="mainVideo" start="00:15:37.264" text="This is complicated. As it turns out,"]]
+[[!template id=subtitle video="mainVideo" start="00:15:40.000" text="I wasn't brave enough in most cases"]]
+[[!template id=subtitle video="mainVideo" start="00:15:44.000" text="to try to write a lambda"]]
+[[!template id=subtitle video="mainVideo" start="00:15:45.485" text="that could understand and"]]
+[[!template id=subtitle video="mainVideo" start="00:15:47.279" text="replace its own local variable."]]
+[[!template id=subtitle video="mainVideo" start="00:15:49.300" text="I just didn't..."]]
+[[!template id=subtitle video="mainVideo" start="00:15:50.399" text="It didn't save me enough time. This was"]]
+[[!template id=subtitle video="mainVideo" start="00:15:53.519" text="really easy to read and write and understand"]]
+[[!template id=subtitle video="mainVideo" start="00:15:56.532" text="as I thought through my problem,"]]
+[[!template id=subtitle video="mainVideo" start="00:15:58.240" text="but now, as I use it,"]]
+[[!template id=subtitle video="mainVideo" start="00:16:00.000" text="I've lost a little ground with this."]]
+[[!template id=subtitle video="mainVideo" start="00:16:02.486" text="I'm not even sure"]]
+[[!template id=subtitle video="mainVideo" start="00:16:04.079" text="I like what I got from"]]
+[[!template id=subtitle video="mainVideo" start="00:16:06.453" text="the many keyword properties when it..."]]
+[[!template id=subtitle video="mainVideo" start="00:16:09.341" text="And we can look, perhaps if we have"]]
+[[!template id=subtitle video="mainVideo" start="00:16:11.920" text="the time, at what that looks like in"]]
+[[!template id=subtitle video="mainVideo" start="00:16:19.920" text="Oh, all right, I have to separately"]]
+[[!template id=subtitle video="mainVideo" start="00:16:22.720" text="dismiss and restart that."]]
+
+[[!template id=subtitle video="mainVideo" start="00:16:24.480" text="So that's just about my time."]]
+[[!template id=subtitle video="mainVideo" start="00:16:27.519" text="Being respectful of that, I want"]]
+[[!template id=subtitle video="mainVideo" start="00:16:29.600" text="to invite presenters to just jump in at"]]
+[[!template id=subtitle video="mainVideo" start="00:16:31.920" text="any of the many large pauses I leave."]]
+[[!template id=subtitle video="mainVideo" start="00:16:35.519" text="I'll just leave up the doc string"]]
+[[!template id=subtitle video="mainVideo" start="00:16:38.079" text="for a moment and maybe split the screen"]]
+[[!template id=subtitle video="mainVideo" start="00:16:40.160" text="and pull open an item."]]
+[[!template id=subtitle video="mainVideo" start="00:16:45.199" text="(Amin: Thank you very"]]
+[[!template id=subtitle video="mainVideo" start="00:16:48.720" text="much for your talk, Corwin."]]
+[[!template id=subtitle video="mainVideo" start="00:16:50.720" text="I think you still have"]]
+[[!template id=subtitle video="mainVideo" start="00:16:53.839" text="maybe three or four more minutes,"]]
+[[!template id=subtitle video="mainVideo" start="00:16:55.027" text="if you want to quickly wrap up.)"]]
+[[!template id=subtitle video="mainVideo" start="00:16:57.680" text="Corwin: Okay, so three or four more minutes"]]
+[[!template id=subtitle video="mainVideo" start="00:17:00.644" text="I can easily spend on thank yous."]]
+[[!template id=subtitle video="mainVideo" start="00:17:05.439" text="I might switch to that if there aren't"]]
+[[!template id=subtitle video="mainVideo" start="00:17:07.280" text="questions on the pad."]]
+[[!template id=subtitle video="mainVideo" start="00:17:10.160" text="(Amin: Would you like me to pull up the pad,"]]
+[[!template id=subtitle video="mainVideo" start="00:17:12.559" text="or are you looking at it?)"]]
+[[!template id=subtitle video="mainVideo" start="00:17:14.079" text="Corwin: I am. I bookmarked it."]]
+[[!template id=subtitle video="mainVideo" start="00:17:16.777" text="I am pulling the tab and I'll bring it in."]]
+[[!template id=subtitle video="mainVideo" start="00:17:30.840" text="Okay. All right. This is the wrong Etherpad."]]
+[[!template id=subtitle video="mainVideo" start="00:17:38.799" text="Thanks for the link."]]
+[[!template id=subtitle video="mainVideo" start="00:17:44.480" text="All right. So I think I'm looking for macros."]]
+
+[[!template id=subtitle video="mainVideo" start="00:17:54.880" text="Okay. Key message. Sure."]]
+[[!template id=subtitle video="mainVideo" start="00:17:57.630" text="So, the key message is that it's"]]
+[[!template id=subtitle video="mainVideo" start="00:18:01.679" text="a jungle out there."]]
+[[!template id=subtitle video="mainVideo" start="00:18:02.960" text="Macros, along with any other design,"]]
+[[!template id=subtitle video="mainVideo" start="00:18:05.912" text="can leave you in a position"]]
+[[!template id=subtitle video="mainVideo" start="00:18:08.559" text="where you have a nice API. I can show"]]
+[[!template id=subtitle video="mainVideo" start="00:18:11.919" text="you other examples (you can find them in"]]
+[[!template id=subtitle video="mainVideo" start="00:18:13.600" text="the dungeon-mode source)"]]
+[[!template id=subtitle video="mainVideo" start="00:18:14.960" text="of many, many other places where I use"]]
+[[!template id=subtitle video="mainVideo" start="00:18:18.480" text="this exact same formula,"]]
+[[!template id=subtitle video="mainVideo" start="00:18:20.820" text="quickly sketching out how a character sheet"]]
+[[!template id=subtitle video="mainVideo" start="00:18:23.840" text="or another big data set"]]
+[[!template id=subtitle video="mainVideo" start="00:18:26.180" text="needs to figure out what tables are"]]
+[[!template id=subtitle video="mainVideo" start="00:18:28.480" text="going to be interesting"]]
+[[!template id=subtitle video="mainVideo" start="00:18:29.320" text="from the collection of files,"]]
+[[!template id=subtitle video="mainVideo" start="00:18:30.720" text="and then load up the tile set,"]]
+[[!template id=subtitle video="mainVideo" start="00:18:33.967" text="and the layout file from that."]]
+[[!template id=subtitle video="mainVideo" start="00:18:38.880" text="And I mean, it works."]]
+[[!template id=subtitle video="mainVideo" start="00:18:40.542" text="The project is moving forward with this."]]
+[[!template id=subtitle video="mainVideo" start="00:18:42.677" text="I have the flexibility that I need."]]
+[[!template id=subtitle video="mainVideo" start="00:18:44.799" text="But here I am evaling my own code"]]
+[[!template id=subtitle video="mainVideo" start="00:18:46.559" text="to make darn sure even if I get"]]
+[[!template id=subtitle video="mainVideo" start="00:18:48.640" text="byte-compiled, this macro"]]
+[[!template id=subtitle video="mainVideo" start="00:18:52.400" text="does get evaluated in the user's real"]]
+[[!template id=subtitle video="mainVideo" start="00:18:55.440" text="run time. Clearly a design fail."]]
+[[!template id=subtitle video="mainVideo" start="00:18:57.684" text="So that would be..."]]
+
+[[!template id=subtitle video="mainVideo" start="00:18:58.890" text="The key point of my talk is to"]]
+[[!template id=subtitle video="mainVideo" start="00:19:00.880" text="present this design fail and"]]
+[[!template id=subtitle video="mainVideo" start="00:19:05.600" text="thank the community, but especially"]]
+[[!template id=subtitle video="mainVideo" start="00:19:08.320" text="wasamasa for some patience."]]
+[[!template id=subtitle video="mainVideo" start="00:19:10.942" text="Let me add at this moment that"]]
+[[!template id=subtitle video="mainVideo" start="00:19:13.280" text="he was so frustrated with me."]]
+[[!template id=subtitle video="mainVideo" start="00:19:13.333" text="They were sort of frustrated with me"]]
+[[!template id=subtitle video="mainVideo" start="00:19:17.115" text="(I think I didn't qualify pronouns)"]]
+[[!template id=subtitle video="mainVideo" start="00:19:24.240" text="with doing this. The first..."]]
+[[!template id=subtitle video="mainVideo" start="00:19:26.287" text="This was one of our first interactions,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:27.985" text="and the feedback was,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:29.919" text="&quot;Why is this a macro. Full stop.&quot;"]]
+[[!template id=subtitle video="mainVideo" start="00:19:34.240" text="And that's a great message, actually."]]
+[[!template id=subtitle video="mainVideo" start="00:19:36.640" text="I hope that maybe this can encourage"]]
+[[!template id=subtitle video="mainVideo" start="00:19:39.520" text="further talks across the subject about,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:42.720" text="you know, &quot;Hey, wait a minute,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:43.808" text="macros are really fantastic,&quot;"]]
+[[!template id=subtitle video="mainVideo" start="00:19:45.549" text="as I hope I made clear."]]
+[[!template id=subtitle video="mainVideo" start="00:19:47.018" text="You can do a tremendous amount"]]
+[[!template id=subtitle video="mainVideo" start="00:19:48.559" text="with them, and we rely on them"]]
+[[!template id=subtitle video="mainVideo" start="00:19:51.039" text="for almost all the fun goodies,"]]
+[[!template id=subtitle video="mainVideo" start="00:19:55.200" text="from defun, setq..."]]
+[[!template id=subtitle video="mainVideo" start="00:20:02.159" text="I want to get to my thank yous."]]
+
+[[!template id=subtitle video="mainVideo" start="00:20:04.639" text="Let me just peek back at the pad."]]
+[[!template id=subtitle video="mainVideo" start="00:20:20.000" text="Well, that was actually a scratch buffer,"]]
+[[!template id=subtitle video="mainVideo" start="00:20:22.080" text="so I'll have to read it cold off my notes."]]
+[[!template id=subtitle video="mainVideo" start="00:20:27.919" text="But I'll switch to... I'll also..."]]
+[[!template id=subtitle video="mainVideo" start="00:20:30.320" text="I'll say a couple of thank-yous if you"]]
+[[!template id=subtitle video="mainVideo" start="00:20:31.600" text="don't mind, Amin."]]
+[[!template id=subtitle video="mainVideo" start="00:20:34.320" text="In addition to the big thank you that I"]]
+[[!template id=subtitle video="mainVideo" start="00:20:36.080" text="hope was implied by my shout out to wasamasa,"]]
+[[!template id=subtitle video="mainVideo" start="00:20:39.360" text="I also want to thank you, Amin, for"]]
+[[!template id=subtitle video="mainVideo" start="00:20:42.720" text="your kindness in extending"]]
+[[!template id=subtitle video="mainVideo" start="00:20:46.640" text="to the project as well as to me, the"]]
+[[!template id=subtitle video="mainVideo" start="00:20:51.360" text="the chance to present here."]]
+[[!template id=subtitle video="mainVideo" start="00:20:54.320" text="You've also done a lot of great stuff"]]
+[[!template id=subtitle video="mainVideo" start="00:20:56.358" text="for our project. Thank you very much for that."]]
+[[!template id=subtitle video="mainVideo" start="00:20:59.360" text="Sacha Chua (I'll get there),"]]
+[[!template id=subtitle video="mainVideo" start="00:21:03.400" text="thank you so much for"]]
+[[!template id=subtitle video="mainVideo" start="00:21:15.919" text="the inspiration that you are to our"]]
+[[!template id=subtitle video="mainVideo" start="00:21:17.200" text="whole community."]]
+[[!template id=subtitle video="mainVideo" start="00:21:18.320" text="I also want to thank the presenters"]]
+[[!template id=subtitle video="mainVideo" start="00:21:22.400" text="for just being so flexible and"]]
+[[!template id=subtitle video="mainVideo" start="00:21:25.600" text="nagging back through the whole thing,"]]
+[[!template id=subtitle video="mainVideo" start="00:21:27.600" text="and especially to Leo"]]
+[[!template id=subtitle video="mainVideo" start="00:21:29.120" text="who has done so much to drive the show today."]]
+[[!template id=subtitle video="mainVideo" start="00:21:32.159" text="This is a fractious tent at times,"]]
+[[!template id=subtitle video="mainVideo" start="00:21:37.242" text="and sometimes it is indeed"]]
+[[!template id=subtitle video="mainVideo" start="00:21:39.800" text="a little bit of a circus,"]]
+[[!template id=subtitle video="mainVideo" start="00:21:41.360" text="but I am learning so much so fast."]]
+[[!template id=subtitle video="mainVideo" start="00:21:44.746" text="I'm just inspired by how much"]]
+[[!template id=subtitle video="mainVideo" start="00:21:46.880" text="Emacs can teach us."]]
+[[!template id=subtitle video="mainVideo" start="00:21:49.333" text="(Amin: thank you, Corwin, for your kind words"]]
+[[!template id=subtitle video="mainVideo" start="00:21:52.901" text="about me, of course,"]]
+[[!template id=subtitle video="mainVideo" start="00:21:54.960" text="about all of us"]]
+[[!template id=subtitle video="mainVideo" start="00:21:56.000" text="and the conference..."]]
+[[!template id=subtitle video="mainVideo" start="00:21:58.000" text="Indeed, thanks to everyone who's helped,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:02.400" text="including the speakers, of course,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:04.159" text="without whom EmacsConf really"]]
+[[!template id=subtitle video="mainVideo" start="00:22:05.840" text="wouldn't have been a EmacsConf."]]
+[[!template id=subtitle video="mainVideo" start="00:22:08.960" text="It's been a pleasure"]]
+[[!template id=subtitle video="mainVideo" start="00:22:10.640" text="knowing you and working with you,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:12.366" text="from afar for the most part"]]
+[[!template id=subtitle video="mainVideo" start="00:22:15.743" text="on dungeon-mode,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:17.360" text="helping with small things here and there"]]
+[[!template id=subtitle video="mainVideo" start="00:22:19.937" text="but yeah, it's been my pleasure,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:21.796" text="and it's great to have you and"]]
+[[!template id=subtitle video="mainVideo" start="00:22:23.840" text="everyone else part of the community,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:26.582" text="and for me to be part of the community."]]
+[[!template id=subtitle video="mainVideo" start="00:22:29.180" text="It's been a lot of fun."]]
+[[!template id=subtitle video="mainVideo" start="00:22:30.559" text="Thank you.)"]]
+[[!template id=subtitle video="mainVideo" start="00:22:33.679" text="Corwin: It's an honor."]]
+[[!template id=subtitle video="mainVideo" start="00:22:35.206" text="I don't use that word an awful lot"]]
+[[!template id=subtitle video="mainVideo" start="00:22:37.428" text="because I sort of smirk at it."]]
+[[!template id=subtitle video="mainVideo" start="00:22:39.867" text="It gets us in a lot of trouble, honor does,"]]
+[[!template id=subtitle video="mainVideo" start="00:22:43.941" text="but this will be a sure time to use it."]]
+[[!template id=subtitle video="mainVideo" start="00:22:46.904" text="(Amin: Thank you.)"]]
+[[!template id=subtitle video="mainVideo" start="00:22:48.840" text="Corwin: Likewise."]]
diff --git a/2020/info/21.md b/2020/info/21.md
index 5a316368..96165e9e 100644
--- a/2020/info/21.md
+++ b/2020/info/21.md
@@ -1,8 +1,9 @@
# On why most of the best features in eev look like 5-minute hacks
Eduardo Ochs
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.webm"]]
-[Download compressed .webm video (43.9M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs--vp9-q56-video-original-audio.webm)
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.webm" subtitles="/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt"]]
+[Download compressed .webm video (92.9M)](https://media.emacsconf.org/2020/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs--compressed32.webm)
+[Download compressed .webm video (43.9M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs--vp9-q56-video-original-audio.webm)
In the last months there were several hundreds of messages in
emacs-devel in threads with names like "A proposal for a friendlier
diff --git a/2020/info/22.md b/2020/info/22.md
index 6e616cda..638a2d2f 100644
--- a/2020/info/22.md
+++ b/2020/info/22.md
@@ -1,8 +1,10 @@
# Powering-up Special Blocks
Musa Al-hassy
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.webm"]]
-[Download compressed .webm video (29.2M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy--vp9-q56-video-original-audio.webm)
+[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.webm" subtitles="/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt" video]]
+[Download compressed .webm video (58.5M)](https://media.emacsconf.org/2020/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy--compressed32.webm)
+[Download compressed .webm video (29.2M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
Users will generally only make use of a few predefined \`special
blocks', such as \`example, centre, quote', and will not bother with
@@ -138,3 +140,537 @@ love to have it.
<https://alhassy.github.io/ElispCheatSheet/CheatSheet.pdf>.
- My Emacs init:
<https://github.com/alhassy/emacs.d#a-life-configuring-emacs>.
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="All right, then. Well, hello everyone." start="00:00:04.080" video="mainVideo" id=subtitle]]
+[[!template text="I hope you're all enjoying the EmacsConf." start="00:00:07.359" video="mainVideo" id=subtitle]]
+[[!template text="My name is Musa Al-hassy, and I hope you're" start="00:00:11.519" video="mainVideo" id=subtitle]]
+[[!template text="excited to learn about powering up special blocks." start="00:00:15.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's first off find out what these special blocks are," start="00:00:19.840" video="mainVideo" id=subtitle]]
+[[!template text="and see what we can go from." start="00:00:25.574" video="mainVideo" id=subtitle]]
+[[!template text="Yesterday, I saw a lot of cool talks" start="00:00:27.920" video="mainVideo" id=subtitle]]
+[[!template text="and people were chatting about" start="00:00:30.240" video="mainVideo" id=subtitle]]
+[[!template text="how should you present? Should you do it this way or that way?" start="00:00:33.200" video="mainVideo" id=subtitle]]
+[[!template text="I thought maybe I should try a different way." start="00:00:37.200" video="mainVideo" id=subtitle]]
+[[!template text="But I'm talking about special blocks" start="00:00:39.931" video="mainVideo" id=subtitle]]
+[[!template text="and if I show you an Emacs, then I have to export" start="00:00:42.567" video="mainVideo" id=subtitle]]
+[[!template text="the HTML so you can see what it looks like" start="00:00:45.039" video="mainVideo" id=subtitle]]
+[[!template text="or export to a PDF so you can see what it looks like." start="00:00:47.840" video="mainVideo" id=subtitle]]
+[[!template text="So I ended up writing in org-reveal," start="00:00:51.920" video="mainVideo" id=subtitle]]
+[[!template text="and joyously, this just works." start="00:00:54.239" video="mainVideo" id=subtitle]]
+[[!template text="You can just see things here." start="00:00:58.960" video="mainVideo" id=subtitle]]
+[[!template text="I was worried that I'd have to take pictures" start="00:01:00.879" video="mainVideo" id=subtitle]]
+[[!template text="and then insert pings, so that was a delight." start="00:01:03.452" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay. Special blocks are these things like a center small quote." start="00:01:09.760" video="mainVideo" id=subtitle]]
+[[!template text="That's what a special block is," start="00:01:15.704" video="mainVideo" id=subtitle]]
+[[!template text="and with a bit of Lisp, we can make" start="00:01:17.280" video="mainVideo" id=subtitle]]
+[[!template text="special blocks and link types." start="00:01:19.733" video="mainVideo" id=subtitle]]
+[[!template text="Right. Using a single interface." start="00:01:22.741" video="mainVideo" id=subtitle]]
+[[!template text="The interface is going to be similar" start="00:01:24.799" video="mainVideo" id=subtitle]]
+[[!template text="to one many people are familiar with." start="00:01:27.344" video="mainVideo" id=subtitle]]
+[[!template text="In particular, Org Babel's src interface" start="00:01:29.281" video="mainVideo" id=subtitle]]
+[[!template text="as well as using global header arguments for link types." start="00:01:34.712" video="mainVideo" id=subtitle]]
+[[!template text="The idea is to write it once" start="00:01:37.840" video="mainVideo" id=subtitle]]
+[[!template text="and generate many different kinds." start="00:01:39.450" video="mainVideo" id=subtitle]]
+[[!template text="You write in Org markup and you can have HTML," start="00:01:41.200" video="mainVideo" id=subtitle]]
+[[!template text="you can have PDF, and joyously, org-reveal." start="00:01:45.213" video="mainVideo" id=subtitle]]
+[[!template text="That was an unexpected delight." start="00:01:49.767" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Here are a few that you'll just see" start="00:01:53.600" video="mainVideo" id=subtitle]]
+[[!template text="in this presentation." start="00:01:57.840" video="mainVideo" id=subtitle]]
+[[!template text="I won't show some of these link-only ones," start="00:02:01.759" video="mainVideo" id=subtitle]]
+[[!template text="but we'll see a few of these other ones" start="00:02:05.040" video="mainVideo" id=subtitle]]
+[[!template text="just to make the presentation look nice" start="00:02:06.799" video="mainVideo" id=subtitle]]
+[[!template text="So the presentation is really going to" start="00:02:09.500" video="mainVideo" id=subtitle]]
+[[!template text="present these blocks and the mechanism" start="00:02:11.520" video="mainVideo" id=subtitle]]
+[[!template text="at the same time." start="00:02:14.000" video="mainVideo" id=subtitle]]
+[[!template text="No HTML was written." start="00:02:15.120" video="mainVideo" id=subtitle]]
+[[!template text="Look, Ma! No HTML, just pure Org Mode," start="00:02:18.400" video="mainVideo" id=subtitle]]
+[[!template text="and you get all these beautiful boxes and things." start="00:02:21.280" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The motivation for this is..." start="00:02:25.840" video="mainVideo" id=subtitle]]
+[[!template text="you're online, you run into a blog," start="00:02:29.120" video="mainVideo" id=subtitle]]
+[[!template text="and you see something you like," start="00:02:31.200" video="mainVideo" id=subtitle]]
+[[!template text="and you're like, man," start="00:02:32.120" video="mainVideo" id=subtitle]]
+[[!template text="you know, I wish I could produce that." start="00:02:33.120" video="mainVideo" id=subtitle]]
+[[!template text="But you check, and the author wrote raw HTML." start="00:02:36.640" video="mainVideo" id=subtitle]]
+[[!template text="You know, #+HTML: everywhere." start="00:02:41.639" video="mainVideo" id=subtitle]]
+[[!template text="That's going to obscure your real content." start="00:02:44.239" video="mainVideo" id=subtitle]]
+[[!template text="It's going to be surrounded by all this" start="00:02:49.533" video="mainVideo" id=subtitle]]
+[[!template text="styling information. That's unfortunate." start="00:02:51.200" video="mainVideo" id=subtitle]]
+[[!template text="The author decides to use an Org macro." start="00:02:54.239" video="mainVideo" id=subtitle]]
+[[!template text="All right, a bit better," start="00:02:57.033" video="mainVideo" id=subtitle]]
+[[!template text="but then what if you decide," start="00:02:58.959" video="mainVideo" id=subtitle]]
+[[!template text="hey I want to make a PDF? Not great." start="00:03:00.333" video="mainVideo" id=subtitle]]
+[[!template text="And then the worst of all," start="00:03:04.667" video="mainVideo" id=subtitle]]
+[[!template text="the author doesn't give you the source," start="00:03:06.000" video="mainVideo" id=subtitle]]
+[[!template text="and then you have to view page source," start="00:03:07.840" video="mainVideo" id=subtitle]]
+[[!template text="and learn cascading style sheets," start="00:03:10.159" video="mainVideo" id=subtitle]]
+[[!template text="and sit in a corner and cry," start="00:03:14.239" video="mainVideo" id=subtitle]]
+[[!template text="and decide to do other things with your life." start="00:03:15.767" video="mainVideo" id=subtitle]]
+[[!template new="1" text="We want to give you Org users numerous styles" start="00:03:18.080" video="mainVideo" id=subtitle]]
+[[!template text="and an extensible mechanism to add more of these" start="00:03:22.640" video="mainVideo" id=subtitle]]
+[[!template text="aesthetically pleasing styles," start="00:03:27.200" video="mainVideo" id=subtitle]]
+[[!template text="to have really nice things" start="00:03:28.799" video="mainVideo" id=subtitle]]
+[[!template text="look one way in the HTML" start="00:03:31.200" video="mainVideo" id=subtitle]]
+[[!template text="and look almost the same way in the PDF" start="00:03:33.933" video="mainVideo" id=subtitle]]
+[[!template text="and other back ends." start="00:03:36.567" video="mainVideo" id=subtitle]]
+[[!template text="And if by having these newer ones," start="00:03:38.667" video="mainVideo" id=subtitle]]
+[[!template text="people might be encouraged to try making new ones," start="00:03:41.680" video="mainVideo" id=subtitle]]
+[[!template text="especially when the interface is not so difficult," start="00:03:45.519" video="mainVideo" id=subtitle]]
+[[!template text="that's the aim." start="00:03:49.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's have a real story to motivate this even more." start="00:03:54.159" video="mainVideo" id=subtitle]]
+[[!template text="Here's three friends. I hope I don't butcher their names," start="00:03:59.120" video="mainVideo" id=subtitle]]
+[[!template text="but these friends are called" start="00:04:03.533" video="mainVideo" id=subtitle]]
+[[!template text="Amin, Sacha, and Corwin. They're organizing a conference," start="00:04:04.640" video="mainVideo" id=subtitle]]
+[[!template text="EmacsConf 2020." start="00:04:08.720" video="mainVideo" id=subtitle]]
+[[!template text="So Sacha decides to write an Org file" start="00:04:12.080" video="mainVideo" id=subtitle]]
+[[!template text="and she would like some feedback." start="00:04:14.239" video="mainVideo" id=subtitle]]
+[[!template text="Okay. Just to make it clear, there's no..." start="00:04:16.479" video="mainVideo" id=subtitle]]
+[[!template text="just how easy this looks," start="00:04:19.840" video="mainVideo" id=subtitle]]
+[[!template text="let's look at the source for this block." start="00:04:22.960" video="mainVideo" id=subtitle]]
+[[!template text="Notice it's just the word &quot;green,&quot; then a colon," start="00:04:27.280" video="mainVideo" id=subtitle]]
+[[!template text="then Amin. No div style coloring," start="00:04:30.720" video="mainVideo" id=subtitle]]
+[[!template text="just green:Amin." start="00:04:37.333" video="mainVideo" id=subtitle]]
+[[!template text="A very pleasant Org markup." start="00:04:38.479" video="mainVideo" id=subtitle]]
+[[!template text="So that's quite nice. Put some bold around it." start="00:04:41.520" video="mainVideo" id=subtitle]]
+[[!template text="Not too difficult." start="00:04:44.960" video="mainVideo" id=subtitle]]
+[[!template text="Hopefully, this will be useful to other people as well." start="00:04:46.433" video="mainVideo" id=subtitle]]
+[[!template text="So what kind of feedback" start="00:04:49.900" video="mainVideo" id=subtitle]]
+[[!template text="would Sacha expect to get?" start="00:04:52.240" video="mainVideo" id=subtitle]]
+[[!template text="Maybe she would expect top-level remarks" start="00:04:55.233" video="mainVideo" id=subtitle]]
+[[!template text="visible in the export." start="00:04:59.120" video="mainVideo" id=subtitle]]
+[[!template text="When she makes an HTML, she can see right there a big block." start="00:05:00.833" video="mainVideo" id=subtitle]]
+[[!template text="Right. Maybe Amin will suggest to Sacha," start="00:05:04.400" video="mainVideo" id=subtitle]]
+[[!template text="please replace this part" start="00:05:09.533" video="mainVideo" id=subtitle]]
+[[!template text="with this other part" start="00:05:11.120" video="mainVideo" id=subtitle]]
+[[!template text="or replace this word" start="00:05:12.267" video="mainVideo" id=subtitle]]
+[[!template text="with this other word." start="00:05:13.333" video="mainVideo" id=subtitle]]
+[[!template text="This is not really possible" start="00:05:14.639" video="mainVideo" id=subtitle]]
+[[!template text="with raw HTML or with even LaTeX." start="00:05:16.960" video="mainVideo" id=subtitle]]
+[[!template text="You'd have to have multiple arguments:" start="00:05:21.919" video="mainVideo" id=subtitle]]
+[[!template text="the first argument, and then" start="00:05:24.000" video="mainVideo" id=subtitle]]
+[[!template text="the replacement argument. It's a bit clunky." start="00:05:25.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But with our setup, you just write some text," start="00:05:28.800" video="mainVideo" id=subtitle]]
+[[!template text="write #+replace_with" start="00:05:32.080" video="mainVideo" id=subtitle]]
+[[!template text="and then write more text, and you're good to go." start="00:05:34.367" video="mainVideo" id=subtitle]]
+[[!template text="Normal Org markup." start="00:05:36.240" video="mainVideo" id=subtitle]]
+[[!template text="Everyone speaks different languages." start="00:05:39.440" video="mainVideo" id=subtitle]]
+[[!template text="Maybe they want to use one word," start="00:05:40.720" video="mainVideo" id=subtitle]]
+[[!template text="or they're arguing about" start="00:05:43.833" video="mainVideo" id=subtitle]]
+[[!template text="whether we talk about frames or windows," start="00:05:45.919" video="mainVideo" id=subtitle]]
+[[!template text="so maybe they want to have some translations." start="00:05:48.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So there are different kinds of feedback." start="00:05:50.560" video="mainVideo" id=subtitle]]
+[[!template text="Let's take an example." start="00:05:53.433" video="mainVideo" id=subtitle]]
+[[!template text="Look at what they are." start="00:05:55.360" video="mainVideo" id=subtitle]]
+[[!template text="For example, Sacha might write" start="00:05:59.360" video="mainVideo" id=subtitle]]
+[[!template text="this Org Mode right here," start="00:06:02.560" video="mainVideo" id=subtitle]]
+[[!template text="and then in her HTML exports, you might see this," start="00:06:06.160" video="mainVideo" id=subtitle]]
+[[!template text="and her feedback might look really nicely" start="00:06:09.759" video="mainVideo" id=subtitle]]
+[[!template text="from anyone who says" start="00:06:12.733" video="mainVideo" id=subtitle]]
+[[!template text="let's do some Lisp instead of mathematics." start="00:06:14.560" video="mainVideo" id=subtitle]]
+[[!template text="Let's just do some Lisp." start="00:06:17.400" video="mainVideo" id=subtitle]]
+[[!template text="Corwin says, let's not be so silly." start="00:06:18.560" video="mainVideo" id=subtitle]]
+[[!template text="Let's just say 9 a.m. and move on." start="00:06:22.479" video="mainVideo" id=subtitle]]
+[[!template text="Amin likes to export to PDF," start="00:06:28.080" video="mainVideo" id=subtitle]]
+[[!template text="and so he writes his top-level remarks using LaTeX." start="00:06:31.360" video="mainVideo" id=subtitle]]
+[[!template text="That's how. To get this square" start="00:06:34.333" video="mainVideo" id=subtitle]]
+[[!template text="Amin: please change whatever," start="00:06:36.900" video="mainVideo" id=subtitle]]
+[[!template text="he might write like this: #+latex:." start="00:06:38.960" video="mainVideo" id=subtitle]]
+[[!template text="But then Sacha only exports to HTML, for example," start="00:06:43.120" video="mainVideo" id=subtitle]]
+[[!template text="so she doesn't look at the PDF," start="00:06:50.880" video="mainVideo" id=subtitle]]
+[[!template text="and she may not see his top-level feedback" start="00:06:54.880" video="mainVideo" id=subtitle]]
+[[!template text="with those nice brackets and and bold." start="00:06:57.867" video="mainVideo" id=subtitle]]
+[[!template text="She might think everything's good." start="00:07:00.667" video="mainVideo" id=subtitle]]
+[[!template text="That can be a bit disastrous." start="00:07:03.120" video="mainVideo" id=subtitle]]
+[[!template text="So maybe Sacha will then" start="00:07:06.160" video="mainVideo" id=subtitle]]
+[[!template text="make some of her own feedback." start="00:07:08.600" video="mainVideo" id=subtitle]]
+[[!template text="To produce it, she might write" start="00:07:13.199" video="mainVideo" id=subtitle]]
+[[!template text="HTML commands, #+html: to get that." start="00:07:16.560" video="mainVideo" id=subtitle]]
+[[!template text="But then Amin will make a PDF," start="00:07:21.680" video="mainVideo" id=subtitle]]
+[[!template text="and this won't stick out." start="00:07:24.100" video="mainVideo" id=subtitle]]
+[[!template text="So he might think everything's okay," start="00:07:25.680" video="mainVideo" id=subtitle]]
+[[!template text="even though it's not." start="00:07:28.367" video="mainVideo" id=subtitle]]
+[[!template text="Then Corwin actually decides," start="00:07:30.160" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Hey, let me read the exported result" start="00:07:33.100" video="mainVideo" id=subtitle]]
+[[!template text="and there's all those feedback from two people" start="00:07:35.900" video="mainVideo" id=subtitle]]
+[[!template text="who haven't read anything, because maybe they were in a rush," start="00:07:38.867" video="mainVideo" id=subtitle]]
+[[!template text="and didn't see the top-level feedback." start="00:07:42.633" video="mainVideo" id=subtitle]]
+[[!template text="So they agree. &quot;Hey, let's have a uniform Org interface that exports" start="00:07:45.167" video="mainVideo" id=subtitle]]
+[[!template text="to both HTML and PDF." start="00:07:50.000" video="mainVideo" id=subtitle]]
+[[!template text="Make both of us happy.&quot;" start="00:07:52.567" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay. So they decide to use Org special blocks." start="00:07:54.080" video="mainVideo" id=subtitle]]
+[[!template text="Right. To set this up," start="00:07:58.160" video="mainVideo" id=subtitle]]
+[[!template text="they need to read a little bit of Lisp," start="00:08:01.300" video="mainVideo" id=subtitle]]
+[[!template text="hooks, advice, macros to get all of this set up," start="00:08:04.400" video="mainVideo" id=subtitle]]
+[[!template text="and then they'll use Org as the main interface." start="00:08:08.879" video="mainVideo" id=subtitle]]
+[[!template text="It's a lot of work, but it's worth it, right? maybe?" start="00:08:12.319" video="mainVideo" id=subtitle]]
+[[!template text="But then Corwin's a bit terse." start="00:08:16.479" video="mainVideo" id=subtitle]]
+[[!template text="Corwin maybe doesn't want to write using blocks." start="00:08:19.759" video="mainVideo" id=subtitle]]
+[[!template text="He thinks they're overkill." start="00:08:24.333" video="mainVideo" id=subtitle]]
+[[!template text="Sacha wants HTML, and Amin wants PDF, and Corwin wants org-reveal." start="00:08:26.080" video="mainVideo" id=subtitle]]
+[[!template text="So now they have to reformat all their code." start="00:08:32.560" video="mainVideo" id=subtitle]]
+[[!template text="And then they need to use org link types" start="00:08:35.533" video="mainVideo" id=subtitle]]
+[[!template text="to reduce the overkill," start="00:08:36.900" video="mainVideo" id=subtitle]]
+[[!template text="so they can try to avoid duplication" start="00:08:38.867" video="mainVideo" id=subtitle]]
+[[!template text="by factoring things out into self-contained functions." start="00:08:41.367" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But now, to set up our links," start="00:08:46.800" video="mainVideo" id=subtitle]]
+[[!template text="we'll have to learn a new interface, org setup link." start="00:08:50.320" video="mainVideo" id=subtitle]]
+[[!template text="Learn a little bit about fonts, follow links, export handlers..." start="00:08:55.467" video="mainVideo" id=subtitle]]
+[[!template text="It's so much. That's so much. But then," start="00:09:02.160" video="mainVideo" id=subtitle]]
+[[!template text="the friends, they learn a lot." start="00:09:05.040" video="mainVideo" id=subtitle]]
+[[!template text="They learn about defun." start="00:09:06.800" video="mainVideo" id=subtitle]]
+[[!template text="So these words are red." start="00:09:08.399" video="mainVideo" id=subtitle]]
+[[!template text="You get a little explanation." start="00:09:11.120" video="mainVideo" id=subtitle]]
+[[!template text="I think it's a bit too small for anyone to read." start="00:09:12.185" video="mainVideo" id=subtitle]]
+[[!template text="This is Lisp documentation for defun." start="00:09:14.320" video="mainVideo" id=subtitle]]
+[[!template text="advice-add. There's some Lisp documentation." start="00:09:18.000" video="mainVideo" id=subtitle]]
+[[!template text="They learn about destructuring -let." start="00:09:21.600" video="mainVideo" id=subtitle]]
+[[!template text="This is from the dash library." start="00:09:23.600" video="mainVideo" id=subtitle]]
+[[!template text="Here's all that glorious," start="00:09:25.279" video="mainVideo" id=subtitle]]
+[[!template text="glorious documentation with examples." start="00:09:26.959" video="mainVideo" id=subtitle]]
+[[!template text="Sorry. I like that." start="00:09:28.800" video="mainVideo" id=subtitle]]
+[[!template new="1" text="They might make an ad-hoc mechanism" start="00:09:30.300" video="mainVideo" id=subtitle]]
+[[!template text="to simulate arguments for special blocks," start="00:09:32.467" video="mainVideo" id=subtitle]]
+[[!template text="so something maybe called extract-arguments," start="00:09:35.400" video="mainVideo" id=subtitle]]
+[[!template text="and then, of course, to make new link types," start="00:09:38.500" video="mainVideo" id=subtitle]]
+[[!template text="they have to learn about" start="00:09:41.533" video="mainVideo" id=subtitle]]
+[[!template text="org-link-set-parameters and its numerous bits and pieces." start="00:09:42.480" video="mainVideo" id=subtitle]]
+[[!template text="Let's close all these ones down." start="00:09:49.920" video="mainVideo" id=subtitle]]
+[[!template text="Of course they also need to be comfortable" start="00:09:53.600" video="mainVideo" id=subtitle]]
+[[!template text="with loops and maps and matching and string functions." start="00:09:55.800" video="mainVideo" id=subtitle]]
+[[!template text="So it's a bit of a pain." start="00:09:59.920" video="mainVideo" id=subtitle]]
+[[!template text="It's probably not worth it." start="00:10:03.360" video="mainVideo" id=subtitle]]
+[[!template text="Maybe I'll just rush things quickly," start="00:10:05.839" video="mainVideo" id=subtitle]]
+[[!template text="or do it ad-hoc..." start="00:10:07.767" video="mainVideo" id=subtitle]]
+[[!template text="We have things to do." start="00:10:10.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But maybe the squad wants to have a modular and unified interface" start="00:10:13.680" video="mainVideo" id=subtitle]]
+[[!template text="so everyone's comfortable with defun to define a function" start="00:10:19.367" video="mainVideo" id=subtitle]]
+[[!template text="and they say, &quot;It would be nice if we could just define simultaneously" start="00:10:23.700" video="mainVideo" id=subtitle]]
+[[!template text="both a block and the link type.&quot;" start="00:10:29.440" video="mainVideo" id=subtitle]]
+[[!template text="That way, we have a single interface" start="00:10:32.959" video="mainVideo" id=subtitle]]
+[[!template text="Org mode, for these things." start="00:10:36.000" video="mainVideo" id=subtitle]]
+[[!template text="It would be nice if it was modular." start="00:10:37.867" video="mainVideo" id=subtitle]]
+[[!template text="If I defined a one kind of block and you defined another," start="00:10:39.767" video="mainVideo" id=subtitle]]
+[[!template text="we could compose them," start="00:10:44.633" video="mainVideo" id=subtitle]]
+[[!template text="then get a nice bigger block, like LEGO." start="00:10:45.519" video="mainVideo" id=subtitle]]
+[[!template text="That would be nice. Building blocks." start="00:10:49.360" video="mainVideo" id=subtitle]]
+[[!template text="This is what we have come up with, called defblock." start="00:10:52.320" video="mainVideo" id=subtitle]]
+[[!template text="It also has a long documentation string containing examples and things." start="00:10:56.240" video="mainVideo" id=subtitle]]
+[[!template text="So that way, it can try to be useful." start="00:11:01.760" video="mainVideo" id=subtitle]]
+[[!template text="Let's look at a solution to these friends' trilemma." start="00:11:04.800" video="mainVideo" id=subtitle]]
+[[!template text="So here's a way to define a block." start="00:11:10.880" video="mainVideo" id=subtitle]]
+[[!template text="It doesn't look that difficult, but this is how they can define a block" start="00:11:14.320" video="mainVideo" id=subtitle]]
+[[!template text="for their top-level feedback." start="00:11:22.320" video="mainVideo" id=subtitle]]
+[[!template text="Let's look at the three main parts together." start="00:11:25.920" video="mainVideo" id=subtitle]]
+[[!template text="It's not that difficult, I hope." start="00:11:28.959" video="mainVideo" id=subtitle]]
+[[!template text="Just six lines, and that's including a documentation string," start="00:11:31.233" video="mainVideo" id=subtitle]]
+[[!template text="newlines and things." start="00:11:35.300" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So in line 1, we define the block just like you define a function." start="00:11:37.633" video="mainVideo" id=subtitle]]
+[[!template text="We define a block." start="00:11:43.300" video="mainVideo" id=subtitle]]
+[[!template text="The block name is going to be called &quot;feedback.&quot;" start="00:11:44.880" video="mainVideo" id=subtitle]]
+[[!template text="It has an author, &quot;who.&quot;" start="00:11:47.433" video="mainVideo" id=subtitle]]
+[[!template text="The author has no default value." start="00:11:49.680" video="mainVideo" id=subtitle]]
+[[!template text="It has a color, and the color has a default value of red." start="00:11:54.133" video="mainVideo" id=subtitle]]
+[[!template text="So just as when you define functions," start="00:11:57.760" video="mainVideo" id=subtitle]]
+[[!template text="you start by define or defblock," start="00:12:01.680" video="mainVideo" id=subtitle]]
+[[!template text="then the name, some mandatory argument, and some optional arguments." start="00:12:06.233" video="mainVideo" id=subtitle]]
+[[!template text="Then the next stage is definition. Documentation." start="00:12:13.440" video="mainVideo" id=subtitle]]
+[[!template text="The people who use this," start="00:12:18.480" video="mainVideo" id=subtitle]]
+[[!template text="which are future you or future me," start="00:12:20.133" video="mainVideo" id=subtitle]]
+[[!template text="might want to know what this is." start="00:12:22.880" video="mainVideo" id=subtitle]]
+[[!template text="So let's get to document this." start="00:12:25.519" video="mainVideo" id=subtitle]]
+[[!template text="For Corwin, who might want to use tooltips..." start="00:12:27.839" video="mainVideo" id=subtitle]]
+[[!template text="When Corwin writes feedback in Emacs, they'll see a nice little tooltip," start="00:12:32.079" video="mainVideo" id=subtitle]]
+[[!template text="and the tooltip will have" start="00:12:37.120" video="mainVideo" id=subtitle]]
+[[!template text="this documentation string." start="00:12:38.639" video="mainVideo" id=subtitle]]
+[[!template text="That'll be nice." start="00:12:41.279" video="mainVideo" id=subtitle]]
+[[!template text="And then here's the third part." start="00:12:43.279" video="mainVideo" id=subtitle]]
+[[!template text="The last three lines are not so difficult." start="00:12:45.980" video="mainVideo" id=subtitle]]
+[[!template text="If the backend is HTML," start="00:12:48.067" video="mainVideo" id=subtitle]]
+[[!template text="please use this template string." start="00:12:52.800" video="mainVideo" id=subtitle]]
+[[!template text="Otherwise, use the other string." start="00:12:55.360" video="mainVideo" id=subtitle]]
+[[!template text="For each of these string markers," start="00:12:57.440" video="mainVideo" id=subtitle]]
+[[!template text="please put in the color, who wrote it, and then the contents" start="00:13:01.279" video="mainVideo" id=subtitle]]
+[[!template text="of the special block or the link type." start="00:13:04.959" video="mainVideo" id=subtitle]]
+[[!template text="So that's pretty neat. Not so difficult." start="00:13:08.160" video="mainVideo" id=subtitle]]
+[[!template text="I thought that was kind of cool," start="00:13:11.600" video="mainVideo" id=subtitle]]
+[[!template text="then noticed it's anaphoric." start="00:13:14.639" video="mainVideo" id=subtitle]]
+[[!template text="This defblock gives you two new names." start="00:13:16.600" video="mainVideo" id=subtitle]]
+[[!template text="It gives you a name called contents," start="00:13:21.033" video="mainVideo" id=subtitle]]
+[[!template text="and it gives you a name called backend." start="00:13:23.433" video="mainVideo" id=subtitle]]
+[[!template text="So even if you're writing a defblock" start="00:13:26.480" video="mainVideo" id=subtitle]]
+[[!template text="and you intend it to be used only for links..." start="00:13:29.733" video="mainVideo" id=subtitle]]
+[[!template text="Like these colors, for example." start="00:13:32.560" video="mainVideo" id=subtitle]]
+[[!template text="These colors were defined using defblock." start="00:13:35.440" video="mainVideo" id=subtitle]]
+[[!template text="I used them as links right here." start="00:13:38.399" video="mainVideo" id=subtitle]]
+[[!template text="You don't need to worry" start="00:13:41.279" video="mainVideo" id=subtitle]]
+[[!template text="where does the text come from in the link." start="00:13:43.360" video="mainVideo" id=subtitle]]
+[[!template text="If I say &quot;red:Bob,&quot; is it Bob?" start="00:13:45.300" video="mainVideo" id=subtitle]]
+[[!template text="Or if I put a description, is it the description?" start="00:13:48.959" video="mainVideo" id=subtitle]]
+[[!template text="So it's whatever is available will" start="00:13:52.000" video="mainVideo" id=subtitle]]
+[[!template text="become the value of contents." start="00:13:54.000" video="mainVideo" id=subtitle]]
+[[!template text="If you're really interested" start="00:13:56.720" video="mainVideo" id=subtitle]]
+[[!template text="and you want to do some intricate stuff," start="00:13:59.199" video="mainVideo" id=subtitle]]
+[[!template text="defblock also gives you something called raw-contents," start="00:14:02.433" video="mainVideo" id=subtitle]]
+[[!template text="if you really want to touch" start="00:14:06.933" video="mainVideo" id=subtitle]]
+[[!template text="the raw contents with all of the Org markups still there." start="00:14:08.633" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's see how everyone can communicate amongst themselves" start="00:14:12.639" video="mainVideo" id=subtitle]]
+[[!template text="using this new interface." start="00:14:19.440" video="mainVideo" id=subtitle]]
+[[!template text="So, Sacha speculates and she... How does" start="00:14:22.480" video="mainVideo" id=subtitle]]
+[[!template text="she speculate for her Org HTML?" start="00:14:26.000" video="mainVideo" id=subtitle]]
+[[!template text="She might just write. Hey look at that, no HTML, nice." start="00:14:28.399" video="mainVideo" id=subtitle]]
+[[!template text="Amin wants to have some green," start="00:14:34.800" video="mainVideo" id=subtitle]]
+[[!template text="and so he just says, hey here's some color green." start="00:14:36.833" video="mainVideo" id=subtitle]]
+[[!template text="There you go. It looks almost the same." start="00:14:39.600" video="mainVideo" id=subtitle]]
+[[!template text="Notice that the main argument is right here." start="00:14:42.959" video="mainVideo" id=subtitle]]
+[[!template text="defblock took an author," start="00:14:48.267" video="mainVideo" id=subtitle]]
+[[!template text="and here's the author again." start="00:14:49.680" video="mainVideo" id=subtitle]]
+[[!template text="And now the optional argument" start="00:14:51.333" video="mainVideo" id=subtitle]]
+[[!template text="uses the org babel source interface" start="00:14:53.920" video="mainVideo" id=subtitle]]
+[[!template text="You just say :, then a key, and then the argument. Quite nice." start="00:14:57.007" video="mainVideo" id=subtitle]]
+[[!template text="Corwin doesn't want to use blocks. It's a bit of an overkill." start="00:15:02.867" video="mainVideo" id=subtitle]]
+[[!template text="He can just write a link." start="00:15:07.920" video="mainVideo" id=subtitle]]
+[[!template text="So the main argument is now the label of the link," start="00:15:12.959" video="mainVideo" id=subtitle]]
+[[!template text="and the description of the link is the contents of the feedback." start="00:15:17.440" video="mainVideo" id=subtitle]]
+[[!template text="So that was quite nice." start="00:15:23.667" video="mainVideo" id=subtitle]]
+[[!template text="So it looks like everyone uses the same interface on the left" start="00:15:25.680" video="mainVideo" id=subtitle]]
+[[!template text="and can have varying outputs." start="00:15:29.360" video="mainVideo" id=subtitle]]
+[[!template text="I think it looks quite nice," start="00:15:32.800" video="mainVideo" id=subtitle]]
+[[!template text="and I hope you do too." start="00:15:34.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There's a few more." start="00:15:36.639" video="mainVideo" id=subtitle]]
+[[!template text="Maybe, as you saw in some previous ones," start="00:15:38.800" video="mainVideo" id=subtitle]]
+[[!template text="we had text side beside side," start="00:15:41.800" video="mainVideo" id=subtitle]]
+[[!template text="or we folded some regions away." start="00:15:43.920" video="mainVideo" id=subtitle]]
+[[!template text="We put some things in pretty boxes." start="00:15:47.440" video="mainVideo" id=subtitle]]
+[[!template text="We had some spoilers at the very beginning that we hid some text." start="00:15:50.959" video="mainVideo" id=subtitle]]
+[[!template text="We demoed some texts. Here's some Org and here's what it looks like," start="00:15:57.120" video="mainVideo" id=subtitle]]
+[[!template text="and most importantly, they compose." start="00:16:01.680" video="mainVideo" id=subtitle]]
+[[!template text="There's a a macro called thread-block." start="00:16:05.199" video="mainVideo" id=subtitle]]
+[[!template text="thread-block call, and it lets you thread the contents" start="00:16:12.639" video="mainVideo" id=subtitle]]
+[[!template text="through a number of blocks," start="00:16:17.000" video="mainVideo" id=subtitle]]
+[[!template text="treating them as if they were functions." start="00:16:18.000" video="mainVideo" id=subtitle]]
+[[!template text="So, really, you can think of a block" start="00:16:20.639" video="mainVideo" id=subtitle]]
+[[!template text="as a string-valued function." start="00:16:23.680" video="mainVideo" id=subtitle]]
+[[!template text="That's pretty neat, I think." start="00:16:25.567" video="mainVideo" id=subtitle]]
+[[!template text="Thank you for listening." start="00:16:28.533" video="mainVideo" id=subtitle]]
+[[!template text="I hope you've enjoyed this little" start="00:16:31.759" video="mainVideo" id=subtitle]]
+[[!template text="happy fun time with the Emacs and friends." start="00:16:34.880" video="mainVideo" id=subtitle]]
+[[!template text="I'll happily answer questions right now." start="00:16:38.160" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Someone says: &quot;Why did you put optional arguments" start="00:16:45.360" video="mainVideo" id=subtitle]]
+[[!template text="in a separate list" start="00:16:49.467" video="mainVideo" id=subtitle]]
+[[!template text="rather than using cl-style argument lists?&quot;" start="00:16:50.480" video="mainVideo" id=subtitle]]
+[[!template text="So that's a very good question," start="00:16:54.560" video="mainVideo" id=subtitle]]
+[[!template text="and I will answer that" start="00:16:58.399" video="mainVideo" id=subtitle]]
+[[!template text="by showing you a more involved definition of feedback." start="00:17:00.000" video="mainVideo" id=subtitle]]
+[[!template text="Let's look at a more involved one right here." start="00:17:05.467" video="mainVideo" id=subtitle]]
+[[!template text="So, for example, this one is called rremark." start="00:17:14.567" video="mainVideo" id=subtitle]]
+[[!template text="Please let me know if my text is not sufficiently big." start="00:17:19.280" video="mainVideo" id=subtitle]]
+[[!template text="Here is why we have two arguments." start="00:17:23.439" video="mainVideo" id=subtitle]]
+[[!template text="That takes two arguments instead of one" start="00:17:28.033" video="mainVideo" id=subtitle]]
+[[!template text="for its argument list." start="00:17:30.720" video="mainVideo" id=subtitle]]
+[[!template text="You have def block," start="00:17:33.360" video="mainVideo" id=subtitle]]
+[[!template text="then you have the name," start="00:17:34.799" video="mainVideo" id=subtitle]]
+[[!template text="then you have the first argument list" start="00:17:36.000" video="mainVideo" id=subtitle]]
+[[!template text="and the second argument list." start="00:17:40.467" video="mainVideo" id=subtitle]]
+[[!template text="The first argument list" start="00:17:42.880" video="mainVideo" id=subtitle]]
+[[!template text="takes the text right after the begin." start="00:17:46.080" video="mainVideo" id=subtitle]]
+[[!template text="The text right after the begin is the main argument." start="00:17:49.280" video="mainVideo" id=subtitle]]
+[[!template text="And then the remaining key-value pairs are in the second argument list." start="00:17:53.000" video="mainVideo" id=subtitle]]
+[[!template text="Now the reason we have two is because" start="00:18:00.320" video="mainVideo" id=subtitle]]
+[[!template text="in order to streamline the interface to account for both special blocks" start="00:18:03.280" video="mainVideo" id=subtitle]]
+[[!template text="and Org link types, what we do is we say," start="00:18:08.880" video="mainVideo" id=subtitle]]
+[[!template text="in the first argument list, you can give a name to the first argument," start="00:18:13.360" video="mainVideo" id=subtitle]]
+[[!template text="give it a default value," start="00:18:18.000" video="mainVideo" id=subtitle]]
+[[!template text="and anything else you provide will become part of the link information." start="00:18:19.633" video="mainVideo" id=subtitle]]
+[[!template text="For example, this link," start="00:18:28.800" video="mainVideo" id=subtitle]]
+[[!template text="we decided to make its face angry red." start="00:18:30.861" video="mainVideo" id=subtitle]]
+[[!template text="You might want to give other features to links." start="00:18:32.833" video="mainVideo" id=subtitle]]
+[[!template text="So we're trying to streamline the interface" start="00:18:36.433" video="mainVideo" id=subtitle]]
+[[!template text="for both special blocks and Org link types," start="00:18:39.100" video="mainVideo" id=subtitle]]
+[[!template text="and we thought this way was quite nice." start="00:18:41.733" video="mainVideo" id=subtitle]]
+[[!template text="That was the main reason." start="00:18:46.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Someone asks--" start="00:18:47.500" video="mainVideo" id=subtitle]]
+[[!template text="if you have follow-ups, please ask--" start="00:18:52.480" video="mainVideo" id=subtitle]]
+[[!template text="Someone asks, &quot;Do you intend to try to" start="00:18:55.039" video="mainVideo" id=subtitle]]
+[[!template text="upstream this amazing work into Org?&quot;" start="00:18:57.600" video="mainVideo" id=subtitle]]
+[[!template text="Well, I'm glad you like it." start="00:19:00.559" video="mainVideo" id=subtitle]]
+[[!template text="I don't know how to upstream," start="00:19:02.300" video="mainVideo" id=subtitle]]
+[[!template text="but I will look into it," start="00:19:04.559" video="mainVideo" id=subtitle]]
+[[!template text="and any advice or guidance would be much appreciated." start="00:19:06.400" video="mainVideo" id=subtitle]]
+[[!template text="Lisp is awesome. Just as defun is a macro," start="00:19:11.840" video="mainVideo" id=subtitle]]
+[[!template text="defblock is a macro, and then" start="00:19:15.267" video="mainVideo" id=subtitle]]
+[[!template text="source blocks are awesome." start="00:19:17.120" video="mainVideo" id=subtitle]]
+[[!template text="Now maybe we can have arguments in special blocks," start="00:19:20.240" video="mainVideo" id=subtitle]]
+[[!template text="and motivate and encourage more people to learn Lisp." start="00:19:22.467" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So another person asks," start="00:19:28.799" video="mainVideo" id=subtitle]]
+[[!template text="&quot;What is used to produce colorful" start="00:19:32.559" video="mainVideo" id=subtitle]]
+[[!template text="boxes around the cursor?&quot;" start="00:19:35.280" video="mainVideo" id=subtitle]]
+[[!template text="I'm not quite sure if you're asking..." start="00:19:38.559" video="mainVideo" id=subtitle]]
+[[!template text="Are you talking about my cursor right here," start="00:19:40.400" video="mainVideo" id=subtitle]]
+[[!template text="or are you talking about in the slide?" start="00:19:42.559" video="mainVideo" id=subtitle]]
+[[!template text="So this cursor is some application called Streambrush," start="00:19:48.400" video="mainVideo" id=subtitle]]
+[[!template text="that I had to purchase." start="00:19:53.767" video="mainVideo" id=subtitle]]
+[[!template text="Unfortunately, I could not find a a suitable free one." start="00:19:55.440" video="mainVideo" id=subtitle]]
+[[!template text="The blocks... I can demonstrate some Emacs Lisp." start="00:19:59.039" video="mainVideo" id=subtitle]]
+[[!template text="I can open up my Emacs, if people like," start="00:20:03.067" video="mainVideo" id=subtitle]]
+[[!template text="and we can try some things out." start="00:20:04.467" video="mainVideo" id=subtitle]]
+[[!template text="Happy to do that." start="00:20:06.320" video="mainVideo" id=subtitle]]
+[[!template text="You're welcome." start="00:20:09.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Someone asks a side question about org-reveal: &quot;How do you get" start="00:20:10.133" video="mainVideo" id=subtitle]]
+[[!template text="bespoke or multiple-column layouts" start="00:20:15.520" video="mainVideo" id=subtitle]]
+[[!template text="without using HTML?&quot;" start="00:20:17.440" video="mainVideo" id=subtitle]]
+[[!template text="Excellent question. That's what we do." start="00:20:19.120" video="mainVideo" id=subtitle]]
+[[!template text="That's what this project is about." start="00:20:22.559" video="mainVideo" id=subtitle]]
+[[!template text="So it's not org-reveal," start="00:20:25.533" video="mainVideo" id=subtitle]]
+[[!template text="it's our fancy parallel block." start="00:20:27.000" video="mainVideo" id=subtitle]]
+[[!template text="So we have this thing. You say, #+begin_parallel." start="00:20:30.267" video="mainVideo" id=subtitle]]
+[[!template text="You say how many columns you would like." start="00:20:33.440" video="mainVideo" id=subtitle]]
+[[!template text="Do you want a bar or not?" start="00:20:35.679" video="mainVideo" id=subtitle]]
+[[!template text="And then you write some text," start="00:20:37.967" video="mainVideo" id=subtitle]]
+[[!template text="and then you get some text, and according with the bar or not." start="00:20:39.679" video="mainVideo" id=subtitle]]
+[[!template text="That's how we achieve that in our slides." start="00:20:44.400" video="mainVideo" id=subtitle]]
+[[!template text="I'm not quite sure where this was." start="00:20:47.520" video="mainVideo" id=subtitle]]
+[[!template text="Somewhere here, I think." start="00:20:52.880" video="mainVideo" id=subtitle]]
+[[!template text="Let me try to find this for you." start="00:20:59.520" video="mainVideo" id=subtitle]]
+[[!template text="I can't seem to find where the parallel blocks were. Apologies." start="00:21:06.240" video="mainVideo" id=subtitle]]
+[[!template text="Let's move on to the next question, I suppose." start="00:21:10.433" video="mainVideo" id=subtitle]]
+[[!template text="I'm pretty sure they're here. Ah, there they are." start="00:21:15.039" video="mainVideo" id=subtitle]]
+[[!template text="So these were just instances of using" start="00:21:18.400" video="mainVideo" id=subtitle]]
+[[!template text="the parallel block, and it makes things parallel." start="00:21:22.640" video="mainVideo" id=subtitle]]
+[[!template text="So that's quite nice." start="00:21:26.480" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Another person asks," start="00:21:27.633" video="mainVideo" id=subtitle]]
+[[!template text="&quot;How does this relate to pandoc," start="00:21:33.360" video="mainVideo" id=subtitle]]
+[[!template text="which is used for converting between markup formats?&quot;" start="00:21:37.840" video="mainVideo" id=subtitle]]
+[[!template text="So all we're doing is we're saying," start="00:21:40.960" video="mainVideo" id=subtitle]]
+[[!template text="hey, please write Org because Org is just fantastic," start="00:21:43.919" video="mainVideo" id=subtitle]]
+[[!template text="and we love it, and it's the dream," start="00:21:47.679" video="mainVideo" id=subtitle]]
+[[!template text="and if you would like to view things" start="00:21:49.267" video="mainVideo" id=subtitle]]
+[[!template text="in HTML, or in org-reveal, or in PDF," start="00:21:51.760" video="mainVideo" id=subtitle]]
+[[!template text="that's up to the user." start="00:21:55.900" video="mainVideo" id=subtitle]]
+[[!template text="Made it too small now. So here is an example." start="00:22:02.320" video="mainVideo" id=subtitle]]
+[[!template text="Here's how parallel is implemented," start="00:22:06.080" video="mainVideo" id=subtitle]]
+[[!template text="just as a quick example, not too long." start="00:22:10.240" video="mainVideo" id=subtitle]]
+[[!template text="About half of the implementation is documentation," start="00:22:14.320" video="mainVideo" id=subtitle]]
+[[!template text="so, hopefully, that speaks for for how useful this feature is." start="00:22:17.800" video="mainVideo" id=subtitle]]
+[[!template text="We decide if there's a rule or not." start="00:22:22.720" video="mainVideo" id=subtitle]]
+[[!template text="We look for the column break." start="00:22:25.280" video="mainVideo" id=subtitle]]
+[[!template text="Here we're looking at the backend." start="00:22:28.080" video="mainVideo" id=subtitle]]
+[[!template text="If the backend is LaTeX," start="00:22:30.600" video="mainVideo" id=subtitle]]
+[[!template text="please use this incantation" start="00:22:31.840" video="mainVideo" id=subtitle]]
+[[!template text="with multicolumns, minipages, what have you." start="00:22:34.133" video="mainVideo" id=subtitle]]
+[[!template text="If the backend is something else, please do this:" start="00:22:37.679" video="mainVideo" id=subtitle]]
+[[!template text="div, style and other gibberish that we don't really want to look at." start="00:22:41.600" video="mainVideo" id=subtitle]]
+[[!template text="Pandoc works from Org," start="00:22:48.080" video="mainVideo" id=subtitle]]
+[[!template text="so it might not work directly," start="00:22:51.760" video="mainVideo" id=subtitle]]
+[[!template text="since our interface... The way we set it up is: when you try to export," start="00:22:53.633" video="mainVideo" id=subtitle]]
+[[!template text="we hook in and we do a bunch of pre-processing," start="00:22:59.679" video="mainVideo" id=subtitle]]
+[[!template text="so this defblock is a string-valued function." start="00:23:03.039" video="mainVideo" id=subtitle]]
+[[!template text="Whenever we see these #+begin_parallel when you do an export," start="00:23:07.440" video="mainVideo" id=subtitle]]
+[[!template text="I tell Emacs, hold up, look for those #+begin_parallels, please." start="00:23:13.919" video="mainVideo" id=subtitle]]
+[[!template text="Oh, you found them? Grab that text." start="00:23:17.767" video="mainVideo" id=subtitle]]
+[[!template text="You grabbed it. Great." start="00:23:20.320" video="mainVideo" id=subtitle]]
+[[!template text="Now please apply this person's function" start="00:23:21.533" video="mainVideo" id=subtitle]]
+[[!template text="onto that text, and splice in the result." start="00:23:24.080" video="mainVideo" id=subtitle]]
+[[!template text="So when you export, we're performing" start="00:23:27.120" video="mainVideo" id=subtitle]]
+[[!template text="arbitrary computations on your text." start="00:23:30.400" video="mainVideo" id=subtitle]]
+[[!template text="Some people might not find that comforting," start="00:23:35.120" video="mainVideo" id=subtitle]]
+[[!template text="to have arbitrary computations happening." start="00:23:39.633" video="mainVideo" id=subtitle]]
+[[!template text="In this article, there's a few where" start="00:23:43.039" video="mainVideo" id=subtitle]]
+[[!template text="we change your text upon export." start="00:23:45.039" video="mainVideo" id=subtitle]]
+[[!template text="We translate it, we do other things to it." start="00:23:47.167" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So someone says, &quot;If you export to LaTeX, to PDF," start="00:23:51.760" video="mainVideo" id=subtitle]]
+[[!template text="does that work well with Beamer as well" start="00:23:56.500" video="mainVideo" id=subtitle]]
+[[!template text="to create slides with columns?&quot;" start="00:23:58.640" video="mainVideo" id=subtitle]]
+[[!template text="I made a bunch of these changes" start="00:24:05.200" video="mainVideo" id=subtitle]]
+[[!template text="earlier this morning," start="00:24:08.000" video="mainVideo" id=subtitle]]
+[[!template text="and it just says LaTeX right here." start="00:24:09.200" video="mainVideo" id=subtitle]]
+[[!template text="So if you want to go to beamer," start="00:24:12.320" video="mainVideo" id=subtitle]]
+[[!template text="I think the back end for me," start="00:24:14.400" video="mainVideo" id=subtitle]]
+[[!template text="beamer is called, well, beamer," start="00:24:15.360" video="mainVideo" id=subtitle]]
+[[!template text="so instead of a pcase, what we would do is, we would say," start="00:24:17.333" video="mainVideo" id=subtitle]]
+[[!template text="if it's a 'latex or it's a 'beamer, then use this." start="00:24:22.000" video="mainVideo" id=subtitle]]
+[[!template text="Otherwise, it's not a LaTeX," start="00:24:27.167" video="mainVideo" id=subtitle]]
+[[!template text="it will simply default to this one," start="00:24:30.267" video="mainVideo" id=subtitle]]
+[[!template text="which could be dangerous for your needs." start="00:24:31.867" video="mainVideo" id=subtitle]]
+[[!template text="I think it's a bad practice to put a underscore," start="00:24:34.433" video="mainVideo" id=subtitle]]
+[[!template text="but I did it really quickly" start="00:24:39.167" video="mainVideo" id=subtitle]]
+[[!template text="because I just wanted to show you that it works fine in org-reveal" start="00:24:40.767" video="mainVideo" id=subtitle]]
+[[!template text="Contributions are more than welcome." start="00:24:44.500" video="mainVideo" id=subtitle]]
+[[!template text="I happily would love any assistance." start="00:24:47.440" video="mainVideo" id=subtitle]]
+[[!template text="We have a Lisp reference cheat sheet here" start="00:24:52.240" video="mainVideo" id=subtitle]]
+[[!template text="to learn a little bit about Lisp, if you're not comfortable," start="00:24:58.633" video="mainVideo" id=subtitle]]
+[[!template text="or to ask some questions." start="00:25:01.000" video="mainVideo" id=subtitle]]
+[[!template text="Lots of helpful people." start="00:25:03.267" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So there's another question that says," start="00:25:06.400" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Does typing in a block mess up with syntax highlighting?" start="00:25:09.440" video="mainVideo" id=subtitle]]
+[[!template text="Usually, you use a single color inside an" start="00:25:13.120" video="mainVideo" id=subtitle]]
+[[!template text="example block, for example." start="00:25:15.679" video="mainVideo" id=subtitle]]
+[[!template text="Ah, you found my crutch." start="00:25:17.279" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is all encompassing," start="00:25:25.279" video="mainVideo" id=subtitle]]
+[[!template text="and I'm not quite sure how fonts work." start="00:25:27.333" video="mainVideo" id=subtitle]]
+[[!template text="I learned enough to get by." start="00:25:29.760" video="mainVideo" id=subtitle]]
+[[!template text="Here's how links work." start="00:25:37.440" video="mainVideo" id=subtitle]]
+[[!template text="They're a bit complicated." start="00:25:38.667" video="mainVideo" id=subtitle]]
+[[!template text="This is a bit scary." start="00:25:40.799" video="mainVideo" id=subtitle]]
+[[!template text="I don't recommend anyone read it." start="00:25:42.567" video="mainVideo" id=subtitle]]
+[[!template text="Actually, let me open up an email" start="00:25:47.039" video="mainVideo" id=subtitle]]
+[[!template text="and you can see what I see." start="00:25:50.559" video="mainVideo" id=subtitle]]
+[[!template text="So here's an Emacs." start="00:25:52.100" video="mainVideo" id=subtitle]]
+[[!template text="Let's make that a bit bigger." start="00:25:54.799" video="mainVideo" id=subtitle]]
+[[!template text="Let's change this slightly." start="00:25:56.799" video="mainVideo" id=subtitle]]
+[[!template text="Nope, that's worse. There you go." start="00:25:59.133" video="mainVideo" id=subtitle]]
+[[!template text="Here's some words. Here's red hello." start="00:26:01.919" video="mainVideo" id=subtitle]]
+[[!template text="But you're worried about preserving fontification." start="00:26:09.360" video="mainVideo" id=subtitle]]
+[[!template text="Let's make an emacs-lisp block." start="00:26:15.679" video="mainVideo" id=subtitle]]
+[[!template text="Let's say, (+ 1 2)." start="00:26:18.880" video="mainVideo" id=subtitle]]
+[[!template text="Ah, where's the fun? Hello. Bye." start="00:26:22.840" video="mainVideo" id=subtitle]]
+[[!template text="Okay. Where's the coloring?" start="00:26:31.133" video="mainVideo" id=subtitle]]
+[[!template text="If we zoom in on this #+begin_src block," start="00:26:32.080" video="mainVideo" id=subtitle]]
+[[!template text="you can see down here" start="00:26:36.000" video="mainVideo" id=subtitle]]
+[[!template text="we have our our coloring" start="00:26:39.200" video="mainVideo" id=subtitle]]
+[[!template text="when we zoom in." start="00:26:42.159" video="mainVideo" id=subtitle]]
+[[!template text="If we zoom out, no coloring." start="00:26:43.279" video="mainVideo" id=subtitle]]
+[[!template text="Zoom in, coloring. Zoom out, aah, no coloring." start="00:26:46.960" video="mainVideo" id=subtitle]]
+[[!template text="Let's take off these bad boys, and oh, look, my coloring's back." start="00:26:50.880" video="mainVideo" id=subtitle]]
+[[!template text="In a previous iteration of the system, I was able to maintain coloring." start="00:26:55.679" video="mainVideo" id=subtitle]]
+[[!template text="In this new iteration, I am not." start="00:27:03.760" video="mainVideo" id=subtitle]]
+[[!template text="I don't know how to do it." start="00:27:06.400" video="mainVideo" id=subtitle]]
+[[!template text="I haven't had the time to implement it." start="00:27:07.400" video="mainVideo" id=subtitle]]
+[[!template text="I spent a lot of time writing this 48-page documentation" start="00:27:10.333" video="mainVideo" id=subtitle]]
+[[!template text="with some fun examples to try to help people learn." start="00:27:17.279" video="mainVideo" id=subtitle]]
+[[!template text="But I would appreciate any help or guidance" start="00:27:21.133" video="mainVideo" id=subtitle]]
+[[!template text="on how to maintain the fontification." start="00:27:23.200" video="mainVideo" id=subtitle]]
+[[!template text="I really would like to keep those colors in." start="00:27:26.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Amin: Musa, we have time for maybe one more question," start="00:27:29.200" video="mainVideo" id=subtitle]]
+[[!template text="one or two more questions," start="00:27:32.640" video="mainVideo" id=subtitle]]
+[[!template text="and then we have to move on to the next talk." start="00:27:34.500" video="mainVideo" id=subtitle]]
+[[!template text="You're more than welcome to" start="00:27:37.039" video="mainVideo" id=subtitle]]
+[[!template text="continue taking the questions via IRC or the pad." start="00:27:39.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Musa: Okay. Thank you." start="00:27:42.559" video="mainVideo" id=subtitle]]
+[[!template text="The final question we'll take is," start="00:27:45.760" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Should packages implement" start="00:27:48.880" video="mainVideo" id=subtitle]]
+[[!template text="interface to one specific format," start="00:27:52.320" video="mainVideo" id=subtitle]]
+[[!template text="or attempt to be inclusive" start="00:27:53.967" video="mainVideo" id=subtitle]]
+[[!template text="to all the potential output targets?&quot;" start="00:27:55.600" video="mainVideo" id=subtitle]]
+[[!template text="I think you should just make them as you go," start="00:27:57.279" video="mainVideo" id=subtitle]]
+[[!template text="and add them as you need them." start="00:27:59.300" video="mainVideo" id=subtitle]]
+[[!template text="We'll make Github requests for things." start="00:28:01.500" video="mainVideo" id=subtitle]]
+[[!template text="We can share recipes in this document," start="00:28:05.600" video="mainVideo" id=subtitle]]
+[[!template text="and then try to add other techniques," start="00:28:08.533" video="mainVideo" id=subtitle]]
+[[!template text="and then we can use these blocks as a common interface" start="00:28:12.333" video="mainVideo" id=subtitle]]
+[[!template text="for exporting to PDF and other things." start="00:28:19.200" video="mainVideo" id=subtitle]]
+[[!template text="Since someone asked," start="00:28:22.240" video="mainVideo" id=subtitle]]
+[[!template text="here what a PDF looks like." start="00:28:26.000" video="mainVideo" id=subtitle]]
+[[!template text="This is the same PDF rendered." start="00:28:28.033" video="mainVideo" id=subtitle]]
+[[!template text="I made no effort to make it look good," start="00:28:31.667" video="mainVideo" id=subtitle]]
+[[!template text="but it surprisingly does look good." start="00:28:34.960" video="mainVideo" id=subtitle]]
+[[!template text="That was nice." start="00:28:38.559" video="mainVideo" id=subtitle]]
+[[!template text="That was a terrible magenta, but that is life." start="00:28:40.067" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Anyhow, I hope you all enjoyed this talk." start="00:28:44.320" video="mainVideo" id=subtitle]]
+[[!template text="I hope you will find defblock useful to you." start="00:28:47.100" video="mainVideo" id=subtitle]]
+[[!template text="It is available on MELPA." start="00:28:51.033" video="mainVideo" id=subtitle]]
+[[!template text="In a rush to make it available for EmacsConf 2020," start="00:28:52.799" video="mainVideo" id=subtitle]]
+[[!template text="some MELPA guidelines may not have been adhered to." start="00:28:56.367" video="mainVideo" id=subtitle]]
+[[!template text="Please do not hit me." start="00:29:00.159" video="mainVideo" id=subtitle]]
+[[!template text="I hope everyone enjoys the rest of the EmacsConf 2020. Thank you!" start="00:29:01.600" video="mainVideo" id=subtitle]]
diff --git a/2020/info/23.md b/2020/info/23.md
index f87ed299..e00d3c28 100644
--- a/2020/info/23.md
+++ b/2020/info/23.md
@@ -1,11 +1,14 @@
# Incremental Parsing with emacs-tree-sitter
Tuấn-Anh Nguyễn
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.webm"]]
-[Download compressed .webm video (21.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen--vp9-q56-video-original-audio.webm)
+[[!template vidid="mainVideo" id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.webm" subtitles="/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt"]]
+[Download compressed .webm video (26.2M)](https://media.emacsconf.org/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen--compressed32.webm)
+[Download compressed .webm video (21.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen.webm" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (16.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (35.8M)](https://media.emacsconf.org/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen--compressed32.webm)
+[Download compressed Q&A .webm video (16.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen--vp9-q56-video-original-audio.webm)
Tree-sitter is a parser generator and an incremental parsing library.
emacs-tree-sitter is its most popular Emacs binding, which aims to be
@@ -175,3 +178,376 @@ Yes, it is just matter of paperwork.
- LSP has high latency and is resource intensive, oft.
- An updated video version was uploaded after the event, with the
missing introduction to Tree-sitter added.
+
+# Related talks
+
+[[!taglink CategoryTreeSitter]]
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello, everyone! My name is Tuấn-Anh." start="00:00:01.520" video="mainVideo" id=subtitle]]
+[[!template text="I've been using Emacs for about 10 years." start="00:00:04.400" video="mainVideo" id=subtitle]]
+[[!template text="Today, I'm going to talk about tree-sitter," start="00:00:07.200" video="mainVideo" id=subtitle]]
+[[!template text="a new Emacs package that allows Emacs" start="00:00:09.280" video="mainVideo" id=subtitle]]
+[[!template text="to parse multiple programming languages in real-time." start="00:00:11.351" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So what is the problem statement?" start="00:00:17.840" video="mainVideo" id=subtitle]]
+[[!template text="In order to support programming functionalities" start="00:00:21.840" video="mainVideo" id=subtitle]]
+[[!template text="for a particular language," start="00:00:24.131" video="mainVideo" id=subtitle]]
+[[!template text="a text editor needs to have some degree" start="00:00:25.760" video="mainVideo" id=subtitle]]
+[[!template text="of language understanding." start="00:00:27.680" video="mainVideo" id=subtitle]]
+[[!template text="Traditionally, text editors have relied" start="00:00:29.679" video="mainVideo" id=subtitle]]
+[[!template text="very heavily on regular expressions for this." start="00:00:31.840" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is no different." start="00:00:34.960" video="mainVideo" id=subtitle]]
+[[!template text="Most language major modes use regular expressions" start="00:00:37.013" video="mainVideo" id=subtitle]]
+[[!template text="for syntax-highlighting, code navigation," start="00:00:40.170" video="mainVideo" id=subtitle]]
+[[!template text="folding, indexing, and so on." start="00:00:42.960" video="mainVideo" id=subtitle]]
+[[!template text="Regular expressions are problematic for a couple of reasons." start="00:00:46.618" video="mainVideo" id=subtitle]]
+[[!template text="They're slow and inaccurate." start="00:00:50.559" video="mainVideo" id=subtitle]]
+[[!template text="They also make the code hard to read and write." start="00:00:53.778" video="mainVideo" id=subtitle]]
+[[!template text="Sometimes it's because the regular expressions themselves are very hairy," start="00:00:56.800" video="mainVideo" id=subtitle]]
+[[!template text="and sometimes because they are just not powerful enough." start="00:01:01.199" video="mainVideo" id=subtitle]]
+[[!template text="Some helper code is usually needed" start="00:01:05.199" video="mainVideo" id=subtitle]]
+[[!template text="to parse more intricate language features." start="00:01:08.625" video="mainVideo" id=subtitle]]
+[[!template text="That also illustrates the core problem with regular expressions," start="00:01:11.200" video="mainVideo" id=subtitle]]
+[[!template text="in that they are not powerful enough to parse programming languages." start="00:01:16.159" video="mainVideo" id=subtitle]]
+[[!template text="An example feature that regular expressions cannot handle very well" start="00:01:21.119" video="mainVideo" id=subtitle]]
+[[!template text="is string interpolation, which is a very common feature" start="00:01:25.040" video="mainVideo" id=subtitle]]
+[[!template text="in many modern programming languages." start="00:01:28.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="It would be much nicer if Emacs somehow" start="00:01:31.680" video="mainVideo" id=subtitle]]
+[[!template text="had structural understanding of source code, like IDEs do." start="00:01:34.079" video="mainVideo" id=subtitle]]
+[[!template text="There have been multiple efforts" start="00:01:39.520" video="mainVideo" id=subtitle]]
+[[!template text="to bring this kind of programming language understanding into Emacs." start="00:01:41.981" video="mainVideo" id=subtitle]]
+[[!template text="There are language-specific parsers" start="00:01:45.280" video="mainVideo" id=subtitle]]
+[[!template text="written in Elisp" start="00:01:47.119" video="mainVideo" id=subtitle]]
+[[!template text="that can be thought of" start="00:01:48.640" video="mainVideo" id=subtitle]]
+[[!template text="as the next logical step of the glue code" start="00:01:50.675" video="mainVideo" id=subtitle]]
+[[!template text="on top of regular expressions," start="00:01:51.989" video="mainVideo" id=subtitle]]
+[[!template text="moving from partial local pattern recognition" start="00:01:53.856" video="mainVideo" id=subtitle]]
+[[!template text="into a full-fledged parser." start="00:01:57.356" video="mainVideo" id=subtitle]]
+[[!template text="The most prominent example of this approach" start="00:01:59.840" video="mainVideo" id=subtitle]]
+[[!template text="is probably the famous js2-mode." start="00:02:02.023" video="mainVideo" id=subtitle]]
+[[!template new="1" text="However, this approach has several issues." start="00:02:06.479" video="mainVideo" id=subtitle]]
+[[!template text="Parsing is computationally expensive," start="00:02:10.080" video="mainVideo" id=subtitle]]
+[[!template text="and Emacs Lisp is not good at that kind of stuff." start="00:02:12.606" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Furthermore, maintenance is very troublesome." start="00:02:16.800" video="mainVideo" id=subtitle]]
+[[!template text="In order to work on these parsers," start="00:02:19.156" video="mainVideo" id=subtitle]]
+[[!template text="first, you have to know Elisp well enough," start="00:02:22.160" video="mainVideo" id=subtitle]]
+[[!template text="and then you have to be comfortable with" start="00:02:24.239" video="mainVideo" id=subtitle]]
+[[!template text="writing a recursive descending parser," start="00:02:26.606" video="mainVideo" id=subtitle]]
+[[!template text="while constantly keeping up with changes to the language itself," start="00:02:29.739" video="mainVideo" id=subtitle]]
+[[!template text="which can be evolving very quickly," start="00:02:34.000" video="mainVideo" id=subtitle]]
+[[!template text="like Javascript, for example." start="00:02:36.356" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Together, these constraints significantly reduce" start="00:02:39.360" video="mainVideo" id=subtitle]]
+[[!template text="the pool of potential maintainers." start="00:02:42.373" video="mainVideo" id=subtitle]]
+[[!template text="The biggest issue, though, in my opinion," start="00:02:45.680" video="mainVideo" id=subtitle]]
+[[!template text="is lack of the set of generic and reusable APIs." start="00:02:47.760" video="mainVideo" id=subtitle]]
+[[!template text="This makes them very hard to use" start="00:02:52.139" video="mainVideo" id=subtitle]]
+[[!template text="for minor modes that want to deal with" start="00:02:54.319" video="mainVideo" id=subtitle]]
+[[!template text="cross-cutting concerns across multiple languages." start="00:02:55.920" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The other approach which has been" start="00:02:59.920" video="mainVideo" id=subtitle]]
+[[!template text="gaining a lot of momentum in recent years" start="00:03:01.760" video="mainVideo" id=subtitle]]
+[[!template text="is externalizing language understanding" start="00:03:04.319" video="mainVideo" id=subtitle]]
+[[!template text="to another process," start="00:03:06.560" video="mainVideo" id=subtitle]]
+[[!template text="also known as language server protocol." start="00:03:08.159" video="mainVideo" id=subtitle]]
+[[!template new="1" text="This second approach is actually a very interesting one." start="00:03:12.239" video="mainVideo" id=subtitle]]
+[[!template text="By decoupling language understanding" start="00:03:16.560" video="mainVideo" id=subtitle]]
+[[!template text="from the editing facility itself," start="00:03:18.400" video="mainVideo" id=subtitle]]
+[[!template text="the LSP servers can attract a lot more contributors," start="00:03:21.280" video="mainVideo" id=subtitle]]
+[[!template text="which makes maintenance easier." start="00:03:25.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="However, they also have several issues of their own." start="00:03:27.189" video="mainVideo" id=subtitle]]
+[[!template text="Being a separate process," start="00:03:32.400" video="mainVideo" id=subtitle]]
+[[!template text="they are usually more resource-intensive," start="00:03:34.089" video="mainVideo" id=subtitle]]
+[[!template text="and depending on the language," start="00:03:37.073" video="mainVideo" id=subtitle]]
+[[!template text="the LSP server itself can bring with it" start="00:03:39.920" video="mainVideo" id=subtitle]]
+[[!template text="a host of additional dependencies" start="00:03:42.159" video="mainVideo" id=subtitle]]
+[[!template text="external to Emacs, which may be messy to install and manage." start="00:03:44.640" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Furthermore, JSON over RPC has pretty high latency." start="00:03:50.640" video="mainVideo" id=subtitle]]
+[[!template text="For one-off tasks like jumping to source" start="00:03:55.120" video="mainVideo" id=subtitle]]
+[[!template text="or on-demand completion, it's great." start="00:03:57.840" video="mainVideo" id=subtitle]]
+[[!template text="But for things like code highlighting," start="00:04:00.879" video="mainVideo" id=subtitle]]
+[[!template text="the latency is just too much." start="00:04:03.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I was using Rust and I was following the" start="00:04:06.000" video="mainVideo" id=subtitle]]
+[[!template text="community effort to improve its IDE support," start="00:04:08.319" video="mainVideo" id=subtitle]]
+[[!template text="hoping to integrate some of that into Emacs itself." start="00:04:11.760" video="mainVideo" id=subtitle]]
+[[!template text="Then I heard someone from the community mention tree-sitter," start="00:04:15.760" video="mainVideo" id=subtitle]]
+[[!template text="and I decided to check it out." start="00:04:19.759" video="mainVideo" id=subtitle]]
+[[!template text="Basically, tree-sitter is an incremental parsing library and a parser generator." start="00:04:23.360" video="mainVideo" id=subtitle]]
+[[!template text="It was introduced by the Atom editor in 2018." start="00:04:28.720" video="mainVideo" id=subtitle]]
+[[!template text="Besides Atom, it is also being integrated" start="00:04:33.040" video="mainVideo" id=subtitle]]
+[[!template text="into the NeoVim editor," start="00:04:35.923" video="mainVideo" id=subtitle]]
+[[!template text="and Github is using it to power" start="00:04:37.623" video="mainVideo" id=subtitle]]
+[[!template text="their source code analysis" start="00:04:41.040" video="mainVideo" id=subtitle]]
+[[!template text="and navigation features." start="00:04:42.423" video="mainVideo" id=subtitle]]
+[[!template text="It is written in C and can be compiled" start="00:04:45.840" video="mainVideo" id=subtitle]]
+[[!template text="for all major platforms." start="00:04:48.639" video="mainVideo" id=subtitle]]
+[[!template text="It can even be compiled" start="00:04:50.623" video="mainVideo" id=subtitle]]
+[[!template text="to web assembly to run on the web." start="00:04:53.120" video="mainVideo" id=subtitle]]
+[[!template text="That's how Github is using it on their website." start="00:04:55.323" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So why is tree-sitter an interesting solution to this problem?" start="00:05:00.800" video="mainVideo" id=subtitle]]
+[[!template text="There are multiple features that make it an attractive option." start="00:05:05.840" video="mainVideo" id=subtitle]]
+[[!template text="It is designed to be fast." start="00:05:10.000" video="mainVideo" id=subtitle]]
+[[!template text="By being incremental," start="00:05:11.839" video="mainVideo" id=subtitle]]
+[[!template text="the initial parse of a typical big file" start="00:05:13.680" video="mainVideo" id=subtitle]]
+[[!template text="can take tens of milliseconds," start="00:05:15.680" video="mainVideo" id=subtitle]]
+[[!template text="while subsequent incremental processes" start="00:05:18.160" video="mainVideo" id=subtitle]]
+[[!template text="are sub-millisecond." start="00:05:20.240" video="mainVideo" id=subtitle]]
+[[!template text="It achieves this by using structural sharing," start="00:05:22.560" video="mainVideo" id=subtitle]]
+[[!template text="meaning replacing only affected nodes" start="00:05:26.240" video="mainVideo" id=subtitle]]
+[[!template text="in the old tree when it needs to." start="00:05:29.360" video="mainVideo" id=subtitle]]
+[[!template text="Also, unlike LSP, being in the same process," start="00:05:32.960" video="mainVideo" id=subtitle]]
+[[!template text="it has much lower latency." start="00:05:37.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Secondly, it provides a uniform programming interface." start="00:05:40.639" video="mainVideo" id=subtitle]]
+[[!template text="The same data structures and functions" start="00:05:44.960" video="mainVideo" id=subtitle]]
+[[!template text="work on parse trees of different languages." start="00:05:47.039" video="mainVideo" id=subtitle]]
+[[!template text="Syntax nodes of different languages" start="00:05:50.400" video="mainVideo" id=subtitle]]
+[[!template text="differ only by their types" start="00:05:52.160" video="mainVideo" id=subtitle]]
+[[!template text="and their possible child nodes." start="00:05:54.160" video="mainVideo" id=subtitle]]
+[[!template text="This is a big advantage over language-specific parsers." start="00:05:55.723" video="mainVideo" id=subtitle]]
+[[!template text="Thirdly, it's written in self-contained embeddable C." start="00:06:02.240" video="mainVideo" id=subtitle]]
+[[!template text="As I mentioned previously, it can even be compiled to webassembly." start="00:06:06.880" video="mainVideo" id=subtitle]]
+[[!template text="This makes integrating it into various editors quite easy" start="00:06:11.723" video="mainVideo" id=subtitle]]
+[[!template text="without having to install any external dependencies." start="00:06:16.106" video="mainVideo" id=subtitle]]
+[[!template new="1" text="One thing that is not mentioned here" start="00:06:22.880" video="mainVideo" id=subtitle]]
+[[!template text="is that being a parser generator," start="00:06:25.503" video="mainVideo" id=subtitle]]
+[[!template text="its grammars are declarative." start="00:06:28.000" video="mainVideo" id=subtitle]]
+[[!template text="Together with being editor-independent," start="00:06:31.039" video="mainVideo" id=subtitle]]
+[[!template text="this makes the pool of potential contributors much larger." start="00:06:34.880" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I was convinced that tree-sitter is a good fit for Emacs." start="00:06:39.139" video="mainVideo" id=subtitle]]
+[[!template text="Last year, I started writing the bindings" start="00:06:45.520" video="mainVideo" id=subtitle]]
+[[!template text="using dynamic module support introduced in Emacs 25." start="00:06:48.000" video="mainVideo" id=subtitle]]
+[[!template text="Dynamic module means there is platform-specific native code involved," start="00:06:53.280" video="mainVideo" id=subtitle]]
+[[!template text="but since there are pre-compiled binaries" start="00:06:58.479" video="mainVideo" id=subtitle]]
+[[!template text="for the three major platforms," start="00:07:00.560" video="mainVideo" id=subtitle]]
+[[!template text="it should work in most places." start="00:07:02.880" video="mainVideo" id=subtitle]]
+[[!template text="Currently, the core functionalities are in a pretty good shape." start="00:07:04.706" video="mainVideo" id=subtitle]]
+[[!template text="Syntax highlighting is working nicely." start="00:07:09.440" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The whole thing is split into three packages." start="00:07:12.560" video="mainVideo" id=subtitle]]
+[[!template text="tree-sitter is the main package that other packages should depend on." start="00:07:16.080" video="mainVideo" id=subtitle]]
+[[!template text="tree-sitter-langs is the language bundle" start="00:07:20.319" video="mainVideo" id=subtitle]]
+[[!template text="that includes support" start="00:07:22.800" video="mainVideo" id=subtitle]]
+[[!template text="for most common languages." start="00:07:24.000" video="mainVideo" id=subtitle]]
+[[!template text="And finally, the core APIs are in the package tsc," start="00:07:27.199" video="mainVideo" id=subtitle]]
+[[!template text="which stands for tree-sitter-core." start="00:07:32.160" video="mainVideo" id=subtitle]]
+[[!template text="It is the implicit dependency of the" start="00:07:36.160" video="mainVideo" id=subtitle]]
+[[!template text="tree-sitter package." start="00:07:38.800" video="mainVideo" id=subtitle]]
+[[!template text="The main package includes the minor mode tree-sitter-mode." start="00:07:43.520" video="mainVideo" id=subtitle]]
+[[!template text="This provides the base for other major or minor modes to build on." start="00:07:47.520" video="mainVideo" id=subtitle]]
+[[!template text="Using Emacs's change tracking hooks," start="00:07:52.560" video="mainVideo" id=subtitle]]
+[[!template text="it enables incremental parsing" start="00:07:54.839" video="mainVideo" id=subtitle]]
+[[!template text="and provides a syntax tree that is always up to date" start="00:07:57.073" video="mainVideo" id=subtitle]]
+[[!template text="after any edits in a buffer." start="00:08:00.800" video="mainVideo" id=subtitle]]
+[[!template text="There is also a basic debug mode" start="00:08:04.080" video="mainVideo" id=subtitle]]
+[[!template text="that shows the parse tree in another buffer." start="00:08:06.223" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Here is a quick demo." start="00:08:10.080" video="mainVideo" id=subtitle]]
+[[!template text="Here I'm in an empty Python buffer" start="00:08:13.360" video="mainVideo" id=subtitle]]
+[[!template text="with tree-sitter enabled." start="00:08:15.673" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to turn on the debug mode to" start="00:08:17.520" video="mainVideo" id=subtitle]]
+[[!template text="see the parse tree." start="00:08:19.440" video="mainVideo" id=subtitle]]
+[[!template text="Since the buffer is empty," start="00:08:26.560" video="mainVideo" id=subtitle]]
+[[!template text="there is only one node in the syntax tree:" start="00:08:28.106" video="mainVideo" id=subtitle]]
+[[!template text="the top-level module node." start="00:08:30.423" video="mainVideo" id=subtitle]]
+[[!template text="Let's try typing some code." start="00:08:33.279" video="mainVideo" id=subtitle]]
+[[!template text="As you can see, as I type into the Python buffer," start="00:09:11.040" video="mainVideo" id=subtitle]]
+[[!template text="the syntax tree updates in real time." start="00:09:14.640" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The other minor mode included in the main package" start="00:09:19.120" video="mainVideo" id=subtitle]]
+[[!template text="is tree-sitter-hl-mode." start="00:09:22.039" video="mainVideo" id=subtitle]]
+[[!template text="It overrides font-lock mode" start="00:09:24.389" video="mainVideo" id=subtitle]]
+[[!template text="and provides its own set of phases" start="00:09:26.349" video="mainVideo" id=subtitle]]
+[[!template text="and customization options" start="00:09:28.480" video="mainVideo" id=subtitle]]
+[[!template text="It is query-driven." start="00:09:30.139" video="mainVideo" id=subtitle]]
+[[!template text="That means instead of regular expressions," start="00:09:32.800" video="mainVideo" id=subtitle]]
+[[!template text="it uses a Lisp-like query language" start="00:09:36.240" video="mainVideo" id=subtitle]]
+[[!template text="to map syntax nodes" start="00:09:39.518" video="mainVideo" id=subtitle]]
+[[!template text="to highlighting phrases." start="00:09:40.320" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to open a python file with small snippets" start="00:09:41.923" video="mainVideo" id=subtitle]]
+[[!template text="that showcase syntax highlighting." start="00:09:45.760" video="mainVideo" id=subtitle]]
+[[!template text="So this is the default highlighting" start="00:09:54.320" video="mainVideo" id=subtitle]]
+[[!template text="provided by python-mode." start="00:09:55.920" video="mainVideo" id=subtitle]]
+[[!template text="This is the highlighting enabled by tree-sitter." start="00:10:00.880" video="mainVideo" id=subtitle]]
+[[!template text="As you can see, string interpolation" start="00:10:04.640" video="mainVideo" id=subtitle]]
+[[!template text="and decorators are highlighted correctly." start="00:10:07.680" video="mainVideo" id=subtitle]]
+[[!template text="Function calls are also highlighted." start="00:10:11.680" video="mainVideo" id=subtitle]]
+[[!template text="You can also note that property accessors" start="00:10:17.440" video="mainVideo" id=subtitle]]
+[[!template text="and property assignments are highlighted differently." start="00:10:21.839" video="mainVideo" id=subtitle]]
+[[!template text="What I like the most about this is that" start="00:10:27.440" video="mainVideo" id=subtitle]]
+[[!template text="new bindings are consistently highlighted." start="00:10:29.360" video="mainVideo" id=subtitle]]
+[[!template text="This included local variables," start="00:10:32.640" video="mainVideo" id=subtitle]]
+[[!template text="function parameters, and property mutations." start="00:10:36.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Before going through the tree queries" start="00:10:45.760" video="mainVideo" id=subtitle]]
+[[!template text="and the syntax highlighting" start="00:10:48.000" video="mainVideo" id=subtitle]]
+[[!template text="customization options," start="00:10:49.279" video="mainVideo" id=subtitle]]
+[[!template text="let's take a brief look at" start="00:10:51.680" video="mainVideo" id=subtitle]]
+[[!template text="the core data structures and functions" start="00:10:53.339" video="mainVideo" id=subtitle]]
+[[!template text="that tree-sitter provides." start="00:10:55.040" video="mainVideo" id=subtitle]]
+[[!template text="So parsing is done with the help of" start="00:10:58.079" video="mainVideo" id=subtitle]]
+[[!template text="a generic parser object." start="00:11:00.743" video="mainVideo" id=subtitle]]
+[[!template text="A single parser object can be used to" start="00:11:02.240" video="mainVideo" id=subtitle]]
+[[!template text="parse different languages" start="00:11:04.160" video="mainVideo" id=subtitle]]
+[[!template text="by sending different language objects to it." start="00:11:06.000" video="mainVideo" id=subtitle]]
+[[!template text="The language objects themselves are" start="00:11:09.279" video="mainVideo" id=subtitle]]
+[[!template text="loaded from shared libraries." start="00:11:10.880" video="mainVideo" id=subtitle]]
+[[!template text="Since tree-sitter-mmode already handles" start="00:11:14.079" video="mainVideo" id=subtitle]]
+[[!template text="the parsing part," start="00:11:16.079" video="mainVideo" id=subtitle]]
+[[!template text="we will instead focus on the functions" start="00:11:17.360" video="mainVideo" id=subtitle]]
+[[!template text="that inspect nodes," start="00:11:19.440" video="mainVideo" id=subtitle]]
+[[!template text="and in the resulting path tree," start="00:11:20.800" video="mainVideo" id=subtitle]]
+[[!template text="we can ask tree-sitter what is" start="00:11:25.279" video="mainVideo" id=subtitle]]
+[[!template text="the syntax node at point." start="00:11:27.030" video="mainVideo" id=subtitle]]
+[[!template text="This is an opaque object, so this is not very useful." start="00:11:44.240" video="mainVideo" id=subtitle]]
+[[!template text="We can instead ask what is its type." start="00:11:48.480" video="mainVideo" id=subtitle]]
+[[!template text="So its type is the symbol comparison operator." start="00:12:03.760" video="mainVideo" id=subtitle]]
+[[!template new="1" text="In tree-sitter, there are two kinds of nodes," start="00:12:08.959" video="mainVideo" id=subtitle]]
+[[!template text="anonymous nodes and named nodes." start="00:12:11.600" video="mainVideo" id=subtitle]]
+[[!template text="Anonymous nodes correspond to simple grammar elements" start="00:12:13.680" video="mainVideo" id=subtitle]]
+[[!template text="like keywords, operators, punctuations, and so on." start="00:12:17.040" video="mainVideo" id=subtitle]]
+[[!template text="Name nodes, on the other hand, are grammar elements" start="00:12:21.279" video="mainVideo" id=subtitle]]
+[[!template text="that are interesting enough on their own" start="00:12:24.656" video="mainVideo" id=subtitle]]
+[[!template text="to have a name, like an identifier," start="00:12:26.639" video="mainVideo" id=subtitle]]
+[[!template text="an expression, or a function definition." start="00:12:30.029" video="mainVideo" id=subtitle]]
+[[!template text="Name node types are symbols," start="00:12:35.440" video="mainVideo" id=subtitle]]
+[[!template text="while anonymous node types are strings." start="00:12:37.323" video="mainVideo" id=subtitle]]
+[[!template text="For example, if we are on this comparison operator," start="00:12:42.639" video="mainVideo" id=subtitle]]
+[[!template text="the node type should be a string." start="00:12:49.760" video="mainVideo" id=subtitle]]
+[[!template text="We can also get other information about the node." start="00:12:55.920" video="mainVideo" id=subtitle]]
+[[!template text="For example: what is this text," start="00:12:58.959" video="mainVideo" id=subtitle]]
+[[!template text="or where it is in the buffer," start="00:13:09.680" video="mainVideo" id=subtitle]]
+[[!template text="or what is its parent." start="00:13:20.800" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There are many other APIs to query" start="00:13:43.199" video="mainVideo" id=subtitle]]
+[[!template text="our node's properties." start="00:13:46.106" video="mainVideo" id=subtitle]]
+[[!template text="tree-sitter allows searching" start="00:13:52.639" video="mainVideo" id=subtitle]]
+[[!template text="for structural patterns within a parse tree." start="00:13:54.234" video="mainVideo" id=subtitle]]
+[[!template text="It does so through a Lisp-like language." start="00:13:58.240" video="mainVideo" id=subtitle]]
+[[!template text="This language supports matching by node types," start="00:14:01.440" video="mainVideo" id=subtitle]]
+[[!template text="field names, and predicates." start="00:14:04.639" video="mainVideo" id=subtitle]]
+[[!template text="It also allows capturing nodes for further processing." start="00:14:07.760" video="mainVideo" id=subtitle]]
+[[!template text="Let's try to see some examples." start="00:14:12.639" video="mainVideo" id=subtitle]]
+[[!template text="So in this very simple query," start="00:14:37.680" video="mainVideo" id=subtitle]]
+[[!template text="we just try to highlight all the identifiers in the buffer." start="00:14:40.206" video="mainVideo" id=subtitle]]
+[[!template text="This s side tells tree-sitter to capture a node." start="00:14:49.040" video="mainVideo" id=subtitle]]
+[[!template text="In the context of the query builder," start="00:14:53.120" video="mainVideo" id=subtitle]]
+[[!template text="it's not very important," start="00:14:55.507" video="mainVideo" id=subtitle]]
+[[!template text="but in normal highlighting query," start="00:14:57.360" video="mainVideo" id=subtitle]]
+[[!template text="this will determine" start="00:14:59.706" video="mainVideo" id=subtitle]]
+[[!template text="the face used to highlight the note." start="00:15:01.760" video="mainVideo" id=subtitle]]
+[[!template text="Suppose we want to capture" start="00:15:06.639" video="mainVideo" id=subtitle]]
+[[!template text="all the function names," start="00:15:08.256" video="mainVideo" id=subtitle]]
+[[!template text="instead of just any identifier." start="00:15:10.320" video="mainVideo" id=subtitle]]
+[[!template text="You can improve the query like this." start="00:15:13.519" video="mainVideo" id=subtitle]]
+[[!template text="This will highlight the whole definition." start="00:15:29.440" video="mainVideo" id=subtitle]]
+[[!template text="But we only want to capture the function name," start="00:15:32.639" video="mainVideo" id=subtitle]]
+[[!template text="which means the identifier here." start="00:15:36.399" video="mainVideo" id=subtitle]]
+[[!template text="So we move the capture to after the identifier node." start="00:15:41.054" video="mainVideo" id=subtitle]]
+[[!template text="If we want to capture the class names as well," start="00:15:49.600" video="mainVideo" id=subtitle]]
+[[!template text="we just add another pattern." start="00:15:52.959" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's look at a more practical example." start="00:16:10.079" video="mainVideo" id=subtitle]]
+[[!template text="Here we can see that single-quoted strings" start="00:16:20.320" video="mainVideo" id=subtitle]]
+[[!template text="and double-quoted strings are highlighted the same." start="00:16:23.468" video="mainVideo" id=subtitle]]
+[[!template text="But in some places," start="00:16:27.279" video="mainVideo" id=subtitle]]
+[[!template text="because of some coding conventions," start="00:16:30.399" video="mainVideo" id=subtitle]]
+[[!template text="it may be desirable to highlight them differently." start="00:16:33.440" video="mainVideo" id=subtitle]]
+[[!template text="For example, if the string is single-quoted," start="00:16:36.373" video="mainVideo" id=subtitle]]
+[[!template text="we may want to highlight it as a constant." start="00:16:39.073" video="mainVideo" id=subtitle]]
+[[!template text="Let's try to see whether we can" start="00:16:44.399" video="mainVideo" id=subtitle]]
+[[!template text="distinguish these two cases." start="00:16:46.160" video="mainVideo" id=subtitle]]
+[[!template text="So here we get all the strings." start="00:16:56.240" video="mainVideo" id=subtitle]]
+[[!template text="If we want to see if it's single quotes" start="00:17:00.639" video="mainVideo" id=subtitle]]
+[[!template text="or double quote strings," start="00:17:04.079" video="mainVideo" id=subtitle]]
+[[!template text="we can try looking at the first character of the string--" start="00:17:08.799" video="mainVideo" id=subtitle]]
+[[!template text="I mean the first character of the node--" start="00:17:13.436" video="mainVideo" id=subtitle]]
+[[!template text="to check whether it's a single quote or a double quote." start="00:17:16.720" video="mainVideo" id=subtitle]]
+[[!template text="So for that, we use tree-sitter's support for predicates." start="00:17:33.600" video="mainVideo" id=subtitle]]
+[[!template text="In this case, we use a match predicate" start="00:17:38.920" video="mainVideo" id=subtitle]]
+[[!template text="to check whether the string-- whether the node starts" start="00:17:43.360" video="mainVideo" id=subtitle]]
+[[!template text="with a single quote." start="00:17:47.339" video="mainVideo" id=subtitle]]
+[[!template text="And with this pattern," start="00:17:49.556" video="mainVideo" id=subtitle]]
+[[!template text="we only capture the single-quotes strings." start="00:17:51.280" video="mainVideo" id=subtitle]]
+[[!template text="Let's try to give it a different face." start="00:18:00.400" video="mainVideo" id=subtitle]]
+[[!template text="So we copy the pattern," start="00:18:03.760" video="mainVideo" id=subtitle]]
+[[!template text="and we add this pattern for Python only." start="00:18:13.039" video="mainVideo" id=subtitle]]
+[[!template text="But we also want to give the capture a different name." start="00:18:25.120" video="mainVideo" id=subtitle]]
+[[!template text="Let's say we want to highlight it as a keyword." start="00:18:31.440" video="mainVideo" id=subtitle]]
+[[!template text="And now, if we refresh the buffer," start="00:18:46.559" video="mainVideo" id=subtitle]]
+[[!template text="we see that single quote strings" start="00:19:06.320" video="mainVideo" id=subtitle]]
+[[!template text="are highlighted as keywords." start="00:19:08.523" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The highlighting patterns" start="00:19:14.400" video="mainVideo" id=subtitle]]
+[[!template text="can also be set for a single project" start="00:19:15.751" video="mainVideo" id=subtitle]]
+[[!template text="using directory-local variables." start="00:19:19.200" video="mainVideo" id=subtitle]]
+[[!template text="For example, let's take a look at Emacs's source code." start="00:19:23.440" video="mainVideo" id=subtitle]]
+[[!template text="So in Emacs's C source, there are a lot of uses" start="00:19:35.760" video="mainVideo" id=subtitle]]
+[[!template text="of these different macros" start="00:19:41.123" video="mainVideo" id=subtitle]]
+[[!template text="to define functions," start="00:19:43.760" video="mainVideo" id=subtitle]]
+[[!template text="and you can see this is actually the function name," start="00:19:47.679" video="mainVideo" id=subtitle]]
+[[!template text="but it's highlighted as the string." start="00:19:53.256" video="mainVideo" id=subtitle]]
+[[!template text="So what we want is to somehow recognize this pattern" start="00:19:56.373" video="mainVideo" id=subtitle]]
+[[!template text="and highlight it." start="00:20:03.679" video="mainVideo" id=subtitle]]
+[[!template text="Highlight this part" start="00:20:07.600" video="mainVideo" id=subtitle]]
+[[!template text="with the function face instead." start="00:20:11.280" video="mainVideo" id=subtitle]]
+[[!template text="In order to do that," start="00:20:14.559" video="mainVideo" id=subtitle]]
+[[!template text="we put a pattern in this project's directory-local settings file." start="00:20:17.679" video="mainVideo" id=subtitle]]
+[[!template text="So we can put this button in the C mode section." start="00:20:31.760" video="mainVideo" id=subtitle]]
+[[!template text="And now, if we enable tree-sitter," start="00:20:40.159" video="mainVideo" id=subtitle]]
+[[!template text="you can see that this is highlighted" start="00:20:48.000" video="mainVideo" id=subtitle]]
+[[!template text="as a normal function definition." start="00:20:53.200" video="mainVideo" id=subtitle]]
+[[!template text="So this is the function face like we wanted." start="00:20:55.056" video="mainVideo" id=subtitle]]
+[[!template text="The pattern for this is actually pretty simple." start="00:21:01.200" video="mainVideo" id=subtitle]]
+[[!template text="It's only this part." start="00:21:07.200" video="mainVideo" id=subtitle]]
+[[!template text="So if it's a function call" start="00:21:12.373" video="mainVideo" id=subtitle]]
+[[!template text="where the name of the function is defun," start="00:21:16.456" video="mainVideo" id=subtitle]]
+[[!template text="then we highlight the defun as a keyword," start="00:21:19.679" video="mainVideo" id=subtitle]]
+[[!template text="and then the first string element," start="00:21:24.240" video="mainVideo" id=subtitle]]
+[[!template text="we highlight it as a function name." start="00:21:26.923" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Since the language objects are actually native code," start="00:21:35.360" video="mainVideo" id=subtitle]]
+[[!template text="they have to be compiled for each platform" start="00:21:39.280" video="mainVideo" id=subtitle]]
+[[!template text="that we want to support." start="00:21:41.459" video="mainVideo" id=subtitle]]
+[[!template text="This will become a big obstacle for tree-sitter adoption." start="00:21:43.440" video="mainVideo" id=subtitle]]
+[[!template text="Therefore, I've created a language bundle package, tree-sitter-langs," start="00:21:48.159" video="mainVideo" id=subtitle]]
+[[!template text="that takes care of pre-compiling the grammars," start="00:21:52.960" video="mainVideo" id=subtitle]]
+[[!template text="the most common grammars for all three major platforms." start="00:21:55.773" video="mainVideo" id=subtitle]]
+[[!template text="It also takes care of distributing these binaries" start="00:22:01.600" video="mainVideo" id=subtitle]]
+[[!template text="and provides some highlighting queries" start="00:22:05.360" video="mainVideo" id=subtitle]]
+[[!template text="for some of the languages." start="00:22:08.080" video="mainVideo" id=subtitle]]
+[[!template text="It should be noted that this package" start="00:22:11.440" video="mainVideo" id=subtitle]]
+[[!template text="should be treated as a temporary distribution mechanism only," start="00:22:13.760" video="mainVideo" id=subtitle]]
+[[!template text="to help with bootstrapping tree-sitter adoption." start="00:22:19.919" video="mainVideo" id=subtitle]]
+[[!template text="The plan is that eventually these files" start="00:22:24.720" video="mainVideo" id=subtitle]]
+[[!template text="should be provided by" start="00:22:27.760" video="mainVideo" id=subtitle]]
+[[!template text="the language major modes themselves." start="00:22:29.156" video="mainVideo" id=subtitle]]
+[[!template text="But in order to do that, we need better tooling," start="00:22:32.480" video="mainVideo" id=subtitle]]
+[[!template text="so we're not there yet." start="00:22:36.320" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Since the core already works reasonably well," start="00:22:40.240" video="mainVideo" id=subtitle]]
+[[!template text="there are several areas that would benefit" start="00:22:43.280" video="mainVideo" id=subtitle]]
+[[!template text="from the community's contribution." start="00:22:45.289" video="mainVideo" id=subtitle]]
+[[!template text="So tree-sitter's upstream language repositories" start="00:22:49.120" video="mainVideo" id=subtitle]]
+[[!template text="already contain highlighting queries on their own." start="00:22:52.640" video="mainVideo" id=subtitle]]
+[[!template text="However, they are pretty basic," start="00:22:55.679" video="mainVideo" id=subtitle]]
+[[!template text="and they may not fit well with existing Emacs conventions." start="00:22:57.573" video="mainVideo" id=subtitle]]
+[[!template text="Therefore, the language bundle has its own set of highlighting queries." start="00:23:02.559" video="mainVideo" id=subtitle]]
+[[!template text="This requires maintenance until language major modes adopt tree-sitter" start="00:23:07.120" video="mainVideo" id=subtitle]]
+[[!template text="and maintain the queries on their own." start="00:23:12.556" video="mainVideo" id=subtitle]]
+[[!template text="The queries are actually quite easy to write," start="00:23:16.640" video="mainVideo" id=subtitle]]
+[[!template text="as you've already seen." start="00:23:19.056" video="mainVideo" id=subtitle]]
+[[!template text="You just need to be familiar with the language," start="00:23:22.000" video="mainVideo" id=subtitle]]
+[[!template text="familiar enough to come up with sensible highlighting patterns." start="00:23:25.360" video="mainVideo" id=subtitle]]
+[[!template text="And if you are a maintainer of a language major mode," start="00:23:35.200" video="mainVideo" id=subtitle]]
+[[!template text="you may want to consider integrating tree-sitter into your mode," start="00:23:39.679" video="mainVideo" id=subtitle]]
+[[!template text="initially maybe as an optional feature." start="00:23:44.189" video="mainVideo" id=subtitle]]
+[[!template text="The integration is actually pretty straightforward," start="00:23:48.573" video="mainVideo" id=subtitle]]
+[[!template text="especially for syntax highlighting." start="00:23:53.279" video="mainVideo" id=subtitle]]
+[[!template text="Or alternatively," start="00:23:56.640" video="mainVideo" id=subtitle]]
+[[!template text="you can also try writing a new major mode from scratch" start="00:24:01.520" video="mainVideo" id=subtitle]]
+[[!template text="that relies on tree-sitter" start="00:24:05.760" video="mainVideo" id=subtitle]]
+[[!template text="from the very beginning." start="00:24:08.000" video="mainVideo" id=subtitle]]
+[[!template text="The code for such a major mode is quite simple." start="00:24:12.559" video="mainVideo" id=subtitle]]
+[[!template text="For example, this is the proposed" start="00:24:17.523" video="mainVideo" id=subtitle]]
+[[!template text="wat-mode for web assembly." start="00:24:23.200" video="mainVideo" id=subtitle]]
+[[!template text="The code is just one page of code, not a lot." start="00:24:26.240" video="mainVideo" id=subtitle]]
+[[!template text="You can also try writing new minor modes" start="00:24:39.520" video="mainVideo" id=subtitle]]
+[[!template text="or writing integration packages." start="00:24:42.720" video="mainVideo" id=subtitle]]
+[[!template text="For example, a lot of packages" start="00:24:46.559" video="mainVideo" id=subtitle]]
+[[!template text="may benefit from tree-sitter integration," start="00:24:50.880" video="mainVideo" id=subtitle]]
+[[!template text="but no one has written the integration yet." start="00:24:54.559" video="mainVideo" id=subtitle]]
+[[!template new="1" text="If you are interested in tree-sitter," start="00:25:02.960" video="mainVideo" id=subtitle]]
+[[!template text="you can use these links to learn more about it." start="00:25:04.836" video="mainVideo" id=subtitle]]
+[[!template text="I think that's it for me today." start="00:25:08.023" video="mainVideo" id=subtitle]]
+[[!template text="I'm happy to answer any questions." start="00:25:11.440" video="mainVideo" id=subtitle]]
diff --git a/2020/info/24.md b/2020/info/24.md
index 9b9ae189..af8e503f 100644
--- a/2020/info/24.md
+++ b/2020/info/24.md
@@ -2,7 +2,8 @@
Andrea
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack--andrea.webm"]]
-[Download compressed .webm video (36.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack--andrea--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (55.4M)](https://media.emacsconf.org/2020/emacsconf-2020--24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack--andrea--compressed32.webm)
+[Download compressed .webm video (36.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack--andrea--vp9-q56-video-original-audio.webm)
[EmacsConf2020: first steps towards Emacs becoming your code compass!](https://ag91.github.io/blog/2020/12/11/emacsconf2020-first-steps-towards-emacs-becoming-your-code-compass/)
diff --git a/2020/info/25.md b/2020/info/25.md
index 090cb22e..506f3de5 100644
--- a/2020/info/25.md
+++ b/2020/info/25.md
@@ -1,8 +1,10 @@
# Traverse complex JSON structures with live feedback
Zen Monk Alain M. Lafon
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.webm"]]
-[Download compressed .webm video (15.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon--vp9-q56-video-original-audio.webm)
+[[!template vidid="mainVideo" id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.webm" subtitles="/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt"]]
+[Download compressed .webm video (18.1M)](https://media.emacsconf.org/2020/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon--compressed32.webm)
+[Download compressed .webm video (15.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
If you are working with complex nested JSON structures, you are
probably familiar with jq which is like sed for JSON data and great at
@@ -69,3 +71,179 @@ queries in jq should be valid in jq. Hence, I'm inclined to say
- counsel-jq: <https://github.com/200ok-ch/counsel-jq>.
- organice: <https://github.com/200ok-ch/organice>.
- Entire presentation inside Emacs, with a count down reminder.
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hello, everyone, and welcome to this short lightning talk:" start="00:00:00.799" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Traverse Complex JSON Structures with Live Feedback.&quot;" start="00:00:05.520" video="mainVideo" id=subtitle]]
+[[!template text="This is a pre-recorded talk and part of the EmacsConf 2020 schedule." start="00:00:09.519" video="mainVideo" id=subtitle]]
+[[!template text="This is what we're going to do." start="00:00:18.000" video="mainVideo" id=subtitle]]
+[[!template text="I'll make a quick introduction to the topic at hand." start="00:00:19.439" video="mainVideo" id=subtitle]]
+[[!template text="I'll give you a demonstration of some tools," start="00:00:22.320" video="mainVideo" id=subtitle]]
+[[!template text="and then we'll leave you with the links to said tools." start="00:00:24.400" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Before that, just a little bit about me." start="00:00:29.199" video="mainVideo" id=subtitle]]
+[[!template text="I am the CEO and co-founder of a company based in the Swiss mountains called 200ok.ch." start="00:00:31.679" video="mainVideo" id=subtitle]]
+[[!template text="We are a product incubator and service consultancy," start="00:00:40.399" video="mainVideo" id=subtitle]]
+[[!template text="but we like to spend most or at least as much time as we can" start="00:00:44.879" video="mainVideo" id=subtitle]]
+[[!template text="building free software." start="00:00:50.000" video="mainVideo" id=subtitle]]
+[[!template text="I'm also an ordained Zen monk and abbot of the Lambda Zen temple." start="00:00:52.719" video="mainVideo" id=subtitle]]
+[[!template text="You can reach me anytime on questions regarding Emacs, for example," start="00:00:56.879" video="mainVideo" id=subtitle]]
+[[!template text="at alain@200ok.ch." start="00:01:04.159" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But back to the topic at hand." start="00:01:07.200" video="mainVideo" id=subtitle]]
+[[!template text="The proposition is as following:" start="00:01:09.439" video="mainVideo" id=subtitle]]
+[[!template text="most work on the computer is based on either" start="00:01:11.760" video="mainVideo" id=subtitle]]
+[[!template text="text processing or text consumption." start="00:01:14.000" video="mainVideo" id=subtitle]]
+[[!template text="And very often, the text which you need to process is in a structured format," start="00:01:16.479" video="mainVideo" id=subtitle]]
+[[!template text="for example, in JSON." start="00:01:22.799" video="mainVideo" id=subtitle]]
+[[!template text="That might even be if your job is not programming per se." start="00:01:24.560" video="mainVideo" id=subtitle]]
+[[!template text="Reading through such a bigger chunk of JSON can be non-trivial, however," start="00:01:28.560" video="mainVideo" id=subtitle]]
+[[!template text="while just reading and understanding it" start="00:01:33.119" video="mainVideo" id=subtitle]]
+[[!template text="will be essential to getting your job done." start="00:01:36.479" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let's quickly check out an example JSON file." start="00:01:40.320" video="mainVideo" id=subtitle]]
+[[!template text="This is from the Github API," start="00:01:44.479" video="mainVideo" id=subtitle]]
+[[!template text="which is a request--sorry, the response to a request" start="00:01:47.200" video="mainVideo" id=subtitle]]
+[[!template text="for a specific issue on the github API." start="00:01:52.079" video="mainVideo" id=subtitle]]
+[[!template text="So let's quickly check that one out." start="00:01:54.640" video="mainVideo" id=subtitle]]
+[[!template text="Okay. So here it is open, and we can already see" start="00:01:58.799" video="mainVideo" id=subtitle]]
+[[!template text="that there is lots of stuff going on here." start="00:02:01.920" video="mainVideo" id=subtitle]]
+[[!template text="It's 200 lines." start="00:02:05.439" video="mainVideo" id=subtitle]]
+[[!template text="It's not going to be very easy" start="00:02:07.360" video="mainVideo" id=subtitle]]
+[[!template text="just to find out what are the top level things in here," start="00:02:09.200" video="mainVideo" id=subtitle]]
+[[!template text="what are the top level attributes." start="00:02:11.840" video="mainVideo" id=subtitle]]
+[[!template text="Of course I can do this, and maybe do it by hand, but that doesn't scale." start="00:02:13.360" video="mainVideo" id=subtitle]]
+[[!template text="I can use cool Emacs facilities like the hideshow-mode" start="00:02:17.840" video="mainVideo" id=subtitle]]
+[[!template text="and try to fold all the things that are top level," start="00:02:21.599" video="mainVideo" id=subtitle]]
+[[!template text="but that also doesn't really scale." start="00:02:24.720" video="mainVideo" id=subtitle]]
+[[!template text="There must be a better way." start="00:02:27.200" video="mainVideo" id=subtitle]]
+[[!template text="Of course there is. There is prior art." start="00:02:29.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There is a tool called jq." start="00:02:32.000" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to quote the USP (unique selling proposition) from their website:" start="00:02:34.080" video="mainVideo" id=subtitle]]
+[[!template text="jq is like sed for JSON data." start="00:02:37.760" video="mainVideo" id=subtitle]]
+[[!template text="you can use it to slice and filter and map and transform structured data" start="00:02:42.000" video="mainVideo" id=subtitle]]
+[[!template text="with the same ease that" start="00:02:46.319" video="mainVideo" id=subtitle]]
+[[!template text="sed, awk, grep, and friends let you play with text." start="00:02:47.840" video="mainVideo" id=subtitle]]
+[[!template text="Let me give you a quick demonstration of it." start="00:02:54.000" video="mainVideo" id=subtitle]]
+[[!template text="By the way, it's written in portable C." start="00:02:56.879" video="mainVideo" id=subtitle]]
+[[!template text="It has zero runtime dependency, so it's very easy to get started with it" start="00:02:59.040" video="mainVideo" id=subtitle]]
+[[!template text="and use it on pretty much any UNIX-based computer." start="00:03:03.519" video="mainVideo" id=subtitle]]
+[[!template text="Sorry, no, Linux-based computer, apologies." start="00:03:09.840" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay, so let's explore a JSON file with it." start="00:03:14.000" video="mainVideo" id=subtitle]]
+[[!template text="It's a command line tool," start="00:03:18.720" video="mainVideo" id=subtitle]]
+[[!template text="and it has a very simple command line syntax." start="00:03:20.000" video="mainVideo" id=subtitle]]
+[[!template text="So you call the binary and then you give it a query and a file," start="00:03:24.000" video="mainVideo" id=subtitle]]
+[[!template text="and then it will return its answer." start="00:03:29.840" video="mainVideo" id=subtitle]]
+[[!template text="So, for example, if I want the top level keys," start="00:03:32.560" video="mainVideo" id=subtitle]]
+[[!template text="I will just say jq keys the file" start="00:03:35.440" video="mainVideo" id=subtitle]]
+[[!template text="and it will return the keys." start="00:03:38.000" video="mainVideo" id=subtitle]]
+[[!template text="Simple as that. So let's check this out in a real shell." start="00:03:39.840" video="mainVideo" id=subtitle]]
+[[!template text="Here I am in eshell." start="00:03:44.400" video="mainVideo" id=subtitle]]
+[[!template text="Let's run jq keys on the Github issue comment." start="00:03:46.879" video="mainVideo" id=subtitle]]
+[[!template text="We can see that we have actually received a list back here" start="00:03:51.440" video="mainVideo" id=subtitle]]
+[[!template text="with the top-level things." start="00:03:58.799" video="mainVideo" id=subtitle]]
+[[!template text="So this issue... It looks very interesting." start="00:04:00.319" video="mainVideo" id=subtitle]]
+[[!template text="Let's ask it to give me more information on this issue." start="00:04:02.879" video="mainVideo" id=subtitle]]
+[[!template text="Then it's hairy again. That's a lot of stuff." start="00:04:07.360" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I mean, lucky for us, we are in Emacs here," start="00:04:11.360" video="mainVideo" id=subtitle]]
+[[!template text="so we can use nice shortcuts." start="00:04:14.560" video="mainVideo" id=subtitle]]
+[[!template text="We can copy this. We can go in here, just select that," start="00:04:16.720" video="mainVideo" id=subtitle]]
+[[!template text="get that out or something like this." start="00:04:22.000" video="mainVideo" id=subtitle]]
+[[!template text="But still, this is not really the best way to do that, right?" start="00:04:24.160" video="mainVideo" id=subtitle]]
+[[!template text="it gets kind of tedious." start="00:04:32.320" video="mainVideo" id=subtitle]]
+[[!template text="At this point the output can be humongous." start="00:04:34.080" video="mainVideo" id=subtitle]]
+[[!template text="The shell is not really the best place to read through such big output." start="00:04:37.680" video="mainVideo" id=subtitle]]
+[[!template text="I mean, eshell is probably one of the better shells for this," start="00:04:41.919" video="mainVideo" id=subtitle]]
+[[!template text="because it's just a regular Emacs buffer," start="00:04:45.759" video="mainVideo" id=subtitle]]
+[[!template text="but still, it's not really the best tool." start="00:04:47.919" video="mainVideo" id=subtitle]]
+[[!template text="I need to repeat the command all the time" start="00:04:50.720" video="mainVideo" id=subtitle]]
+[[!template text="until I finally build the right query." start="00:04:53.680" video="mainVideo" id=subtitle]]
+[[!template text="And all the time, I lose my focus," start="00:04:56.000" video="mainVideo" id=subtitle]]
+[[!template text="I lose what I'm currently looking at." start="00:04:59.840" video="mainVideo" id=subtitle]]
+[[!template text="I'm seeing the new result." start="00:05:02.800" video="mainVideo" id=subtitle]]
+[[!template new="1" text="It would be so much nicer to have live feedback." start="00:05:05.520" video="mainVideo" id=subtitle]]
+[[!template text="When working with Emacs, we're quite used to that." start="00:05:08.160" video="mainVideo" id=subtitle]]
+[[!template text="So there should be an option." start="00:05:10.720" video="mainVideo" id=subtitle]]
+[[!template text="And of course there is. It's Emacs, right," start="00:05:12.320" video="mainVideo" id=subtitle]]
+[[!template text="so you can do anything." start="00:05:15.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="There is various good tools for completion in Emacs." start="00:05:17.759" video="mainVideo" id=subtitle]]
+[[!template text="I used ivy for this." start="00:05:22.960" video="mainVideo" id=subtitle]]
+[[!template text="I'm going to quote the USP for ivy." start="00:05:26.000" video="mainVideo" id=subtitle]]
+[[!template text="ivy is a generic completion mechanism for Emacs." start="00:05:29.039" video="mainVideo" id=subtitle]]
+[[!template text="While it operates similarly to other completion schemes such as icomplete mode," start="00:05:32.639" video="mainVideo" id=subtitle]]
+[[!template text="ivy aims to be more efficient, smaller, simpler, and smoother to use," start="00:05:37.919" video="mainVideo" id=subtitle]]
+[[!template text="yet highly customizable." start="00:05:42.160" video="mainVideo" id=subtitle]]
+[[!template text="And that's true." start="00:05:45.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="One of the cool things of ivy" start="00:05:46.479" video="mainVideo" id=subtitle]]
+[[!template text="compared to other completion mechanisms in Emacs" start="00:05:49.440" video="mainVideo" id=subtitle]]
+[[!template text="is that it can be used on dynamic data." start="00:05:54.320" video="mainVideo" id=subtitle]]
+[[!template text="So usually completion works on a static input." start="00:05:59.120" video="mainVideo" id=subtitle]]
+[[!template text="For example, you're in a buffer, a text buffer," start="00:06:02.400" video="mainVideo" id=subtitle]]
+[[!template text="and you use isearch maybe with ido-mode," start="00:06:05.360" video="mainVideo" id=subtitle]]
+[[!template text="and you find your results. That's all nice." start="00:06:09.600" video="mainVideo" id=subtitle]]
+[[!template text="However, if I want to search on dynamic data," start="00:06:13.360" video="mainVideo" id=subtitle]]
+[[!template text="that doesn't work." start="00:06:19.600" video="mainVideo" id=subtitle]]
+[[!template text="So whenever I type in my query for jq," start="00:06:20.720" video="mainVideo" id=subtitle]]
+[[!template text="I actually need to call the jq binary," start="00:06:24.880" video="mainVideo" id=subtitle]]
+[[!template text="and it will give a different result set back." start="00:06:28.000" video="mainVideo" id=subtitle]]
+[[!template text="So it's a really dynamic mechanism that we need here." start="00:06:30.720" video="mainVideo" id=subtitle]]
+[[!template text="It's much more like a search engine." start="00:06:36.160" video="mainVideo" id=subtitle]]
+[[!template new="1" text="ivy luckily has something built in," start="00:06:38.240" video="mainVideo" id=subtitle]]
+[[!template text="and it's called counsel." start="00:06:41.440" video="mainVideo" id=subtitle]]
+[[!template text="So I used counsel and jq and combined them," start="00:06:43.520" video="mainVideo" id=subtitle]]
+[[!template text="and built a new package" start="00:06:47.360" video="mainVideo" id=subtitle]]
+[[!template text="with which we can use Emacs and jq" start="00:06:49.199" video="mainVideo" id=subtitle]]
+[[!template text="to have live feedback." start="00:06:52.960" video="mainVideo" id=subtitle]]
+[[!template text="It's very easy to use." start="00:06:56.000" video="mainVideo" id=subtitle]]
+[[!template text="So you just call counsel-jq" start="00:06:57.759" video="mainVideo" id=subtitle]]
+[[!template text="on a buffer containing JSON." start="00:06:59.840" video="mainVideo" id=subtitle]]
+[[!template text="For example, the one we have here." start="00:07:02.160" video="mainVideo" id=subtitle]]
+[[!template text="Let's call counsel-jq on it," start="00:07:04.319" video="mainVideo" id=subtitle]]
+[[!template text="and we already get a default query," start="00:07:06.800" video="mainVideo" id=subtitle]]
+[[!template text="the dot query, which just gives us the same file." start="00:07:10.080" video="mainVideo" id=subtitle]]
+[[!template text="But now we can change it." start="00:07:14.639" video="mainVideo" id=subtitle]]
+[[!template text="For example, find all the keys in here." start="00:07:16.240" video="mainVideo" id=subtitle]]
+[[!template text="And then we see I had this issue." start="00:07:18.639" video="mainVideo" id=subtitle]]
+[[!template text="This was the one that we were interested in." start="00:07:20.319" video="mainVideo" id=subtitle]]
+[[!template text="So let's find more information on the issue." start="00:07:22.800" video="mainVideo" id=subtitle]]
+[[!template text="What keys does it have actually have?" start="00:07:25.599" video="mainVideo" id=subtitle]]
+[[!template text="It has assignees. That interests me." start="00:07:28.720" video="mainVideo" id=subtitle]]
+[[!template text="So let's check out the assignees in here." start="00:07:31.680" video="mainVideo" id=subtitle]]
+[[!template text="There's two of them, but I'm only interested in the first one." start="00:07:34.800" video="mainVideo" id=subtitle]]
+[[!template text="I'm making stuff up as I go here, of course." start="00:07:39.759" video="mainVideo" id=subtitle]]
+[[!template text="Whenever I hit enter, I get a new buffer" start="00:07:43.599" video="mainVideo" id=subtitle]]
+[[!template text="which just shows me this particular result" start="00:07:47.039" video="mainVideo" id=subtitle]]
+[[!template text="for the particular query that I entered." start="00:07:52.639" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So let me do that again." start="00:07:55.599" video="mainVideo" id=subtitle]]
+[[!template text="We are in here. We are looking at a JSON file." start="00:07:57.680" video="mainVideo" id=subtitle]]
+[[!template text="This can be very, very big." start="00:08:04.000" video="mainVideo" id=subtitle]]
+[[!template text="Doesn't also need to be a file." start="00:08:05.840" video="mainVideo" id=subtitle]]
+[[!template text="Just needs to be a buffer." start="00:08:07.280" video="mainVideo" id=subtitle]]
+[[!template text="You call counsel-jq on it," start="00:08:09.520" video="mainVideo" id=subtitle]]
+[[!template text="and you can do any kind of query on it." start="00:08:11.360" video="mainVideo" id=subtitle]]
+[[!template text="For example, let's see if there is a URL here." start="00:08:14.319" video="mainVideo" id=subtitle]]
+[[!template text="Yes, there's a URL." start="00:08:18.080" video="mainVideo" id=subtitle]]
+[[!template text="Let's see if there's a repository here." start="00:08:19.440" video="mainVideo" id=subtitle]]
+[[!template text="Repository. No, there isn't." start="00:08:22.827" video="mainVideo" id=subtitle]]
+[[!template text="What was it called? Issue. Keys. Repository URL, it was called." start="00:08:24.639" video="mainVideo" id=subtitle]]
+[[!template text="So let's see issue repository URL," start="00:08:33.440" video="mainVideo" id=subtitle]]
+[[!template text="and then we see." start="00:08:38.240" video="mainVideo" id=subtitle]]
+[[!template text="So apparently this issue comment is for a repository called organice." start="00:08:39.519" video="mainVideo" id=subtitle]]
+[[!template text="I wonder what that might be." start="00:08:44.800" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Okay. So that was a very short introduction to counsel-jq." start="00:08:47.839" video="mainVideo" id=subtitle]]
+[[!template text="You can see the timer here." start="00:08:52.640" video="mainVideo" id=subtitle]]
+[[!template text="I only have one minute left to go, so I'm going to leave" start="00:08:54.240" video="mainVideo" id=subtitle]]
+[[!template text="with a very, very short introduction to the counsel-jq code." start="00:08:57.440" video="mainVideo" id=subtitle]]
+[[!template text="It's not even 60 lines of elisp," start="00:09:02.880" video="mainVideo" id=subtitle]]
+[[!template text="so building something like this is very, very easy." start="00:09:06.000" video="mainVideo" id=subtitle]]
+[[!template text="I would encourage you to go and read through the code in your own time," start="00:09:09.600" video="mainVideo" id=subtitle]]
+[[!template text="if you're interested in building something like this." start="00:09:14.560" video="mainVideo" id=subtitle]]
+[[!template text="If you're interested in just using jq or you're done," start="00:09:17.519" video="mainVideo" id=subtitle]]
+[[!template text="these are the links to all the tools." start="00:09:22.720" video="mainVideo" id=subtitle]]
+[[!template text="counsel-jq, of course, is readily available on MELPA." start="00:09:24.320" video="mainVideo" id=subtitle]]
+[[!template text="Also developed under the AGPL license on Github." start="00:09:28.240" video="mainVideo" id=subtitle]]
+[[!template text="And this organice thing, by the way, it's" start="00:09:32.959" video="mainVideo" id=subtitle]]
+[[!template text="Org Mode for mobile and desktop browsers." start="00:09:36.080" video="mainVideo" id=subtitle]]
+[[!template text="Also a great free software tool maybe that interests you." start="00:09:38.560" video="mainVideo" id=subtitle]]
+[[!template text="Thank you for listening. Have a great time." start="00:09:43.120" video="mainVideo" id=subtitle]]
+[[!template text="10 seconds left. I am going to stop this now." start="00:09:46.240" video="mainVideo" id=subtitle]]
+[[!template text="Enjoy EmacsConf. Have a great day." start="00:09:49.360" video="mainVideo" id=subtitle]]
diff --git a/2020/info/26.md b/2020/info/26.md
index eed6681e..50463949 100644
--- a/2020/info/26.md
+++ b/2020/info/26.md
@@ -1,11 +1,14 @@
# Emacs as a Highschooler: How It Changed My Life
Pierce Wang
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.webm"]]
-[Download compressed .webm video (9.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang--vp9-q56-video-original-audio.webm)
+[[!template vidid="mainVideo" id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.webm" subtitles="/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt"]]
+[Download compressed .webm video (16.7M)](https://media.emacsconf.org/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang--compressed32.webm)
+[Download compressed .webm video (9.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang.webm" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (7.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (20.9M)](https://media.emacsconf.org/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang--compressed32.webm)
+[Download compressed Q&A .webm video (7.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang--vp9-q56-video-original-audio.webm)
Could Emacs be humanity's solution to the turbulent years of
adolescence? So much more than a text editor, Emacs changed the way I
@@ -68,3 +71,169 @@ exporting.
- Tried various note taking tools - settled on Org mode in Emacs.
- YouTube channel: <https://www.youtube.com/user/eywang/>.
- Emacs config: <https://piercegwang.github.io/emacsd/init>.
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hello and welcome to my EmacsConf lightning talk." start="00:00:01.360" video="mainVideo" id=subtitle]]
+[[!template text="Today I'll be talking about my journey into Emacs as a high schooler" start="00:00:05.200" video="mainVideo" id=subtitle]]
+[[!template text="and how it has changed my life." start="00:00:09.840" video="mainVideo" id=subtitle]]
+[[!template text="Right. So who am I? I am a senior at Stanford Online High School," start="00:00:14.400" video="mainVideo" id=subtitle]]
+[[!template text="and I am also a violinist." start="00:00:19.520" video="mainVideo" id=subtitle]]
+[[!template text="I started violin when I was two and a half," start="00:00:22.800" video="mainVideo" id=subtitle]]
+[[!template text="and I have been keeping it up ever since." start="00:00:25.199" video="mainVideo" id=subtitle]]
+[[!template text="Violin is a huge part of my life," start="00:00:28.560" video="mainVideo" id=subtitle]]
+[[!template text="and I am very much a musician at heart." start="00:00:30.240" video="mainVideo" id=subtitle]]
+[[!template text="I am also a somewhat capable programmer." start="00:00:33.360" video="mainVideo" id=subtitle]]
+[[!template text="I've done a lot of informal programming in the past," start="00:00:36.239" video="mainVideo" id=subtitle]]
+[[!template text="and this year I'm taking my first AP Comp. Sci. course in my high school." start="00:00:39.280" video="mainVideo" id=subtitle]]
+[[!template text="And so I've done a lot of side projects," start="00:00:45.840" video="mainVideo" id=subtitle]]
+[[!template text="mainly in Python, and some very short scripts in Elisp." start="00:00:51.039" video="mainVideo" id=subtitle]]
+[[!template text="And last but not least, I am a tinker." start="00:00:56.800" video="mainVideo" id=subtitle]]
+[[!template text="I love to play around with things and see what I can do better," start="00:00:59.840" video="mainVideo" id=subtitle]]
+[[!template text="and just have as much fun as possible." start="00:01:05.280" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So how did I find Emacs?" start="00:01:10.880" video="mainVideo" id=subtitle]]
+[[!template text="I discovered it actually through a talk, funnily enough," start="00:01:15.040" video="mainVideo" id=subtitle]]
+[[!template text="at a Vim conference given by Aaron Bieber, titled:" start="00:01:18.880" video="mainVideo" id=subtitle]]
+[[!template text="&quot;Evil Mode or How I Learned to Stop Worrying and Love Emacs.&quot;" start="00:01:23.947" video="mainVideo" id=subtitle]]
+[[!template text="I watched that talk a couple times over," start="00:01:28.320" video="mainVideo" id=subtitle]]
+[[!template text="just marveling at all the wonderful things that he could do in Emacs." start="00:01:31.439" video="mainVideo" id=subtitle]]
+[[!template text="And being a previous Vim user myself," start="00:01:35.759" video="mainVideo" id=subtitle]]
+[[!template text="I found it very enticing to be able to have" start="00:01:38.799" video="mainVideo" id=subtitle]]
+[[!template text="the evil-mode package and very quickly switch to Emacs." start="00:01:42.399" video="mainVideo" id=subtitle]]
+[[!template new="1" text="At the time, I was also in my sophomore year," start="00:01:47.040" video="mainVideo" id=subtitle]]
+[[!template text="and so I had had a sort of a note-taking system in the past." start="00:01:49.680" video="mainVideo" id=subtitle]]
+[[!template text="But it was not good, and I needed a more organized note-taking system." start="00:01:56.320" video="mainVideo" id=subtitle]]
+[[!template text="My parents had suggested paper for a while," start="00:02:01.680" video="mainVideo" id=subtitle]]
+[[!template text="and there was the whole organization part of that," start="00:02:04.240" video="mainVideo" id=subtitle]]
+[[!template text="but that did not really work out for me." start="00:02:09.759" video="mainVideo" id=subtitle]]
+[[!template text="And so I was trying to find this better note-taking system," start="00:02:12.080" video="mainVideo" id=subtitle]]
+[[!template text="and it was very hard." start="00:02:16.239" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I had two main criteria which I did not define at the time," start="00:02:19.440" video="mainVideo" id=subtitle]]
+[[!template text="but I realized was really what I was looking for." start="00:02:23.520" video="mainVideo" id=subtitle]]
+[[!template text="First of all, it had to be flexible enough," start="00:02:26.640" video="mainVideo" id=subtitle]]
+[[!template text="and second of all, I had to have control over the data." start="00:02:29.599" video="mainVideo" id=subtitle]]
+[[!template text="And so through this process," start="00:02:33.680" video="mainVideo" id=subtitle]]
+[[!template text="I actually went through a bunch of note-taking softwares rather systematically." start="00:02:36.239" video="mainVideo" id=subtitle]]
+[[!template text="I went through Google Docs, which very much did not work out." start="00:02:41.920" video="mainVideo" id=subtitle]]
+[[!template text="I also went through Evernote which also was not great for me," start="00:02:47.519" video="mainVideo" id=subtitle]]
+[[!template text="and OneNote, which I settled on for a little while," start="00:02:52.080" video="mainVideo" id=subtitle]]
+[[!template text="but it did not meet these criteria," start="00:02:55.200" video="mainVideo" id=subtitle]]
+[[!template text="particularly the second one." start="00:02:58.800" video="mainVideo" id=subtitle]]
+[[!template text="I had taken some notes and I wanted to export it," start="00:03:00.879" video="mainVideo" id=subtitle]]
+[[!template text="and OneNote did not let me do that." start="00:03:03.840" video="mainVideo" id=subtitle]]
+[[!template text="It was PDF. Horribly-organized PDF." start="00:03:07.519" video="mainVideo" id=subtitle]]
+[[!template text="And that's when I knew I needed some change." start="00:03:12.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I discovered Emacs through this talk," start="00:03:17.440" video="mainVideo" id=subtitle]]
+[[!template text="and through the wonderful features of Org Mode." start="00:03:21.519" video="mainVideo" id=subtitle]]
+[[!template text="This is my first journal entry in Emacs." start="00:03:27.040" video="mainVideo" id=subtitle]]
+[[!template text="I had been playing with it for one day," start="00:03:30.080" video="mainVideo" id=subtitle]]
+[[!template text="and I was on the Org Agenda," start="00:03:34.000" video="mainVideo" id=subtitle]]
+[[!template text="and I happened to press I," start="00:03:35.760" video="mainVideo" id=subtitle]]
+[[!template text="which for the Emacs keybinding is the default for diary entry." start="00:03:38.159" video="mainVideo" id=subtitle]]
+[[!template text="I was very excited." start="00:03:43.040" video="mainVideo" id=subtitle]]
+[[!template text="I shouldn't stay on the slide too long lest you read it." start="00:03:45.440" video="mainVideo" id=subtitle]]
+[[!template text="So let's move on to the next one." start="00:03:50.239" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So the learning curve for me, I think," start="00:03:53.760" video="mainVideo" id=subtitle]]
+[[!template text="particularly being an ex-Vim user," start="00:03:57.200" video="mainVideo" id=subtitle]]
+[[!template text="evil-mode made it very easy to switch." start="00:04:00.480" video="mainVideo" id=subtitle]]
+[[!template text="Thankfully, there was the Emacs reference sheet," start="00:04:03.760" video="mainVideo" id=subtitle]]
+[[!template text="and having evil-mode to switch between texts..." start="00:04:07.439" video="mainVideo" id=subtitle]]
+[[!template text="Whether it be editing a text file," start="00:04:16.160" video="mainVideo" id=subtitle]]
+[[!template text="or going to other parts of just Emacs in general," start="00:04:17.919" video="mainVideo" id=subtitle]]
+[[!template text="I think Vim really helped with making me feel comfortable" start="00:04:21.600" video="mainVideo" id=subtitle]]
+[[!template text="within this new environment." start="00:04:25.520" video="mainVideo" id=subtitle]]
+[[!template text="So, having that experience, I also wasn't new" start="00:04:28.000" video="mainVideo" id=subtitle]]
+[[!template text="to the keybind-based world." start="00:04:32.160" video="mainVideo" id=subtitle]]
+[[!template text="I have been very comfortable with the computer" start="00:04:33.759" video="mainVideo" id=subtitle]]
+[[!template text="and the keyboard for most of my life," start="00:04:36.320" video="mainVideo" id=subtitle]]
+[[!template text="and so it was not a totally new environment for me." start="00:04:40.160" video="mainVideo" id=subtitle]]
+[[!template new="1" text="I also spent a lot of time looking at the Emacs reference sheet," start="00:04:45.520" video="mainVideo" id=subtitle]]
+[[!template text="Just thinking about trying to find all of the different functions." start="00:04:49.360" video="mainVideo" id=subtitle]]
+[[!template text="If I didn't know what something was, then I queried it in Emacs," start="00:04:54.720" video="mainVideo" id=subtitle]]
+[[!template text="and then I figured out what it was." start="00:04:58.720" video="mainVideo" id=subtitle]]
+[[!template text="And that was one of the best ways for me to discover" start="00:05:01.199" video="mainVideo" id=subtitle]]
+[[!template text="all of the capabilities of Emacs." start="00:05:05.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Thirdly, of course, the self-documenting feature" start="00:05:09.360" video="mainVideo" id=subtitle]]
+[[!template text="or nature of Emacs and narrowing frameworks such as helm" start="00:05:12.800" video="mainVideo" id=subtitle]]
+[[!template text="really helped find things, especially for M-x." start="00:05:17.120" video="mainVideo" id=subtitle]]
+[[!template text="For a while, I was just..." start="00:05:21.360" video="mainVideo" id=subtitle]]
+[[!template text="I would go about my day, and if I pressed a keybind that I didn't know what it did," start="00:05:25.919" video="mainVideo" id=subtitle]]
+[[!template text="I would do the lossage and see the list of keybinds that I had pressed" start="00:05:30.720" video="mainVideo" id=subtitle]]
+[[!template text="and tried to find that one, and query the function and what not." start="00:05:37.039" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So yeah. And now we jump to now." start="00:05:43.039" video="mainVideo" id=subtitle]]
+[[!template text="So there is at least one moment in each day when I think" start="00:05:48.160" video="mainVideo" id=subtitle]]
+[[!template text="how would I live without Emacs," start="00:05:53.280" video="mainVideo" id=subtitle]]
+[[!template text="particularly now during my senior year in high school." start="00:05:55.600" video="mainVideo" id=subtitle]]
+[[!template text="Things are very busy with school, violin, and other side projects." start="00:05:59.120" video="mainVideo" id=subtitle]]
+[[!template text="It's pretty crazy, and so Emacs and Org Mode has really helped me stay" start="00:06:04.880" video="mainVideo" id=subtitle]]
+[[!template text="on track with everything." start="00:06:12.720" video="mainVideo" id=subtitle]]
+[[!template text="And the flexibility of these software" start="00:06:14.479" video="mainVideo" id=subtitle]]
+[[!template text="is being able to have things in different files," start="00:06:16.319" video="mainVideo" id=subtitle]]
+[[!template text="notes within the tasks," start="00:06:19.919" video="mainVideo" id=subtitle]]
+[[!template text="all of that stuff has been truly a lifesaver." start="00:06:21.600" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And so I think I can confidently say" start="00:06:25.840" video="mainVideo" id=subtitle]]
+[[!template text="that I have found Emacs to be the perfect software for me" start="00:06:28.400" video="mainVideo" id=subtitle]]
+[[!template text="over the past two years of using Emacs." start="00:06:35.280" video="mainVideo" id=subtitle]]
+[[!template text="Now it is about two years and two months." start="00:06:38.639" video="mainVideo" id=subtitle]]
+[[!template text="I have built a fairly well organized" start="00:06:42.240" video="mainVideo" id=subtitle]]
+[[!template text="2000+ line Org literate config." start="00:06:45.039" video="mainVideo" id=subtitle]]
+[[!template text="I actually started with an Elisp config," start="00:06:49.520" video="mainVideo" id=subtitle]]
+[[!template text="just the vanilla Emacs with evil-mode," start="00:06:53.840" video="mainVideo" id=subtitle]]
+[[!template text="and I built it up from there." start="00:06:56.800" video="mainVideo" id=subtitle]]
+[[!template text="Eventually I switched to Org literate configs," start="00:06:59.039" video="mainVideo" id=subtitle]]
+[[!template text="and used that to organize the snippets" start="00:07:02.400" video="mainVideo" id=subtitle]]
+[[!template text="that I was putting in there." start="00:07:05.840" video="mainVideo" id=subtitle]]
+[[!template text="So yeah, this is really my workflow now." start="00:07:08.639" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Currently about 90% of everything I do on my computer is in Emacs." start="00:07:14.000" video="mainVideo" id=subtitle]]
+[[!template text="The most notable things, of course--" start="00:07:18.960" video="mainVideo" id=subtitle]]
+[[!template text="the list is far too long to put on one slide--" start="00:07:21.360" video="mainVideo" id=subtitle]]
+[[!template text="but I do a lot of my programming in Emacs," start="00:07:25.280" video="mainVideo" id=subtitle]]
+[[!template text="mainly Python and Elisp." start="00:07:28.160" video="mainVideo" id=subtitle]]
+[[!template text="Because of my AP Comp. Sci. class," start="00:07:31.280" video="mainVideo" id=subtitle]]
+[[!template text="I have to do Java as well," start="00:07:33.199" video="mainVideo" id=subtitle]]
+[[!template text="and thank goodness Emacs has wonderful support for that as well." start="00:07:35.199" video="mainVideo" id=subtitle]]
+[[!template text="Also, I do all of my school assignments," start="00:07:41.840" video="mainVideo" id=subtitle]]
+[[!template text="more or less, in Emacs." start="00:07:45.840" video="mainVideo" id=subtitle]]
+[[!template text="Essay writing I do in Org Mode, and I have some template files," start="00:07:47.840" video="mainVideo" id=subtitle]]
+[[!template text="template Org files which I just include at the top," start="00:07:51.919" video="mainVideo" id=subtitle]]
+[[!template text="and then I can export easily to LaTeX and a beautiful PDF." start="00:07:55.039" video="mainVideo" id=subtitle]]
+[[!template text="Math, physics, same thing." start="00:08:01.440" video="mainVideo" id=subtitle]]
+[[!template text="LaTeX fragments are a lifesaver, and also really pretty." start="00:08:03.440" video="mainVideo" id=subtitle]]
+[[!template text="I take notes on basically everything." start="00:08:09.599" video="mainVideo" id=subtitle]]
+[[!template text="At first, I had things separate," start="00:08:13.199" video="mainVideo" id=subtitle]]
+[[!template text="and then I started sort of putting it all into one notes.org file," start="00:08:15.120" video="mainVideo" id=subtitle]]
+[[!template text="or most of it into one file," start="00:08:19.680" video="mainVideo" id=subtitle]]
+[[!template text="and that has actually worked out surprisingly well," start="00:08:22.479" video="mainVideo" id=subtitle]]
+[[!template text="especially with all the searching features of agenda and what not." start="00:08:24.960" video="mainVideo" id=subtitle]]
+[[!template text="And I also use mail." start="00:08:30.442" video="mainVideo" id=subtitle]]
+[[!template text="I recently made the switch, probably about one or two months ago," start="00:08:33.440" video="mainVideo" id=subtitle]]
+[[!template text="and it has been one of the best switches I've ever had," start="00:08:37.680" video="mainVideo" id=subtitle]]
+[[!template text="especially given connecting to tasks all of this wonderful stuff." start="00:08:42.399" video="mainVideo" id=subtitle]]
+[[!template text="Just putting even more in Emacs is always a good thing, I found." start="00:08:47.839" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So reflecting back on my journey," start="00:08:54.160" video="mainVideo" id=subtitle]]
+[[!template text="I think one of the most important things" start="00:08:56.959" video="mainVideo" id=subtitle]]
+[[!template text="was just having a reason to use it." start="00:08:59.600" video="mainVideo" id=subtitle]]
+[[!template text="When I came to Emacs I had something that I was looking for," start="00:09:01.440" video="mainVideo" id=subtitle]]
+[[!template text="and as soon as I found it, I delved right in," start="00:09:06.080" video="mainVideo" id=subtitle]]
+[[!template text="and I started using it for that thing." start="00:09:09.839" video="mainVideo" id=subtitle]]
+[[!template text="So I was sort of forced to take the time to read the docs" start="00:09:12.720" video="mainVideo" id=subtitle]]
+[[!template text="and figure out what functions I needed to function" start="00:09:16.240" video="mainVideo" id=subtitle]]
+[[!template text="and how I was going to put my workflow," start="00:09:20.880" video="mainVideo" id=subtitle]]
+[[!template text="and also, of course, the desire to tinker." start="00:09:25.839" video="mainVideo" id=subtitle]]
+[[!template text="So, really, what's next for me is just wanting to become" start="00:09:30.399" video="mainVideo" id=subtitle]]
+[[!template text="a more active member of the Emacs community." start="00:09:35.839" video="mainVideo" id=subtitle]]
+[[!template text="I want to give back, and I think this talk" start="00:09:38.640" video="mainVideo" id=subtitle]]
+[[!template text="is sort of the first step to that" start="00:09:40.959" video="mainVideo" id=subtitle]]
+[[!template text="being a more active part of this community" start="00:09:43.760" video="mainVideo" id=subtitle]]
+[[!template text="that has, indirectly, perhaps, but just really helped me" start="00:09:46.399" video="mainVideo" id=subtitle]]
+[[!template text="become a better and more organized human being." start="00:09:52.720" video="mainVideo" id=subtitle]]
+[[!template text="I have some package ideas that I'm slowly working on," start="00:09:55.839" video="mainVideo" id=subtitle]]
+[[!template text="and yeah, I just hope to spread the word." start="00:10:00.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So thank you very much for listening to my lightning talk." start="00:10:05.920" video="mainVideo" id=subtitle]]
+[[!template text="If you'd like to contact me here are" start="00:10:09.360" video="mainVideo" id=subtitle]]
+[[!template text="three modes of or two modes of communication." start="00:10:11.360" video="mainVideo" id=subtitle]]
+[[!template text="I will be on IRC more soon," start="00:10:14.800" video="mainVideo" id=subtitle]]
+[[!template text="and you can always email me if you have any questions." start="00:10:17.600" video="mainVideo" id=subtitle]]
+[[!template text="You can also search me on Youtube: Pierce Wang violin." start="00:10:22.079" video="mainVideo" id=subtitle]]
+[[!template text="Thank you very much and I hope you enjoy the rest of the conference." start="00:10:25.519" video="mainVideo" id=subtitle]]
diff --git a/2020/info/27.md b/2020/info/27.md
index bc19e6c2..d7a5c1b5 100644
--- a/2020/info/27.md
+++ b/2020/info/27.md
@@ -1,8 +1,10 @@
# State of Retro Gaming in Emacs
Vasilij "wasamasa" Schneidermann
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.webm"]]
-[Download compressed .webm video (7.2M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann--vp9-q56-video-original-audio.webm)
+[[!template vidid=mainVideo id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.webm" subtitles="/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt"]]
+[Download compressed .webm video (9.6M)](https://media.emacsconf.org/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann--compressed32.webm)
+[Download compressed .webm video (7.2M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
- [chip8 demo - alien, .webm video, 720p, 2M](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-alien--vasilij-wasamasa-schneidermann.webm)
- [chip8 demo - brix, .webm video, 720p, 1M](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-brix--vasilij-wasamasa-schneidermann.webm)
@@ -71,3 +73,216 @@ constraints.
- Repository available at <https://depp.brause.cc/chip8.el/>.
- Blog post available at
<https://emacsninja.com/posts/smooth-video-game-emulation-in-emacs.html>.
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hello everyone and welcome to my talk, &quot;The State of Retro Gaming and Emacs.&quot;" start="00:00:00.880" video="mainVideo" id=subtitle]]
+[[!template text="First of all, a little bit about myself." start="00:00:06.960" video="mainVideo" id=subtitle]]
+[[!template text="My name is Vasilij Schneidermann. I'm 28 years old." start="00:00:08.639" video="mainVideo" id=subtitle]]
+[[!template text="I work as a cyber security consultant at msg systems," start="00:00:12.000" video="mainVideo" id=subtitle]]
+[[!template text="and test other people's web applications" start="00:00:14.719" video="mainVideo" id=subtitle]]
+[[!template text="and review the source code for security problems." start="00:00:17.359" video="mainVideo" id=subtitle]]
+[[!template text="You can reach me by email." start="00:00:20.160" video="mainVideo" id=subtitle]]
+[[!template text="I have my own self-hosted git repositories," start="00:00:22.080" video="mainVideo" id=subtitle]]
+[[!template text="and I have a blog where you can occasionally find new posts by me" start="00:00:25.039" video="mainVideo" id=subtitle]]
+[[!template text="on all kinds of things, not just Emacs things." start="00:00:28.160" video="mainVideo" id=subtitle]]
+[[!template new="1" text="The motivation about this one..." start="00:00:32.160" video="mainVideo" id=subtitle]]
+[[!template text="I found that Emacs is the ultimate procrastination machine," start="00:00:34.559" video="mainVideo" id=subtitle]]
+[[!template text="and there are lots of fun demonstrations." start="00:00:37.600" video="mainVideo" id=subtitle]]
+[[!template text="I'll go over a few of them." start="00:00:39.600" video="mainVideo" id=subtitle]]
+[[!template text="For example, someone made a thing to order salad for himself online," start="00:00:41.200" video="mainVideo" id=subtitle]]
+[[!template text="so he doesn't have to walk over to the shop." start="00:00:45.840" video="mainVideo" id=subtitle]]
+[[!template text="There's plenty of IRC bots. There's some game things." start="00:00:48.239" video="mainVideo" id=subtitle]]
+[[!template text="There's an emulator for the Z-machine which you can use to play zork." start="00:00:51.760" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And so I asked myself, at this point," start="00:00:55.600" video="mainVideo" id=subtitle]]
+[[!template text="can you actually emulate retro games at 60fps?" start="00:00:57.440" video="mainVideo" id=subtitle]]
+[[!template text="I looked around a bit and found some projects," start="00:00:59.920" video="mainVideo" id=subtitle]]
+[[!template text="but none that were actually able to do it at 60fps." start="00:01:02.079" video="mainVideo" id=subtitle]]
+[[!template text="So I set out to do my own one," start="00:01:06.159" video="mainVideo" id=subtitle]]
+[[!template text="and looked out for a console" start="00:01:08.000" video="mainVideo" id=subtitle]]
+[[!template text="that you can actually emulate at that speed," start="00:01:09.200" video="mainVideo" id=subtitle]]
+[[!template text="using Emacs with its very, very limited rendering." start="00:01:11.119" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And here's the project, chip8.el." start="00:01:16.320" video="mainVideo" id=subtitle]]
+[[!template text="It's pretty much finished." start="00:01:19.200" video="mainVideo" id=subtitle]]
+[[!template text="It clocks into under 1000 source lines of code." start="00:01:20.560" video="mainVideo" id=subtitle]]
+[[!template text="It supports the superchip 8 extensions." start="00:01:24.000" video="mainVideo" id=subtitle]]
+[[!template text="It runs at full speed." start="00:01:26.159" video="mainVideo" id=subtitle]]
+[[!template text="All games behave okay, as far as I'm concerned," start="00:01:27.280" video="mainVideo" id=subtitle]]
+[[!template text="and yeah, I'm pretty happy with it." start="00:01:29.600" video="mainVideo" id=subtitle]]
+[[!template text="It's very much the hello world of emulation," start="00:01:31.680" video="mainVideo" id=subtitle]]
+[[!template text="and I might, maybe, do some other emulation projects in the future." start="00:01:34.479" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now, for the section which is the longest:" start="00:01:40.880" video="mainVideo" id=subtitle]]
+[[!template text="bunch of fun facts about chip8.el" start="00:01:43.360" video="mainVideo" id=subtitle]]
+[[!template text="which I've learned during this project." start="00:01:45.439" video="mainVideo" id=subtitle]]
+[[!template text="So what the hell is chip8 anyway?" start="00:01:49.200" video="mainVideo" id=subtitle]]
+[[!template text="First of all, unlike many other emulation game things," start="00:01:51.759" video="mainVideo" id=subtitle]]
+[[!template text="it's not a console, but a VM." start="00:01:54.960" video="mainVideo" id=subtitle]]
+[[!template text="It was designed for easy porting of home computer games." start="00:01:56.799" video="mainVideo" id=subtitle]]
+[[!template text="It wasn't terribly successful," start="00:02:00.000" video="mainVideo" id=subtitle]]
+[[!template text="but there's still a small community of enthusiasts writing games for it," start="00:02:02.320" video="mainVideo" id=subtitle]]
+[[!template text="and there are even a few demos." start="00:02:05.439" video="mainVideo" id=subtitle]]
+[[!template text="This VM has system specs." start="00:02:09.119" video="mainVideo" id=subtitle]]
+[[!template text="It has a very, very simple 8-bit cpu with 16 registers," start="00:02:11.039" video="mainVideo" id=subtitle]]
+[[!template text="and 36 fixed-size instructions." start="00:02:14.720" video="mainVideo" id=subtitle]]
+[[!template text="You have a whole 4 kilobyte of RAM." start="00:02:17.280" video="mainVideo" id=subtitle]]
+[[!template text="You have a stack with 16 return addresses." start="00:02:19.680" video="mainVideo" id=subtitle]]
+[[!template text="The resolution is 64 by 32 black/white pixels." start="00:02:22.080" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Rendering is done by drawing sprites." start="00:02:25.760" video="mainVideo" id=subtitle]]
+[[!template text="These are drawn in XOR mode," start="00:02:28.000" video="mainVideo" id=subtitle]]
+[[!template text="meaning that if you draw a sprite and set a bit," start="00:02:29.200" video="mainVideo" id=subtitle]]
+[[!template text="it just flips over from black to white or white to black." start="00:02:31.840" video="mainVideo" id=subtitle]]
+[[!template text="For sound, you have a monotone buzzer that can just beep at one frequency." start="00:02:35.040" video="mainVideo" id=subtitle]]
+[[!template text="Most unusually, there's a hexadecimal keypad as input," start="00:02:39.360" video="mainVideo" id=subtitle]]
+[[!template text="so the keys are basically zero to nine and a to f." start="00:02:43.120" video="mainVideo" id=subtitle]]
+[[!template text="So how does this whole thing work?" start="00:02:48.480" video="mainVideo" id=subtitle]]
+[[!template text="It runs at an unspecified speed." start="00:02:50.720" video="mainVideo" id=subtitle]]
+[[!template text="You'll probably have to do some fine-tuning" start="00:02:52.400" video="mainVideo" id=subtitle]]
+[[!template text="to find the speed you're happy with." start="00:02:53.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Sound and delay timers exist." start="00:02:56.080" video="mainVideo" id=subtitle]]
+[[!template text="They count down at 60fps down to 0." start="00:02:58.080" video="mainVideo" id=subtitle]]
+[[!template text="This is done so that you can play a sound at some specific time." start="00:03:01.120" video="mainVideo" id=subtitle]]
+[[!template text="The game itself is loaded with a fixed offset into RAM." start="00:03:05.120" video="mainVideo" id=subtitle]]
+[[!template text="The program counter is set to exactly that offset," start="00:03:07.840" video="mainVideo" id=subtitle]]
+[[!template text="and from there it enters the game loop" start="00:03:10.480" video="mainVideo" id=subtitle]]
+[[!template text="where it decodes an instruction," start="00:03:11.920" video="mainVideo" id=subtitle]]
+[[!template text="executes it for the side effects," start="00:03:13.280" video="mainVideo" id=subtitle]]
+[[!template text="and just loops and does this ad infinitum." start="00:03:14.800" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So the game loop was the first thing where we ran into problems." start="00:03:19.599" video="mainVideo" id=subtitle]]
+[[!template text="The usual game approach is to do stuff," start="00:03:22.720" video="mainVideo" id=subtitle]]
+[[!template text="figure out how long to wait," start="00:03:25.120" video="mainVideo" id=subtitle]]
+[[!template text="wait for exactly that much, and repeat." start="00:03:26.640" video="mainVideo" id=subtitle]]
+[[!template text="This doesn't work well in Emacs at all, because, well," start="00:03:29.280" video="mainVideo" id=subtitle]]
+[[!template text="user input, basically." start="00:03:31.680" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is designed to just do whatever it needs to do" start="00:03:34.959" video="mainVideo" id=subtitle]]
+[[!template text="whenever you enter user input" start="00:03:37.760" video="mainVideo" id=subtitle]]
+[[!template text="instead of doing things at one specific time." start="00:03:39.040" video="mainVideo" id=subtitle]]
+[[!template text="If you try to do interruptable sleep, well, you get unpredictable behavior." start="00:03:42.319" video="mainVideo" id=subtitle]]
+[[!template text="For example, it can be the timer doesn't run at all at the next time" start="00:03:46.640" video="mainVideo" id=subtitle]]
+[[!template text="because you've accidentally cancelled it." start="00:03:50.480" video="mainVideo" id=subtitle]]
+[[!template text="If you do uninterruptable sleep, it freezes instead ," start="00:03:52.560" video="mainVideo" id=subtitle]]
+[[!template text="which isn't what we want either." start="00:03:55.120" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I went for timers, which forced me to do inversion of control," start="00:03:56.720" video="mainVideo" id=subtitle]]
+[[!template text="meaning that I have to write code in the style" start="00:04:00.560" video="mainVideo" id=subtitle]]
+[[!template text="where it just calls timer," start="00:04:02.560" video="mainVideo" id=subtitle]]
+[[!template text="and this allows this input to happen" start="00:04:04.879" video="mainVideo" id=subtitle]]
+[[!template text="and for things to progress at roughly the speed I want to." start="00:04:06.560" video="mainVideo" id=subtitle]]
+[[!template text="So there's the timer function which is called at 60fps" start="00:04:11.040" video="mainVideo" id=subtitle]]
+[[!template text="and I have to be very careful to not do too much in it." start="00:04:14.159" video="mainVideo" id=subtitle]]
+[[!template text="And, say, this function executes CPU cycles," start="00:04:17.359" video="mainVideo" id=subtitle]]
+[[!template text="decrement the sound/delay registers, and redraw the screen." start="00:04:21.305" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So to map this whole system to Emacs Lisp," start="00:04:26.479" video="mainVideo" id=subtitle]]
+[[!template text="I've used just integers and vectors" start="00:04:28.800" video="mainVideo" id=subtitle]]
+[[!template text="which contain even more integers." start="00:04:31.199" video="mainVideo" id=subtitle]]
+[[!template text="This is used for the RAM, registers," start="00:04:33.120" video="mainVideo" id=subtitle]]
+[[!template text="return stack, key state, screen," start="00:04:35.040" video="mainVideo" id=subtitle]]
+[[!template text="and so on and so forth." start="00:04:37.040" video="mainVideo" id=subtitle]]
+[[!template text="Basically, what you would do if you were writing C." start="00:04:38.508" video="mainVideo" id=subtitle]]
+[[!template text="All of this is stored in global variables." start="00:04:41.520" video="mainVideo" id=subtitle]]
+[[!template text="I'm not using any lists at all." start="00:04:43.360" video="mainVideo" id=subtitle]]
+[[!template text="As a side effect, there's no consing going on at all." start="00:04:45.600" video="mainVideo" id=subtitle]]
+[[!template text="There are no extra objects created" start="00:04:48.400" video="mainVideo" id=subtitle]]
+[[!template text="which would trigger garbage collection processes." start="00:04:50.080" video="mainVideo" id=subtitle]]
+[[!template text="Getting this right was rather tricky, actually," start="00:04:53.199" video="mainVideo" id=subtitle]]
+[[!template text="and there were some hidden garbage collection problems" start="00:04:55.600" video="mainVideo" id=subtitle]]
+[[!template text="which I had to resolve over time." start="00:04:58.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, decoding instructions." start="00:05:01.759" video="mainVideo" id=subtitle]]
+[[!template text="For this, you have to know that all instructions are two bytes long," start="00:05:03.759" video="mainVideo" id=subtitle]]
+[[!template text="and the arguments are encoded inside them." start="00:05:06.800" video="mainVideo" id=subtitle]]
+[[!template text="For example, the jump to address instruction" start="00:05:08.880" video="mainVideo" id=subtitle]]
+[[!template text="is encoded as one and three hex digits." start="00:05:11.440" video="mainVideo" id=subtitle]]
+[[!template text="The type is extracted masking with #xF000" start="00:05:15.120" video="mainVideo" id=subtitle]]
+[[!template text="and then shifting it by 12 bits." start="00:05:18.400" video="mainVideo" id=subtitle]]
+[[!template text="Mask means you perform the binary AND." start="00:05:20.400" video="mainVideo" id=subtitle]]
+[[!template text="You can do the same with the argument by masking with #0xFFF and no shift." start="00:05:23.520" video="mainVideo" id=subtitle]]
+[[!template text="If you do this long enough, you'll find common patterns." start="00:05:28.400" video="mainVideo" id=subtitle]]
+[[!template text="For example, addresses are always encoded like this" start="00:05:30.560" video="mainVideo" id=subtitle]]
+[[!template text="using the last three nibbles." start="00:05:32.639" video="mainVideo" id=subtitle]]
+[[!template text="In the code, you'll find a big cond" start="00:05:34.880" video="mainVideo" id=subtitle]]
+[[!template text="which dispatches on the type and executes it for the side effects." start="00:05:36.160" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For testing, I've initially just executed the ROM until I've hit C-g," start="00:05:41.440" video="mainVideo" id=subtitle]]
+[[!template text="and then use the debug command to render the screen to a buffer." start="00:05:45.919" video="mainVideo" id=subtitle]]
+[[!template text="Later on, I found tiny ROMs that just display a static test screen," start="00:05:49.039" video="mainVideo" id=subtitle]]
+[[!template text="for example, logo, and looked whether it looked right." start="00:05:53.199" video="mainVideo" id=subtitle]]
+[[!template text="I added instructions as needed" start="00:05:57.280" video="mainVideo" id=subtitle]]
+[[!template text="and went through more and more and more ROMs." start="00:05:58.800" video="mainVideo" id=subtitle]]
+[[!template text="And later I wrote a unit test suite as a safety net." start="00:06:00.720" video="mainVideo" id=subtitle]]
+[[!template text="This unit test suite, it just sets up an empty emulator state," start="00:06:04.000" video="mainVideo" id=subtitle]]
+[[!template text="executes some instructions," start="00:06:07.840" video="mainVideo" id=subtitle]]
+[[!template text="and then looks whether the expected side effects have happened." start="00:06:09.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For debugging, I usually use edebug, but this was super ineffective," start="00:06:14.880" video="mainVideo" id=subtitle]]
+[[!template text="because, well, you don't really want to step through big cons" start="00:06:18.319" video="mainVideo" id=subtitle]]
+[[!template text="doing side effects for every single cycle," start="00:06:21.600" video="mainVideo" id=subtitle]]
+[[!template text="when it can take like 100 cycles for things to happen." start="00:06:23.680" video="mainVideo" id=subtitle]]
+[[!template text="Therefore I've set up logging." start="00:06:26.880" video="mainVideo" id=subtitle]]
+[[!template text="Whenever I logged something and couldn't figure out the error," start="00:06:29.680" video="mainVideo" id=subtitle]]
+[[!template text="I compared my log output with the instrumented version of another emulator," start="00:06:32.639" video="mainVideo" id=subtitle]]
+[[!template text="and if the logs diverge, then I have figured out where the bug lies" start="00:06:37.039" video="mainVideo" id=subtitle]]
+[[!template text="and could look deeper into it." start="00:06:40.479" video="mainVideo" id=subtitle]]
+[[!template text="Future project idea might be a chip 8 debugger," start="00:06:42.720" video="mainVideo" id=subtitle]]
+[[!template text="but I doubt I'll ever go into it." start="00:06:44.960" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For analysis, I initially wrote a disassembler," start="00:06:49.440" video="mainVideo" id=subtitle]]
+[[!template text="which is a very simple thing but super tedious," start="00:06:51.759" video="mainVideo" id=subtitle]]
+[[!template text="especially if you wanted to add advanced functionality," start="00:06:54.400" video="mainVideo" id=subtitle]]
+[[!template text="for example, analysis or thinking of what part is data," start="00:06:56.639" video="mainVideo" id=subtitle]]
+[[!template text="what part is code." start="00:06:58.720" video="mainVideo" id=subtitle]]
+[[!template text="I had this great idea for using the radare 2 framework" start="00:07:00.000" video="mainVideo" id=subtitle]]
+[[!template text="and adding analysis and disassembly plug-in for it." start="00:07:03.360" video="mainVideo" id=subtitle]]
+[[!template text="So I looked into this. Found, okay," start="00:07:06.479" video="mainVideo" id=subtitle]]
+[[!template text="you can write plugins in C" start="00:07:08.400" video="mainVideo" id=subtitle]]
+[[!template text="but also in Python, so I wrote one in Python," start="00:07:10.319" video="mainVideo" id=subtitle]]
+[[!template text="and then discovered there's actually an existing one in core," start="00:07:12.639" video="mainVideo" id=subtitle]]
+[[!template text="which you have to enable explicitly by passing an extra argument." start="00:07:14.720" video="mainVideo" id=subtitle]]
+[[!template text="I've tried it and found it's not exactly as good as my own one," start="00:07:18.400" video="mainVideo" id=subtitle]]
+[[!template text="so I improved this one and submitted pull requests" start="00:07:21.680" video="mainVideo" id=subtitle]]
+[[!template text="until it was at the same level." start="00:07:24.160" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Rendering was the trickiest part of this whole thing," start="00:07:28.080" video="mainVideo" id=subtitle]]
+[[!template text="because, well, I decided against using a library." start="00:07:30.720" video="mainVideo" id=subtitle]]
+[[!template text="Not like there would have been any usable library for this." start="00:07:34.319" video="mainVideo" id=subtitle]]
+[[!template text="My usual approach of creating SVG files was too expensive." start="00:07:37.120" video="mainVideo" id=subtitle]]
+[[!template text="It just created too much garbage and took too long time." start="00:07:40.880" video="mainVideo" id=subtitle]]
+[[!template text="I then tried creating mutating strings." start="00:07:45.120" video="mainVideo" id=subtitle]]
+[[!template text="This was either too expensive, just like SVGs, or too complicated." start="00:07:47.360" video="mainVideo" id=subtitle]]
+[[!template text="I tried changing SVG tiles, which created gaps between the lines." start="00:07:52.479" video="mainVideo" id=subtitle]]
+[[!template text="Then I tried to create an xpm file which was backed by a bool vector" start="00:07:57.280" video="mainVideo" id=subtitle]]
+[[!template text="and mutating this bool vector," start="00:08:00.720" video="mainVideo" id=subtitle]]
+[[!template text="but the image caching effect" start="00:08:02.400" video="mainVideo" id=subtitle]]
+[[!template text="made it just every nth frame to appear," start="00:08:04.000" video="mainVideo" id=subtitle]]
+[[!template text="which wasn't good either." start="00:08:06.479" video="mainVideo" id=subtitle]]
+[[!template text="Then I had the idea to just use plain text" start="00:08:08.879" video="mainVideo" id=subtitle]]
+[[!template text="and paint the individual characters" start="00:08:11.440" video="mainVideo" id=subtitle]]
+[[!template text="with a different background color." start="00:08:13.120" video="mainVideo" id=subtitle]]
+[[!template text="This had perfect, perfect performance." start="00:08:14.800" video="mainVideo" id=subtitle]]
+[[!template text="There were many optimization attempts until I got there," start="00:08:17.120" video="mainVideo" id=subtitle]]
+[[!template text="and it was very, very stressful." start="00:08:19.280" video="mainVideo" id=subtitle]]
+[[!template text="I wasn't sure whether I would ever get to accept the performance at all." start="00:08:21.199" video="mainVideo" id=subtitle]]
+[[!template new="1" text="For sound, you only need to do a single beep," start="00:08:26.160" video="mainVideo" id=subtitle]]
+[[!template text="so technically, it shouldn't be difficult to emulate it." start="00:08:28.560" video="mainVideo" id=subtitle]]
+[[!template text="However, doing this is hard because" start="00:08:31.280" video="mainVideo" id=subtitle]]
+[[!template text="Emacs officially only supports synchronous playback of sounds." start="00:08:33.039" video="mainVideo" id=subtitle]]
+[[!template text="But there's also Emacs process, which you can launch in asynchronous way." start="00:08:37.200" video="mainVideo" id=subtitle]]
+[[!template text="So I looked into it and found that mplayer has a slave mode" start="00:08:41.360" video="mainVideo" id=subtitle]]
+[[!template text="and mpv supports listing on the fifo for commands." start="00:08:44.720" video="mainVideo" id=subtitle]]
+[[!template text="So I've created a pipe, started a paused MPV in loop mode," start="00:08:48.640" video="mainVideo" id=subtitle]]
+[[!template text="and always send in pause and unpause command to the FIFO," start="00:08:53.760" video="mainVideo" id=subtitle]]
+[[!template text="and that way I could control" start="00:08:56.560" video="mainVideo" id=subtitle]]
+[[!template text="when to start beeping and stop beeping." start="00:08:58.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So yeah, that's it so far." start="00:09:02.640" video="mainVideo" id=subtitle]]
+[[!template text="It was a very educational experience." start="00:09:04.160" video="mainVideo" id=subtitle]]
+[[!template text="I have tried out a bunch of games which were," start="00:09:07.200" video="mainVideo" id=subtitle]]
+[[!template text="well, I almost say the worst ports of classic games I've ever tried." start="00:09:10.320" video="mainVideo" id=subtitle]]
+[[!template text="It wasn't terribly fun to play them," start="00:09:14.320" video="mainVideo" id=subtitle]]
+[[!template text="but was fun to improve the emulator" start="00:09:15.680" video="mainVideo" id=subtitle]]
+[[!template text="until, well, things worked good enough." start="00:09:18.555" video="mainVideo" id=subtitle]]
+[[!template text="I've learned a lot about how computers work at this level," start="00:09:21.760" video="mainVideo" id=subtitle]]
+[[!template text="so, maybe, maybe I'll in the future make another emulator," start="00:09:25.120" video="mainVideo" id=subtitle]]
+[[!template text="but I'm not sure whether anything more advanced, like an Intel 8080 emulator," start="00:09:28.880" video="mainVideo" id=subtitle]]
+[[!template text="will actually run in Emacs fast enough," start="00:09:34.000" video="mainVideo" id=subtitle]]
+[[!template text="but it's still an interesting idea," start="00:09:36.560" video="mainVideo" id=subtitle]]
+[[!template text="because then you could actually have an OS inside Emacs" start="00:09:37.839" video="mainVideo" id=subtitle]]
+[[!template text="and fulfill that one specific meme." start="00:09:40.800" video="mainVideo" id=subtitle]]
+[[!template text="But if I try to do most serious stuff," start="00:09:43.120" video="mainVideo" id=subtitle]]
+[[!template text="I'll probably use Chicken Scheme," start="00:09:45.440" video="mainVideo" id=subtitle]]
+[[!template text="which is my preferred language for serious projects," start="00:09:47.040" video="mainVideo" id=subtitle]]
+[[!template text="and write a NES game emulator." start="00:09:49.920" video="mainVideo" id=subtitle]]
+[[!template text="And that's it. Thank you." start="00:09:53.279" video="mainVideo" id=subtitle]]
diff --git a/2020/info/28.md b/2020/info/28.md
index 9aa61df0..5ea02d1c 100644
--- a/2020/info/28.md
+++ b/2020/info/28.md
@@ -2,7 +2,8 @@
Erik Elmshauser and Corwin Brust
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust.webm"]]
-[Download compressed .webm video (84.2M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (257.5M)](https://media.emacsconf.org/2020/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust--compressed32.webm)
+[Download compressed .webm video (84.2M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust--vp9-q56-video-original-audio.webm)
Dungeon is an oral and physical media fantasy and abstract role-play
gaming tradition that seems to have grown from miniature and
diff --git a/2020/info/30.md b/2020/info/30.md
index 1535f2ab..c1ccb761 100644
--- a/2020/info/30.md
+++ b/2020/info/30.md
@@ -1,11 +1,14 @@
# A tour of vterm
Gabriele Bozzola (@sbozzolo)
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.webm"]]
-[Download compressed .webm video (10.9M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo--vp9-q56-video-original-audio.webm)
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.webm" subtitles="/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt"]]
+[Download compressed .webm video (17.7M)](https://media.emacsconf.org/2020/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo--compressed32.webm)
+[Download compressed .webm video (10.9M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo--vp9-q56-video-original-audio.webm) g
+[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo.webm" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (3.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (4.1M)](https://media.emacsconf.org/2020/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo--compressed32.webm)
+[Download compressed Q&A .webm video (3.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo--vp9-q56-video-original-audio.webm)
Vterm is a fast and fully capable terminal emulator in GNU Emacs built
as a dynamic module on top of libvterm. In this talk, I will give an
@@ -47,3 +50,182 @@ in Emacs.
# Notes
<https://github.com/akermu/emacs-libvterm>
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template text="Hello and welcome to this talk." start="00:00:00.880" video="mainVideo" id=subtitle]]
+[[!template text="The title of this talk is a tour of vterm," start="00:00:03.760" video="mainVideo" id=subtitle]]
+[[!template text="a fast and fully featured terminal emulator" start="00:00:06.080" video="mainVideo" id=subtitle]]
+[[!template text="inside GNU Emacs." start="00:00:08.559" video="mainVideo" id=subtitle]]
+[[!template text="So let's try to understand what we mean" start="00:00:10.801" video="mainVideo" id=subtitle]]
+[[!template text="with &quot ;fast and fully featured.&quot ;" start="00:00:12.720" video="mainVideo" id=subtitle]]
+[[!template text="To do that we'll compare vterm" start="00:00:14.559" video="mainVideo" id=subtitle]]
+[[!template text="with the packages which are built in Emacs," start="00:00:16.801" video="mainVideo" id=subtitle]]
+[[!template text="mainly, term." start="00:00:20.401" video="mainVideo" id=subtitle]]
+[[!template text="So let's jump into the vterm." start="00:00:22.400" video="mainVideo" id=subtitle]]
+[[!template text="So this is a vterm buffer" start="00:00:25.040" video="mainVideo" id=subtitle]]
+[[!template text="and this is a ansi-term buffer." start="00:00:26.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="What I'm going to do now is" start="00:00:29.440" video="mainVideo" id=subtitle]]
+[[!template text="first I'm going to prove to you" start="00:00:30.721" video="mainVideo" id=subtitle]]
+[[!template text="what we mean by fast." start="00:00:32.160" video="mainVideo" id=subtitle]]
+[[!template text="To do that, let me open a large file display on screen--" start="00:00:34.161" video="mainVideo" id=subtitle]]
+[[!template text="a large file, this is about one megabyte of data--" start="00:00:37.441" video="mainVideo" id=subtitle]]
+[[!template text="and let me time that." start="00:00:40.239" video="mainVideo" id=subtitle]]
+[[!template text="It takes about 0.6 seconds with vterm." start="00:00:41.841" video="mainVideo" id=subtitle]]
+[[!template text="Let's do the same with with ansi-term." start="00:00:45.201" video="mainVideo" id=subtitle]]
+[[!template text="Well, we already see the difference." start="00:00:48.321" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So I will use this time to tell you" start="00:00:51.520" video="mainVideo" id=subtitle]]
+[[!template text="what's different, and what is vterm exactly." start="00:00:53.039" video="mainVideo" id=subtitle]]
+[[!template text="vterm is a terminal emulator" start="00:00:56.321" video="mainVideo" id=subtitle]]
+[[!template text="built on top of an external library." start="00:00:58.400" video="mainVideo" id=subtitle]]
+[[!template text="The library is called libvterm," start="00:01:00.801" video="mainVideo" id=subtitle]]
+[[!template text="and is the same library used by Newton" start="00:01:02.719" video="mainVideo" id=subtitle]]
+[[!template text="for their own terminal emulator." start="00:01:05.519" video="mainVideo" id=subtitle]]
+[[!template text="It's a C library, and this is what gives us" start="00:01:07.200" video="mainVideo" id=subtitle]]
+[[!template text="a lot of good features. First, the speed." start="00:01:10.799" video="mainVideo" id=subtitle]]
+[[!template text="Time spent here, 0.6, is essentially" start="00:01:15.119" video="mainVideo" id=subtitle]]
+[[!template text="the time that it takes to:" start="00:01:17.120" video="mainVideo" id=subtitle]]
+[[!template text="1\. convert the Emacs representation of text" start="00:01:18.479" video="mainVideo" id=subtitle]]
+[[!template text="into the vterm representation of what is a string," start="00:01:22.241" video="mainVideo" id=subtitle]]
+[[!template text="and 2., into actually displaying that," start="00:01:25.041" video="mainVideo" id=subtitle]]
+[[!template text="and that can take time" start="00:01:27.361" video="mainVideo" id=subtitle]]
+[[!template text="if there's fontification involved." start="00:01:29.520" video="mainVideo" id=subtitle]]
+[[!template text="So these are the 0.6 seconds there." start="00:01:32.241" video="mainVideo" id=subtitle]]
+[[!template text="As we say, in ansi-term, that's much more time." start="00:01:34.240" video="mainVideo" id=subtitle]]
+[[!template text="It's much slower. So the terminal will feel" start="00:01:38.480" video="mainVideo" id=subtitle]]
+[[!template text="much snappier, much faster." start="00:01:40.721" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But that's not the main benefit or the only benefit" start="00:01:42.880" video="mainVideo" id=subtitle]]
+[[!template text="of using this external library vterm." start="00:01:46.721" video="mainVideo" id=subtitle]]
+[[!template text="The second big benefit is that" start="00:01:49.760" video="mainVideo" id=subtitle]]
+[[!template text="vterm has support for all the escape codes" start="00:01:53.041" video="mainVideo" id=subtitle]]
+[[!template text="that xterm has support for," start="00:01:56.560" video="mainVideo" id=subtitle]]
+[[!template text="so vterm is essentially as running xterm" start="00:01:58.321" video="mainVideo" id=subtitle]]
+[[!template text="inside an Emacs buffer. So let's see that." start="00:02:01.119" video="mainVideo" id=subtitle]]
+[[!template text="For example, let's start by looking" start="00:02:03.600" video="mainVideo" id=subtitle]]
+[[!template text="at the support for colors." start="00:02:05.760" video="mainVideo" id=subtitle]]
+[[!template text="We have support for all the colors out of the box." start="00:02:08.239" video="mainVideo" id=subtitle]]
+[[!template text="We don't have to do anything." start="00:02:10.320" video="mainVideo" id=subtitle]]
+[[!template text="And if we did the same here, well," start="00:02:11.840" video="mainVideo" id=subtitle]]
+[[!template text="we have only 20 colors." start="00:02:14.721" video="mainVideo" id=subtitle]]
+[[!template text="There's a way to get all the colors," start="00:02:16.801" video="mainVideo" id=subtitle]]
+[[!template text="but it's much more involved." start="00:02:18.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="But this is not where vterm shines." start="00:02:19.680" video="mainVideo" id=subtitle]]
+[[!template text="We can run all the commands that we want." start="00:02:23.040" video="mainVideo" id=subtitle]]
+[[!template text="htop, ncdu, everything runs here." start="00:02:27.200" video="mainVideo" id=subtitle]]
+[[!template text="Also this title, it's a fairly complicated" start="00:02:31.441" video="mainVideo" id=subtitle]]
+[[!template text="manipulation of the window" start="00:02:35.520" video="mainVideo" id=subtitle]]
+[[!template text="and it will not work here." start="00:02:37.921" video="mainVideo" id=subtitle]]
+[[!template text="It just doesn't work actually." start="00:02:40.879" video="mainVideo" id=subtitle]]
+[[!template text="Now the terminal is probably messed up. Yes." start="00:02:42.001" video="mainVideo" id=subtitle]]
+[[!template text="So using this external library" start="00:02:46.161" video="mainVideo" id=subtitle]]
+[[!template text="removes the burden from the developers" start="00:02:48.400" video="mainVideo" id=subtitle]]
+[[!template text="of having to implement support" start="00:02:50.959" video="mainVideo" id=subtitle]]
+[[!template text="for all the escape codes." start="00:02:52.320" video="mainVideo" id=subtitle]]
+[[!template text="We just use those." start="00:02:53.281" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So in many ways, running vterm" start="00:02:55.360" video="mainVideo" id=subtitle]]
+[[!template text="is running xterm inside Emacs," start="00:02:58.480" video="mainVideo" id=subtitle]]
+[[!template text="but it's better than that because," start="00:03:01.760" video="mainVideo" id=subtitle]]
+[[!template text="since this is an Emacs buffer," start="00:03:04.160" video="mainVideo" id=subtitle]]
+[[!template text="we can enjoy a lot of features from Emacs" start="00:03:05.840" video="mainVideo" id=subtitle]]
+[[!template text="as well as a tighter integration" start="00:03:09.760" video="mainVideo" id=subtitle]]
+[[!template text="with Emacs itself." start="00:03:11.361" video="mainVideo" id=subtitle]]
+[[!template text="For example, as you see here," start="00:03:13.200" video="mainVideo" id=subtitle]]
+[[!template text="the title of my buffer is from the directory I'm in." start="00:03:15.841" video="mainVideo" id=subtitle]]
+[[!template text="So let's go to my tmp." start="00:03:20.240" video="mainVideo" id=subtitle]]
+[[!template text="The title will change." start="00:03:21.760" video="mainVideo" id=subtitle]]
+[[!template text="So there's information being exchanged" start="00:03:23.441" video="mainVideo" id=subtitle]]
+[[!template text="between vterm and Emacs." start="00:03:25.921" video="mainVideo" id=subtitle]]
+[[!template text="And of course, the title is not the only place" start="00:03:28.000" video="mainVideo" id=subtitle]]
+[[!template text="where information is exchanged." start="00:03:30.001" video="mainVideo" id=subtitle]]
+[[!template text="I can find a file and I will be in the directory" start="00:03:32.000" video="mainVideo" id=subtitle]]
+[[!template text="where my terminal is." start="00:03:35.920" video="mainVideo" id=subtitle]]
+[[!template text="This feature is also available in ansi-term," start="00:03:37.681" video="mainVideo" id=subtitle]]
+[[!template text="and it works also on vterm," start="00:03:40.000" video="mainVideo" id=subtitle]]
+[[!template text="and it follows me. So if I go to tmp," start="00:03:41.361" video="mainVideo" id=subtitle]]
+[[!template text="I'll get the tmp." start="00:03:43.441" video="mainVideo" id=subtitle]]
+[[!template text="If I ssh to a remote server," start="00:03:44.720" video="mainVideo" id=subtitle]]
+[[!template text="it will work also on remote servers as well," start="00:03:47.121" video="mainVideo" id=subtitle]]
+[[!template text="which is a very nice way to edit files remotely" start="00:03:50.240" video="mainVideo" id=subtitle]]
+[[!template text="while we're working on a shell." start="00:03:53.920" video="mainVideo" id=subtitle]]
+[[!template new="1" text="And second, while vterm is not an Elisp interpreter" start="00:03:55.600" video="mainVideo" id=subtitle]]
+[[!template text="like eshell, what we can do is" start="00:03:59.281" video="mainVideo" id=subtitle]]
+[[!template text="we can still run Emacs functions." start="00:04:01.201" video="mainVideo" id=subtitle]]
+[[!template text="So for example..." start="00:04:04.721" video="mainVideo" id=subtitle]]
+[[!template text="that requires some configuration." start="00:04:06.081" video="mainVideo" id=subtitle]]
+[[!template text="vterm command (message &quot;hi&quot;)" start="00:04:08.001" video="mainVideo" id=subtitle]]
+[[!template text="as you see there's a &quot;hi&quot; here." start="00:04:11.600" video="mainVideo" id=subtitle]]
+[[!template text="So what I'm doing is I'm executing" start="00:04:13.121" video="mainVideo" id=subtitle]]
+[[!template text="the Elisp function hi." start="00:04:14.960" video="mainVideo" id=subtitle]]
+[[!template text="I can drop that and turn it around," start="00:04:16.239" video="mainVideo" id=subtitle]]
+[[!template text="hash function to run Elisp functions." start="00:04:18.960" video="mainVideo" id=subtitle]]
+[[!template text="Or another one, find-file, same." start="00:04:21.601" video="mainVideo" id=subtitle]]
+[[!template text="We call this feature &quot;message passing,&quot;" start="00:04:24.880" video="mainVideo" id=subtitle]]
+[[!template text="and it requires some configuration" start="00:04:27.361" video="mainVideo" id=subtitle]]
+[[!template text="on the Emacs side as well as in the shell side." start="00:04:30.001" video="mainVideo" id=subtitle]]
+[[!template new="1" text="It's important to stress" start="00:04:32.000" video="mainVideo" id=subtitle]]
+[[!template text="what's the nature of vterm." start="00:04:33.441" video="mainVideo" id=subtitle]]
+[[!template text="For instance, every time I'm sending a key binding," start="00:04:35.360" video="mainVideo" id=subtitle]]
+[[!template text="it's not immediately clear if my intention is" start="00:04:37.920" video="mainVideo" id=subtitle]]
+[[!template text="to send it to the shell or to Emacs." start="00:04:40.001" video="mainVideo" id=subtitle]]
+[[!template text="So vterm implements some reasonable defaults," start="00:04:41.841" video="mainVideo" id=subtitle]]
+[[!template text="but at the moment it's mainly packaged" start="00:04:44.320" video="mainVideo" id=subtitle]]
+[[!template text="to display characters on a screen." start="00:04:46.800" video="mainVideo" id=subtitle]]
+[[!template text="So for example, if you're using evil," start="00:04:49.120" video="mainVideo" id=subtitle]]
+[[!template text="the editing commands in evil" start="00:04:50.721" video="mainVideo" id=subtitle]]
+[[!template text="will not work immediately." start="00:04:52.640" video="mainVideo" id=subtitle]]
+[[!template text="There's some work to be done" start="00:04:54.081" video="mainVideo" id=subtitle]]
+[[!template text="and integration can be improved on that side," start="00:04:55.759" video="mainVideo" id=subtitle]]
+[[!template new="1" text="but sometimes we really want this to behave" start="00:04:58.161" video="mainVideo" id=subtitle]]
+[[!template text="exactly like a Emacs buffer." start="00:05:00.240" video="mainVideo" id=subtitle]]
+[[!template text="We want to be able to search." start="00:05:02.240" video="mainVideo" id=subtitle]]
+[[!template text="If I try to get it to search," start="00:05:03.681" video="mainVideo" id=subtitle]]
+[[!template text="it will not work." start="00:05:06.640" video="mainVideo" id=subtitle]]
+[[!template text="I will send it to the shell." start="00:05:07.281" video="mainVideo" id=subtitle]]
+[[!template text="So to do that, we enabled vterm copy mode." start="00:05:08.401" video="mainVideo" id=subtitle]]
+[[!template text="As you see, copy mode, and now this buffer" start="00:05:11.920" video="mainVideo" id=subtitle]]
+[[!template text="is essentially a fundamental buffer." start="00:05:14.721" video="mainVideo" id=subtitle]]
+[[!template text="I can move around. I can search." start="00:05:17.039" video="mainVideo" id=subtitle]]
+[[!template text="So it must have... I can do everything I want." start="00:05:21.120" video="mainVideo" id=subtitle]]
+[[!template text="And there are additional features." start="00:05:25.521" video="mainVideo" id=subtitle]]
+[[!template text="For example, I can jump around all the prompts." start="00:05:26.480" video="mainVideo" id=subtitle]]
+[[!template text="I find this extremely useful," start="00:05:30.561" video="mainVideo" id=subtitle]]
+[[!template text="because I can copy updates from my programs." start="00:05:32.639" video="mainVideo" id=subtitle]]
+[[!template text="What I always have to do is" start="00:05:35.040" video="mainVideo" id=subtitle]]
+[[!template text="I have to Google some errors." start="00:05:38.321" video="mainVideo" id=subtitle]]
+[[!template text="So what I do is I select that" start="00:05:41.521" video="mainVideo" id=subtitle]]
+[[!template text="and I have my keybinding in Emacs conf," start="00:05:43.120" video="mainVideo" id=subtitle]]
+[[!template text="and I'm Googling what I have to Google." start="00:05:45.121" video="mainVideo" id=subtitle]]
+[[!template text="So this is very nice and if I..." start="00:05:48.480" video="mainVideo" id=subtitle]]
+[[!template text="now that I have selected something," start="00:05:51.121" video="mainVideo" id=subtitle]]
+[[!template text="if I just press return," start="00:05:52.640" video="mainVideo" id=subtitle]]
+[[!template text="I will go back to my normal editing mode" start="00:05:53.841" video="mainVideo" id=subtitle]]
+[[!template text="with the text copied, so I can paste it back." start="00:05:56.401" video="mainVideo" id=subtitle]]
+[[!template text="So it's a quick way to interact with copy" start="00:06:00.161" video="mainVideo" id=subtitle]]
+[[!template text="and interact with the output of a buffer." start="00:06:02.721" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So finally, let's discuss how to actually use vterm." start="00:06:05.841" video="mainVideo" id=subtitle]]
+[[!template text="Let's circle back, let's go," start="00:06:09.121" video="mainVideo" id=subtitle]]
+[[!template text="and let's look at the GitHub repo" start="00:06:10.560" video="mainVideo" id=subtitle]]
+[[!template text="where development is happening." start="00:06:12.400" video="mainVideo" id=subtitle]]
+[[!template text="vterm is available in MELPA," start="00:06:14.001" video="mainVideo" id=subtitle]]
+[[!template text="but since it's leveraging the power" start="00:06:15.520" video="mainVideo" id=subtitle]]
+[[!template text="of an external module," start="00:06:17.760" video="mainVideo" id=subtitle]]
+[[!template text="you must have Emacs compiled" start="00:06:18.960" video="mainVideo" id=subtitle]]
+[[!template text="with support for modules," start="00:06:20.480" video="mainVideo" id=subtitle]]
+[[!template text="and many distros like Ubuntu, Debian," start="00:06:22.000" video="mainVideo" id=subtitle]]
+[[!template text="that's not there. So you have to" start="00:06:25.600" video="mainVideo" id=subtitle]]
+[[!template text="get Emacs with support for modules:" start="00:06:26.881" video="mainVideo" id=subtitle]]
+[[!template text="compiling or getting images somewhere else." start="00:06:29.200" video="mainVideo" id=subtitle]]
+[[!template text="And also, the first time you are going to use this," start="00:06:31.361" video="mainVideo" id=subtitle]]
+[[!template text="which works only on Mac or GNU Linux systems," start="00:06:33.840" video="mainVideo" id=subtitle]]
+[[!template text="Emacs will try to find and compile this module," start="00:06:38.961" video="mainVideo" id=subtitle]]
+[[!template text="so it's important. This requirement is important." start="00:06:41.759" video="mainVideo" id=subtitle]]
+[[!template text="If you're using Windows, well," start="00:06:44.241" video="mainVideo" id=subtitle]]
+[[!template text="it's not available and will not work." start="00:06:46.401" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So to conclude, I want to just advertise this page." start="00:06:49.199" video="mainVideo" id=subtitle]]
+[[!template text="If you have problems, look at the issues" start="00:06:53.440" video="mainVideo" id=subtitle]]
+[[!template text="and open an issue in case." start="00:06:56.240" video="mainVideo" id=subtitle]]
+[[!template text="We'll try to help you." start="00:06:58.241" video="mainVideo" id=subtitle]]
+[[!template text="We are very excited about vterm," start="00:06:59.200" video="mainVideo" id=subtitle]]
+[[!template text="and I think it's a transformative" start="00:07:00.800" video="mainVideo" id=subtitle]]
+[[!template text="terminal experience inside GNU Emacs." start="00:07:02.639" video="mainVideo" id=subtitle]]
diff --git a/2020/info/31.md b/2020/info/31.md
index 7ea737d9..b5c5c661 100644
--- a/2020/info/31.md
+++ b/2020/info/31.md
@@ -2,10 +2,12 @@
Grant Shangreaux
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux.webm"]]
-[Download compressed .webm video (11.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (36.3M)](https://media.emacsconf.org/2020/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux--compressed32.webm)
+[Download compressed .webm video (11.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux--vp9-q56-video-original-audio.webm)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux.webm" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (6.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (14.3M)](https://media.emacsconf.org/2020/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux--compressed32.webm)
+[Download compressed Q&A .webm video (6.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux--vp9-q56-video-original-audio.webm)
<https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux.org>
diff --git a/2020/info/32.md b/2020/info/32.md
index b1952d04..ad063ad9 100644
--- a/2020/info/32.md
+++ b/2020/info/32.md
@@ -2,7 +2,8 @@
Eric Abrahamsen
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen.webm"]]
-[Download compressed .webm video (21.3M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (43.9M)](https://media.emacsconf.org/2020/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen--compressed32.webm)
+[Download compressed .webm video (21.3M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen--vp9-q56-video-original-audio.webm)
The venerable Gnus newsreader has evolved over the years to interface
with many different types of news- or mail-like backend programs,
diff --git a/2020/info/33.md b/2020/info/33.md
index ca231c6e..69920002 100644
--- a/2020/info/33.md
+++ b/2020/info/33.md
@@ -2,7 +2,8 @@
Fermin MF
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.webm"]]
-[Download compressed .webm video (26.5M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (52.6M)](https://media.emacsconf.org/2020/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin--compressed32.webm)
+[Download compressed .webm video (26.5M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin--vp9-q56-video-original-audio.webm)
[Download prerecorded video](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--prerec--fermin.webm)
diff --git a/2020/info/34.md b/2020/info/34.md
index c8aaee9e..7c73b7ce 100644
--- a/2020/info/34.md
+++ b/2020/info/34.md
@@ -1,8 +1,10 @@
# Extend Emacs to Modern GUI Applications with EAF
Matthew Zeng
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.webm"]]
-[Download compressed .webm video (28.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng--vp9-q56-video-original-audio.webm)
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.webm" size="113M" subtitles="/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt" duration="22:23"]]
+[Download compressed .webm video (41.7M)](https://media.emacsconf.org/2020/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng--compressed32.webm)
+[Download compressed .webm video (28.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
Emacs Application Framework (EAF) is a customizable and extensible GUI
application framework that extends Emacs graphical capabilities using
@@ -102,3 +104,565 @@ Not yet! Will have a look into it later :-)
- One of the admins of the [Emacs China
forum](https://emacs-china.org/).
- <https://github.com/manateelazycat/emacs-application-framework>
+
+<a name="transcript"></a>
+# Transcript
+
+[[!template new="1" text="Hello." start="00:00:03.600" video="mainVideo" id=subtitle]]
+[[!template text="Hopefully everyone is staying safe and" start="00:00:04.560" video="mainVideo" id=subtitle]]
+[[!template text="staying home," start="00:00:06.720" video="mainVideo" id=subtitle]]
+[[!template text="I feel very grateful to live in a world" start="00:00:08.000" video="mainVideo" id=subtitle]]
+[[!template text="today that technology and free software" start="00:00:10.000" video="mainVideo" id=subtitle]]
+[[!template text="can be leveraged to connect people in" start="00:00:12.000" video="mainVideo" id=subtitle]]
+[[!template text="such disconnected and difficult times," start="00:00:13.759" video="mainVideo" id=subtitle]]
+[[!template text="and to have an online conference like" start="00:00:16.080" video="mainVideo" id=subtitle]]
+[[!template text="this. Hopefully you've all" start="00:00:17.840" video="mainVideo" id=subtitle]]
+[[!template text="enjoyed this year's EmacsConf so far." start="00:00:19.920" video="mainVideo" id=subtitle]]
+[[!template text="Many thanks to all the people that made" start="00:00:22.960" video="mainVideo" id=subtitle]]
+[[!template text="this possible." start="00:00:24.720" video="mainVideo" id=subtitle]]
+[[!template text="Anyways, welcome to my talk &quot;Extend Emacs" start="00:00:26.880" video="mainVideo" id=subtitle]]
+[[!template text="to Modern GUI" start="00:00:30.000" video="mainVideo" id=subtitle]]
+[[!template text="Applications with EAF, the Emacs" start="00:00:30.960" video="mainVideo" id=subtitle]]
+[[!template text="Application Framework&quot;." start="00:00:34.079" video="mainVideo" id=subtitle]]
+[[!template text="This will be my first ever talk, so" start="00:00:35.920" video="mainVideo" id=subtitle]]
+[[!template text="apologies for my" start="00:00:38.320" video="mainVideo" id=subtitle]]
+[[!template text="inexperience, let us begin." start="00:00:39.840" video="mainVideo" id=subtitle]]
+[[!template text="About me: my name is Matthew Zeng, you can" start="00:00:43.280" video="mainVideo" id=subtitle]]
+[[!template text="also call me MT" start="00:00:46.559" video="mainVideo" id=subtitle]]
+[[!template text="or Mingde. I'm a Chinese Canadian living" start="00:00:47.840" video="mainVideo" id=subtitle]]
+[[!template text="in Toronto," start="00:00:50.640" video="mainVideo" id=subtitle]]
+[[!template text="Ontario. Offline: I'm an undergrad" start="00:00:51.440" video="mainVideo" id=subtitle]]
+[[!template text="studying mathematics at the University" start="00:00:54.239" video="mainVideo" id=subtitle]]
+[[!template text="of Waterloo." start="00:00:56.079" video="mainVideo" id=subtitle]]
+[[!template text="Online: I'm one of the admins of the" start="00:00:57.760" video="mainVideo" id=subtitle]]
+[[!template text="Emacs China" start="00:01:00.480" video="mainVideo" id=subtitle]]
+[[!template text="— the largest Emacs forum in China. So," start="00:01:03.039" video="mainVideo" id=subtitle]]
+[[!template text="to all Chinese listening to my talk right" start="00:01:06.320" video="mainVideo" id=subtitle]]
+[[!template text="now, feel free to check it out." start="00:01:08.080" video="mainVideo" id=subtitle]]
+[[!template text="And this is a link to my GitHub profile," start="00:01:10.960" video="mainVideo" id=subtitle]]
+[[!template text="(and) to my projects I'm involved in." start="00:01:14.320" video="mainVideo" id=subtitle]]
+[[!template text="One's M-EMACS which is" start="00:01:16.206" video="mainVideo" id=subtitle]]
+[[!template text="I'm the author of — a user-friendly" start="00:01:18.240" video="mainVideo" id=subtitle]]
+[[!template text="full-featured Emacs configuration" start="00:01:20.159" video="mainVideo" id=subtitle]]
+[[!template text="distribution," start="00:01:21.840" video="mainVideo" id=subtitle]]
+[[!template text="it is what I'm using right now, as well" start="00:01:22.799" video="mainVideo" id=subtitle]]
+[[!template text="as the Emacs Application Framework" start="00:01:25.040" video="mainVideo" id=subtitle]]
+[[!template text="which I help to maintain along with the" start="00:01:26.880" video="mainVideo" id=subtitle]]
+[[!template text="other author" start="00:01:29.119" video="mainVideo" id=subtitle]]
+[[!template text="lazycat, which of course, is today's" start="00:01:30.400" video="mainVideo" id=subtitle]]
+[[!template text="topic." start="00:01:33.040" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, as you all might have already" start="00:01:35.759" video="mainVideo" id=subtitle]]
+[[!template text="noticed I'm currently using Emacs" start="00:01:38.720" video="mainVideo" id=subtitle]]
+[[!template text="and opening navigating closing" start="00:01:40.960" video="mainVideo" id=subtitle]]
+[[!template text="all these websites that are rendered" start="00:01:43.600" video="mainVideo" id=subtitle]]
+[[!template text="properly" start="00:01:45.360" video="mainVideo" id=subtitle]]
+[[!template text="all within Emacs, it's all thanks to the" start="00:01:46.159" video="mainVideo" id=subtitle]]
+[[!template text="EAF project." start="00:01:49.200" video="mainVideo" id=subtitle]]
+[[!template text="So, we're living in a society that's" start="00:01:51.840" video="mainVideo" id=subtitle]]
+[[!template text="heavily dependent on the internet" start="00:01:54.000" video="mainVideo" id=subtitle]]
+[[!template text="and multimedia, it is unavoidable to run" start="00:01:55.920" video="mainVideo" id=subtitle]]
+[[!template text="to some occasion that you need to" start="00:01:59.520" video="mainVideo" id=subtitle]]
+[[!template text="open a fancy website that uses" start="00:02:01.200" video="mainVideo" id=subtitle]]
+[[!template text="JavaScript and CSS," start="00:02:02.880" video="mainVideo" id=subtitle]]
+[[!template text="or you need to watch some videos. However," start="00:02:04.799" video="mainVideo" id=subtitle]]
+[[!template text="due to the nature and history of Emacs," start="00:02:08.239" video="mainVideo" id=subtitle]]
+[[!template text="it cannot" start="00:02:11.120" video="mainVideo" id=subtitle]]
+[[!template text="render all these modern graphics" start="00:02:11.840" video="mainVideo" id=subtitle]]
+[[!template text="effectively and efficiently." start="00:02:13.840" video="mainVideo" id=subtitle]]
+[[!template text="Emacs is solely a text-based editing" start="00:02:16.400" video="mainVideo" id=subtitle]]
+[[!template text="environment," start="00:02:19.360" video="mainVideo" id=subtitle]]
+[[!template text="and I argue that this is not a bad thing," start="00:02:20.400" video="mainVideo" id=subtitle]]
+[[!template text="in fact, it is one of the reasons that me" start="00:02:23.520" video="mainVideo" id=subtitle]]
+[[!template text="and I believe many of you as well" start="00:02:25.680" video="mainVideo" id=subtitle]]
+[[!template text="are attracted to Emacs in the first" start="00:02:27.760" video="mainVideo" id=subtitle]]
+[[!template text="place." start="00:02:29.760" video="mainVideo" id=subtitle]]
+[[!template text="Unfortunately, this results in us having" start="00:02:30.879" video="mainVideo" id=subtitle]]
+[[!template text="to open a dedicated web browser to" start="00:02:33.760" video="mainVideo" id=subtitle]]
+[[!template text="browse the internet," start="00:02:35.680" video="mainVideo" id=subtitle]]
+[[!template text="open a dedicated video player to watch" start="00:02:37.040" video="mainVideo" id=subtitle]]
+[[!template text="some videos, or a PDF renderer to read some" start="00:02:38.879" video="mainVideo" id=subtitle]]
+[[!template text="documents." start="00:02:41.440" video="mainVideo" id=subtitle]]
+[[!template text="So far Emacs cannot do all these tasks on" start="00:02:42.640" video="mainVideo" id=subtitle]]
+[[!template text="its own" start="00:02:45.200" video="mainVideo" id=subtitle]]
+[[!template text="but can only be achieved using other" start="00:02:46.000" video="mainVideo" id=subtitle]]
+[[!template text="external applications." start="00:02:48.080" video="mainVideo" id=subtitle]]
+[[!template text="So, the other author manateelazycat," start="00:02:51.519" video="mainVideo" id=subtitle]]
+[[!template text="or lazycat in short, didn't want to use" start="00:02:55.840" video="mainVideo" id=subtitle]]
+[[!template text="all these external applications," start="00:02:58.640" video="mainVideo" id=subtitle]]
+[[!template text="he wanted to have an uninterrupted Emacs" start="00:03:00.560" video="mainVideo" id=subtitle]]
+[[!template text="experience," start="00:03:03.120" video="mainVideo" id=subtitle]]
+[[!template text="he wanted to truly live in Emacs." start="00:03:04.159" video="mainVideo" id=subtitle]]
+[[!template text="However, it would be a lot of work to" start="00:03:07.280" video="mainVideo" id=subtitle]]
+[[!template text="build this" start="00:03:10.080" video="mainVideo" id=subtitle]]
+[[!template text="modern application from scratch, there's" start="00:03:11.040" video="mainVideo" id=subtitle]]
+[[!template text="simply no time or research to do that." start="00:03:13.519" video="mainVideo" id=subtitle]]
+[[!template text="So, lazycat thought of utilizing existing" start="00:03:16.239" video="mainVideo" id=subtitle]]
+[[!template text="applications" start="00:03:18.800" video="mainVideo" id=subtitle]]
+[[!template text="and to try to make it collaborate with" start="00:03:20.400" video="mainVideo" id=subtitle]]
+[[!template text="Emacs, there are many solutions available," start="00:03:22.319" video="mainVideo" id=subtitle]]
+[[!template text="one of it" start="00:03:24.959" video="mainVideo" id=subtitle]]
+[[!template text="is the Emacs X Windows Manager, and I'm" start="00:03:26.000" video="mainVideo" id=subtitle]]
+[[!template text="sure a lot of you already know that —" start="00:03:28.560" video="mainVideo" id=subtitle]]
+[[!template text="the EXWM. However, it didn't work for him," start="00:03:30.159" video="mainVideo" id=subtitle]]
+[[!template text="because although EXWM opens the" start="00:03:33.360" video="mainVideo" id=subtitle]]
+[[!template text="door to use other applications within" start="00:03:35.200" video="mainVideo" id=subtitle]]
+[[!template text="Emacs," start="00:03:37.440" video="mainVideo" id=subtitle]]
+[[!template text="it as a fine window manager cannot" start="00:03:38.239" video="mainVideo" id=subtitle]]
+[[!template text="modify," start="00:03:40.879" video="mainVideo" id=subtitle]]
+[[!template text="customize, or extend other software from" start="00:03:41.519" video="mainVideo" id=subtitle]]
+[[!template text="Emacs." start="00:03:43.920" video="mainVideo" id=subtitle]]
+[[!template text="For example, it cannot modify the" start="00:03:45.040" video="mainVideo" id=subtitle]]
+[[!template text="behavior when you press a key in" start="00:03:46.799" video="mainVideo" id=subtitle]]
+[[!template text="Chromium or" start="00:03:48.480" video="mainVideo" id=subtitle]]
+[[!template text="PDF viewer, therefore it cannot utilize" start="00:03:49.599" video="mainVideo" id=subtitle]]
+[[!template text="the rich Emacs ecosystem that's been" start="00:03:52.159" video="mainVideo" id=subtitle]]
+[[!template text="growing for almost 40 years." start="00:03:54.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="On the other hand, in the EAF browser, so," start="00:03:57.360" video="mainVideo" id=subtitle]]
+[[!template text="if you M-x eaf-open-browser-with-history," start="00:04:00.720" video="mainVideo" id=subtitle]]
+[[!template text="you can see" start="00:04:06.206" video="mainVideo" id=subtitle]]
+[[!template text="on the lower half of my screen — a list of" start="00:04:07.200" video="mainVideo" id=subtitle]]
+[[!template text="histories sorted by my personal" start="00:04:09.840" video="mainVideo" id=subtitle]]
+[[!template text="most visited sites, and you can search" start="00:04:11.920" video="mainVideo" id=subtitle]]
+[[!template text="for a site that you've been" start="00:04:14.560" video="mainVideo" id=subtitle]]
+[[!template text="to or search for some keyword in a" start="00:04:16.560" video="mainVideo" id=subtitle]]
+[[!template text="search engine." start="00:04:19.440" video="mainVideo" id=subtitle]]
+[[!template text="So, this is all achieved by utilizing the" start="00:04:21.840" video="mainVideo" id=subtitle]]
+[[!template text="popular completion framework in the" start="00:04:24.240" video="mainVideo" id=subtitle]]
+[[!template text="Emacs ecosystem — ivy." start="00:04:25.919" video="mainVideo" id=subtitle]]
+[[!template text="So, lazycat decided to develop a" start="00:04:29.280" video="mainVideo" id=subtitle]]
+[[!template text="solution of his own in 2018," start="00:04:31.120" video="mainVideo" id=subtitle]]
+[[!template text="namely the EAF project, so, I joined the" start="00:04:33.680" video="mainVideo" id=subtitle]]
+[[!template text="development last year, 2019." start="00:04:36.960" video="mainVideo" id=subtitle]]
+[[!template text="EAF is" start="00:04:42.756" video="mainVideo" id=subtitle]]
+[[!template text="a highly customizable and extensible" start="00:04:44.000" video="mainVideo" id=subtitle]]
+[[!template text="GUI application framework that extends" start="00:04:47.880" video="mainVideo" id=subtitle]]
+[[!template text="Emacs to graphical capabilities using" start="00:04:49.759" video="mainVideo" id=subtitle]]
+[[!template text="PyQt5, and it is not a window manager." start="00:04:52.056" video="mainVideo" id=subtitle]]
+[[!template text="Alright. So, in the README, you can see a" start="00:04:57.840" video="mainVideo" id=subtitle]]
+[[!template text="list of GIFs" start="00:05:02.479" video="mainVideo" id=subtitle]]
+[[!template text="showcasing all the available EAF" start="00:05:03.440" video="mainVideo" id=subtitle]]
+[[!template text="applications," start="00:05:05.600" video="mainVideo" id=subtitle]]
+[[!template text="a browser, a markdown previewer, a video" start="00:05:06.720" video="mainVideo" id=subtitle]]
+[[!template text="player, a PDF viewer, and more." start="00:05:09.520" video="mainVideo" id=subtitle]]
+[[!template text="Today I don't have" start="00:05:12.789" video="mainVideo" id=subtitle]]
+[[!template text="enough time to demonstrate each one of" start="00:05:14.240" video="mainVideo" id=subtitle]]
+[[!template text="them," start="00:05:16.160" video="mainVideo" id=subtitle]]
+[[!template text="but I will select a couple applications" start="00:05:16.560" video="mainVideo" id=subtitle]]
+[[!template text="to show you." start="00:05:18.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, since we are already using EAF browser," start="00:05:21.120" video="mainVideo" id=subtitle]]
+[[!template text="we'll start with this. Besides using the" start="00:05:24.240" video="mainVideo" id=subtitle]]
+[[!template text="classic Control n (C-n), Control p (C-p)" start="00:05:27.840" video="mainVideo" id=subtitle]]
+[[!template text="you can also use the Vim style hjkl to" start="00:05:29.600" video="mainVideo" id=subtitle]]
+[[!template text="move up or down." start="00:05:32.000" video="mainVideo" id=subtitle]]
+[[!template text="Also, Meta Shift comma (M-<) or g (moves) to the" start="00:05:33.840" video="mainVideo" id=subtitle]]
+[[!template text="beginning of page," start="00:05:36.320" video="mainVideo" id=subtitle]]
+[[!template text="Meta Shift period (M->) or capital g (moves) to" start="00:05:37.280" video="mainVideo" id=subtitle]]
+[[!template text="the end of page." start="00:05:39.120" video="mainVideo" id=subtitle]]
+[[!template text="Vimium and Surfingkeys" start="00:05:41.199" video="mainVideo" id=subtitle]]
+[[!template text="are popular keyboard-based" start="00:05:45.306" video="mainVideo" id=subtitle]]
+[[!template text="browsing techniques in Chrome," start="00:05:46.479" video="mainVideo" id=subtitle]]
+[[!template text="and they've imported here as well. You" start="00:05:48.400" video="mainVideo" id=subtitle]]
+[[!template text="can press f to toggle markers pointing" start="00:05:50.479" video="mainVideo" id=subtitle]]
+[[!template text="to" start="00:05:52.720" video="mainVideo" id=subtitle]]
+[[!template text="all the links in the current page, say, I" start="00:05:53.039" video="mainVideo" id=subtitle]]
+[[!template text="want to visit the wiki —" start="00:05:55.280" video="mainVideo" id=subtitle]]
+[[!template text="which comes very very handy when you" start="00:05:56.960" video="mainVideo" id=subtitle]]
+[[!template text="want to configure EAF to your liking," start="00:05:59.680" video="mainVideo" id=subtitle]]
+[[!template text="so you see the marker on top of wiki is" start="00:06:02.400" video="mainVideo" id=subtitle]]
+[[!template text="dd," start="00:06:04.720" video="mainVideo" id=subtitle]]
+[[!template text="press dd and Enter (RET), and now" start="00:06:05.440" video="mainVideo" id=subtitle]]
+[[!template text="you are navigated to this link, so you" start="00:06:08.479" video="mainVideo" id=subtitle]]
+[[!template text="don't need to use your mouse at all." start="00:06:10.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, a full list of key bindings can be" start="00:06:13.840" video="mainVideo" id=subtitle]]
+[[!template text="found when you (press)" start="00:06:16.560" video="mainVideo" id=subtitle]]
+[[!template text="Control h m (C-h m), just as any other Emacs major" start="00:06:17.680" video="mainVideo" id=subtitle]]
+[[!template text="mode," start="00:06:20.560" video="mainVideo" id=subtitle]]
+[[!template text="so you don't have to remember everything…" start="00:06:21.199" video="mainVideo" id=subtitle]]
+[[!template text="all the key bindings I said to you." start="00:06:22.960" video="mainVideo" id=subtitle]]
+[[!template text="So, this is a global binding application" start="00:06:25.600" video="mainVideo" id=subtitle]]
+[[!template text="to every other EAF application as well." start="00:06:28.560" video="mainVideo" id=subtitle]]
+[[!template text="You can find it under the wiki in the" start="00:06:30.960" video="mainVideo" id=subtitle]]
+[[!template text="keybindings" start="00:06:36.720" video="mainVideo" id=subtitle]]
+[[!template text="section, so press f again and use" start="00:06:37.600" video="mainVideo" id=subtitle]]
+[[!template text="ns, press Enter (RET), now you're in the" start="00:06:40.639" video="mainVideo" id=subtitle]]
+[[!template text="keybindings web page." start="00:06:44.240" video="mainVideo" id=subtitle]]
+[[!template text="You can see all of the keybindings" start="00:06:45.600" video="mainVideo" id=subtitle]]
+[[!template text="available in every" start="00:06:47.520" video="mainVideo" id=subtitle]]
+[[!template text="EAF application, and you can try them out," start="00:06:49.280" video="mainVideo" id=subtitle]]
+[[!template text="and you can customize your key bindings" start="00:06:53.919" video="mainVideo" id=subtitle]]
+[[!template text="using eaf-bind-key," start="00:06:56.479" video="mainVideo" id=subtitle]]
+[[!template text="you can customize Control n (C-n) as" start="00:06:57.956" video="mainVideo" id=subtitle]]
+[[!template text="in the web page" start="00:07:00.240" video="mainVideo" id=subtitle]]
+[[!template text="to scroll up in the EAF PDF viewer, or you" start="00:07:02.960" video="mainVideo" id=subtitle]]
+[[!template text="can unbind" start="00:07:05.759" video="mainVideo" id=subtitle]]
+[[!template text="an existing binding using" start="00:07:06.639" video="mainVideo" id=subtitle]]
+[[!template text="eaf-bind-key," start="00:07:08.806" video="mainVideo" id=subtitle]]
+[[!template text="bind it to nil, so it doesn't bind to" start="00:07:10.000" video="mainVideo" id=subtitle]]
+[[!template text="anything." start="00:07:14.840" video="mainVideo" id=subtitle]]
+[[!template text="Okay, so, here comes the important part," start="00:07:16.160" video="mainVideo" id=subtitle]]
+[[!template text="if you want to customize EAF, you should" start="00:07:20.319" video="mainVideo" id=subtitle]]
+[[!template text="visit the customization page in the wiki." start="00:07:22.479" video="mainVideo" id=subtitle]]
+[[!template text="Now, I press Meta b to go back in" start="00:07:25.440" video="mainVideo" id=subtitle]]
+[[!template text="history, and" start="00:07:28.840" video="mainVideo" id=subtitle]]
+[[!template text="go to the customization page, press f," start="00:07:30.240" video="mainVideo" id=subtitle]]
+[[!template text="press ad," start="00:07:32.960" video="mainVideo" id=subtitle]]
+[[!template text="Enter, and now we're in the customization" start="00:07:34.080" video="mainVideo" id=subtitle]]
+[[!template text="page." start="00:07:36.639" video="mainVideo" id=subtitle]]
+[[!template text="So, the first customization option you" start="00:07:37.360" video="mainVideo" id=subtitle]]
+[[!template text="see is dark mode," start="00:07:39.280" video="mainVideo" id=subtitle]]
+[[!template text="let's say, if you want to turn on the dark" start="00:07:42.639" video="mainVideo" id=subtitle]]
+[[!template text="mode for EAF browser," start="00:07:44.479" video="mainVideo" id=subtitle]]
+[[!template text="and you don't want to use your mouse to" start="00:07:46.720" video="mainVideo" id=subtitle]]
+[[!template text="do all this stuff." start="00:07:48.479" video="mainVideo" id=subtitle]]
+[[!template text="You press c, and you can select" start="00:07:49.919" video="mainVideo" id=subtitle]]
+[[!template text="c to toggle the caret browsing, you can" start="00:07:53.360" video="mainVideo" id=subtitle]]
+[[!template text="see a lot of markers available," start="00:07:55.840" video="mainVideo" id=subtitle]]
+[[!template text="poped up again, but they're not" start="00:07:58.240" video="mainVideo" id=subtitle]]
+[[!template text="on top of links but instead of" start="00:08:01.280" video="mainVideo" id=subtitle]]
+[[!template text="paragraphs." start="00:08:02.720" video="mainVideo" id=subtitle]]
+[[!template text="You select the paragraph of your choice," start="00:08:03.599" video="mainVideo" id=subtitle]]
+[[!template text="in this case you want" start="00:08:05.360" video="mainVideo" id=subtitle]]
+[[!template text="ls which comes here," start="00:08:06.639" video="mainVideo" id=subtitle]]
+[[!template text="and then you just move the" start="00:08:10.240" video="mainVideo" id=subtitle]]
+[[!template text="cursor like what you always do" start="00:08:12.720" video="mainVideo" id=subtitle]]
+[[!template text="in Emacs, and now you select everything" start="00:08:15.120" video="mainVideo" id=subtitle]]
+[[!template text="and use Meta w (M-w) to copy the text." start="00:08:18.800" video="mainVideo" id=subtitle]]
+[[!template text="Now, we (run) Meta Shift colon (M-:) to evaluate" start="00:08:26.479" video="mainVideo" id=subtitle]]
+[[!template text="what we just copied," start="00:08:29.199" video="mainVideo" id=subtitle]]
+[[!template text="and set that to true, and" start="00:08:30.960" video="mainVideo" id=subtitle]]
+[[!template text="press r or F5 to refresh the page," start="00:08:35.120" video="mainVideo" id=subtitle]]
+[[!template text="voilà we have the dark mode enabled." start="00:08:38.320" video="mainVideo" id=subtitle]]
+[[!template text="So, there are…, well, let's toggle" start="00:08:42.159" video="mainVideo" id=subtitle]]
+[[!template text="it back off for now." start="00:08:44.880" video="mainVideo" id=subtitle]]
+[[!template text="Now, we (run) Meta Shift colon (M-:) again," start="00:08:46.160" video="mainVideo" id=subtitle]]
+[[!template text="and we find the one we just used, and" start="00:08:49.360" video="mainVideo" id=subtitle]]
+[[!template text="change it back to false," start="00:08:51.600" video="mainVideo" id=subtitle]]
+[[!template text="and refresh the page, back in the light" start="00:08:53.519" video="mainVideo" id=subtitle]]
+[[!template text="mode." start="00:08:56.880" video="mainVideo" id=subtitle]]
+[[!template text="So, there are many other customization" start="00:08:59.360" video="mainVideo" id=subtitle]]
+[[!template text="options available, you can either" start="00:09:02.160" video="mainVideo" id=subtitle]]
+[[!template text="evaluate like what we just did or add it" start="00:09:03.680" video="mainVideo" id=subtitle]]
+[[!template text="to your Emacs configuration file." start="00:09:05.920" video="mainVideo" id=subtitle]]
+[[!template text="So, in this wiki…," start="00:09:08.000" video="mainVideo" id=subtitle]]
+[[!template text="you can make the EAF browser to" start="00:09:11.680" video="mainVideo" id=subtitle]]
+[[!template text="continue where you left off" start="00:09:14.399" video="mainVideo" id=subtitle]]
+[[!template text="similar to the Chromium setting." start="00:09:16.320" video="mainVideo" id=subtitle]]
+[[!template text="You can make EAF the default browser" start="00:09:20.160" video="mainVideo" id=subtitle]]
+[[!template text="(in) Emacs by" start="00:09:22.800" video="mainVideo" id=subtitle]]
+[[!template text="aliasing browse-web to" start="00:09:23.839" video="mainVideo" id=subtitle]]
+[[!template text="eaf-open-browser," start="00:09:26.720" video="mainVideo" id=subtitle]]
+[[!template text="or set the browse-url-browser-function to" start="00:09:27.680" video="mainVideo" id=subtitle]]
+[[!template text="eaf-open-browser, there's just some tricks." start="00:09:31.200" video="mainVideo" id=subtitle]]
+[[!template text="And there (is) also" start="00:09:33.519" video="mainVideo" id=subtitle]]
+[[!template text="an experimental adblocker currently" start="00:09:34.480" video="mainVideo" id=subtitle]]
+[[!template text="in place, therefore it can" start="00:09:37.920" video="mainVideo" id=subtitle]]
+[[!template text="block some elements but not all, so" start="00:09:41.680" video="mainVideo" id=subtitle]]
+[[!template text="we really encourage people to help us" start="00:09:44.720" video="mainVideo" id=subtitle]]
+[[!template text="test out and" start="00:09:47.279" video="mainVideo" id=subtitle]]
+[[!template text="add more conditions in." start="00:09:48.240" video="mainVideo" id=subtitle]]
+[[!template text="So, you can…, the EAF Browser is able to" start="00:09:51.440" video="mainVideo" id=subtitle]]
+[[!template text="download" start="00:09:54.560" video="mainVideo" id=subtitle]]
+[[!template text="any files from the internet, and it will" start="00:09:55.760" video="mainVideo" id=subtitle]]
+[[!template text="be downloaded using Aria2." start="00:09:57.680" video="mainVideo" id=subtitle]]
+[[!template text="You can also customize" start="00:10:04.000" video="mainVideo" id=subtitle]]
+[[!template text="the eaf-browser-download-path" start="00:10:05.339" video="mainVideo" id=subtitle]]
+[[!template text="using eaf-setq, it's a function that we" start="00:10:07.200" video="mainVideo" id=subtitle]]
+[[!template text="defined similar to setq," start="00:10:11.120" video="mainVideo" id=subtitle]]
+[[!template text="the normal setq we know." start="00:10:13.623" video="mainVideo" id=subtitle]]
+[[!template text="So, by default the download file is" start="00:10:15.040" video="mainVideo" id=subtitle]]
+[[!template text="stored in your home directory slash" start="00:10:16.480" video="mainVideo" id=subtitle]]
+[[!template text="downloads," start="00:10:18.160" video="mainVideo" id=subtitle]]
+[[!template text="and you can change that whenever you" start="00:10:19.600" video="mainVideo" id=subtitle]]
+[[!template text="want. You can also disable" start="00:10:20.800" video="mainVideo" id=subtitle]]
+[[!template text="saving browsing history, so, remember" start="00:10:22.720" video="mainVideo" id=subtitle]]
+[[!template text="when I press…," start="00:10:26.079" video="mainVideo" id=subtitle]]
+[[!template text="when I use M-x eaf-open-browser's" start="00:10:27.089" video="mainVideo" id=subtitle]]
+[[!template text="history, I see all the" start="00:10:28.959" video="mainVideo" id=subtitle]]
+[[!template text="histories here, but if you want more" start="00:10:30.480" video="mainVideo" id=subtitle]]
+[[!template text="privacy, you don't want that to be" start="00:10:32.079" video="mainVideo" id=subtitle]]
+[[!template text="available at all. You can turn it off" start="00:10:33.680" video="mainVideo" id=subtitle]]
+[[!template text="easily with eaf-setq," start="00:10:35.360" video="mainVideo" id=subtitle]]
+[[!template text="and set that remember-history to false." start="00:10:37.356" video="mainVideo" id=subtitle]]
+[[!template text="You can also set your default search" start="00:10:40.640" video="mainVideo" id=subtitle]]
+[[!template text="engine." start="00:10:42.399" video="mainVideo" id=subtitle]]
+[[!template text="Right now we have Google, although" start="00:10:43.839" video="mainVideo" id=subtitle]]
+[[!template text="not really good but… Google and also" start="00:10:47.200" video="mainVideo" id=subtitle]]
+[[!template text="DuckDuckGo which is a better search engine," start="00:10:50.480" video="mainVideo" id=subtitle]]
+[[!template text="well, yeah, ethically better search" start="00:10:53.600" video="mainVideo" id=subtitle]]
+[[!template text="engine." start="00:10:57.360" video="mainVideo" id=subtitle]]
+[[!template text="So, you can also configure" start="00:10:59.360" video="mainVideo" id=subtitle]]
+[[!template text="the zoom. The default zoom of your" start="00:11:02.560" video="mainVideo" id=subtitle]]
+[[!template text="browser is 1.0, you can convert" start="00:11:05.040" video="mainVideo" id=subtitle]]
+[[!template text="default-zoom to 1.25, so when" start="00:11:07.600" video="mainVideo" id=subtitle]]
+[[!template text="you open any web page, it will be" start="00:11:10.000" video="mainVideo" id=subtitle]]
+[[!template text="zoomed by default. You can" start="00:11:11.920" video="mainVideo" id=subtitle]]
+[[!template text="also disable JavaScript, although I" start="00:11:17.360" video="mainVideo" id=subtitle]]
+[[!template text="personally don't really suggest you to" start="00:11:20.399" video="mainVideo" id=subtitle]]
+[[!template text="do, because it will" start="00:11:22.240" video="mainVideo" id=subtitle]]
+[[!template text="basically break a lot of our features," start="00:11:23.440" video="mainVideo" id=subtitle]]
+[[!template text="because a lot of the browser" start="00:11:26.240" video="mainVideo" id=subtitle]]
+[[!template text="related features" start="00:11:28.480" video="mainVideo" id=subtitle]]
+[[!template text="must be implemented using JavaScript," start="00:11:29.519" video="mainVideo" id=subtitle]]
+[[!template text="but yeah, you can do it if you really" start="00:11:33.760" video="mainVideo" id=subtitle]]
+[[!template text="want to. And there's also some" start="00:11:35.440" video="mainVideo" id=subtitle]]
+[[!template text="customization on EAF Camera" start="00:11:37.920" video="mainVideo" id=subtitle]]
+[[!template text="you can do as well." start="00:11:41.519" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's move on to EAF PDF Viewer." start="00:11:47.760" video="mainVideo" id=subtitle]]
+[[!template text="Now, let's open" start="00:11:52.399" video="mainVideo" id=subtitle]]
+[[!template text="the PDF file using EAF." start="00:11:56.079" video="mainVideo" id=subtitle]]
+[[!template text="So, that's one something already here, but" start="00:11:59.440" video="mainVideo" id=subtitle]]
+[[!template text="let's open it here." start="00:12:01.519" video="mainVideo" id=subtitle]]
+[[!template text="So, eaf-open, and" start="00:12:02.720" video="mainVideo" id=subtitle]]
+[[!template text="select &quot;Introduction to Programming in" start="00:12:06.079" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Lisp&quot;." start="00:12:08.160" video="mainVideo" id=subtitle]]
+[[!template text="I have it already open, but it's okay." start="00:12:11.440" video="mainVideo" id=subtitle]]
+[[!template text="So, you have the file," start="00:12:13.760" video="mainVideo" id=subtitle]]
+[[!template text="you have other files displayed…" start="00:12:17.040" video="mainVideo" id=subtitle]]
+[[!template text="you have all the pages display, sorry." start="00:12:20.160" video="mainVideo" id=subtitle]]
+[[!template text="There are 273 pages in total, but notice" start="00:12:23.200" video="mainVideo" id=subtitle]]
+[[!template text="how fast it is to browse" start="00:12:27.040" video="mainVideo" id=subtitle]]
+[[!template text="all the pages, it is blazingly fast," start="00:12:29.279" video="mainVideo" id=subtitle]]
+[[!template text="that's all thanks to Python and" start="00:12:31.440" video="mainVideo" id=subtitle]]
+[[!template text="MuPDF which you don't really get from" start="00:12:33.519" video="mainVideo" id=subtitle]]
+[[!template text="Emacs Lisp." start="00:12:37.040" video="mainVideo" id=subtitle]]
+[[!template text="So, let's say if I want to jump to page" start="00:12:40.880" video="mainVideo" id=subtitle]]
+[[!template text="50. We press p and Enter 50." start="00:12:43.600" video="mainVideo" id=subtitle]]
+[[!template text="And here we are, we are at page 50." start="00:12:48.639" video="mainVideo" id=subtitle]]
+[[!template text="You can look at the lower right to" start="00:12:53.279" video="mainVideo" id=subtitle]]
+[[!template text="verify the page you're on." start="00:12:55.440" video="mainVideo" id=subtitle]]
+[[!template text="You can use i to toggle dark mode" start="00:12:58.880" video="mainVideo" id=subtitle]]
+[[!template text="as expected. Let's say you want to" start="00:13:05.120" video="mainVideo" id=subtitle]]
+[[!template text="find" start="00:13:07.839" video="mainVideo" id=subtitle]]
+[[!template text="table of contents, so use Control s —" start="00:13:08.240" video="mainVideo" id=subtitle]]
+[[!template text="the Emacs default binding for I-search," start="00:13:11.519" video="mainVideo" id=subtitle]]
+[[!template text="and search for a &quot;table of contents&quot;," start="00:13:15.680" video="mainVideo" id=subtitle]]
+[[!template text="here we are, it is highlighted for you," start="00:13:19.360" video="mainVideo" id=subtitle]]
+[[!template text="and you can Control s for more but" start="00:13:21.680" video="mainVideo" id=subtitle]]
+[[!template text="there's only one match," start="00:13:23.120" video="mainVideo" id=subtitle]]
+[[!template text="you (press) Control g (C-g) to" start="00:13:26.006" video="mainVideo" id=subtitle]]
+[[!template text="disable the highlight," start="00:13:27.200" video="mainVideo" id=subtitle]]
+[[!template text="and you see a lot of options for you to" start="00:13:28.800" video="mainVideo" id=subtitle]]
+[[!template text="go." start="00:13:30.880" video="mainVideo" id=subtitle]]
+[[!template text="Okay. Let's say, if you want to go to the" start="00:13:32.320" video="mainVideo" id=subtitle]]
+[[!template text="preface." start="00:13:35.040" video="mainVideo" id=subtitle]]
+[[!template text="That is, you press f which is" start="00:13:36.240" video="mainVideo" id=subtitle]]
+[[!template text="also similar to" start="00:13:39.519" video="mainVideo" id=subtitle]]
+[[!template text="EAF browser, you press f for Vimium," start="00:13:40.639" video="mainVideo" id=subtitle]]
+[[!template text="and you see the marker, now change to wn," start="00:13:44.240" video="mainVideo" id=subtitle]]
+[[!template text="press wn, and then you can go to the" start="00:13:47.760" video="mainVideo" id=subtitle]]
+[[!template text="preface." start="00:13:50.160" video="mainVideo" id=subtitle]]
+[[!template text="Now, we are at the preface." start="00:13:51.279" video="mainVideo" id=subtitle]]
+[[!template text="So, now you finish reading, you want to" start="00:13:54.320" video="mainVideo" id=subtitle]]
+[[!template text="save your progress?" start="00:13:56.480" video="mainVideo" id=subtitle]]
+[[!template text="No worries, it is already saved for you" start="00:13:57.600" video="mainVideo" id=subtitle]]
+[[!template text="by EAF. You can safely" start="00:13:59.440" video="mainVideo" id=subtitle]]
+[[!template text="close the document using x," start="00:14:01.199" video="mainVideo" id=subtitle]]
+[[!template text="and opening again, eaf-open," start="00:14:04.240" video="mainVideo" id=subtitle]]
+[[!template text="and the file…, see you are at" start="00:14:07.519" video="mainVideo" id=subtitle]]
+[[!template text="preface again. You're right at where" start="00:14:10.560" video="mainVideo" id=subtitle]]
+[[!template text="you left of." start="00:14:14.000" video="mainVideo" id=subtitle]]
+[[!template new="1" text="You can also use M-x org-store-link, or" start="00:14:16.560" video="mainVideo" id=subtitle]]
+[[!template text="Control c l (C-c l) —" start="00:14:19.440" video="mainVideo" id=subtitle]]
+[[!template text="which I prefer, if you want to save a" start="00:14:20.480" video="mainVideo" id=subtitle]]
+[[!template text="particular page in" start="00:14:23.279" video="mainVideo" id=subtitle]]
+[[!template text="a Org mode file. Now," start="00:14:24.480" video="mainVideo" id=subtitle]]
+[[!template text="I go back to my presentation doc, I don't" start="00:14:28.240" video="mainVideo" id=subtitle]]
+[[!template text="need this anymore." start="00:14:30.320" video="mainVideo" id=subtitle]]
+[[!template text="So, you just (press) Control c Control l (C-c C-l)," start="00:14:31.760" video="mainVideo" id=subtitle]]
+[[!template text="or I think M-x org-insert-link." start="00:14:35.600" video="mainVideo" id=subtitle]]
+[[!template text="You can find the file right here, and" start="00:14:39.120" video="mainVideo" id=subtitle]]
+[[!template text="you press Enter (RET)," start="00:14:41.040" video="mainVideo" id=subtitle]]
+[[!template text="and you press Enter (RET) for the description" start="00:14:42.399" video="mainVideo" id=subtitle]]
+[[!template text="again, and now it's right here," start="00:14:44.320" video="mainVideo" id=subtitle]]
+[[!template text="and Control c Control o (C-c C-o) to open it. Voilà!" start="00:14:46.480" video="mainVideo" id=subtitle]]
+[[!template text="You're back." start="00:14:50.720" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Let's now demonstrate the EAF Video" start="00:14:54.000" video="mainVideo" id=subtitle]]
+[[!template text="Player." start="00:14:57.120" video="mainVideo" id=subtitle]]
+[[!template text="So, M-x eaf-open, you use eaf-open whenever" start="00:14:58.880" video="mainVideo" id=subtitle]]
+[[!template text="you want to" start="00:15:02.639" video="mainVideo" id=subtitle]]
+[[!template text="open some file. You use eaf-open-browser" start="00:15:03.279" video="mainVideo" id=subtitle]]
+[[!template text="if you want to use some" start="00:15:06.079" video="mainVideo" id=subtitle]]
+[[!template text="actual application that's not really" start="00:15:07.279" video="mainVideo" id=subtitle]]
+[[!template text="related to a file." start="00:15:09.920" video="mainVideo" id=subtitle]]
+[[!template text="So, eaf-open, and select the video" start="00:15:11.199" video="mainVideo" id=subtitle]]
+[[!template text="you want, so," start="00:15:14.800" video="mainVideo" id=subtitle]]
+[[!template text="video-demo, I already have a video" start="00:15:15.600" video="mainVideo" id=subtitle]]
+[[!template text="demo" start="00:15:18.320" video="mainVideo" id=subtitle]]
+[[!template text="ready, because I recorded a video of" start="00:15:19.040" video="mainVideo" id=subtitle]]
+[[!template text="the demo" start="00:15:21.839" video="mainVideo" id=subtitle]]
+[[!template text="of the EAF Camera, have a look." start="00:15:22.720" video="mainVideo" id=subtitle]]
+[[!template text="Let's move to the beginning, &quot;Hello people" start="00:15:26.000" video="mainVideo" id=subtitle]]
+[[!template text="from the future!" start="00:15:28.079" video="mainVideo" id=subtitle]]
+[[!template text="This is a demo of the EAF Video Player" start="00:15:29.279" video="mainVideo" id=subtitle]]
+[[!template text="that demos the EAF Camera feature," start="00:15:32.399" video="mainVideo" id=subtitle]]
+[[!template text="so, as you can see on the screen of me" start="00:15:35.199" video="mainVideo" id=subtitle]]
+[[!template text="inside my camera," start="00:15:37.440" video="mainVideo" id=subtitle]]
+[[!template text="and the screen is actually with all" start="00:15:38.639" video="mainVideo" id=subtitle]]
+[[!template text="within Emacs." start="00:15:40.959" video="mainVideo" id=subtitle]]
+[[!template text="(Right, the video itself is as well, haha.)" start="00:15:42.880" video="mainVideo" id=subtitle]]
+[[!template text="You can open this" start="00:15:45.273" video="mainVideo" id=subtitle]]
+[[!template text="using eaf-open-camera" start="00:15:46.079" video="mainVideo" id=subtitle]]
+[[!template text="which I'm already into, and you can" start="00:15:49.839" video="mainVideo" id=subtitle]]
+[[!template text="press" start="00:15:53.040" video="mainVideo" id=subtitle]]
+[[!template text="p to capture a photo," start="00:15:53.600" video="mainVideo" id=subtitle]]
+[[!template text="so, the photo is by default stored at" start="00:15:56.720" video="mainVideo" id=subtitle]]
+[[!template text="your $HOME/Downloads directory," start="00:15:59.680" video="mainVideo" id=subtitle]]
+[[!template text="and you can modify it" start="00:16:02.773" video="mainVideo" id=subtitle]]
+[[!template text="freely. If you go here, and you can see" start="00:16:04.320" video="mainVideo" id=subtitle]]
+[[!template text="the camera stored" start="00:16:07.839" video="mainVideo" id=subtitle]]
+[[!template text="right here.&quot;" start="00:16:09.519" video="mainVideo" id=subtitle]]
+[[!template text="So, you press Space (SPC) to pause, what I used" start="00:16:13.759" video="mainVideo" id=subtitle]]
+[[!template text="here is" start="00:16:16.240" video="mainVideo" id=subtitle]]
+[[!template text="the eaf-open-this-from-dired." start="00:16:17.120" video="mainVideo" id=subtitle]]
+[[!template text="Basically, in dired" start="00:16:20.320" video="mainVideo" id=subtitle]]
+[[!template text="you select" start="00:16:22.959" video="mainVideo" id=subtitle]]
+[[!template text="the file that should be opened by" start="00:16:23.839" video="mainVideo" id=subtitle]]
+[[!template text="EAF, and I used that. It detects that" start="00:16:26.959" video="mainVideo" id=subtitle]]
+[[!template text="it wants to use the EAF Image Viewer, so" start="00:16:30.320" video="mainVideo" id=subtitle]]
+[[!template text="I accidentally tested EAF Image Viewer" start="00:16:32.720" video="mainVideo" id=subtitle]]
+[[!template text="before I noticed. That gives the" start="00:16:35.839" video="mainVideo" id=subtitle]]
+[[!template text="image of the photo I just took" start="00:16:40.240" video="mainVideo" id=subtitle]]
+[[!template text="using EAF Camera. As you can see, you" start="00:16:43.680" video="mainVideo" id=subtitle]]
+[[!template text="can" start="00:16:47.040" video="mainVideo" id=subtitle]]
+[[!template text="use hl — the Vim binding to navigate" start="00:16:47.360" video="mainVideo" id=subtitle]]
+[[!template text="in the timestamp in the video," start="00:16:50.720" video="mainVideo" id=subtitle]]
+[[!template text="and I can use" start="00:16:53.256" video="mainVideo" id=subtitle]]
+[[!template text="jk to change the volumes of the video." start="00:16:55.920" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Alright. Now, you've seen all the basic" start="00:17:02.320" video="mainVideo" id=subtitle]]
+[[!template text="usages" start="00:17:05.520" video="mainVideo" id=subtitle]]
+[[!template text="of the EAF project, it comes the question" start="00:17:06.160" video="mainVideo" id=subtitle]]
+[[!template text="of what is the magic behind it." start="00:17:08.720" video="mainVideo" id=subtitle]]
+[[!template text="All right. Let's open the hacking page in" start="00:17:11.600" video="mainVideo" id=subtitle]]
+[[!template text="the wiki," start="00:17:14.559" video="mainVideo" id=subtitle]]
+[[!template text="the design is laid out in a diagram here." start="00:17:15.919" video="mainVideo" id=subtitle]]
+[[!template text="Let's put it" start="00:17:20.400" video="mainVideo" id=subtitle]]
+[[!template text="side by side along with my text, so" start="00:17:25.120" video="mainVideo" id=subtitle]]
+[[!template text="we can follow through." start="00:17:27.839" video="mainVideo" id=subtitle]]
+[[!template text="Right, okay. Let me…," start="00:17:32.320" video="mainVideo" id=subtitle]]
+[[!template text="sorry, let me drink some water." start="00:17:36.080" video="mainVideo" id=subtitle]]
+[[!template text="This page in the wiki went into a lot" start="00:17:42.320" video="mainVideo" id=subtitle]]
+[[!template text="of detail," start="00:17:46.000" video="mainVideo" id=subtitle]]
+[[!template text="due to the time constraint I will just" start="00:17:48.160" video="mainVideo" id=subtitle]]
+[[!template text="rephrase some of the ideas here, so for" start="00:17:49.520" video="mainVideo" id=subtitle]]
+[[!template text="anyone interested, please have a look at" start="00:17:51.679" video="mainVideo" id=subtitle]]
+[[!template text="the wiki yourself." start="00:17:53.520" video="mainVideo" id=subtitle]]
+[[!template text="The easiest way to think about EAF is" start="00:17:55.600" video="mainVideo" id=subtitle]]
+[[!template text="that" start="00:17:58.160" video="mainVideo" id=subtitle]]
+[[!template text="the actual GUI application is started in" start="00:17:58.720" video="mainVideo" id=subtitle]]
+[[!template text="the background," start="00:18:01.679" video="mainVideo" id=subtitle]]
+[[!template text="then the frame of the application is" start="00:18:02.960" video="mainVideo" id=subtitle]]
+[[!template text="attached to the appropriate location on" start="00:18:04.960" video="mainVideo" id=subtitle]]
+[[!template text="the" start="00:18:07.120" video="mainVideo" id=subtitle]]
+[[!template text="Emacs window. So," start="00:18:07.679" video="mainVideo" id=subtitle]]
+[[!template text="EAF linked Qt5 with Emacs using" start="00:18:10.720" video="mainVideo" id=subtitle]]
+[[!template text="Elisp and Python." start="00:18:13.440" video="mainVideo" id=subtitle]]
+[[!template text="On the Python side which is colored" start="00:18:14.960" video="mainVideo" id=subtitle]]
+[[!template text="yellow in the image," start="00:18:17.120" video="mainVideo" id=subtitle]]
+[[!template text="we have QGraphicsView and" start="00:18:18.640" video="mainVideo" id=subtitle]]
+[[!template text="QGraphicsScene objects." start="00:18:20.439" video="mainVideo" id=subtitle]]
+[[!template text="These are used to simulate the Emacs" start="00:18:22.960" video="mainVideo" id=subtitle]]
+[[!template text="window buffer design" start="00:18:25.039" video="mainVideo" id=subtitle]]
+[[!template text="where QGraphicsScene is similar to" start="00:18:26.640" video="mainVideo" id=subtitle]]
+[[!template text="buffers in Emacs," start="00:18:28.640" video="mainVideo" id=subtitle]]
+[[!template text="it controls the state and the content" start="00:18:29.840" video="mainVideo" id=subtitle]]
+[[!template text="details of the application" start="00:18:31.840" video="mainVideo" id=subtitle]]
+[[!template text="where QGraphicsView is similar to Emacs" start="00:18:34.240" video="mainVideo" id=subtitle]]
+[[!template text="window. It populates the buffer" start="00:18:41.200" video="mainVideo" id=subtitle]]
+[[!template text="(QGraphicsScene) to the foreground at" start="00:18:43.200" video="mainVideo" id=subtitle]]
+[[!template text="the appropriate" start="00:18:45.919" video="mainVideo" id=subtitle]]
+[[!template text="position." start="00:18:46.960" video="mainVideo" id=subtitle]]
+[[!template text="Whenever an EAF mode buffer" start="00:18:48.573" video="mainVideo" id=subtitle]]
+[[!template text="brings to a background…." start="00:18:50.320" video="mainVideo" id=subtitle]]
+[[!template text="Whenever an EAF mode buffer brings to the" start="00:18:57.679" video="mainVideo" id=subtitle]]
+[[!template text="foreground, sorry," start="00:18:59.679" video="mainVideo" id=subtitle]]
+[[!template text="a QGraphicsView instance is" start="00:19:00.880" video="mainVideo" id=subtitle]]
+[[!template text="created, and whenever the buffer goes to" start="00:19:02.559" video="mainVideo" id=subtitle]]
+[[!template text="the background" start="00:19:05.120" video="mainVideo" id=subtitle]]
+[[!template text="the QGraphicsView instance is then" start="00:19:06.080" video="mainVideo" id=subtitle]]
+[[!template text="deleted," start="00:19:08.000" video="mainVideo" id=subtitle]]
+[[!template text="while QGraphicsScene — the actual" start="00:19:09.120" video="mainVideo" id=subtitle]]
+[[!template text="process — remains running in the" start="00:19:10.960" video="mainVideo" id=subtitle]]
+[[!template text="background until the EAF mode buffer is" start="00:19:12.480" video="mainVideo" id=subtitle]]
+[[!template text="killed." start="00:19:14.480" video="mainVideo" id=subtitle]]
+[[!template text="GPU compositing is used to ensure that" start="00:19:16.000" video="mainVideo" id=subtitle]]
+[[!template text="QGraphicsView and" start="00:19:18.320" video="mainVideo" id=subtitle]]
+[[!template text="QGraphicsScene is synchronized real time." start="00:19:19.440" video="mainVideo" id=subtitle]]
+[[!template text="Using QWindow::setParent function" start="00:19:21.840" video="mainVideo" id=subtitle]]
+[[!template text="the QGraphicsView is attached to the" start="00:19:24.000" video="mainVideo" id=subtitle]]
+[[!template text="appropriate location on the Emacs frame," start="00:19:25.679" video="mainVideo" id=subtitle]]
+[[!template text="so that although GUI applications are" start="00:19:27.840" video="mainVideo" id=subtitle]]
+[[!template text="not running within Emacs," start="00:19:30.640" video="mainVideo" id=subtitle]]
+[[!template text="they look as if they were." start="00:19:32.400" video="mainVideo" id=subtitle]]
+[[!template text="When user types on the keyboard it is" start="00:19:36.160" video="mainVideo" id=subtitle]]
+[[!template text="first received by the Emacs" start="00:19:39.039" video="mainVideo" id=subtitle]]
+[[!template text="EAF mode buffer, and then Elisp sends" start="00:19:41.039" video="mainVideo" id=subtitle]]
+[[!template text="the event to QGraphicsScene using" start="00:19:43.520" video="mainVideo" id=subtitle]]
+[[!template text="D-Bus." start="00:19:45.360" video="mainVideo" id=subtitle]]
+[[!template text="When user clicks on the GUI application" start="00:19:46.240" video="mainVideo" id=subtitle]]
+[[!template text="it is received by the QGraphicsView" start="00:19:48.720" video="mainVideo" id=subtitle]]
+[[!template text="and processed in Python. Elisp can" start="00:19:50.799" video="mainVideo" id=subtitle]]
+[[!template text="communicate with Python through D-Bus," start="00:19:53.280" video="mainVideo" id=subtitle]]
+[[!template text="in other words you can" start="00:19:55.200" video="mainVideo" id=subtitle]]
+[[!template text="customize and extend Emacs not just" start="00:19:59.200" video="mainVideo" id=subtitle]]
+[[!template text="using" start="00:20:01.360" video="mainVideo" id=subtitle]]
+[[!template text="Elisp, and now you can use Python, this way" start="00:20:01.760" video="mainVideo" id=subtitle]]
+[[!template text="one can leverage" start="00:20:04.480" video="mainVideo" id=subtitle]]
+[[!template text="all the Python properties like" start="00:20:05.360" video="mainVideo" id=subtitle]]
+[[!template text="multi-threading or some other stuff," start="00:20:07.039" video="mainVideo" id=subtitle]]
+[[!template text="the entire Python ecosystem can be" start="00:20:09.600" video="mainVideo" id=subtitle]]
+[[!template text="utilized as well," start="00:20:11.679" video="mainVideo" id=subtitle]]
+[[!template text="such as the Qt web engine that is the" start="00:20:13.520" video="mainVideo" id=subtitle]]
+[[!template text="basis for" start="00:20:16.159" video="mainVideo" id=subtitle]]
+[[!template text="our EAF Browser, and PyMuPDF is the" start="00:20:16.960" video="mainVideo" id=subtitle]]
+[[!template text="basis for the EAF PDF Viewer." start="00:20:20.640" video="mainVideo" id=subtitle]]
+[[!template text="This really opens the window to many" start="00:20:23.360" video="mainVideo" id=subtitle]]
+[[!template text="many new possibilities to extend Emacs" start="00:20:25.840" video="mainVideo" id=subtitle]]
+[[!template text="using EAF." start="00:20:28.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="All right, back here. We are always" start="00:20:32.720" video="mainVideo" id=subtitle]]
+[[!template text="looking for people to join the" start="00:20:36.080" video="mainVideo" id=subtitle]]
+[[!template text="development, there are many many" start="00:20:37.760" video="mainVideo" id=subtitle]]
+[[!template text="more work that needs to be done," start="00:20:39.679" video="mainVideo" id=subtitle]]
+[[!template text="such as testing and debug EAF on" start="00:20:42.720" video="mainVideo" id=subtitle]]
+[[!template text="more Linux distros and window managers" start="00:20:44.640" video="mainVideo" id=subtitle]]
+[[!template text="such as i3" start="00:20:46.640" video="mainVideo" id=subtitle]]
+[[!template text="and stuff, you can also add new EAF" start="00:20:47.760" video="mainVideo" id=subtitle]]
+[[!template text="applications," start="00:20:51.200" video="mainVideo" id=subtitle]]
+[[!template text="or debug and enhance existing EAF" start="00:20:52.080" video="mainVideo" id=subtitle]]
+[[!template text="applications," start="00:20:54.240" video="mainVideo" id=subtitle]]
+[[!template text="or you can port EAF to native Wayland" start="00:20:55.440" video="mainVideo" id=subtitle]]
+[[!template text="which I just discussed with" start="00:20:58.000" video="mainVideo" id=subtitle]]
+[[!template text="the emacs-webkit author" start="00:21:00.240" video="mainVideo" id=subtitle]]
+[[!template text="Akira Kyle, and he told me that" start="00:21:03.840" video="mainVideo" id=subtitle]]
+[[!template text="EAF doesn't really work on" start="00:21:07.919" video="mainVideo" id=subtitle]]
+[[!template text="native Wayland, because it uses" start="00:21:11.200" video="mainVideo" id=subtitle]]
+[[!template text="XWayland, so it doesn't work on the pgtk" start="00:21:14.320" video="mainVideo" id=subtitle]]
+[[!template text="port of Emacs." start="00:21:16.799" video="mainVideo" id=subtitle]]
+[[!template text="And we also need people to port EAF to" start="00:21:18.159" video="mainVideo" id=subtitle]]
+[[!template text="non-free operating systems" start="00:21:20.559" video="mainVideo" id=subtitle]]
+[[!template text="including Windows and macOS," start="00:21:22.080" video="mainVideo" id=subtitle]]
+[[!template text="and that's because, like, D-Bus is a Linux" start="00:21:25.600" video="mainVideo" id=subtitle]]
+[[!template text="specific feature, so it doesn't really" start="00:21:28.480" video="mainVideo" id=subtitle]]
+[[!template text="work on other platform." start="00:21:30.080" video="mainVideo" id=subtitle]]
+[[!template text="We need to check, replace it with some" start="00:21:31.360" video="mainVideo" id=subtitle]]
+[[!template text="alternative, and" start="00:21:33.039" video="mainVideo" id=subtitle]]
+[[!template text="QGraphicsScene somehow doesn't really" start="00:21:34.640" video="mainVideo" id=subtitle]]
+[[!template text="work on macOS," start="00:21:36.720" video="mainVideo" id=subtitle]]
+[[!template text="and there are many other to-do lists" start="00:21:38.640" video="mainVideo" id=subtitle]]
+[[!template text="available, so please have a look" start="00:21:40.320" video="mainVideo" id=subtitle]]
+[[!template text="and see if there is anything you want to" start="00:21:42.880" video="mainVideo" id=subtitle]]
+[[!template text="work on." start="00:21:45.039" video="mainVideo" id=subtitle]]
+[[!template text="All right. So, since this is a" start="00:21:46.640" video="mainVideo" id=subtitle]]
+[[!template text="pre-recorded talk I won't be able to do" start="00:21:49.039" video="mainVideo" id=subtitle]]
+[[!template text="the Q & A real time in the video." start="00:21:51.120" video="mainVideo" id=subtitle]]
+[[!template text="However, I will be around on the" start="00:21:53.520" video="mainVideo" id=subtitle]]
+[[!template text="collaborative pad" start="00:21:56.080" video="mainVideo" id=subtitle]]
+[[!template text="and the IRC #emacsconf," start="00:21:57.200" video="mainVideo" id=subtitle]]
+[[!template text="#emacsconf-questions" start="00:22:00.239" video="mainVideo" id=subtitle]]
+[[!template text="to answer any questions when it pops up," start="00:22:01.360" video="mainVideo" id=subtitle]]
+[[!template text="and you can also submit an issue" start="00:22:04.139" video="mainVideo" id=subtitle]]
+[[!template text="on the repo, and you can check the wiki" start="00:22:05.760" video="mainVideo" id=subtitle]]
+[[!template text="for some other guides and tricks." start="00:22:09.120" video="mainVideo" id=subtitle]]
+[[!template text="All right. Thank you guys, and hopefully" start="00:22:12.640" video="mainVideo" id=subtitle]]
+[[!template text="you find" start="00:22:15.039" video="mainVideo" id=subtitle]]
+[[!template text="this EAF project very interesting, and" start="00:22:16.000" video="mainVideo" id=subtitle]]
+[[!template text="enjoy the rest of EmacsConf 2020." start="00:22:18.320" video="mainVideo" id=subtitle]]
diff --git a/2020/info/35.md b/2020/info/35.md
index 2901eee9..d0dd67c2 100644
--- a/2020/info/35.md
+++ b/2020/info/35.md
@@ -1,11 +1,15 @@
# WAVEing at Repetitive Repetitive Repetitive Music
Zachary Kanfer
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.webm"]]
-[Download compressed .webm video (12.7M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer--vp9-q56-video-original-audio.webm)
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.webm" size="122M" subtitles="/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt" duration="9:44"]]
+[Download compressed .webm video (20.7M)](https://media.emacsconf.org/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer--compressed32.webm)
+[Download compressed .webm video (12.7M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer--vp9-q56-video-original-audio.webm)
+[View transcript](#transcript)
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (6.9M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer--vp9-q56-video-original-audio.webm)
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm" download="Download Q&A video" size="89M" subtitles="/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt" duration="6:18"]]
+[Download compressed Q&A .webm video (15.2M)](https://media.emacsconf.org/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer--compressed32.webm)
+[Download compressed Q&A .webm video (6.9M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer--vp9-q56-video-original-audio.webm)
+[View transcript for Q&A](#transcript-questions)
During quarantine, I found myself spending time with an Android app.
One of the features this app has is composing music that loops
@@ -77,3 +81,231 @@ something worth looking into.
# Notes
Notes, references, and links at <https://zck.org/emacsconf2020>
+
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt -->
+
+<a name="transcript"></a>
+# Transcript
+
+(00:04) Hi. I'm Zachary Kanfer, and this is waving at repetitive
+repetitive repetitive music. Over quarantine, I've been bored, and I
+found this Android app that has a bunch of mini-games, one of which
+lets you compose music. And it works, but I want a little bit more
+functionality than it offers, it's not very flexible. So, I thought
+what if I made this, and what programs could I make this in that are
+really flexible, are really customizable. Emacs. So, I looked into
+it, and Emacs can play sounds, right? If you hit control g a couple of
+times, you'll hear like an error tone, and it turns out that, that is
+actually playing a WAVE file, but what's a WAVE file?
+
+(00:58) Well, it turns out that WAVE is a musical file format, or
+really an annoying file format. So, data in it can be an unsigned
+integer or a signed integer, it's not consistent, and it's
+little-endian by default which is not the way I like to think about
+it. Now, you can set a WAVE file to be big-endian, but if you do
+that, Emacs can't play it. So, little-endian it is. There's also
+duplicate data fields. Here are some fields that are fine, but then
+there's a fourth field that's calculated based on multiplying two of
+the other ones together, and then there's another data field that's…
+you multiply those three ones together. So, it's just repetitive and
+unnecessary, but you have to do it, or it's not a valid WAVE file.
+Also, the last part of the file is described as data or as one website
+I found said, the actual sound data.
+
+(02:04) Now, I don't know about you but when I see that, I think, what
+is data? It turns out that sound is just a wave, and the data is just
+a bunch of measurements of the height of that wave forming each
+sample. So, this wave starts at 8 goes 9, 11, 13, 14, 15, and then
+back down. If you just take those measurements, those numbers, put
+them in a file, that's all your data is.
+
+(02:35) All right. Let's go to a demo of my program. So, this is what
+zmusic looks like. The blue highlighted row is a single beat, there's
+16 of them in this zmusic file, and each dash in the row is a single
+note increasing…, starting really low all the way on the left and
+going up as we go to the right. So, if we started playing, we won't
+hear anything, but we'll see the highlighted beat is the currently
+playing one, and we see that it loops. So, we can stop it, and now we
+can click to add some notes. [Music] Even more than one note at the
+same time works. [Music] And we can even add notes while it's
+playing. [Music]
+
+(04:08) Okay, here are some other features that I didn't have time to
+demo. So, you can save the music to a file, and this is interesting
+because normally if there's no note in a beat, we just don't play that
+beat, but if you're writing to a file you have to put something in, so
+when it's playing it knows to not make a sound there. We can also use
+different scales. We're using the minor pentatonic in the demo, but
+you can use the major scale the minor scale or anything else. And
+there's also keyboard support, but it sounds really bad, and I'll
+explain why later.
+
+(04:48) Here are some things I learned while writing zmusic. Emacs
+has buttons which are great as long as you don't put two of them right
+next to each other. So, if you do that, mousing over one of them
+highlights both of them. Now, that's because a button is really just
+a series of characters with a text property to highlight them. So,
+the fix is, you put another character between the two buttons, then
+mousing over one of them only highlights the one you want, but even
+this doesn't work really great for zmusic, because zmusic has a lot of
+very small buttons in a row. So, it's really easy to accidentally put
+your cursor over the space and click on that instead of the button.
+So, I looked into unicode, and I found this character called a
+zero-width space. So, we should be able to put that between buttons
+and not be able to accidentally click on it. Unfortunately, a
+zero-width space isn't actually zero width. If we put a hundred of
+them between two other characters, you can see there's space there,
+and I think what's happening is, the space is zero width but then
+Emacs `put` uses one pixel between each pair of characters for the
+cursor, so it's almost zero width. Some ways to play sound that don't
+quite work! `play-sound` plays music, but it blocks, you can't do
+things like, set other notes or even pause the music. And if you
+throw it into async.el, it's silent, and I don't know why. So, the
+solution I went with is taking that WAVE file, ran into the file
+system, and then shelling out to a native executable to play the
+sound. And that works fine as long as you only do it once, because if
+you do it a couple of times at the same time like if you have a chord,
+and you want to play three notes simultaneously, you get this weird
+interference, and that's actually why the keyboard from before didn't
+work. Also, side effects have this unexpected impact, when you saw
+the demo it was running pretty smoothly, but if I just add one message
+statement every beat for debugging purposes, I was getting lag and
+jitter.
+
+(07:03) Here's the one thing I learned about music theory, music
+theory is not easy to program. I was looking around to see what
+concepts we can use to code the scales, to code the notes, the first
+thing that I saw is scale degrees, and this when I looked into it, you
+don't want to program in scale degrees. So, you see we have the
+first, second, third, fourth, fifth, sixth, seventh but then it wraps
+around. That octave up is also a first, and that's because both of
+those notes are C, so that didn't work, and also you couldn't really
+easily specify a flat or sharp. You could say a sharp third or you
+know, a flat seventh or whatever, but then you kind of have these two
+pieces of data that indicate the note, and I didn't love that.
+
+(07:55) So, I looked again, and I found intervals, and then I thought
+about it, and you don't really want to program in intervals either.
+It fixes some of the problems with scale degrees, you see, all the way
+on the right you have an octave, so you wrap to 8, and you go 9, 10
+and that works. But you solve the same problem, you see you have a
+major third but below we also have a minor third, so you saw that
+problem of having two pieces of information.
+
+(08:20) So, I thought about it. Music is really frequencies. Like an A
+is 440 hertz. So, at a low level that's what we're going to do, we're
+just going to use frequencies. And then at the one level above that,
+that's a little bit easier for humans to think about, we're going to
+use semitones up from the root, which is kind of like scale degrees,
+but instead of just counting each note as one more, we're going to say
+how many semitones up it is. So, if there's a sharp between two
+notes, that's going to be two steps up instead of just one. And then
+we translate those two frequencies, so your A is 440 hertz, another
+note might be 613.5, or whatever, and that's we use the low level to
+play.
+
+(09:02) Some future work I have, I want to add some drums. I want to
+make that keyboard actually work, and computers and synthesizers are
+the only place you hear a pure sine wave like the one we have here, so
+I want to add overtones or other octaves above it just to make it
+sound a little bit more realistic. I've put notes references and the
+source code up at <https://zck.org/emacsconf2020> [updated]. I'm one
+of the organizers of EmacsNYC check that out. And if you take a look
+or have any thoughts, I'd love to hear them, and thanks so much for
+coming to my talk.
+
+<!-- /transcript -->
+
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt -->
+
+<a name="transcript-questions"></a>
+# Transcript: Q&A
+
+(00:09) Okay, yeah, so I'm Zachary Kanfer, let's go to the
+questions. The first question, "Why do we go top to bottom for time
+progression, and left to right for low to high?" Interesting, I
+think…, so the initial thing I was copying, that initial app work this
+way, and yeah, I mean, certainly traditional music, you know, on a
+staff does go left to right like this. I mean, going top to bottom
+does make it easier to add more beats without having to wrap, but
+certainly that could be managed. Yeah, I had not really thought about
+it, but it is definitely something worth looking into.
+
+(01:21) Two, "Will you play us another song?" Not now, I can make some
+recordings of it, or certainly you can try it. I couldn't quite get
+the microphone and the webcam and everything to work with the sound
+playing now. So, I can record some. Also, I have put a link in the
+Etherpad, <https://zck.org/emacsconf2020> [updated], where you can go
+and get the source, and you can try it yourself. There's no
+dependencies needed, so it's just all in Emacs. So, please, you know,
+try it yourself.
+
+(01:57) "Any chance for an Emacs tracker or mod player?" I don't
+really know what a mod player or tracker are, but I mean, I'm sure
+that would be cool, maybe there's one on now, but I don't know.
+
+(02:11) My musical background. So, I've played various instruments
+since about the third grade. Started recorder, play cello, I play
+guitar now. But yeah, so just kind of random instruments, and I guess
+kind of some of those things influence how I think about music.
+
+(02:33) "Are there any open source musical management sample libraries
+that could be used?" Good question, I'm sure there are, I don't know
+any of that integrate really well with Emacs. One of the cool things
+that I liked about this is that there are no dependencies, you know,
+you don't need any external program to generate the music. I mean, it
+does shell out to to play, but that should be able to be done on any
+operating system, as always, you have something that can play WAVE
+files, but yeah, it is interesting to kind of try the different sounds
+and different tones that you could get with different instruments.
+
+(03:14) Have I written any actual songs? Nothing super well put
+together, I kind of just been playing around with this. It's kind of…
+making this was one of those things where once I made it, I was like,
+okay, now I can play with it, and I did a little bit, and was like, I
+don't know if I feel like it right now. You know, which I've found
+that to be the case with some things that I've implemented in Emacs
+where it's… I make it, and then it's the kind of some of the desire to
+use it all the time goes away, but I'm sure I'll circle back around at
+some point especially kind of maybe once I add in different tones or
+something.
+
+(03:54) I guess a similar question for pre-recorded sounds. Yeah, I
+mean, if it's… part of what I did, what I wrote was a WAVE generation
+library, so, if you kind of have the data, you could use those and
+chop them up and take certain lengths of them and make a WAVE file, so
+it's not plug and play right now, but you could certainly add those
+notes to do it.
+
+(04:19) "Any MIDI mapping possibilities?" I haven't looked into it,
+but I'm sure you definitely could output to MIDI which is another
+benefit of having that multiple layers with the top layer is just, you
+know, if the root note is this, we're just two semitones up or seven
+semitones up or whatever it is. It should be relatively simple to
+kind of switch out that layer underneath from WAVE to MIDI or other
+things.
+
+(04:44) "What were some of the challenges with writing a special mode
+for Emacs?" Interested in getting into this, not sure where to start.
+This isn't the first mode I've written, so that's right…, certainly
+that helps. I actually… I have a video that we recorded it as part of
+EmacsNYC on making a major mode. That's basically starts from
+nothing, and kind of builds up to an implementation of tic-tac-toe,
+but so it kind of goes into printing things out and buttons and making
+the mode. I mean, one of the best parts about Emacs is, because it's
+so configurable and so introspectible, you can start pretty simply,
+and just kind of ask Emacs about things, and then make one little
+change. It's really… it's not that bad, so, I'll try to throw a link
+up on that page I put up, or please email me for whoever asked this
+question to get a link to that video, or just look at the source code
+of this or any other major mode. Emacs makes it pretty easy to extend
+major modes.
+
+(05:54) And I think that's the last question in the Etherpad, so,
+thanks so much everybody for coming. (Amin: Thank you so much to
+Zachary for your awesome talk, and for doing live questions. Thank
+you.) Thank you. (Amin: Cheers.)
+
+<!-- /transcript -->
diff --git a/2020/info/38.md b/2020/info/38.md
index 6991eda4..af52e80e 100644
--- a/2020/info/38.md
+++ b/2020/info/38.md
@@ -2,7 +2,8 @@
John Wiegley
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--38-emacs-development-update--john-wiegley.webm" size="75M" subtitles="/2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt" duration="5:07"]]
-[Download compressed .webm video (8.4M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--38-emacs-development-update--john-wiegley--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (14.3M)](https://media.emacsconf.org/2020/emacsconf-2020--38-emacs-development-update--john-wiegley--compressed32.webm)
+[Download compressed .webm video (8.4M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--38-emacs-development-update--john-wiegley--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
- Actual start and end time (EST): Start 2020-11-29T09.12.40; End:
diff --git a/2020/info/39.md b/2020/info/39.md
index 11d264d6..32b06cb7 100644
--- a/2020/info/39.md
+++ b/2020/info/39.md
@@ -1,12 +1,14 @@
# NonGNU ELPA
Richard Stallman
-[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--39-nongnu-elpa--richard-stallman.webm" size="282M" subtitles="/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt" duration="6:56"]]
-[Download compressed .webm video (20.8M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--39-nongnu-elpa--richard-stallman--vp9-q56-video-original-audio.webm)
+[[!template id=vid vidid="mainVideo" src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--39-nongnu-elpa--richard-stallman.webm" size="282M" subtitles="/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt" duration="6:56"]]
+[Download compressed .webm video (72.9M)](https://media.emacsconf.org/2020/emacsconf-2020--39-nongnu-elpa--richard-stallman--compressed32.webm)
+[Download compressed .webm video (20.8M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--39-nongnu-elpa--richard-stallman--vp9-q56-video-original-audio.webm)
[View transcript](#transcript)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.webm" size="470M" subtitles="/2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt" duration="46:42" download="Download Q&A video"]]
-[Download compressed Q&A .webm video (44M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman--vp9-q56-video-original-audio.webm)
+[Download compressed Q&A .webm video (0)](https://media.emacsconf.org/2020/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman--compressed32.webm)
+[Download compressed Q&A .webm video (44M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman--vp9-q56-video-original-audio.webm)
[View transcript for Q&A](#transcript-questions)
<!-- from the pad --->
@@ -238,83 +240,131 @@ them fit in.
<a name="transcript"></a>
# Transcript
-Hello, I'm Richard Stallman, founder of the GNU project. In 1976, I
-developed the first Emacs editor with some help from Guy Steele.
-Then, shortly after starting to develop the GNU operating system in
-1984, I wanted an Emacs editor for it. So I started writing GNU Emacs
-in September 1984.
-
-(00:29) Several years ago we decided to move many of the Emacs Lisp
-packages outside the core Emacs distribution into a separate package
-archive that we call the Emacs Lisp package archive ELPA. There were
-two main reasons for this. One is to make the Emacs distribution
-smaller so every user wouldn't have to get all the packages and
-install all the packages. And the other reason was to make it possible
-to release individual packages separately from Emacs releases.
-
-(01:08) Now, at that point somehow we decided to support loading
-packages from a variety of different Emacs Lisp package archives and
-ours would be called the GNU ELPA, but ELPA could be any other. Now, I
-think that naming was a mistake. We should have meant, we should have
-decided that ELPA referred to our package archive and any other
-package archive should be called some other name. Oh, well! Uh this is
-a mistake I believe, because it leads to a lot of confusion it would
-have been clearer if we had uh used the other naming.
-
-(01:55) Because the difference between having a package in core Emacs
-and having it in GNU ELPA, is purely a practical convenience matter.
-Convenience of distribution and convenience of maintenance. We wanted
-to be able to move packages between the two whenever that was
-convenient. So, to make that possible we insisted on getting copyright
-assignments for packages in GNU ELPA just the same way we do for
-packages in core Emacs.
-
-(02:31) Having the facility for installing packages from package
-archives, led to a tremendous boost in the development and release of
-Emacs packages. Unfortunately there was a problem with the way that
-was done. For the most part, the developers of these packages wouldn't
-even tell us about them. They posted them in another package archive
-where we didn't know about them and (where they) no attempt was made
-to try to fit them into Emacs so that they could make sense as parts
-of the Emacs distribution. This led to both moral problems, packages
-that depended on non-free software in order to be usable and technical
-problems because the developers of those packages didn't coordinate
-with us about how to make it useful and convenient and clean to have
-them in Emacs.
-
-(03:36) So, the idea of NonGNU ELPA is an effort to smooth these
-things out. The fundamental plan of NonGNU ELPA is that, we won't ask
-for copyright assignments for those packages. So, we won't be able to
-put them into core Emacs; at least not easily, but we will have some
-control over how we distribute them. We can put any package into
-NonGNU ELPA as long as it's free software. If we like it we can set up
-that way for users to get it. We could put the package in exactly as
-it is if there's no problem at all with it. We can make an arrangement
-with the package's developers to work on it with us and maintain it
-directly for distribution by NonGNU ELPA but if they are not
-interested we can put it in ourselves and if we need to make any
-changes we can do so.
-
-(04:52) So, NonGNU ELPA is not meant to be just a way that others can
-distribute their packages. It's meant at least in a minimal technical
-sense to work with GNU Emacs, and we'll make changes if necessary so
-that it works smoothly with Emacs. And this means that we're going to
-maintain it differently from GNU ELPA. Well, GNU ELPA is hosted in a
-way that is actually rather inconvenient. It is one single Git
-repository. And so anybody that has access to write it can write any
-part of it. There are many different packages in there maintained by
-different people, and we have no way to give each one of them access
-to per own package and not to the others. Well, with NonGNU ELPA we
-plan to fix that. The idea is to have a single Git repository where
-you can download various packages from. But, they won't be maintained
-there. Each of those packages will be copied automatically from some
-other place. Probably some other repository where the right people
-have access to work on it. And this way we can avoid giving a gigantic
-number of people access to every part of it. So far NonGNU ELPA is
-just a plan, we need people to implement the plan. So, if you would
-like to help please write to me. I think this is a very important step
-for progress and it's got to be implemented. Thanks and happy hacking!
-
+[[!template new="1" text="Hello, I'm Richard Stallman," start="00:00:00.320" video="mainVideo" id=subtitle]]
+[[!template text="founder of the GNU project." start="00:00:03.280" video="mainVideo" id=subtitle]]
+[[!template text="In 1976, I developed the first" start="00:00:07.816" video="mainVideo" id=subtitle]]
+[[!template text="Emacs editor with some help" start="00:00:09.200" video="mainVideo" id=subtitle]]
+[[!template text="from Guy Steele." start="00:00:12.320" video="mainVideo" id=subtitle]]
+[[!template text="Then, shortly after starting to develop" start="00:00:13.440" video="mainVideo" id=subtitle]]
+[[!template text="the GNU operating system in 1984," start="00:00:15.839" video="mainVideo" id=subtitle]]
+[[!template text="I wanted an Emacs editor for it." start="00:00:19.119" video="mainVideo" id=subtitle]]
+[[!template text="So I started writing GNU Emacs in September 1984." start="00:00:22.240" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Several years ago we decided to move" start="00:00:29.519" video="mainVideo" id=subtitle]]
+[[!template text="many of the Emacs Lisp packages outside" start="00:00:32.640" video="mainVideo" id=subtitle]]
+[[!template text="the core Emacs distribution into" start="00:00:35.920" video="mainVideo" id=subtitle]]
+[[!template text="a separate package archive that we call the Emacs Lisp package archive ELPA." start="00:00:39.866" video="mainVideo" id=subtitle]]
+[[!template text="There were two main reasons for this." start="00:00:46.480" video="mainVideo" id=subtitle]]
+[[!template text="One is to make the Emacs distribution smaller" start="00:00:49.555" video="mainVideo" id=subtitle]]
+[[!template text="so every user wouldn't have to" start="00:00:51.520" video="mainVideo" id=subtitle]]
+[[!template text="get all the packages" start="00:00:54.870" video="mainVideo" id=subtitle]]
+[[!template text="and install all the packages." start="00:00:55.680" video="mainVideo" id=subtitle]]
+[[!template text="And the other reason was to make it possible to" start="00:00:58.820" video="mainVideo" id=subtitle]]
+[[!template text="release individual packages" start="00:01:00.480" video="mainVideo" id=subtitle]]
+[[!template text="separately from Emacs releases." start="00:01:03.485" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Now, at that point somehow we decided to" start="00:01:08.880" video="mainVideo" id=subtitle]]
+[[!template text="support loading packages from" start="00:01:13.119" video="mainVideo" id=subtitle]]
+[[!template text="a variety of different Emacs Lisp package archives" start="00:01:17.040" video="mainVideo" id=subtitle]]
+[[!template text="and ours would be called the GNU ELPA," start="00:01:21.119" video="mainVideo" id=subtitle]]
+[[!template text="but ELPA could be any other." start="00:01:25.520" video="mainVideo" id=subtitle]]
+[[!template text="Now, I think that naming was a mistake." start="00:01:29.280" video="mainVideo" id=subtitle]]
+[[!template text="We should have meant, we should have decided that ELPA" start="00:01:32.945" video="mainVideo" id=subtitle]]
+[[!template text="referred to our package archive" start="00:01:35.119" video="mainVideo" id=subtitle]]
+[[!template text="and any other package archive" start="00:01:37.759" video="mainVideo" id=subtitle]]
+[[!template text="should be called some other name." start="00:01:39.297" video="mainVideo" id=subtitle]]
+[[!template text="Oh, well! Uh this is a mistake," start="00:01:42.479" video="mainVideo" id=subtitle]]
+[[!template text="I believe, because it leads" start="00:01:46.128" video="mainVideo" id=subtitle]]
+[[!template text="to a lot of confusion." start="00:01:48.320" video="mainVideo" id=subtitle]]
+[[!template text="It would have been clearer" start="00:01:49.397" video="mainVideo" id=subtitle]]
+[[!template text="if we had used the other naming." start="00:01:51.119" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Because the difference between" start="00:01:55.759" video="mainVideo" id=subtitle]]
+[[!template text="having a package in core Emacs and having it in GNU ELPA," start="00:01:59.812" video="mainVideo" id=subtitle]]
+[[!template text="is purely a practical convenience matter." start="00:02:04.159" video="mainVideo" id=subtitle]]
+[[!template text="Convenience of distribution" start="00:02:07.840" video="mainVideo" id=subtitle]]
+[[!template text="and convenience of maintenance." start="00:02:10.501" video="mainVideo" id=subtitle]]
+[[!template text="We wanted to be able to move packages" start="00:02:12.000" video="mainVideo" id=subtitle]]
+[[!template text="between the two" start="00:02:14.879" video="mainVideo" id=subtitle]]
+[[!template text="whenever that was convenient." start="00:02:16.800" video="mainVideo" id=subtitle]]
+[[!template text="So, to make that possible" start="00:02:19.258" video="mainVideo" id=subtitle]]
+[[!template text="we insisted on getting copyright" start="00:02:21.200" video="mainVideo" id=subtitle]]
+[[!template text="assignments for packages in GNU ELPA" start="00:02:23.200" video="mainVideo" id=subtitle]]
+[[!template text="just the same way we do for packages in core Emacs." start="00:02:26.319" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Having the facility for installing" start="00:02:31.360" video="mainVideo" id=subtitle]]
+[[!template text="packages from package archives," start="00:02:33.760" video="mainVideo" id=subtitle]]
+[[!template text="led to a tremendous boost in the" start="00:02:36.239" video="mainVideo" id=subtitle]]
+[[!template text="development and release of Emacs packages." start="00:02:39.440" video="mainVideo" id=subtitle]]
+[[!template text="Unfortunately there was a problem with" start="00:02:42.239" video="mainVideo" id=subtitle]]
+[[!template text="the way that was done." start="00:02:44.879" video="mainVideo" id=subtitle]]
+[[!template text="For the most part, the developers of these packages" start="00:02:46.560" video="mainVideo" id=subtitle]]
+[[!template text="wouldn't even tell us about them." start="00:02:50.000" video="mainVideo" id=subtitle]]
+[[!template text="They posted them in another package archive" start="00:02:52.218" video="mainVideo" id=subtitle]]
+[[!template text="where we didn't know about them" start="00:02:56.027" video="mainVideo" id=subtitle]]
+[[!template text="and no attempt was made to try to fit them" start="00:02:58.480" video="mainVideo" id=subtitle]]
+[[!template text="into Emacs so that they could make sense" start="00:03:03.120" video="mainVideo" id=subtitle]]
+[[!template text="as parts of the Emacs distribution." start="00:03:06.560" video="mainVideo" id=subtitle]]
+[[!template text="This led to both moral problems," start="00:03:10.879" video="mainVideo" id=subtitle]]
+[[!template text="(packages that depended on" start="00:03:14.480" video="mainVideo" id=subtitle]]
+[[!template text="non-free software in order to be usable)" start="00:03:16.375" video="mainVideo" id=subtitle]]
+[[!template text="and technical problems," start="00:03:19.599" video="mainVideo" id=subtitle]]
+[[!template text="because the developers of those packages" start="00:03:21.354" video="mainVideo" id=subtitle]]
+[[!template text="didn't coordinate with us" start="00:03:24.877" video="mainVideo" id=subtitle]]
+[[!template text="about how to make it useful and" start="00:03:26.159" video="mainVideo" id=subtitle]]
+[[!template text="convenient and clean to have them in Emacs." start="00:03:29.519" video="mainVideo" id=subtitle]]
+[[!template new="1" text="So, the idea of NonGNU ELPA" start="00:03:36.560" video="mainVideo" id=subtitle]]
+[[!template text="is an effort to smooth these things out." start="00:03:41.120" video="mainVideo" id=subtitle]]
+[[!template text="The fundamental plan of" start="00:03:45.337" video="mainVideo" id=subtitle]]
+[[!template text="NonGNU ELPA is that" start="00:03:48.319" video="mainVideo" id=subtitle]]
+[[!template text="we won't ask for copyright assignments" start="00:03:51.680" video="mainVideo" id=subtitle]]
+[[!template text="for those packages." start="00:03:54.480" video="mainVideo" id=subtitle]]
+[[!template text="So, we won't be able to put them into core Emacs;" start="00:03:56.159" video="mainVideo" id=subtitle]]
+[[!template text="at least not easily," start="00:04:00.000" video="mainVideo" id=subtitle]]
+[[!template text="but we will have some control over how we distribute them." start="00:04:03.550" video="mainVideo" id=subtitle]]
+[[!template text="We can put any package into NonGNU ELPA" start="00:04:09.519" video="mainVideo" id=subtitle]]
+[[!template text="as long as it's free software." start="00:04:14.691" video="mainVideo" id=subtitle]]
+[[!template text="If we like it, we can set up that way for users to get it." start="00:04:16.320" video="mainVideo" id=subtitle]]
+[[!template text="We could put the package in exactly as it is" start="00:04:23.360" video="mainVideo" id=subtitle]]
+[[!template text="if there's no problem at all with it." start="00:04:26.720" video="mainVideo" id=subtitle]]
+[[!template text="We can make an arrangement" start="00:04:29.919" video="mainVideo" id=subtitle]]
+[[!template text="with the package's developers" start="00:04:32.647" video="mainVideo" id=subtitle]]
+[[!template text="to work on it with us and maintain it" start="00:04:34.160" video="mainVideo" id=subtitle]]
+[[!template text="directly for distribution by NonGNU ELPA," start="00:04:38.000" video="mainVideo" id=subtitle]]
+[[!template text="but if they are not interested," start="00:04:42.560" video="mainVideo" id=subtitle]]
+[[!template text="we can put it in ourselves," start="00:04:45.778" video="mainVideo" id=subtitle]]
+[[!template text="and if we need to make any changes," start="00:04:48.729" video="mainVideo" id=subtitle]]
+[[!template text="we can do so." start="00:04:50.453" video="mainVideo" id=subtitle]]
+[[!template text="So, NonGNU ELPA is not meant to be" start="00:04:52.000" video="mainVideo" id=subtitle]]
+[[!template text="just a way that others can distribute their packages." start="00:04:58.688" video="mainVideo" id=subtitle]]
+[[!template text="It's meant, at least in" start="00:05:02.720" video="mainVideo" id=subtitle]]
+[[!template text="a minimal technical sense," start="00:05:04.336" video="mainVideo" id=subtitle]]
+[[!template text="to work with GNU Emacs," start="00:05:07.574" video="mainVideo" id=subtitle]]
+[[!template text="and we'll make changes if necessary," start="00:05:10.686" video="mainVideo" id=subtitle]]
+[[!template text="so that it works smoothly with Emacs." start="00:05:12.305" video="mainVideo" id=subtitle]]
+[[!template text="And this means that we're going to maintain it differently from GNU ELPA." start="00:05:17.928" video="mainVideo" id=subtitle]]
+[[!template new="1" text="Well, GNU ELPA is hosted in a way that is actually rather inconvenient." start="00:05:25.365" video="mainVideo" id=subtitle]]
+[[!template text="It is one single Git repository." start="00:05:31.520" video="mainVideo" id=subtitle]]
+[[!template text="And so anybody that has access to write it" start="00:05:35.600" video="mainVideo" id=subtitle]]
+[[!template text="can write any part of it." start="00:05:39.039" video="mainVideo" id=subtitle]]
+[[!template text="There are many different packages in there, maintained by different people," start="00:05:41.239" video="mainVideo" id=subtitle]]
+[[!template text="and we have no way to give each one of" start="00:05:46.080" video="mainVideo" id=subtitle]]
+[[!template text="them access to per own package" start="00:05:48.080" video="mainVideo" id=subtitle]]
+[[!template text="and not to the others." start="00:05:50.960" video="mainVideo" id=subtitle]]
+[[!template text="Well, with NonGNU ELPA, we plan to fix that." start="00:05:53.122" video="mainVideo" id=subtitle]]
+[[!template text="The idea is to have a single Git repository" start="00:05:57.035" video="mainVideo" id=subtitle]]
+[[!template text="where you can download various packages from." start="00:06:01.411" video="mainVideo" id=subtitle]]
+[[!template text="But they won't be maintained there." start="00:06:05.600" video="mainVideo" id=subtitle]]
+[[!template text="Each of those packages will be" start="00:06:08.400" video="mainVideo" id=subtitle]]
+[[!template text="copied automatically from some other place." start="00:06:10.800" video="mainVideo" id=subtitle]]
+[[!template text="Probably some other repository" start="00:06:15.280" video="mainVideo" id=subtitle]]
+[[!template text="where the right people have access to work on it." start="00:06:18.311" video="mainVideo" id=subtitle]]
+[[!template text="And this way we can avoid giving" start="00:06:22.960" video="mainVideo" id=subtitle]]
+[[!template text="a gigantic number of people" start="00:06:26.375" video="mainVideo" id=subtitle]]
+[[!template new="1" text="access to every part of it." start="00:06:28.160" video="mainVideo" id=subtitle]]
+[[!template text="So far NonGNU ELPA is just a plan," start="00:06:32.240" video="mainVideo" id=subtitle]]
+[[!template text="we need people to implement the plan." start="00:06:37.039" video="mainVideo" id=subtitle]]
+[[!template text="So, if you would like to help," start="00:06:40.479" video="mainVideo" id=subtitle]]
+[[!template text="please write to me." start="00:06:43.825" video="mainVideo" id=subtitle]]
+[[!template text="I think this is a very important step for progress" start="00:06:45.120" video="mainVideo" id=subtitle]]
+[[!template text="and it's got to be implemented." start="00:06:49.520" video="mainVideo" id=subtitle]]
+[[!template text="Thanks and happy hacking!" start="00:06:52.639" video="mainVideo" id=subtitle]]
<!-- /transcript -->
@@ -562,7 +612,7 @@ that they're not bullying, I will forgive them. I would like to have
conversations with them if any of the mole hills annoyed someone, I'm
happy to talk with per and thus help resolve things with peace. And my
opinion on "diversity" within Emacs. Well, Emacs is never going to be
-diverse, it is extended in one language, Emacs Lisp. Well, I don't
+diverse, it is extended in one language, Emacs Lisp ;-}. Well, I don't
know, we did have an idea of implementing extensibility using Scheme
and the hope was that Guile could be integrated with Emacs, that
turned out to be difficult, it may be impossible but in principle it
diff --git a/2020/info/40.md b/2020/info/40.md
index 4886d63e..eaf409ed 100644
--- a/2020/info/40.md
+++ b/2020/info/40.md
@@ -1,10 +1,12 @@
# Closing remarks (Saturday)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--40-closing-remarks-part-1.webm" download="Download part 1"]]
-[Download compressed .webm video (2.7M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--40-closing-remarks-part-1--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (4.7M)](https://media.emacsconf.org/2020/emacsconf-2020--40-closing-remarks-part-1--compressed32.webm)
+[Download compressed .webm video (2.7M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--40-closing-remarks-part-1--vp9-q56-video-original-audio.webm)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--40-closing-remarks-part-2.webm" download="Download part 2"]]
-[Download compressed .webm video (14M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--40-closing-remarks-part-2--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (37.3M)](https://media.emacsconf.org/2020/emacsconf-2020--40-closing-remarks-part-2--compressed32.webm)
+[Download compressed .webm video (14M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--40-closing-remarks-part-2--vp9-q56-video-original-audio.webm)
- Stats:
- 21 talks today, 16 tomorrow (30 last year)
diff --git a/2020/info/41.md b/2020/info/41.md
index e387caeb..272be760 100644
--- a/2020/info/41.md
+++ b/2020/info/41.md
@@ -1,7 +1,8 @@
# Opening remarks (Sunday)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--41-opening-remarks.webm" size="207MB"]]
-[Download compressed .webm video (15M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--41-opening-remarks--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (37.8M)](https://media.emacsconf.org/2020/emacsconf-2020--41-opening-remarks--compressed32.webm)
+[Download compressed .webm video (15M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--41-opening-remarks--vp9-q56-video-original-audio.webm)
- Hello and welcome again to EmacsConf 2020!
diff --git a/2020/info/42.md b/2020/info/42.md
index 69f856d7..de11079c 100644
--- a/2020/info/42.md
+++ b/2020/info/42.md
@@ -1,7 +1,8 @@
# Closing remarks (Sunday)
[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--42-closing-remarks.webm" size="261MB"]]
-[Download compressed .webm video (48M)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--42-closing-remarks--vp9-q56-video-original-audio.webm)
+[Download compressed .webm video (142.5M)](https://media.emacsconf.org/2020/emacsconf-2020--42-closing-remarks--compressed32.webm)
+[Download compressed .webm video (48M, highly compressed)](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/smaller/emacsconf-2020--42-closing-remarks--vp9-q56-video-original-audio.webm)
- Stats:
- 16 talks today, 37 total
diff --git a/2020/meetings.md b/2020/meetings.md
deleted file mode 100644
index 55782ce7..00000000
--- a/2020/meetings.md
+++ /dev/null
@@ -1,120 +0,0 @@
-[[!meta title="Meeting notes"]]
-[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, David O'Toole, Corwin Brust, Leo Vivier, Daniel Gopar"]]
-<!-- Automatically generated from meetings.org -->
-
-
-# Ongoing projects
-
-- Subtitles/transcripts: sachac, bhavin192
-- FOSSHost: mplsCorwin
-- Calendar, connecting with meetups: sachac
-- Streaming infrastructure for meetups?: bandali, sachac
-- Amin and Gopar's podcast: bandali, gopar
-- mplsCorwin's livestreaming project, working on trimming
-- Writing about Emacs: zaeph
-
-
-# January 7, 2020 meeting
-
-- Checking in:
- - bandali, zaeph, gopar, sachac, dto
- - bandali: fairly uneventful, things are going okay, learning more about Jami, experimenting with DSLR for webcam but aspect ratio is a little weird
- - sachac: virtual school started again; EmacsNYC meetup; emacs calendar in HTML and Org
- - dto: having fun with neural networks
- - zaeph: at his parents, can't do much work, enjoying the lull; figuring out collaborative slipboxing with org-roam; getting more into writing
- - gopar
-- Agenda:
- - Update: emacslife.com/calendar
- - Update: attended NYC meetup
- - methodology
- - bandali
- - met with organizers of EmacsNYC. They were curious about BBB and Jitsi, streaming, IRC web client
- - met with gopar last night re: podcast
- - CRDT: see BBB chat if you want to try it
- - dto:
- - tutorial; (also, SystemCrafters just livestreamed an Emacs Lisp tutorial too)
- - Hmm, it's like having lab hours
- - Could be open (office hours, bring your questions; maybe a liiittle structure) or guided (here's an exercise to start with)
- - podcast
- - Upcoming workshops
- - BBB has breakout rooms, might be worth looking into if it scales up a lot; Jitsi can have multiple people sharing screens at the same time;
- - EmacsNYC said Jitsi is okay for the 20-30 people they've seen so far; EmacsBerlin said the same too (I think they self-host; want to see how they're doing it?). Sounds like it's much better now than it was last year
- - dto will figure it out and write things up =)
- - bhavin192: Mailing list for meetups (some common prefix or something similar).
- - bhavin192: Update to Code of Conduct (I was hoping to use the same text or page for Emacs APAC meetup)
- - gopar: upcoming podcast recording re: EmacsConf experience
- -
-
-
-# January 2, 2020 meeting
-
-- Conversations
- - mplsCorwin: FOSSHost: okay to experiment with being a CDN, will
- experiment with videos
- - authenticated RTMP server to support streaming meetups from Jitsi?
- - PeerTube?
- - sachac: added more events to
- <https://www.emacswiki.org/emacs/Usergroups> and the calendar
- - sachac: subed.el patches for splitting and merging subtitles, will
- continue editing subtitles
- - Podcast:
- - Thinking about name: 
- - Current: emacs.el podcast
- - Emacs Weekly? Probably okay, although includes commitment to
- actually make it weekly
- - Amin and Gopar's Wild World of Emacs?
- - ideas for making it visually interesting when there's no video
- - Suggested guest: Fermin - interesting story about how he got into
- Emacs and started making it better for PHP
- - Making these conversations more public:
- - Maybe start with just putting public meeting minutes somewhere,
- like the wiki, and then figure out if anyone actually wants to
- subscribe to it =)
- - E-mail summary to mailing list?
- - <https://emacsconf.org/2020/meetings/> announced on IRC
- \#emacsconf
- - With long-form summary at some point?
- - dto volunteering to help Leo (it turns out dto was also an
- English major in his past life, and has done a fair bit of
- copyediting)
- - mplsCorwin can handle social media
- - bandali: avoid perfectionism
- - Lots of people have a hard time with this
- - getting things out of your head = good
- - don't let the great be the enemy of the good. Take advantage
- of the friendly community.
- - dto: story about local trails committee, which is kind of like
- this
- - Look, we can just post a rough outline, whee! =)
- - bullet-points are fine as a starting point
- - Segments of recording? Timer in the pad can help. 
- - Livestream with delay?
- - Something to grow into, maybe; let's start with text and
- possibly recording segments
- - Maybe private part and then public part, with time notes in case
- there are things we need to remove from the recording, keeping
- private segment as short as possible
- - Everyone's cool with this
- - Discussed: Separate days for private and public meeting? Might
- take too much time. 
- - Guidelines for private segments: document reasons if possible
- - Confidentiality
- - Buzz factor: vet ideas before unleashing them? preview?
- - Figuring out the persona/voice/feeling for EmacsConf, for the
- meeting
- - Hard to figure out how to communicate both excitement and
- reserve
- - Diversity and perspective: we're trying to figure out how this
- comes across from the outside, without our own knowledge
- - sachac: We could try to just dump the outline for starters, and
- can come up with quick automation for transforming the Etherpad
- =)
- - Is it because we're trying to figure out the official voice for
- EmacsConf? Is it easier to talk as individuals?
- - Sticker giveaway: mplsCorwin
-- Next week, 3PM UTC Saturday, Leo to send calendar invite and/or e-mail:
- - Leo will write a summary of what we've been doing and put it in the
- pad, for e-mailing out?
- - Braindumps welcome =)
- - Week after: public meeting/recording 
-
diff --git a/2020/meetings.org b/2020/meetings.org
deleted file mode 100644
index 126ec877..00000000
--- a/2020/meetings.org
+++ /dev/null
@@ -1,155 +0,0 @@
-#+OPTIONS: toc:nil
-
-#+begin_export md
-[[!meta title="Meeting notes"]]
-[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, David O'Toole, Corwin Brust, Leo Vivier, Daniel Gopar"]]
-<!-- Automatically generated from meetings.org -->
-#+end_export
-
-* Actions :noexport:
-
-[[elisp:(progn (org-export-to-file 'md "meetings.md") (magit-stage-file "meetings.org") (magit-stage-file "meetings.md"))]]
-
-* Ongoing projects
- :PROPERTIES:
- :CUSTOM_ID: ongoing-projects
- :END:
-
-- Subtitles/transcripts: sachac, bhavin192
-- FOSSHost: mplsCorwin
-- Calendar, connecting with meetups: sachac
-- Streaming infrastructure for meetups?: bandali, sachac
-- Amin and Gopar's podcast: bandali, gopar
-- mplsCorwin's livestreaming project, working on trimming
-- Writing about Emacs: zaeph
-
-* January 7, 2020 meeting
-
-- Checking in:
- - bandali, zaeph, gopar, sachac, dto
- - bandali: fairly uneventful, things are going okay, learning more about Jami, experimenting with DSLR for webcam but aspect ratio is a little weird
- - sachac: virtual school started again; EmacsNYC meetup; emacs calendar in HTML and Org
- - dto: having fun with neural networks
- - zaeph: at his parents, can't do much work, enjoying the lull; figuring out collaborative slipboxing with org-roam; getting more into writing
- - gopar
-- Agenda:
- - Update: emacslife.com/calendar
- - Update: attended NYC meetup
- - methodology
- - bandali
- - met with organizers of EmacsNYC. They were curious about BBB and Jitsi, streaming, IRC web client
- - met with gopar last night re: podcast
- - will work on a blog post about the technical setup
- - someone wanted to set up a meetup in Mexico, too, so maybe we can make an updated starting-a-meetup guide (https://harryrschwartz.com/2015/09/14/starting-an-emacs-meetup.html)
- - how to find people and advertise
- - reddit.com/r/emacs
- - Emacs News
- - https://www.emacswiki.org/emacs/Usergroups
- - how to stream and record
- - what it might be like if there are no presentations (don't worry! hang out, share cool stuff, figure things out together, flip through Emacs News)
- - sharing afterwards
- - CRDT: see BBB chat if you want to try it
- - dto:
- - tutorial; (also, SystemCrafters just livestreamed an Emacs Lisp tutorial too)
- - Hmm, it's like having lab hours
- - Could be open (office hours, bring your questions; maybe a liiittle structure) or guided (here's an exercise to start with)
- - podcast
- - Upcoming workshops
- - BBB has breakout rooms, might be worth looking into if it scales up a lot; Jitsi can have multiple people sharing screens at the same time;
- - EmacsNYC said Jitsi is okay for the 20-30 people they've seen so far; EmacsBerlin said the same too (I think they self-host; want to see how they're doing it?). Sounds like it's much better now than it was last year
- - dto will figure it out and write things up =)
- - one-on-one tutorial was nice; finger memory for how to type some of these Lisp expressions
- - it's better to have that interactivity, I think, since there are plenty of lecture-type resources on the Net
- - one-on-one is fine, and then you can scale up (1-on-2, etc.) as you become more comfortable with it and see what can help you scale (ex: having them SSH into a shared server with emacsclients and then being able to quickly flip through their buffers so that you can peek over their shoulder or quickly show something?)
- - gopar: upcoming podcast recording re: EmacsConf experience
- - figuring out name
- - planning to have a little buffer
- - Hey, do you want to blend that into the Emacs Lisp / Emacs tutorial/workshop idea? Whenever you don't have any content, you can teach people a little more
-
- -
- - bhavin192: Mailing list for meetups (some common prefix or something similar).
- - *let's remember to discuss this and the next point* =)
- - bhavin192: Update to Code of Conduct (I was hoping to use the same text or page for Emacs APAC meetup)
- - zaeph: figuring out collaborating via Org Mode
- - per-project pages make sense if you think about it from the web publishing point of view
- - bandali: can be a different wiki if you want
- - zaeph is a little intimidated by the idea of working with the garage door open
- - there is already a private organizer wiki, so we can use that to incubate things if you want to collaboratively work on notes and stuff
- - also totally okay to work on things individually and not collectively if you want, and we don't have to figure out workflows that work for everyone or a name that covers everything; sounding official increases expectations and may cause problems
- -
- - Next:
-
-* January 2, 2020 meeting
- :PROPERTIES:
- :CUSTOM_ID: january-2-2020-meeting
- :END:
-
-- Conversations
- - mplsCorwin: FOSSHost: okay to experiment with being a CDN, will
- experiment with videos
- - authenticated RTMP server to support streaming meetups from Jitsi?
- - PeerTube?
- - sachac: added more events to
- [[https://www.emacswiki.org/emacs/Usergroups]] and the calendar
- - sachac: subed.el patches for splitting and merging subtitles, will
- continue editing subtitles
- - Podcast:
- - Thinking about name: 
- - Current: emacs.el podcast
- - Emacs Weekly? Probably okay, although includes commitment to
- actually make it weekly
- - Amin and Gopar's Wild World of Emacs?
- - ideas for making it visually interesting when there's no video
- - Suggested guest: Fermin - interesting story about how he got into
- Emacs and started making it better for PHP
- - Making these conversations more public:
- - Maybe start with just putting public meeting minutes somewhere,
- like the wiki, and then figure out if anyone actually wants to
- subscribe to it =)
- - E-mail summary to mailing list?
- - [[https://emacsconf.org/2020/meetings/]] announced on IRC
- #emacsconf
- - With long-form summary at some point?
- - dto volunteering to help Leo (it turns out dto was also an
- English major in his past life, and has done a fair bit of
- copyediting)
- - mplsCorwin can handle social media
- - bandali: avoid perfectionism
- - Lots of people have a hard time with this
- - getting things out of your head = good
- - don't let the great be the enemy of the good. Take advantage
- of the friendly community.
- - dto: story about local trails committee, which is kind of like
- this
- - Look, we can just post a rough outline, whee! =)
- - bullet-points are fine as a starting point
- - Segments of recording? Timer in the pad can help. 
- - Livestream with delay?
- - Something to grow into, maybe; let's start with text and
- possibly recording segments
- - Maybe private part and then public part, with time notes in case
- there are things we need to remove from the recording, keeping
- private segment as short as possible
- - Everyone's cool with this
- - Discussed: Separate days for private and public meeting? Might
- take too much time. 
- - Guidelines for private segments: document reasons if possible
- - Confidentiality
- - Buzz factor: vet ideas before unleashing them? preview?
- - Figuring out the persona/voice/feeling for EmacsConf, for the
- meeting
- - Hard to figure out how to communicate both excitement and
- reserve
- - Diversity and perspective: we're trying to figure out how this
- comes across from the outside, without our own knowledge
- - sachac: We could try to just dump the outline for starters, and
- can come up with quick automation for transforming the Etherpad
- =)
- - Is it because we're trying to figure out the official voice for
- EmacsConf? Is it easier to talk as individuals?
- - Sticker giveaway: mplsCorwin
-- Next week, 3PM UTC Saturday, Leo to send calendar invite and/or e-mail:
- - Leo will write a summary of what we've been doing and put it in the
- pad, for e-mailing out?
- - Braindumps welcome =)
- - Week after: public meeting/recording 
diff --git a/2020/organizers-notebook.md b/2020/organizers-notebook.md
index b2edbf12..e2847847 100644
--- a/2020/organizers-notebook.md
+++ b/2020/organizers-notebook.md
@@ -46,8 +46,8 @@ I modified the `subed` package to work with VTT files. The modified version is a
- [X] sachac <./info/16.md> <./subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt>
- [X] sachac <./info/17.md> <./subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt>
- [X] sachac <./info/18.md> <./subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt>
-- [ ] sachac <./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt>
-- [ ] sachac <./subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt>
+- [X] sachac <./info/19.md> <./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt>
+- [X] sachac <./info/20.md> <./subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt>
- [ ] <./subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt>
- [ ] sachac <./subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt>
- [ ] <./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt>
@@ -61,11 +61,11 @@ I modified the `subed` package to work with VTT files. The modified version is a
- [ ] <./subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt>
- [ ] <./subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt>
- [ ] <./subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt>
-- [ ] <./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt>
-- [ ] <./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt>
+- [ ] bhavin192 <./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt>
+- [ ] bhavin192 <./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt>
- [ ] bhavin192 <./subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt>
-- [ ] bhavin192 <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt>
-- [ ] bhavin192 <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt>
+- [X] bhavin192 <./info/35.md> <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt>
+- [X] bhavin192 <./info/35.md> <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt>
- [X] bhavin192 <./info/38.md> <./subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt>
- [X] bhavin192 <./info/39.md> <./subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt>
- [X] bhavin192 <./info/39.md> <./subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt>
diff --git a/2020/organizers-notebook.org b/2020/organizers-notebook.org
index 9f86f397..b2a2f355 100644
--- a/2020/organizers-notebook.org
+++ b/2020/organizers-notebook.org
@@ -13,8 +13,8 @@
* Tasks
** Manually transcribe
Either subtitles (with timestamps) or a text transcript (no timestamps) is perfectly okay.
-- [ ] mplsCorwin: emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm
-- [ ] mplsCorwin: emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.webm
+- [ ] sachac: emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm
+- [X] sachac: emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.webm
- [X] sachac: emacsconf-2020--10-lead-your-future-with-org--andrea.webm
Added transcript to info/10.md, seeing if YouTube can automatically
assign timing. Took about 24 minutes to transcribe 8 minute talk. If
@@ -46,26 +46,26 @@ I modified the =subed= package to work with VTT files. The modified version is a
- [X] sachac [[./info/16.md]] [[./subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt]]
- [X] sachac [[./info/17.md]] [[./subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt]]
- [X] sachac [[./info/18.md]] [[./subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt]]
-- [X] sachac [[./info/19.md]] [[./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt]]
-- [X] sachac [[./info/20.md]] [[./subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt]]
-- [ ] sachac [[./subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt]]
+- [X] sachac [[./info/19.md]] [[./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt]]
+- [X] sachac [[./info/20.md]] [[./subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt]]
+- [X] sachac [[./info/21.md]] [[./subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann-autogen.vtt]]
+- [ ] sachac [[./subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt]]
- [ ] [[./subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt]]
-- [ ] [[./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt]]
+- [ ] bhavin192 [[./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt]]
+- [ ] bhavin192 [[./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt]]
- [ ] bhavin192 [[./subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt]]
-- [ ] bhavin192 [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt]]
-- [ ] bhavin192 [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt]]
+- [X] bhavin192 [[./info/35.md]] [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt]]
+- [X] bhavin192 [[./info/35.md]] [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt]]
- [X] bhavin192 [[./info/38.md]] [[./subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt]]
- [X] bhavin192 [[./info/39.md]] [[./subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt]]
- [X] bhavin192 [[./info/39.md]] [[./subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt]]
@@ -493,11 +493,7 @@ Set the info based on submissions.org.
- Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
- Multi-monitor setups might not be handled well by BBB; share window instead of desktop
- Check if comfortable checking into IRC: #emacsconf-org
-- Ask about Q&A preference; OR:
- - live Q&A
- - Q&A over pad or IRC
- - no Q&A
-- Get IRC nick and phone number for emergency contact, store in private wiki
+- Get IRC nick, phone number for emergency contact, store in private wiki
- Try to record name pronunciation
- Encourage webcam for Q&A, although make it clear that it's totally optional
- Possible picture-in-picture approach to maximize screen real estate
@@ -750,10 +746,10 @@ Another collaborative pad
Usage: compress-video.sh input-filename.webm output-filename.webm
- #+begin_src sh :eval no :tangle compress-video.sh
+ #+begin_src sh :eval no :tangle compress-video.sh :shebang "#!/bin/bash"
Q=56
- nice ffmpeg -y -i $1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
- nice ffmpeg -y -i $1 -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 $2
+ nice ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ nice ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
#+end_src
Here's the original version which compresses audio too. Usage: compress-video-compressed-audio.sh input-filename.webm output-filename.webm
@@ -823,44 +819,21 @@ If TALK is not specified, do it in the current buffer."
,@body)
,@body))
-(defun conf/add-transcript (&optional talk)
- "Try to add transcript for the current talk."
- (interactive)
- (conf/with-talk-info-file talk
- (goto-char (point-min))
- (let (subtitles subed-auto-find-video all)
- (while (re-search-forward "subtitles=\"/\\(.+?\\)\"" nil t)
- (setq subtitles (cons (match-string 1) subtitles))
- (when (re-search-forward "^$\\|\\[View transcript" nil t)
- (unless (string= (match-string 0) "[View transcript")
- (insert
- (if (string-match "questions" (car subtitles))
- "[View transcript for Q&A](#transcript-questions)\n"
- "[View transcript](#transcript)\n")))))
- (when subtitles
- (mapc
- (lambda (subtitle-file)
- (with-current-buffer (find-file-noselect (expand-file-name subtitle-file conf/wiki-directory))
- (goto-char (point-min))
- (subed-mode)
- (let (text)
- (while (subed-forward-subtitle-text)
- (setq text (cons (subed-subtitle-text) text)))
- (setq all (mapconcat 'identity (reverse text) "\n"))))
- (if (re-search-forward (format "<!-- transcript: %s -->[ \t]*\n\\([.\r\n]*?\\)<!-- /transcript -->" (regexp-quote subtitle-file)) nil t)
- (progn
- (goto-char (match-beginning 1))
- (delete-region (match-beginning 1) (match-end 1)))
- (goto-char (point-max))
- (insert (format "\n\n<!-- transcript: %s -->\n\n" subtitle-file))
- (insert (if (string-match "questions" subtitle-file)
- "<a name=\"transcript-questions\"></a>\n# Transcript: Q&A\n\n"
- "<a name=\"transcript\"></a>\n# Transcript\n\n"))
- (save-excursion (insert "\n\n<!-- /transcript -->\n")))
- (save-excursion (insert all)))
- (reverse subtitles))))))
-
-;; (conf/add-transcript (conf/find-talk "03")), or call from a talk info page
+(defun my/convert-transcript-to-directives (id)
+ (interactive "MID: ")
+ (goto-char (point-min))
+ (kill-new
+ (concat
+ "<a name=\"transcript\"></a>\n# Transcript\n\n"
+ (cl-loop while (subed-forward-subtitle-text)
+ concat (format "[[!template text=\"%s\" start=\"%s\" video=\"%s\" id=subtitle]]\n"
+ (replace-regexp-in-string
+ "\n" " "
+ (replace-regexp-in-string
+ "\"" "&quot;"
+ (replace-regexp-in-string "[][]" "" (subed-subtitle-text))))
+ (subed-vtt--msecs-to-timestamp (subed-subtitle-msecs-start))
+ id)))))
#+end_src
* Other useful tidbits
diff --git a/2020/submissions.org b/2020/submissions.org
index 5d7416f7..14aef5a1 100644
--- a/2020/submissions.org
+++ b/2020/submissions.org
@@ -168,6 +168,7 @@ execute the buffer, update the talk's info/TALKID.md file.
:MIN_TIME_SUM: 880
:TARGET_TIME: 768
:DIFFERENCE: Needs: 112
+:CUSTOM_ID: submissions
:END:
** NOVEMBER 28 (Saturday) :sat:
@@ -182,6 +183,8 @@ SCHEDULED: <2020-11-28 Sat 09:00-09:30>
:TALK_ID: 00
:ROOM: A
:DURATION: 7:04
+:SLUG: 00
+:TIME: 8
:END:
*** 9:30 - 12:00 User talks :morning:
@@ -224,6 +227,9 @@ SCHEDULED: <2020-11-28 Sat 09:33-09:37>
:CUSTOM_ID: talk01
:TALK_ID: 01
:DURATION: 3:58
+:SLUG: 01
+:TIME: 4
+:DATE_SUBMITTED: 2020-10-05
:END:
Name: Sacha Chua
@@ -294,6 +300,9 @@ SCHEDULED: <2020-11-28 Sat 09:40-10:00>
:CUSTOM_ID: talk02
:TALK_ID: 02
:DURATION: 24:15
+:SLUG: 02
+:TIME: 25
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Leo Vivier
@@ -368,6 +377,9 @@ SCHEDULED: <2020-11-28 Sat 10:03-10:13>
:TALK_ID: 03
:PREREC: done, live Q&A
:DURATION: 14:50
+:SLUG: 03
+:TIME: 15
+:DATE_SUBMITTED: 2020-09-02
:END:
Name: Bala Ramadurai
@@ -458,6 +470,9 @@ SCHEDULED: <2020-11-28 Sat 10:16-10:26>
:CUSTOM_ID: talk04
:TALK_ID: 04
:DURATION: 8:26
+:SLUG: 04
+:TIME: 9
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Jonathan Gregory
@@ -520,6 +535,9 @@ SCHEDULED: <2020-11-28 Sat 10:29-10:45>
:CUSTOM_ID: talk05
:TALK_ID: 05
:DURATION: 29:50
+:SLUG: 05
+:TIME: 30
+:DATE_SUBMITTED: 2020-10-07
:END:
Name: Grant Shangreaux
@@ -589,6 +607,9 @@ SCHEDULED: <2020-11-28 Sat 10:48-10:58>
:CUSTOM_ID: talk06
:TALK_ID: 06
:DURATION: 13:41
+:SLUG: 06
+:TIME: 14
+:DATE_SUBMITTED: 2020-10-02
:END:
Name: Corwin Brust
@@ -642,6 +663,9 @@ SCHEDULED: <2020-11-28 Sat 11:01-11:21>
:CUSTOM_ID: talk07
:TALK_ID: 07
:DURATION: 22:05
+:SLUG: 07
+:TIME: 23
+:DATE_SUBMITTED: 2020-10-10
:END:
Name: Sid Kasivajhula
@@ -736,6 +760,9 @@ SCHEDULED: <2020-11-28 Sat 11:24-11:44>
:CUSTOM_ID: talk08
:TALK_ID: 08
:DURATION: 17:19
+:SLUG: 08
+:TIME: 18
+:DATE_SUBMITTED: 2020-09-25
:END:
Name: Andrew Tropin
@@ -808,6 +835,9 @@ fair use.
:CUSTOM_ID: talk21
:TALK_ID: 21
:DURATION: 47:08
+ :SLUG: 21
+ :TIME: 48
+ :DATE_SUBMITTED: 2020-10-05
:END:
Name: Eduardo Ochs
@@ -950,6 +980,9 @@ SCHEDULED: <2020-11-28 Sat 12:00-13:00>
:CUSTOM_ID: talk09
:TALK_ID: 09
:DURATION: 14:09
+ :SLUG: 09
+ :TIME: 15
+ :DATE_SUBMITTED: 2020-10-05
:END:
Name: Rainer König
@@ -1035,6 +1068,9 @@ fair use.
:CUSTOM_ID: talk10
:TALK_ID: 10
:DURATION: 8:18
+ :SLUG: 10
+ :TIME: 9
+ :DATE_SUBMITTED: 2020-09-25
:END:
Name: Andrea
@@ -1100,6 +1136,9 @@ fair use.
:CUSTOM_ID: talk11
:TALK_ID: 11
:DURATION: 15:18
+ :SLUG: 11
+ :TIME: 16
+ :DATE_SUBMITTED: 2020-10-07
:END:
Name: Aldric
@@ -1156,6 +1195,9 @@ fair use.
:CUSTOM_ID: talk12
:TALK_ID: 12
:DURATION: 16:38
+ :SLUG: 12
+ :TIME: 17
+ :DATE_SUBMITTED: 2020-10-06
:END:
Name: Leo Vivier
@@ -1231,6 +1273,9 @@ SCHEDULED: <2020-11-28 Sat 14:05-14:15>
:CUSTOM_ID: talk13
:TALK_ID: 13
:DURATION: 12:05
+:SLUG: 13
+:TIME: 13
+:DATE_SUBMITTED: 2020-10-07
:END:
Name: Joseph Corneli, Raymond Puzio, and Cameron Ray Smith
@@ -1309,6 +1354,9 @@ SCHEDULED: <2020-11-28 Sat 14:18-14:38>
:TALK_ID: 14
:PREREC: done
:DURATION: 19:41
+:SLUG: 14
+:TIME: 20
+:DATE_SUBMITTED: 2020-09-23
:END:
Name: Adam Ard
@@ -1370,6 +1418,9 @@ SCHEDULED: <2020-11-28 Sat 14:41-14:51>
:CUSTOM_ID: talk15
:TALK_ID: 15
:DURATION: 25:00
+:SLUG: 15
+:TIME: 25
+:DATE_SUBMITTED: 2020-10-07
:END:
Name: Adolfo Villafiorita
@@ -1433,6 +1484,9 @@ SCHEDULED: <2020-11-28 Sat 14:54-15:14>
:CUSTOM_ID: talk16
:TALK_ID: 16
:DURATION: 21:56
+:SLUG: 16
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Leo Vivier
@@ -1513,6 +1567,9 @@ SCHEDULED: <2020-11-28 Sat 15:17-15:37>
:CUSTOM_ID: talk17
:TALK_ID: 17
:DURATION: 21:15
+:SLUG: 17
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-10
:END:
Name: Noorah Alhasan
@@ -1595,6 +1652,9 @@ SCHEDULED: <2020-11-28 Sat 15:40-16:00>
:CUSTOM_ID: talk18
:TALK_ID: 18
:DURATION: 21:26
+:SLUG: 18
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Leo Vivier
@@ -1680,6 +1740,9 @@ SCHEDULED: <2020-11-28 Sat 16:03-16:13>
:CUSTOM_ID: talk19
:TALK_ID: 19
:DURATION: 8:13
+:SLUG: 19
+:TIME: 9
+:DATE_SUBMITTED: 2020-10-02
:END:
Name: Brett Gilio
@@ -1744,6 +1807,9 @@ SCHEDULED: <2020-11-28 Sat 16:16-16:36>
:CUSTOM_ID: talk20
:TALK_ID: 20
:DURATION: 22:50
+:SLUG: 20
+:TIME: 23
+:DATE_SUBMITTED: 2020-10-09
:END:
Name: Corwin Brust
@@ -1807,6 +1873,8 @@ SCHEDULED: <2020-11-28 Sat 16:30-17:00>
:TALK_ID: 40
:CUSTOM_ID: talk40
:DURATION: 15:47
+:SLUG: 40
+:TIME: 16
:END:
** NOVEMBER 29 (Sunday) :sun:
@@ -1820,6 +1888,8 @@ SCHEDULED: <2020-11-29 Sun 09:00-09:10>
:TALK_ID: 41
:CUSTOM_ID: talk41
:DURATION: 11:47
+:SLUG: 41
+:TIME: 12
:END:
*** 9:10 - 12:00 Morning talks :morning:
@@ -1857,6 +1927,8 @@ SCHEDULED: <2020-11-29 Sun 09:00-09:10>
:CUSTOM_ID: talk38
:PREREC: done
:DURATION: 5:07
+ :SLUG: 38
+ :TIME: 6
:END:
***** Talk information
@@ -1873,6 +1945,9 @@ SCHEDULED: <2020-11-29 Sun 09:33-09:53>
:CUSTOM_ID: talk22
:TALK_ID: 22
:DURATION: 29:06
+:SLUG: 22
+:TIME: 30
+:DATE_SUBMITTED: 2020-09-22
:END:
Name: Musa Al-hassy
@@ -1993,6 +2068,9 @@ SCHEDULED: <2020-11-29 Sun 09:56-10:46>
:CUSTOM_ID: talk23
:TALK_ID: 23
:DURATION: 43:54
+:SLUG: 23
+:TIME: 44
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Tuấn-Anh Nguyễn
@@ -2060,6 +2138,9 @@ SCHEDULED: <2020-11-29 Sun 10:49-11:09>
:TALK_ID: 24
:PREREC: done
:DURATION: 20:46
+:SLUG: 24
+:TIME: 21
+:DATE_SUBMITTED: 2020-09-25
:END:
Name: Andrea
@@ -2135,6 +2216,9 @@ SCHEDULED: <2020-11-29 Sun 11:12-11:22>
:TALK_ID: 25
:PREREC: done
:DURATION: 9:52
+:SLUG: 25
+:TIME: 10
+:DATE_SUBMITTED: 2020-08-30
:END:
Name: Zen Monk Alain M. Lafon
@@ -2208,9 +2292,11 @@ fair use.
:AVAILABILITY: tbd
:NAME: Richard Stallman
:DURATION: 53:38
+ :SLUG: 39
+ :TIME: 54
:END:
-**** Talk information
+***** Talk information
TBD - plans for a NonGNU ELPA that will be easy to enable and contribute to without signing copyright assignment papers
@@ -2261,6 +2347,9 @@ SCHEDULED: <2020-11-29 Sun 13:03-13:13>
:TALK_ID: 26
:PREREC: done
:DURATION: 14:57
+:SLUG: 26
+:TIME: 15
+:DATE_SUBMITTED: 2020-10-01
:END:
Name: Pierce Wang
@@ -2338,6 +2427,9 @@ SCHEDULED: <2020-11-29 Sun 13:16-13:26>
:PREREC: done
:TALK_ID: 27
:DURATION: 21:26
+:SLUG: 27
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-05
:END:
Hello,
@@ -2409,6 +2501,9 @@ SCHEDULED: <2020-11-29 Sun 13:29-14:19>
:QA: rtmp
:TALK_ID: 28
:DURATION: 9:00
+:SLUG: 28
+:TIME: 9
+:DATE_SUBMITTED: 2020-10-02
:END:
Name: Erik Elmshauser and Corwin Brust
@@ -2482,6 +2577,9 @@ SCHEDULED: <2020-11-29 Sun 14:22-14:42>
:CUSTOM_ID: talk29
:QA: rtmp
:TALK_ID: 29
+:SLUG: 29
+:DATE_SUBMITTED: 2020-10-02
+:TIME: 20
:END:
Name: Erik Elmshauser and Corwin Brust (mplsCorwin)
@@ -2599,6 +2697,9 @@ SCHEDULED: <2020-11-29 Sun 14:45-14:55>
:TALK_ID: 30
:PREREC: done
:DURATION: 11:30
+:TIME: 10
+:SLUG: 30
+:DATE_SUBMITTED: 2020-10-06
:END:
Name: Gabriele Bozzola (@sbozzolo)
@@ -2653,12 +2754,15 @@ SCHEDULED: <2020-11-29 Sun 14:58-15:14>
:PROPERTIES:
:MAX_TIME: 16
:MIN_TIME: 16
+:DATE_SUBMITTED: 2020-10-06
:AVAILABILITY: Central time, 10am EST-5pm EST
:NAME: Grant Shangreaux
:CUSTOM_ID: talk31
:TALK_ID: 31
:PREREC: done
:DURATION: 16:50
+:SLUG: 31
+:TIME: 16
:END:
Name: Grant Shangreaux
@@ -2736,6 +2840,9 @@ SCHEDULED: <2020-11-29 Sun 15:17-15:41>
:TALK_ID: 32
:PREREC: planned
:DURATION: 23:57
+:SLUG: 32
+:DATE_SUBMITTED: 2020-10-02
+:TIME: 24
:END:
Name: Eric Abrahamsen
@@ -2803,6 +2910,9 @@ SCHEDULED: <2020-11-29 Sun 15:44-16:04>
:CUSTOM_ID: talk33
:TALK_ID: 33
:DURATION: 39:16
+:SLUG: 33
+:DATE_SUBMITTED: 2020-10-05
+:TIME: 40
:END:
Name: Fermin MF
@@ -2868,6 +2978,9 @@ SCHEDULED: <2020-11-29 Sun 16:07-16:30>
:TALK_ID: 34
:QA: irc
:DURATION: 22:22
+:SLUG: 34
+:DATE_SUBMITTED: 2020-10-02
+:TIME: 23
:END:
Name: Matthew Zeng
@@ -2926,6 +3039,9 @@ SCHEDULED: <2020-11-29 Sun 16:33-16:43>
:PREREC: done
:QA: live
:DURATION: 16:02
+:SLUG: 35
+:DATE_SUBMITTED: 2020-10-06
+:TIME: 16
:END:
Name: Zachary Kanfer
@@ -2988,6 +3104,8 @@ SCHEDULED: <2020-11-29 Sun 16:30-17:00>
:TALK_ID: 42
:CUSTOM_ID: talk42
:DURATION: 36:29
+:SLUG: 42
+:TIME: 36
:END:
* Withdrawn
@@ -3003,6 +3121,7 @@ SCHEDULED: <2020-11-29 Sun 16:30-17:00>
:NAME: Corwin Brust
:CUSTOM_ID: talk36
:TALK_ID: 36
+ :SLUG: 36
:END:
#+begin_quote
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
index facb16b8..37114bf0 100644
--- 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
@@ -3,122 +3,103 @@ WEBVTT
00:00:00.000 --> 00:00:03.760
(Amin: Alrighty, Leo Vivier, take it away.)
-00:00:03.760 --> 00:00:05.839
-Okay, well, thank you. I'm in. So you've
+00:00:03.760 --> 00:00:05.319
+Okay, well, thank you. I'm in.
-00:00:05.839 --> 00:00:06.879
-just had a
+00:00:05.319 --> 00:00:08.393
+So you've just had a little roundup of
+the news,
-00:00:06.879 --> 00:00:08.880
-little roundup of the news, and we're
+00:00:08.393 --> 00:00:11.120
+and we're going to get started now with
+some presentations.
-00:00:08.880 --> 00:00:10.320
-going to get started now with some
-
-00:00:10.320 --> 00:00:11.120
-presentations.
-
-00:00:11.120 --> 00:00:13.840
+00:00:11.120 --> 00:00:15.920
We're starting with user
-
-00:00:13.840 --> 00:00:15.920
developer stories.
-00:00:15.920 --> 00:00:18.000
-I was extremely interested in this
-
-00:00:18.000 --> 00:00:19.199
-section because I
+00:00:15.920 --> 00:00:18.568
+I was extremely interested in
+this section
-00:00:19.199 --> 00:00:21.600
-wanted to get a chance, basically, to tell
+00:00:18.568 --> 00:00:21.133
+because I wanted to get
+a chance, basically,
-00:00:21.600 --> 00:00:24.160
-you a little more about who I am and
+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:27.039
-how I got from basically being a user of
+00:00:24.160 --> 00:00:28.160
+how I got from basically being
+a user of Emacs
-00:00:27.039 --> 00:00:28.160
-Emacs
-
-00:00:28.160 --> 00:00:30.640
-to being nowadays a package
-
-00:00:30.640 --> 00:00:31.279
-maintainer,
+00:00:28.160 --> 00:00:31.279
+to being nowadays a package maintainer,
-00:00:31.279 --> 00:00:33.280
+00:00:31.279 --> 00:00:34.156
and maybe more in the future. I don't
+know.
-00:00:33.280 --> 00:00:34.559
-know. So,
+00:00:34.156 --> 00:00:36.954
+So, just for the organizers, I'm
+planning to speak for 15 minutes,
-00:00:34.559 --> 00:00:36.160
-just for the organizers, I'm planning to
+00:00:36.954 --> 00:00:39.680
+and I'll have five more minutes of
+questions at the end.
-00:00:36.160 --> 00:00:37.760
-speak for 15 minutes, and I'll have five
-
-00:00:37.760 --> 00:00:39.680
-more minutes of questions at the end.
-
-00:00:39.680 --> 00:00:41.360
+00:00:39.680 --> 00:00:41.880
As I told you before, if you want to have
+questions,
-00:00:41.360 --> 00:00:43.440
-questions, you know you can use the pad,
+00:00:41.880 --> 00:00:43.440
+you know you can use the pad,
-00:00:43.440 --> 00:00:44.879
+00:00:43.440 --> 00:00:45.871
and I'll be reading the questions from
+there.
-00:00:44.879 --> 00:00:47.360
-there. Okay. So
-
-00:00:47.360 --> 00:00:49.600
-hi there, as Amin introduced me before,
+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:54.800
+00:00:51.280 --> 00:00:55.662
I'm a freelance software engineer
+in France,
-00:00:54.800 --> 00:00:58.079
-in France, and I have been using Emacs
-
-00:00:58.079 --> 00:00:59.359
-now for
+00:00:55.662 --> 00:00:59.359
+and I have been using Emacs now for
-00:00:59.359 --> 00:01:01.280
-i believe close to eight years. I can't
+00:00:59.359 --> 00:01:00.885
+I believe close to eight years.
-00:01:01.280 --> 00:01:03.039
-believe it's been so long.
+00:01:00.885 --> 00:01:03.039
+I can't believe it's been so long.
-00:01:03.039 --> 00:01:07.680
+00:01:03.039 --> 00:01:09.967
But yes, it's been a journey because,
+in a way,
-00:01:07.680 --> 00:01:12.000
-in a way, nothing
+00:01:09.967 --> 00:01:13.255
+nothing made me go for Emacs.
-00:01:12.000 --> 00:01:15.119
-made me go for Emacs. You know I'm an--
+00:01:13.255 --> 00:01:17.011
+You know I'm an-- sorry, I was about to
+say Emacs major,
-00:01:15.119 --> 00:01:17.280
-sorry, I was about to say Emacs major, but
+00:01:17.011 --> 00:01:18.638
+but no, I'm an English major.
-00:01:17.280 --> 00:01:19.200
-no, I'm an English major. I went to
+00:01:18.638 --> 00:01:23.990
+I went to university to study English
+literature and linguistics,
-00:01:19.200 --> 00:01:21.280
-university to study English literature
-
-00:01:21.280 --> 00:01:24.320
-and linguistics, and
-
-00:01:24.320 --> 00:01:26.159
-I just got started in Emacs
+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
@@ -126,80 +107,70 @@ 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:31.340 --> 00:01:32.640
-[Applause]
-
00:01:32.640 --> 00:01:34.640
structure the way I was learning,
-00:01:34.640 --> 00:01:36.720
-structure the way I was
+00:01:34.640 --> 00:01:38.084
+structure the way I was taking notes.
-00:01:36.720 --> 00:01:40.079
-taking notes. I stumbled one day
+00:01:38.084 --> 00:01:40.079
+I stumbled one day
-00:01:40.079 --> 00:01:42.320
-upon this weird piece of software which
+00:01:40.079 --> 00:01:42.032
+upon this weird piece of software
-00:01:42.320 --> 00:01:43.759
-was called Emacs,
+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:47.920
-basically, because
+00:01:46.479 --> 00:01:48.328
+basically, because eight years ago,
-00:01:47.920 --> 00:01:49.280
-eight years ago, when I discovered
+00:01:48.328 --> 00:01:49.515
+when I discovered Emacs,
-00:01:49.280 --> 00:01:51.119
-Emacs I just couldn't let go. There was
+00:01:49.515 --> 00:01:50.632
+I just couldn't let go.
-00:01:51.119 --> 00:01:52.720
-just something very
+00:01:50.632 --> 00:01:52.720
+There was just something very
-00:01:52.720 --> 00:01:55.439
-interesting about the way you configured
+00:01:52.720 --> 00:01:54.487
+interesting about the way
-00:01:55.439 --> 00:01:56.320
-your setup,
+00:01:54.487 --> 00:01:56.320
+you configured your setup,
-00:01:56.320 --> 00:01:58.799
-and I just wanted to dive deeper and
-
-00:01:58.799 --> 00:01:59.759
-deeper.
+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:06.640
+00:02:04.320 --> 00:02:07.637
how I went from user to package
+maintainer,
-00:02:06.640 --> 00:02:08.000
-maintainer, and
-
-00:02:08.000 --> 00:02:09.840
-the package now that I'm maintaining is
-
-00:02:09.840 --> 00:02:11.599
-called org-roam. I'm not the only one
+00:02:07.637 --> 00:02:09.686
+and the package now that I'm maintaining
-00:02:11.599 --> 00:02:12.080
+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:15.440
+00:02:12.080 --> 00:02:18.720
I'm helped with many lovely people
-
-00:02:15.440 --> 00:02:18.720
working on org-roam.
-00:02:18.720 --> 00:02:21.360
+00:02:18.720 --> 00:02:22.149
I got started as a maintainer
+only this year,
-00:02:21.360 --> 00:02:23.360
-only this year, so that means that for
+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
@@ -228,20 +199,17 @@ 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:43.599
+00:02:42.160 --> 00:02:44.327
who can make the jump to being a
+maintainer.
-00:02:43.599 --> 00:02:45.519
-maintainer. A lot of you have
-
-00:02:45.519 --> 00:02:46.879
-a lot of knowledge when it comes to
-
-00:02:46.879 --> 00:02:48.959
-Emacs. Some of you
+00:02:44.327 --> 00:02:47.572
+A lot of you have a lot of knowledge
+when it comes to Emacs.
-00:02:48.959 --> 00:02:51.040
-are at different steps in your journey.
+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
@@ -249,78 +217,73 @@ 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:57.040
-StackExchange
+00:02:55.680 --> 00:02:59.058
+StackExchange into your Emacs
+configuration.
-00:02:57.040 --> 00:02:59.519
-into your Emacs configuration. let's
-
-00:02:59.519 --> 00:03:00.720
-say you want to do something very
-
-00:03:00.720 --> 00:03:01.599
+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.920
-You go on StackExchange. You find
-
-00:03:05.920 --> 00:03:09.040
-something that's interesting. You add it
-to your
+00:03:04.480 --> 00:03:05.527
+You go on StackExchange.
-00:03:09.040 --> 00:03:10.239
-Emacs configuration. You
+00:03:05.527 --> 00:03:07.930
+You find something that's interesting.
-00:03:10.239 --> 00:03:11.680
-barely understand anything that's going on.
+00:03:07.930 --> 00:03:10.077
+You add it to your Emacs configuration.
-00:03:11.680 --> 00:03:13.519
-You know that it's supposed to be
+00:03:10.077 --> 00:03:11.680
+You barely understand anything that's
+going on.
-00:03:13.519 --> 00:03:14.800
-Emacs Lisp.
+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."
+I know even less what is Lisp supposed
+to be."
-00:03:19.440 --> 00:03:21.440
-But you paste it in and it does what you
+00:03:19.440 --> 00:03:22.172
+But you paste it in, and it does what
+you want it to do,
-00:03:21.440 --> 00:03:22.800
-want it to do, and you say
+00:03:22.172 --> 00:03:26.682
+and you say "Great, I'll move on to my
+work now."
-00:03:22.800 --> 00:03:26.959
-"Great, I'll move on to my work now." So
+00:03:26.682 --> 00:03:28.821
+So that's how I got started.
-00:03:26.959 --> 00:03:29.280
-that's how I got started. I had
+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:29.280 --> 00:03:30.879
-a very spartan
+00:03:33.888 --> 00:03:36.000
+The first time you launch Emacs,
-00:03:30.879 --> 00:03:33.440
-setup for Emacs, which a lot of you must
+00:03:36.000 --> 00:03:36.920
+you have this feeling
-00:03:33.440 --> 00:03:36.000
-know... The first time you launch Emacs,
+00:03:36.920 --> 00:03:38.852
+that you're jumping 20 years
+back in time,
-00:03:36.000 --> 00:03:37.840
-you have this feeling that you're jumping 20
+00:03:38.852 --> 00:03:43.260
+as far as the user interface is
+concerned.
-00:03:37.840 --> 00:03:39.599
-years back in time, as far as the
-
-00:03:39.599 --> 00:03:43.680
-user interface is concerned. But
-
-00:03:43.680 --> 00:03:46.959
-as you get to spend more time with Emacs...
+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
@@ -328,104 +291,94 @@ 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:53.360
-how spartan the entire thing is, but it
-
-00:03:53.360 --> 00:03:54.640
-actually is
+00:03:50.959 --> 00:03:52.929
+how spartan the entire thing is,
-00:03:54.640 --> 00:03:58.400
-a lovely prison, so to speak.
+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:01.680
-I just wanted
+00:04:00.400 --> 00:04:04.319
+I just wanted to find a way to do my
+research properly.
-00:04:01.680 --> 00:04:04.319
-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:04.319 --> 00:04:05.519
-I wanted to have a
-
-00:04:05.519 --> 00:04:07.280
-tool that I could use to write my notes
+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:11.680
-fairly averse to
-
-00:04:11.680 --> 00:04:14.560
-Microsoft solutions when it
-
-00:04:14.560 --> 00:04:16.320
-came to taking notes.
-
-00:04:16.320 --> 00:04:19.359
-So yeah, I got started in Emacs. I
+00:04:08.959 --> 00:04:16.320
+fairly averse to Microsoft solutions
+when it came to taking notes.
-00:04:19.359 --> 00:04:20.880
-read a little bit about what plain text
+00:04:16.320 --> 00:04:19.180
+So yeah, I got started in Emacs.
-00:04:20.880 --> 00:04:23.040
-was about. Just to be clear,
+00:04:19.180 --> 00:04:21.651
+I read a little bit about what plain
+text was about.
-00:04:23.040 --> 00:04:26.000
-at the time, yes, I was very good with
+00:04:21.651 --> 00:04:24.364
+Just to be clear, at the time, yes,
-00:04:26.000 --> 00:04:27.120
-computers,
+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:33.520
+00:04:30.160 --> 00:04:34.302
I had barely any experience with
-programming
+programming and coding,
-00:04:33.520 --> 00:04:36.080
-and coding, and I was even less of a
-
-00:04:36.080 --> 00:04:39.919
-hacker
+00:04:34.302 --> 00:04:39.919
+and I was even less of a hacker
back then.
-00:04:39.919 --> 00:04:42.560
-It just goes to show you that at the
+00:04:39.919 --> 00:04:43.052
+It just goes to show you that
+at the beginning,
-00:04:42.560 --> 00:04:44.479
-beginning, I had close to no knowledge,
+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:48.880
-the free software world, 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.800
-Sacha, do you want to say something? (Sacha: just
+00:04:48.880 --> 00:04:50.290
+Sacha, do you want to say something?
-00:04:50.800 --> 00:04:52.479
-confirming, you're not sharing anything
+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.360
-No, I'm not sharing anything, I'm
+00:04:54.080 --> 00:04:55.204
+No, I'm not sharing anything,
-00:04:55.360 --> 00:04:59.040
-just presenting.
+00:04:55.204 --> 00:04:59.040
+I'm just presenting.
-00:04:59.040 --> 00:05:02.240
-So when I started, I had no
+00:04:59.040 --> 00:05:01.173
+So when I started,
-00:05:02.240 --> 00:05:03.680
-experience whatsoever.
+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
@@ -433,37 +386,39 @@ 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:13.440
-I stumbled upon LaTeX. As many people
+00:05:11.039 --> 00:05:12.466
+I stumbled upon LaTeX.
-00:05:13.440 --> 00:05:15.280
-who stumble upon LaTeX know,
+00:05:12.466 --> 00:05:15.280
+As many people who stumble upon
+LaTeX know,
-00:05:15.280 --> 00:05:17.039
-you don't just stumble upon
+00:05:15.280 --> 00:05:17.519
+you don't just stumble upon LaTeX,
-00:05:17.039 --> 00:05:19.759
-LaTeX, you embroil yourself in the
+00:05:17.519 --> 00:05:21.950
+you embroil yourself in the turmoil of
+suffering,
-00:05:19.759 --> 00:05:24.560
-turmoil of suffering, of late
-nights tweaking,
+00:05:21.950 --> 00:05:24.560
+of late nights tweaking,
-00:05:24.560 --> 00:05:27.440
-so that your document is exactly in the
+00:05:24.560 --> 00:05:26.923
+so that your document is exactly
-00:05:27.440 --> 00:05:33.440
-perfect shape you want it to be.
+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:38.400
+00:05:36.639 --> 00:05:39.334
I discovered something that truly
+changed my life,
-00:05:38.400 --> 00:05:40.560
-changed my life, and it was Org Mode.
+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
@@ -478,41 +433,43 @@ I won't be spending too much time on it.
But Org Mode, for me, was a
revelation. It's...
-00:05:53.680 --> 00:05:56.880
-There was something that, upon reading
+00:05:53.680 --> 00:05:55.869
+There was something that,
-00:05:56.880 --> 00:05:59.039
-articles on how to use Org Mode,
+00:05:55.869 --> 00:05:59.039
+upon reading articles on
+how to use Org Mode,
-00:05:59.039 --> 00:06:02.080
+00:05:59.039 --> 00:06:02.453
especially one of the key
+articles
-00:06:02.080 --> 00:06:04.160
-article that I'd read which really made
+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:10.720
-which i'm sure many of you must have
+was the "Organize Your Life in Plain
+Text" one,
-00:06:10.720 --> 00:06:12.240
+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:19.680
+00:06:15.919 --> 00:06:20.307
For me, when I stumbled upon this
+document,
-00:06:19.680 --> 00:06:21.840
-document, I was starting to get
+00:06:20.307 --> 00:06:22.488
+I was starting to get interested
-00:06:21.840 --> 00:06:24.240
-interested in Getting Things Done and
+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
@@ -520,26 +477,23 @@ all the nitty-gritty stuff about
00:06:26.560 --> 00:06:29.199
organization and self-organization.
-00:06:29.199 --> 00:06:31.919
+00:06:29.199 --> 00:06:32.960
It just felt like everything was under
-
-00:06:31.919 --> 00:06:32.960
my fingertips
00:06:32.960 --> 00:06:36.960
to make the perfect workflow.
-00:06:36.960 --> 00:06:40.880
+00:06:36.960 --> 00:06:44.080
There was something incredibly
-
-00:06:40.880 --> 00:06:44.080
satisfying about
-00:06:44.080 --> 00:06:46.319
-having a system that gave you so many
+00:06:44.080 --> 00:06:45.834
+having a system that gave you
-00:06:46.319 --> 00:06:48.319
-options to configure your experience
+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.
@@ -547,10 +501,8 @@ exactly how you wanted.
00:06:50.160 --> 00:06:54.479
You had this feeling that
-00:06:54.479 --> 00:06:57.199
+00:06:54.479 --> 00:06:57.599
the people behind Org Mode had thought
-
-00:06:57.199 --> 00:06:57.599
of everything,
00:06:57.599 --> 00:07:00.479
@@ -576,76 +528,76 @@ oh, it's half past one and I need to...
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
+sure that the item that I'm marking as done
-00:07:17.680 --> 00:07:19.199
-is done for the day before and not for
+00:07:17.680 --> 00:07:18.759
+is done for the day before
-00:07:19.199 --> 00:07:21.919
-the current day. You see what I'm talking about.
+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:28.800
-present in Org Mode. At first you're
-
-00:07:28.800 --> 00:07:31.039
-really impressed, because you think,
-
-00:07:31.039 --> 00:07:34.080
-wow, they thought of everything, but then
+00:07:25.280 --> 00:07:27.235
+present in Org Mode.
-00:07:34.080 --> 00:07:35.599
-you realize that it's just a matter of
+00:07:27.235 --> 00:07:31.335
+At first you're really impressed,
+because you think, wow,
-00:07:35.599 --> 00:07:38.080
-experience, just a matter of people
+00:07:31.335 --> 00:07:33.470
+they thought of everything,
-00:07:38.080 --> 00:07:40.800
-contributing code, because the
+00:07:33.470 --> 00:07:36.378
+but then you realize that it's just a
+matter of experience,
-00:07:40.800 --> 00:07:42.400
-development of Org Mode, Emacs, and
+00:07:36.378 --> 00:07:39.712
+just a matter of people
+contributing code,
-00:07:42.400 --> 00:07:43.520
-everything is just
+00:07:39.712 --> 00:07:42.171
+because the development of Org Mode,
+Emacs,
-00:07:43.520 --> 00:07:45.440
-open to the public. You know, it's like
+00:07:42.171 --> 00:07:44.455
+and everything is just
+open to the public.
-00:07:45.440 --> 00:07:46.879
-everything is being done with the garage
+00:07:44.455 --> 00:07:45.440
+You know, it's like
-00:07:46.879 --> 00:07:48.560
-door opened. You can just
+00:07:45.440 --> 00:07:47.685
+everything is being done
+with the garage door opened.
-00:07:48.560 --> 00:07:50.960
-go on Org Mode on Savannah and see
+00:07:47.685 --> 00:07:50.402
+You can just go on Org Mode on Savannah
-00:07:50.960 --> 00:07:54.800
-everything that is being developed.
+00:07:50.402 --> 00:07:54.800
+and see everything that is being
+developed.
-00:07:54.800 --> 00:07:58.639
-For me, the shift that occurred
+00:07:54.800 --> 00:08:01.586
+For me, the shift that occurred in my
+mind was
-00:07:58.639 --> 00:08:02.639
-in my mind was when
+00:08:01.586 --> 00:08:04.139
+when I was reading all the options,
-00:08:02.639 --> 00:08:04.240
-I was reading all the options, I
+00:08:04.139 --> 00:08:05.881
+I was looking at all the variables
-00:08:04.240 --> 00:08:06.240
-was looking at all the variables that i
+00:08:05.881 --> 00:08:08.160
+that I could modify for Org Mode,
-00:08:06.240 --> 00:08:08.160
-could modify for Org Mode,
-
-00:08:08.160 --> 00:08:11.440
-and there came a time, maybe two to three
-
-00:08:11.440 --> 00:08:12.560
-years ago,
+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,
@@ -653,35 +605,36 @@ 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.599
-there is no option for me to do what I
+00:08:17.759 --> 00:08:19.260
+there is no option for me to do
-00:08:19.599 --> 00:08:21.440
-want to be doing with Org Mode.
+00:08:19.260 --> 00:08:21.440
+what I want to be doing with Org Mode.
-00:08:21.440 --> 00:08:24.479
-I believe at the time the the key
+00:08:21.440 --> 00:08:23.668
+I believe at the time,
-00:08:24.479 --> 00:08:29.199
-issue that triggered this reflex for me was
+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:33.599
-I wanted to have a super category so, you
+00:08:31.039 --> 00:08:34.159
+I wanted to have a super category so,
+you know, in the...
-00:08:33.599 --> 00:08:34.159
-know, in the...
+00:08:34.159 --> 00:08:36.606
+for those of you who know,
+in your agenda,
-00:08:34.159 --> 00:08:36.320
-for those of you who know, in your
+00:08:36.606 --> 00:08:38.376
+you have the ability to
+have many files,
-00:08:36.320 --> 00:08:38.000
-agenda, you have the ability to have many
-
-00:08:38.000 --> 00:08:41.200
-files, and you have the ability to have
+00:08:38.376 --> 00:08:41.200
+and you have the ability to have
categories.
00:08:41.200 --> 00:08:47.920
@@ -693,30 +646,24 @@ 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.920
-so that, for instance, I could have one
-
-00:08:53.920 --> 00:08:55.440
-group for my professional life, I could
+00:08:52.560 --> 00:08:53.780
+so that, for instance, I could have
-00:08:55.440 --> 00:08:56.000
-have a group
+00:08:53.780 --> 00:08:55.131
+one group for my professional life,
-00:08:56.000 --> 00:08:59.600
-for one work, the second
-work...
+00:08:55.131 --> 00:08:57.462
+I could have a group for one work,
-00:08:59.600 --> 00:09:00.800
-I could have something for
+00:08:57.462 --> 00:08:59.600
+the second work...
-00:09:00.800 --> 00:09:02.800
-university and all this.
+00:08:59.600 --> 00:09:02.800
+I could have something for university
+and all this.
-00:09:02.800 --> 00:09:06.000
-I thought, yeah,
-
-00:09:06.000 --> 00:09:09.600
-I think I'd like 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
@@ -724,14 +671,15 @@ 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:17.200
-I had some ideas about what was
+00:09:15.519 --> 00:09:16.766
+I had some ideas about
-00:09:17.200 --> 00:09:18.800
-within the realm of possibility and what
+00:09:16.766 --> 00:09:19.292
+what was within the realm of possibility
+and what wasn't.
-00:09:18.800 --> 00:09:21.120
-wasn't. Here I thought to myself,
+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.
@@ -742,11 +690,12 @@ 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.040
-I won't go too much into details right
+00:09:31.360 --> 00:09:33.222
+I won't go too much into details
+right now,
-00:09:33.040 --> 00:09:34.959
-now, because right now, the main objective
+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
@@ -770,46 +719,41 @@ 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:56.399
+00:09:54.080 --> 00:09:57.279
but as soon as you get the logic of the
-
-00:09:56.399 --> 00:09:57.279
language--and
-00:09:57.279 --> 00:09:59.360
-what i'm telling you
-
-00:09:59.360 --> 00:10:00.560
-is coming from someone who's never
+00:09:57.279 --> 00:10:00.136
+what I'm telling you is coming from
+someone
-00:10:00.560 --> 00:10:01.760
-studied programming--
+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:06.079
-Everything is so verbose when you get
+00:10:04.399 --> 00:10:05.534
+Everything is so verbose
-00:10:06.079 --> 00:10:07.279
-into the code.
+00:10:05.534 --> 00:10:07.279
+when you get into the code.
-00:10:07.279 --> 00:10:10.399
+00:10:07.279 --> 00:10:11.065
When you learn the rudiments
+of Elisp,
-00:10:10.399 --> 00:10:13.360
-of Elisp, you start getting to the code,
+00:10:11.065 --> 00:10:13.360
+you start getting to the code,
-00:10:13.360 --> 00:10:14.079
-and you start
+00:10:13.360 --> 00:10:15.229
+and you start thinking, wow,
-00:10:14.079 --> 00:10:17.120
-thinking, wow, okay that makes sense,
+00:10:15.229 --> 00:10:17.120
+okay that makes sense,
-00:10:17.120 --> 00:10:19.519
+00:10:17.120 --> 00:10:21.360
and you start developing a logic
-
-00:10:19.519 --> 00:10:21.360
for all this.
00:10:21.360 --> 00:10:24.720
@@ -819,76 +763,75 @@ So, equipped as I was with this
new knowledge, I went on my project,
00:10:27.760 --> 00:10:30.000
-i went into the Org agenda code,
+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:33.440
+00:10:30.880 --> 00:10:34.640
is there anything that I can use to do
-
-00:10:33.440 --> 00:10:34.640
my bidding?
-00:10:34.640 --> 00:10:38.560
+00:10:34.640 --> 00:10:39.733
Fast forward maybe two to three weeks of
+intense turmoil
-00:10:38.560 --> 00:10:41.600
-intense turmoil and many nights which
-
-00:10:41.600 --> 00:10:46.079
-were spent single-mindedly working on
-this project,
+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.079
-two weeks after, I had something that was
+00:10:46.079 --> 00:10:48.781
+two weeks after, I had something
+that was working,
-00:10:48.079 --> 00:10:51.680
-working, and I was pretty happy about it.
+00:10:48.781 --> 00:10:51.680
+and I was pretty happy about it.
-00:10:51.680 --> 00:10:54.640
-That was a key landmark for
+00:10:51.680 --> 00:10:54.849
+That was a key landmark for me,
-00:10:54.640 --> 00:10:56.800
-me, because when that happened,
+00:10:54.849 --> 00:10:56.800
+because when that happened,
-00:10:56.800 --> 00:11:00.320
-it just felt like, okay, I can contribute
+00:10:56.800 --> 00:10:58.860
+it just felt like, okay,
-00:11:00.320 --> 00:11:02.160
-something to Org Mode, and I can do
+00:10:58.860 --> 00:11:01.335
+I can contribute something to Org Mode,
-00:11:02.160 --> 00:11:07.600
-something that would benefit as many
-people as possible.
+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:09.519
-And to me, that was the click. That's when
+00:11:07.600 --> 00:11:08.970
+And to me, that was the click.
-00:11:09.519 --> 00:11:11.440
-it occurred. That's when I
+00:11:08.970 --> 00:11:10.530
+That's when it occurred.
-00:11:11.440 --> 00:11:14.640
-went on my first project and I did something
+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:20.079
-And nowadays, as I told you, I
+00:11:18.079 --> 00:11:19.945
+And nowadays, as I told you,
-00:11:20.079 --> 00:11:22.640
-maintain packages, but really, nothing
+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
-that I've turned my mind onto other problems.
+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
+Maybe I've got three more minutes,
00:11:32.000 --> 00:11:35.279
and I'd like to finish by
@@ -896,35 +839,30 @@ 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.600
-I've told you my Emacs story and
+00:11:38.399 --> 00:11:39.449
+I've told you my Emacs story
-00:11:39.600 --> 00:11:42.079
-I hope I've stressed how little effort
+00:11:39.449 --> 00:11:42.924
+and I hope I've stressed how little
+effort it took me
-00:11:42.079 --> 00:11:43.600
-it took me to
+00:11:42.924 --> 00:11:46.560
+to move from steps to steps on the
+ladder.
-00:11:43.600 --> 00:11:46.560
-move from steps to steps on the ladder.
-
-00:11:46.560 --> 00:11:48.399
+00:11:46.560 --> 00:11:48.959
The ladder implies a sense of hierarchy,
-
-00:11:48.399 --> 00:11:48.959
but it really isn't.
-00:11:48.959 --> 00:11:52.240
-Whatever your step on the
-
-00:11:52.240 --> 00:11:53.920
-journey of Emacs is...
+00:11:48.959 --> 00:11:53.920
+Whatever your step on the journey of
+Emacs is...
-00:11:53.920 --> 00:11:55.600
-Some of you might be at the
+00:11:53.920 --> 00:11:55.830
+Some of you might be at the step
-00:11:55.600 --> 00:11:57.440
-step where you're really worried
+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
@@ -960,20 +898,20 @@ 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.680
-maybe do try to change something in a
+00:12:19.920 --> 00:12:21.442
+maybe do try to change something
-00:12:21.680 --> 00:12:23.279
-major mode that you're using
+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:29.760
-I think Emacs, Org Mode, and all free
+00:12:26.560 --> 00:12:28.722
+I think Emacs, Org Mode,
-00:12:29.760 --> 00:12:31.040
-software in general
+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
@@ -990,11 +928,12 @@ that you're modifying things
00:12:43.200 --> 00:12:46.320
to do your bidding.
-00:12:46.320 --> 00:12:48.399
-For me, I believe this to be a very
+00:12:46.320 --> 00:12:48.042
+For me, I believe this to be
-00:12:48.399 --> 00:12:50.320
-healthy attitude towards software.
+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,
@@ -1003,19 +942,18 @@ As Amin said in the very beginning,
we are doing this entire presentation--
00:12:57.279 --> 00:13:00.800
-sorry, this entire conference with free software.
+sorry, this entire conference with
+free software.
-00:13:00.800 --> 00:13:02.240
-Just see all the things we've been able
+00:13:00.800 --> 00:13:01.686
+Just see all the things
-00:13:02.240 --> 00:13:03.920
-to do in free software.
+00:13:01.686 --> 00:13:03.920
+we've been able to do in free software.
-00:13:03.920 --> 00:13:07.360
-For me, Emacs
-
-00:13:07.360 --> 00:13:10.399
-was my gateway, so to speak,
+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,
@@ -1023,29 +961,28 @@ 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.560
-What I would like to do... I'll finish
+00:13:18.639 --> 00:13:20.003
+What I would like to do...
-00:13:20.560 --> 00:13:22.000
-on this note and then I'll be taking
+00:13:20.003 --> 00:13:21.375
+I'll finish on this note and then
-00:13:22.000 --> 00:13:23.360
-your questions.
+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:29.360
-You've read on Reddit that you
-
-00:13:29.360 --> 00:13:31.279
-need to go through the Elisp manual
+00:13:26.480 --> 00:13:28.592
+You've read on Reddit
-00:13:31.279 --> 00:13:33.040
-in Emacs. You might be scared,
+00:13:28.592 --> 00:13:31.807
+that you need to go through the Elisp
+manual in Emacs.
-00:13:33.040 --> 00:13:35.920
-but just do it. Just give it a shot.
+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.
@@ -1056,30 +993,33 @@ 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.399
-If you've been interested enough in my
+00:13:43.120 --> 00:13:44.230
+If you've been interested enough
-00:13:44.399 --> 00:13:45.680
-presentation right now, and if you're
+00:13:44.230 --> 00:13:45.241
+in my presentation right now,
-00:13:45.680 --> 00:13:47.199
-interested enough in any of the talks
+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:51.839
-do give it a shot. I'm pretty sure
+00:13:49.519 --> 00:13:50.747
+do give it a shot.
-00:13:51.839 --> 00:13:52.959
-you will like the journey
+00:13:50.747 --> 00:13:52.959
+I'm pretty sure you will like
+the journey
-00:13:52.959 --> 00:13:55.760
-on which you will be embarking upon. So I
+00:13:52.959 --> 00:13:55.418
+on which you will be embarking upon.
-00:13:55.760 --> 00:13:57.120
-believe I'm finishing one minute early,
+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.
@@ -1087,20 +1027,18 @@ 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:06.000
-just be reading the questions, or
+00:14:04.320 --> 00:14:05.847
+just be reading the questions,
-00:14:06.000 --> 00:14:07.120
-do you want to be feeding me the
-
-00:14:07.120 --> 00:14:08.639
+00:14:05.847 --> 00:14:08.639
+or do you want to be feeding me the
questions?
-00:14:08.639 --> 00:14:11.120
-(Amin: It's really up to you. it's
+00:14:08.639 --> 00:14:10.755
+(Amin: It's really up to you.
-00:14:11.120 --> 00:14:12.320
-completely 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
@@ -1109,16 +1047,17 @@ If you've got the questions
open and can take them or read them,
00:14:15.839 --> 00:14:18.320
-by all means please.)
+by all means, please.)
-00:14:18.320 --> 00:14:19.680
-Okay, well, I'm going to read them because
+00:14:18.320 --> 00:14:19.420
+Okay, well, I'm going to read them
-00:14:19.680 --> 00:14:20.880
-I've got them on the side. I'm going
+00:14:19.420 --> 00:14:20.581
+because I've got them on the side.
-00:14:20.880 --> 00:14:22.800
-to start with the one at the bottom.
+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
@@ -1126,22 +1065,25 @@ to start with the one at the bottom.
00:14:24.959 --> 00:14:26.959
contributed to your experience?"
-00:14:26.959 --> 00:14:29.680
-Yeah. I mean, I do believe... There's
+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:29.680 --> 00:14:31.360
-an idea of privilege. I mean, I'm
+00:14:30.771 --> 00:14:33.250
+I mean, I'm French. I live in...
-00:14:31.360 --> 00:14:35.279
-French. I live in... I'm lucky enough to
-be here
+00:14:33.250 --> 00:14:36.959
+I'm lucky enough to be here at
+university, okay,
-00:14:35.279 --> 00:14:39.120
-at university, okay, and I'm fairly
-aware of the
+00:14:36.959 --> 00:14:40.714
+and I'm fairly aware of the
+discrepancies that happen,
-00:14:39.120 --> 00:14:41.600
-discrepancies that happen, even in France,
+00:14:40.714 --> 00:14:41.600
+even in France,
00:14:41.600 --> 00:14:42.880
according to this...
@@ -1152,14 +1094,13 @@ 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:52.639
+00:14:51.199 --> 00:14:53.547
If you would like to specify the
+question, please do,
-00:14:52.639 --> 00:14:54.320
-question, please do, but I don't have
-
-00:14:54.320 --> 00:14:56.560
-really all that much to ask on this.
+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
@@ -1167,53 +1108,51 @@ really all that much to ask on this.
00:14:59.839 --> 00:15:01.279
Elisp language? Any particularly good
-00:15:01.279 --> 00:15:04.160
-resource or any other tips?" I finished
-
-00:15:04.160 --> 00:15:07.760
-um my presentation by telling you about
+00:15:01.279 --> 00:15:03.421
+resource or any other tips?"
-00:15:07.760 --> 00:15:10.560
-the Elisp introduction which is built into
+00:15:03.421 --> 00:15:07.760
+I finished my presentation by telling
+you about
-00:15:10.560 --> 00:15:13.519
-Emacs. What I might do... I'm going to share my
+00:15:07.760 --> 00:15:10.937
+the Elisp introduction which is built
+into Emacs.
-00:15:13.519 --> 00:15:15.120
-screen just to show you
+00:15:10.937 --> 00:15:13.936
+What I might do... I'm going to
+share my screen
-00:15:15.120 --> 00:15:22.880
-how this works. I will be sharing
-this window.
+00:15:13.936 --> 00:15:17.819
+just to show you how this works.
-00:15:22.880 --> 00:15:24.399
-I believe it's frozen on my end, so I
+00:15:17.819 --> 00:15:22.880
+I will be sharing this window.
-00:15:24.399 --> 00:15:27.199
-can't see anything.
+00:15:22.880 --> 00:15:24.234
+I believe it's frozen on my end,
-00:15:27.199 --> 00:15:28.959
-i'm not sure if you can see me or if my
+00:15:24.234 --> 00:15:27.199
+so I can't see anything.
-00:15:28.959 --> 00:15:32.560
-camera is moving.
+00:15:27.199 --> 00:15:28.597
+I'm not sure if you can see me
-00:15:32.560 --> 00:15:34.800
-Okay, so my Firefox is frozen. So i'll
+00:15:28.597 --> 00:15:32.560
+or if my camera is moving.
-00:15:34.800 --> 00:15:36.000
-answer the question, but I won't be able
+00:15:32.560 --> 00:15:34.387
+Okay, so my Firefox is frozen.
-00:15:36.000 --> 00:15:36.800
-to show you
+00:15:34.387 --> 00:15:35.361
+So I'll answer the question,
-00:15:36.800 --> 00:15:40.000
-what I wanted to show you.
+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:42.639
+00:15:40.000 --> 00:15:44.320
There's a built-in guide inside Emacs to
-
-00:15:42.639 --> 00:15:44.320
learn Elisp.
00:15:44.320 --> 00:15:46.880
@@ -1225,11 +1164,9 @@ 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:53.839
-mention this to you in the #emacsconf channel
-
-00:15:53.839 --> 00:15:54.880
-on IRC
+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
@@ -1237,26 +1174,25 @@ 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:01.279
-You know, we tend to get obsessed, with
-
-00:16:01.279 --> 00:16:03.360
-software and with programming, about
+00:15:59.040 --> 00:16:00.991
+You know, we tend to get obsessed,
-00:16:03.360 --> 00:16:04.880
-what's the best way to get started.
+00:16:00.991 --> 00:16:03.013
+with software and with programming,
-00:16:04.880 --> 00:16:06.959
-You see so many people who are
+00:16:03.013 --> 00:16:04.880
+about what's the best way to get
+started.
-00:16:06.959 --> 00:16:08.399
-heavily interested
+00:16:04.880 --> 00:16:08.399
+You see so many people who are heavily
+interested
-00:16:08.399 --> 00:16:10.639
-in getting started with programming but
+00:16:08.399 --> 00:16:10.409
+in getting started with programming
-00:16:10.639 --> 00:16:12.320
-they never managed to get started
+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.
@@ -1267,135 +1203,115 @@ 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:21.839
-Well, if I may still recommend the
-
-00:16:21.839 --> 00:16:23.920
-first step, even after saying this,
-
-00:16:23.920 --> 00:16:26.480
-do try to start with the
-
-00:16:26.480 --> 00:16:28.000
-built-in guides. I believe they're pretty
-
-00:16:28.000 --> 00:16:29.600
-pretty good.
+00:16:18.800 --> 00:16:22.493
+Well, if I may still recommend
+the first step,
-00:16:29.600 --> 00:16:32.079
-There was another question. It's
+00:16:22.493 --> 00:16:23.920
+even after saying this,
-00:16:32.079 --> 00:16:33.199
-the last question that I can read and
+00:16:23.920 --> 00:16:27.073
+do try to start with the built-in
+guides.
-00:16:33.199 --> 00:16:34.800
-after that, you will have to read
+00:16:27.073 --> 00:16:29.600
+I believe they're pretty, pretty good.
-00:16:34.800 --> 00:16:36.000
-the questions for me because everything
+00:16:29.600 --> 00:16:31.691
+There was another question.
-00:16:36.000 --> 00:16:37.920
-is frozen on my end.
+00:16:31.691 --> 00:16:33.055
+It's the last question that I can read
-00:16:37.920 --> 00:16:41.600
-I hope I'm not frozen
+00:16:33.055 --> 00:16:34.564
+and after that, you will have to
-00:16:41.600 --> 00:16:44.240
-in a very bad position so
+00:16:34.564 --> 00:16:37.920
+read the questions for me because
+everything is frozen on my end.
-00:16:44.240 --> 00:16:45.680
-please excuse me if
+00:16:37.920 --> 00:16:43.935
+I hope I'm not frozen in a very bad
+position,
-00:16:45.680 --> 00:16:48.240
-my mouth is open or anything. (Amin: no, we
+00:16:43.935 --> 00:16:47.406
+so please excuse me if my mouth is open
+or anything.
-00:16:48.240 --> 00:16:49.759
-just completely lost the video feed, so
+00:16:47.406 --> 00:16:51.120
+(Amin: no, we just completely lost the
+video feed, so no worries.)
-00:16:49.759 --> 00:16:51.120
-no worries.)
-
-00:16:51.120 --> 00:16:52.720
+00:16:51.120 --> 00:16:54.800
Oh, splendid, so I won't have to make a
-
-00:16:52.720 --> 00:16:54.800
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:58.320
+00:16:56.800 --> 00:16:59.199
"Have you read Dirk Gently's Holistic
-
-00:16:58.320 --> 00:16:59.199
Detective Agency?"
-00:16:59.199 --> 00:17:03.519
-No, I haven't. I hope it's not
-
-00:17:03.519 --> 00:17:05.199
-a jab at the way i'm dressing for the
+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.199 --> 00:17:06.559
-conference, but yeah,
-
-00:17:06.559 --> 00:17:08.559
-I haven't read it. Was there any
-
-00:17:08.559 --> 00:17:10.559
-other question?
+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:17.919
+00:17:15.919 --> 00:17:19.679
"Any recommendation for good packaging
-
-00:17:17.919 --> 00:17:19.679
guides or places to start?
00:17:19.679 --> 00:17:23.199
-i get a bit overwhelmed by some things.
+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:28.240
+00:17:26.799 --> 00:17:29.263
Right. Okay. So that's a very good
+question.
-00:17:28.240 --> 00:17:30.400
-question. I believe
+00:17:29.263 --> 00:17:33.840
+I believe alphapapa is in the chat right
+now.
-00:17:30.400 --> 00:17:33.840
-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:33.840 --> 00:17:35.840
-As myself a new lisp developer for
+00:17:36.314 --> 00:17:38.320
+I'd really recommend you to look into
-00:17:35.840 --> 00:17:38.320
-org-roam, i'd really recommend you to look into
+00:17:38.320 --> 00:17:40.032
+his package developers' guide,
-00:17:38.320 --> 00:17:40.640
-his package developers' guide because you
+00:17:40.032 --> 00:17:42.507
+because you have a list of
+all the softwares
-00:17:40.640 --> 00:17:42.799
-have a list of all the softwares that
-
-00:17:42.799 --> 00:17:44.559
-are extremely useful to be using when
+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.000
-If you're looking into a first
+00:17:45.760 --> 00:17:48.347
+If you're looking into a first step
-00:17:48.000 --> 00:17:50.000
-step for how to develop
+00:17:48.347 --> 00:17:50.947
+for how to develop elisp packages,
-00:17:50.000 --> 00:17:52.640
-elast package, i'd really advise you to
+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.
@@ -1404,111 +1320,108 @@ look into edebug.
It's one word, edebug,
00:17:56.559 --> 00:17:58.400
-and you have a section in the manual for this,
+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:04.320
-getting to develop good packages. It was
+00:18:00.799 --> 00:18:03.791
+getting to develop good packages.
-00:18:04.320 --> 00:18:06.160
-understanding basically what the code did
+00:18:03.791 --> 00:18:06.160
+It was understanding basically
+what the code did
-00:18:06.160 --> 00:18:08.960
-and having us something like a
+00:18:06.160 --> 00:18:08.866
+and having us something like
-00:18:08.960 --> 00:18:09.919
-REPL (read-evaluate-print-loop)
+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.360
-and see exactly which states the
-
-00:18:13.360 --> 00:18:16.000
-variables are at which at this point in the
+00:18:11.760 --> 00:18:13.210
+and see exactly which states
-00:18:16.000 --> 00:18:20.080
-program. That's really my biggest advice
-to you.
+00:18:13.210 --> 00:18:15.643
+the variables are at which at this point
-00:18:21.200 --> 00:18:24.400
-Any other question? Thanks. Yeah, I see one
+00:18:15.643 --> 00:18:20.080
+in the program. That's really my biggest
+advice to you.
-00:18:24.400 --> 00:18:26.160
-or two more.
+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:28.240
+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:28.240 --> 00:18:30.080
-freedom of Emacs help you on
+00:18:33.120 --> 00:18:35.507
+So the freedom of Emacs...
-00:18:30.080 --> 00:18:33.120
-your way?"
+00:18:35.507 --> 00:18:38.080
+I mentioned that Emacs, for me,
+was my gateway
-00:18:33.120 --> 00:18:36.480
-So the freedom of Emacs... I mentioned
+00:18:38.080 --> 00:18:39.216
+into free software
-00:18:36.480 --> 00:18:38.080
-that Emacs, for me, was my gateway
+00:18:39.216 --> 00:18:40.652
+and the freedom of Emacs
-00:18:38.080 --> 00:18:40.320
-into free software and the freedom of
+00:18:40.652 --> 00:18:42.551
+was that you could maybe...
-00:18:40.320 --> 00:18:43.840
-Emacs was that you could maybe... First
-and foremost,
+00:18:42.551 --> 00:18:43.840
+First and foremost,
-00:18:43.840 --> 00:18:47.840
-compared to other software, was that
-you had
+00:18:43.840 --> 00:18:46.385
+compared to other software,
-00:18:47.840 --> 00:18:51.039
-behind Emacs, Elisp, which allows you to
-read the code,
+00:18:46.385 --> 00:18:49.003
+was that you had behind Emacs, Elisp,
-00:18:51.039 --> 00:18:52.400
-read whatever is going on in the
+00:18:49.003 --> 00:18:51.039
+which allows you to read the code,
-00:18:52.400 --> 00:18:53.039
+00:18:51.039 --> 00:18:53.039
+read whatever is going on in the
background.
-00:18:53.039 --> 00:18:54.640
-Surely, if you go deep enough, you'll
+00:18:53.039 --> 00:18:54.380
+Surely, if you go deep enough,
-00:18:54.640 --> 00:18:58.000
-end up in C functions that you might not
-be able to
+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.000 --> 00:18:59.679
-read if you do not have the experience.
+00:18:58.172 --> 00:18:59.679
+if you do not have the experience.
-00:18:59.679 --> 00:19:02.000
+00:18:59.679 --> 00:19:03.520
But for Org Mode, which was my gateway
-
-00:19:02.000 --> 00:19:03.520
into Emacs,
-00:19:03.520 --> 00:19:06.400
-most of it is written in Elisp, and all
+00:19:03.520 --> 00:19:05.883
+most of it is written in Elisp,
-00:19:06.400 --> 00:19:08.240
-the commands have a very verbose
+00:19:05.883 --> 00:19:08.546
+and all the commands have a
+very verbose name,
-00:19:08.240 --> 00:19:10.080
-name, like something simple as
+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:15.840
-org go to a parent subtree. You know, things
-
-00:19:15.840 --> 00:19:16.880
-like this.
+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.
@@ -1516,38 +1429,34 @@ 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.320
-insofar as you can go into the code and
+00:19:22.799 --> 00:19:24.491
+insofar as you can go into
+the code and see,
-00:19:24.320 --> 00:19:26.160
-see, oh, okay, that's how it's implemented.
+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.400
-and the liberty that is given to you to
+00:19:28.640 --> 00:19:30.264
+and the liberty that is given to you
-00:19:30.400 --> 00:19:31.600
-look into the code
+00:19:30.264 --> 00:19:31.600
+to look into the code
-00:19:31.600 --> 00:19:33.039
-is something that invites you to do the
+00:19:31.600 --> 00:19:32.670
+is something that invites you
-00:19:33.039 --> 00:19:34.640
-same with your life. As
+00:19:32.670 --> 00:19:34.460
+to do the same with your life.
-00:19:34.640 --> 00:19:35.200
-someone who
+00:19:34.460 --> 00:19:36.776
+As someone who does a little bit of
+philosophy on the side,
-00:19:35.200 --> 00:19:36.559
-does a little bit of philosophy on the
-
-00:19:36.559 --> 00:19:38.080
-side, I believe it's a very healthy
-
-00:19:38.080 --> 00:19:38.799
-message
+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.
@@ -1579,56 +1488,51 @@ 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:09.440
-If you do have more
-
-00:20:09.440 --> 00:20:11.280
-questions, please do.) I'm just sorry that
-
-00:20:11.280 --> 00:20:12.880
-my video is not working anymore.
+00:20:07.840 --> 00:20:10.225
+If you do have more questions, please
+do.)
-00:20:12.880 --> 00:20:16.000
-(Amin: No problem. Someone was
+00:20:10.225 --> 00:20:12.880
+I'm just sorry that my video is not
+working anymore.
-00:20:16.000 --> 00:20:17.120
-actually saying...
+00:20:12.880 --> 00:20:17.120
+(Amin: No problem. Someone was actually
+saying...
-00:20:17.120 --> 00:20:21.120
-What's the most recent...
+00:20:17.120 --> 00:20:24.159
+What's the most recent... Actually, yeah
+well before that.
-00:20:21.120 --> 00:20:24.159
-Actually, yeah well before that.
-
-00:20:24.159 --> 00:20:25.919
+00:20:24.159 --> 00:20:27.440
"Please show off your three-piece suit
-
-00:20:25.919 --> 00:20:27.440
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.919
-if this is not possible, please post
+00:20:30.080 --> 00:20:31.306
+If this is not possible,
-00:20:31.919 --> 00:20:36.240
-suit selfies in an easily accessible
-location."
+00:20:31.306 --> 00:20:36.240
+please post suit selfies in an easily
+accessible location."
-00:20:36.240 --> 00:20:38.720
-Okay, I'll make sure to do this. But yes, I
+00:20:36.240 --> 00:20:38.143
+Okay, I'll make sure to do this.
-00:20:38.720 --> 00:20:41.200
-wanted to hype things up for the
-conference,
+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:45.919
-I'm very glad you like it. By the way,
-when you get
+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,
@@ -1642,128 +1546,104 @@ colors of Emacs purple
00:20:51.280 --> 00:20:53.679
and also Org Mode green.
-00:20:53.679 --> 00:20:55.760
-It took me a while to find this one, so I
+00:20:53.679 --> 00:20:55.556
+It took me a while to find this one,
-00:20:55.760 --> 00:21:00.840
-hope you will appreciate this.
+00:20:55.556 --> 00:21:00.840
+so I hope you will appreciate this.
-00:21:00.840 --> 00:21:03.679
-(Amin: Awesome. Let's see. We have
+00:21:00.840 --> 00:21:03.094
+(Amin: Awesome. Let's see.
-00:21:03.679 --> 00:21:06.880
-one other question. "What's the
+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:10.159
-you've discovered
-
-00:21:10.159 --> 00:21:14.480
-that you've added to your repertoire?")
+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:20.799
-The thing is,
-
-00:21:20.799 --> 00:21:22.320
-when you've spent as long as I have on
+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.320 --> 00:21:23.919
-Emacs--and I know that I've only spent
+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:28.799
-might have spent maybe 10, 20, maybe even
+00:21:25.120 --> 00:21:27.901
+might have spent maybe 10, 20,
-00:21:28.799 --> 00:21:30.000
-more years on Emacs--
+00:21:27.901 --> 00:21:30.000
+maybe even more years on Emacs--
-00:21:30.000 --> 00:21:32.799
-but for me, I believe the the coolest
+00:21:30.000 --> 00:21:34.926
+but for me, I believe the coolest neat
+trick that I found in Emacs
-00:21:32.799 --> 00:21:35.120
-neat trick that I found in Emacs was
+00:21:34.926 --> 00:21:40.080
+was a mode which is called beacon-mode.
-00:21:35.120 --> 00:21:40.080
-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:40.080 --> 00:21:42.559
-It's something that allows
+00:21:43.679 --> 00:21:45.006
+when you're jumping between buffers
-00:21:42.559 --> 00:21:43.679
-you to show
+00:21:45.006 --> 00:21:46.960
+or when you're dropping between windows,
-00:21:43.679 --> 00:21:45.120
-when you're jumping between buffers or
-
-00:21:45.120 --> 00:21:46.960
-when you're dropping between windows,
-
-00:21:46.960 --> 00:21:49.760
+00:21:46.960 --> 00:21:50.681
it shows exactly where your point is in
+that buffer
-00:21:49.760 --> 00:21:51.520
-that buffer by making
-
-00:21:51.520 --> 00:21:53.840
-a slight ray of light which looks like a
-
-00:21:53.840 --> 00:21:55.440
-beacon, hence the name.
+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:59.520
-because it always shows in a very
-
-00:21:59.520 --> 00:22:01.760
-visual way where your point is.
+00:21:57.760 --> 00:21:58.986
+because it always shows
-00:22:01.760 --> 00:22:03.520
-I'll get a chance to show this to
+00:21:58.986 --> 00:22:01.760
+in a very visual way
+where your point is.
-00:22:03.520 --> 00:22:04.640
-you later today
+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:13.840
-(Amin: Aeesome.
-
-00:22:13.840 --> 00:22:16.880
-We have one question
+when I'll be presenting my other talks.
-00:22:16.880 --> 00:22:20.159
-from Jonas, the maintainer
+00:22:10.159 --> 00:22:20.880
+(Amin: Awesome. We have one question
+from Jonas, the maintainer of Magit.
-00:22:20.159 --> 00:22:20.880
-from Magit.
+00:22:20.880 --> 00:22:25.128
+He asks, "When you touched your webcam,
-00:22:20.880 --> 00:22:24.720
-He asks, "When you touched your
-
-00:22:24.720 --> 00:22:26.880
-webcam, that blew a fuse at my place.
+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.600
-Well, I'm very sorry, Jonas, that it
-
-00:22:31.600 --> 00:22:32.960
-happened to you, but i'll make sure not
+00:22:29.760 --> 00:22:31.242
+Well, I'm very sorry, Jonas,
-00:22:32.960 --> 00:22:36.960
-to touch my webcam again.
+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?)
@@ -1771,42 +1651,33 @@ to touch my webcam again.
00:22:41.600 --> 00:22:43.919
I have to trust you on this one.
-00:22:43.919 --> 00:22:45.840
+00:22:43.919 --> 00:22:46.960
I'm really sorry. Everything is frozen
-
-00:22:45.840 --> 00:22:46.960
on my end.
-00:22:46.960 --> 00:22:48.720
-(Amin: No problem.) Yeah I'm more talking
-to the
+00:22:46.960 --> 00:22:49.940
+(Amin: No problem.) Yeah I'm more
+talking to the audience, I guess.
-00:22:48.720 --> 00:22:49.940
-audience, I guess.
+00:22:51.520 --> 00:22:56.018
+I hope my lack of slides didn't bother
+you.
-00:22:51.520 --> 00:22:55.120
-I hope my lack of
+00:22:56.018 --> 00:23:00.481
+I really wanted to have this verbose
+time with people,
-00:22:55.120 --> 00:22:56.960
-slides didn't bother you. I really
-
-00:22:56.960 --> 00:22:58.159
-wanted to have this
-
-00:22:58.159 --> 00:23:01.039
-verbose time with people, to be
-
-00:23:01.039 --> 00:23:01.600
-able to...
+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
+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
+In France, we do have an Emacs workshop
00:23:11.760 --> 00:23:14.159
that we have on a monthly basis.
@@ -1820,26 +1691,24 @@ 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.480
-would be good. That's why i'm really
+00:23:20.400 --> 00:23:22.713
+would be good. That's why I'm
+really happy,
-00:23:22.480 --> 00:23:24.000
-happy, and I'm really lucky to have had
+00:23:22.713 --> 00:23:24.000
+and I'm really lucky to have had
-00:23:24.000 --> 00:23:25.120
-the chance to
+00:23:24.000 --> 00:23:26.418
+the chance to do this today.
-00:23:25.120 --> 00:23:27.919
-do this today. I hope some of you
+00:23:26.418 --> 00:23:29.200
+I hope some of you, I've convinced you
-00:23:27.919 --> 00:23:29.200
-I've convinced you
+00:23:29.200 --> 00:23:31.472
+of climbing up a step on a ladder
-00:23:29.200 --> 00:23:31.679
-of climbing up a step on a ladder or
-
-00:23:31.679 --> 00:23:34.480
-making a step in a journey.
+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.
@@ -1856,38 +1725,34 @@ 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:51.840
-with the audience. Unfortunately
+00:23:49.200 --> 00:23:50.685
+with the audience.
-00:23:51.840 --> 00:23:53.520
-your webcam cut out, but I mean
+00:23:50.685 --> 00:23:52.923
+Unfortunately, your webcam cut out,
-00:23:53.520 --> 00:23:55.200
-before that.)
+00:23:52.923 --> 00:23:55.200
+but I mean before that.)
-00:23:55.200 --> 00:23:57.279
-Yes, I'll make sure to fix the problems
+00:23:55.200 --> 00:23:57.914
+Yes, I'll make sure to fix
+the problems later on,
-00:23:57.279 --> 00:23:59.679
-later on, so don't worry about it.
+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:03.200
-wrapping up
-
-00:24:03.200 --> 00:24:06.400
-for your talk and getting ready for the
-
-00:24:06.400 --> 00:24:08.000
-next talk.)
+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:10.000
-Sure. Well, thank you so much. I'll see
+00:24:08.000 --> 00:24:09.538
+Sure. Well, thank you so much.
-00:24:10.000 --> 00:24:11.760
-you all later, I suppose!
+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--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
index 773ff31b..b2722c99 100644
--- 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
@@ -3,98 +3,94 @@ WEBVTT
00:00:02.000 --> 00:00:04.799
Hello, everyone, and welcome to the EmacsConf.
-00:00:04.799 --> 00:00:07.200
-I am Jonathan. In this talk, I'm going
+00:00:04.799 --> 00:00:06.631
+I am Jonathan. In this talk,
-00:00:07.200 --> 00:00:09.599
-to demonstrate ways of producing sheet
+00:00:06.631 --> 00:00:10.880
+I'm going to demonstrate ways of
+producing sheet music in Emacs
-00:00:09.599 --> 00:00:10.880
-music in Emacs
+00:00:10.880 --> 00:00:14.636
+using Lilypond, and maybe also
+convince you
-00:00:10.880 --> 00:00:14.320
-using Lilypond, and maybe also convince
+00:00:14.636 --> 00:00:18.640
+to use Emacs for writing your scores.
-00:00:14.320 --> 00:00:18.640
-you 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:18.640 --> 00:00:20.400
-I'll start with an overview of the
-
-00:00:20.400 --> 00:00:22.240
-syntax for those who are new to using
+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.800
-as a shallow dive into the deep pond of
+00:00:24.400 --> 00:00:26.615
+as a shallow dive into the deep pond
-00:00:26.800 --> 00:00:28.800
-lilies and Lilypond,
+00:00:26.615 --> 00:00:28.800
+of lilies and Lilypond,
-00:00:28.800 --> 00:00:30.800
-and move on to showcase some of its
+00:00:28.800 --> 00:00:30.171
+and move on to showcase
-00:00:30.800 --> 00:00:32.960
-functionalities using Org Mode
+00:00:30.171 --> 00:00:34.723
+some of its functionalities
+using Org Mode and lilypond-mode.
-00:00:32.960 --> 00:00:36.320
-and lilypond-mode. One disclaimer,
+00:00:34.723 --> 00:00:37.173
+One disclaimer, however:
-00:00:36.320 --> 00:00:40.480
-however: I am not a Lilypond developer.
+00:00:37.173 --> 00:00:40.480
+I am not a Lilypond developer.
-00:00:40.480 --> 00:00:44.079
-So what is Lilypond? Lilypond is
+00:00:40.480 --> 00:00:42.841
+So what is Lilypond?
-00:00:44.079 --> 00:00:46.800
-a file format and music engraving system
+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.640
-It translates textual representations of
+00:00:50.000 --> 00:00:52.442
+It translates textual representations
-00:00:52.640 --> 00:00:55.120
-music to graphical objects.
+00:00:52.442 --> 00:00:55.120
+of music to graphical objects.
-00:00:55.120 --> 00:00:57.760
-It's similar to LaTeX in that its
+00:00:55.120 --> 00:00:57.520
+It's similar to LaTeX in that
-00:00:57.760 --> 00:01:00.000
-input format describes the visual
+00:00:57.520 --> 00:00:59.329
+its input format describes
-00:01:00.000 --> 00:01:01.600
-layouts of the score,
+00:00:59.329 --> 00:01:01.600
+the visual layouts of the score,
-00:01:01.600 --> 00:01:03.520
+00:01:01.600 --> 00:01:05.119
using commands to define musical
-
-00:01:03.520 --> 00:01:05.119
expressions.
00:01:05.119 --> 00:01:07.760
Commands begin with a backslash.
-00:01:07.760 --> 00:01:08.640
-For example,
-
-00:01:08.640 --> 00:01:10.479
-the formatter command, as shown on the
+00:01:07.760 --> 00:01:10.791
+For example, the formatter command,
+as shown on the left,
-00:01:10.479 --> 00:01:13.040
-left, yields its graphical equivalents on
+00:01:10.791 --> 00:01:13.920
+yields its graphical equivalents
+on the right,
-00:01:13.040 --> 00:01:13.920
-the right,
+00:01:13.920 --> 00:01:16.345
+the fermata symbol over the low B
-00:01:13.920 --> 00:01:16.640
-the fermata symbol over the low B and
-
-00:01:16.640 --> 00:01:19.119
-so on and so forth.
+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,
@@ -105,59 +101,48 @@ allowing users to extend
00:01:23.119 --> 00:01:25.600
and override Lilypond's functionalities
-00:01:25.600 --> 00:01:26.640
-using the Scheme
-
-00:01:26.640 --> 00:01:29.840
-scripting language. It can be used for
+00:01:25.600 --> 00:01:28.452
+using the Scheme scripting language.
-00:01:29.840 --> 00:01:31.600
-early and contemporary music
+00:01:28.452 --> 00:01:32.422
+It can be used for early and
+contemporary music tablature,
-00:01:31.600 --> 00:01:34.479
-tablature, vocal music lead sheets,
-
-00:01:34.479 --> 00:01:35.200
-and so on.
+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:38.479
-In fact,
-
-00:01:38.479 --> 00:01:41.040
-Lilypond ships with Emacs Lisp libraries,
+00:01:38.000 --> 00:01:41.040
+In fact, Lilypond ships with
+Emacs Lisp libraries,
-00:01:41.040 --> 00:01:43.119
+00:01:41.040 --> 00:01:47.360
including a major mode for editing
-
-00:01:43.119 --> 00:01:47.360
Lilypond files.
-00:01:47.360 --> 00:01:50.000
-So the input files are similar to
-
-00:01:50.000 --> 00:01:50.560
-source files.
+00:01:47.360 --> 00:01:50.560
+So the input files are similar to source
+files.
-00:01:50.560 --> 00:01:52.560
+00:01:50.560 --> 00:01:54.079
They contain expressions formed with
-
-00:01:52.560 --> 00:01:54.079
curly braces,
-00:01:54.079 --> 00:01:55.840
-comments that start with the percent
+00:01:54.079 --> 00:01:56.549
+comments that start with
+the percent sign,
-00:01:55.840 --> 00:02:00.240
-sign, and the code is indented.
+00:01:56.549 --> 00:02:00.240
+and the code is indented.
-00:02:00.240 --> 00:02:02.159
+00:02:00.240 --> 00:02:02.903
Notes are entered using lowercase
+letters,
-00:02:02.159 --> 00:02:05.600
-letters, and rests with the letter r.
+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
@@ -168,22 +153,20 @@ is the equivalence of a crotchet or
00:02:11.039 --> 00:02:14.000
quarter note rest.
-00:02:14.000 --> 00:02:16.160
-Durations are entered using numbers and
+00:02:14.000 --> 00:02:15.938
+Durations are entered using numbers
-00:02:16.160 --> 00:02:18.480
-dots after the note name.
+00:02:15.938 --> 00:02:18.480
+and dots after the note name.
-00:02:18.480 --> 00:02:20.959
-If you do not specify one, the previous
+00:02:18.480 --> 00:02:20.196
+If you do not specify one,
-00:02:20.959 --> 00:02:22.640
-duration is used.
+00:02:20.196 --> 00:02:22.640
+the previous duration is used.
-00:02:22.640 --> 00:02:24.560
+00:02:22.640 --> 00:02:27.360
You can also tie notes together using
-
-00:02:24.560 --> 00:02:27.360
the tilde symbol (~).
00:02:27.360 --> 00:02:30.000
@@ -192,32 +175,30 @@ 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:33.920
+00:02:32.080 --> 00:02:36.160
I encourage you to read the manual for
-
-00:02:33.920 --> 00:02:36.160
more information.
00:02:36.160 --> 00:02:39.680
Now let's switch to a terminal window.
-00:02:39.680 --> 00:02:42.000
-With Lilypond installed, let's create
-
-00:02:42.000 --> 00:02:43.840
-a test file with the extension
+00:02:39.680 --> 00:02:41.247
+With Lilypond installed,
-00:02:43.840 --> 00:02:50.560
-.ly and open it in Emacs.
+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:52.400
-At the top of the file is the version
+00:02:50.560 --> 00:02:53.048
+At the top of the file is
+the version statement,
-00:02:52.400 --> 00:02:54.800
-statement, which tells Lilypond which
+00:02:53.048 --> 00:02:54.395
+which tells Lilypond
-00:02:54.800 --> 00:02:57.440
-version to use when compiling the file.
+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.
@@ -228,14 +209,15 @@ 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.400
-I'm going to close this now and
+00:03:09.280 --> 00:03:12.098
+I'm going to close this now
-00:03:12.400 --> 00:03:14.560
-compile the file by running
+00:03:12.098 --> 00:03:13.765
+and compile the file
-00:03:14.560 --> 00:03:19.760
-lilypond followed by the file name.
+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.
@@ -246,26 +228,22 @@ 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:34.080
-The idea is to create new reading
+00:03:32.239 --> 00:03:33.410
+The idea is to create
-00:03:34.080 --> 00:03:36.239
-materials each time the code blocks are
-
-00:03:36.239 --> 00:03:37.760
-evaluated.
+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:41.840
-I've added the title
-
-00:03:41.840 --> 00:03:45.200
-and composer. Then we add the note
+00:03:40.640 --> 00:03:43.541
+I've added the title and composer.
-00:03:45.200 --> 00:03:47.920
-sequences to use in the composition.
+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
@@ -288,28 +266,22 @@ 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.799
-So whatever the function returns is
+00:04:08.799 --> 00:04:10.684
+So whatever the function returns
-00:04:10.799 --> 00:04:13.680
-expanded inside the drums block.
+00:04:10.684 --> 00:04:13.680
+is expanded inside the drums block.
-00:04:13.680 --> 00:04:16.479
-Now let's press C-c C-c to view
+00:04:13.680 --> 00:04:20.079
+Now let's press C-c C-c to view the
+results.
-00:04:16.479 --> 00:04:20.079
-the results.
-
-00:04:20.079 --> 00:04:23.280
+00:04:20.079 --> 00:04:26.840
Okay. And if I run this again, it should
-
-00:04:23.280 --> 00:04:26.840
create a new composition.
-00:04:26.840 --> 00:04:29.680
+00:04:26.840 --> 00:04:31.360
Great. You can also audition a piece
-
-00:04:29.680 --> 00:04:31.360
using the midi command,
00:04:31.360 --> 00:04:34.320
@@ -324,74 +296,64 @@ sorry, the ob-lilypond library comes
00:04:39.040 --> 00:04:40.400
with two modes.
-00:04:40.400 --> 00:04:42.560
+00:04:40.400 --> 00:04:43.440
The one I'm using now is called
-
-00:04:42.560 --> 00:04:43.440
arrange mode
-00:04:43.440 --> 00:04:45.440
+00:04:43.440 --> 00:04:47.120
and is useful for assembling
-
-00:04:45.440 --> 00:04:47.120
complete scores.
-00:04:47.120 --> 00:04:49.360
-The basic mode on the other hand allows
+00:04:47.120 --> 00:04:49.015
+The basic mode, on the other hand,
-00:04:49.360 --> 00:04:51.199
-you to mix text and music
+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:04:55.440
+00:04:53.360 --> 00:05:00.240
export them using typical Org Mode
-
-00:04:55.440 --> 00:05:00.240
commands.
-00:05:00.240 --> 00:05:02.320
+00:05:00.240 --> 00:05:02.661
Now to demonstrate the basic mode in
+action.
-00:05:02.320 --> 00:05:04.320
-action. I'm going to export this document
+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:08.240
-In this case, the
-
-00:05:08.240 --> 00:05:10.639
-:file header argument is required, so you
+00:05:05.120 --> 00:05:10.077
+In this case, the :file header argument
+is required,
-00:05:10.639 --> 00:05:11.919
-have to provide one
+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:17.919
-Again, you can run the code and view
+00:05:15.600 --> 00:05:22.160
+Again, you can run the code and view the
+results.
-00:05:17.919 --> 00:05:22.160
-the results.
-
-00:05:22.160 --> 00:05:25.840
-Here it is. So now let's
-
-00:05:25.840 --> 00:05:33.680
-export this to a PDF file.
+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.440
-Now I'm going to show you the workflow I
+00:05:39.680 --> 00:05:41.716
+Now I'm going to show you
+the workflow I used
-00:05:41.440 --> 00:05:44.000
-used to produce music books in Emacs,
+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
@@ -399,11 +361,12 @@ combining Lilypond and LaTeX for a
00:05:46.160 --> 00:05:48.000
perfect marriage.
-00:05:48.000 --> 00:05:50.160
-I begin by sketching the first draft of the
+00:05:48.000 --> 00:05:49.858
+I begin by sketching the first draft
-00:05:50.160 --> 00:05:53.039
-manuscript using pencil and paper.
+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
@@ -411,32 +374,28 @@ 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:06:00.080
-This is a typical source file. It begins
+00:05:57.440 --> 00:05:59.486
+This is a typical source file.
-00:06:00.080 --> 00:06:01.360
-with a stylesheet
+00:05:59.486 --> 00:06:01.360
+It begins with a stylesheet
-00:06:01.360 --> 00:06:03.199
-where I set variables and layout
+00:06:01.360 --> 00:06:03.690
+where I set variables and layout settings,
-00:06:03.199 --> 00:06:05.440
-settings, although in general, there's no
+00:06:03.690 --> 00:06:04.875
+although in general,
-00:06:05.440 --> 00:06:07.039
-need for tweaking the layout
+00:06:04.875 --> 00:06:07.039
+there's no need for tweaking the layout
-00:06:07.039 --> 00:06:09.280
+00:06:07.039 --> 00:06:11.199
unless you have specific requirements to
-
-00:06:09.280 --> 00:06:11.199
do so.
-00:06:11.199 --> 00:06:13.360
-The easiest way to compile the file from
-
-00:06:13.360 --> 00:06:15.520
-Emacs is by pressing C-c C-l,
+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,
@@ -447,20 +406,19 @@ 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:26.000
-Now to automate the process of compiling
+00:06:23.759 --> 00:06:25.439
+Now to automate the process of
-00:06:26.000 --> 00:06:28.560
-several files and building the PDF,
+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:32.560
-open the shell
-
-00:06:32.560 --> 00:06:36.000
-and run the make command. Don't worry,
+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
@@ -468,11 +426,11 @@ 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.600
-As I moved forward with the project, I
+00:06:41.600 --> 00:06:43.494
+As I moved forward with the project,
-00:06:43.600 --> 00:06:46.000
-found at least two things missing.
+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,
@@ -480,29 +438,30 @@ 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.960
-so I built one for casual use and made
+00:06:50.479 --> 00:06:52.437
+so I built one for casual use
-00:06:52.960 --> 00:06:55.919
-it available in the MELPA repository.
+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.
+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:03.199
+00:07:00.880 --> 00:07:04.479
between input and output files without
-
-00:07:03.199 --> 00:07:04.479
getting lost.
-00:07:04.479 --> 00:07:06.720
+00:07:04.479 --> 00:07:07.290
So I wrote a command for toggling bar
+numbers,
-00:07:06.720 --> 00:07:10.000
-numbers, which I hope you can see on the left.
+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
@@ -510,26 +469,28 @@ 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:17.039
-accents and tuplets, for example--so I use
+00:07:14.160 --> 00:07:16.490
+accents and tuplets, for example--
-00:07:17.039 --> 00:07:20.160
-template expansion extensively for this purpose,
+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:25.680
-So what do I think? Well, I think
+00:07:23.440 --> 00:07:24.797
+So what do I think?
-00:07:25.680 --> 00:07:28.080
-Lilypond can be a sharp paradigm shift
+00:07:24.797 --> 00:07:28.080
+Well, I think Lilypond can be a sharp
+paradigm shift
-00:07:28.080 --> 00:07:31.039
-for people used to GUI alternatives, but
+00:07:28.080 --> 00:07:30.817
+for people used to GUI alternatives,
-00:07:31.039 --> 00:07:32.720
-the results are impressive.
+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
@@ -537,29 +498,27 @@ 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:38.880
+00:07:36.960 --> 00:07:39.635
Likewise, the ability to extend the
+software,
+I think,
-00:07:38.880 --> 00:07:40.720
-software, I think, is especially appealing
+00:07:39.635 --> 00:07:42.400
+is especially appealing for music
+professionals,
-00:07:40.720 --> 00:07:42.400
-for music professionals,
-
-00:07:42.400 --> 00:07:45.199
+00:07:42.400 --> 00:07:46.560
enthusiasts, composers, and the academic
-
-00:07:45.199 --> 00:07:46.560
community:
00:07:46.560 --> 00:07:48.400
for example, allowing users to create
-00:07:48.400 --> 00:07:50.800
-alternative notation systems required in
+00:07:48.400 --> 00:07:50.187
+alternative notation systems
-00:07:50.800 --> 00:07:53.120
-non-Western music traditions
+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.
@@ -573,35 +532,28 @@ extensive and well-written manuals
00:08:00.720 --> 00:08:04.639
and active communities of users.
-00:08:04.639 --> 00:08:06.400
-But if you're still not sure where to
+00:08:04.639 --> 00:08:05.971
+But if you're still not sure
-00:08:06.400 --> 00:08:09.599
-start and when to wedge your feet in the deep
+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:09.599 --> 00:08:12.160
-but warm pond of lilies, Lilypond, and
+00:08:10.475 --> 00:08:13.680
+of lilies, Lilypond, and Lilypond users,
-00:08:12.160 --> 00:08:13.680
-Lilypond users,
-
-00:08:13.680 --> 00:08:15.680
+00:08:13.680 --> 00:08:16.960
I invite you to contribute to my
-
-00:08:15.680 --> 00:08:16.960
Lilypond projects,
-00:08:16.960 --> 00:08:18.800
+00:08:16.960 --> 00:08:20.720
which you can do so from the links on
-
-00:08:18.800 --> 00:08:20.720
the screen.
-00:08:20.720 --> 00:08:22.800
-So, thank you all. I look forward to your
-
-00:08:22.800 --> 00:08:24.639
-comments, and I hope you enjoy the rest
+00:08:20.720 --> 00:08:23.271
+So, thank you all. I look forward to
+your comments,
-00:08:24.639 --> 00:08:27.840
-of the conference.
+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
index debfa46c..24e598d5 100644
--- 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
@@ -3,98 +3,79 @@ WEBVTT
00:00:01.360 --> 00:00:04.480
Hello, my name is Grant Shangreaux.
-00:00:04.480 --> 00:00:07.279
+00:00:04.480 --> 00:00:09.519
This is my talk titled Bard Bivou(m)acs:
+Publishing Music with Emacs.
-00:00:07.279 --> 00:00:07.919
-Publishing Music
+00:00:09.519 --> 00:00:14.400
+I'm a software developer with Unabridged
+Software in Lincoln, Nebraska.
-00:00:07.919 --> 00:00:10.719
-with Emacs. I'm a software
-
-00:00:10.719 --> 00:00:12.799
-developer with Unabridged Software in
-
-00:00:12.799 --> 00:00:14.400
-Lincoln, Nebraska.
-
-00:00:14.400 --> 00:00:16.800
+00:00:14.400 --> 00:00:18.720
Long time Emacs user, relatively new
-
-00:00:16.800 --> 00:00:18.720
Emacs hacker.
-00:00:18.720 --> 00:00:20.480
-Hopefully, I'll be able to show
+00:00:18.720 --> 00:00:22.487
+Hopefully, I'll be able to show you
+my workflow,
-00:00:20.480 --> 00:00:22.960
-you my workflow, with
+00:00:22.487 --> 00:00:30.480
+with how I publish music with Emacs.
-00:00:22.960 --> 00:00:30.480
-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:30.480 --> 00:00:33.440
-All right. So as a musician, I would like
+00:00:35.520 --> 00:00:39.040
+I could publish with popular online
+music services,
-00:00:33.440 --> 00:00:35.520
-to publish my music online.
+00:00:39.040 --> 00:00:41.061
+but I'm more of a DIY-type,
-00:00:35.520 --> 00:00:37.200
-I could publish with popular
-
-00:00:37.200 --> 00:00:39.040
-online music services,
-
-00:00:39.040 --> 00:00:42.000
-but I'm more of a DIY-type, so I chose to
-
-00:00:42.000 --> 00:00:44.719
-go ahead and publish with Emacs.
+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:49.760
+00:00:48.160 --> 00:00:51.600
A lot of it comes down to some
-
-00:00:49.760 --> 00:00:51.600
fundamental freedoms
-00:00:51.600 --> 00:00:54.960
+00:00:51.600 --> 00:00:57.178
that Emacs and GNU software
+represent to me,
-00:00:54.960 --> 00:00:59.120
-represent to me, as well as my
-
-00:00:59.120 --> 00:01:01.840
-ideas on culture and my background.
+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:06.080
-It's a form of knowledge,
+I don't believe that music is
+a consumer good.
-00:01:06.080 --> 00:01:08.320
-like an algorithm.
+00:01:04.080 --> 00:01:08.320
+It's a form of knowledge, like an
+algorithm.
-00:01:08.320 --> 00:01:10.479
-And it's just such a part of
+00:01:08.320 --> 00:01:11.036
+And it's just such a part of culture,
-00:01:10.479 --> 00:01:13.119
-culture, like in tribal cultures, music
+00:01:11.036 --> 00:01:12.780
+like in tribal cultures,
-00:01:13.119 --> 00:01:16.640
-was seen as a gift from the cosmos or
+00:01:12.780 --> 00:01:17.405
+music was seen as a gift from the cosmos
+or the gods.
-00:01:16.640 --> 00:01:18.000
-the gods. It was
+00:01:17.405 --> 00:01:20.288
+It was a gift maybe through an
+individual vessel,
-00:01:18.000 --> 00:01:19.920
-a gift maybe through an individual
-
-00:01:19.920 --> 00:01:21.920
-vessel, but was shared with the people
+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,
@@ -108,11 +89,12 @@ 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:34.640
-freely enjoyed by everyone. Of course,
+00:01:31.520 --> 00:01:33.818
+freely enjoyed by everyone.
-00:01:34.640 --> 00:01:36.560
-artists should be compensated as well,
+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.
@@ -120,41 +102,43 @@ 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:42.720
+00:01:41.040 --> 00:01:43.520
I want to do it without impacting
-
-00:01:42.720 --> 00:01:43.520
anyone's freedom.
-00:01:43.520 --> 00:01:45.680
-Using GNU software like Emacs is a
+00:01:43.520 --> 00:01:45.425
+Using GNU software like Emacs
-00:01:45.680 --> 00:01:49.200
-good way that I can ensure that
+00:01:45.425 --> 00:01:49.200
+is a good way that I can ensure that
-00:01:49.200 --> 00:01:52.840
-I won't be requiring people to
+00:01:49.200 --> 00:01:52.597
+I won't be requiring people
-00:01:52.840 --> 00:01:55.840
-sign away their freedoms for anything.
+00:01:52.597 --> 00:01:55.840
+to sign away their freedoms for
+anything.
-00:01:55.840 --> 00:01:57.119
-There's a lot more I could say about
+00:01:55.840 --> 00:01:57.367
+There's a lot more I could say
+about this
-00:01:57.119 --> 00:01:58.799
-this but I don't have time.
+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.
+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.239
+00:02:06.479 --> 00:02:08.775
personally, is that Emacs is super
+magical.
-00:02:08.239 --> 00:02:10.720
-magical. It's an all-in-one solution.
+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
@@ -162,25 +146,22 @@ 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.800
-I can do file management. I can author
+00:02:14.480 --> 00:02:16.067
+I can do file management.
-00:02:16.800 --> 00:02:18.879
-HTML, all the web stuff I need even,
+00:02:16.067 --> 00:02:20.239
+I can author HTML, all the web stuff
+I need even, literate-style.
-00:02:18.879 --> 00:02:20.239
-literate-style.
+00:02:20.239 --> 00:02:22.171
+I can handle media and metadata.
-00:02:20.239 --> 00:02:22.640
-I can handle media and metadata. I've got
+00:02:22.171 --> 00:02:24.640
+I've got version control, remote server
+access...
-00:02:22.640 --> 00:02:24.640
-version control, remote server access...
-
-00:02:24.640 --> 00:02:26.800
+00:02:24.640 --> 00:02:28.080
All the tools I need are right under my
-
-00:02:26.800 --> 00:02:28.080
fingertips with this tool
00:02:28.080 --> 00:02:30.000
@@ -204,23 +185,22 @@ 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:45.120
-a couple of things. I needed to be able
+00:02:43.440 --> 00:02:44.258
+a couple of things.
-00:02:45.120 --> 00:02:46.480
-to audition and label
+00:02:44.258 --> 00:02:47.564
+I needed to be able to audition and
+label unlabeled audio tracks.
-00:02:46.480 --> 00:02:48.319
-unlabeled audio tracks. I have a lot of
+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:48.319 --> 00:02:50.000
-files that I don't know where they
+00:02:50.320 --> 00:02:51.213
+I don't know what they are.
-00:02:50.000 --> 00:02:51.280
-came from. I don't know what they are. I
-
-00:02:51.280 --> 00:02:53.840
-need to be able to listen to them,
+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
@@ -240,20 +220,19 @@ 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:11.920
-for people to consume. I found out that
-
-00:03:11.920 --> 00:03:14.879
-Emacs scores a hundred percent on all of
+00:03:08.319 --> 00:03:10.442
+for people to consume.
-00:03:14.879 --> 00:03:18.000
-these requirements that I had for this, and
+00:03:10.442 --> 00:03:14.879
+I found out that Emacs scores a hundred
+percent on all of
-00:03:18.000 --> 00:03:20.720
-a lot of that came from EMMS, the Emacs
+00:03:14.879 --> 00:03:17.709
+these requirements that I had for this,
-00:03:20.720 --> 00:03:22.640
-multimedia system.
+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.
@@ -261,17 +240,18 @@ 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:30.000
-It's a little bit unintuitive, but
+00:03:27.760 --> 00:03:29.736
+It's a little bit unintuitive,
-00:03:30.000 --> 00:03:34.000
-once you get into it, you know it works.
+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.640
-Basically, what EMMS gave me was the
+00:03:34.000 --> 00:03:36.420
+Basically, what EMMS gave me was
-00:03:36.640 --> 00:03:38.720
-ability to listen to the tracks,
+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.
@@ -297,17 +277,14 @@ 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.319
-I've got this. These files here. So
+00:03:59.680 --> 00:04:02.092
+I've got this. These files here.
-00:04:02.319 --> 00:04:04.480
-you can see these files are mp3s.
+00:04:02.092 --> 00:04:04.480
+So you can see these files are mp3s.
-00:04:04.480 --> 00:04:06.080
-They're recorded on a
-
-00:04:06.080 --> 00:04:07.599
-digital recorder.
+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
@@ -318,35 +295,28 @@ 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:16.160
-and I can do EMMS
-
-00:04:16.160 --> 00:04:20.000
-add to .., and now they've been loaded
-
-00:04:20.000 --> 00:04:27.040
-into a playlist.
-
-00:04:27.040 --> 00:04:29.040
-So you can see the playlist here. There's
+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:29.040 --> 00:04:30.400
-some leftover files.
+00:04:27.040 --> 00:04:28.698
+So you can see the playlist here.
-00:04:30.400 --> 00:04:32.000
-So I've got these three files in my
+00:04:28.698 --> 00:04:30.400
+There's some leftover files.
-00:04:32.000 --> 00:04:33.759
-playlist, and as you can see, it's just
+00:04:30.400 --> 00:04:31.771
+So I've got these three files
-00:04:33.759 --> 00:04:34.639
-the file name,
+00:04:31.771 --> 00:04:33.361
+in my playlist, and as you can see,
-00:04:34.639 --> 00:04:36.800
-the path. I don't have any metadata
+00:04:33.361 --> 00:04:35.194
+it's just the file name, the path.
-00:04:36.800 --> 00:04:38.560
-associated with them.
+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,
@@ -360,37 +330,30 @@ 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.520
-I could edit them one at a time, but that's
+00:04:49.840 --> 00:04:51.129
+I could edit them one at a time,
-00:04:51.520 --> 00:04:53.919
-not really great. I want superpower
+00:04:51.129 --> 00:05:03.101
+but that's not really great. I want
+superpower metadata authoring.
-00:04:53.919 --> 00:05:04.479
-metadata authoring. So,
+00:05:03.101 --> 00:05:07.159
+So, by marking them, I can then hit E,
-00:05:04.479 --> 00:05:07.680
-by marking them, I can then hit E, and I
+00:05:07.159 --> 00:05:12.639
+and I have all three of the tracks
+loaded up in this tags buffer.
-00:05:07.680 --> 00:05:10.479
-have all three of the tracks loaded up in
+00:05:12.639 --> 00:05:16.912
+On top of that, I can do EMMS tag
+editor,
-00:05:10.479 --> 00:05:12.639
-this tags buffer.
+00:05:16.912 --> 00:05:22.840
+set all, C-c C-r, and I want to
+set the artist.
-00:05:12.639 --> 00:05:15.759
-On top of that, I can do EMMS
-
-00:05:15.759 --> 00:05:18.800
-tag editor, set all, C-c C-r,
-
-00:05:18.800 --> 00:05:22.840
-and I want to set the artist.
-
-00:05:22.840 --> 00:05:25.680
+00:05:22.840 --> 00:05:26.320
so these are some recordings of my
-
-00:05:25.680 --> 00:05:26.320
family.
00:05:26.320 --> 00:05:31.039
@@ -405,53 +368,45 @@ 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:48.960
+00:05:45.520 --> 00:05:53.759
And then I'm going to go ahead and put
-
-00:05:48.960 --> 00:05:53.759
these in manually,
-00:05:53.759 --> 00:05:55.840
-but with the power of Emacs keyboard
-
-00:05:55.840 --> 00:05:57.039
-macros and
+00:05:53.759 --> 00:05:56.759
+but with the power of Emacs
+keyboard macros
-00:05:57.039 --> 00:05:59.600
-registers and so on. I could do this
+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:04.000
-which would make it a lot easier if I
+00:06:02.319 --> 00:06:03.818
+which would make it a lot easier
-00:06:04.000 --> 00:06:06.000
-had much more than three files to
-
-00:06:06.000 --> 00:06:07.440
+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.520
-and now we've got the playlist. You can
-
-00:06:11.520 --> 00:06:13.120
-see the artist and track number have
+00:06:09.919 --> 00:06:11.232
+and now we've got the playlist.
-00:06:13.120 --> 00:06:15.039
-been updated here.
+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:19.039
-if you look at this, you can see that the
+00:06:17.360 --> 00:06:18.875
+if you look at this, you can see that
-00:06:19.039 --> 00:06:20.479
-file name is still the same.
+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,
@@ -468,29 +423,27 @@ 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.400
-filename reflect the track number and the
+00:06:30.319 --> 00:06:32.044
+filename reflect the track number
-00:06:32.400 --> 00:06:34.800
-artist and so on. So there's another
+00:06:32.044 --> 00:06:33.609
+and the artist and so on.
-00:06:34.800 --> 00:06:41.199
-command, EMMS
+00:06:33.609 --> 00:06:40.250
+So there's another command,
-00:06:41.199 --> 00:06:44.160
-rename tag editor, rename, so it could be
+00:06:40.250 --> 00:06:42.970
+EMMS rename tag editor, rename,
-00:06:44.160 --> 00:06:45.120
-just capital R.
+00:06:42.970 --> 00:06:45.120
+so it could be just capital R.
-00:06:45.120 --> 00:06:47.199
-I think I need to mark all of these, hit
+00:06:45.120 --> 00:06:46.991
+I think I need to mark all of these,
-00:06:47.199 --> 00:06:48.880
-capital R, and then it's going to ask me
-
-00:06:48.880 --> 00:06:50.000
-to confirm
+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.
@@ -504,86 +457,78 @@ 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:09.840
-track number and
-
-00:07:09.840 --> 00:07:11.120
-track name.
+00:07:06.319 --> 00:07:11.120
+track number and track name.
-00:07:11.120 --> 00:07:14.639
-This format is a format string, so
+00:07:11.120 --> 00:07:14.432
+This format is a format string,
-00:07:14.639 --> 00:07:17.360
-it's customizable of course.
+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.160
+00:07:21.039 --> 00:07:24.948
So that's pretty great, this workflow
+just with EMMS.
-00:07:24.160 --> 00:07:26.000
-just with EMMS. I didn't have to do
-
-00:07:26.000 --> 00:07:28.080
-anything. This is all there. It's all
-
-00:07:28.080 --> 00:07:30.960
-built in. It gave me exactly what
+00:07:24.948 --> 00:07:27.585
+I didn't have to do anything. This is
+all there.
-00:07:30.960 --> 00:07:32.639
-I was looking for in terms of being able
+00:07:27.585 --> 00:07:31.673
+It's all built in. It gave me exactly
+what I was looking for
-00:07:32.639 --> 00:07:35.599
-to process a lot of raw audio files
+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:37.599
-add metadata to them and get them ready
-
-00:07:37.599 --> 00:07:39.280
+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:43.520
-in any media player. It'll be
-
-00:07:43.520 --> 00:07:46.560
-useful. Not just for the web page that I'm
+00:07:41.599 --> 00:07:44.026
+in any media player. It'll be useful.
-00:07:46.560 --> 00:07:48.479
-building. So the
+00:07:44.026 --> 00:07:47.639
+Not just for the web page that I'm
+building.
-00:07:48.479 --> 00:07:50.560
-final part, of course, is to build the
+00:07:47.639 --> 00:07:51.440
+So the final part, of course, is to
+build the web page.
-00:07:50.560 --> 00:07:54.960
-web page. Emacs makes authoring HTML trivial.
+00:07:51.440 --> 00:07:54.960
+Emacs makes authoring HTML trivial.
-00:07:54.960 --> 00:07:57.440
-As I was going through this, I
+00:07:54.960 --> 00:07:57.357
+As I was going through this,
-00:07:57.440 --> 00:07:59.039
-wanted to challenge myself and just be,
+00:07:57.357 --> 00:07:59.701
+I wanted to challenge myself and just
+be, like,
-00:07:59.039 --> 00:08:00.400
-like, can I do this
+00:07:59.701 --> 00:08:03.520
+can I do this just all with Emacs?
+Can I just make this?
-00:08:00.400 --> 00:08:03.520
-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:03.520 --> 00:08:05.440
-I don't need a... I don't need Ruby. I don't
+00:08:05.134 --> 00:08:06.707
+I don't need Rails. I don't need Node.
-00:08:05.440 --> 00:08:07.039
-need Rails. I don't need Node. I don't
+00:08:06.707 --> 00:08:08.528
+I don't need any of this other stuff.
-00:08:07.039 --> 00:08:08.960
-need any of this other stuff. I have my
-
-00:08:08.960 --> 00:08:10.560
-tool right here. It's a fully...
+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,
@@ -591,83 +536,78 @@ 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.360
-So the first thing I started with was
+00:08:15.039 --> 00:08:17.171
+So the first thing I started with
-00:08:17.360 --> 00:08:19.919
-buffer scripting for manipulating text.
+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.319
-Basically, anything you can do in a
-
-00:08:24.319 --> 00:08:25.280
-buffer, you can do
+00:08:22.560 --> 00:08:24.692
+Basically, anything you can do in
+a buffer,
-00:08:25.280 --> 00:08:28.479
-programmatically with Elisp. So this
+00:08:24.692 --> 00:08:27.834
+you can do programmatically with Elisp.
-00:08:28.479 --> 00:08:30.319
-might be a good example for beginners. If
+00:08:27.834 --> 00:08:30.217
+So this might be a good example for
+beginners.
-00:08:30.319 --> 00:08:33.919
-you haven't done any Elisp yet,
+00:08:30.217 --> 00:08:33.919
+If you haven't done any Elisp yet,
-00:08:33.919 --> 00:08:36.000
-a simple example is to create this
+00:08:33.919 --> 00:08:39.557
+a simple example is to create this div
+output here.
-00:08:36.000 --> 00:08:36.959
-this div
+00:08:39.557 --> 00:08:41.581
+You can use this with-temp-buffer,
-00:08:36.959 --> 00:08:40.000
-output here. You
+00:08:41.581 --> 00:08:44.240
+so basically creating an imaginary
+buffer.
-00:08:40.000 --> 00:08:41.760
-can use this with-temp-buffer, so
+00:08:44.240 --> 00:08:45.945
+insert is just like typing,
-00:08:41.760 --> 00:08:44.240
-basically creating an imaginary buffer.
-
-00:08:44.240 --> 00:08:46.640
-insert is just like typing, so you put
-
-00:08:46.640 --> 00:08:48.800
-strings in, you put new lines in,
+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:52.080
-Here you can see
-
-00:08:52.080 --> 00:08:54.000
-I'm doing a random number, so every time
-
-00:08:54.000 --> 00:08:55.360
-I execute this,
+00:08:50.959 --> 00:08:53.551
+Here you can see I'm doing a random
+number,
-00:08:55.360 --> 00:08:57.920
-my content changes. I can generate
+00:08:53.551 --> 00:08:55.360
+so every time I execute this,
-00:08:57.920 --> 00:09:01.040
-dynamic content in HTML blocks
+00:08:55.360 --> 00:08:56.790
+my content changes.
-00:09:01.040 --> 00:09:04.399
-with Elisp. For my
+00:08:56.790 --> 00:09:03.685
+I can generate dynamic content in HTML
+blocks with Elisp.
-00:09:04.399 --> 00:09:05.920
-web page builder, It's a little more
+00:09:03.685 --> 00:09:06.493
+For my web page builder, it's a little
+more complex.
-00:09:05.920 --> 00:09:08.000
-complex. I'm pulling data out
+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.
+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
@@ -675,50 +615,48 @@ 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:23.200
-going to have the title
+00:09:21.440 --> 00:09:24.086
+going to have the title and
+track number,
-00:09:23.200 --> 00:09:25.120
-and track number, and then a button for
+00:09:24.086 --> 00:09:25.869
+and then a button for playing it,
-00:09:25.120 --> 00:09:26.959
-playing it, plus the source
+00:09:25.869 --> 00:09:28.206
+plus the source of the audio file,
-00:09:26.959 --> 00:09:29.519
-of the audio file, which will get added
+00:09:28.206 --> 00:09:30.480
+which will get added here.
-00:09:29.519 --> 00:09:30.480
-here.
+00:09:30.480 --> 00:09:32.485
+Right now, this is hard coded for Opus,
-00:09:30.480 --> 00:09:32.640
-Right now, this is hard coded for Opus, so
+00:09:32.485 --> 00:09:37.200
+so it won't work for my MP3s.
-00:09:32.640 --> 00:09:37.200
-it won't work for my MP3s.
+00:09:37.200 --> 00:09:38.867
+I'm going to skip over snippets.
-00:09:37.200 --> 00:09:39.120
-I'm going to skip over snippets. Turns
+00:09:38.867 --> 00:09:42.017
+Turns out format strings were good
+enough for me.
-00:09:39.120 --> 00:09:41.200
-out format strings were good enough
+00:09:42.017 --> 00:09:45.035
+Snippets could be useful,
-00:09:41.200 --> 00:09:45.519
-for me. Snippets could be useful, but
+00:09:45.035 --> 00:09:47.267
+but format is super powerful,
-00:09:45.519 --> 00:09:48.160
-format is super powerful, and I didn't
+00:09:47.267 --> 00:09:49.839
+and I didn't really even need
+all that much power,
-00:09:48.160 --> 00:09:49.839
-really even need all that much power,
-
-00:09:49.839 --> 00:09:51.279
+00:09:49.839 --> 00:09:52.187
basically, just doing string
+interpolation.
-00:09:51.279 --> 00:09:53.519
-interpolation. So if you haven't seen
-
-00:09:53.519 --> 00:09:54.560
-format before,
+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
@@ -726,37 +664,29 @@ 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:03.120
-and you can generate an
+00:09:59.120 --> 00:10:05.040
+and you can generate an output string
+that you want.
-00:10:03.120 --> 00:10:05.040
-output string that you want.
+00:10:05.040 --> 00:10:07.344
+So in my generator code, basically,
-00:10:05.040 --> 00:10:07.600
-So in my generator code, basically, it's
+00:10:07.344 --> 00:10:08.720
+it's down here,
-00:10:07.600 --> 00:10:08.720
-down here,
-
-00:10:08.720 --> 00:10:10.959
+00:10:08.720 --> 00:10:12.800
I'm calling format with this Bard
-
-00:10:10.959 --> 00:10:12.800
Bivou(m)acs template,
-00:10:12.800 --> 00:10:15.920
-and that's basically a big
+00:10:12.800 --> 00:10:17.491
+and that's basically a big string of
+HTML.
-00:10:15.920 --> 00:10:18.240
-a big string of HTML. It's just
+00:10:17.491 --> 00:10:21.200
+It's just my whole page of HTML
-00:10:18.240 --> 00:10:21.200
-my whole page of HTML
-
-00:10:21.200 --> 00:10:22.959
+00:10:21.200 --> 00:10:24.399
with those control characters in just
-
-00:10:22.959 --> 00:10:24.399
four places.
00:10:24.399 --> 00:10:26.399
@@ -765,41 +695,38 @@ 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:32.079
+00:10:29.760 --> 00:10:34.746
Again, this is a combination of using
+buffer scripting, using HTML mode,
-00:10:32.079 --> 00:10:33.440
-buffer scripting,
+00:10:34.746 --> 00:10:37.279
+inserting text format strings,
-00:10:33.440 --> 00:10:37.279
-using HTML mode, inserting text format strings,
+00:10:37.279 --> 00:10:39.251
+and then I can indent-region
-00:10:37.279 --> 00:10:40.000
-and then I can indent-region so the HTML
-
-00:10:40.000 --> 00:10:41.920
-actually looks pretty
+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:50.160
+00:10:45.200 --> 00:10:54.000
I will show that, just really quick
-
-00:10:50.160 --> 00:10:54.000
actually.
-00:10:54.000 --> 00:10:56.880
-So you can see, this is the HTML that got
+00:10:54.000 --> 00:10:57.540
+So you can see, this is the HTML that
+got generated.
-00:10:56.880 --> 00:10:58.800
-generated. I've got my template.
+00:10:57.540 --> 00:10:58.800
+I've got my template.
-00:10:58.800 --> 00:11:02.560
-I inserted the title here, the style, the
+00:10:58.800 --> 00:11:02.193
+I inserted the title here, the style,
-00:11:02.560 --> 00:11:05.760
-font was all inserted,
+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.
@@ -810,98 +737,100 @@ 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:15.920
-is all generated by
-
-00:11:15.920 --> 00:11:22.480
-my generator code, and it works. It's great.
+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.240
+00:11:27.120 --> 00:11:30.945
So the other thing was that as I was
+developing this,
-00:11:30.240 --> 00:11:32.079
-developing this, I decided to use
-
-00:11:32.079 --> 00:11:33.200
-Org Babel and some of his
+00:11:30.945 --> 00:11:32.547
+I decided to use Org Babel
-00:11:33.200 --> 00:11:35.360
-its features for multi-language
+00:11:32.547 --> 00:11:35.588
+and some of its features for
+multi-language things
-00:11:35.360 --> 00:11:36.880
-things because I needed to style it with
+00:11:35.588 --> 00:11:37.839
+because I needed to style it with CSS
-00:11:36.880 --> 00:11:37.839
-CSS and
+00:11:37.839 --> 00:11:39.835
+and put actions in Javascript,
-00:11:37.839 --> 00:11:40.480
-and put actions in Javascript, and also I
-
-00:11:40.480 --> 00:11:42.480
-used SVG for authoring stuff.
+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.680
-It probably would have been simpler had I
+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:47.680 --> 00:11:49.600
-not used Org Babel, but it's also really
+00:11:48.680 --> 00:11:49.894
+but it's also really fun.
-00:11:49.600 --> 00:11:51.440
-fun. I think it's a cool,
+00:11:49.894 --> 00:11:53.663
+I think it's a cool, cool idea to use
+literate programming.
-00:11:51.440 --> 00:11:53.839
-cool idea to use literate programming. My
+00:11:53.663 --> 00:11:57.001
+My idea was to create HTML
+components.
-00:11:53.839 --> 00:11:55.839
-idea was to create HTML
+00:11:57.001 --> 00:11:59.519
+I could name it like this,
-00:11:55.839 --> 00:11:59.519
-components. I could name it like this,
+00:11:59.519 --> 00:12:00.959
+put a format string inside it,
-00:11:59.519 --> 00:12:01.440
-put a format string inside it, and build
+00:12:00.959 --> 00:12:02.800
+and build a function
-00:12:01.440 --> 00:12:02.800
-a function
+00:12:02.800 --> 00:12:04.302
+in Elisp to format it
-00:12:02.800 --> 00:12:05.519
-in Elisp to format it and spit out the
+00:12:04.302 --> 00:12:07.120
+and spit out the HTML that I want.
-00:12:05.519 --> 00:12:07.120
-HTML that I want.
+00:12:07.120 --> 00:12:09.581
+By doing this, then,
-00:12:07.120 --> 00:12:10.320
-By doing this, then, I can
+00:12:09.581 --> 00:12:12.388
+I can just change things in my Org file,
-00:12:10.320 --> 00:12:12.880
-just change things in my Org file which,
+00:12:12.388 --> 00:12:14.814
+which, not getting a whole lot of time
+to work on it,
-00:12:12.880 --> 00:12:14.320
-not getting a whole lot of time to work
+00:12:14.814 --> 00:12:16.615
+I can come back to it
-00:12:14.320 --> 00:12:16.959
-on it, I can come back to it and
+00:12:16.615 --> 00:12:19.335
+and I have a lot of notes.
-00:12:16.959 --> 00:12:19.839
-I have a lot of notes. I can
+00:12:19.335 --> 00:12:21.695
+I can kind of generate things as I'm
+going
-00:12:19.839 --> 00:12:21.920
-kind of generate things as I'm going and
+00:12:21.695 --> 00:12:24.399
+and keep notes for myself,
+and keep the...
-00:12:21.920 --> 00:12:24.399
-keep notes for myself, and keep the...
+00:12:24.399 --> 00:12:25.308
+I don't know. It's cool.
-00:12:24.399 --> 00:12:25.600
-I don't know. It's cool. Literate
+00:12:25.308 --> 00:12:26.672
+Literate programming is fun.
-00:12:25.600 --> 00:12:27.519
-programming is fun. So I don't need to
+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
@@ -909,41 +838,42 @@ 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:33.360
-I get the the div that I want. It's a
+00:12:31.040 --> 00:12:32.983
+I get the the div that I want.
-00:12:33.360 --> 00:12:34.880
-little bit funny. You'll see I have the
+00:12:32.983 --> 00:12:34.013
+It's a little bit funny.
-00:12:34.880 --> 00:12:36.480
-string like this, the way that
+00:12:34.013 --> 00:12:35.786
+You'll see I have the string like this,
-00:12:36.480 --> 00:12:39.200
-noweb expands, I can't do this on a
-
-00:12:39.200 --> 00:12:40.000
-single line.
+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.440
-so that might be something to work out
+00:12:43.839 --> 00:12:45.931
+so that might be something
+to work out later.
-00:12:45.440 --> 00:12:48.959
-later. CSS blocks can either be tangled out
+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.
+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:56.959
-So I've got my little CSS block named
+00:12:54.639 --> 00:12:57.609
+So I've got my little CSS block
+named style,
-00:12:56.959 --> 00:13:00.320
-style, Javascript named script,
+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
@@ -954,20 +884,23 @@ with noweb expansion.
00:13:04.839 --> 00:13:07.920
These double angle brackets here
-00:13:07.920 --> 00:13:09.839
-are where I'm going to expand the block
+00:13:07.920 --> 00:13:09.396
+are where I'm going to expand
-00:13:09.839 --> 00:13:12.639
-named style. I'm actually calling a function,
+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.399
-so I want the result of the function
+00:13:12.639 --> 00:13:14.737
+so I want the result of the
+function here,
-00:13:14.399 --> 00:13:17.040
-here, and then the script will just get
+00:13:14.737 --> 00:13:18.881
+and then the script will just get
+expanded here.
-00:13:17.040 --> 00:13:22.959
-expanded here. So org-babel-expand-src-block,
+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.
@@ -975,50 +908,45 @@ 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:29.920
-I've got that main content class
-
-00:13:29.920 --> 00:13:31.279
-I showed before,
+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.
+and the script as well.
+So that's kind of cool.
-00:13:34.480 --> 00:13:36.320
+00:13:34.480 --> 00:13:37.527
I could just run org-babel-tangle and
+get my thing out
-00:13:36.320 --> 00:13:38.160
-get my thing out and just
-
-00:13:38.160 --> 00:13:40.480
-edit one file instead of multiple files.
-
-00:13:40.480 --> 00:13:41.600
-Not for everyone,
+00:13:37.527 --> 00:13:40.480
+and just edit one file instead of
+multiple files.
-00:13:41.600 --> 00:13:45.839
-but I thought it was kind of fun.
+00:13:40.480 --> 00:13:46.455
+Not for everyone, but I thought it was
+kind of fun. All right.
-00:13:45.839 --> 00:13:47.760
-All right. Oh, and the final thing is that
+00:13:46.455 --> 00:13:48.807
+Oh, and the final thing is
+that in Emacs,
-00:13:47.760 --> 00:13:49.199
-in Emacs, you can
+00:13:48.807 --> 00:13:51.320
+you can author and view SVG.
-00:13:49.199 --> 00:13:52.880
-author and view SVG. So this is just an
+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:52.880 --> 00:13:57.199
-Org. This SVG, I used to make the play
+00:13:58.297 --> 00:13:59.519
+I didn't know this,
-00:13:57.199 --> 00:13:59.519
-and pause buttons. I didn't know this,
+00:13:59.519 --> 00:14:02.162
+but if you edit an SVG file,
-00:13:59.519 --> 00:14:02.800
-but if you edit an SVG file, you can
-
-00:14:02.800 --> 00:14:08.800
-toggle back and forth
+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.
@@ -1026,107 +954,102 @@ 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:19.680
-work through this because of how
-
-00:14:19.680 --> 00:14:20.560
-Emacs is.
+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:27.360
-like when doing this, I want it to be all
+00:14:24.959 --> 00:14:26.247
+like when doing this,
-00:14:27.360 --> 00:14:29.279
-free, so I want to use fonts that use a
+00:14:26.247 --> 00:14:27.606
+I want it to be all free,
-00:14:29.279 --> 00:14:30.079
-free license.
+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.800
-The content license... I chose
+00:14:32.800 --> 00:14:34.333
+The content license...
-00:14:34.800 --> 00:14:37.600
-Creative Commons Attribution ShareAlike,
+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.880
-Ideally, I could serve it with Emacs. I'd
+00:14:39.920 --> 00:14:42.663
+Ideally, I could serve it with Emacs.
-00:14:42.880 --> 00:14:44.800
-like to remove idiosyncrasy so other
-
-00:14:44.800 --> 00:14:46.320
+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:51.040
-Not requiring the web browser... I can
-
-00:14:51.040 --> 00:14:54.079
-ship playlists so that you can just
+00:14:48.720 --> 00:14:50.734
+Not requiring the web browser...
-00:14:54.079 --> 00:14:58.000
-click or link to a playlist on your favorite
+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:58.000 --> 00:15:00.639
-player, even EMMS if you want, and then
+00:14:56.648 --> 00:15:00.068
+on your favorite player, even EMMS if
+you want,
-00:15:00.639 --> 00:15:02.639
-packing up those albums in like a ZIP or
-
-00:15:02.639 --> 00:15:04.320
-.tar file.
+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.880
-It just has a link to this album. I'll
+00:15:08.639 --> 00:15:10.644
+It just has a link to this album.
-00:15:10.880 --> 00:15:14.000
-display it here in just a second.
+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
+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.
+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:33.680
-This is up online, so if you want to
-
-00:15:33.680 --> 00:15:35.120
-listen to my
+00:15:32.079 --> 00:15:34.316
+This is up online, so if you
+want to listen
-00:15:35.120 --> 00:15:39.199
-college band's album from 20 years ago,
+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:47.680
-Whoops. I made this art in Krita. You can
+00:15:43.040 --> 00:15:46.887
+Whoops. I made this art in Krita.
-00:15:47.680 --> 00:15:51.199
-press play. You can skip around.
+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.
@@ -1134,8 +1057,6 @@ 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:00.880
-I hope you enjoyed it, and enjoy the rest
-
-00:16:00.880 --> 00:16:07.360
-of EmacsConf. Goodbye!
+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
index e5dfd2f7..4d7bfede 100644
--- 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
@@ -1,25 +1,18 @@
WEBVTT
-00:00:03.360 --> 00:00:05.359
+00:00:03.360 --> 00:00:07.440
So first question, what does
-
-00:00:05.359 --> 00:00:07.440
Bard Bivou(m)acs mean? Good question.
-00:00:07.440 --> 00:00:09.679
+00:00:07.440 --> 00:00:10.800
In one version of my talk, I spent too
-
-00:00:09.679 --> 00:00:10.800
long explaining it,
00:00:10.800 --> 00:00:14.559
and decided to cut it out.
-00:00:14.559 --> 00:00:17.920
-It's basically a bad pun on
-
-00:00:17.920 --> 00:00:20.960
-band camp.
+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
@@ -45,50 +38,44 @@ 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:47.520
+00:00:45.039 --> 00:00:48.719
if you stick an m in there, it becomes
-
-00:00:47.520 --> 00:00:48.719
Bivou(m)acs.
-00:00:48.719 --> 00:00:56.239
+00:00:48.719 --> 00:01:00.160
It's kind of like editor macros for
-
-00:00:56.239 --> 00:01:00.160
generating some HTML.
-00:01:00.160 --> 00:01:04.000
-Yes, it is confusing, chatting on IRC
-
-00:01:04.000 --> 00:01:05.920
-at the same time.
+00:01:00.160 --> 00:01:07.782
+Yes, it is confusing, chatting on IRC at
+the same time. Great question.
-00:01:05.920 --> 00:01:09.520
-Great question. (Amin: Grant,
+00:01:07.782 --> 00:01:11.398
+(Amin: Grant, so right now, you're
+sharing your screen.
-00:01:09.520 --> 00:01:10.880
-so right now, you're sharing your
+00:01:11.398 --> 00:01:14.479
+Are you planning on showing something
+with it, or for example,
-00:01:10.880 --> 00:01:12.880
-screen. Are you planning on
+00:01:14.479 --> 00:01:16.036
+should I maximize you?)
-00:01:12.880 --> 00:01:14.479
-showing something with it, or for example,
-
-00:01:14.479 --> 00:01:16.880
-should I maximize you?) I don't know.
+00:01:16.036 --> 00:01:20.400
+I don't know. I can turn it off for now.
+Okay.
-00:01:16.880 --> 00:01:20.400
-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:20.400 --> 00:01:22.880
-(Amin: You can turn on the webcam.) Yeah, okay.
+00:01:22.299 --> 00:01:22.880
+Yeah, okay.
-00:01:22.880 --> 00:01:24.240
-(Amin: I'll maximize your
+00:01:22.880 --> 00:01:25.694
+(Amin: I'll maximize your webcam.)
-00:01:24.240 --> 00:01:28.240
-webcam.) Okay, thanks.
+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
@@ -96,14 +83,11 @@ 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:34.640
-Next question on
+00:01:31.360 --> 00:01:35.105
+Next question on the Etherpad,
-00:01:34.640 --> 00:01:37.280
-the Etherpad, does this metadata
-
-00:01:37.280 --> 00:01:38.479
-workflow also support
+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,
@@ -129,20 +113,17 @@ 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:58.479
+00:01:56.399 --> 00:01:59.600
It wasn't very intuitive, like I said,
-
-00:01:58.479 --> 00:01:59.600
with EMMS.
-00:01:59.600 --> 00:02:01.840
+00:01:59.600 --> 00:02:03.040
I think EMMS is really great, but its
-
-00:02:01.840 --> 00:02:03.040
interface is huge.
00:02:03.040 --> 00:02:07.040
-like if you do M-x and type emms, you get
+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.
@@ -150,92 +131,72 @@ 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:14.319
-I basically found the
-
-00:02:14.319 --> 00:02:16.319
-features that I needed to get this
+00:02:13.200 --> 00:02:18.879
+I basically found the features that I
+needed to get this workflow working.
-00:02:16.319 --> 00:02:18.879
-workflow working.
-
-00:02:18.879 --> 00:02:21.040
+00:02:18.879 --> 00:02:22.160
I would guess that you probably can do
-
-00:02:21.040 --> 00:02:22.160
it, and if you don't,
-00:02:22.160 --> 00:02:24.080
-if you can't do it out of the box, I
+00:02:22.160 --> 00:02:24.026
+if you can't do it out of the box,
-00:02:24.080 --> 00:02:28.160
-think you could script EMMS to do that.
+00:02:24.026 --> 00:02:28.160
+I think you could script EMMS
+to do that.
-00:02:28.160 --> 00:02:29.840
+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:29.840 --> 00:02:31.840
-going to be
-
-00:02:31.840 --> 00:02:35.200
-investigating it. I will try and post my
-
-00:02:35.200 --> 00:02:39.519
-findings somewhere online.
+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:43.920
-I'm not sure. I would guess
+00:02:42.080 --> 00:02:46.496
+I'm not sure. I would guess yes is the
+answer.
-00:02:43.920 --> 00:02:49.360
-yes is the answer. EMMS can connect to
+00:02:46.496 --> 00:02:50.712
+EMMS can connect to metadata services.
-00:02:49.360 --> 00:02:51.840
-metadata services. I haven't done
-
-00:02:51.840 --> 00:02:53.040
-that because I was just
+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.400
-I know that on the back end, it calls out to
-
-00:03:00.400 --> 00:03:02.319
-shell programs for tagging things.
+00:02:56.959 --> 00:03:00.165
+I know that on the back end, it calls out
-00:03:02.319 --> 00:03:04.560
-there's a lot of different options that can
+00:03:00.165 --> 00:03:02.319
+to shell programs for tagging things.
-00:03:04.560 --> 00:03:08.000
-shell out too. I was using the
+00:03:02.319 --> 00:03:06.165
+There's a lot of different options that can
+shell out too.
-00:03:08.000 --> 00:03:10.319
-the vorbis tools to tag the particular
+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:10.319 --> 00:03:12.239
-files I was working with.
-
-00:03:12.239 --> 00:03:15.120
+00:03:12.239 --> 00:03:15.840
You can also use tiny tag, and there's
-
-00:03:15.120 --> 00:03:15.840
some other...
-00:03:15.840 --> 00:03:17.840
-That might be the python library. I can't
+00:03:15.840 --> 00:03:17.498
+That might be the python library.
-00:03:17.840 --> 00:03:19.120
-remember. There's two other libraries
+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:19.120 --> 00:03:21.120
-that I can shell out to for
-
-00:03:21.120 --> 00:03:24.400
-doing metadata.
+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
@@ -243,29 +204,27 @@ 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:32.159
-fix egregious mistakes, use beats to
-
-00:03:32.159 --> 00:03:34.560
-apply metadata from music brains,
+00:03:29.040 --> 00:03:31.119
+fix egregious mistakes,
-00:03:34.560 --> 00:03:36.640
-or discogs, go over remaining albums with
+00:03:31.119 --> 00:03:35.118
+use beats to apply metadata from music
+brains or discogs,
-00:03:36.640 --> 00:03:38.400
-fubar 2000 again.
+00:03:35.118 --> 00:03:38.400
+go over remaining albums with fubar 2000
+again.
-00:03:38.400 --> 00:03:40.080
-Is there a chance textual tagging could
+00:03:38.400 --> 00:03:43.280
+Is there a chance textual tagging
+could allow doing it all in one program?
-00:03:40.080 --> 00:03:43.280
-allow doing it all in one program?
-
-00:03:43.280 --> 00:03:45.120
+00:03:43.280 --> 00:03:46.400
Have I experimented with mass tag
+update queries?
-00:03:45.120 --> 00:03:47.280
-update queries? I have not.
+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,
@@ -276,11 +235,11 @@ 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:01.519
-the programs in the back end, I'm sure
+00:03:58.159 --> 00:04:00.811
+the programs in the back end,
-00:04:01.519 --> 00:04:03.040
-you could work that out.
+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
@@ -294,11 +253,11 @@ 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.799
-updates would be really fantastic. So
+00:04:14.000 --> 00:04:16.647
+updates would be really fantastic.
-00:04:16.799 --> 00:04:18.560
-really, it's just a matter of
+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.
@@ -306,59 +265,54 @@ 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:26.840
+00:04:24.560 --> 00:04:28.479
philosophy of how to compensate
-
-00:04:26.840 --> 00:04:28.479
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.720
-philosophy around that. I guess the first
+00:04:31.199 --> 00:04:32.052
+philosophy around that.
-00:04:32.720 --> 00:04:33.919
-thing I could say would be
+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.800
-something like a universal income. I feel
+00:04:33.919 --> 00:04:36.378
+something like a universal income.
-00:04:36.800 --> 00:04:38.960
-like that would solve a lot of problems,
+00:04:36.378 --> 00:04:38.960
+I feel like that would solve
+a lot of problems,
-00:04:38.960 --> 00:04:42.000
-if musicians could just be musicians and
+00:04:38.960 --> 00:04:41.772
+if musicians could just be musicians
-00:04:42.000 --> 00:04:45.199
-not have to worry about their pay. I will
+00:04:41.772 --> 00:04:44.742
+and not have to worry about their pay.
-00:04:45.199 --> 00:04:46.240
-think about it more.
+00:04:44.742 --> 00:04:46.240
+I will think about it more.
-00:04:46.240 --> 00:04:48.720
-This is one of my first
+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:48.720 --> 00:04:50.160
-forays into getting
+00:04:52.015 --> 00:04:53.360
+so I will try to do more
-00:04:50.160 --> 00:04:52.240
-public with some of these ideas, so I
+00:04:53.360 --> 00:04:55.187
+and let the community know.
-00:04:52.240 --> 00:04:53.360
-will try to do more
-
-00:04:53.360 --> 00:04:55.840
-and let the community know. What Emacs
-
-00:04:55.840 --> 00:04:57.199
-theme am I using?
+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 or
+I think it was Aurora
00:05:05.680 --> 00:05:09.120
or Bubble Gum, maybe, but the
@@ -369,35 +323,26 @@ 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:18.880
-It's very pretty. SVG support built into
+00:05:16.000 --> 00:05:17.296
+It's very pretty.
-00:05:18.880 --> 00:05:20.080
-Emacs?
+00:05:17.296 --> 00:05:20.080
+SVG support built into Emacs?
-00:05:20.080 --> 00:05:23.600
-I'm using Emacs 27.1, and yes, SVG support
+00:05:20.080 --> 00:05:25.520
+I'm using Emacs 27.1, and yes, SVG
+support is built in.
-00:05:23.600 --> 00:05:25.520
-is built in.
-
-00:05:25.520 --> 00:05:28.800
+00:05:25.520 --> 00:05:30.639
I may have had to compile it with some
-
-00:05:28.800 --> 00:05:30.639
Cairo support.
00:05:30.639 --> 00:05:33.840
I don't remember for sure.
-00:05:33.840 --> 00:05:36.720
-But yes, you can even take screenshots of
-
-00:05:36.720 --> 00:05:38.080
-your Emacs
-
-00:05:38.080 --> 00:05:41.199
-from within Emacs in SVG.
+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.
@@ -429,62 +374,48 @@ 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:13.440
-Thank you all for listening and for
-
-00:06:13.440 --> 00:06:19.440
-enjoying the talk. I'm glad it turned out well.
-
-00:06:19.440 --> 00:06:22.800
-Awesome. Yeah, it's been fun
+00:06:09.680 --> 00:06:12.688
+Thank you all for listening
-00:06:22.800 --> 00:06:36.000
-so far.
+00:06:12.688 --> 00:06:19.440
+and for enjoying the talk. I'm glad it
+turned out well.
-00:06:36.000 --> 00:06:39.199
-How did I manage? I can post a
+00:06:19.440 --> 00:06:36.000
+Awesome. Yeah, it's been fun so far.
-00:06:39.199 --> 00:06:41.120
-snippet of that, or actually I can share
+00:06:36.000 --> 00:06:40.015
+How did I manage? I can post
+a snippet of that,
-00:06:41.120 --> 00:06:46.319
-my screen, can't I...
+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:51.840
+00:06:49.599 --> 00:06:53.440
So I think I got this from alphapapa, to
-
-00:06:51.840 --> 00:06:53.440
be honest.
00:06:53.440 --> 00:07:00.960
I define screenshot-svg.
-00:07:00.960 --> 00:07:03.680
+00:07:00.960 --> 00:07:04.960
It's an interactive command. Oh yeah,
-
-00:07:03.680 --> 00:07:04.960
there's alphapapa.
00:07:04.960 --> 00:07:08.560
Okay, there we go.
-00:07:08.560 --> 00:07:10.639
+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:10.639 --> 00:07:11.599
-can get it into
-
-00:07:11.599 --> 00:07:14.000
-the copy-paste buffer so I don't
-
-00:07:14.000 --> 00:07:17.039
-have to copy the file in, but I haven't really
-
-00:07:17.039 --> 00:07:20.560
-hacked on it yet.
+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.
@@ -510,11 +441,11 @@ 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.639
-and the author--you can even stick your
+00:07:48.960 --> 00:07:50.466
+and the author--you can even stick
-00:07:50.639 --> 00:07:52.560
-email and other headers in there.
+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.
@@ -522,14 +453,15 @@ 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.919
-I must have not required it. Good
+00:08:01.440 --> 00:08:03.618
+I must have not required it.
-00:08:03.919 --> 00:08:05.440
-question. (Amin: Grant,
+00:08:03.618 --> 00:08:04.594
+Good question.
-00:08:05.440 --> 00:08:09.599
-can you try sharing your screen maybe?)
+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.
@@ -543,14 +475,9 @@ 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:33.919
-Awesome.
-
-00:08:33.919 --> 00:08:37.599
-All right. Okay. I don't know why this
-
-00:08:37.599 --> 00:08:38.800
-isn't working.
+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.
@@ -567,47 +494,38 @@ 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:14.480
+00:09:12.800 --> 00:09:16.000
I thought that I had required it, but I
-
-00:09:14.480 --> 00:09:16.000
must not have.
-00:09:16.000 --> 00:09:26.959
-Maybe I'll try.
+00:09:16.000 --> 00:09:30.959
+Maybe I'll try. Okay.
-00:09:26.959 --> 00:09:30.959
-Okay.
-
-00:09:30.959 --> 00:09:33.040
+00:09:30.959 --> 00:09:34.560
So there we go. So org-tree-slide is a
-
-00:09:33.040 --> 00:09:34.560
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:41.680
-it changes your titles or your
-
-00:09:41.680 --> 00:09:42.640
-metadata into
+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.
+and it automatically sets the
+faces for you.
-00:09:46.560 --> 00:09:51.360
-You can customize that, of course. And then, as 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:51.360 --> 00:09:55.279
-go through the Org file, you get these
-
-00:09:55.279 --> 00:09:59.600
-kind of nice animations and--
+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.
@@ -615,29 +533,20 @@ 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:07.920
+00:10:06.399 --> 00:10:10.024
It's really nice because you can give
+your presentation and practice it,
-00:10:07.920 --> 00:10:09.600
-your presentation
-
-00:10:09.600 --> 00:10:10.880
-and practice it, and while you're
-
-00:10:10.880 --> 00:10:12.560
-practicing it, you can edit things as well,
-
-00:10:12.560 --> 00:10:13.760
-because it's still just
+00:10:10.024 --> 00:10:12.560
+and while you're practicing it, you can
+edit things as well,
-00:10:13.760 --> 00:10:16.160
-an Org document using narrowing, you know.
+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:16.880
-It doesn't
-
-00:10:16.880 --> 00:10:20.079
-actually change anything.
+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.
@@ -654,34 +563,27 @@ 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:43.839
+00:10:41.279 --> 00:10:49.360
but I'm actually viewing the SVG
-
-00:10:43.839 --> 00:10:49.360
screenshot that I took with Emacs.
-00:10:49.360 --> 00:10:51.920
+00:10:49.360 --> 00:10:52.720
See here's the source of it. So Emacs
-
-00:10:51.920 --> 00:10:52.720
made that.
00:10:52.720 --> 00:10:58.160
And here's the image.
-00:10:58.160 --> 00:10:59.600
+00:10:58.160 --> 00:11:01.570
It's cool because you can even do it
+again and again,
-00:10:59.600 --> 00:11:01.760
-again and again, and
-
-00:11:01.760 --> 00:11:05.360
-open more screenshots of screenshots.
+00:11:01.570 --> 00:11:05.360
+and open more screenshots of
+screenshots.
-00:11:05.360 --> 00:11:11.200
+00:11:05.360 --> 00:11:14.880
Yeah, definitely Emacsception.
-
-00:11:11.200 --> 00:11:14.880
Fun stuff.
00:11:14.880 --> 00:11:18.079
@@ -693,29 +595,28 @@ 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:30.560
+00:11:24.800 --> 00:11:34.959
I think the one in the talk was
-
-00:11:30.560 --> 00:11:34.959
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:38.079
-you start org-tree-slide with a
+00:11:36.560 --> 00:11:37.785
+you start org-tree-slide
-00:11:38.079 --> 00:11:38.880
-different theme.
+00:11:37.785 --> 00:11:38.880
+with a different theme.
-00:11:38.880 --> 00:11:42.160
-This top header bar gets the faces from
+00:11:38.880 --> 00:11:41.823
+This top header bar gets the faces
-00:11:42.160 --> 00:11:44.000
-that previous theme. I have not
+00:11:41.823 --> 00:11:43.395
+from that previous theme.
-00:11:44.000 --> 00:11:47.760
-figured out how to fix that yet.
+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
@@ -729,11 +630,12 @@ 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:02.079
-I saw alphapapa's comment on reddit, and then
+00:11:58.399 --> 00:12:01.424
+I saw alphapapa's comment on reddit,
-00:12:02.079 --> 00:12:08.839
-I recompiled it with Cairo support.
+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.
@@ -744,70 +646,56 @@ 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:31.680
-Okay
-
-00:12:31.680 --> 00:12:34.240
-I guess while I'm here, I might as
-
-00:12:34.240 --> 00:12:35.519
-well say thank you to
+00:12:25.839 --> 00:12:34.240
+Okay. I guess while I'm here, I might as
-00:12:35.519 --> 00:12:38.959
-the organizers. I really appreciate
+00:12:34.240 --> 00:12:36.993
+well say thank you to the organizers.
-00:12:38.959 --> 00:12:40.320
-everybody's work on this.
+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.279
+00:12:42.720 --> 00:12:45.929
I'm enjoying the other talks I've seen
+so far today,
-00:12:45.279 --> 00:12:47.279
-so far today, and I'm looking forward to
-
-00:12:47.279 --> 00:12:48.560
+00:12:45.929 --> 00:12:48.560
+and I'm looking forward to
to the rest.
-00:12:48.560 --> 00:12:50.480
-It's really interesting, just from
-
-00:12:50.480 --> 00:12:52.720
-being on Emacs in IRC
+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:52.720 --> 00:12:54.720
-for a few months, I've already connected
+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:00.720
+00:12:56.959 --> 00:13:04.079
and have a lot of cool connections
-
-00:13:00.720 --> 00:13:04.079
already.
-00:13:04.079 --> 00:13:05.519
+00:13:04.079 --> 00:13:07.519
(Amin: Thank you for being a part of the
-
-00:13:05.519 --> 00:13:07.519
community, Grant.)
-00:13:07.519 --> 00:13:09.680
-That's good to be here. I have another
+00:13:07.519 --> 00:13:08.883
+That's good to be here.
-00:13:09.680 --> 00:13:16.560
-talk tomorrow as well.
+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:20.160
+00:13:18.399 --> 00:13:21.680
for putting more comments on these
-
-00:13:20.160 --> 00:13:21.680
questions here
00:13:21.680 --> 00:13:29.360
@@ -822,14 +710,10 @@ 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:38.480
+00:13:36.720 --> 00:13:39.920
for your awesome talk and for popping in
-
-00:13:38.480 --> 00:13:39.920
for questions.)
-00:13:39.920 --> 00:13:42.000
+00:13:39.920 --> 00:13:46.800
Yeah, thanks again for hosting. See you
-
-00:13:42.000 --> 00:13:46.800
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
index b1659d7e..588cf43a 100644
--- a/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt
+++ b/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt
@@ -1,67 +1,56 @@
WEBVTT
-00:00:00.399 --> 00:00:03.280
-My name is Corwin Brust and I
+00:00:00.399 --> 00:00:02.683
+My name is Corwin Brust
-00:00:03.280 --> 00:00:06.240
-will be talking about getting started
+00:00:02.683 --> 00:00:08.960
+and I will be talking about getting
+started with Emacs today.
-00:00:06.240 --> 00:00:08.960
-with Emacs today.
-
-00:00:08.960 --> 00:00:11.200
+00:00:08.960 --> 00:00:11.448
I have been an Emacs user for a long
+time.
-00:00:11.200 --> 00:00:13.040
-time. First of all, thanks and a huge
-
-00:00:13.040 --> 00:00:15.360
-welcome to the conference
-
-00:00:15.360 --> 00:00:18.400
-from me and
+00:00:11.448 --> 00:00:15.360
+First of all, thanks and a huge welcome
+to the conference
-00:00:18.400 --> 00:00:22.400
-and on behalf
+00:00:15.360 --> 00:00:22.400
+from me and and on behalf
-00:00:22.400 --> 00:00:24.720
-and back to the other people that
+00:00:22.400 --> 00:00:24.368
+and back to the other people
-00:00:24.720 --> 00:00:26.080
-have been helping to organize.
+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:32.480
+00:00:30.480 --> 00:00:36.399
with that and just, kind of, see
-
-00:00:32.480 --> 00:00:36.399
backstage.
-00:00:36.399 --> 00:00:39.680
+00:00:36.399 --> 00:00:42.281
So I've used a lot of different editors
+in my time.
-00:00:39.680 --> 00:00:42.960
-in my time. That's
-
-00:00:42.960 --> 00:00:45.440
-about 25 years as a professional
-
-00:00:45.440 --> 00:00:52.399
+00:00:42.281 --> 00:00:52.399
+That's about 25 years as a professional
software engineer.
-00:00:52.399 --> 00:00:53.920
+00:00:52.399 --> 00:00:54.247
And most of that time I've been using
+Emacs.
-00:00:53.920 --> 00:00:56.160
-Emacs. I'll talk a little bit in a minute
+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
+about how I got into Emacs,
00:01:04.479 --> 00:01:07.200
but I think if you've used Emacs and a
@@ -69,56 +58,45 @@ 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:15.200
-something that you notice right away is that
+00:01:10.240 --> 00:01:14.410
+something that you notice right away
-00:01:15.200 --> 00:01:17.520
-you get good with it in a way that stays
+00:01:14.410 --> 00:01:18.560
+is that you get good with it in a way
+that stays meaningful.
-00:01:17.520 --> 00:01:18.560
-meaningful.
-
-00:01:18.560 --> 00:01:20.799
+00:01:18.560 --> 00:01:24.199
You learn new things. Those things
+stick with you.
-00:01:20.799 --> 00:01:27.600
-stick with you. You learn how to
-
-00:01:27.600 --> 00:01:30.720
-make it do new tricks and then
-
-00:01:30.720 --> 00:01:33.759
-keep doing those tricks.
+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:36.799
+00:01:33.759 --> 00:01:39.439
I want to mention that this
-
-00:01:36.799 --> 00:01:39.439
conference--oops,
-00:01:39.439 --> 00:01:41.439
-this talk isn't about
-
-00:01:41.439 --> 00:01:45.600
-how to adjust your
+00:01:39.439 --> 00:01:44.829
+this talk isn't about how to adjust
-00:01:45.600 --> 00:01:47.520
-configuration specifically. I don't have
+00:01:44.829 --> 00:01:46.802
+your configuration specifically.
-00:01:47.520 --> 00:01:50.000
-a bunch of good code samples in here.
+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:51.520
+00:01:50.000 --> 00:01:52.451
There are other great talks at the
+conference,
-00:01:51.520 --> 00:01:54.399
-conference, particularly Andrew's,
-
-00:01:54.399 --> 00:01:57.600
-that I looked at, that looked
+00:01:52.451 --> 00:01:56.411
+particularly Andrew's, that I looked at,
-00:01:57.600 --> 00:01:59.920
-like they might be more aimed at that
+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,
@@ -126,59 +104,53 @@ like they might be more aimed at that
00:02:02.240 --> 00:02:05.280
what are some things to try to make
-00:02:05.280 --> 00:02:07.200
-it more comfortable for me starting?" This
+00:02:05.280 --> 00:02:07.017
+it more comfortable for me starting?"
-00:02:07.200 --> 00:02:08.879
-is about how to think about the problem
+00:02:07.017 --> 00:02:09.759
+This is about how to think about the
+problem space.
-00:02:08.879 --> 00:02:09.759
-space.
+00:02:09.759 --> 00:02:13.337
+Hopefully, a good warm up as we start
+thinking about
-00:02:09.759 --> 00:02:12.959
-Hopefully, a good warm up as we
+00:02:13.337 --> 00:02:17.200
+some of the lightning talks a little
+later on.
-00:02:12.959 --> 00:02:14.080
-start thinking about some of the
+00:02:17.200 --> 00:02:19.835
+I'm just gonna quickly make sure
-00:02:14.080 --> 00:02:17.200
-lightning talks a little later on.
+00:02:19.835 --> 00:02:21.789
+I can see my IRC buffer in case
-00:02:17.200 --> 00:02:20.000
-I'm just gonna quickly make sure I
-
-00:02:20.000 --> 00:02:22.400
-can see my IRC buffer in case I run into
-
-00:02:22.400 --> 00:02:24.080
-time. I didn't get my stopwatch started
-
-00:02:24.080 --> 00:02:25.680
-for this one.
+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:32.879
-We assume that we want to install
-
-00:02:32.879 --> 00:02:33.840
-packages
+00:02:29.680 --> 00:02:33.840
+We assume that we want to
+install packages
-00:02:33.840 --> 00:02:36.560
-and maybe configure some features. This
+00:02:33.840 --> 00:02:36.281
+and maybe configure some features.
-00:02:36.560 --> 00:02:38.319
-is particularly from the perspective of
+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.800
-with a bunch of people on a team and we
+00:02:39.120 --> 00:02:40.541
+with a bunch of people on a team
-00:02:40.800 --> 00:02:42.160
-want to get something done.
+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
@@ -186,104 +158,81 @@ Some of us probably already have mature
00:02:44.800 --> 00:02:46.560
Emacs workflows.
-00:02:46.560 --> 00:02:49.280
+00:02:46.560 --> 00:02:53.519
Others are installing it for the first
-
-00:02:49.280 --> 00:02:53.519
time.
-00:02:53.519 --> 00:02:56.879
-So the first question is, you know,
-
-00:02:56.879 --> 00:02:59.280
-in that context: what's the value
-
-00:02:59.280 --> 00:03:00.879
-proposition? Why should I mess with my
+00:02:53.519 --> 00:02:57.889
+So the first question is, you know, in
+that context:
-00:03:00.879 --> 00:03:02.840
-machine, my mature Emacs
+00:02:57.889 --> 00:02:59.784
+what's the value proposition?
-00:03:02.840 --> 00:03:05.599
-configuration, and impose my
+00:02:59.784 --> 00:03:01.532
+Why should I mess with my machine,
-00:03:05.599 --> 00:03:07.440
-ideas over the way somebody else is
+00:03:01.532 --> 00:03:04.219
+my mature Emacs configuration,
-00:03:07.440 --> 00:03:10.239
-learning Emacs? Well,
+00:03:04.219 --> 00:03:09.815
+and impose my ideas over the way
+somebody else is learning Emacs?
-00:03:10.239 --> 00:03:12.800
-it can be.. I'm off my slides here a
+00:03:09.815 --> 00:03:13.840
+Well, it can be.. I'm off my slides here
+a little bit.
-00:03:12.800 --> 00:03:13.840
-little bit.
+00:03:13.840 --> 00:03:16.959
+It can be a little bit tricky
-00:03:13.840 --> 00:03:16.400
-It can be a little bit
-
-00:03:16.400 --> 00:03:16.959
-tricky
-
-00:03:16.959 --> 00:03:20.400
+00:03:16.959 --> 00:03:21.440
to learn Emacs. One thing that
-
-00:03:20.400 --> 00:03:21.440
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:26.239
+00:03:24.720 --> 00:03:27.301
can tell us, kinda, keystroke for
+keystroke at times,
-00:03:26.239 --> 00:03:28.080
-keystroke at times, what to do and
-
-00:03:28.080 --> 00:03:30.480
-explain what everything is doing.
-
-00:03:30.480 --> 00:03:32.400
-Using the same packages can really
-
-00:03:32.400 --> 00:03:35.840
-help us working together on a project.
+00:03:27.301 --> 00:03:30.480
+what to do and explain what everything
+is doing.
-00:03:35.840 --> 00:03:39.840
-Speaking from my personal
+00:03:30.480 --> 00:03:35.840
+Using the same packages can really help
+us working together on a project.
-00:03:39.840 --> 00:03:40.720
-experience,
+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.040
-where I was excited to program in Emacs
+00:03:42.959 --> 00:03:45.226
+where I was excited to program
+in Emacs Lisp.
-00:03:45.040 --> 00:03:46.720
-Lisp. I've programmed in a lot of programming
-
-00:03:46.720 --> 00:03:47.840
+00:03:45.226 --> 00:03:47.840
+I've programmed in a lot of programming
languages,
-00:03:47.840 --> 00:03:51.200
-but Lisp wasn't on my list. I looked at
-
-00:03:51.200 --> 00:03:53.680
-my config that I was copy-pasting around
+00:03:47.840 --> 00:03:50.252
+but Lisp wasn't on my list.
-00:03:53.680 --> 00:03:56.319
-from generation after generation of
+00:03:50.252 --> 00:03:53.680
+I looked at my config that I was
+copy-pasting around
-00:03:56.319 --> 00:03:57.519
-.emacs file or
+00:03:53.680 --> 00:03:57.279
+from generation after generation of
+.emacs file,
-00:03:57.519 --> 00:03:59.519
-recrafting it from hand and from Internet
-
-00:03:59.519 --> 00:04:00.799
-searches,
+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
@@ -294,230 +243,170 @@ 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:10.959
-and
-
-00:04:10.959 --> 00:04:13.680
-be able to to quickly get through that
-
-00:04:13.680 --> 00:04:15.280
-workflow that caused me to install the
-
-00:04:15.280 --> 00:04:17.440
-program.
-
-00:04:17.440 --> 00:04:20.560
-You know, just
+00:04:07.680 --> 00:04:14.016
+and be able to to quickly get through
+that workflow
-00:04:20.560 --> 00:04:23.440
-little simple one-liners that that
+00:04:14.016 --> 00:04:17.440
+that caused me to install the program.
-00:04:23.440 --> 00:04:25.199
-got committed to memory over decades
+00:04:17.440 --> 00:04:24.049
+You know, just little simple one-liners
+that got committed to memory
-00:04:25.199 --> 00:04:27.120
-eventually just led me to a sort of "hey what's going on
+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.120 --> 00:04:28.880
-here." And I credit
-
-00:04:28.880 --> 00:04:31.680
-Jeff Goff, my good friend who died
-
-00:04:31.680 --> 00:04:33.520
-earlier in 2020,
+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
+Perhaps Erik and I will talk about that
-00:04:39.280 --> 00:04:40.800
+00:04:39.280 --> 00:04:42.000
a little bit more in another talk we
+have scheduled,
-00:04:40.800 --> 00:04:41.360
-have
-
-00:04:41.360 --> 00:04:43.280
-scheduled, but Jeff was a huge
+00:04:42.000 --> 00:04:44.400
+but Jeff was a huge influence on us
-00:04:43.280 --> 00:04:44.400
-influenceo on us
+00:04:44.400 --> 00:04:46.027
+in a number of ways,
-00:04:44.400 --> 00:04:47.280
-in a number of ways and a huge
+00:04:46.027 --> 00:04:47.732
+and a huge contributor
-00:04:47.280 --> 00:04:48.720
-contributor to the Raku programming
-
-00:04:48.720 --> 00:04:50.720
-language
-
-00:04:50.720 --> 00:04:54.840
+00:04:47.732 --> 00:04:54.840
+to the Raku programming language,
which is very cool.
-00:04:54.840 --> 00:04:58.880
-So, understanding how
-
-00:04:58.880 --> 00:05:01.039
-to make a good decision about splitting
+00:04:54.840 --> 00:05:00.153
+So, understanding how to make
+a good decision
-00:05:01.039 --> 00:05:03.120
-up configuration in a way to share it
+00:05:00.153 --> 00:05:03.680
+about splitting up configuration in a
+way to share it across
-00:05:03.120 --> 00:05:03.680
-across
-
-00:05:03.680 --> 00:05:05.600
+00:05:03.680 --> 00:05:06.292
people with really different uses of
+Emacs...
-00:05:05.600 --> 00:05:07.600
-Emacs... That's actually a
-
-00:05:07.600 --> 00:05:09.360
-complicated topic and I want to
+00:05:06.292 --> 00:05:08.546
+That's actually a complicated topic
-00:05:09.360 --> 00:05:11.039
-sort of back off and stare at it for a
+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:11.039 --> 00:05:12.639
-second.
-
-00:05:12.639 --> 00:05:15.840
+00:05:12.639 --> 00:05:18.720
I think Emacs is about people, so that
-
-00:05:15.840 --> 00:05:18.720
means it's about community.
-00:05:18.720 --> 00:05:22.000
+00:05:18.720 --> 00:05:24.960
And community means we're going to
-
-00:05:22.000 --> 00:05:24.960
invite disagreement.
-00:05:24.960 --> 00:05:29.120
-In fact, that disagreement
-
-00:05:29.120 --> 00:05:32.160
-isn't necessarily a road-block to our
-
-00:05:32.160 --> 00:05:33.280
-project. In fact,
+00:05:24.960 --> 00:05:32.687
+In fact, that disagreement isn't
+necessarily a road-block to our project.
-00:05:33.280 --> 00:05:35.680
-some of the work that a community
+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:35.680 --> 00:05:37.759
-project can invite us to do
+00:05:37.759 --> 00:05:39.505
+is to get closer to each other
-00:05:37.759 --> 00:05:39.680
-is to get closer to each other by
+00:05:39.505 --> 00:05:40.840
+by inviting those disagreements,
-00:05:39.680 --> 00:05:40.960
-inviting those disagreements, by
+00:05:40.840 --> 00:05:42.080
+by learning from them--learning from
-00:05:40.960 --> 00:05:42.080
-learning from them--learning from
+00:05:42.080 --> 00:05:46.880
+different people's styles and from how
+they argue,
-00:05:42.080 --> 00:05:43.280
-different people's
-
-00:05:43.280 --> 00:05:46.880
-styles and from how they argue,
-
-00:05:46.880 --> 00:05:49.120
+00:05:46.880 --> 00:05:50.058
and thinking about why they have that
+perspective
-00:05:49.120 --> 00:05:50.400
-perspective and
-
-00:05:50.400 --> 00:05:53.680
-what technical benefits that
+00:05:50.058 --> 00:05:53.227
+and what technical benefits
-00:05:53.680 --> 00:05:55.360
-perhaps radical point of view might
+00:05:53.227 --> 00:05:55.800
+that perhaps radical point of view might
+carry away.
-00:05:55.360 --> 00:05:56.720
-carry away. Some people are really
+00:05:55.800 --> 00:05:58.266
+Some people are really aggressive
+arguers,
-00:05:56.720 --> 00:05:59.039
-aggressive arguers, and others
+00:05:58.266 --> 00:06:01.919
+and others are very passive and really
-00:05:59.039 --> 00:06:01.919
-are very passive and really
+00:06:01.919 --> 00:06:05.824
+couch their ideas in distancing terms,
+to say,
-00:06:01.919 --> 00:06:03.120
-couch their ideas
+00:06:05.824 --> 00:06:07.906
+"well probably, this is a good idea"
-00:06:03.120 --> 00:06:06.240
-in distancing terms, to say, "well
-
-00:06:06.240 --> 00:06:08.080
-probably, this is a good idea" or
-
-00:06:08.080 --> 00:06:12.479
-"please double check me."
+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.120
-how certain a person is, because we're
-
-00:06:17.120 --> 00:06:18.479
-different. We have different ways of
+00:06:15.520 --> 00:06:17.497
+how certain a person is,
+because we're different.
-00:06:18.479 --> 00:06:19.520
-communicating
+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:23.380 --> 00:06:24.560
-[Music]
+00:06:24.560 --> 00:06:26.235
+When we think about a bunch of
-00:06:24.560 --> 00:06:26.560
-When we think about a bunch of really
+00:06:26.235 --> 00:06:30.000
+really diverse programmers
+approaching Emacs,
-00:06:26.560 --> 00:06:30.000
-diverse programmers approaching Emacs,
-
-00:06:30.000 --> 00:06:33.280
-probably one of our our first really big
-
-00:06:33.280 --> 00:06:36.479
+00:06:30.000 --> 00:06:36.479
+probably one of our first really big
challenges is just
-00:06:36.479 --> 00:06:39.759
-to pick what we're going to go
-
-00:06:39.759 --> 00:06:41.120
-after. There are a lot of
-
-00:06:41.120 --> 00:06:44.000
-existing kit
+00:06:36.479 --> 00:06:40.085
+to pick what we're going
+to go after.
-00:06:44.000 --> 00:06:49.599
-installs and things like this.
+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:52.880
+00:06:49.599 --> 00:06:54.400
My argument is that you could actually
-
-00:06:52.880 --> 00:06:54.400
get pretty far
-00:06:54.400 --> 00:06:56.560
-just trading files around. Maybe the
-
-00:06:56.560 --> 00:07:02.240
-more valuable
+00:06:54.400 --> 00:06:56.020
+just trading files around.
-00:07:02.240 --> 00:07:04.720
-conversation to have is making the
+00:06:56.020 --> 00:07:03.698
+Maybe the more valuable conversation
+to have
-00:07:04.720 --> 00:07:06.080
-hard decisions about, well,
+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,"
@@ -528,77 +417,56 @@ 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:15.680
+00:07:11.759 --> 00:07:17.440
the traditional splayed out over a
+single line completion,
-00:07:15.680 --> 00:07:17.440
-single line completion
-
-00:07:17.440 --> 00:07:19.840
-for example in the mode line, those
-
-00:07:19.840 --> 00:07:20.800
-people are going to
-
-00:07:20.800 --> 00:07:24.160
-add a line of config
-
-00:07:24.160 --> 00:07:29.039
-to their own setup?
-
-00:07:29.039 --> 00:07:32.479
-The way to get there? I mean, how do we
-
-00:07:32.479 --> 00:07:34.080
-find out what works? We don't want to
-
-00:07:34.080 --> 00:07:35.520
-slow down the people that
+00:07:17.440 --> 00:07:19.428
+for example in the mode line,
-00:07:35.520 --> 00:07:38.800
-are super productive with Emacs by
+00:07:19.428 --> 00:07:29.039
+those people are going to add a line of
+config to their own setup?
-00:07:38.800 --> 00:07:40.479
-asking them to completely break their
+00:07:29.039 --> 00:07:30.979
+The way to get there?
-00:07:40.479 --> 00:07:42.080
-workflows and make it easier for new
+00:07:30.979 --> 00:07:33.344
+I mean, how do we find out what works?
-00:07:42.080 --> 00:07:42.560
-folks.
+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:42.560 --> 00:07:46.240
-At the same time, we do
+00:07:38.587 --> 00:07:40.879
+by asking them to completely
+break their workflows
-00:07:46.240 --> 00:07:48.960
-want to make sure those new people are
+00:07:40.879 --> 00:07:42.560
+and make it easier for new folks.
-00:07:48.960 --> 00:07:51.280
-excited by Emacs and not turned off by
+00:07:42.560 --> 00:07:48.673
+At the same time, we do want to make
+sure those new people
-00:07:51.280 --> 00:07:52.720
-having to learn
+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:07:56.319
-the entire jungle of Emacs
+00:07:52.720 --> 00:08:00.363
+the entire jungle of Emacs history in
+the form of its unique
-00:07:56.319 --> 00:07:59.840
-history in the form of its
+00:08:00.363 --> 00:08:07.610
+technical stylings for things like
+frames, buffers,
-00:07:59.840 --> 00:08:03.120
-unique technical stylings for
+00:08:07.610 --> 00:08:11.668
+and other unique Emacs viewpoints
-00:08:03.120 --> 00:08:06.160
-things like frames,
-
-00:08:06.160 --> 00:08:09.840
-buffers, and other unique
-
-00:08:09.840 --> 00:08:12.960
-Emacs viewpoints on important
-
-00:08:12.960 --> 00:08:16.240
-interface concepts, especially.
+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
@@ -609,29 +477,25 @@ 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.280
-Rather than necessarily following our
-
-00:08:25.280 --> 00:08:31.440
-defaults of
+00:08:23.280 --> 00:08:25.117
+Rather than necessarily following
-00:08:31.440 --> 00:08:33.279
-finding the simplest configuration
+00:08:25.117 --> 00:08:33.279
+our defaults of finding the simplest
+configurations
-00:08:33.279 --> 00:08:35.120
+00:08:33.279 --> 00:08:37.440
that generally work and letting people
-
-00:08:35.120 --> 00:08:37.440
customize it,
00:08:37.440 --> 00:08:40.479
what if we tried to look
-00:08:40.479 --> 00:08:42.560
-for fairly specific configurations that
+00:08:40.479 --> 00:08:42.346
+for fairly specific configurations
-00:08:42.560 --> 00:08:44.159
-we'll expect essentially all of our
+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,
@@ -642,65 +506,52 @@ 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:58.800
-I think that degree of
-
-00:08:58.800 --> 00:08:59.839
-experimentation
+00:08:55.920 --> 00:08:59.839
+I think that degree of experimentation
-00:08:59.839 --> 00:09:01.680
+00:08:59.839 --> 00:09:02.584
can drive back into the Emacs
+development process.
-00:09:01.680 --> 00:09:03.360
-development process. In the development
-
-00:09:03.360 --> 00:09:04.800
-mailing list...
+00:09:02.584 --> 00:09:04.800
+In the development mailing list...
-00:09:04.800 --> 00:09:07.760
-I'm hoping I'll get a timing cue
+00:09:04.800 --> 00:09:15.120
+I'm hoping I'll get a timing cue here.
-00:09:07.760 --> 00:09:15.120
-here.
-
-00:09:15.120 --> 00:09:17.760
+00:09:15.120 --> 00:09:18.835
In the context of Emacs development as a
+greater entity,
-00:09:17.760 --> 00:09:18.320
-greater
-
-00:09:18.320 --> 00:09:20.959
-entity, we see some of these struggles.
+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:24.000
-Sometimes we can have the
-
-00:09:24.000 --> 00:09:26.720
-sense that defaults in Emacs will never
+00:09:22.399 --> 00:09:27.146
+Sometimes we can have the sense that
+defaults in Emacs will never change.
-00:09:26.720 --> 00:09:29.279
-change. The conversation is too difficult.
+00:09:27.146 --> 00:09:29.279
+The conversation is too difficult.
-00:09:29.279 --> 00:09:30.959
+00:09:29.279 --> 00:09:32.560
I think one thing that can help us get
-
-00:09:30.959 --> 00:09:32.560
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.880
-is using this set of bindings and
+00:09:36.160 --> 00:09:38.560
+is using this set of bindings,
-00:09:38.880 --> 00:09:40.399
-here's what we learned about
+00:09:38.560 --> 00:09:40.111
+and here's what we learned
-00:09:40.399 --> 00:09:42.240
-brand new Emacs users trying to come in
+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."
@@ -709,22 +560,20 @@ and get work done with that."
(Amin: Yeah you still have
00:09:49.360 --> 00:09:50.720
-a couple more minutes)
-
-00:09:50.720 --> 00:09:52.640
-Oh, beautiful. Okay, great. I will try to
+a couple more minutes.)
-00:09:52.640 --> 00:09:54.160
-get through my last few slides that i
+00:09:50.720 --> 00:09:51.984
+Oh, beautiful. Okay, great.
-00:09:54.160 --> 00:09:54.720
-cut
+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
+in my last walkthrough, but I think I'm
00:09:56.320 --> 00:09:58.320
-going quicker today thank you.
+going quicker today, thank you.
00:09:58.320 --> 00:10:02.000
Thank you.
@@ -732,41 +581,30 @@ Thank you.
00:10:02.000 --> 00:10:05.120
So let's just recap real quick:
-00:10:05.120 --> 00:10:06.800
-in theory, Emacs works
-
-00:10:06.800 --> 00:10:10.720
-out of the box. That means we're
+00:10:05.120 --> 00:10:08.760
+in theory, Emacs works out of the box.
-00:10:10.720 --> 00:10:14.079
-free to experiment. We can
+00:10:08.760 --> 00:10:12.853
+That means we're free to experiment.
-00:10:14.079 --> 00:10:17.120
-throw it all away and start over.
+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:27.360
+00:10:26.000 --> 00:10:30.079
I don't know what I was thinking on that
-
-00:10:27.360 --> 00:10:30.079
slide, excuse me.
-00:10:30.079 --> 00:10:32.240
-Bringing it back around
-
-00:10:32.240 --> 00:10:33.440
-to the free
+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:36.480
-our goal
-
-00:10:36.480 --> 00:10:39.519
-is to enable users
+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
@@ -774,158 +612,118 @@ 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:45.600
+00:10:43.040 --> 00:10:47.680
That's the context to take with project
-
-00:10:45.600 --> 00:10:47.680
initialization, but sometimes
00:10:47.680 --> 00:10:49.560
-it could make sense to put...
-
-00:10:49.560 --> 00:10:50.800
-[Music]
-
-00:10:50.800 --> 00:10:53.040
-to put some gloves on. I've thrown up on
-
-00:10:53.040 --> 00:10:54.880
-the screen here just a couple of other
+it could make sense
-00:10:54.880 --> 00:10:57.279
-ideas, ways to maybe think outside of the
+00:10:50.800 --> 00:10:52.032
+to put some gloves on.
-00:10:57.279 --> 00:10:57.920
-box.
+00:10:52.032 --> 00:10:53.766
+I've thrown up on the screen here
-00:10:57.920 --> 00:11:00.399
-As you're putting together project
+00:10:53.766 --> 00:10:55.276
+just a couple of other ideas,
-00:11:00.399 --> 00:11:01.440
-nets,
+00:10:55.276 --> 00:10:57.920
+ways to maybe think outside of the box.
-00:11:01.440 --> 00:11:04.959
-my words of encouragement are to experiment
+00:10:57.920 --> 00:11:01.440
+As you're putting together project nets,
-00:11:04.959 --> 00:11:05.519
-with it,
+00:11:01.440 --> 00:11:05.519
+my words of encouragement are to
+experiment with it,
-00:11:05.519 --> 00:11:09.200
+00:11:05.519 --> 00:11:09.941
try different things, and think really
+specifically
-00:11:09.200 --> 00:11:10.560
-specifically about how
+00:11:09.941 --> 00:11:17.010
+about how different the development
+users might be from each other
-00:11:10.560 --> 00:11:14.320
-different the development users
-
-00:11:14.320 --> 00:11:17.760
-might be from each other as you
-
-00:11:17.760 --> 00:11:21.680
-define standards for configuring
+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:25.360
-specifically for developing
+00:11:23.519 --> 00:11:26.552
+specifically for developing on a
+project.
-00:11:25.360 --> 00:11:29.120
-on a project. That's pretty much my talk.
+00:11:26.552 --> 00:11:29.120
+That's pretty much my talk.
-00:11:29.120 --> 00:11:30.480
+00:11:29.120 --> 00:11:32.959
If there's any time, I would take a
-
-00:11:30.480 --> 00:11:32.959
couple questions.
-00:11:32.959 --> 00:11:35.040
-Thank you for your awesome talk,
+00:11:32.959 --> 00:11:36.480
+(Amin: Thank you for your
+awesome talk, Corwin.
-00:11:35.040 --> 00:11:36.480
-Corwin.
-
-00:11:36.480 --> 00:11:38.160
-I think we have one or two
-
-00:11:38.160 --> 00:11:49.519
-minutes for a few questions.
+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:56.959
-Oh, I managed to close the
+like me to read the questions for you?)
-00:11:56.959 --> 00:11:58.000
-pad
+00:11:53.839 --> 00:11:58.000
+Corwin: Oh, I managed to close the pad
-00:11:58.000 --> 00:12:00.560
-and I am trying to open it again. All
+00:11:58.000 --> 00:12:00.352
+and I am trying to open it again.
-00:12:00.560 --> 00:12:03.519
-right, there it opened.
+00:12:00.352 --> 00:12:03.519
+All right, there it opened.
-00:12:03.519 --> 00:12:05.040
+00:12:03.519 --> 00:12:05.500
Bringing it onto a screen where I can
+see it.
-00:12:05.040 --> 00:12:06.880
-see it. Will you read me the
+00:12:05.500 --> 00:12:09.360
+Will you read me the first question
+while I drag windows around, please?
-00:12:06.880 --> 00:12:08.399
-first question while I drag windows
+00:12:09.360 --> 00:12:15.600
+(Amin: Sure. It says, "do you use Emacs
+as a community building tool?")
-00:12:08.399 --> 00:12:09.360
-around, please?
-
-00:12:09.360 --> 00:12:12.720
-(Amin: Sure. It says, "do you use Emacs as a
-
-00:12:12.720 --> 00:12:15.600
-community building tool?")
-
-00:12:15.600 --> 00:12:17.680
+00:12:15.600 --> 00:12:19.760
Do I use Emacs as a community building
-
-00:12:17.680 --> 00:12:19.760
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:26.720
-I think Emacs is an ambassador to
-
-00:12:26.720 --> 00:12:29.920
-the GNU tool chain.
-
-00:12:29.920 --> 00:12:33.279
-I think that in the fullness of time, we
-
-00:12:33.279 --> 00:12:34.560
-will see an Emacs
+00:12:23.519 --> 00:12:29.920
+I think Emacs is an ambassador to the
+GNU tool chain.
-00:12:34.560 --> 00:12:38.240
-that makes
+00:12:29.920 --> 00:12:33.027
+I think that in the fullness of time,
-00:12:38.240 --> 00:12:42.000
-and that makes iOS and Android and other
+00:12:33.027 --> 00:12:36.558
+we will see an Emacs
-00:12:42.000 --> 00:12:42.800
-closed-source
+00:12:36.558 --> 00:12:43.760
+that makes iOS and Android and other
+closed-source tools dream.
-00:12:42.800 --> 00:12:45.680
-tools dream. That's why they mock us
+00:12:43.760 --> 00:12:46.689
+That's why they mock us and call Emacs
-00:12:45.680 --> 00:12:46.320
-and call
-
-00:12:46.320 --> 00:12:49.200
-Emacs an operating system. It's because
+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.
@@ -936,65 +734,56 @@ 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:59.440
-spaces it can address, how many types of
+00:12:57.440 --> 00:12:58.540
+spaces it can address,
-00:12:59.440 --> 00:13:01.519
-users it can satisfy,
+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:05.600
-it robust in those
-
-00:13:05.600 --> 00:13:07.839
-environments. I mean, we're always
-
-00:13:07.839 --> 00:13:09.760
-thinking about the weak points, but
+00:13:04.399 --> 00:13:06.456
+it robust in those environments.
-00:13:09.760 --> 00:13:11.839
-is Emacs a community building tool? Heck
+00:13:06.456 --> 00:13:09.524
+I mean, we're always thinking about the
+weak points,
-00:13:11.839 --> 00:13:14.639
-yeah.
+00:13:09.524 --> 00:13:14.639
+but is Emacs a community building tool?
+Heck yeah.
-00:13:14.639 --> 00:13:17.920
+00:13:14.639 --> 00:13:18.480
(Amin: There's like one or two more
-
-00:13:17.920 --> 00:13:18.480
questions.
-00:13:18.480 --> 00:13:21.519
+00:13:18.480 --> 00:13:22.480
I think they're more long-form so it
-
-00:13:21.519 --> 00:13:22.480
might be better
-00:13:22.480 --> 00:13:24.000
-if you took them off stream so you
-
-00:13:24.000 --> 00:13:26.880
-could keep the schedule on time.)
+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:28.959
-i would love to take those questions
+00:13:26.880 --> 00:13:29.463
+I would love to take those questions
+offline.
-00:13:28.959 --> 00:13:31.040
-offline. I will respond to you in
+00:13:29.463 --> 00:13:30.908
+I will respond to you
-00:13:31.040 --> 00:13:32.399
-writing if we don't get to it in a
+00:13:30.908 --> 00:13:32.237
+in writing if we don't get to it
-00:13:32.399 --> 00:13:33.360
-breakout room.
+00:13:32.237 --> 00:13:33.360
+in a breakout room.
-00:13:33.360 --> 00:13:35.519
-Thanks so much for joining us. I
+00:13:33.360 --> 00:13:35.451
+Thanks so much for joining us.
-00:13:35.519 --> 00:13:36.639
-can't wait to see the rest of the
+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!
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
index 14913a32..8bb1e882 100644
--- 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
@@ -1,16 +1,17 @@
WEBVTT
-00:00:02.960 --> 00:00:04.960
-"Far away in the heavenly abode of the
+00:00:02.960 --> 00:00:04.644
+"Far away in the heavenly abode
-00:00:04.960 --> 00:00:06.560
-great god Indra,
+00:00:04.644 --> 00:00:06.560
+of the great god Indra,
-00:00:06.560 --> 00:00:08.320
-there is a wonderful net which has been
+00:00:06.560 --> 00:00:07.688
+there is a wonderful net
-00:00:08.320 --> 00:00:10.160
-hung by some cunning artificer
+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
@@ -18,92 +19,85 @@ 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:15.920
+00:00:14.320 --> 00:00:16.938
In accordance with the extravagant
+tastes of deities,
-00:00:15.920 --> 00:00:18.240
-tastes of deities, the artificer has hung
+00:00:16.938 --> 00:00:18.240
+the artificer has hung
-00:00:18.240 --> 00:00:20.960
-a single glittering jewel in each eye of
+00:00:18.240 --> 00:00:20.277
+a single glittering jewel
-00:00:20.960 --> 00:00:22.080
-the net,
+00:00:20.277 --> 00:00:22.080
+in each eye of the net,
-00:00:22.080 --> 00:00:24.000
-and since the net itself is infinite, the
+00:00:22.080 --> 00:00:23.859
+and since the net itself is infinite,
-00:00:24.000 --> 00:00:26.480
-jewels are infinite in number.
+00:00:23.859 --> 00:00:26.480
+the jewels are infinite in number.
-00:00:26.480 --> 00:00:28.400
-There hang the jewels, glittering like
+00:00:26.480 --> 00:00:27.642
+There hang the jewels,
-00:00:28.400 --> 00:00:30.480
-stars in the first magnitude,
+00:00:27.642 --> 00:00:30.480
+glittering like stars in the first
+magnitude,
-00:00:30.480 --> 00:00:33.440
-a wonderful sight to behold. Were we to
+00:00:30.480 --> 00:00:32.681
+a wonderful sight to behold.
-00:00:33.440 --> 00:00:34.800
-select one of these jewels for
+00:00:32.681 --> 00:00:35.680
+Were we to select one of these jewels
+for inspection,
-00:00:34.800 --> 00:00:35.680
-inspection,
+00:00:35.680 --> 00:00:38.216
+we would discover that in
+its polished surface
-00:00:35.680 --> 00:00:37.760
-we would discover that in its polished
+00:00:38.216 --> 00:00:39.520
+there are reflected
-00:00:37.760 --> 00:00:39.520
-surface there are reflected
+00:00:39.520 --> 00:00:41.451
+all the other jewels in the net,
-00:00:39.520 --> 00:00:41.920
-all the other jewels in the net, infinite
+00:00:41.451 --> 00:00:43.360
+infinite in number.
-00:00:41.920 --> 00:00:43.360
-in number.
+00:00:43.360 --> 00:00:45.140
+If we look still more closely,
-00:00:43.360 --> 00:00:45.600
-If we look still more closely, we would
+00:00:45.140 --> 00:00:48.960
+we would see that each of the jewels
+reflected in this one jewel
-00:00:45.600 --> 00:00:47.840
-see that each of the jewels reflected in
+00:00:48.960 --> 00:00:51.264
+reflects all the others."
-00:00:47.840 --> 00:00:48.960
-this one jewel
+00:00:51.264 --> 00:00:54.000
+This is the metaphor of Indra's Net,
-00:00:48.960 --> 00:00:52.239
-reflects all the others." This is the
-
-00:00:52.239 --> 00:00:54.000
-metaphor of Indra's Net,
-
-00:00:54.000 --> 00:00:56.840
+00:00:54.000 --> 00:00:57.615
which is told in some schools of
+philosophy.
-00:00:56.840 --> 00:00:59.359
-philosophy. Let's keep this metaphor in
-
-00:00:59.359 --> 00:01:00.160
-mind,
-
-00:01:00.160 --> 00:01:01.920
-because it'll help us understand the
+00:00:57.615 --> 00:01:00.160
+Let's keep this metaphor in mind,
-00:01:01.920 --> 00:01:03.760
-Emacs extension that we're about to
+00:01:00.160 --> 00:01:01.773
+because it'll help us understand
-00:01:03.760 --> 00:01:06.960
+00:01:01.773 --> 00:01:06.960
+the Emacs extension that we're about to
discuss.
-00:01:06.960 --> 00:01:10.080
-In editing text, there's two
+00:01:06.960 --> 00:01:12.810
+In editing text, there's two main
+paradigms:
-00:01:10.080 --> 00:01:13.200
-main paradigms: one
-
-00:01:13.200 --> 00:01:16.880
-is editing at the ground level,
+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
@@ -114,83 +108,67 @@ 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.720
-The other editing paradigm is where we
+00:01:28.479 --> 00:01:30.126
+The other editing paradigm
-00:01:30.720 --> 00:01:33.439
-escape to a higher level
+00:01:30.126 --> 00:01:33.439
+is where we escape to a higher level
-00:01:33.439 --> 00:01:36.000
+00:01:33.439 --> 00:01:36.479
and now the characters that we type are
-
-00:01:36.000 --> 00:01:36.479
not...
00:01:36.479 --> 00:01:39.040
They don't actually appear on the screen
-00:01:39.040 --> 00:01:41.600
+00:01:39.040 --> 00:01:42.748
because we're not at the ground level
+with the text,
-00:01:41.600 --> 00:01:44.799
-with the text, we are at a higher level
+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:51.920
-and regarding the text, referring to
+00:01:48.479 --> 00:01:50.773
+and regarding the text,
-00:01:51.920 --> 00:01:54.640
-this world of text in terms of a
-
-00:01:54.640 --> 00:01:56.159
-language.
+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:00.640
+00:01:57.920 --> 00:02:03.404
world as having words and paragraphs and
+sentences and lines and so on.
-00:02:00.640 --> 00:02:02.079
-sentences and
+00:02:03.404 --> 00:02:05.985
+We could reason about this text
-00:02:02.079 --> 00:02:04.640
-lines and so on. We could reason
+00:02:05.985 --> 00:02:13.120
+in terms of these textual entities and
+this textual language.
-00:02:04.640 --> 00:02:05.360
-about this
-
-00:02:05.360 --> 00:02:08.800
-text in terms of these
-
-00:02:08.800 --> 00:02:11.440
-textual entities and this textual
-
-00:02:11.440 --> 00:02:13.120
-language.
-
-00:02:13.120 --> 00:02:15.920
+00:02:13.120 --> 00:02:18.640
This is the second paradigm of text
-
-00:02:15.920 --> 00:02:18.640
editing.
00:02:18.640 --> 00:02:22.800
When we're in the second paradigm,
-00:02:22.800 --> 00:02:24.800
+00:02:22.800 --> 00:02:25.304
there is a way to go down to ground
+level.
-00:02:24.800 --> 00:02:26.480
-level. You hit Enter
-
-00:02:26.480 --> 00:02:28.160
-now--or we'll hit Enter to go down to the
+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.160 --> 00:02:30.480
-ground level, and you can hit Escape
+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.
@@ -198,182 +176,147 @@ 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:37.280
-and Escape to go up to the referential
-
-00:02:37.280 --> 00:02:40.160
-level.
-
-00:02:40.160 --> 00:02:44.879
-Now, in Vim, the nouns
+00:02:35.200 --> 00:02:40.160
+and Escape to go up to the
+referential level.
-00:02:44.879 --> 00:02:48.239
-in this world of text all
+00:02:40.160 --> 00:02:47.565
+Now, in Vim, the nouns in this
+world of text
-00:02:48.239 --> 00:02:50.959
-share the same referential plane which
+00:02:47.565 --> 00:02:52.319
+all share the same referential plane
+which we call normal mode.
-00:02:50.959 --> 00:02:51.519
-we call
-
-00:02:51.519 --> 00:02:54.319
-normal mode. So in normal mode, all of the
-
-00:02:54.319 --> 00:02:54.959
-nouns
+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:02:58.959
+00:02:57.360 --> 00:03:00.959
whether it's words or sentences or
-
-00:02:58.959 --> 00:03:00.959
paragraphs,
-00:03:00.959 --> 00:03:04.400
-and they all share this same
-
-00:03:04.400 --> 00:03:08.319
-referential plane.
+00:03:00.959 --> 00:03:08.319
+and they all share this same referential
+plane.
-00:03:08.319 --> 00:03:11.120
-They compete for space on the
+00:03:08.319 --> 00:03:12.720
+They compete for space on the keyboard.
-00:03:11.120 --> 00:03:12.720
-keyboard.
+00:03:12.720 --> 00:03:17.037
+An alternative way to structure these
+modes is
-00:03:12.720 --> 00:03:15.760
-An alternative
+00:03:17.037 --> 00:03:21.840
+instead of having a single mode where
+all the nouns coexist,
-00:03:15.760 --> 00:03:17.680
-way to structure these modes is instead
+00:03:21.840 --> 00:03:24.005
+peacefully or otherwise,
-00:03:17.680 --> 00:03:19.280
-of having a single mode where all the
+00:03:24.005 --> 00:03:30.400
+you instead have a dedicated mode for
+every noun.
-00:03:19.280 --> 00:03:21.840
-nouns coexist,
+00:03:30.400 --> 00:03:32.540
+In that case, what happens is
-00:03:21.840 --> 00:03:24.959
-peacefully or otherwise, you instead
+00:03:32.540 --> 00:03:35.440
+because your modal spaces are
+now much smaller,
-00:03:24.959 --> 00:03:30.400
-have a dedicated mode for every noun.
-
-00:03:30.400 --> 00:03:33.040
-In that case, what happens is because
-
-00:03:33.040 --> 00:03:35.440
-your modal spaces are now much smaller,
-
-00:03:35.440 --> 00:03:37.280
+00:03:35.440 --> 00:03:40.593
you're just talking about words or
+paragraphs or lines or something,
-00:03:37.280 --> 00:03:38.720
-paragraphs or
-
-00:03:38.720 --> 00:03:42.560
-lines or something, the keys that you use
+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 in
+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:52.000
-the same ideas behind them, but
+00:03:50.400 --> 00:03:51.845
+the same ideas behind them,
-00:03:52.000 --> 00:03:53.280
-they would have different effects
+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:57.519
+00:03:55.519 --> 00:03:59.120
It's the same keystrokes, different
-
-00:03:57.519 --> 00:03:59.120
contexts.
-00:03:59.120 --> 00:04:01.360
+00:03:59.120 --> 00:04:04.244
The advantage of that is it's often
+easier to change context
-00:04:01.360 --> 00:04:02.480
-easier
-
-00:04:02.480 --> 00:04:05.519
-to change context than it is to
-
-00:04:05.519 --> 00:04:09.040
-learn new key bindings. So let's see
+00:04:04.244 --> 00:04:07.888
+than it is to learn new key bindings.
-00:04:09.040 --> 00:04:12.080
-an example of how that works. We go into
+00:04:07.888 --> 00:04:11.289
+So let's see an example of how
+that works.
-00:04:12.080 --> 00:04:13.680
-character mode, and if you look at the
+00:04:11.289 --> 00:04:14.039
+We go into character mode, and if you
+look at the mode line
-00:04:13.680 --> 00:04:15.439
-mode line at the bottom of the screen there,
+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.519
-Now, when we move up, down, left, and
+00:04:18.720 --> 00:04:21.955
+Now, when we move up, down,
+left, and right,
-00:04:21.519 --> 00:04:23.919
-right, we're moving by character.
+00:04:21.955 --> 00:04:23.919
+we're moving by character.
-00:04:23.919 --> 00:04:28.479
-We can also transform the text, and
+00:04:23.919 --> 00:04:28.088
+We can also transform the text,
-00:04:28.479 --> 00:04:30.240
-the transformations occur in terms of
+00:04:28.088 --> 00:04:32.400
+and the transformations occur in terms
+of character.
-00:04:30.240 --> 00:04:32.400
-character.
+00:04:32.400 --> 00:04:34.207
+You can also go into word mode.
-00:04:32.400 --> 00:04:34.320
-You can also go into word mode. In
+00:04:34.207 --> 00:04:40.000
+In word mode, the transformations that
+you do are on words.
-00:04:34.320 --> 00:04:35.520
-word mode,
-
-00:04:35.520 --> 00:04:38.560
-the transformations that you do are on
-
-00:04:38.560 --> 00:04:40.000
-words.
-
-00:04:40.000 --> 00:04:42.320
+00:04:40.000 --> 00:04:43.440
and you try... Your movement is also in
-
-00:04:42.320 --> 00:04:43.440
terms of words.
-00:04:43.440 --> 00:04:45.600
+00:04:43.440 --> 00:04:46.560
So that's the level of granularity that
-
-00:04:45.600 --> 00:04:46.560
you have.
-00:04:46.560 --> 00:04:49.520
-You could also go to line mode. When
+00:04:46.560 --> 00:04:49.191
+You could also go to line mode.
-00:04:49.520 --> 00:04:50.720
-you're in line mode,
+00:04:49.191 --> 00:04:50.720
+When you're in line mode,
-00:04:50.720 --> 00:04:53.759
-you go up and down by line, and you can
+00:04:50.720 --> 00:04:52.901
+you go up and down by line,
-00:04:53.759 --> 00:04:54.240
-move lines
+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.
@@ -384,20 +327,19 @@ The transformations you do are in
00:05:00.880 --> 00:05:02.800
terms of lines.
-00:05:02.800 --> 00:05:08.400
-You could also go to window mode, where
-
-00:05:08.400 --> 00:05:10.639
-now the objects that you're referring to
+00:05:02.800 --> 00:05:07.682
+You could also go to window mode,
-00:05:10.639 --> 00:05:12.400
-are windows. You can
+00:05:07.682 --> 00:05:11.695
+where now the objects that you're
+referring to are windows.
-00:05:12.400 --> 00:05:15.759
-move spatially amongst the windows or
+00:05:11.695 --> 00:05:15.578
+You can move spatially
+amongst the windows
-00:05:15.759 --> 00:05:17.520
-do transformations on 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.
@@ -408,197 +350,170 @@ 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.280
-the principles that play here is
-
-00:05:35.280 --> 00:05:36.880
-something called the Rumpelstiltskin
-
-00:05:36.880 --> 00:05:38.000
-principle, which is something
+00:05:32.800 --> 00:05:35.114
+the principles at play here
-00:05:38.000 --> 00:05:40.720
-that's known in computer science.
+00:05:35.114 --> 00:05:37.266
+is something called the
+Rumpelstiltskin principle,
-00:05:40.720 --> 00:05:42.320
-If you can name something, then
+00:05:37.266 --> 00:05:40.720
+which is something that's known in
+computer science.
-00:05:43.759 --> 00:05:46.720
-you have power over it. This is
+00:05:40.720 --> 00:05:42.113
+If you can name something,
-00:05:46.720 --> 00:05:48.560
-kind of an adaptation of that principle
+00:05:42.113 --> 00:05:45.824
+then you have power over it.
-00:05:48.560 --> 00:05:50.479
-which says that if you can
+00:05:45.824 --> 00:05:48.560
+This is kind of an adaptation of that
+principle
-00:05:50.479 --> 00:05:52.320
-name something and if you can talk about
+00:05:48.560 --> 00:05:51.123
+which says that if you can name
+something
-00:05:52.320 --> 00:05:54.000
-it, then it's a noun
+00:05:51.123 --> 00:05:52.572
+and if you can talk about it,
-00:05:55.360 --> 00:05:56.960
-in your editing language. If it's a
+00:05:52.572 --> 00:05:56.334
+then it's a noun in your editing
+language.
-00:05:56.960 --> 00:05:58.960
-noun, then it has...
+00:05:56.334 --> 00:05:58.960
+If it's a noun, then it has...
-00:05:58.960 --> 00:06:01.520
+00:05:58.960 --> 00:06:02.319
It's a mode. So if we can talk about it,
-
-00:06:01.520 --> 00:06:02.319
it's a noun.
-00:06:02.319 --> 00:06:05.039
-If it's a noun, then it's a mode. One
-
-00:06:05.039 --> 00:06:06.479
-of the things we've been talking a lot
-
-00:06:06.479 --> 00:06:07.039
-about
+00:06:02.319 --> 00:06:04.818
+If it's a noun, then it's a mode.
-00:06:07.039 --> 00:06:10.800
-is modes. In fact,
+00:06:04.818 --> 00:06:08.919
+One of the things we've been talking a
+lot about is modes.
-00:06:10.800 --> 00:06:14.240
-by this principle, modes also
+00:06:08.919 --> 00:06:12.699
+In fact, by this principle,
-00:06:14.240 --> 00:06:17.280
-should be a mode.
+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:21.120
-in terms of modes as objects, just like
+00:06:19.039 --> 00:06:20.639
+in terms of modes as objects,
-00:06:21.120 --> 00:06:22.080
-you have
+00:06:20.639 --> 00:06:22.300
+just like you have modes
-00:06:22.080 --> 00:06:23.759
-modes where you can reason in terms of
+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:28.800
-So let's do that. Let's go to mode
-
-00:06:28.800 --> 00:06:30.479
-mode.
+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:36.080
-the objects that are depicted here are
+When you go to mode mode, you see that
-00:06:36.080 --> 00:06:37.919
-the modes that are
+00:06:34.000 --> 00:06:35.915
+the objects that are depicted here
-00:06:37.919 --> 00:06:40.960
-present in the buffer,
+00:06:35.915 --> 00:06:40.960
+are the modes that are present
+in the buffer,
-00:06:40.960 --> 00:06:44.880
-which we knew about because the
+00:06:40.960 --> 00:06:44.500
+which we knew about because
-00:06:44.880 --> 00:06:46.400
-style of editing that we had in this
+00:06:44.500 --> 00:06:46.797
+the style of editing that we had
+in this buffer
-00:06:46.400 --> 00:06:48.720
-buffer was the Vim style of editing
+00:06:46.797 --> 00:06:48.720
+was the Vim style of editing
-00:06:48.720 --> 00:06:50.479
+00:06:48.720 --> 00:06:51.143
where there's an insert mode at the
+ground level
-00:06:50.479 --> 00:06:52.400
-ground level and a normal mode that you
-
-00:06:52.400 --> 00:06:53.039
-can escape to.
+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:00.479
+00:06:57.280 --> 00:07:01.352
Enter to the insert mode and escape to
+normal mode.
-00:07:00.479 --> 00:07:02.880
-normal mode. When you look at the
-
-00:07:02.880 --> 00:07:03.680
-mode mode
+00:07:01.352 --> 00:07:04.647
+When you look at the mode mode
+representation,
-00:07:03.680 --> 00:07:06.160
-representation, you see that in fact that
+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:12.720
-But in different situations, you might
-
-00:07:12.720 --> 00:07:14.080
-find
+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:17.680
-ones that you want. You want something
-
-00:07:17.680 --> 00:07:19.360
-more tailored for the specific
+00:07:16.080 --> 00:07:16.922
+ones that you want.
-00:07:19.360 --> 00:07:20.880
-application.
+00:07:16.922 --> 00:07:20.880
+You want something more tailored for the
+specific application.
-00:07:20.880 --> 00:07:23.050
+00:07:20.880 --> 00:07:25.065
For instance, if you're editing
+Lisp code
-00:07:24.240 --> 00:07:27.360
-Lisp code (or code in general, but
+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.960
-you might want to take advantage of the
+00:07:30.880 --> 00:07:32.640
+you might want to take advantage
-00:07:32.960 --> 00:07:34.000
-structure of
+00:07:32.640 --> 00:07:34.852
+of the structure of the code.
-00:07:34.000 --> 00:07:37.599
-the code. For Lisp code in particular,
+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:44.240
-which is able to reason
+00:07:40.960 --> 00:07:45.414
+which is able to reason about your code
-00:07:44.240 --> 00:07:46.720
-about your code in terms of its tree
+00:07:45.414 --> 00:07:47.919
+in terms of its tree structure.
-00:07:46.720 --> 00:07:47.919
-structure.
-
-00:07:47.919 --> 00:07:50.560
+00:07:47.919 --> 00:07:52.397
So you can use the same keystrokes: hjkl
+goes left, right, up, and down,
-00:07:50.560 --> 00:07:51.120
-goes
-
-00:07:51.120 --> 00:07:53.440
-left, right, up, and down, but you also have
-
-00:07:53.440 --> 00:07:54.960
-other keystrokes that are more
-
-00:07:54.960 --> 00:07:58.080
-specialized to the application.
+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.
@@ -606,11 +521,9 @@ 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:10.080
-You can make changes to it really
-
-00:08:10.080 --> 00:08:12.240
-quickly
+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.
@@ -618,140 +531,128 @@ 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:21.360
-that's convenient for
-
-00:08:21.360 --> 00:08:23.199
-this particular application, which is
+00:08:19.440 --> 00:08:22.625
+that's convenient for this particular
+application,
-00:08:23.199 --> 00:08:25.039
-editing Lisp code,
+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.039
+00:08:28.960 --> 00:08:31.631
Typically, when you're editing code
+like this,
-00:08:31.039 --> 00:08:32.640
-like this, you'd want to be
+00:08:31.631 --> 00:08:33.435
+you'd want to be in insert mode
-00:08:32.640 --> 00:08:34.800
-in insert mode actually typing out the
+00:08:33.435 --> 00:08:36.640
+actually typing out the code,
-00:08:34.800 --> 00:08:36.640
-code,
-
-00:08:36.640 --> 00:08:38.320
+00:08:36.640 --> 00:08:40.959
and then you'd want to escape to symex
-
-00:08:38.320 --> 00:08:40.959
mode rather than normal mode,
-00:08:40.959 --> 00:08:42.159
-and then you could escape again and
+00:08:40.959 --> 00:08:42.021
+and then you could escape again
-00:08:42.159 --> 00:08:44.080
-you'd end up in normal mode.
+00:08:42.021 --> 00:08:44.080
+and you'd end up in normal mode.
-00:08:44.080 --> 00:08:46.720
-So this, if we go to mode mode, we see is
-
-00:08:46.720 --> 00:08:48.000
-depicted
+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.800
-bottom and normal is at the top, but
-
-00:08:52.800 --> 00:08:54.800
-symex-mode is in between
+00:08:51.040 --> 00:08:52.604
+bottom and normal is at the top,
-00:08:54.800 --> 00:08:57.200
-the two. You could also change that if
+00:08:52.604 --> 00:08:55.305
+but symex-mode is in between the two.
-00:08:57.200 --> 00:08:58.800
-you like. If you don't want symex-mode to
+00:08:55.305 --> 00:08:57.551
+You could also change that if you like.
-00:08:58.800 --> 00:09:00.640
-be there, you could just
+00:08:57.551 --> 00:08:59.566
+If you don't want symex-mode
+to be there,
-00:09:00.640 --> 00:09:03.760
-move it to the top. Now you find symex is
+00:08:59.566 --> 00:09:02.187
+you could just move it to the top.
-00:09:03.760 --> 00:09:05.600
-at the top and you enter down to
+00:09:02.187 --> 00:09:04.392
+Now you find symex is at the top
-00:09:05.600 --> 00:09:06.160
-normal.
+00:09:04.392 --> 00:09:06.160
+and you enter down to normal.
-00:09:06.160 --> 00:09:07.600
+00:09:06.160 --> 00:09:08.848
You can see it on the status bar at the
+bottom there.
-00:09:07.600 --> 00:09:10.480
-bottom there. Enter to insert,
-
-00:09:10.480 --> 00:09:13.839
-escape to normal, escape to symex.
+00:09:08.848 --> 00:09:13.839
+Enter to insert, escape to normal,
+escape to symex.
-00:09:13.839 --> 00:09:16.480
-In fact, you can even add more modes if
+00:09:13.839 --> 00:09:16.344
+In fact, you can even add more modes
-00:09:16.480 --> 00:09:19.380
-you don't like the existing ones.
+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.440
-We have window mode. It goes down to
+00:09:23.839 --> 00:09:25.855
+We have window mode. It goes
+down to symex,
-00:09:25.440 --> 00:09:27.519
-symex, it goes down to normal.
+00:09:25.855 --> 00:09:27.519
+it goes down to normal.
-00:09:27.519 --> 00:09:30.320
-Enter the insert, escape to normal, escape
+00:09:27.519 --> 00:09:29.919
+Enter the insert, escape to normal,
-00:09:30.320 --> 00:09:33.600
-to symex, escape to window.
+00:09:29.919 --> 00:09:33.600
+escape to symex, escape to window.
-00:09:33.600 --> 00:09:37.600
+00:09:33.600 --> 00:09:41.232
So we've talked... Okay, so another thing
+actually to note here
-00:09:37.600 --> 00:09:41.760
-actually to note here is that in editing
+00:09:41.232 --> 00:09:45.360
+is that in editing modes,
-00:09:41.760 --> 00:09:45.360
-modes,
+00:09:45.360 --> 00:09:46.486
+if you look at the mode line
-00:09:45.360 --> 00:09:46.720
-if you look at the mode line at the
+00:09:46.486 --> 00:09:48.399
+at the bottom of the screen,
-00:09:46.720 --> 00:09:48.399
-bottom of the screen,
+00:09:48.399 --> 00:09:50.257
+you'll see that we are currently,
-00:09:48.399 --> 00:09:50.640
-you'll see that we are currently, in this
-
-00:09:50.640 --> 00:09:51.519
-buffer,
+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.600
-I'm going to hit Enter now and
+00:09:54.560 --> 00:09:57.296
+I'm going to hit Enter now
-00:09:57.600 --> 00:09:58.720
-you'll see that when I hit
+00:09:57.296 --> 00:09:59.119
+and you'll see that when I hit Enter,
-00:09:58.720 --> 00:10:01.519
-Enter, nothing is happening. It's still in
+00:09:59.119 --> 00:10:00.627
+nothing is happening.
-00:10:01.519 --> 00:10:02.160
-line mode.
+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.
@@ -774,308 +675,232 @@ 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.760
-for editing the modes that are in
+00:10:19.519 --> 00:10:21.556
+for editing the modes that are
-00:10:21.760 --> 00:10:24.880
-operation in your ground level.
+00:10:21.556 --> 00:10:24.880
+in operation in your ground level.
-00:10:24.880 --> 00:10:26.560
+00:10:24.880 --> 00:10:26.898
In fact, line mode is all you need
+here,
-00:10:26.560 --> 00:10:28.320
-here, because this is just
-
-00:10:28.320 --> 00:10:30.320
-the nature of how these modes are
-
-00:10:30.320 --> 00:10:32.079
-laid out is
-
-00:10:32.079 --> 00:10:35.040
-in rows. So line mode is the most
+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:35.040 --> 00:10:36.399
-appropriate thing here.
+00:10:32.796 --> 00:10:36.399
+So line mode is the most appropriate
+thing here.
-00:10:36.399 --> 00:10:37.680
+00:10:36.399 --> 00:10:39.740
But you could change it to something
-
-00:10:37.680 --> 00:10:39.740
else if you like.
-00:10:40.959 --> 00:10:44.160
-Now we've seen two towers. We've
-
-00:10:44.160 --> 00:10:44.560
-seen
+00:10:40.959 --> 00:10:43.659
+Now we've seen two towers.
-00:10:44.560 --> 00:10:48.079
-the Vim tower and we've seen
-
-00:10:48.079 --> 00:10:53.680
+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:56.959
+00:10:53.680 --> 00:10:58.880
It turns out that, because we've been
-
-00:10:56.959 --> 00:10:58.880
talking about towers now,
-00:10:58.880 --> 00:11:01.519
-by the rumpelstiltskin principle, towers
+00:10:58.880 --> 00:11:06.399
+by the Rumpelstiltskin principle, towers
+also can be talked about,
-00:11:01.519 --> 00:11:02.800
-also
+00:11:06.399 --> 00:11:09.127
+and therefore they also are a mode.
-00:11:02.800 --> 00:11:06.399
-can be talked about,
-
-00:11:06.399 --> 00:11:09.279
-and therefore they also are a mode. So
-
-00:11:09.279 --> 00:11:11.200
-how do we go to tower 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
+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:20.800
+00:11:19.200 --> 00:11:23.360
and we find that we are now in tower
-
-00:11:20.800 --> 00:11:23.360
mode.
-00:11:23.360 --> 00:11:27.440
+00:11:23.360 --> 00:11:29.279
We see that there are many towers
-
-00:11:27.440 --> 00:11:29.279
available. We're now...
-00:11:29.279 --> 00:11:32.640
-We're seeing several possible
+00:11:29.279 --> 00:11:33.440
+We're seeing several possible towers
-00:11:32.640 --> 00:11:36.240
-towers that we have written
+00:11:33.440 --> 00:11:40.344
+that we have written to be available and
+for use in different buffers.
-00:11:36.240 --> 00:11:39.120
-to be available and for use in
+00:11:40.344 --> 00:11:42.110
+You can edit them on the fly.
-00:11:39.120 --> 00:11:41.440
-different buffers. You can edit them
+00:11:42.110 --> 00:11:46.630
+For instance, let's enter this tower.
-00:11:41.440 --> 00:11:44.000
-on the fly. For instance, let's enter this
-
-00:11:44.000 --> 00:11:46.630
-tower.
-
-00:11:48.000 --> 00:11:49.920
+00:11:48.000 --> 00:11:50.180
Now you see that in the bottom of
+the...
-00:11:49.920 --> 00:11:51.519
-the... In the mode line, you see that we're
-
-00:11:51.519 --> 00:11:52.480
-going
+00:11:50.180 --> 00:11:51.519
+In the mode line, you see that we're
-00:11:52.480 --> 00:11:54.240
-across all of these different modes that
+00:11:51.519 --> 00:11:53.944
+going across all of these
+different modes
-00:11:54.240 --> 00:11:56.480
-were in the tower.
+00:11:53.944 --> 00:11:56.480
+that were in the tower.
-00:11:56.480 --> 00:11:58.800
-You could escape and you could even
+00:11:56.480 --> 00:11:59.724
+You could escape and you could even move
+things around.
-00:11:58.800 --> 00:12:00.399
-move things around. You could put window
+00:11:59.724 --> 00:12:00.880
+You could put window mode
-00:12:00.399 --> 00:12:00.880
-mode
+00:12:00.880 --> 00:12:02.573
+all the way at the bottom,
-00:12:00.880 --> 00:12:02.399
-all the way at the bottom, right above
+00:12:02.573 --> 00:12:04.079
+right above insert mode.
-00:12:02.399 --> 00:12:04.079
-insert mode.
+00:12:04.079 --> 00:12:06.479
+Let's see that happen. There it is,
-00:12:04.079 --> 00:12:06.880
-Let's see that happen. There it is, window
+00:12:06.479 --> 00:12:10.444
+window is right above insert, and
+so on.
-00:12:06.880 --> 00:12:09.839
-is right above insert, and
+00:12:10.444 --> 00:12:14.240
+The tower always reflects your current
+position,
-00:12:09.839 --> 00:12:13.040
-so on. The tower always reflects your
-
-00:12:13.040 --> 00:12:14.240
-current position,
-
-00:12:14.240 --> 00:12:15.760
+00:12:14.240 --> 00:12:17.600
so if you're in buffer mode here and you
-
-00:12:15.760 --> 00:12:17.600
go down to line mode,
-00:12:17.600 --> 00:12:19.120
+00:12:17.600 --> 00:12:22.480
when you go back to mode mode, you see
-
-00:12:19.120 --> 00:12:22.480
that we are in line mode.
-00:12:22.480 --> 00:12:24.000
+00:12:22.480 --> 00:12:25.620
But in practice, you wouldn't have a
+tower this elaborate
-00:12:24.000 --> 00:12:26.160
-tower this elaborate because
-
-00:12:26.160 --> 00:12:28.959
-you'd rather have several smaller towers
-
-00:12:28.959 --> 00:12:29.440
-you enter,
+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:36.639
-Okay. So one
-
-00:12:36.639 --> 00:12:39.839
-other thing of interest here is that
+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:43.839
+00:12:42.240 --> 00:12:44.740
if you look at the status line at the
+bottom there,
-00:12:43.839 --> 00:12:45.920
-bottom there, we are currently
+00:12:44.740 --> 00:12:49.839
+we are currently in buffer mode while we
+are in tower mode.
-00:12:45.920 --> 00:12:49.200
-in buffer mode while we are in tower
+00:12:49.839 --> 00:12:53.151
+Tower mode actually isn't a mode really.
+Neither is mode mode.
-00:12:49.200 --> 00:12:49.839
-mode.
+00:12:53.151 --> 00:12:58.000
+They're really referential planes or
+meta planes.
-00:12:49.839 --> 00:12:51.600
-Tower mode actually isn't a mode
-
-00:12:51.600 --> 00:12:53.519
-really. Neither is mode mode. They're
-
-00:12:53.519 --> 00:12:53.920
-really
-
-00:12:53.920 --> 00:12:58.000
-referential planes or meta planes.
-
-00:12:58.000 --> 00:13:00.959
+00:12:58.000 --> 00:13:01.679
In any case, you can see that we're in
+buffer mode.
-00:13:00.959 --> 00:13:03.120
-buffer mode. We can take a meta jump
-
-00:13:03.120 --> 00:13:04.560
-out of this to confirm
-
-00:13:04.560 --> 00:13:07.120
-that buffer mode is the only mode
-
-00:13:07.120 --> 00:13:08.000
-available
+00:13:01.679 --> 00:13:03.840
+We can take a meta jump out of this
-00:13:08.000 --> 00:13:10.560
-when we're editing towers because that's
+00:13:03.840 --> 00:13:08.000
+to confirm that buffer mode is the only
+mode available
-00:13:10.560 --> 00:13:11.200
-the one
+00:13:08.000 --> 00:13:09.664
+when we're editing towers
-00:13:11.200 --> 00:13:14.240
-we need, given that our towers are
+00:13:09.664 --> 00:13:11.915
+because that's the one we need,
-00:13:14.240 --> 00:13:15.200
-represented
+00:13:11.915 --> 00:13:23.200
+given that our towers are represented in
+individual buffers.
-00:13:15.200 --> 00:13:23.200
-in individual buffers.
+00:13:23.200 --> 00:13:26.320
+Right. So let's see where we're at.
-00:13:23.200 --> 00:13:26.000
-Right. So let's see where we're
+00:13:26.320 --> 00:13:27.785
+Rumpelstiltskin principle...
-00:13:26.000 --> 00:13:26.320
-at.
-
-00:13:26.320 --> 00:13:28.240
-Rumpelstiltskin principle... We talked
-
-00:13:28.240 --> 00:13:30.160
-about mode mode.
+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:33.920
-application of
-
-00:13:33.920 --> 00:13:37.820
-ground level modes in meta levels.
-
-00:13:39.600 --> 00:13:42.240
-We saw the different towers, and
-
-00:13:42.240 --> 00:13:43.199
-in fact,
-
-00:13:43.199 --> 00:13:46.639
-we're currently in
-
-00:13:46.639 --> 00:13:50.720
-Vim tower,
-
-00:13:50.720 --> 00:13:53.120
-where you can go to Emacs tower. Now,
+00:13:32.240 --> 00:13:37.820
+application of ground level modes in
+meta levels.
-00:13:53.120 --> 00:13:54.720
-with a single keystroke, you can
+00:13:39.600 --> 00:13:41.992
+We saw the different towers,
-00:13:54.720 --> 00:13:55.760
-alternate
+00:13:41.992 --> 00:13:50.720
+and in fact, we're currently
+in Vim tower,
-00:13:55.760 --> 00:13:59.040
-between Emacs
+00:13:50.720 --> 00:13:52.860
+where you can go to Emacs tower.
-00:13:59.040 --> 00:14:02.399
-and Vim, which are represented--which are
+00:13:52.860 --> 00:13:54.720
+Now, with a single keystroke, you can
-00:14:02.399 --> 00:14:05.519
-modeled as towers.
+00:13:54.720 --> 00:13:59.695
+alternate between Emacs and Vim,
-00:14:13.360 --> 00:14:15.360
-So there's... One thing that we've
+00:13:59.695 --> 00:14:01.638
+which are represented--
-00:14:15.360 --> 00:14:17.040
-sort of alluded to is that there are two
+00:14:01.638 --> 00:14:05.519
+which are modeled as towers.
-00:14:17.040 --> 00:14:18.160
-directions
+00:14:13.360 --> 00:14:14.760
+So there's... One thing
-00:14:18.160 --> 00:14:20.480
-that you can travel in when you're going
+00:14:14.760 --> 00:14:18.160
+that we've sort of alluded to is that
+there are two directions
-00:14:20.480 --> 00:14:22.399
-through this framework.
+00:14:18.160 --> 00:14:19.494
+that you can travel in
-00:14:22.399 --> 00:14:25.120
-One direction is--and we'll
+00:14:19.494 --> 00:14:22.399
+when you're going through this
+framework.
-00:14:25.120 --> 00:14:33.760
-visualize it like so...
+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,
@@ -1086,67 +911,53 @@ 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:40.399
+00:14:38.399 --> 00:14:41.680
If you go sideways, you're changing your
-
-00:14:40.399 --> 00:14:41.680
perspective.
00:14:41.680 --> 00:14:45.440
So normal mode, word mode, line mode,
-00:14:45.440 --> 00:14:47.360
-window mode, and so on are all different
-
-00:14:47.360 --> 00:14:49.120
-perspectives on your
+00:14:45.440 --> 00:14:46.544
+window mode, and so on
-00:14:49.120 --> 00:14:51.680
+00:14:46.544 --> 00:14:51.680
+are all different perspectives on your
ground editing experience.
-00:14:51.680 --> 00:14:53.040
-The other direction you can travel
-
-00:14:53.040 --> 00:14:55.519
-in is up or down, which takes you
-
-00:14:55.519 --> 00:14:57.920
-through meta levels. So you go from the
+00:14:51.680 --> 00:14:53.265
+The other direction you can travel in
-00:14:57.920 --> 00:14:59.600
-ground level editing experience
+00:14:53.265 --> 00:14:56.811
+is up or down, which takes you through
+meta levels.
-00:14:59.600 --> 00:15:01.920
-up to mode mode and then up to the tower
+00:14:56.811 --> 00:14:59.600
+So you go from the ground level
+editing experience,
-00:15:01.920 --> 00:15:03.440
-plane and so on
+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:03.440 --> 00:15:07.040
-and so on.
+00:15:07.040 --> 00:15:12.568
+So this all sounds very complex,
-00:15:07.040 --> 00:15:10.800
-So this all sounds
+00:15:12.568 --> 00:15:18.160
+but the truth is it's not really that
+complicated,
-00:15:10.800 --> 00:15:14.880
-very complex, but the truth is
+00:15:18.160 --> 00:15:20.699
+even though it feels that way.
-00:15:14.880 --> 00:15:18.160
-it's not really that complicated
-
-00:15:18.160 --> 00:15:21.519
-even though it feels that way. The reason
-
-00:15:21.519 --> 00:15:22.959
-it isn't that complicated
+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:28.800
+00:15:26.480 --> 00:15:30.160
up or down you go and no matter where
-
-00:15:28.800 --> 00:15:30.160
you are,
00:15:30.160 --> 00:15:32.399
@@ -1155,131 +966,102 @@ 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:36.000
-or whether you're at a meta level, some
+00:15:34.079 --> 00:15:35.802
+or whether you're at a meta level,
-00:15:36.000 --> 00:15:37.600
-unknown meta level and you don't know
+00:15:35.802 --> 00:15:39.279
+some unknown meta level and you don't
+know where you are,
-00:15:37.600 --> 00:15:39.279
-where you are,
+00:15:39.279 --> 00:15:41.133
+no matter where you are,
-00:15:39.279 --> 00:15:42.320
-no matter where you are, the way in which
-
-00:15:42.320 --> 00:15:44.399
-you interact with it
+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:52.000
-That is the great power of
-
-00:15:52.000 --> 00:15:55.440
-this approach: that
+00:15:47.519 --> 00:15:54.751
+That is the great power of this
+approach:
-00:15:55.440 --> 00:15:58.720
-all of the different levels are the
-
-00:15:58.720 --> 00:16:00.880
-same.
+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.759
-is exactly identical to the
-
-00:16:05.759 --> 00:16:08.720
-complexity of each part, so if you know
-
-00:16:08.720 --> 00:16:10.000
-how to edit words
-
-00:16:10.000 --> 00:16:12.959
-in the ground level buffer and you know
-
-00:16:12.959 --> 00:16:13.440
-how to move
+00:16:03.839 --> 00:16:05.545
+is exactly identical to
-00:16:13.440 --> 00:16:15.839
-lines around using line mode, then you
+00:16:05.545 --> 00:16:07.657
+the complexity of each part,
-00:16:15.839 --> 00:16:16.720
-know how to edit
+00:16:07.657 --> 00:16:10.000
+so if you know how to edit words
-00:16:16.720 --> 00:16:19.519
-any aspect of your editing experience at
+00:16:10.000 --> 00:16:12.048
+in the ground level buffer
-00:16:19.519 --> 00:16:22.800
-any level.
+00:16:12.048 --> 00:16:15.378
+and you know how to move lines around
+using line mode,
-00:16:30.079 --> 00:16:32.000
-So this is a pre-release demo. This
+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:32.000 --> 00:16:33.839
-doesn't exist on MELPA
+00:16:30.079 --> 00:16:31.780
+So this is a pre-release demo.
-00:16:33.839 --> 00:16:36.880
-yet, but you can follow updates
+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:36.880 --> 00:16:40.079
-at this repo on github.
+00:16:40.079 --> 00:16:43.850
+If you can also be a beta tester
-00:16:40.079 --> 00:16:44.079
-If you can also be a beta tester or
+00:16:43.850 --> 00:16:46.775
+or something like that, if you like,
+that would be very helpful.
-00:16:44.079 --> 00:16:45.199
-something like that, if you like, that
-
-00:16:45.199 --> 00:16:46.000
-would be very
-
-00:16:46.000 --> 00:16:49.199
-helpful. You can learn more about
-
-00:16:49.199 --> 00:16:50.560
-this at
+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.920
-the research that I work on. In
-
-00:16:55.920 --> 00:16:57.279
-particular
+00:16:53.920 --> 00:16:55.726
+the research that I work on.
-00:16:57.279 --> 00:17:00.800
-the research on epistemic levels is what
+00:16:55.726 --> 00:17:00.154
+In particular, the research on epistemic
+levels
-00:17:00.800 --> 00:17:03.600
-inspired this particular Emacs extension.
+00:17:00.154 --> 00:17:03.600
+is what inspired this particular Emacs
+extension.
-00:17:03.600 --> 00:17:06.480
-You can also learn about dialectical
+00:17:03.600 --> 00:17:05.600
+You can also learn about
-00:17:06.480 --> 00:17:08.480
-inheritance attribution, which is the
-
-00:17:08.480 --> 00:17:10.880
-basis of
+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:16.959
+00:17:14.559 --> 00:17:19.439
and could lead to a prosperous and happy
-
-00:17:16.959 --> 00:17:19.439
world.
-00:17:19.439 --> 00:17:22.799
-You can follow me on
-
-00:17:22.799 --> 00:17:26.319
-Twitter at @countvajhula.
+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--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
index 77ead607..f3c3133d 100644
--- 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
@@ -28,7 +28,7 @@ just a small notebook.
I wanted to do it in Emacs because,
00:00:24.720 --> 00:00:29.199
-well, Emacs can do everything, right?
+well, Emacs can do everything, right?
00:00:29.199 --> 00:00:31.359
I'm going to jump in quickly. Just so
@@ -236,7 +236,7 @@ I have an incubated action which is
00:03:33.440 --> 00:03:36.640
also scheduled: to make money through the
-lottery.
+lottery.
00:03:36.640 --> 00:03:38.640
This is a thing to take a look at
@@ -302,7 +302,7 @@ 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
+at what's underneath all of this
00:04:37.440 --> 00:04:39.600
really quickly.
@@ -314,7 +314,7 @@ We have--There's three primary files.
We have the inbox.
00:04:43.360 --> 00:04:45.759
-I'm gonna process it in a second
+I'm gonna process it in a second
00:04:45.759 --> 00:04:48.880
because there's two things here.
@@ -336,7 +336,7 @@ You can see here: make money through
the lottery,
00:05:02.000 --> 00:05:04.800
-captured, refiled here, and scheduled
+captured, refiled here, and scheduled
00:05:04.800 --> 00:05:06.560
so it would show up in the agenda
@@ -612,7 +612,7 @@ decisions you can take from GTD, right?
In this case,
00:08:45.760 --> 00:08:48.959
-this is one to throw out, so press t.
+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
@@ -767,7 +767,7 @@ 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.
+00:11:06.240 --> 00:11:08.000
look at was some of the the tests.
00:11:08.640 --> 00:11:11.120
@@ -787,7 +787,7 @@ 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,
+as important, I think,
00:11:26.000 --> 00:11:29.200
or valued quite the same way,
@@ -899,7 +899,7 @@ I wanted to be able to do this
automatically but org-capture itself
00:12:59.680 --> 00:13:02.079
-is not super testable right now,
+is not super testable right now,
00:13:02.079 --> 00:13:03.200
so the way it's...
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
index 8e82bdbd..ba6afec0 100644
--- 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
@@ -159,7 +159,7 @@ it's not too small; you just
make it a little larger--but
00:01:51.360 --> 00:01:56.719
-Carl basically has a file with
+Karl basically has a file with
00:01:56.719 --> 00:02:01.759
126,000 lines. I'm just going to pause
@@ -987,7 +987,7 @@ but it's a browser extension that is
developed by one of my friends
00:12:12.399 --> 00:12:15.680
-over at Ranger whose name is Li Fon (??) and
+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
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
index 608729bd..78d044e8 100644
--- a/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt
+++ b/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt
@@ -12,11 +12,8 @@ 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:12.559
-to putting a README file at the root of
-
-00:00:12.559 --> 00:00:13.759
-your project.
+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
@@ -25,14 +22,13 @@ It's usually a Markdown file
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
+you can take advantage of the great features
-00:00:22.560 --> 00:00:24.400
-that Org Mode provides, including
+00:00:22.560 --> 00:00:24.898
+that Org Mode provides,
-00:00:24.400 --> 00:00:25.920
-literate programming,
+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
@@ -46,20 +42,21 @@ 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.440
-When you start a project, especially if
+00:00:37.120 --> 00:00:39.607
+When you start a project,
-00:00:39.440 --> 00:00:41.280
-if you use something like Github you
+00:00:39.607 --> 00:00:41.179
+especially if you use something like Github
-00:00:41.280 --> 00:00:43.320
-begin with an automatically generated
+00:00:41.179 --> 00:00:45.913
+you begin with an automatically generated
+README.md file.
-00:00:43.320 --> 00:00:47.039
-README.md file. So just delete that
+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.
+and instead, create a README.org file.
00:00:50.239 --> 00:00:51.712
Starting with an empty Org file,
@@ -67,23 +64,21 @@ 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.559
-by recording important information about
-
-00:00:56.559 --> 00:00:59.440
-your project goals. You can add diagrams,
+00:00:54.800 --> 00:00:56.295
+by recording important information
-00:00:59.440 --> 00:01:01.920
-code snippets, to-do lists, time tracking
+00:00:56.295 --> 00:00:59.440
+about your project goals. You can add diagrams,
-00:01:01.920 --> 00:01:03.520
-and much more.
+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 that I've written about
+that I've written about
00:01:07.760 --> 00:01:12.240
about my project here, so you can see
@@ -91,20 +86,20 @@ 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.119
-As you can see, I have a title, and a
+00:01:15.280 --> 00:01:17.870
+As you can see, I have a title,
-00:01:17.119 --> 00:01:20.320
-description, and then a subsection
+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.520
-You can see that Org Mode does a great
+00:01:23.840 --> 00:01:25.210
+You can see that Org Mode does
-00:01:25.520 --> 00:01:28.240
-job of formatting lists,
+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.
@@ -113,34 +108,32 @@ code sections, diagrams, and so forth.
It's as good or better than Markdown,
00:01:35.040 --> 00:01:37.179
-but when you use it in Emacs
+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:40.479
+00:01:38.880 --> 00:01:43.360
For example, you can dynamically create
-
-00:01:40.479 --> 00:01:43.360
diagrams using Graphviz
-00:01:43.360 --> 00:01:45.200
-from a text description. If you go to
-
-00:01:45.200 --> 00:01:46.560
-this source block here
+00:01:43.360 --> 00:01:45.553
+from a text description.
-00:01:46.560 --> 00:01:49.439
-and hit C-c C-c, you'll see
+00:01:45.553 --> 00:01:48.266
+If you go to this source block here
+and hit C-c C-c,
-00:01:49.439 --> 00:01:52.979
-that we generate a diagram dynamically
+00:01:48.266 --> 00:01:52.979
+you'll see that we generate a diagram
+dynamically.
-00:01:55.439 --> 00:01:59.200
+00:01:55.439 --> 00:02:00.519
You can run these code snippets in
+place
-00:01:59.200 --> 00:02:00.799
-place and get the results
+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,
@@ -148,17 +141,11 @@ 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:10.640
-But most importantly, for
+00:02:08.000 --> 00:02:14.800
+But most importantly, for my purposes here,
-00:02:10.640 --> 00:02:14.800
-my purposes here,
-
-00:02:14.800 --> 00:02:17.200
-Org Mode provides you the ability to do
-
-00:02:17.200 --> 00:02:19.520
-literate programming.
+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
@@ -166,53 +153,46 @@ 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.312
-It gives you a quick overview of what
-
-00:02:25.312 --> 00:02:27.520
-I mean by literate programming
-
-00:02:27.520 --> 00:02:31.200
-and how I'm using it. You can see
+00:02:23.200 --> 00:02:25.912
+It gives you a quick overview
-00:02:31.200 --> 00:02:34.720
-that we start with a README.org file
-on top.
+00:02:25.912 --> 00:02:27.520
+of what I mean by literate programming
-00:02:34.720 --> 00:02:37.920
-At this point, we can do one of two
-things:
+00:02:27.520 --> 00:02:30.973
+and how I'm using it.
-00:02:37.920 --> 00:02:41.280
-tangle or weave. Tangle is used to
+00:02:30.973 --> 00:02:34.720
+You can see that we start with a README.org file on top.
-00:02:41.280 --> 00:02:42.720
-describe the process of
+00:02:34.720 --> 00:02:40.501
+At this point, we can do one of two things:
+tangle or weave.
-00:02:42.720 --> 00:02:46.319
-generating source code, while weave
+00:02:40.501 --> 00:02:43.611
+Tangle is used to describe the process
-00:02:46.319 --> 00:02:47.599
-is the process of generating
+00:02:43.611 --> 00:02:45.463
+of generating source code,
-00:02:47.599 --> 00:02:49.840
-documentation. These are terms that
+00:02:45.463 --> 00:02:48.495
+while weave is the process of generating
+documentation.
-00:02:49.840 --> 00:02:51.920
-Donald Knuth used.
+00:02:48.495 --> 00:02:51.920
+These are terms that Donald Knuth used.
-00:02:51.920 --> 00:02:53.840
-He's the one that came up with the
+00:02:51.920 --> 00:02:53.388
+He's the one that came up
-00:02:53.840 --> 00:02:55.519
-idea of literate programming
+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.
+But this is really all that there is to it.
00:03:01.945 --> 00:03:05.412
You just... You are simply
@@ -220,32 +200,26 @@ 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.319
-in this case the README.org, to generate
+00:03:07.840 --> 00:03:10.575
+in this case the README.org,
-00:03:11.680 --> 00:03:17.120
-the rest of the project files, basically.
+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.
+So let's dig in to the details of how this works.
-00:03:22.640 --> 00:03:24.560
-I hope you... Hopefully you'll see how
-
-00:03:24.560 --> 00:03:26.159
-cool this is.
+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,
+Let's assume we have enough documentation now,
00:03:31.120 --> 00:03:32.679
-that we want to get started
-coding.
+that we want to get started coding.
00:03:32.679 --> 00:03:34.159
So maybe we'll just start with
@@ -265,46 +239,38 @@ 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.612
-add a source block for
+00:03:49.519 --> 00:03:51.326
+add a source block
-00:03:51.612 --> 00:03:53.599
-literate programming quickly.
+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:04.080
-Excuse me. There's a property
+but there are some important annotations here.
-00:04:04.080 --> 00:04:05.200
-called :tangle
+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:13.280
-Then there's also a :noweb property
-
-00:04:13.280 --> 00:04:18.880
-called no-export.
+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
+that a little bit more later...
00:04:29.645 --> 00:04:32.080
-It has has to do with how
+It has to do with how
00:04:32.080 --> 00:04:36.845
-the tangling is done in the tangle
-step
+the tangling is done in the tangle step
00:04:36.845 --> 00:04:38.479
versus the weave step.
@@ -312,29 +278,27 @@ 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:45.199
+00:04:40.212 --> 00:04:46.719
But the tangle field just simply tells
+Emacs
-00:04:45.199 --> 00:04:48.320
-Emacs where it needs to generate the
-
-00:04:48.320 --> 00:04:50.320
-main.go file and where it needs to put
+00:04:46.719 --> 00:04:48.320
+where it needs to generate the
-00:04:50.320 --> 00:04:55.360
-it on the file system.
+00:04:48.320 --> 00:04:49.951
+main.go file
-00:04:55.360 --> 00:04:57.680
-You'll notice that we we're
+00:04:49.951 --> 00:04:55.360
+and where it needs to put it on the file system.
-00:04:57.680 --> 00:04:59.040
-going to use Go.
+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.440
-That's just the language that I've been
+00:04:59.040 --> 00:05:01.578
+That's just the language
-00:05:01.440 --> 00:05:03.379
-using the most lately,
+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
@@ -348,11 +312,12 @@ You could use any language
00:05:11.279 --> 00:05:13.145
or any mix of languages.
-00:05:13.145 --> 00:05:14.720
+00:05:13.145 --> 00:05:15.377
You could create some files
+in Python,
-00:05:14.720 --> 00:05:16.560
-in Python, some files in Go,
+00:05:15.377 --> 00:05:16.560
+some files in Go,
00:05:16.560 --> 00:05:19.179
some files in Lisp,
@@ -361,8 +326,7 @@ some files in Lisp,
or whatever you want.
00:05:24.720 --> 00:05:29.440
-Let's create just a little
-Hello World.
+Let's create just a little Hello World.
00:05:29.440 --> 00:05:31.379
Let's use another snippet here
@@ -370,33 +334,22 @@ 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:40.240
-I'm just going to print
+00:05:36.560 --> 00:05:44.960
+I'm just going to print Hello World.
-00:05:40.240 --> 00:05:44.960
-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:44.960 --> 00:05:48.560
-So that's... And then
+00:05:52.779 --> 00:05:56.400
+So now you can see, we've got this snippet.
-00:05:48.560 --> 00:05:52.779
-let's make it a section in our file.
-
-00:05:52.779 --> 00:05:55.045
-So now you can see, we've got
-
-00:05:55.045 --> 00:05:56.400
-this snippet.
-
-00:05:56.400 --> 00:05:59.600
+00:05:56.400 --> 00:06:01.600
When you have a source block in
-
-00:05:59.600 --> 00:06:01.600
-inside of Org Mode, you can easily pop
+inside of Org Mode,
00:06:01.600 --> 00:06:04.960
-into a language-specific buffer
-by typing
+you can easily pop into a
+language-specific buffer by typing
00:06:04.960 --> 00:06:07.680
C-c ' (single quote).
@@ -541,7 +494,7 @@ telling us that
we've tangled one file called main.go.
00:08:07.680 --> 00:08:11.039
-You can see that that's true
+You can see that's true
00:08:11.039 --> 00:08:12.879
if you go to the file system
@@ -1164,7 +1117,7 @@ I showed you in the diagram above.
So one more time, we'll drop in
00:17:38.640 --> 00:17:41.760
-some documentatio, this time on how
+some documentation, this time on how
00:17:41.760 --> 00:17:42.400
to weave.
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
index 53ce5b05..fbf4ae9b 100644
--- 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
@@ -172,9 +172,9 @@ headings and sections if you use LaTeX,
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:17.760
+I like Org inline tasks
+because I can add
00:02:19.120 --> 00:02:21.520
TODOs between two paragraphs. That
diff --git a/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt
index 21222a11..a2e0ccae 100644
--- a/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt
+++ b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt
@@ -30,7 +30,7 @@ have some time.)
([Amin:] Yeah, go for it.)
00:00:19.039 --> 00:00:20.720
-Well, I'll just drive into my
+Well, I'll just dive into my
00:00:20.720 --> 00:00:22.384
prepared thing here then.
diff --git a/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt b/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt
deleted file mode 100644
index e9bcd225..00000000
--- a/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt
+++ /dev/null
@@ -1,3301 +0,0 @@
-WEBVTT
-
-00:00:00.080 --> 00:00:02.639
-hi my name is eduardo x I'm this person
-
-00:00:02.639 --> 00:00:03.439
-here
-
-00:00:03.439 --> 00:00:06.240
-and the title of this talk is on why
-
-00:00:06.240 --> 00:00:07.120
-most of
-
-00:00:07.120 --> 00:00:09.519
-most of the best features in ev look
-
-00:00:09.519 --> 00:00:11.599
-like five minute hacks
-
-00:00:11.599 --> 00:00:13.759
-and this is a presentation at the max
-
-00:00:13.759 --> 00:00:15.280
-conf 2020
-
-00:00:15.280 --> 00:00:23.199
-happening in november 22 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
-and here I'm going to explain some
-
-00:00:27.680 --> 00:00:29.840
-some ideas that are prerequisites for
-
-00:00:29.840 --> 00:00:31.039
-understanding the rest of the
-
-00:00:31.039 --> 00:00:32.320
-presentation
-
-00:00:32.320 --> 00:00:35.440
-the three main keys of ev are matay meta
-
-00:00:35.440 --> 00:00:35.760
-k
-
-00:00:35.760 --> 00:00:37.920
-and mata j and I'm going to start by
-
-00:00:37.920 --> 00:00:42.079
-explaining metae and meta k
-
-00:00:42.079 --> 00:00:44.960
-metae is used to follow hyperlink and
-
-00:00:44.960 --> 00:00:46.800
-technically it is
-
-00:00:46.800 --> 00:00:49.680
-essentially just a ctrl e to move to the
-
-00:00:49.680 --> 00:00:50.879
-end of the line and then
-
-00:00:50.879 --> 00:00:54.320
-a ctrl x control e to execute this the
-
-00:00:54.320 --> 00:00:58.960
-sext before point at the end of the line
-
-00:00:58.960 --> 00:01:00.879
-and the thing is that a max comes with
-
-00:01:00.879 --> 00:01:03.120
-many functions that can be used as sex
-
-00:01:03.120 --> 00:01:05.040
-hyperlinks
-
-00:01:05.040 --> 00:01:07.040
-we can consider that they point to
-
-00:01:07.040 --> 00:01:09.040
-somewhere I'm going to refer to that as
-
-00:01:09.040 --> 00:01:09.520
-the
-
-00:01:09.520 --> 00:01:11.920
-target of the hyperlink and if we
-
-00:01:11.920 --> 00:01:12.960
-execute this
-
-00:01:12.960 --> 00:01:15.759
-sex paper links would 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 demand paid 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 skilling the the current buffer
-
-00:01:29.840 --> 00:01:30.720
-that the hyperlink
-
-00:01:30.720 --> 00:01:34.400
-created 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:44.640
-we have to either
-
-00:01:44.640 --> 00:01:52.840
-click here or type ctrl x50
-
-00:01:52.840 --> 00:01:54.880
-uh
-
-00:01:54.880 --> 00:01:57.520
-so here are some examples of sex
-
-00:01:57.520 --> 00:02:00.640
-hyperlinks using standard max functions
-
-00:02:00.640 --> 00:02:03.600
-this third one is uh badly behaved in a
-
-00:02:03.600 --> 00:02:04.880
-different way
-
-00:02:04.880 --> 00:02:08.879
-if executed we the target is created in
-
-00:02:08.879 --> 00:02:09.840
-the same window
-
-00:02:09.840 --> 00:02:13.840
-as we are now but it also shows a lot of
-
-00:02:13.840 --> 00:02:16.000
-garbage here in the aqua area so
-
-00:02:16.000 --> 00:02:20.840
-the the current frame becomes a bit
-
-00:02:20.840 --> 00:02:23.280
-messy
-
-00:02:23.280 --> 00:02:26.160
-and well one of the first things that I
-
-00:02:26.160 --> 00:02:28.319
-did when I was creating av
-
-00:02:28.319 --> 00:02:30.720
-many many years ago was that I created
-
-00:02:30.720 --> 00:02:31.680
-variants
-
-00:02:31.680 --> 00:02:34.840
-of all these functions that were better
-
-00:02:34.840 --> 00:02:36.640
-behaved
-
-00:02:36.640 --> 00:02:38.640
-and they were better behaved in two
-
-00:02:38.640 --> 00:02:40.480
-senses the obvious one
-
-00:02:40.480 --> 00:02:43.040
-was that they they all created the
-
-00:02:43.040 --> 00:02:43.680
-target
-
-00:02:43.680 --> 00:02:45.840
-in the same window as before so I could
-
-00:02:45.840 --> 00:02:48.720
-go back by just typing meta k
-
-00:02:48.720 --> 00:02:51.040
-which is essentially just killed this
-
-00:02:51.040 --> 00:02:52.879
-buffer
-
-00:02:52.879 --> 00:02:55.200
-and well but I also implemented
-
-00:02:55.200 --> 00:02:56.480
-something extra that
-
-00:02:56.480 --> 00:02:59.040
-are the post back lists for example for
-
-00:02:59.040 --> 00:02:59.840
-example these
-
-00:02:59.840 --> 00:03:03.599
-extra arguments here are a postback list
-
-00:03:03.599 --> 00:03:06.080
-and this extra arguments specify
-
-00:03:06.080 --> 00:03:09.599
-position and the target buffer
-
-00:03:09.599 --> 00:03:13.040
-and in this example this this spot
-
-00:03:13.040 --> 00:03:16.720
-spec list means starting from the from
-
-00:03:16.720 --> 00:03:18.239
-the beginning of the buffer
-
-00:03:18.239 --> 00:03:20.560
-search for the first occurrence of this
-
-00:03:20.560 --> 00:03:22.239
-string
-
-00:03:22.239 --> 00:03:24.159
-after that after the beginning of the
-
-00:03:24.159 --> 00:03:25.519
-buffer and then
-
-00:03:25.519 --> 00:03:28.159
-search for the first occurrence of this
-
-00:03:28.159 --> 00:03:29.120
-string
-
-00:03:29.120 --> 00:03:33.760
-after that
-
-00:03:33.760 --> 00:03:36.560
-eev also defines some hyperlinks that do
-
-00:03:36.560 --> 00:03:38.799
-not create new buffers
-
-00:03:38.799 --> 00:03:41.280
-uh here is the first example if I
-
-00:03:41.280 --> 00:03:41.840
-execute
-
-00:03:41.840 --> 00:03:45.920
-this one this one is a hyperlink to the
-
-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 uh
-
-00:03:50.720 --> 00:03:52.959
-but instead of showing the result in the
-
-00:03:52.959 --> 00:03:55.040
-new buffer the result is shown
-
-00:03:55.040 --> 00:03:58.959
-here so if execute to this type link
-
-00:03:58.959 --> 00:04:01.840
-the result of date the output of data is
-
-00:04:01.840 --> 00:04:04.239
-shown in the echo area and if executed
-
-00:04:04.239 --> 00:04:07.120
-again
-
-00:04:07.120 --> 00:04:09.519
-it shows the result again and the result
-
-00:04:09.519 --> 00:04:11.519
-changes every second
-
-00:04:11.519 --> 00:04:15.200
-and if so this is a variant
-
-00:04:15.200 --> 00:04:18.720
-of fine sh
-
-00:04:18.720 --> 00:04:21.840
-uh 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
-and here is an example of a hyperlink
-
-00:04:35.919 --> 00:04:37.520
-that
-
-00:04:37.520 --> 00:04:40.000
-calls an external program if execute
-
-00:04:40.000 --> 00:04:41.280
-this
-
-00:04:41.280 --> 00:04:43.759
-it it calls google chrome to open a
-
-00:04:43.759 --> 00:04:46.639
-certain url
-
-00:04:46.639 --> 00:04:51.520
-here it is let's go back to mx
-
-00:04:51.520 --> 00:04:55.280
-if execute this happening here
-
-00:04:55.280 --> 00:04:58.479
-it invokes my favorite pdf viewer which
-
-00:04:58.479 --> 00:04:58.880
-is
-
-00:04:58.880 --> 00:05:02.560
-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 this other arguments
-
-00:05:10.880 --> 00:05:15.199
-are ignored let me show how it works
-
-00:05:15.199 --> 00:05:19.120
-here it is this is a an accept from a
-
-00:05:19.120 --> 00:05:20.160
-book
-
-00:05:20.160 --> 00:05:22.639
-so page 3 and the pdf corresponds to
-
-00:05:22.639 --> 00:05:23.199
-page
-
-00:05:23.199 --> 00:05:26.400
-113 in the book and
-
-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 pdf to text on
-
-00:05:34.560 --> 00:05:36.479
-this pdf here
-
-00:05:36.479 --> 00:05:39.600
-and max takes the output of
-
-00:05:39.600 --> 00:05:42.880
-run epd after text on this pdf here
-
-00:05:42.880 --> 00:05:46.080
-and displays it in a buffer and now this
-
-00:05:46.080 --> 00:05:47.280
-postback list
-
-00:05:47.280 --> 00:05:50.000
-is interpreted in a different way this
-
-00:05:50.000 --> 00:05:51.280
-thing is interpreted
-
-00:05:51.280 --> 00:05:54.400
-as a as a number of a page and a max
-
-00:05:54.400 --> 00:05:54.800
-goes
-
-00:05:54.800 --> 00:05:57.520
-to page three by counting form feeds in
-
-00:05:57.520 --> 00:05:58.240
-the
-
-00:05:58.240 --> 00:06:01.440
-converted version of the pdf and then it
-
-00:06:01.440 --> 00:06:03.039
-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:08.479
-to see what happens
-
-00:06:08.479 --> 00:06:10.800
-here it is I opened the same page as
-
-00:06:10.800 --> 00:06:14.800
-before
-
-00:06:14.800 --> 00:06:18.400
-it starts with lecture one so
-
-00:06:18.400 --> 00:06:20.720
-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:28.160
-uh and this thing here is a hyperlink to
-
-00:06:28.160 --> 00:06:30.400
-video
-
-00:06:30.400 --> 00:06:32.720
-and when I executed it's going to open
-
-00:06:32.720 --> 00:06:34.560
-this video here
-
-00:06:34.560 --> 00:06:37.759
-at this time this time stamp let's see
-
-00:06:37.759 --> 00:06:41.199
-one two three one
-
-00:06:41.199 --> 00:06:46.840
-two three that's the way to do
-
-00:06:46.840 --> 00:06:49.440
-it
-
-00:06:49.440 --> 00:06:52.560
-and also some hyperlinks that that I
-
-00:06:52.560 --> 00:06:53.680
-defined
-
-00:06:53.680 --> 00:06:56.479
-uh they don't work like like usual
-
-00:06:56.479 --> 00:06:58.160
-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:13.280
-just do something to change the current
-
-00:07:13.280 --> 00:07:14.960
-page
-
-00:07:14.960 --> 00:07:18.160
-if I execute this the action of this
-
-00:07:18.160 --> 00:07:18.880
-function
-
-00:07:18.880 --> 00:07:22.240
-eek is to uh
-
-00:07:22.240 --> 00:07:24.800
-it interprets this string as a series of
-
-00:07:24.800 --> 00:07:25.919
-keys and it
-
-00:07:25.919 --> 00:07:28.840
-acts as if the user had typed all these
-
-00:07:28.840 --> 00:07:30.319
-keys so
-
-00:07:30.319 --> 00:07:33.680
-if executed I get a hello in the next
-
-00:07:33.680 --> 00:07:34.400
-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 sex here at this moment though is
-
-00:07:54.879 --> 00:07:55.759
-not defined
-
-00:07:55.759 --> 00:07:57.919
-and if I execute this mx is going to
-
-00:07:57.919 --> 00:08:00.000
-show me a message saying
-
-00:08:00.000 --> 00:08:03.599
-uh symbols 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 defund
-
-00:08:09.520 --> 00:08:12.960
-this the action of this function o here
-
-00:08:12.960 --> 00:08:16.479
-is to run this which opens a certain
-
-00:08:16.479 --> 00:08:18.960
-directory
-
-00:08:18.960 --> 00:08:21.840
-let me go back and here is another
-
-00:08:21.840 --> 00:08:23.039
-button that defines
-
-00:08:23.039 --> 00:08:25.840
-several functions at the same time if I
-
-00:08:25.840 --> 00:08:26.479
-execute
-
-00:08:26.479 --> 00:08:32.320
-this
-
-00:08:32.320 --> 00:08:35.599
-note that the the result of executing
-
-00:08:35.599 --> 00:08:36.719
-this expression
-
-00:08:36.719 --> 00:08:38.640
-is the name of one of the functions that
-
-00:08:38.640 --> 00:08:40.080
-it defined
-
-00:08:40.080 --> 00:08:42.800
-that is this one here and let me explain
-
-00:08:42.800 --> 00:08:43.360
-the
-
-00:08:43.360 --> 00:08:46.959
-these examples uh 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 or git file where
-
-00:08:51.839 --> 00:08:54.640
-this or gate in the middle of its name
-
-00:08:54.640 --> 00:08:55.040
-is
-
-00:08:55.040 --> 00:08:59.600
-exactly this first argument to code cd
-
-00:08:59.600 --> 00:09:02.640
-and the action of running find or get
-
-00:09:02.640 --> 00:09:03.120
-file
-
-00:09:03.120 --> 00:09:06.399
-on a string like this is that
-
-00:09:06.399 --> 00:09:09.680
-find or get file 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 called cd
-
-00:09:17.920 --> 00:09:21.760
-and then it executes find flying
-
-00:09:21.760 --> 00:09:25.680
-on the result which is this one
-
-00:09:25.680 --> 00:09:28.320
-and fine flying is my variant of find
-
-00:09:28.320 --> 00:09:28.800
-file
-
-00:09:28.800 --> 00:09:32.080
-that supports both spec lists
-
-00:09:32.080 --> 00:09:36.880
-and this function here that I'm
-
-00:09:36.880 --> 00:09:39.600
-referring to as a button it also defines
-
-00:09:39.600 --> 00:09:41.200
-a function called
-
-00:09:41.200 --> 00:09:44.880
-find audit node here where the or gate
-
-00:09:44.880 --> 00:09:46.080
-is the same string
-
-00:09:46.080 --> 00:09:50.320
-as here and this function opens a node
-
-00:09:50.320 --> 00:09:54.160
-of of an info manual this one
-
-00:09:54.160 --> 00:09:57.920
-this text here opens this node in the
-
-00:09:57.920 --> 00:10:00.080
-org manual
-
-00:10:00.080 --> 00:10:03.519
-it is equivalent to this text here
-
-00:10:03.519 --> 00:10:06.800
-so in the passage from this line to this
-
-00:10:06.800 --> 00:10:08.720
-line we prepended
-
-00:10:08.720 --> 00:10:11.920
-to the node name the name of the manual
-
-00:10:11.920 --> 00:10:15.040
-here and find node is my variant
-
-00:10:15.040 --> 00:10:18.160
-of this standard mx function here
-
-00:10:18.160 --> 00:10:20.399
-but find node also supports post
-
-00:10:20.399 --> 00:10:23.519
-backlists
-
-00:10:23.519 --> 00:10:26.640
-eevee also defines some functions that
-
-00:10:26.640 --> 00:10:28.640
-define shorter hyperlinks to pdfs and
-
-00:10:28.640 --> 00:10:30.800
-videos
-
-00:10:30.800 --> 00:10:32.880
-remember that this thing here is a
-
-00:10:32.880 --> 00:10:34.720
-shorter hyperlink to a
-
-00:10:34.720 --> 00:10:37.120
-to a file and this thing here is a
-
-00:10:37.120 --> 00:10:39.040
-shorter hyperlink to a node and
-
-00:10:39.040 --> 00:10:43.200
-in an mx menu in an info manual
-
-00:10:43.200 --> 00:10:46.079
-uh if we run this thing here this code
-
-00:10:46.079 --> 00:10:47.279
-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.399
-and this string this other sex
-
-00:10:56.399 --> 00:10:59.040
-here defines another function the first
-
-00:10:59.040 --> 00:11:00.240
-one defines
-
-00:11:00.240 --> 00:11:03.040
-the function find funcspivac page and
-
-00:11:03.040 --> 00:11:05.360
-the second one defines the function find
-
-00:11:05.360 --> 00:11:09.279
-from text when we run the
-
-00:11:09.279 --> 00:11:12.240
-file when we run findfoxpivotpage it
-
-00:11:12.240 --> 00:11:13.440
-opens
-
-00:11:13.440 --> 00:11:17.600
-this pdf here the name is
-
-00:11:17.600 --> 00:11:20.640
-quite long uh
-
-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:28.000
-oops sorry in this case
-
-00:11:28.000 --> 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:37.360 --> 00:11:42.640
-ah we got
-
-00:11:42.640 --> 00:11:45.200
-here it is uh the contents of a book
-
-00:11:45.200 --> 00:11:46.880
-that is freely
-
-00:11:46.880 --> 00:11:50.800
-available uh here is another page of the
-
-00:11:50.800 --> 00:11:51.760
-book
-
-00:11:51.760 --> 00:11:55.040
-and if we execute the this happening
-
-00:11:55.040 --> 00:11:55.519
-here
-
-00:11:55.519 --> 00:11:58.399
-find funk's pivot text it converts the
-
-00:11:58.399 --> 00:11:59.920
-pdf to text
-
-00:11:59.920 --> 00:12:03.040
-and it searches for the page eight
-
-00:12:03.040 --> 00:12:05.040
-in it and then for the string this
-
-00:12:05.040 --> 00:12:08.079
-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.320
-ascii version of this contents page
-
-00:12:20.320 --> 00:12:25.040
-here uh 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.680
-uh I have the full index somewhere but
-
-00:12:31.680 --> 00:12:33.600
-it's very long so I just copied a few
-
-00:12:33.600 --> 00:12:34.959
-lines here
-
-00:12:34.959 --> 00:12:38.959
-uh so this is a link to the to set
-
-00:12:38.959 --> 00:12:42.160
-section one chapter one this is the
-
-00:12:42.160 --> 00:12:45.360
-section 1.1
-
-00:12:45.360 --> 00:12:48.959
-section 1.1.1 and so on
-
-00:12:48.959 --> 00:12:54.000
-and here is a link to the index
-
-00:12:54.000 --> 00:12:58.079
-and here is a part of my index
-
-00:12:58.079 --> 00:13:02.800
-of positions in the video that we just
-
-00:13:02.800 --> 00:13:03.279
-saw
-
-00:13:03.279 --> 00:13:05.760
-that I think that are especially
-
-00:13:05.760 --> 00:13:07.360
-relevant
-
-00:13:07.360 --> 00:13:10.639
-uh so this I believe
-
-00:13:10.639 --> 00:13:12.399
-hyperlink is a kind of a button that
-
-00:13:12.399 --> 00:13:14.160
-defines this function here
-
-00:13:14.160 --> 00:13:18.839
-find punch and punch into the video
-
-00:13:18.839 --> 00:13:27.600
-uh
-
-00:13:27.600 --> 00:13:31.440
-and we can also use this for video
-
-00:13:31.440 --> 00:13:33.360
-tutorials for example
-
-00:13:33.360 --> 00:13:37.200
-this is a very good tutorial on on magic
-
-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 magic
-
-00:13:48.399 --> 00:13:50.079
-these are some of the positions in the
-
-00:13:50.079 --> 00:13:51.839
-tutorial that I found especially
-
-00:13:51.839 --> 00:13:53.920
-especially relevant this is a very dense
-
-00:13:53.920 --> 00:13:55.600
-tutorial I had to take notes of
-
-00:13:55.600 --> 00:13:56.480
-everything
-
-00:13:56.480 --> 00:13:59.040
-and I had to watch everything things
-
-00:13:59.040 --> 00:14:00.800
-several times
-
-00:14:00.800 --> 00:14:03.440
-and for example this is a link to the
-
-00:14:03.440 --> 00:14:06.480
-position in the tutorial that explains
-
-00:14:06.480 --> 00:14:09.600
-uh how in space
-
-00:14:09.600 --> 00:14:12.880
-space max magic magic
-
-00:14:12.880 --> 00:14:17.600
-interprets space gs magic status
-
-00:14:17.600 --> 00:14:20.480
-let's see beginners space gs to initiate
-
-00:14:20.480 --> 00:14:22.320
-magic's git status
-
-00:14:22.320 --> 00:14:25.600
-uh you can also do that's it
-
-00:14:25.600 --> 00:14:28.800
-and here are some examples that I
-
-00:14:28.800 --> 00:14:32.160
-took from somewhere else the video
-
-00:14:32.160 --> 00:14:34.240
-tutorials from
-
-00:14:34.240 --> 00:14:43.519
-ralph koenig about org mode
-
-00:14:43.519 --> 00:14:45.519
-now let me show how the functions that
-
-00:14:45.519 --> 00:14:47.440
-define this router hyperlinks are
-
-00:14:47.440 --> 00:14:48.720
-implemented
-
-00:14:48.720 --> 00:14:51.199
-the standard ways in max to define
-
-00:14:51.199 --> 00:14:52.480
-functions that define
-
-00:14:52.480 --> 00:14:55.760
-other functions would be with macros uh
-
-00:14:55.760 --> 00:14:58.320
-let's see an example this is a standard
-
-00:14:58.320 --> 00:14:59.040
-function that
-
-00:14:59.040 --> 00:15:01.540
-defines new functions
-
-00:15:01.540 --> 00:15:02.959
-[Music]
-
-00:15:02.959 --> 00:15:06.959
-and if we execute it one of the res
-
-00:15:06.959 --> 00:15:09.040
-its result is the last function that it
-
-00:15:09.040 --> 00:15:10.160
-defined which is
-
-00:15:10.160 --> 00:15:13.920
-e-grief 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:19.360
-look at the result of macro expand which
-
-00:15:19.360 --> 00:15:20.880
-is going to show
-
-00:15:20.880 --> 00:15:23.519
-show us the result of of this of the
-
-00:15:23.519 --> 00:15:25.519
-expansion of this
-
-00:15:25.519 --> 00:15:28.000
-instead of expanding and executing it
-
-00:15:28.000 --> 00:15:28.959
-just
-
-00:15:28.959 --> 00:15:33.199
-expands and shows us the result
-
-00:15:33.199 --> 00:15:36.000
-here the result is a bit messy is too
-
-00:15:36.000 --> 00:15:37.600
-big for
-
-00:15:37.600 --> 00:15:40.959
-humans to understand but we can run
-
-00:15:40.959 --> 00:15:44.240
-this or this text here that takes that
-
-00:15:44.240 --> 00:15:47.519
-that result and pretty prints it
-
-00:15:47.519 --> 00:15:50.959
-so this is the pretty printed version of
-
-00:15:50.959 --> 00:15:54.000
-uh 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:09.920
-to
-
-00:16:09.920 --> 00:16:13.839
-the definition of cld struct
-
-00:16:13.839 --> 00:16:16.880
-and note that the code is huge uh
-
-00:16:16.880 --> 00:16:19.199
-well it's very well commented but it's
-
-00:16:19.199 --> 00:16:20.079
-it has
-
-00:16:20.079 --> 00:16:23.759
-lots of special cases it has uh
-
-00:16:23.759 --> 00:16:26.959
-it supports lots of constructions and so
-
-00:16:26.959 --> 00:16:27.920
-it's huge and
-
-00:16:27.920 --> 00:16:30.639
-it's very difficult to understand I mean
-
-00:16:30.639 --> 00:16:33.360
-I found it very difficult to understand
-
-00:16:33.360 --> 00:16:35.040
-and here's a link to document the
-
-00:16:35.040 --> 00:16:37.759
-documentation of cld struct
-
-00:16:37.759 --> 00:16:42.000
-here in the manual for
-
-00:16:42.000 --> 00:16:46.000
-cl which is a kind of support for some
-
-00:16:46.000 --> 00:16:50.480
-features of common lisp in the max
-
-00:16:50.480 --> 00:16:53.600
-so let's compare this standard way of
-
-00:16:53.600 --> 00:16:54.639
-defining
-
-00:16:54.639 --> 00:16:56.560
-functions that define new functions
-
-00:16:56.560 --> 00:16:58.320
-which is with macros
-
-00:16:58.320 --> 00:17:01.680
-with this I'm going to use a slogan
-
-00:17:01.680 --> 00:17:04.160
-repeatedly the slogan is I am a very bad
-
-00:17:04.160 --> 00:17:06.319
-programmer
-
-00:17:06.319 --> 00:17:08.880
-I'm a very bad programmer so when I was
-
-00:17:08.880 --> 00:17:10.640
-trying to create functions that would
-
-00:17:10.640 --> 00:17:12.240
-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:23.199
-the code cd that we saw in the previous
-
-00:17:23.199 --> 00:17:24.640
-section
-
-00:17:24.640 --> 00:17:28.079
-we can see the the code that it produces
-
-00:17:28.079 --> 00:17:29.039
-by
-
-00:17:29.039 --> 00:17:31.039
-making a copy of this line and
-
-00:17:31.039 --> 00:17:33.280
-prepending this string here to the name
-
-00:17:33.280 --> 00:17:34.480
-of the function
-
-00:17:34.480 --> 00:17:36.720
-so instead of running code cd we run
-
-00:17:36.720 --> 00:17:38.400
-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 cd would execute
-
-00:17:47.760 --> 00:17:50.320
-so it's a series of the fonts and a few
-
-00:17:50.320 --> 00:17:54.080
-set cues and so on
-
-00:17:54.080 --> 00:17:57.600
-and this thing is implemented mostly as
-
-00:17:57.600 --> 00:17:59.120
-a template
-
-00:17:59.120 --> 00:18:02.160
-uh the lola the
-
-00:18:02.160 --> 00:18:04.160
-there's an inner function called ee
-
-00:18:04.160 --> 00:18:06.240
-called cd 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 just runs the function
-
-00:18:10.640 --> 00:18:14.320
-e template zero 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
-uh 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 but
-
-00:18:37.280 --> 00:18:37.760
-um
-
-00:18:37.760 --> 00:18:39.679
-we are 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 so on
-
-00:18:48.480 --> 00:18:50.320
-in the beginning I said that the three
-
-00:18:50.320 --> 00:18:51.600
-main keys of av
-
-00:18:51.600 --> 00:18:56.000
-are meta e meta k and meta j
-
-00:18:56.000 --> 00:19:00.080
-let's see now what met what meta j does
-
-00:19:00.080 --> 00:19:01.520
-uh but I need to start with some
-
-00:19:01.520 --> 00:19:04.640
-motivation uh 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 and 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 the fund 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:21.200
-and I can invoke you invoke it with meta
-
-00:19:21.200 --> 00:19:21.520
-x
-
-00:19:21.520 --> 00:19:24.720
-e if I type meta xp
-
-00:19:24.720 --> 00:19:27.360
-now it opens a latex file that I'm
-
-00:19:27.360 --> 00:19:31.130
-working on
-
-00:19:31.130 --> 00:19:32.559
-[Music]
-
-00:19:32.559 --> 00:19:35.200
-and I create most of my latex files
-
-00:19:35.200 --> 00:19:37.120
-using
-
-00:19:37.120 --> 00:19:39.200
-template template-based functions like
-
-00:19:39.200 --> 00:19:40.559
-the the
-
-00:19:40.559 --> 00:19:43.760
-implementation of code cd above and
-
-00:19:43.760 --> 00:19:46.559
-this template-based functions create
-
-00:19:46.559 --> 00:19:49.280
-files with extension.tag
-
-00:19:49.280 --> 00:19:51.280
-that start with a series of the fonts
-
-00:19:51.280 --> 00:19:53.919
-and comments for example
-
-00:19:53.919 --> 00:19:56.240
-let's look at this example here if I
-
-00:19:56.240 --> 00:19:58.320
-execute find the attack links with this
-
-00:19:58.320 --> 00:19:59.440
-argument
-
-00:19:59.440 --> 00:20:02.159
-uh it's going it's going to do several
-
-00:20:02.159 --> 00:20:03.440
-things for creating a
-
-00:20:03.440 --> 00:20:06.880
-file called slash tmp slash forward
-
-00:20:06.880 --> 00:20:08.320
-attack
-
-00:20:08.320 --> 00:20:11.200
-and the header of that file is going to
-
-00:20:11.200 --> 00:20:12.400
-be this
-
-00:20:12.400 --> 00:20:16.080
-which starts with two and with three
-
-00:20:16.080 --> 00:20:19.280
-the fonts 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 2020 favorite conventions.tag
-
-00:20:32.799 --> 00:20:34.640
-I have this header here in which I
-
-00:20:34.640 --> 00:20:37.039
-define six functions with very short
-
-00:20:37.039 --> 00:20:39.360
-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
-this we have mnemonics for
-
-00:20:48.000 --> 00:20:51.520
-these short names here and 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.760
-and e is added in the sense of make a
-
-00:20:57.760 --> 00:20:58.159
-max
-
-00:20:58.159 --> 00:21:02.320
-visit that file
-
-00:21:02.320 --> 00:21:05.039
-okay now I can explain what is meta j
-
-00:21:05.039 --> 00:21:06.480
-itself
-
-00:21:06.480 --> 00:21:08.880
-uh we just saw comments with very short
-
-00:21:08.880 --> 00:21:09.600
-names
-
-00:21:09.600 --> 00:21:12.320
-and the idea is behind meta j is that we
-
-00:21:12.320 --> 00:21:14.840
-can define comments with very short
-
-00:21:14.840 --> 00:21:16.480
-numbers
-
-00:21:16.480 --> 00:21:19.679
-let me explain this uh
-
-00:21:19.679 --> 00:21:22.559
-the short explanation for what meta j
-
-00:21:22.559 --> 00:21:23.039
-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:29.760
-in particular a meta j without a numeric
-
-00:21:29.760 --> 00:21:30.799
-argument
-
-00:21:30.799 --> 00:21:33.280
-takes us to a buffer with with the basic
-
-00:21:33.280 --> 00:21:34.080
-help
-
-00:21:34.080 --> 00:21:37.679
-and a list of the current age of targets
-
-00:21:37.679 --> 00:21:39.760
-and 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 meta five meta j
-
-00:21:44.559 --> 00:21:47.919
-then meta j runs this sex
-
-00:21:47.919 --> 00:21:51.120
-here that is associated to
-
-00:21:51.120 --> 00:21:55.440
-the argument five I say that the target
-
-00:21:55.440 --> 00:21:59.039
-for the argument five 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 to the true
-
-00:22:03.760 --> 00:22:07.039
-is this sex here that opens
-
-00:22:07.039 --> 00:22:09.600
-well this one opens the main tutorial vv
-
-00:22:09.600 --> 00:22:10.240
-and this one
-
-00:22:10.240 --> 00:22:13.679
-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 ev to the part that explains meta j
-
-00:22:20.480 --> 00:22:22.559
-I've copied the the main part of the
-
-00:22:22.559 --> 00:22:24.559
-text here
-
-00:22:24.559 --> 00:22:28.159
-the header the header that meta j shows
-
-00:22:28.159 --> 00:22:31.360
-let me show it very quickly here
-
-00:22:31.360 --> 00:22:33.919
-here is their header and here is their
-
-00:22:33.919 --> 00:22:36.320
-rest
-
-00:22:36.320 --> 00:22:39.039
-the header is very beginner friendly and
-
-00:22:39.039 --> 00:22:40.000
-if you're a beginner
-
-00:22:40.000 --> 00:22:42.159
-who only knows how to use meta e to
-
-00:22:42.159 --> 00:22:44.559
-execute and met
-
-00:22:44.559 --> 00:22:46.799
-this should be okay and meta k to go
-
-00:22:46.799 --> 00:22:48.240
-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:59.360
-as your main starting point and every
-
-00:22:59.360 --> 00:23:00.799
-time that you feel lost
-
-00:23:00.799 --> 00:23:03.679
-you can type meta j and to go back to
-
-00:23:03.679 --> 00:23:04.799
-that header
-
-00:23:04.799 --> 00:23:07.039
-and you can use its links to navigate to
-
-00:23:07.039 --> 00:23:08.000
-the documentation
-
-00:23:08.000 --> 00:23:11.360
-for max nav let me explain that
-
-00:23:11.360 --> 00:23:14.799
-uh this header here has several ellis
-
-00:23:14.799 --> 00:23:15.679
-hyperlinks
-
-00:23:15.679 --> 00:23:19.039
-one here one here
-
-00:23:19.039 --> 00:23:22.400
-one here one here and so on
-
-00:23:22.400 --> 00:23:25.760
-uh 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:30.880
-find if you quick enter in the main
-
-00:23:30.880 --> 00:23:32.480
-tutorial and find ev
-
-00:23:32.480 --> 00:23:35.760
-keys intro is a kind of tutorial that is
-
-00:23:35.760 --> 00:23:36.720
-an index of
-
-00:23:36.720 --> 00:23:40.000
-the main keys
-
-00:23:40.000 --> 00:23:42.559
-and after that we have an explanation of
-
-00:23:42.559 --> 00:23:43.279
-what some
-
-00:23:43.279 --> 00:23:46.799
-numeric prefixes do so if we type
-
-00:23:46.799 --> 00:23:50.240
-met one method j the effect of that is
-
-00:23:50.240 --> 00:23:53.200
-exactly the same as executing this and
-
-00:23:53.200 --> 00:23:54.640
-we can execute this
-
-00:23:54.640 --> 00:24:00.159
-with meta e also
-
-00:24:00.159 --> 00:24:03.679
-meta tube meta j runs this sex and
-
-00:24:03.679 --> 00:24:06.960
-I can also execute it with meta e
-
-00:24:06.960 --> 00:24:10.559
-here it is it's this uh
-
-00:24:10.559 --> 00:24:14.240
-intro this uh
-
-00:24:14.240 --> 00:24:18.400
-sandbox tutorial and
-
-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 and then the
-
-00:24:27.039 --> 00:24:28.720
-documentation says that
-
-00:24:28.720 --> 00:24:30.880
-that header the header that is beginner
-
-00:24:30.880 --> 00:24:31.760
-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:37.600
-that contains a series of the fonts like
-
-00:24:37.600 --> 00:24:40.400
-these ones
-
-00:24:40.400 --> 00:24:43.440
-here the last line of the header is this
-
-00:24:43.440 --> 00:24:44.640
-comment here
-
-00:24:44.640 --> 00:24:46.720
-and then we have several defense like
-
-00:24:46.720 --> 00:24:48.559
-this
-
-00:24:48.559 --> 00:24:51.440
-let me explain how these things work
-
-00:24:51.440 --> 00:24:53.840
-technically what happens when we type
-
-00:24:53.840 --> 00:24:57.360
-meta j without any arguments is that it
-
-00:24:57.360 --> 00:24:57.840
-runs
-
-00:24:57.840 --> 00:25:00.960
-eu jump with argument neil and then
-
-00:25:00.960 --> 00:25:04.640
-this runs 5 e jumps
-
-00:25:04.640 --> 00:25:06.480
-when I run meta j with a numeric
-
-00:25:06.480 --> 00:25:08.000
-argument for example
-
-00:25:08.000 --> 00:25:11.120
-with argument 5 it runs a jump
-
-00:25:11.120 --> 00:25:14.400
-5 and e jump five
-
-00:25:14.400 --> 00:25:17.679
-uh concatenates this five one
-
-00:25:17.679 --> 00:25:20.400
-to make a name of a function this
-
-00:25:20.400 --> 00:25:21.679
-function here
-
-00:25:21.679 --> 00:25:24.320
-and it executes this function e jump
-
-00:25:24.320 --> 00:25:24.720
-five
-
-00:25:24.720 --> 00:25:28.880
-you jump uh dash five
-
-00:25:28.880 --> 00:25:31.919
-and eu jump dash five is
-
-00:25:31.919 --> 00:25:35.520
-executes find ev equity intro
-
-00:25:35.520 --> 00:25:39.360
-if I execute just meta j
-
-00:25:39.360 --> 00:25:41.440
-the section that shows the current age
-
-00:25:41.440 --> 00:25:43.919
-on targets
-
-00:25:43.919 --> 00:25:47.120
-has a line for e job five this is that
-
-00:25:47.120 --> 00:25:48.159
-is exactly the
-
-00:25:48.159 --> 00:25:52.400
-thing that I was explaining before
-
-00:25:52.400 --> 00:25:54.840
-so we can use meta j to navigate the
-
-00:25:54.840 --> 00:25:59.520
-tutorials and we can copy the links
-
-00:25:59.520 --> 00:26:03.440
-sorry we can copy links to the to
-
-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 ev
-
-00:26:20.640 --> 00:26:24.320
-and these things are hyperlinks I can
-
-00:26:24.320 --> 00:26:26.240
-mark a hyperlink like this it is just
-
-00:26:26.240 --> 00:26:27.440
-plain text and I
-
-00:26:27.440 --> 00:26:30.559
-can copy it to my notes and the idea is
-
-00:26:30.559 --> 00:26:31.760
-that every time
-
-00:26:31.760 --> 00:26:33.520
-every time that I find something that is
-
-00:26:33.520 --> 00:26:35.520
-interesting I can create a hyperlink to
-
-00:26:35.520 --> 00:26:36.240
-it
-
-00:26:36.240 --> 00:26:38.720
-and I can put these links in my notes so
-
-00:26:38.720 --> 00:26:40.799
-I can navigate back
-
-00:26:40.799 --> 00:26:42.960
-to all the interesting positions very
-
-00:26:42.960 --> 00:26:48.799
-quickly
-
-00:26:48.799 --> 00:26:51.760
-okay next feature if we type meta
-
-00:26:51.760 --> 00:26:54.080
-uppercase j
-
-00:26:54.080 --> 00:26:57.600
-uh then
-
-00:26:57.600 --> 00:27:00.080
-this 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.080
-let me give an example let me isolate
-
-00:27:06.080 --> 00:27:07.360
-this and let me create
-
-00:27:07.360 --> 00:27:09.919
-duplicate this line to to make clear
-
-00:27:09.919 --> 00:27:11.039
-what happens
-
-00:27:11.039 --> 00:27:14.240
-if I type meta uppercase j here
-
-00:27:14.240 --> 00:27:16.880
-this line here becomes the fund for a
-
-00:27:16.880 --> 00:27:17.440
-jump
-
-00:27:17.440 --> 00:27:21.200
-6 and the target of this e-jump
-
-00:27:21.200 --> 00:27:24.799
-is exactly this sex here
-
-00:27:24.799 --> 00:27:28.559
-let me undo this mess
-
-00:27:28.559 --> 00:27:31.360
-and if the first word in the line is not
-
-00:27:31.360 --> 00:27:32.840
-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:39.039
-duplicate the line and type meta
-
-00:27:39.039 --> 00:27:41.200
-uppercase j
-
-00:27:41.200 --> 00:27:44.240
-then mat uppercase j converts that to a
-
-00:27:44.240 --> 00:27:45.600
-defund that defines
-
-00:27:45.600 --> 00:27:49.440
-a function with a very short name
-
-00:27:49.440 --> 00:27:52.720
-and 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 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 mass again
-
-00:28:05.360 --> 00:28:09.120
-oops
-
-00:28:09.120 --> 00:28:14.640
-that's it
-
-00:28:14.640 --> 00:28:17.760
-meta uppercase j is a
-
-00:28:17.760 --> 00:28:21.279
-particular case of of something that
-
-00:28:21.279 --> 00:28:24.559
-I use a lot in eevee I have if he has
-
-00:28:24.559 --> 00:28:25.279
-lots of
-
-00:28:25.279 --> 00:28:28.799
-comments that sorry key sequences
-
-00:28:28.799 --> 00:28:31.780
-that are like meta uppercase letter and
-
-00:28:31.780 --> 00:28:33.200
-[Music]
-
-00:28:33.200 --> 00:28:35.279
-almost all of them operate on the
-
-00:28:35.279 --> 00:28:37.279
-current line and transform the current
-
-00:28:37.279 --> 00:28:38.880
-line in certain way
-
-00:28:38.880 --> 00:28:42.000
-for example this is a file name
-
-00:28:42.000 --> 00:28:45.360
-and if I type meta uppercase f here
-
-00:28:45.360 --> 00:28:48.640
-it becomes a link to that file this is
-
-00:28:48.640 --> 00:28:50.000
-the name of a month page
-
-00:28:50.000 --> 00:28:53.600
-and if I type meta uppercase m here
-
-00:28:53.600 --> 00:28:55.760
-it converts that to the link to a month
-
-00:28:55.760 --> 00:28:58.080
-page and this is a shell command
-
-00:28:58.080 --> 00:29:01.679
-and if I type meta uppercase s 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 fan shell
-
-00:29:08.720 --> 00:29:11.919
-and until a few years ago these
-
-00:29:11.919 --> 00:29:12.960
-functions
-
-00:29:12.960 --> 00:29:16.159
-with matter uppercase letter were half
-
-00:29:16.159 --> 00:29:18.080
-of my main ways of creating sex
-
-00:29:18.080 --> 00:29:18.880
-hyperlinks
-
-00:29:18.880 --> 00:29:21.039
-with few key strokes in the beginning of
-
-00:29:21.039 --> 00:29:22.399
-course I had to create my
-
-00:29:22.399 --> 00:29:25.600
-sex pipelines by typing each character
-
-00:29:25.600 --> 00:29:28.640
-but uh after some time and decided that
-
-00:29:28.640 --> 00:29:31.520
-I needed something more efficient
-
-00:29:31.520 --> 00:29:34.559
-so this is end of part one of the two of
-
-00:29:34.559 --> 00:29:34.960
-the
-
-00:29:34.960 --> 00:29:38.480
-presentation
-
-00:29:38.480 --> 00:29:40.640
-so this is part two of the presentation
-
-00:29:40.640 --> 00:29:41.760
-and the main theme
-
-00:29:41.760 --> 00:29:44.320
-here is the standard describe key
-
-00:29:44.320 --> 00:29:46.320
-function that comes with the max
-
-00:29:46.320 --> 00:29:49.200
-and my variant of it the thing is that
-
-00:29:49.200 --> 00:29:50.960
-the standard described key in max
-
-00:29:50.960 --> 00:29:53.120
-is user friendly but it is hacker
-
-00:29:53.120 --> 00:29:55.600
-unfriendly well I felt so
-
-00:29:55.600 --> 00:29:58.559
-and when I tried to complement it by by
-
-00:29:58.559 --> 00:30:00.799
-writing a hacker friendly version of it
-
-00:30:00.799 --> 00:30:03.120
-that produced the sex hyperlinks that I
-
-00:30:03.120 --> 00:30:03.919
-needed
-
-00:30:03.919 --> 00:30:05.440
-I got something that I found really
-
-00:30:05.440 --> 00:30:07.039
-lovely and
-
-00:30:07.039 --> 00:30:09.679
-several of the main designs design
-
-00:30:09.679 --> 00:30:12.480
-decisions of eev can be seen there
-
-00:30:12.480 --> 00:30:14.320
-but when I showed my variants to other
-
-00:30:14.320 --> 00:30:15.520
-people they hated it
-
-00:30:15.520 --> 00:30:17.760
-they felt that it was totally against
-
-00:30:17.760 --> 00:30:19.360
-their notions of
-
-00:30:19.360 --> 00:30:23.440
-user friendliness
-
-00:30:23.440 --> 00:30:25.760
-okay so let's see the standard describe
-
-00:30:25.760 --> 00:30:26.799
-key if I run
-
-00:30:26.799 --> 00:30:30.159
-this hyperlink here I get
-
-00:30:30.159 --> 00:30:32.399
-this the result of running the scribe
-
-00:30:32.399 --> 00:30:34.399
-key on the key down
-
-00:30:34.399 --> 00:30:36.399
-and this is a big buffer with some
-
-00:30:36.399 --> 00:30:38.080
-things in italics
-
-00:30:38.080 --> 00:30:41.360
-and some hyperlinks here these
-
-00:30:41.360 --> 00:30:43.120
-hyperlinks are standard in the sense
-
-00:30:43.120 --> 00:30:43.679
-that
-
-00:30:43.679 --> 00:30:46.240
-the targets are not visible and they are
-
-00:30:46.240 --> 00:30:47.760
-implemented using
-
-00:30:47.760 --> 00:30:50.799
-buttons in a max lisp this section of
-
-00:30:50.799 --> 00:30:51.200
-the
-
-00:30:51.200 --> 00:30:53.919
-mx list manual describes how buttons
-
-00:30:53.919 --> 00:30:56.799
-work
-
-00:30:56.799 --> 00:31:00.640
-and the the source code is
-
-00:31:00.640 --> 00:31:03.440
-quite difficult I mean when I was
-
-00:31:03.440 --> 00:31:04.240
-starting to
-
-00:31:04.240 --> 00:31:06.559
-to try to decipher this when I was a
-
-00:31:06.559 --> 00:31:07.600
-beginner
-
-00:31:07.600 --> 00:31:11.200
-using max 19.34 I felt that this
-
-00:31:11.200 --> 00:31:12.320
-described key was
-
-00:31:12.320 --> 00:31:15.519
-very difficult to understand uh
-
-00:31:15.519 --> 00:31:20.080
-and I felt that the the designers the
-
-00:31:20.080 --> 00:31:22.640
-the people who wrote it were sacrificing
-
-00:31:22.640 --> 00:31:23.679
-too much of the
-
-00:31:23.679 --> 00:31:26.159
-hacker friendliness that I was expecting
-
-00:31:26.159 --> 00:31:31.279
-from it to make it beginner friendly
-
-00:31:31.279 --> 00:31:33.600
-let me explain what are the the problems
-
-00:31:33.600 --> 00:31:34.799
-with the standard
-
-00:31:34.799 --> 00:31:36.559
-the describe key if we think that
-
-00:31:36.559 --> 00:31:38.640
-hyperlinks 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:47.120
-this three bad things happen first
-
-00:31:47.120 --> 00:31:49.120
-it is hard to extract the target from
-
-00:31:49.120 --> 00:31:51.200
-the hyperlink second it is hard to
-
-00:31:51.200 --> 00:31:52.000
-recreate
-
-00:31:52.000 --> 00:31:54.480
-a list of code that would go to that
-
-00:31:54.480 --> 00:31:55.440
-target
-
-00:31:55.440 --> 00:31:57.519
-and third it is hard to copy the full
-
-00:31:57.519 --> 00:31:59.840
-hyperlink including the targets to other
-
-00:31:59.840 --> 00:32:00.640
-buffers
-
-00:32:00.640 --> 00:32:04.960
-I only knew how to copy the text
-
-00:32:04.960 --> 00:32:07.279
-when I was trying to decipher what
-
-00:32:07.279 --> 00:32:09.039
-described key was doing
-
-00:32:09.039 --> 00:32:11.679
-I created lots of hyperlinks like this
-
-00:32:11.679 --> 00:32:12.159
-to
-
-00:32:12.159 --> 00:32:14.960
-inspect the text properties and things
-
-00:32:14.960 --> 00:32:16.159
-like that
-
-00:32:16.159 --> 00:32:18.480
-for example in the description of the
-
-00:32:18.480 --> 00:32:20.000
-key down
-
-00:32:20.000 --> 00:32:23.600
-here we have a button that points to
-
-00:32:23.600 --> 00:32:26.799
-simple dotel
-
-00:32:26.799 --> 00:32:29.679
-the text of that button is simple.l this
-
-00:32:29.679 --> 00:32:31.600
-hyperlinks goes to the
-
-00:32:31.600 --> 00:32:34.320
-to the middle of this button hyperlink
-
-00:32:34.320 --> 00:32:35.519
-here
-
-00:32:35.519 --> 00:32:39.120
-uh this hyperlink here
-
-00:32:39.120 --> 00:32:41.919
-goes to the middle of the button of this
-
-00:32:41.919 --> 00:32:43.279
-button hyperlink
-
-00:32:43.279 --> 00:32:46.240
-and then inspects its text properties
-
-00:32:46.240 --> 00:32:47.679
-and then goes to
-
-00:32:47.679 --> 00:32:51.679
-this section here of the description
-
-00:32:51.679 --> 00:32:53.679
-so this is a high level description of
-
-00:32:53.679 --> 00:32:56.159
-the text properties
-
-00:32:56.159 --> 00:32:58.000
-I mean the text properties that make it
-
-00:32:58.000 --> 00:33:00.000
-a button and this is a
-
-00:33:00.000 --> 00:33:02.480
-lower level description of the these
-
-00:33:02.480 --> 00:33:04.320
-text properties
-
-00:33:04.320 --> 00:33:08.000
-and the button that points to
-
-00:33:08.000 --> 00:33:11.440
-forward line sorry the the button that
-
-00:33:11.440 --> 00:33:11.919
-whose
-
-00:33:11.919 --> 00:33:14.399
-text is forward line this one is
-
-00:33:14.399 --> 00:33:16.480
-slightly different
-
-00:33:16.480 --> 00:33:19.039
-this hyperlink here goes to the middle
-
-00:33:19.039 --> 00:33:21.200
-of that button
-
-00:33:21.200 --> 00:33:24.559
-and this hyperlink goes to the mid to
-
-00:33:24.559 --> 00:33:25.760
-the middle of that button
-
-00:33:25.760 --> 00:33:28.559
-inspects its text properties and go to
-
-00:33:28.559 --> 00:33:29.360
-the section
-
-00:33:29.360 --> 00:33:32.559
-of this button of this help
-
-00:33:32.559 --> 00:33:35.760
-uh buffer here that describe the the
-
-00:33:35.760 --> 00:33:36.399
-button
-
-00:33:36.399 --> 00:33:39.120
-and the lower level view of the text
-
-00:33:39.120 --> 00:33:41.679
-properties
-
-00:33:41.679 --> 00:33:45.519
-so I started to with things like this
-
-00:33:45.519 --> 00:33:47.519
-to understand what these buttons were
-
-00:33:47.519 --> 00:33:50.159
-doing and I was able to figure out how
-
-00:33:50.159 --> 00:33:50.960
-these things are
-
-00:33:50.960 --> 00:33:53.120
-implemented and describe key and then
-
-00:33:53.120 --> 00:33:55.519
-similar help functions in max
-
-00:33:55.519 --> 00:33:57.760
-and I discovered that one of the main
-
-00:33:57.760 --> 00:34:00.000
-lower level functions that a max used
-
-00:34:00.000 --> 00:34:01.360
-for this
-
-00:34:01.360 --> 00:34:04.080
-is a function called find function no
-
-00:34:04.080 --> 00:34:05.279
-select
-
-00:34:05.279 --> 00:34:08.240
-if I run find function no select on next
-
-00:34:08.240 --> 00:34:09.929
-line
-
-00:34:09.929 --> 00:34:11.200
-[Music]
-
-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 that
-
-00:34:20.560 --> 00:34:21.679
-would
-
-00:34:21.679 --> 00:34:24.320
-uh follow this that would open that
-
-00:34:24.320 --> 00:34:25.119
-buffer
-
-00:34:25.119 --> 00:34:28.320
-in that position and then this is a
-
-00:34:28.320 --> 00:34:29.679
-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:40.320
-so this goes to the definition of find a
-
-00:34:40.320 --> 00:34:41.040
-function
-
-00:34:41.040 --> 00:34:44.159
-and then to a to a string
-
-00:34:44.159 --> 00:34:47.919
-after it and I use these things to
-
-00:34:47.919 --> 00:34:49.040
-implement my own
-
-00:34:49.040 --> 00:34:51.839
-functions that pointed to the same the
-
-00:34:51.839 --> 00:34:52.960
-same targets
-
-00:34:52.960 --> 00:34:55.440
-as the button hyperlinks and describe
-
-00:34:55.440 --> 00:35:00.240
-key
-
-00:35:00.240 --> 00:35:03.200
-again let me show the comparison this is
-
-00:35:03.200 --> 00:35:05.599
-the standard describe key
-
-00:35:05.599 --> 00:35:10.480
-here and this is my variant
-
-00:35:10.480 --> 00:35:13.839
-uh it creates a buffer with links
-
-00:35:13.839 --> 00:35:17.680
-with the list 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 a or an ellipse hyperlink
-
-00:35:28.720 --> 00:35:31.760
-here is a slight variant of the of the
-
-00:35:31.760 --> 00:35:32.880
-function
-
-00:35:32.880 --> 00:35:35.920
-find e key links above in this variant
-
-00:35:35.920 --> 00:35:38.079
-the argument is a string that has to be
-
-00:35:38.079 --> 00:35:39.280
-processed by
-
-00:35:39.280 --> 00:35:42.400
-read cbd macro to convert it to the
-
-00:35:42.400 --> 00:35:45.280
-lower level format
-
-00:35:45.280 --> 00:35:48.160
-and note that these functions here that
-
-00:35:48.160 --> 00:35:49.040
-I wrote
-
-00:35:49.040 --> 00:35:51.440
-they display temporary buffers with no
-
-00:35:51.440 --> 00:35:53.599
-help at all
-
-00:35:53.599 --> 00:35:57.359
-uh to be honest there's a link to a
-
-00:35:57.359 --> 00:35:58.560
-tutorial here but
-
-00:35:58.560 --> 00:36:01.680
-this is a recent edition so let's ignore
-
-00:36:01.680 --> 00:36:03.200
-this
-
-00:36:03.200 --> 00:36:06.640
-uh they they display temporary buffers
-
-00:36:06.640 --> 00:36:08.320
-with no help at all just lots of
-
-00:36:08.320 --> 00:36:09.520
-hyperlinks
-
-00:36:09.520 --> 00:36:11.599
-and these hyperlinks can be they are
-
-00:36:11.599 --> 00:36:13.359
-very hacker friendly in the sense that
-
-00:36:13.359 --> 00:36:15.040
-they can be followed with
-
-00:36:15.040 --> 00:36:17.520
-metae 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 sex
-
-00:36:23.680 --> 00:36:26.240
-and they can be inspected in the sense
-
-00:36:26.240 --> 00:36:28.000
-that
-
-00:36:28.000 --> 00:36:32.400
-for example here
-
-00:36:32.400 --> 00:36:34.079
-we have a hyperlink to a function that
-
-00:36:34.079 --> 00:36:35.520
-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:42.320
-but we can go to that position and then
-
-00:36:42.320 --> 00:36:45.839
-type ctrl h f to see the descript
-
-00:36:45.839 --> 00:36:48.240
-description of this function
-
-00:36:48.240 --> 00:36:52.400
-and here is a hyperlink to
-
-00:36:52.400 --> 00:36:53.890
-the does that
-
-00:36:53.890 --> 00:36:56.000
-[Music]
-
-00:36:56.000 --> 00:37:00.160
-in my syntax say
-
-00:37:00.160 --> 00:37:02.800
-and this list of hyperlinks were
-
-00:37:02.800 --> 00:37:04.480
-generated by
-
-00:37:04.480 --> 00:37:08.000
-this code here that just just uh
-
-00:37:08.000 --> 00:37:11.119
-used a back quote to to generate
-
-00:37:11.119 --> 00:37:14.640
-lists of sex
-
-00:37:14.640 --> 00:37:18.240
-and I I felt that this function here
-
-00:37:18.240 --> 00:37:21.040
-uh that just generated this list was
-
-00:37:21.040 --> 00:37:22.160
-very easy to understand
-
-00:37:22.160 --> 00:37:24.960
-and to modify so this was hacker
-
-00:37:24.960 --> 00:37:28.480
-friendly in the way that I wanted
-
-00:37:28.480 --> 00:37:31.599
-and so I started using this
-
-00:37:31.599 --> 00:37:34.079
-and this idea of using buffers with sex
-
-00:37:34.079 --> 00:37:36.800
-fiber links and no help violated
-
-00:37:36.800 --> 00:37:38.720
-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:42.000
-exploring some something new at that
-
-00:37:42.000 --> 00:37:46.160
-time and this is the end of part two
-
-00:37:46.160 --> 00:37:49.359
-part three of this presentation is uh
-
-00:37:49.359 --> 00:37:52.240
-about the killer features of ev or why
-
-00:37:52.240 --> 00:37:54.800
-everybody should use av or at least have
-
-00:37:54.800 --> 00:37:57.920
-eev installed even if they think the tv
-
-00:37:57.920 --> 00:37:59.280
-is too weird
-
-00:37:59.280 --> 00:38:01.440
-so this is a very quick listing eevee
-
-00:38:01.440 --> 00:38:03.440
-has lease hyperlinks which are super
-
-00:38:03.440 --> 00:38:04.240
-nice
-
-00:38:04.240 --> 00:38:06.560
-it comes with lots of tutorials the main
-
-00:38:06.560 --> 00:38:07.599
-one here
-
-00:38:07.599 --> 00:38:10.800
-explains all the main features
-
-00:38:10.800 --> 00:38:14.079
-uh there's also a tutorial with that's
-
-00:38:14.079 --> 00:38:15.040
-an index of
-
-00:38:15.040 --> 00:38:18.079
-all the other tutorials here
-
-00:38:18.079 --> 00:38:21.680
-many many many tutorials uh if we forget
-
-00:38:21.680 --> 00:38:24.079
-everything we can just type meta j
-
-00:38:24.079 --> 00:38:27.280
-and remember that this this part here is
-
-00:38:27.280 --> 00:38:28.880
-beginner friendly and the rest is
-
-00:38:28.880 --> 00:38:30.839
-beginner
-
-00:38:30.839 --> 00:38:32.960
-unfriendly
-
-00:38:32.960 --> 00:38:38.320
-there's a tutorial on max list here
-
-00:38:38.320 --> 00:38:41.920
-it mainly explains how to understand
-
-00:38:41.920 --> 00:38:44.640
-a lisp code which is much easier than
-
-00:38:44.640 --> 00:38:46.320
-it's much easier to understand the lisp
-
-00:38:46.320 --> 00:38:47.040
-code and
-
-00:38:47.040 --> 00:38:48.800
-then to understand how to program in a
-
-00:38:48.800 --> 00:38:50.160
-lisp and
-
-00:38:50.160 --> 00:38:53.440
-most people are only going to need this
-
-00:38:53.440 --> 00:38:55.920
-uh ev is very easy to install it's in
-
-00:38:55.920 --> 00:38:58.240
-helper so we just need to do
-
-00:38:58.240 --> 00:39:00.560
-this thing here and it's very
-
-00:39:00.560 --> 00:39:03.520
-non-invasive
-
-00:39:03.520 --> 00:39:06.079
-uh years ago several years ago it was a
-
-00:39:06.079 --> 00:39:08.000
-very invasive package but then I changed
-
-00:39:08.000 --> 00:39:08.960
-everything
-
-00:39:08.960 --> 00:39:13.520
-now uh if we toggle ev mode on and off
-
-00:39:13.520 --> 00:39:16.640
-what's going to happen is just that the
-
-00:39:16.640 --> 00:39:20.000
-evk map key map becomes activated or
-
-00:39:20.000 --> 00:39:21.599
-deactivated
-
-00:39:21.599 --> 00:39:24.720
-and when we install the evita
-
-00:39:24.720 --> 00:39:28.320
-I mean when we require the only things
-
-00:39:28.320 --> 00:39:28.640
-that
-
-00:39:28.640 --> 00:39:32.640
-happens globally distance here
-
-00:39:32.640 --> 00:39:34.480
-several functions and variables become
-
-00:39:34.480 --> 00:39:36.240
-defined all of them have
-
-00:39:36.240 --> 00:39:40.079
-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.079
-the red star and two and the open
-
-00:39:52.079 --> 00:39:54.160
-double angle brackets and the closed
-
-00:39:54.160 --> 00:39:58.160
-double angle brackets
-
-00:39:58.160 --> 00:40:01.359
-and two environment variables are set
-
-00:40:01.359 --> 00:40:04.560
-and this is a trivial technicality
-
-00:40:04.560 --> 00:40:07.599
-we just run a def advice
-
-00:40:07.599 --> 00:40:10.160
-around one function that that is used by
-
-00:40:10.160 --> 00:40:10.800
-man
-
-00:40:10.800 --> 00:40:14.240
-justice also
-
-00:40:14.240 --> 00:40:16.720
-eevee has a very high discoverability
-
-00:40:16.720 --> 00:40:18.400
-factor
-
-00:40:18.400 --> 00:40:21.839
-and there's a way to create a very easy
-
-00:40:21.839 --> 00:40:25.200
-way to create a hyperlink to here
-
-00:40:25.200 --> 00:40:27.760
-uh I do not have time to show this now
-
-00:40:27.760 --> 00:40:29.760
-but for example if I'm
-
-00:40:29.760 --> 00:40:32.960
-here in a tutorial and I think that that
-
-00:40:32.960 --> 00:40:34.480
-this
-
-00:40:34.480 --> 00:40:36.240
-section is something interesting and I
-
-00:40:36.240 --> 00:40:39.520
-want to create a hyperlink to it
-
-00:40:39.520 --> 00:40:41.200
-I just have to type a certain key
-
-00:40:41.200 --> 00:40:43.040
-sequence here
-
-00:40:43.040 --> 00:40:46.800
-and here I got a hyperlink that I can
-
-00:40:46.800 --> 00:40:50.400
-copy to my notes and this hyperlink goes
-
-00:40:50.400 --> 00:40:52.260
-to that section
-
-00:40:52.260 --> 00:40:58.240
-[Music]
-
-00:40:58.240 --> 00:41:00.720
-we have hyperlinks that point to
-
-00:41:00.720 --> 00:41:02.319
-specific positions in
-
-00:41:02.319 --> 00:41:05.839
-pdf documents and nvidia files here
-
-00:41:05.839 --> 00:41:09.119
-this one opens a pdf and displays it
-
-00:41:09.119 --> 00:41:09.680
-this one
-
-00:41:09.680 --> 00:41:13.920
-opens a pdf and converts it to text
-
-00:41:13.920 --> 00:41:16.720
-and this one opens the video in a
-
-00:41:16.720 --> 00:41:18.400
-certain position
-
-00:41:18.400 --> 00:41:20.480
-and 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.280
-uh in my presentation of the last year I
-
-00:41:25.280 --> 00:41:27.440
-spent one third of the presentation
-
-00:41:27.440 --> 00:41:29.520
-explaining this and I think that I gave
-
-00:41:29.520 --> 00:41:31.839
-a very good demonstration there
-
-00:41:31.839 --> 00:41:35.680
-the demonstration is here
-
-00:41:35.680 --> 00:41:38.800
-we can go to the web page and go to
-
-00:41:38.800 --> 00:41:41.839
-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:51.440
-and here we have an explanation and so
-
-00:41:51.440 --> 00:41:55.920
-on whatever
-
-00:41:55.920 --> 00:41:58.720
-and I've already mentioned this before
-
-00:41:58.720 --> 00:41:59.200
-uh
-
-00:41:59.200 --> 00:42:01.119
-eevee comes with a very nice elise
-
-00:42:01.119 --> 00:42:02.240
-tutorial
-
-00:42:02.240 --> 00:42:04.240
-so that's it this is the end of part
-
-00:42:04.240 --> 00:42:05.599
-three
-
-00:42:05.599 --> 00:42:07.359
-so this is the last part of my
-
-00:42:07.359 --> 00:42:09.839
-presentation and it's about the title of
-
-00:42:09.839 --> 00:42:10.160
-the
-
-00:42:10.160 --> 00:42:11.839
-the presentation I called the
-
-00:42:11.839 --> 00:42:13.599
-presentation why
-
-00:42:13.599 --> 00:42:16.560
-most of the best features in eevee look
-
-00:42:16.560 --> 00:42:16.960
-like
-
-00:42:16.960 --> 00:42:20.480
-like five minute hacks uh I've already
-
-00:42:20.480 --> 00:42:20.960
-run off
-
-00:42:20.960 --> 00:42:23.920
-out of time so I have to to skip this
-
-00:42:23.920 --> 00:42:24.800
-first
-
-00:42:24.800 --> 00:42:28.720
-part here in which I describe how I
-
-00:42:28.720 --> 00:42:31.280
-was exposed to several different notions
-
-00:42:31.280 --> 00:42:33.440
-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:37.119
-was the one in
-
-00:42:37.119 --> 00:42:41.680
-in a certain uh fought environment
-
-00:42:41.680 --> 00:42:44.160
-uh and 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
-uh in all this process I switched from
-
-00:42:49.280 --> 00:42:49.680
-from
-
-00:42:49.680 --> 00:42:52.079
-the belief that the user was always
-
-00:42:52.079 --> 00:42:52.960
-someone else
-
-00:42:52.960 --> 00:42:55.359
-someone external and that 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:02.240
-from from that to the belief that I am
-
-00:43:02.240 --> 00:43:03.200
-the user
-
-00:43:03.200 --> 00:43:05.839
-and I can play with the interface that I
-
-00:43:05.839 --> 00:43:07.040
-want I can
-
-00:43:07.040 --> 00:43:10.079
-write programs which that
-
-00:43:10.079 --> 00:43:12.079
-that only I am going to understand I can
-
-00:43:12.079 --> 00:43:14.240
-experiment with hundreds of interfaces
-
-00:43:14.240 --> 00:43:16.079
-and then select the best ones
-
-00:43:16.079 --> 00:43:18.720
-and document them and then share them
-
-00:43:18.720 --> 00:43:20.960
-with other people
-
-00:43:20.960 --> 00:43:23.520
-who are also experimenting with
-
-00:43:23.520 --> 00:43:24.720
-interfaces in their
-
-00:43:24.720 --> 00:43:28.880
-own ways and so eevee has
-
-00:43:28.880 --> 00:43:31.119
-lots of things that are user-friendly in
-
-00:43:31.119 --> 00:43:33.440
-these unusual ways that I've explained
-
-00:43:33.440 --> 00:43:34.880
-before
-
-00:43:34.880 --> 00:43:37.760
-and uh and if we disconsider that this
-
-00:43:37.760 --> 00:43:40.319
-notion of user friendliness is valid
-
-00:43:40.319 --> 00:43:44.079
-then this implement these things that av
-
-00:43:44.079 --> 00:43:45.119
-implement they are
-
-00:43:45.119 --> 00:43:47.280
-user friendly and hacker friendly at the
-
-00:43:47.280 --> 00:43:48.800
-same time
-
-00:43:48.800 --> 00:43:51.119
-and let me show one example this is one
-
-00:43:51.119 --> 00:43:51.920
-this is
-
-00:43:51.920 --> 00:43:54.640
-one that really took me one only five
-
-00:43:54.640 --> 00:43:56.640
-minutes to implement
-
-00:43:56.640 --> 00:43:59.599
-uh at one point a few months ago I
-
-00:43:59.599 --> 00:44:00.640
-discovered
-
-00:44:00.640 --> 00:44:04.240
-that sasha chewer's weekly posts about
-
-00:44:04.240 --> 00:44:05.599
-the max news
-
-00:44:05.599 --> 00:44:08.800
-had uh were also being posted to a
-
-00:44:08.800 --> 00:44:11.440
-mailing list that is stored at
-
-00:44:11.440 --> 00:44:14.800
-lists.we know.org and it's called max
-
-00:44:14.800 --> 00:44:16.319
-dungeons
-
-00:44:16.319 --> 00:44:19.280
-uh and I just and I found a way to
-
-00:44:19.280 --> 00:44:19.760
-create
-
-00:44:19.760 --> 00:44:25.440
-the links to to the posts in both places
-
-00:44:25.440 --> 00:44:28.400
-but I had to use a template for that so
-
-00:44:28.400 --> 00:44:30.640
-what we are seeing here now
-
-00:44:30.640 --> 00:44:32.560
-is a template with the the default
-
-00:44:32.560 --> 00:44:36.640
-values so this means that we have not uh
-
-00:44:36.640 --> 00:44:39.359
-set the year correctly we have not set
-
-00:44:39.359 --> 00:44:40.720
-the month correctly
-
-00:44:40.720 --> 00:44:44.240
-or the day correctly but if we run this
-
-00:44:44.240 --> 00:44:44.720
-text
-
-00:44:44.720 --> 00:44:48.960
-here uh let me do something else before
-
-00:44:48.960 --> 00:44:53.359
-if we run this text here
-
-00:44:53.359 --> 00:44:57.280
-which we change some of these
-
-00:44:57.280 --> 00:45:00.880
-entries in the
-
-00:45:00.880 --> 00:45:04.400
-in the template and we get these links
-
-00:45:04.400 --> 00:45:05.200
-here
-
-00:45:05.200 --> 00:45:09.119
-they all work for example this one opens
-
-00:45:09.119 --> 00:45:12.160
-uh the blog post in in session sasha
-
-00:45:12.160 --> 00:45:12.800
-chewers
-
-00:45:12.800 --> 00:45:16.000
-site and this one
-
-00:45:16.000 --> 00:45:21.280
-opens it in the mailing list
-
-00:45:21.280 --> 00:45:23.440
-and sometimes I want the org source of
-
-00:45:23.440 --> 00:45:25.760
-that and the easiest way to get the word
-
-00:45:25.760 --> 00:45:27.280
-source is to
-
-00:45:27.280 --> 00:45:30.480
-look at this link here that has an
-
-00:45:30.480 --> 00:45:31.680
-attachment
-
-00:45:31.680 --> 00:45:35.040
-and if I take this
-
-00:45:35.040 --> 00:45:38.560
-link here and I take this
-
-00:45:38.560 --> 00:45:42.319
-stem that points to to the attachment
-
-00:45:42.319 --> 00:45:44.480
-and I put it here and I generate this
-
-00:45:44.480 --> 00:45:45.440
-page again
-
-00:45:45.440 --> 00:45:49.119
-with all this data then I get a script
-
-00:45:49.119 --> 00:45:50.000
-here
-
-00:45:50.000 --> 00:45:53.359
-that downloads let me switch to a
-
-00:45:53.359 --> 00:45:54.640
-smaller font
-
-00:45:54.640 --> 00:45:58.160
-it downloads this attachment
-
-00:45:58.160 --> 00:46:00.960
-and it renames that attachment to
-
-00:46:00.960 --> 00:46:01.599
-something
-
-00:46:01.599 --> 00:46:06.000
-dot slash nx news sorry some things
-
-00:46:06.000 --> 00:46:10.720
-uh iphone mx news hyphen
-
-00:46:10.720 --> 00:46:15.119
-something mxnews.org here
-
-00:46:15.119 --> 00:46:17.599
-the file is already here already with
-
-00:46:17.599 --> 00:46:18.400
-the right name
-
-00:46:18.400 --> 00:46:21.359
-so I can open it with just this
-
-00:46:21.359 --> 00:46:22.079
-hyperlink
-
-00:46:22.079 --> 00:46:23.780
-let me go to the big font again
-
-00:46:23.780 --> 00:46:25.200
-[Music]
-
-00:46:25.200 --> 00:46:28.079
-and now I have the work source for that
-
-00:46:28.079 --> 00:46:29.280
-hyperlink
-
-00:46:29.280 --> 00:46:33.839
-sorry for that blog post
-
-00:46:33.839 --> 00:46:37.040
-and so this one line thing
-
-00:46:37.040 --> 00:46:40.960
-here is in a sense
-
-00:46:40.960 --> 00:46:43.920
-a a to to this blog post in all its
-
-00:46:43.920 --> 00:46:45.119
-formats
-
-00:46:45.119 --> 00:46:48.640
-uh if I execute this I get links to
-
-00:46:48.640 --> 00:46:52.000
-to all the places where it is posted
-
-00:46:52.000 --> 00:46:54.400
-and I get a hype and I get a script to
-
-00:46:54.400 --> 00:46:56.000
-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:03.200
-well I'm already out of time so let me
-
-00:47:03.200 --> 00:47:04.480
-finish here
-
-00:47:04.480 --> 00:47:10.079
-thanks bye
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-autogen.vtt b/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt
deleted file mode 100644
index b1831710..00000000
--- a/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt
+++ /dev/null
@@ -1,2386 +0,0 @@
-WEBVTT
-
-00:00:01.680 --> 00:00:04.080
-oh you are now muted
-
-00:00:04.080 --> 00:00:07.359
-all right then well uh hello everyone
-
-00:00:07.359 --> 00:00:09.840
-I hope uh you're all enjoying the Emacs
-
-00:00:09.840 --> 00:00:11.519
-conf
-
-00:00:11.519 --> 00:00:14.480
-my name is musa alhassi and I hope
-
-00:00:14.480 --> 00:00:15.040
-you're
-
-00:00:15.040 --> 00:00:17.920
-excited to learn about uh powering up
-
-00:00:17.920 --> 00:00:19.840
-special blocks
-
-00:00:19.840 --> 00:00:22.880
-um so let's let's first off uh find out
-
-00:00:22.880 --> 00:00:24.800
-what these special blocks are and
-
-00:00:24.800 --> 00:00:27.920
-and see what we can uh go from so
-
-00:00:27.920 --> 00:00:30.240
-uh yesterday I saw a lot of cool talks
-
-00:00:30.240 --> 00:00:32.719
-and uh people were chatting about how do
-
-00:00:32.719 --> 00:00:33.200
-you
-
-00:00:33.200 --> 00:00:35.520
-I know how should you present should you
-
-00:00:35.520 --> 00:00:37.200
-do it this way or that way and
-
-00:00:37.200 --> 00:00:38.640
-I thought maybe I should try a different
-
-00:00:38.640 --> 00:00:41.120
-way uh but but I'm talking about special
-
-00:00:41.120 --> 00:00:42.239
-blocks and if I
-
-00:00:42.239 --> 00:00:45.039
-show you an emax then I have to export
-
-00:00:45.039 --> 00:00:47.039
-the html so you can see what it looks
-
-00:00:47.039 --> 00:00:47.840
-like
-
-00:00:47.840 --> 00:00:50.800
-or export to a pdf so you can see what
-
-00:00:50.800 --> 00:00:51.920
-it looks like
-
-00:00:51.920 --> 00:00:54.239
-uh so I ended up writing an org reveal
-
-00:00:54.239 --> 00:00:56.399
-and
-
-00:00:56.399 --> 00:00:58.960
-joyously this this just works you can
-
-00:00:58.960 --> 00:01:00.879
-you can just see things here
-
-00:01:00.879 --> 00:01:02.960
-uh I was worried that I'd have to take
-
-00:01:02.960 --> 00:01:04.559
-pictures and then you know
-
-00:01:04.559 --> 00:01:07.600
-uh uh you know insert pings so that that
-
-00:01:07.600 --> 00:01:09.760
-was a delight
-
-00:01:09.760 --> 00:01:12.159
-okay uh so special blocks are these
-
-00:01:12.159 --> 00:01:12.960
-things like
-
-00:01:12.960 --> 00:01:16.000
-a center small quote uh that's what a
-
-00:01:16.000 --> 00:01:17.280
-special block is
-
-00:01:17.280 --> 00:01:19.360
-and with a bit of lisp we can we can
-
-00:01:19.360 --> 00:01:20.720
-make special blocks
-
-00:01:20.720 --> 00:01:23.200
-and link types right so uh using a
-
-00:01:23.200 --> 00:01:24.799
-single interface
-
-00:01:24.799 --> 00:01:26.720
-um and the interface is going to be
-
-00:01:26.720 --> 00:01:27.840
-similar to one
-
-00:01:27.840 --> 00:01:29.439
-many people are familiar with in
-
-00:01:29.439 --> 00:01:32.560
-particular org babel's
-
-00:01:32.560 --> 00:01:35.840
-source interface as well as using global
-
-00:01:35.840 --> 00:01:37.840
-header arguments for link types
-
-00:01:37.840 --> 00:01:39.680
-and the idea is to write it once and
-
-00:01:39.680 --> 00:01:41.200
-generate many different kinds
-
-00:01:41.200 --> 00:01:44.159
-right you write uh an org markup and you
-
-00:01:44.159 --> 00:01:44.720
-can have
-
-00:01:44.720 --> 00:01:47.680
-uh html you can have pdf and and
-
-00:01:47.680 --> 00:01:48.560
-joyously
-
-00:01:48.560 --> 00:01:51.840
-uh org reveal so that was uh that was an
-
-00:01:51.840 --> 00:01:53.600
-unexpected delight
-
-00:01:53.600 --> 00:01:56.640
-um so here is a few that you'll you'll
-
-00:01:56.640 --> 00:01:57.840
-just see as we
-
-00:01:57.840 --> 00:02:01.759
-uh in this presentation you know some uh
-
-00:02:01.759 --> 00:02:04.000
-uh I won't show some of these uh link
-
-00:02:04.000 --> 00:02:05.040
-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:08.080
-just to make the uh
-
-00:02:08.080 --> 00:02:09.920
-presentation look nice so the
-
-00:02:09.920 --> 00:02:11.520
-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
-so uh so this no no html was written
-
-00:02:18.400 --> 00:02:21.280
-look ma no html just pure org mode and
-
-00:02:21.280 --> 00:02:22.000
-and
-
-00:02:22.000 --> 00:02:23.520
-you get all these beautiful boxes and
-
-00:02:23.520 --> 00:02:25.840
-things okay
-
-00:02:25.840 --> 00:02:27.680
-so the motivation for this is you know
-
-00:02:27.680 --> 00:02:29.120
-what uh
-
-00:02:29.120 --> 00:02:31.200
-you're you're online you run into a blog
-
-00:02:31.200 --> 00:02:32.239
-and you see something you like and
-
-00:02:32.239 --> 00:02:33.120
-you're like man
-
-00:02:33.120 --> 00:02:35.280
-you know I wish I could uh you know
-
-00:02:35.280 --> 00:02:36.640
-produce that
-
-00:02:36.640 --> 00:02:39.519
-um uh but you you check in the author
-
-00:02:39.519 --> 00:02:40.160
-wrote raw
-
-00:02:40.160 --> 00:02:44.239
-html you know plus html everywhere
-
-00:02:44.239 --> 00:02:46.800
-and uh that's that's you know gonna
-
-00:02:46.800 --> 00:02:47.840
-obscure
-
-00:02:47.840 --> 00:02:49.680
-your your real content it's going to be
-
-00:02:49.680 --> 00:02:51.200
-surrounded by all this uh
-
-00:02:51.200 --> 00:02:54.239
-styling information that's unfortunate
-
-00:02:54.239 --> 00:02:56.400
-uh the author decides to use an org
-
-00:02:56.400 --> 00:02:58.959
-macro all right a bit better
-
-00:02:58.959 --> 00:03:01.120
-but then what if you decide hey I want
-
-00:03:01.120 --> 00:03:03.360
-to make a
-
-00:03:03.360 --> 00:03:06.000
-not pdf great 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:10.879
-and
-
-00:03:10.879 --> 00:03:13.760
-learn cascading style sheets and and you
-
-00:03:13.760 --> 00:03:14.239
-know
-
-00:03:14.239 --> 00:03:16.159
-sit in a corner and cry decide to do
-
-00:03:16.159 --> 00:03:18.080
-other things with your life
-
-00:03:18.080 --> 00:03:20.959
-so uh we want to give you org users
-
-00:03:20.959 --> 00:03:22.640
-numerous styles
-
-00:03:22.640 --> 00:03:26.000
-and uh and an extensible mechanism to
-
-00:03:26.000 --> 00:03:27.200
-add more of these
-
-00:03:27.200 --> 00:03:28.799
-aesthetically pleasing styles you know
-
-00:03:28.799 --> 00:03:31.200
-to have really nice things
-
-00:03:31.200 --> 00:03:34.720
-look one way in the html and look almost
-
-00:03:34.720 --> 00:03:35.599
-the same way
-
-00:03:35.599 --> 00:03:39.120
-in the pdf and other uh back ends and
-
-00:03:39.120 --> 00:03:41.680
-if by having these newer ones you know
-
-00:03:41.680 --> 00:03:42.159
-people
-
-00:03:42.159 --> 00:03:44.879
-might be encouraged to try making new
-
-00:03:44.879 --> 00:03:45.519
-ones
-
-00:03:45.519 --> 00:03:47.920
-especially when the interface is uh not
-
-00:03:47.920 --> 00:03:49.040
-so difficult
-
-00:03:49.040 --> 00:03:54.159
-uh that's the that's the aim okay
-
-00:03:54.159 --> 00:03:57.360
-uh so let's let's have a a real story to
-
-00:03:57.360 --> 00:03:59.120
-motivate this even more
-
-00:03:59.120 --> 00:04:02.319
-um so here's three friends uh I hope I
-
-00:04:02.319 --> 00:04:03.599
-don't butcher their names but these
-
-00:04:03.599 --> 00:04:04.640
-friends are called
-
-00:04:04.640 --> 00:04:07.040
-amin sasha and corwin and then they're
-
-00:04:07.040 --> 00:04:08.720
-organizing a conference
-
-00:04:08.720 --> 00:04:12.080
-uh EmacsConf 2020.
-
-00:04:12.080 --> 00:04:14.239
-so sasha decides to write an org file
-
-00:04:14.239 --> 00:04:16.479
-and and she would like some feedback
-
-00:04:16.479 --> 00:04:19.199
-okay and and just uh make it clear
-
-00:04:19.199 --> 00:04:19.840
-there's no
-
-00:04:19.840 --> 00:04:22.960
-uh 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.000
-notice it's just the word green then a
-
-00:04:30.000 --> 00:04:30.720
-colon
-
-00:04:30.720 --> 00:04:34.560
-than amine uh so no
-
-00:04:34.560 --> 00:04:37.759
-no div style coloring just just you know
-
-00:04:37.759 --> 00:04:38.479
-green color
-
-00:04:38.479 --> 00:04:41.520
-immune a very pleasant uh or markup
-
-00:04:41.520 --> 00:04:43.600
-so that's that's quite nice put some
-
-00:04:43.600 --> 00:04:44.960
-bold around it
-
-00:04:44.960 --> 00:04:47.840
-not not too difficult so hopefully uh
-
-00:04:47.840 --> 00:04:49.040
-this will be useful to
-
-00:04:49.040 --> 00:04:51.680
-other people as well so what kind of
-
-00:04:51.680 --> 00:04:52.240
-feedback
-
-00:04:52.240 --> 00:04:56.639
-uh would sasha expect to get um so maybe
-
-00:04:56.639 --> 00:04:59.120
-she would expect top level remarks
-
-00:04:59.120 --> 00:04:59.680
-visible
-
-00:04:59.680 --> 00:05:01.759
-in the export you know when she makes an
-
-00:05:01.759 --> 00:05:04.400
-html she can see right there a big block
-
-00:05:04.400 --> 00:05:07.840
-right maybe
-
-00:05:07.840 --> 00:05:09.840
-amin will suggest to sasha please
-
-00:05:09.840 --> 00:05:11.120
-replace this part
-
-00:05:11.120 --> 00:05:12.960
-with this other part or replace this
-
-00:05:12.960 --> 00:05:14.639
-word with this other word
-
-00:05:14.639 --> 00:05:16.960
-right um this is not really possible
-
-00:05:16.960 --> 00:05:17.680
-with raw
-
-00:05:17.680 --> 00:05:21.919
-html or uh yeah 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:27.840
-the replacement argument and it's a bit
-
-00:05:27.840 --> 00:05:28.800
-clunky
-
-00:05:28.800 --> 00:05:30.960
-um but with our setup you just write
-
-00:05:30.960 --> 00:05:32.080
-some text
-
-00:05:32.080 --> 00:05:34.479
-write hashtag plus replace with and then
-
-00:05:34.479 --> 00:05:36.240
-write more text and you're good to go
-
-00:05:36.240 --> 00:05:39.440
-normal uh org markup um
-
-00:05:39.440 --> 00:05:40.720
-everyone speaks different languages
-
-00:05:40.720 --> 00:05:42.479
-maybe they want to use a
-
-00:05:42.479 --> 00:05:45.919
-uh one word 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:49.759
-um so maybe they want to have some
-
-00:05:49.759 --> 00:05:50.560
-translations
-
-00:05:50.560 --> 00:05:52.479
-right so there's different kinds of
-
-00:05:52.479 --> 00:05:55.360
-feedbacks uh let's let's take an example
-
-00:05:55.360 --> 00:05:59.360
-uh look at what they are okay
-
-00:05:59.360 --> 00:06:02.560
-uh so for example sasha might write
-
-00:06:02.560 --> 00:06:06.160
-uh this org mode right here and uh
-
-00:06:06.160 --> 00:06:08.319
-and then in her html exports you might
-
-00:06:08.319 --> 00:06:09.759
-see this
-
-00:06:09.759 --> 00:06:12.080
-and uh her feedback might look really
-
-00:06:12.080 --> 00:06:13.840
-nicely from anyone who says you know
-
-00:06:13.840 --> 00:06:14.560
-let's uh
-
-00:06:14.560 --> 00:06:16.639
-let's do some lisp instead of uh
-
-00:06:16.639 --> 00:06:18.560
-mathematics let's just do some list
-
-00:06:18.560 --> 00:06:20.960
-and and corwin says you know let's let's
-
-00:06:20.960 --> 00:06:22.479
-not be so silly
-
-00:06:22.479 --> 00:06:25.120
-maybe let's just say 9 a.m and move on
-
-00:06:25.120 --> 00:06:28.080
-okay
-
-00:06:28.080 --> 00:06:31.360
-um so amin likes to export to pdf
-
-00:06:31.360 --> 00:06:33.039
-and so he writes his top-level remarks
-
-00:06:33.039 --> 00:06:34.720
-using latex that's how
-
-00:06:34.720 --> 00:06:37.600
-so to get this uh square I mean please
-
-00:06:37.600 --> 00:06:38.960
-change whatever
-
-00:06:38.960 --> 00:06:41.440
-he might write like this hashtag you
-
-00:06:41.440 --> 00:06:43.120
-know plus latex
-
-00:06:43.120 --> 00:06:46.960
-hashtag plus latex right but then
-
-00:06:46.960 --> 00:06:50.000
-sasha only exports to p to html uh for
-
-00:06:50.000 --> 00:06:50.880
-example
-
-00:06:50.880 --> 00:06:54.880
-um and uh so she doesn't look at the pdf
-
-00:06:54.880 --> 00:06:57.199
-and she may not see his top-level
-
-00:06:57.199 --> 00:06:58.560
-feedback you know with those nice
-
-00:06:58.560 --> 00:06:59.440
-brackets and
-
-00:06:59.440 --> 00:07:02.160
-and bold right and so she might think
-
-00:07:02.160 --> 00:07:03.120
-everything's good
-
-00:07:03.120 --> 00:07:06.160
-right and that can be a bit disastrous
-
-00:07:06.160 --> 00:07:09.039
-um so maybe sasha will will then uh make
-
-00:07:09.039 --> 00:07:09.440
-some
-
-00:07:09.440 --> 00:07:13.199
-of her own feedback all right uh but
-
-00:07:13.199 --> 00:07:16.160
-and to produce it she might write html
-
-00:07:16.160 --> 00:07:16.560
-uh
-
-00:07:16.560 --> 00:07:20.639
-um html commands hashtag plus html to
-
-00:07:20.639 --> 00:07:21.680
-get that
-
-00:07:21.680 --> 00:07:24.240
-uh but then amin will make a pdf and
-
-00:07:24.240 --> 00:07:25.680
-this won't stick out
-
-00:07:25.680 --> 00:07:27.759
-and then so he might think everything's
-
-00:07:27.759 --> 00:07:30.160
-okay even even though it's not
-
-00:07:30.160 --> 00:07:33.520
-um then corwin actually decides hey
-
-00:07:33.520 --> 00:07:36.240
-uh let me read the exported result and
-
-00:07:36.240 --> 00:07:36.800
-these
-
-00:07:36.800 --> 00:07:38.319
-there's all those feedback from two
-
-00:07:38.319 --> 00:07:39.919
-people who haven't uh
-
-00:07:39.919 --> 00:07:42.080
-read anything because maybe they were in
-
-00:07:42.080 --> 00:07:43.840
-a russian and didn't
-
-00:07:43.840 --> 00:07:46.400
-see the top level feedback and so they
-
-00:07:46.400 --> 00:07:48.160
-agree hey let's have a uniform org
-
-00:07:48.160 --> 00:07:50.000
-interface that exports
-
-00:07:50.000 --> 00:07:53.280
-to both html and pdf make both of us
-
-00:07:53.280 --> 00:07:54.080
-happy
-
-00:07:54.080 --> 00:07:57.280
-okay so they decide to use org special
-
-00:07:57.280 --> 00:07:58.160
-blocks
-
-00:07:58.160 --> 00:08:01.840
-right um and to set this up they need to
-
-00:08:01.840 --> 00:08:04.400
-you know maybe read a little bit of lisp
-
-00:08:04.400 --> 00:08:04.879
-hooks
-
-00:08:04.879 --> 00:08:08.879
-advice macros to get all of this set up
-
-00:08:08.879 --> 00:08:10.840
-and then they'll use org as the main
-
-00:08:10.840 --> 00:08:12.319
-interface okay
-
-00:08:12.319 --> 00:08:14.400
-it's a lot of work but it's worth it
-
-00:08:14.400 --> 00:08:16.479
-right maybe
-
-00:08:16.479 --> 00:08:19.360
-um but then corwin corbin's a bit tears
-
-00:08:19.360 --> 00:08:19.759
-so
-
-00:08:19.759 --> 00:08:22.960
-uh corwin maybe doesn't want to write
-
-00:08:22.960 --> 00:08:24.800
-uh using blocks he thinks they're
-
-00:08:24.800 --> 00:08:26.080
-overkill and
-
-00:08:26.080 --> 00:08:29.360
-and sasha wants html and uh and
-
-00:08:29.360 --> 00:08:31.840
-I mean wants pdf and corwin wants org
-
-00:08:31.840 --> 00:08:32.560
-reveal
-
-00:08:32.560 --> 00:08:34.240
-so now they have to reformat all their
-
-00:08:34.240 --> 00:08:36.320
-code and then they need to use org link
-
-00:08:36.320 --> 00:08:37.120
-types to
-
-00:08:37.120 --> 00:08:39.599
-reduce the overkill all right so they
-
-00:08:39.599 --> 00:08:41.519
-can try to avoid duplication by
-
-00:08:41.519 --> 00:08:44.000
-factoring things out into self-contained
-
-00:08:44.000 --> 00:08:46.800
-uh defined functions or defunds
-
-00:08:46.800 --> 00:08:50.320
-um but now to set up or links
-
-00:08:50.320 --> 00:08:53.440
-uh we'll have uh to learn a new
-
-00:08:53.440 --> 00:08:54.399
-interface
-
-00:08:54.399 --> 00:08:57.040
-org setup link um learn a little bit
-
-00:08:57.040 --> 00:08:58.000
-about fonts
-
-00:08:58.000 --> 00:09:02.160
-follow links exports handles
-
-00:09:02.160 --> 00:09:05.040
-it's so much that's so much but but then
-
-00:09:05.040 --> 00:09:06.800
-you know the friends they learn a lot
-
-00:09:06.800 --> 00:09:08.399
-you know they learn about defund all
-
-00:09:08.399 --> 00:09:11.120
-right so these these words are red
-
-00:09:11.120 --> 00:09:12.480
-you get a little explanation I think
-
-00:09:12.480 --> 00:09:14.320
-it's a bit too small for anyone to read
-
-00:09:14.320 --> 00:09:16.720
-this is lisp documentation right for
-
-00:09:16.720 --> 00:09:18.000
-defund
-
-00:09:18.000 --> 00:09:19.680
-advice ad there's some list
-
-00:09:19.680 --> 00:09:21.600
-documentation right
-
-00:09:21.600 --> 00:09:23.600
-they learn about destructuring let's so
-
-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 you know glorious
-
-00:09:26.959 --> 00:09:28.800
-glorious documentation with examples
-
-00:09:28.800 --> 00:09:29.360
-sorry
-
-00:09:29.360 --> 00:09:31.680
-I like that they might make an ad-hoc
-
-00:09:31.680 --> 00:09:33.760
-mechanism to simulate
-
-00:09:33.760 --> 00:09:36.000
-arguments for special blocks so
-
-00:09:36.000 --> 00:09:37.040
-something maybe called
-
-00:09:37.040 --> 00:09:40.399
-extract arguments and then of course to
-
-00:09:40.399 --> 00:09:41.920
-make new link types they have to learn
-
-00:09:41.920 --> 00:09:42.480
-about
-
-00:09:42.480 --> 00:09:45.120
-org link set parameters and then it's
-
-00:09:45.120 --> 00:09:46.480
-numerous uh
-
-00:09:46.480 --> 00:09:49.920
-bits and pieces all right so let's oh
-
-00:09:49.920 --> 00:09:50.720
-let's uh
-
-00:09:50.720 --> 00:09:53.600
-close all these ones down and and uh of
-
-00:09:53.600 --> 00:09:55.040
-course they also need to be uh
-
-00:09:55.040 --> 00:09:56.080
-comfortable with
-
-00:09:56.080 --> 00:09:58.720
-uh loops and maps and matching and
-
-00:09:58.720 --> 00:09:59.920
-string functions
-
-00:09:59.920 --> 00:10:02.560
-so it's it's a bit of a pain it's a bit
-
-00:10:02.560 --> 00:10:03.360
-of a pain
-
-00:10:03.360 --> 00:10:05.839
-um so it's probably not worth it so
-
-00:10:05.839 --> 00:10:06.560
-maybe I'll just
-
-00:10:06.560 --> 00:10:09.360
-rush things quickly or do an ad hoc you
-
-00:10:09.360 --> 00:10:10.320
-know
-
-00:10:10.320 --> 00:10:13.680
-we have things to do right
-
-00:10:13.680 --> 00:10:15.920
-so maybe maybe the squad wants to have a
-
-00:10:15.920 --> 00:10:17.839
-modular
-
-00:10:17.839 --> 00:10:21.120
-and unified interface so everyone's
-
-00:10:21.120 --> 00:10:23.040
-comfortable with defunct to define a
-
-00:10:23.040 --> 00:10:25.279
-function and they say you know what
-
-00:10:25.279 --> 00:10:26.480
-it would be nice if we could just you
-
-00:10:26.480 --> 00:10:29.440
-know define simultaneously
-
-00:10:29.440 --> 00:10:32.959
-both a block and the link type right
-
-00:10:32.959 --> 00:10:34.880
-and uh that way we have a single
-
-00:10:34.880 --> 00:10:36.000
-interface
-
-00:10:36.000 --> 00:10:38.240
-org mode for for these things and it
-
-00:10:38.240 --> 00:10:39.040
-would be nice was
-
-00:10:39.040 --> 00:10:42.079
-modular so if I defined a
-
-00:10:42.079 --> 00:10:43.680
-one kind of block and you defined
-
-00:10:43.680 --> 00:10:45.519
-another we could compose them
-
-00:10:45.519 --> 00:10:47.600
-right and then get a you know a nice
-
-00:10:47.600 --> 00:10:49.360
-bigger block like lego
-
-00:10:49.360 --> 00:10:52.320
-that would be nice building box okay and
-
-00:10:52.320 --> 00:10:54.160
-uh this is uh what we
-
-00:10:54.160 --> 00:10:56.240
-have come up with called death block and
-
-00:10:56.240 --> 00:10:57.600
-it also has a
-
-00:10:57.600 --> 00:11:00.240
-long documentation string containing
-
-00:11:00.240 --> 00:11:01.760
-examples and things
-
-00:11:01.760 --> 00:11:04.800
-so that way you can try to be useful
-
-00:11:04.800 --> 00:11:08.320
-okay um so let's let's look at a a
-
-00:11:08.320 --> 00:11:10.880
-solution to these friends uh trilemma
-
-00:11:10.880 --> 00:11:12.800
-all right so here's here's a way to
-
-00:11:12.800 --> 00:11:14.320
-define a block
-
-00:11:14.320 --> 00:11:17.040
-um it looks it's it doesn't look that
-
-00:11:17.040 --> 00:11:19.200
-difficult but this is how they can
-
-00:11:19.200 --> 00:11:22.320
-define a block for um
-
-00:11:22.320 --> 00:11:25.920
-for uh their top-level feedback right
-
-00:11:25.920 --> 00:11:27.680
-so let's let's look at the three main
-
-00:11:27.680 --> 00:11:28.959
-parts together
-
-00:11:28.959 --> 00:11:31.920
-it's not that uh difficult I hope just
-
-00:11:31.920 --> 00:11:33.040
-six lines
-
-00:11:33.040 --> 00:11:34.720
-and that's including a documentation
-
-00:11:34.720 --> 00:11:36.160
-string and you know
-
-00:11:36.160 --> 00:11:39.440
-uh new lines and things okay so in line
-
-00:11:39.440 --> 00:11:41.279
-one we just define the block just like
-
-00:11:41.279 --> 00:11:42.000
-you define
-
-00:11:42.000 --> 00:11:44.880
-a function we define a block the flag
-
-00:11:44.880 --> 00:11:46.399
-the block name is going to be called
-
-00:11:46.399 --> 00:11:49.680
-feedback it has an author who
-
-00:11:49.680 --> 00:11:53.360
-right the author has no default
-
-00:11:53.360 --> 00:11:56.160
-value it has a color and the color has a
-
-00:11:56.160 --> 00:11:57.760
-default value of red
-
-00:11:57.760 --> 00:12:00.560
-okay so just just as when you define
-
-00:12:00.560 --> 00:12:01.680
-functions they
-
-00:12:01.680 --> 00:12:04.880
-they uh you start by uh define
-
-00:12:04.880 --> 00:12:08.639
-or def block than the name some
-
-00:12:08.639 --> 00:12:10.720
-mandatory argument and some optional
-
-00:12:10.720 --> 00:12:13.440
-arguments okay
-
-00:12:13.440 --> 00:12:15.760
-then the next stage is well and
-
-00:12:15.760 --> 00:12:18.480
-definition a documentation you know
-
-00:12:18.480 --> 00:12:20.880
-uh the people who use this which are
-
-00:12:20.880 --> 00:12:22.880
-future you or future me you know
-
-00:12:22.880 --> 00:12:25.519
-uh might want to know what this is all
-
-00:12:25.519 --> 00:12:27.839
-right so let's get to document this
-
-00:12:27.839 --> 00:12:30.560
-uh and uh for for corwin who might want
-
-00:12:30.560 --> 00:12:32.079
-to use uh tooltips
-
-00:12:32.079 --> 00:12:34.560
-uh when corwin writes feedback whatever
-
-00:12:34.560 --> 00:12:35.120
-and
-
-00:12:35.120 --> 00:12:37.120
-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 uh documentation string right so
-
-00:12:41.279 --> 00:12:43.279
-that'll be nice
-
-00:12:43.279 --> 00:12:45.200
-okay and then here's the third part the
-
-00:12:45.200 --> 00:12:46.480
-last three lines are
-
-00:12:46.480 --> 00:12:49.440
-not not so difficult if the back end is
-
-00:12:49.440 --> 00:12:49.680
-in
-
-00:12:49.680 --> 00:12:52.800
-is html 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:00.639
-okay and for each of these uh string
-
-00:13:00.639 --> 00:13:01.279
-markers
-
-00:13:01.279 --> 00:13:03.600
-please put in the color who wrote it and
-
-00:13:03.600 --> 00:13:04.959
-then the contents
-
-00:13:04.959 --> 00:13:07.279
-of the special block or the link type
-
-00:13:07.279 --> 00:13:08.160
-okay
-
-00:13:08.160 --> 00:13:10.639
-um so that's pretty neat not not so
-
-00:13:10.639 --> 00:13:11.600
-difficult
-
-00:13:11.600 --> 00:13:14.639
-so I thought that was kind of cool and
-
-00:13:14.639 --> 00:13:15.519
-then notice it's
-
-00:13:15.519 --> 00:13:18.480
-anaphoric it's it's a this this def
-
-00:13:18.480 --> 00:13:19.519
-block
-
-00:13:19.519 --> 00:13:21.760
-gives you two new names it gives you a
-
-00:13:21.760 --> 00:13:22.560
-name called
-
-00:13:22.560 --> 00:13:25.120
-uh contents and it gives you a name
-
-00:13:25.120 --> 00:13:26.480
-called back end
-
-00:13:26.480 --> 00:13:29.040
-right and so even if you're writing a
-
-00:13:29.040 --> 00:13:31.040
-def block and you intend it to be used
-
-00:13:31.040 --> 00:13:32.560
-only for links
-
-00:13:32.560 --> 00:13:35.440
-uh like the uh these colors for example
-
-00:13:35.440 --> 00:13:37.600
-uh these colors were defined using dev
-
-00:13:37.600 --> 00:13:38.399
-block
-
-00:13:38.399 --> 00:13:41.279
-uh and I used them as links right here
-
-00:13:41.279 --> 00:13:43.360
-and you don't need to worry
-
-00:13:43.360 --> 00:13:44.880
-where does the text come from in the
-
-00:13:44.880 --> 00:13:48.160
-link you know if I say red colon bob uh
-
-00:13:48.160 --> 00:13:48.959
-is it bob
-
-00:13:48.959 --> 00:13:50.720
-or if I put a description is it the
-
-00:13:50.720 --> 00:13:52.000
-description so
-
-00:13:52.000 --> 00:13:54.000
-it's whatever is available will will
-
-00:13:54.000 --> 00:13:56.720
-become uh the value of contents
-
-00:13:56.720 --> 00:13:59.199
-and if you're really you know interested
-
-00:13:59.199 --> 00:14:00.320
-and you want to do some
-
-00:14:00.320 --> 00:14:03.839
-intricate stuff uh def block also gives
-
-00:14:03.839 --> 00:14:04.959
-you something called
-
-00:14:04.959 --> 00:14:08.160
-raw dash contents if you really want to
-
-00:14:08.160 --> 00:14:09.360
-touch the raw
-
-00:14:09.360 --> 00:14:11.920
-uh contents with all of the org markups
-
-00:14:11.920 --> 00:14:12.639
-still there
-
-00:14:12.639 --> 00:14:16.000
-okay so let's uh let's see
-
-00:14:16.000 --> 00:14:18.320
-how uh everyone can uh communicate
-
-00:14:18.320 --> 00:14:19.440
-amongst themselves
-
-00:14:19.440 --> 00:14:22.480
-using this new interface okay so
-
-00:14:22.480 --> 00:14:26.000
-uh uh sasha speculates and she how does
-
-00:14:26.000 --> 00:14:28.399
-she speculate for her organ html
-
-00:14:28.399 --> 00:14:31.440
-she might just write hey look at that no
-
-00:14:31.440 --> 00:14:34.800
-no no html nice and and
-
-00:14:34.800 --> 00:14:37.519
-amin wants to have some green and so he
-
-00:14:37.519 --> 00:14:39.600
-just says hey here's some color green
-
-00:14:39.600 --> 00:14:42.240
-and and uh there you go it looks almost
-
-00:14:42.240 --> 00:14:42.959
-the same
-
-00:14:42.959 --> 00:14:46.560
-right uh notice that the main argument
-
-00:14:46.560 --> 00:14:49.680
-is right here def block took an author
-
-00:14:49.680 --> 00:14:52.480
-and here's the author again and now the
-
-00:14:52.480 --> 00:14:53.920
-optional argument
-
-00:14:53.920 --> 00:14:57.360
-uses the org babel source interface you
-
-00:14:57.360 --> 00:14:58.000
-just say
-
-00:14:58.000 --> 00:15:00.639
-colon and then a key and then the
-
-00:15:00.639 --> 00:15:01.440
-argument
-
-00:15:01.440 --> 00:15:05.040
-quite quite nice and and corwin doesn't
-
-00:15:05.040 --> 00:15:05.519
-want to
-
-00:15:05.519 --> 00:15:07.920
-use blocks it's a bit of an overkill and
-
-00:15:07.920 --> 00:15:09.760
-can just write a
-
-00:15:09.760 --> 00:15:12.959
-a little um right
-
-00:15:12.959 --> 00:15:16.000
-so the main argument is now the uh uh
-
-00:15:16.000 --> 00:15:17.440
-the label of the link
-
-00:15:17.440 --> 00:15:19.360
-all right and then the description of
-
-00:15:19.360 --> 00:15:21.600
-the link is the contents
-
-00:15:21.600 --> 00:15:24.959
-of uh of the feedback so that was quite
-
-00:15:24.959 --> 00:15:25.680
-nice
-
-00:15:25.680 --> 00:15:28.079
-so it looks like uh everyone uses the
-
-00:15:28.079 --> 00:15:29.360
-same interface on the left
-
-00:15:29.360 --> 00:15:32.800
-and can have varying uh outputs
-
-00:15:32.800 --> 00:15:34.480
-and it looks 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:40.000
-um and there's a few more maybe
-
-00:15:40.000 --> 00:15:42.160
-as you saw in some previous ones we had
-
-00:15:42.160 --> 00:15:43.920
-text side beside side
-
-00:15:43.920 --> 00:15:46.800
-right now um or we folded some regions
-
-00:15:46.800 --> 00:15:47.440
-away
-
-00:15:47.440 --> 00:15:49.360
-that was quite nice we put some things
-
-00:15:49.360 --> 00:15:50.959
-in pretty boxes
-
-00:15:50.959 --> 00:15:54.000
-um uh we had some spoilers at the very
-
-00:15:54.000 --> 00:15:57.120
-beginning that we we uh hit some text uh
-
-00:15:57.120 --> 00:15:58.160
-we demoed uh
-
-00:15:58.160 --> 00:15:59.600
-some texts right you know here's some
-
-00:15:59.600 --> 00:16:01.680
-org and here's what it looks like
-
-00:16:01.680 --> 00:16:04.480
-um and and most importantly uh they they
-
-00:16:04.480 --> 00:16:05.199
-compose
-
-00:16:05.199 --> 00:16:08.320
-right there's uh uh there's a
-
-00:16:08.320 --> 00:16:12.639
-a macro called uh uh thread block
-
-00:16:12.639 --> 00:16:14.720
-uh thread block a thread block call and
-
-00:16:14.720 --> 00:16:16.160
-it lets you thread the
-
-00:16:16.160 --> 00:16:18.000
-the contents 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
-and so really you can think of a block
-
-00:16:22.480 --> 00:16:23.680
-as a as a
-
-00:16:23.680 --> 00:16:26.560
-as a string valued function so that's
-
-00:16:26.560 --> 00:16:27.360
-pretty neat
-
-00:16:27.360 --> 00:16:30.959
-I I think and uh thank you for listening
-
-00:16:30.959 --> 00:16:31.759
-and uh
-
-00:16:31.759 --> 00:16:34.320
-I I hope you've uh enjoyed this little
-
-00:16:34.320 --> 00:16:34.880
-uh
-
-00:16:34.880 --> 00:16:37.600
-happy fun time with uh with the Emacs
-
-00:16:37.600 --> 00:16:38.160
-and friends
-
-00:16:38.160 --> 00:16:40.720
-and uh I'll I'm I'll happy happily
-
-00:16:40.720 --> 00:16:41.759
-answer questions
-
-00:16:41.759 --> 00:16:43.730
-uh right now um
-
-00:16:43.730 --> 00:16:45.360
-[Music]
-
-00:16:45.360 --> 00:16:48.160
-so uh someone says why did you put
-
-00:16:48.160 --> 00:16:50.480
-optional arguments in a separate list
-
-00:16:50.480 --> 00:16:53.600
-rather than using cl style argument
-
-00:16:53.600 --> 00:16:54.560
-lists
-
-00:16:54.560 --> 00:16:58.399
-um so that's a very good question
-
-00:16:58.399 --> 00:17:01.680
-and I will answer that by
-
-00:17:01.680 --> 00:17:04.400
-showing you a more involved definition
-
-00:17:04.400 --> 00:17:04.880
-of
-
-00:17:04.880 --> 00:17:08.959
-feedback so let's look at a
-
-00:17:08.959 --> 00:17:13.039
-a more involved one
-
-00:17:13.039 --> 00:17:16.079
-right right here so for example
-
-00:17:16.079 --> 00:17:19.280
-this one is called rural mark all right
-
-00:17:19.280 --> 00:17:21.760
-and uh please let me know if my text is
-
-00:17:21.760 --> 00:17:23.439
-not sufficiently big
-
-00:17:23.439 --> 00:17:26.799
-so here is here is why uh we have
-
-00:17:26.799 --> 00:17:29.520
-two arguments that takes two arguments
-
-00:17:29.520 --> 00:17:30.720
-uh instead of one
-
-00:17:30.720 --> 00:17:33.360
-for for its argument list right so you
-
-00:17:33.360 --> 00:17:34.799
-you have def block
-
-00:17:34.799 --> 00:17:37.679
-then you have the name right then you
-
-00:17:37.679 --> 00:17:38.400
-have
-
-00:17:38.400 --> 00:17:40.960
-the first uh argument list and the
-
-00:17:40.960 --> 00:17:42.880
-second argument list
-
-00:17:42.880 --> 00:17:46.080
-the first argument list uh takes the
-
-00:17:46.080 --> 00:17:49.280
-takes the text right after the begin
-
-00:17:49.280 --> 00:17:51.760
-right the text right after the begin is
-
-00:17:51.760 --> 00:17:52.320
-the main
-
-00:17:52.320 --> 00:17:55.760
-argument okay and then the remaining key
-
-00:17:55.760 --> 00:17:57.039
-value pairs
-
-00:17:57.039 --> 00:18:00.320
-are in the second argument list okay
-
-00:18:00.320 --> 00:18:03.280
-now the reason we have two is because uh
-
-00:18:03.280 --> 00:18:04.640
-in order to
-
-00:18:04.640 --> 00:18:06.799
-streamline the interface to account for
-
-00:18:06.799 --> 00:18:08.880
-both uh special blocks
-
-00:18:08.880 --> 00:18:12.320
-and or link types uh what we do is we
-
-00:18:12.320 --> 00:18:13.360
-say hey
-
-00:18:13.360 --> 00:18:16.160
-uh in the first argument list uh you can
-
-00:18:16.160 --> 00:18:18.000
-give a name to the first argument
-
-00:18:18.000 --> 00:18:21.039
-give it a default value and anything
-
-00:18:21.039 --> 00:18:24.240
-else you provide will become uh
-
-00:18:24.240 --> 00:18:27.760
-uh part of the I'll co link
-
-00:18:27.760 --> 00:18:30.000
-information so for example this link we
-
-00:18:30.000 --> 00:18:32.000
-decided to make its face
-
-00:18:32.000 --> 00:18:34.799
-angry red um you might want to give
-
-00:18:34.799 --> 00:18:35.840
-other features to
-
-00:18:35.840 --> 00:18:37.919
-links so we're trying to streamline the
-
-00:18:37.919 --> 00:18:39.679
-interface for both
-
-00:18:39.679 --> 00:18:42.320
-special blocks and org link types and we
-
-00:18:42.320 --> 00:18:42.880
-thought
-
-00:18:42.880 --> 00:18:46.240
-this way was quite nice um so
-
-00:18:46.240 --> 00:18:49.840
-that was the main reason uh someone asks
-
-00:18:49.840 --> 00:18:52.480
-uh so if if you uh if that's uh if you
-
-00:18:52.480 --> 00:18:55.039
-need if you have follow-up 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:03.600
-well I'm glad you like it I I don't know
-
-00:19:03.600 --> 00:19:04.559
-how to upstream
-
-00:19:04.559 --> 00:19:06.880
-but but I I will look into it and any
-
-00:19:06.880 --> 00:19:08.799
-advice or guidance would be
-
-00:19:08.799 --> 00:19:11.840
-much appreciated um you know
-
-00:19:11.840 --> 00:19:14.640
-lisp is awesome and just as defunded as
-
-00:19:14.640 --> 00:19:17.120
-a macro deathblock is a macro and then
-
-00:19:17.120 --> 00:19:20.240
-source blocks are awesome and then now
-
-00:19:20.240 --> 00:19:21.919
-maybe we can have arguments and special
-
-00:19:21.919 --> 00:19:24.080
-blocks and motivate and encourage more
-
-00:19:24.080 --> 00:19:25.280
-people to uh
-
-00:19:25.280 --> 00:19:28.799
-to uh learn lisp right
-
-00:19:28.799 --> 00:19:32.559
-so another person asks
-
-00:19:32.559 --> 00:19:35.280
-um 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 I'm not quite sure if you're asking
-
-00:19:40.400 --> 00:19:41.840
-are you talking about my cursor right
-
-00:19:41.840 --> 00:19:42.559
-here
-
-00:19:42.559 --> 00:19:48.400
-or are you talking about in the slide um
-
-00:19:48.400 --> 00:19:50.559
-so this this this cursor is some
-
-00:19:50.559 --> 00:19:52.400
-application called
-
-00:19:52.400 --> 00:19:55.440
-a stream brush that I had to purchase uh
-
-00:19:55.440 --> 00:19:57.679
-unfortunately I could not find a a
-
-00:19:57.679 --> 00:19:59.039
-suitable free one
-
-00:19:59.039 --> 00:20:02.159
-um and the blocks I can demonstrate some
-
-00:20:02.159 --> 00:20:03.840
-Emacs list but I can open up my Emacs if
-
-00:20:03.840 --> 00:20:05.679
-people like and we can try some things
-
-00:20:05.679 --> 00:20:06.320
-out
-
-00:20:06.320 --> 00:20:09.440
-happy to do that uh
-
-00:20:09.440 --> 00:20:12.480
-you're welcome uh someone asks
-
-00:20:12.480 --> 00:20:14.880
-a side question about org reveal how do
-
-00:20:14.880 --> 00:20:15.520
-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
-ah excellent question that's what we do
-
-00:20:22.559 --> 00:20:24.640
-that's that's what this uh project is
-
-00:20:24.640 --> 00:20:26.000
-about so it's not
-
-00:20:26.000 --> 00:20:28.960
-org reveal it's it's our fancy parallel
-
-00:20:28.960 --> 00:20:29.440
-uh
-
-00:20:29.440 --> 00:20:32.240
-uh block so we have this thing you say
-
-00:20:32.240 --> 00:20:33.440
-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.120
-uh do you want a bar
-
-00:20:37.120 --> 00:20:39.679
-or not and then you write some text and
-
-00:20:39.679 --> 00:20:40.960
-then you uh
-
-00:20:40.960 --> 00:20:42.480
-you get some text and according with the
-
-00:20:42.480 --> 00:20:44.400
-bar or not right so that's
-
-00:20:44.400 --> 00:20:47.520
-that's how we achieve that in our slides
-
-00:20:47.520 --> 00:20:50.080
-so I'm not uh I'm not quite sure where
-
-00:20:50.080 --> 00:20:52.880
-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:08.320
-I can't seem to find where the parallel
-
-00:21:08.320 --> 00:21:09.440
-blocks were
-
-00:21:09.440 --> 00:21:12.159
-apologies let's move on to the next
-
-00:21:12.159 --> 00:21:15.039
-question I suppose
-
-00:21:15.039 --> 00:21:17.760
-uh I'm pretty sure they're here ah there
-
-00:21:17.760 --> 00:21:18.400
-they are
-
-00:21:18.400 --> 00:21:21.360
-yes so these these uh were just
-
-00:21:21.360 --> 00:21:22.640
-instances of using
-
-00:21:22.640 --> 00:21:25.440
-uh the parallel block and it makes
-
-00:21:25.440 --> 00:21:26.480
-things parallel
-
-00:21:26.480 --> 00:21:29.600
-so that's quite nice um another person
-
-00:21:29.600 --> 00:21:33.360
-asks uh yes
-
-00:21:33.360 --> 00:21:36.720
-excellent um how does this relate to
-
-00:21:36.720 --> 00:21:37.840
-banda pandoc
-
-00:21:37.840 --> 00:21:39.360
-which is used for converting between
-
-00:21:39.360 --> 00:21:40.960
-markup formats
-
-00:21:40.960 --> 00:21:43.919
-so all we're doing is we're we're saying
-
-00:21:43.919 --> 00:21:44.400
-hey
-
-00:21:44.400 --> 00:21:46.799
-please write org because org is just
-
-00:21:46.799 --> 00:21:47.679
-fantastic
-
-00:21:47.679 --> 00:21:50.400
-and we love it and it's the dream and if
-
-00:21:50.400 --> 00:21:51.760
-you would like to view things
-
-00:21:51.760 --> 00:21:55.039
-in html or in org reveal or
-
-00:21:55.039 --> 00:21:58.559
-in pdf that's up to the user so
-
-00:21:58.559 --> 00:22:02.320
-here is a um oh
-
-00:22:02.320 --> 00:22:05.039
-made it too small now so here is a an
-
-00:22:05.039 --> 00:22:06.080
-example
-
-00:22:06.080 --> 00:22:08.880
-so here's an uh how here's how parallel
-
-00:22:08.880 --> 00:22:10.240
-is implemented
-
-00:22:10.240 --> 00:22:13.120
-uh just as a quick example uh not too
-
-00:22:13.120 --> 00:22:14.320
-long
-
-00:22:14.320 --> 00:22:16.880
-uh about half of the implementation is
-
-00:22:16.880 --> 00:22:18.400
-documentation so
-
-00:22:18.400 --> 00:22:20.720
-uh hopefully that speaks for for how
-
-00:22:20.720 --> 00:22:22.720
-useful this feature is
-
-00:22:22.720 --> 00:22:25.280
-uh so we decide if there's a rule or not
-
-00:22:25.280 --> 00:22:28.080
-um we look for the column break
-
-00:22:28.080 --> 00:22:29.760
-and really here we're looking at the
-
-00:22:29.760 --> 00:22:31.840
-back end if the back end is latex
-
-00:22:31.840 --> 00:22:34.960
-uh please use this uh incantation with
-
-00:22:34.960 --> 00:22:37.679
-multi columns mini pages what have you
-
-00:22:37.679 --> 00:22:38.559
-and if the
-
-00:22:38.559 --> 00:22:41.039
-back end is something else uh please uh
-
-00:22:41.039 --> 00:22:41.600
-do this
-
-00:22:41.600 --> 00:22:44.960
-uh div and style and uh other uh
-
-00:22:44.960 --> 00:22:46.640
-gibberish that we don't really wanna
-
-00:22:46.640 --> 00:22:48.080
-look at uh so
-
-00:22:48.080 --> 00:22:51.760
-uh when you pandoc works from org
-
-00:22:51.760 --> 00:22:55.280
-so it might not work directly since our
-
-00:22:55.280 --> 00:22:58.080
-interface the way we set it up is when
-
-00:22:58.080 --> 00:22:59.679
-you try to export
-
-00:22:59.679 --> 00:23:01.919
-uh we hook in and we do a bunch of
-
-00:23:01.919 --> 00:23:03.039
-pre-processing
-
-00:23:03.039 --> 00:23:05.919
-so this this uh def block is a is a
-
-00:23:05.919 --> 00:23:07.440
-string valued function
-
-00:23:07.440 --> 00:23:10.880
-and so whenever we see these uh begin
-
-00:23:10.880 --> 00:23:13.919
-parallel uh when you do an export
-
-00:23:13.919 --> 00:23:16.480
-I tell Emacs hold up look for those
-
-00:23:16.480 --> 00:23:16.960
-begin
-
-00:23:16.960 --> 00:23:19.360
-parallels please oh you found them grab
-
-00:23:19.360 --> 00:23:20.320
-that text
-
-00:23:20.320 --> 00:23:22.400
-you grabbed it great now please apply
-
-00:23:22.400 --> 00:23:24.080
-this person's uh function
-
-00:23:24.080 --> 00:23:27.120
-onto that text and splice in the result
-
-00:23:27.120 --> 00:23:29.760
-okay so so when you export uh we're
-
-00:23:29.760 --> 00:23:30.400
-performing
-
-00:23:30.400 --> 00:23:33.600
-arbitrary computations on your uh uh on
-
-00:23:33.600 --> 00:23:35.120
-your text
-
-00:23:35.120 --> 00:23:38.799
-so uh um some people might not find that
-
-00:23:38.799 --> 00:23:40.159
-comforting to have
-
-00:23:40.159 --> 00:23:43.039
-arbitrary uh computations happening so
-
-00:23:43.039 --> 00:23:45.039
-in this article there's a few where
-
-00:23:45.039 --> 00:23:47.520
-uh we change your text upon export we
-
-00:23:47.520 --> 00:23:48.320
-translate it
-
-00:23:48.320 --> 00:23:51.760
-we do other things to it um
-
-00:23:51.760 --> 00:23:55.360
-so someone says uh if you export to
-
-00:23:55.360 --> 00:23:57.360
-latex to pdf does that work well with
-
-00:23:57.360 --> 00:23:58.640
-beamer as well
-
-00:23:58.640 --> 00:24:00.320
-to create slides with columns for
-
-00:24:00.320 --> 00:24:02.080
-example for uh
-
-00:24:02.080 --> 00:24:05.200
-um so uh actually uh
-
-00:24:05.200 --> 00:24:08.000
-so uh I 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 um
-
-00:24:12.320 --> 00:24:14.480
-so if you want to go to beamer I think
-
-00:24:14.480 --> 00:24:15.360
-the back end for me
-
-00:24:15.360 --> 00:24:18.240
-beamer is called well beamer so instead
-
-00:24:18.240 --> 00:24:18.960
-of a
-
-00:24:18.960 --> 00:24:21.200
-a p case what we would do is we would
-
-00:24:21.200 --> 00:24:22.000
-say oh
-
-00:24:22.000 --> 00:24:25.360
-if it's a latex or it's a beamer
-
-00:24:25.360 --> 00:24:29.279
-then uh use this uh otherwise
-
-00:24:29.279 --> 00:24:31.120
-it's not a latex it will simply default
-
-00:24:31.120 --> 00:24:33.039
-to this one which could be
-
-00:24:33.039 --> 00:24:36.400
-dangerous for your needs um I think it's
-
-00:24:36.400 --> 00:24:39.679
-a bad practice to put a underscore but I
-
-00:24:39.679 --> 00:24:41.279
-did it really quickly because I just
-
-00:24:41.279 --> 00:24:43.679
-wanted to show you that it works fine in
-
-00:24:43.679 --> 00:24:46.559
-org reveal contributions are more than
-
-00:24:46.559 --> 00:24:47.440
-welcome
-
-00:24:47.440 --> 00:24:51.039
-I I uh happily uh would love any
-
-00:24:51.039 --> 00:24:52.240
-assistance
-
-00:24:52.240 --> 00:24:56.080
-um and and I have a uh we have a
-
-00:24:56.080 --> 00:24:58.640
-list a reference cheat sheet here to to
-
-00:24:58.640 --> 00:25:00.159
-learn a little bit about lisp if you're
-
-00:25:00.159 --> 00:25:02.000
-not comfortable or to
-
-00:25:02.000 --> 00:25:04.640
-ask some questions lots of helpful
-
-00:25:04.640 --> 00:25:06.400
-people
-
-00:25:06.400 --> 00:25:09.440
-so there's another question that says uh
-
-00:25:09.440 --> 00:25:11.679
-does typing in a block mess up with a
-
-00:25:11.679 --> 00:25:13.120
-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 you found
-
-00:25:21.279 --> 00:25:25.279
-my crutch um so I so there's
-
-00:25:25.279 --> 00:25:27.440
-emax's is all encompassing and I'm not
-
-00:25:27.440 --> 00:25:29.760
-quite sure how fonts work or are
-
-00:25:29.760 --> 00:25:32.559
-you know I I learned enough to get by I
-
-00:25:32.559 --> 00:25:33.840
-learned enough to get by
-
-00:25:33.840 --> 00:25:37.440
-so let me um but here's
-
-00:25:37.440 --> 00:25:39.760
-here's how links work they're they're a
-
-00:25:39.760 --> 00:25:40.799
-bit complicated
-
-00:25:40.799 --> 00:25:42.960
-this this is a bit scary I don't
-
-00:25:42.960 --> 00:25:43.919
-recommend anyone
-
-00:25:43.919 --> 00:25:47.039
-uh read it um
-
-00:25:47.039 --> 00:25:49.840
-but uh actually let me open up an email
-
-00:25:49.840 --> 00:25:50.559
-and you can
-
-00:25:50.559 --> 00:25:53.600
-you can see what I see uh so here's an
-
-00:25:53.600 --> 00:25:54.799
-Emacs
-
-00:25:54.799 --> 00:25:56.799
-all right let's make that a bit bigger
-
-00:25:56.799 --> 00:25:58.400
-uh let's change this
-
-00:25:58.400 --> 00:26:01.200
-slightly nope that's worse there you go
-
-00:26:01.200 --> 00:26:01.919
-so
-
-00:26:01.919 --> 00:26:05.760
-here's here's some words um so here's
-
-00:26:05.760 --> 00:26:09.360
-red hello um
-
-00:26:09.360 --> 00:26:12.000
-but you're worried about uh preserving
-
-00:26:12.000 --> 00:26:12.400
-uh
-
-00:26:12.400 --> 00:26:15.679
-uh uh um quantification
-
-00:26:15.679 --> 00:26:18.480
-so let's make an emax list block all
-
-00:26:18.480 --> 00:26:18.880
-right
-
-00:26:18.880 --> 00:26:22.840
-and let's say plus one two ah
-
-00:26:22.840 --> 00:26:28.000
-where's the fun hello
-
-00:26:28.000 --> 00:26:32.080
-um bye okay where's the coloring
-
-00:26:32.080 --> 00:26:34.880
-if we if we zoom in on this on this
-
-00:26:34.880 --> 00:26:36.000
-begin source block
-
-00:26:36.000 --> 00:26:39.200
-if we zoom in you can see down here
-
-00:26:39.200 --> 00:26:42.159
-uh we have our our coloring all right
-
-00:26:42.159 --> 00:26:43.279
-when we zoom in
-
-00:26:43.279 --> 00:26:46.960
-if we if we zoom out ah no coloring
-
-00:26:46.960 --> 00:26:50.080
-zoom in coloring it's about ah no
-
-00:26:50.080 --> 00:26:50.880
-coloring
-
-00:26:50.880 --> 00:26:53.840
-let's take off these bad boys and oh
-
-00:26:53.840 --> 00:26:55.679
-look my coloring's back
-
-00:26:55.679 --> 00:26:59.360
-so um in a previous
-
-00:26:59.360 --> 00:27:02.320
-uh iteration of the system I was able to
-
-00:27:02.320 --> 00:27:03.760
-maintain coloring
-
-00:27:03.760 --> 00:27:06.400
-uh in this new iteration I am not I
-
-00:27:06.400 --> 00:27:08.559
-don't know how to do it I haven't uh
-
-00:27:08.559 --> 00:27:11.039
-had the time to to implement it I spent
-
-00:27:11.039 --> 00:27:13.279
-a lot of time writing this uh
-
-00:27:13.279 --> 00:27:17.279
-48 page uh documentation uh with uh
-
-00:27:17.279 --> 00:27:19.679
-with some fun examples to to to try to
-
-00:27:19.679 --> 00:27:20.320
-help
-
-00:27:20.320 --> 00:27:21.760
-people learn so but but I would
-
-00:27:21.760 --> 00:27:23.760
-appreciate any help or guidance on
-
-00:27:23.760 --> 00:27:26.240
-how to uh maintain the quantification I
-
-00:27:26.240 --> 00:27:28.000
-I really would like to keep those colors
-
-00:27:28.000 --> 00:27:29.200
-in
-
-00:27:29.200 --> 00:27:31.840
-um musa we have time for maybe one more
-
-00:27:31.840 --> 00:27:32.640
-question
-
-00:27:32.640 --> 00:27:34.960
-um one or two more questions and then we
-
-00:27:34.960 --> 00:27:37.039
-have to move on to the next talk
-
-00:27:37.039 --> 00:27:39.120
-um but yeah you're more than welcome to
-
-00:27:39.120 --> 00:27:40.799
-take continue taking the questions via
-
-00:27:40.799 --> 00:27:42.559
-irc or the pad
-
-00:27:42.559 --> 00:27:45.760
-okay thank you thank you
-
-00:27:45.760 --> 00:27:48.480
-let's uh the final question we'll take
-
-00:27:48.480 --> 00:27:48.880
-is
-
-00:27:48.880 --> 00:27:52.320
-um should packages implement
-
-00:27:52.320 --> 00:27:54.399
-interface to one specific format or
-
-00:27:54.399 --> 00:27:55.840
-attempt to be conclusive to all the
-
-00:27:55.840 --> 00:27:57.279
-potential output targets
-
-00:27:57.279 --> 00:27:58.880
-I think you should just make them as you
-
-00:27:58.880 --> 00:28:01.120
-go and you know add them as you need
-
-00:28:01.120 --> 00:28:02.559
-them we'll make uh
-
-00:28:02.559 --> 00:28:05.600
-help requests or things and uh
-
-00:28:05.600 --> 00:28:07.840
-we can we can share recipes in this uh
-
-00:28:07.840 --> 00:28:09.279
-document and then
-
-00:28:09.279 --> 00:28:12.799
-try to add other uh techniques and then
-
-00:28:12.799 --> 00:28:16.000
-and we can uh use these blocks as a
-
-00:28:16.000 --> 00:28:19.200
-common uh interface for
-
-00:28:19.200 --> 00:28:22.240
-for exporting to pdf and other things
-
-00:28:22.240 --> 00:28:26.000
-and since someone asked here is a um
-
-00:28:26.000 --> 00:28:28.399
-here is uh what a pdf looks like this is
-
-00:28:28.399 --> 00:28:30.159
-the same pdf and
-
-00:28:30.159 --> 00:28:33.840
-uh rendered uh just I made no effort to
-
-00:28:33.840 --> 00:28:34.960
-make it look good
-
-00:28:34.960 --> 00:28:37.840
-but it surprisingly does look good so so
-
-00:28:37.840 --> 00:28:38.559
-uh that was
-
-00:28:38.559 --> 00:28:41.600
-uh that was nice um that was a
-
-00:28:41.600 --> 00:28:44.320
-terrible magenta but that is life uh
-
-00:28:44.320 --> 00:28:44.880
-anyhow
-
-00:28:44.880 --> 00:28:47.279
-I hope you all enjoyed this talk I hope
-
-00:28:47.279 --> 00:28:48.960
-you will find um
-
-00:28:48.960 --> 00:28:51.679
-death block uh useful to you it is
-
-00:28:51.679 --> 00:28:52.799
-available on melbourne
-
-00:28:52.799 --> 00:28:54.960
-uh in a rush to make it available for
-
-00:28:54.960 --> 00:28:57.679
-EmacsConf 2020 some melba
-
-00:28:57.679 --> 00:29:00.159
-guidelines may not have been in here too
-
-00:29:00.159 --> 00:29:00.960
-please do not
-
-00:29:00.960 --> 00:29:03.200
-hit me um and I hope everyone enjoys the
-
-00:29:03.200 --> 00:29:04.720
-rest of the EmacsConf
-
-00:29:04.720 --> 00:29:08.559
-2020 thank you
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--tuan-anh-nguyen-autogen.vtt b/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen-autogen.vtt
deleted file mode 100644
index 99133c78..00000000
--- a/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen-autogen.vtt
+++ /dev/null
@@ -1,1522 +0,0 @@
-WEBVTT
-
-00:00:01.520 --> 00:00:04.400
-hello everyone my name is toniang
-
-00:00:04.400 --> 00:00:07.200
-I've been using amax for about 10 years
-
-00:00:07.200 --> 00:00:09.280
-today I'm going to talk about 360
-
-00:00:09.280 --> 00:00:11.519
-a new imax package that allows ems to
-
-00:00:11.519 --> 00:00:13.759
-pass multiple programming languages
-
-00:00:13.759 --> 00:00:17.840
-in real time
-
-00:00:17.840 --> 00:00:21.840
-so what is the problem statement
-
-00:00:21.840 --> 00:00:23.359
-in order to support programming
-
-00:00:23.359 --> 00:00:24.960
-functionalities for a particular
-
-00:00:24.960 --> 00:00:25.760
-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:33.840
-very heavily on regular expressions for
-
-00:00:33.840 --> 00:00:34.960
-this
-
-00:00:34.960 --> 00:00:38.320
-e-max is no different most language
-
-00:00:38.320 --> 00:00:39.280
-major modes use
-
-00:00:39.280 --> 00:00:40.879
-regular expressions for syntax
-
-00:00:40.879 --> 00:00:42.960
-highlighting code navigation
-
-00:00:42.960 --> 00:00:46.239
-folding indexing and so on regular
-
-00:00:46.239 --> 00:00:47.440
-expressions are
-
-00:00:47.440 --> 00:00:50.559
-problematic for a couple of reasons
-
-00:00:50.559 --> 00:00:53.600
-they're slow and inaccurate they also
-
-00:00:53.600 --> 00:00:54.000
-make
-
-00:00:54.000 --> 00:00:56.800
-the code hard to read and write
-
-00:00:56.800 --> 00:00:57.440
-sometimes
-
-00:00:57.440 --> 00:00:59.199
-it's because the regular expressions
-
-00:00:59.199 --> 00:01:01.199
-themselves are very hairy
-
-00:01:01.199 --> 00:01:04.000
-and sometimes because they are just not
-
-00:01:04.000 --> 00:01:05.199
-powerful enough
-
-00:01:05.199 --> 00:01:07.840
-some helper code is usually needed to
-
-00:01:07.840 --> 00:01:11.200
-pass more intricate language features
-
-00:01:11.200 --> 00:01:13.280
-that also illustrates the core problem
-
-00:01:13.280 --> 00:01:16.159
-with regular expressions
-
-00:01:16.159 --> 00:01:18.400
-in that they are not powerful enough to
-
-00:01:18.400 --> 00:01:21.119
-pass programming languages
-
-00:01:21.119 --> 00:01:22.640
-an example feature that regular
-
-00:01:22.640 --> 00:01:25.040
-expressions cannot handle very well
-
-00:01:25.040 --> 00:01:27.520
-is string interpolation which is a very
-
-00:01:27.520 --> 00:01:28.320
-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 image somehow
-
-00:01:34.079 --> 00:01:35.840
-had structural understanding of source
-
-00:01:35.840 --> 00:01:36.479
-code
-
-00:01:36.479 --> 00:01:39.520
-like ides do
-
-00:01:39.520 --> 00:01:41.119
-there have been multiple efforts to
-
-00:01:41.119 --> 00:01:42.960
-bring this kind of programming language
-
-00:01:42.960 --> 00:01:45.280
-understanding into Emacs
-
-00:01:45.280 --> 00:01:47.119
-there are language specific persons
-
-00:01:47.119 --> 00:01:48.640
-written in elise
-
-00:01:48.640 --> 00:01:50.240
-they can be thought of as the next
-
-00:01:50.240 --> 00:01:52.320
-logical step of the glue code on top
-
-00:01:52.320 --> 00:01:54.960
-of tribal expressions moving from
-
-00:01:54.960 --> 00:01:56.000
-partial local
-
-00:01:56.000 --> 00:01:58.079
-pattern recognition into a full-fledged
-
-00:01:58.079 --> 00:01:59.840
-parser
-
-00:01:59.840 --> 00:02:01.439
-the most prominent example of this
-
-00:02:01.439 --> 00:02:03.040
-approach is probably the famous
-
-00:02:03.040 --> 00:02:06.479
-js2 mode
-
-00:02:06.479 --> 00:02:10.080
-however this approach has several issues
-
-00:02:10.080 --> 00:02:12.959
-parsing is computationally expensive and
-
-00:02:12.959 --> 00:02:13.680
-imagine
-
-00:02:13.680 --> 00:02:16.800
-is not good at that kind of stuff
-
-00:02:16.800 --> 00:02:18.400
-furthermore maintenance is very
-
-00:02:18.400 --> 00:02:20.840
-troublesome in order to work on these
-
-00:02:20.840 --> 00:02:22.160
-process
-
-00:02:22.160 --> 00:02:23.599
-first you have to know at least well
-
-00:02:23.599 --> 00:02:25.599
-enough and then you have to be
-
-00:02:25.599 --> 00:02:27.760
-comfortable with writing a
-
-00:02:27.760 --> 00:02:30.319
-recursive ascendant parser while
-
-00:02:30.319 --> 00:02:32.080
-constantly keeping up with changes to
-
-00:02:32.080 --> 00:02:34.000
-the language itself
-
-00:02:34.000 --> 00:02:36.879
-which can be evolving very quickly like
-
-00:02:36.879 --> 00:02:39.360
-javascript for example
-
-00:02:39.360 --> 00:02:41.599
-together these constraints significantly
-
-00:02:41.599 --> 00:02:45.680
-reduce the pull of potential maintenance
-
-00:02:45.680 --> 00:02:47.760
-the biggest issue though in my opinion
-
-00:02:47.760 --> 00:02:49.680
-is lack of the set of generic
-
-00:02:49.680 --> 00:02:52.879
-and reusable apis this makes them very
-
-00:02:52.879 --> 00:02:54.319
-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:57.920
-cross-cutting concerns across multiple
-
-00:02:57.920 --> 00:02:59.920
-languages
-
-00:02:59.920 --> 00:03:01.760
-the other approach which has been
-
-00:03:01.760 --> 00:03:03.599
-gaining a lot of momentum in recent
-
-00:03:03.599 --> 00:03:04.319
-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:14.480
-this second approach is actually a very
-
-00:03:14.480 --> 00:03:16.560
-interesting one
-
-00:03:16.560 --> 00:03:18.400
-my decoupling language understanding
-
-00:03:18.400 --> 00:03:21.280
-from the editing facility itself
-
-00:03:21.280 --> 00:03:23.760
-the usb servers can attract a lot more
-
-00:03:23.760 --> 00:03:25.120
-contributors
-
-00:03:25.120 --> 00:03:28.959
-which makes maintenance easier however
-
-00:03:28.959 --> 00:03:32.400
-they also have several issues available
-
-00:03:32.400 --> 00:03:34.720
-being a separate process they are
-
-00:03:34.720 --> 00:03:36.000
-usually more resource
-
-00:03:36.000 --> 00:03:39.920
-intensive and depending on the language
-
-00:03:39.920 --> 00:03:42.159
-the usb 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:47.680
-external to Emacs which may message to
-
-00:03:47.680 --> 00:03:50.640
-install and manage
-
-00:03:50.640 --> 00:03:53.760
-furthermore json over rpc has pretty
-
-00:03:53.760 --> 00:03:55.120
-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 is 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:10.480
-community effort to improve its id
-
-00:04:10.480 --> 00:04:11.760
-support
-
-00:04:11.760 --> 00:04:13.680
-hoping to integrate some of that into
-
-00:04:13.680 --> 00:04:15.760
-Emacs itself
-
-00:04:15.760 --> 00:04:17.600
-then I heard someone from community
-
-00:04:17.600 --> 00:04:19.759
-mention tree sitter
-
-00:04:19.759 --> 00:04:23.360
-and I decided to check it out
-
-00:04:23.360 --> 00:04:25.520
-basically trisita is an incremental
-
-00:04:25.520 --> 00:04:28.720
-parsing library and a parser generator
-
-00:04:28.720 --> 00:04:31.000
-it was introduced by the item editor in
-
-00:04:31.000 --> 00:04:33.040
-2018
-
-00:04:33.040 --> 00:04:35.680
-besides item is also being integrated
-
-00:04:35.680 --> 00:04:36.960
-into the neo-vim
-
-00:04:36.960 --> 00:04:41.040
-editor and github is using it to power
-
-00:04:41.040 --> 00:04:42.479
-their source code analysis and
-
-00:04:42.479 --> 00:04:45.840
-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:49.199
-for all
-
-00:04:49.199 --> 00:04:53.120
-major platforms it can even be compiled
-
-00:04:53.120 --> 00:04:56.080
-to web assembly to run on the web that's
-
-00:04:56.080 --> 00:04:57.600
-how github is using it
-
-00:04:57.600 --> 00:05:00.800
-on their website
-
-00:05:00.800 --> 00:05:02.960
-so why is trisita an interesting
-
-00:05:02.960 --> 00:05:05.840
-solution to this problem
-
-00:05:05.840 --> 00:05:07.360
-there are multiple features that make it
-
-00:05:07.360 --> 00:05:10.000
-an attractive option
-
-00:05:10.000 --> 00:05:12.400
-it is designed to be fast by being
-
-00:05:12.400 --> 00:05:13.680
-incremental
-
-00:05:13.680 --> 00:05:15.680
-the initial parts of a typical big fight
-
-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 milliseconds
-
-00:05:22.560 --> 00:05:24.720
-it achieves this by using structural
-
-00:05:24.720 --> 00:05:26.240
-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:36.000
-also unlike lsp being in the same
-
-00:05:36.000 --> 00:05:37.120
-process
-
-00:05:37.120 --> 00:05:40.639
-it has much lower latency
-
-00:05:40.639 --> 00:05:42.880
-secondly it provides a uniform
-
-00:05:42.880 --> 00:05:44.960
-programming interface
-
-00:05:44.960 --> 00:05:47.039
-the same data structures and functions
-
-00:05:47.039 --> 00:05:48.720
-work on parse trees of different
-
-00:05:48.720 --> 00:05:50.400
-languages
-
-00:05:50.400 --> 00:05:52.160
-syntax knows of different languages
-
-00:05:52.160 --> 00:05:54.160
-differ only by their types
-
-00:05:54.160 --> 00:05:57.360
-and their possible child nodes this
-
-00:05:57.360 --> 00:05:58.960
-is a big advantage over language
-
-00:05:58.960 --> 00:06:02.240
-specific parcels
-
-00:06:02.240 --> 00:06:04.880
-thirdly it's written in self-contained
-
-00:06:04.880 --> 00:06:06.880
-embeddable c
-
-00:06:06.880 --> 00:06:09.680
-as I mentioned previously it can even be
-
-00:06:09.680 --> 00:06:10.400
-compiled
-
-00:06:10.400 --> 00:06:13.759
-to webassembly this makes integrating it
-
-00:06:13.759 --> 00:06:15.199
-into various editors
-
-00:06:15.199 --> 00:06:18.240
-quite easy without having to install
-
-00:06:18.240 --> 00:06:22.880
-any external dependencies
-
-00:06:22.880 --> 00:06:24.639
-one thing that is not mentioned here is
-
-00:06:24.639 --> 00:06:28.000
-that being a parcel generator
-
-00:06:28.000 --> 00:06:31.039
-scrummers are declarative
-
-00:06:31.039 --> 00:06:34.880
-together with being editor independent
-
-00:06:34.880 --> 00:06:36.720
-this makes the pool of potential
-
-00:06:36.720 --> 00:06:38.160
-contributors
-
-00:06:38.160 --> 00:06:42.400
-much larger so I was convinced
-
-00:06:42.400 --> 00:06:45.520
-that trisito 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:48.720
-using
-
-00:06:48.720 --> 00:06:50.960
-dynamic model support introduced in imax
-
-00:06:50.960 --> 00:06:53.280
-25.
-
-00:06:53.280 --> 00:06:55.360
-dynamic module means there is platform
-
-00:06:55.360 --> 00:06:58.479
-specific native code involved
-
-00:06:58.479 --> 00:07:00.560
-but since they are pre-compiled binaries
-
-00:07:00.560 --> 00:07:02.880
-for the three major platforms
-
-00:07:02.880 --> 00:07:06.319
-it should work in most places currently
-
-00:07:06.319 --> 00:07:08.319
-the core functionalities are in a pretty
-
-00:07:08.319 --> 00:07:09.440
-good shape
-
-00:07:09.440 --> 00:07:12.560
-syntax highlighting is working nicely
-
-00:07:12.560 --> 00:07:14.840
-the whole thing is split into three
-
-00:07:14.840 --> 00:07:16.080
-packages
-
-00:07:16.080 --> 00:07:17.759
-tree sitter is the main package that
-
-00:07:17.759 --> 00:07:20.319
-other packages should depend on
-
-00:07:20.319 --> 00:07:22.800
-tree system lens 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:30.080
-and finally the core apis are in the
-
-00:07:30.080 --> 00:07:32.160
-package tsc
-
-00:07:32.160 --> 00:07:36.160
-which stands for trees the core
-
-00:07:36.160 --> 00:07:38.800
-it is the implicit dependency of the
-
-00:07:38.800 --> 00:07:43.520
-three-seater package
-
-00:07:43.520 --> 00:07:46.000
-the main package includes the miner mode
-
-00:07:46.000 --> 00:07:47.520
-3-seater mode
-
-00:07:47.520 --> 00:07:49.840
-this provides the base for other major
-
-00:07:49.840 --> 00:07:52.560
-or minor modes to build on
-
-00:07:52.560 --> 00:07:55.280
-using image change tracking hooks it
-
-00:07:55.280 --> 00:07:55.840
-enables
-
-00:07:55.840 --> 00:07:58.080
-incremental parsing and provides a
-
-00:07:58.080 --> 00:08:00.800
-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.560
-there is also a basic debug mode that
-
-00:08:06.560 --> 00:08:10.080
-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.759
-here I mean an empty python buffer with
-
-00:08:15.759 --> 00:08:17.520
-three seater 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.720
-since the buffer is empty there is only
-
-00:08:28.720 --> 00:08:30.639
-one node in the syntax tree the top
-
-00:08:30.639 --> 00:08:33.279
-level module node
-
-00:08:33.279 --> 00:09:11.040
-let's try typing some code
-
-00:09:11.040 --> 00:09:13.600
-as you can see as I type into the python
-
-00:09:13.600 --> 00:09:14.640
-buffer
-
-00:09:14.640 --> 00:09:19.120
-the syntax tree updates in real time
-
-00:09:19.120 --> 00:09:21.120
-the other minor mode included in the
-
-00:09:21.120 --> 00:09:23.279
-main package is 3-seater
-
-00:09:23.279 --> 00:09:26.640
-hl mode it overrides font-lock mode and
-
-00:09:26.640 --> 00:09:28.480
-provides its own set of phases
-
-00:09:28.480 --> 00:09:31.839
-and customization options it is query
-
-00:09:31.839 --> 00:09:32.800
-driven
-
-00:09:32.800 --> 00:09:35.200
-that means instead of regular
-
-00:09:35.200 --> 00:09:36.240
-expressions
-
-00:09:36.240 --> 00:09:38.720
-it uses a list like query language to
-
-00:09:38.720 --> 00:09:40.320
-map syntax notes
-
-00:09:40.320 --> 00:09:43.760
-to highlighting phrases I'm going to
-
-00:09:43.760 --> 00:09:45.760
-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:02.839
-this is the highlighting enabled by tree
-
-00:10:02.839 --> 00:10:04.640
-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:20.240
-you can also note that property
-
-00:10:20.240 --> 00:10:21.839
-assessors
-
-00:10:21.839 --> 00:10:24.640
-and property assignments are highlighted
-
-00:10:24.640 --> 00:10:27.440
-differently
-
-00:10:27.440 --> 00:10:29.360
-what I like the most about this is that
-
-00:10:29.360 --> 00:10:30.880
-new bindings are consistently
-
-00:10:30.880 --> 00:10:32.640
-highlighted
-
-00:10:32.640 --> 00:10:36.320
-this included local variable
-
-00:10:36.320 --> 00:10:39.760
-function parameters and property
-
-00:10:39.760 --> 00:10:45.760
-mutations
-
-00:10:45.760 --> 00:10:48.000
-before going through the three 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.760
-let's take a brief look at the core data
-
-00:10:53.760 --> 00:10:55.040
-structures and functions
-
-00:10:55.040 --> 00:10:58.079
-that tree sitter provides
-
-00:10:58.079 --> 00:10:59.839
-so parsing is done with the help of a
-
-00:10:59.839 --> 00:11:02.240
-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
-pass different languages
-
-00:11:06.000 --> 00:11:08.320
-by sending different language objects to
-
-00:11:08.320 --> 00:11:09.279
-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 three seater mode 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.200
-we can ask tree sitter what is the
-
-00:11:27.200 --> 00:11:44.240
-syntax node at point
-
-00:11:44.240 --> 00:11:47.200
-uh is it an opaque object so this is not
-
-00:11:47.200 --> 00:11:48.480
-very useful
-
-00:11:48.480 --> 00:12:03.760
-we can instead ask what is its type
-
-00:12:03.760 --> 00:12:06.560
-so his type is the symbol comparison
-
-00:12:06.560 --> 00:12:08.959
-operator
-
-00:12:08.959 --> 00:12:11.600
-trees 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:15.519
-anonymous nodes correspond to simple
-
-00:12:15.519 --> 00:12:17.040
-grammar elements
-
-00:12:17.040 --> 00:12:19.839
-like keywords operators punctuations and
-
-00:12:19.839 --> 00:12:21.279
-so on
-
-00:12:21.279 --> 00:12:24.160
-name nodes on the other hand grammar
-
-00:12:24.160 --> 00:12:25.920
-elements that are interesting enough for
-
-00:12:25.920 --> 00:12:26.639
-their own
-
-00:12:26.639 --> 00:12:30.320
-to have a name like an identifier an
-
-00:12:30.320 --> 00:12:31.839
-expression
-
-00:12:31.839 --> 00:12:35.440
-or a function definition
-
-00:12:35.440 --> 00:12:37.760
-name node types are symbols while
-
-00:12:37.760 --> 00:12:42.639
-anonymous node types are strings
-
-00:12:42.639 --> 00:12:46.320
-for example if we are on this
-
-00:12:46.320 --> 00:12:49.760
-comparison operator
-
-00:12:49.760 --> 00:12:55.920
-the node type should be a string
-
-00:12:55.920 --> 00:12:57.920
-we can also get other information about
-
-00:12:57.920 --> 00:12:58.959
-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.160
-there are many other apis to query or
-
-00:13:46.160 --> 00:13:46.839
-not
-
-00:13:46.839 --> 00:13:52.639
-properties
-
-00:13:52.639 --> 00:13:54.399
-tree sitter allows searching for
-
-00:13:54.399 --> 00:13:58.240
-structural patterns within a parse tree
-
-00:13:58.240 --> 00:14:01.440
-it does so through a list like language
-
-00:14:01.440 --> 00:14:03.519
-this language supports by the matching
-
-00:14:03.519 --> 00:14:04.639
-by node types
-
-00:14:04.639 --> 00:14:07.760
-field names and predicates
-
-00:14:07.760 --> 00:14:10.079
-it also allows capturing nodes for
-
-00:14:10.079 --> 00:14:12.639
-further processing
-
-00:14:12.639 --> 00:14:37.680
-let's try to see some examples
-
-00:14:37.680 --> 00:14:41.040
-so in this very simple query we just
-
-00:14:41.040 --> 00:14:43.839
-try to highlight all the identifiers in
-
-00:14:43.839 --> 00:14:49.040
-the buffer
-
-00:14:49.040 --> 00:14:51.920
-this s side tells trisito to capture a
-
-00:14:51.920 --> 00:14:53.120
-node
-
-00:14:53.120 --> 00:14:55.839
-in the context of the query builder it's
-
-00:14:55.839 --> 00:14:57.360
-not very important
-
-00:14:57.360 --> 00:15:00.320
-but in normal highlighting query this
-
-00:15:00.320 --> 00:15:01.760
-will determine
-
-00:15:01.760 --> 00:15:06.639
-the face used to highlight the note
-
-00:15:06.639 --> 00:15:08.800
-suppose we want to capture all the
-
-00:15:08.800 --> 00:15:10.320
-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:31.600
-uh this will highlight the whole
-
-00:15:31.600 --> 00:15:32.639
-definition
-
-00:15:32.639 --> 00:15:35.519
-but we only want to capture the function
-
-00:15:35.519 --> 00:15:36.399
-name
-
-00:15:36.399 --> 00:15:39.600
-which means the identifier
-
-00:15:39.600 --> 00:15:42.800
-here so we
-
-00:15:42.800 --> 00:15:46.320
-move the capture to after the identifier
-
-00:15:46.320 --> 00:15:49.600
-node
-
-00:15:49.600 --> 00:15:51.759
-if we want to capture the class names as
-
-00:15:51.759 --> 00:15:52.959
-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:22.959
-here we can see that single quotes
-
-00:16:22.959 --> 00:16:23.759
-strings and
-
-00:16:23.759 --> 00:16:25.600
-double quotes screens are highlighted
-
-00:16:25.600 --> 00:16:27.279
-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:35.440
-it may be desirable to highlight them
-
-00:16:35.440 --> 00:16:37.279
-differently for example if
-
-00:16:37.279 --> 00:16:39.680
-the string is single quoted we may want
-
-00:16:39.680 --> 00:16:40.880
-to highlight it
-
-00:16:40.880 --> 00:16:44.399
-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:47.600
-distinguish these
-
-00:16:47.600 --> 00:16:56.240
-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:04.559
-or
-
-00:17:04.559 --> 00:17:08.799
-double quote strings
-
-00:17:08.799 --> 00:17:11.039
-we can try looking at the first
-
-00:17:11.039 --> 00:17:12.480
-character
-
-00:17:12.480 --> 00:17:15.280
-of the string I mean the first character
-
-00:17:15.280 --> 00:17:16.720
-of the note
-
-00:17:16.720 --> 00:17:19.360
-to check whether it's a single quote or
-
-00:17:19.360 --> 00:17:33.600
-a double quote
-
-00:17:33.600 --> 00:17:36.080
-yeah so for that we use the three
-
-00:17:36.080 --> 00:17:36.799
-setters
-
-00:17:36.799 --> 00:17:40.160
-support for predicate in this case
-
-00:17:40.160 --> 00:17:43.360
-we use a match predicate
-
-00:17:43.360 --> 00:17:46.080
-to check whether the string where the
-
-00:17:46.080 --> 00:17:46.799
-note
-
-00:17:46.799 --> 00:17:50.320
-starts with a single quote and with this
-
-00:17:50.320 --> 00:17:51.280
-pattern
-
-00:17:51.280 --> 00:17:58.840
-we only capture the single quotes
-
-00:17:58.840 --> 00:18:00.400
-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:18.640
-and we add this pattern
-
-00:18:18.640 --> 00:18:25.120
-pop item only
-
-00:18:25.120 --> 00:18:28.400
-but we also want to give the
-
-00:18:28.400 --> 00:18:31.440
-capture a different name
-
-00:18:31.440 --> 00:18:40.840
-let's say we want to highlight it as a
-
-00:18:40.840 --> 00:18:46.559
-keyword
-
-00:18:46.559 --> 00:19:06.320
-and now if we refresh the buffer
-
-00:19:06.320 --> 00:19:08.799
-we see that single quote strings are
-
-00:19:08.799 --> 00:19:10.320
-highlighted as
-
-00:19:10.320 --> 00:19:14.400
-keywords
-
-00:19:14.400 --> 00:19:16.400
-the highlighting patterns can also be
-
-00:19:16.400 --> 00:19:19.200
-set for a single project
-
-00:19:19.200 --> 00:19:23.440
-using directory local variable
-
-00:19:23.440 --> 00:19:26.880
-for example let's take a look at
-
-00:19:26.880 --> 00:19:35.760
-ems source code
-
-00:19:35.760 --> 00:19:40.400
-so in image c source there are a lot of
-
-00:19:40.400 --> 00:19:43.760
-uses of these different macros
-
-00:19:43.760 --> 00:19:47.679
-to define functions
-
-00:19:47.679 --> 00:19:51.200
-and you can see
-
-00:19:51.200 --> 00:19:53.520
-this is actually the function name but
-
-00:19:53.520 --> 00:19:55.760
-it's highlighted as the
-
-00:19:55.760 --> 00:19:59.120
-string so what we want
-
-00:19:59.120 --> 00:20:03.679
-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
-as highlight this part
-
-00:20:11.280 --> 00:20:14.559
-with the function phase instead
-
-00:20:14.559 --> 00:20:17.679
-in order to do that
-
-00:20:17.679 --> 00:20:20.240
-we put a pattern in this project
-
-00:20:20.240 --> 00:20:21.760
-directory local
-
-00:20:21.760 --> 00:20:31.760
-settings file
-
-00:20:31.760 --> 00:20:34.799
-so we can put this button in the c
-
-00:20:34.799 --> 00:20:40.159
-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 the highlighted
-
-00:20:50.480 --> 00:20:53.200
-uh
-
-00:20:53.200 --> 00:20:55.520
-as a normal function definition so this
-
-00:20:55.520 --> 00:20:56.559
-is the function
-
-00:20:56.559 --> 00:21:01.200
-face like we wanted
-
-00:21:01.200 --> 00:21:03.760
-the pattern for this is actually pretty
-
-00:21:03.760 --> 00:21:07.200
-simple
-
-00:21:07.200 --> 00:21:10.720
-it's only
-
-00:21:10.720 --> 00:21:14.720
-only this part so
-
-00:21:14.720 --> 00:21:17.440
-if it's a function call where the name
-
-00:21:17.440 --> 00:21:19.679
-of the function is different
-
-00:21:19.679 --> 00:21:21.600
-then we highlight the different as a
-
-00:21:21.600 --> 00:21:24.240
-keyword
-
-00:21:24.240 --> 00:21:27.360
-and then the first string element we
-
-00:21:27.360 --> 00:21:28.159
-highlighted
-
-00:21:28.159 --> 00:21:35.360
-as a function name
-
-00:21:35.360 --> 00:21:37.679
-since the language objects are actually
-
-00:21:37.679 --> 00:21:39.280
-native code
-
-00:21:39.280 --> 00:21:40.799
-they have to be compiled for each
-
-00:21:40.799 --> 00:21:43.440
-platform that we want to support
-
-00:21:43.440 --> 00:21:45.600
-this will become a big obstacle for
-
-00:21:45.600 --> 00:21:48.159
-3-seater adoption
-
-00:21:48.159 --> 00:21:50.240
-therefore I've created a language window
-
-00:21:50.240 --> 00:21:52.960
-package 3-seater length
-
-00:21:52.960 --> 00:21:54.960
-that takes care of pre-compiling the
-
-00:21:54.960 --> 00:21:56.320
-grammars the
-
-00:21:56.320 --> 00:21:59.679
-most common grammars for all three major
-
-00:21:59.679 --> 00:22:01.600
-platforms
-
-00:22:01.600 --> 00:22:04.080
-it also takes care of distributing these
-
-00:22:04.080 --> 00:22:05.360
-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:15.919
-should be treated as a temporary
-
-00:22:15.919 --> 00:22:19.919
-distribution mechanism only
-
-00:22:19.919 --> 00:22:22.240
-to help with bootstrapping three-seaters
-
-00:22:22.240 --> 00:22:24.720
-adoption
-
-00:22:24.720 --> 00:22:27.760
-the plan is that eventually these files
-
-00:22:27.760 --> 00:22:29.760
-should be provided by the language major
-
-00:22:29.760 --> 00:22:32.480
-modes themselves
-
-00:22:32.480 --> 00:22:35.120
-but in order to do that we need better
-
-00:22:35.120 --> 00:22:36.320
-tooling
-
-00:22:36.320 --> 00:22:40.240
-so we're not there yet
-
-00:22:40.240 --> 00:22:42.559
-since the call already works reasonably
-
-00:22:42.559 --> 00:22:43.280
-well
-
-00:22:43.280 --> 00:22:44.640
-there are several areas that would
-
-00:22:44.640 --> 00:22:46.320
-benefit from the community's
-
-00:22:46.320 --> 00:22:49.120
-contribution
-
-00:22:49.120 --> 00:22:51.520
-so three seaters upstream language
-
-00:22:51.520 --> 00:22:52.640
-prepositories
-
-00:22:52.640 --> 00:22:54.400
-already contain highlighting queries on
-
-00:22:54.400 --> 00:22:55.679
-their own
-
-00:22:55.679 --> 00:22:58.480
-however they are pretty basic and they
-
-00:22:58.480 --> 00:23:00.480
-may not fit well with existing emax
-
-00:23:00.480 --> 00:23:02.559
-conventions
-
-00:23:02.559 --> 00:23:04.320
-therefore the language bundle has its
-
-00:23:04.320 --> 00:23:07.120
-own set of highlighting queries
-
-00:23:07.120 --> 00:23:10.559
-this requires maintenance until language
-
-00:23:10.559 --> 00:23:11.600
-measurements adopt
-
-00:23:11.600 --> 00:23:13.760
-three sitter and maintain the queries on
-
-00:23:13.760 --> 00:23:16.640
-their own
-
-00:23:16.640 --> 00:23:18.480
-the queries are actually quite easy to
-
-00:23:18.480 --> 00:23:22.000
-write as you've already seen
-
-00:23:22.000 --> 00:23:24.240
-you just need to be familiar with the
-
-00:23:24.240 --> 00:23:25.360
-language
-
-00:23:25.360 --> 00:23:30.000
-familiar enough to come up with sensible
-
-00:23:30.000 --> 00:23:35.200
-highlighting patterns
-
-00:23:35.200 --> 00:23:37.600
-and if you are a maintainer of a
-
-00:23:37.600 --> 00:23:39.679
-language major mode
-
-00:23:39.679 --> 00:23:42.320
-you may want to consider integrating
-
-00:23:42.320 --> 00:23:43.360
-tree sitter into
-
-00:23:43.360 --> 00:23:46.960
-your mode initially maybe as an
-
-00:23:46.960 --> 00:23:50.080
-optional feature the integration is
-
-00:23:50.080 --> 00:23:53.279
-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:03.760
-you can also try writing a new major
-
-00:24:03.760 --> 00:24:04.640
-mode
-
-00:24:04.640 --> 00:24:08.000
-from scratch that relies on tree sitter
-
-00:24:08.000 --> 00:24:12.559
-from the very beginning
-
-00:24:12.559 --> 00:24:16.320
-the code for such a major mode is
-
-00:24:16.320 --> 00:24:19.679
-quite simple for example
-
-00:24:19.679 --> 00:24:23.200
-this is the proposed
-
-00:24:23.200 --> 00:24:26.240
-what mode for web assembly
-
-00:24:26.240 --> 00:24:31.039
-the code is just
-
-00:24:31.039 --> 00:24:34.559
-like one page of code not
-
-00:24:34.559 --> 00:24:39.520
-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.080
-for example a lot of package a lot of
-
-00:24:50.080 --> 00:24:50.880
-packages
-
-00:24:50.880 --> 00:24:54.559
-may benefit from tree sitter integration
-
-00:24:54.559 --> 00:24:58.840
-but no one has written the integration
-
-00:24:58.840 --> 00:25:02.960
-yet
-
-00:25:02.960 --> 00:25:05.039
-if you are interested in 3-seater you
-
-00:25:05.039 --> 00:25:06.720
-can use these links to
-
-00:25:06.720 --> 00:25:10.320
-learn more about it I think that's it
-
-00:25:10.320 --> 00:25:11.440
-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--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-autogen.vtt b/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon-autogen.vtt
deleted file mode 100644
index e7eada5b..00000000
--- a/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon-autogen.vtt
+++ /dev/null
@@ -1,757 +0,0 @@
-WEBVTT
-
-00:00:00.799 --> 00:00:04.000
-hello everyone and welcome to this short
-
-00:00:04.000 --> 00:00:05.520
-lightning talk
-
-00:00:05.520 --> 00:00:08.160
-traverse complex json structures with
-
-00:00:08.160 --> 00:00:09.519
-live feedback
-
-00:00:09.519 --> 00:00:13.040
-this is a pre-recorded talk and part of
-
-00:00:13.040 --> 00:00:18.000
-the e-max conf 2020 schedule
-
-00:00:18.000 --> 00:00:19.920
-this is what we're going to do I'll make
-
-00:00:19.920 --> 00:00:21.840
-a quick introduction to the topic at
-
-00:00:21.840 --> 00:00:22.320
-hand
-
-00:00:22.320 --> 00:00:23.920
-I'll give you a demonstration of some
-
-00:00:23.920 --> 00:00:25.760
-tools and then we'll leave you
-
-00:00:25.760 --> 00:00:29.199
-with the links to set tools
-
-00:00:29.199 --> 00:00:31.920
-before that just a little bit about me I
-
-00:00:31.920 --> 00:00:32.399
-am the
-
-00:00:32.399 --> 00:00:36.079
-ceo and co-founder of a company
-
-00:00:36.079 --> 00:00:39.520
-based in the swiss mountains called 200
-
-00:00:39.520 --> 00:00:40.399
-okay
-
-00:00:40.399 --> 00:00:43.600
-we are a product incubator and
-
-00:00:43.600 --> 00:00:46.160
-service consultancy but we like to spend
-
-00:00:46.160 --> 00:00:47.200
-most or at least
-
-00:00:47.200 --> 00:00:50.719
-as much time as we can building free
-
-00:00:50.719 --> 00:00:52.719
-software
-
-00:00:52.719 --> 00:00:55.520
-I'm also an ordained zen monk and abbott
-
-00:00:55.520 --> 00:00:56.879
-of the lambda zen temple
-
-00:00:56.879 --> 00:01:00.160
-you can reach me anytime on questions
-
-00:01:00.160 --> 00:01:01.359
-regarding Emacs
-
-00:01:01.359 --> 00:01:05.860
-for example at ala at 200ok.ch
-
-00:01:05.860 --> 00:01:07.200
-[Music]
-
-00:01:07.200 --> 00:01:09.600
-but back to the topic at hand the
-
-00:01:09.600 --> 00:01:11.760
-proposition is as following
-
-00:01:11.760 --> 00:01:13.680
-most work on the computer is based on
-
-00:01:13.680 --> 00:01:15.520
-either text processing or text
-
-00:01:15.520 --> 00:01:16.479
-consumption
-
-00:01:16.479 --> 00:01:19.920
-and very often the text which you need
-
-00:01:19.920 --> 00:01:20.880
-to process
-
-00:01:20.880 --> 00:01:23.520
-is in a structured format for example in
-
-00:01:23.520 --> 00:01:24.560
-json
-
-00:01:24.560 --> 00:01:26.640
-that might even be if your job is not
-
-00:01:26.640 --> 00:01:28.560
-programming per se
-
-00:01:28.560 --> 00:01:30.400
-and reading through such a bigger chunk
-
-00:01:30.400 --> 00:01:33.119
-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:39.119
-will be essential to getting your job
-
-00:01:39.119 --> 00:01:40.320
-done
-
-00:01:40.320 --> 00:01:43.680
-so let's quickly check out an example
-
-00:01:43.680 --> 00:01:47.200
-json file this is from the github api
-
-00:01:47.200 --> 00:01:50.560
-where which is a request sorry the
-
-00:01:50.560 --> 00:01:53.119
-response to a request for a specific
-
-00:01:53.119 --> 00:01:55.280
-issue on the github api so let's
-
-00:01:55.280 --> 00:01:58.799
-quickly check that one out
-
-00:01:58.799 --> 00:02:01.280
-okay so here it is open and we can
-
-00:02:01.280 --> 00:02:03.280
-already see that there is lots of stuff
-
-00:02:03.280 --> 00:02:05.439
-going on here
-
-00:02:05.439 --> 00:02:08.319
-it's uh 200 lines it's not going to be
-
-00:02:08.319 --> 00:02:10.319
-very easy just just to find out what are
-
-00:02:10.319 --> 00:02:12.160
-the top level things in here what are
-
-00:02:12.160 --> 00:02:13.920
-the top level attributes of course I can
-
-00:02:13.920 --> 00:02:14.560
-do this
-
-00:02:14.560 --> 00:02:16.480
-and maybe it would by hand but that
-
-00:02:16.480 --> 00:02:17.840
-doesn't scale
-
-00:02:17.840 --> 00:02:20.560
-I can use cool Emacs facilities like the
-
-00:02:20.560 --> 00:02:22.560
-height show mode and try to
-
-00:02:22.560 --> 00:02:24.720
-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.760
-there must be a better way and of course
-
-00:02:29.760 --> 00:02:32.000
-there is there is prior art
-
-00:02:32.000 --> 00:02:34.959
-there is a tool called jq I'm going to
-
-00:02:34.959 --> 00:02:36.080
-quote the usp
-
-00:02:36.080 --> 00:02:39.120
-from their website jq is like
-
-00:02:39.120 --> 00:02:42.959
-sed said for json data you can use it to
-
-00:02:42.959 --> 00:02:44.720
-slice and filter and map
-
-00:02:44.720 --> 00:02:46.720
-and transform structured data with the
-
-00:02:46.720 --> 00:02:47.840
-same ease that
-
-00:02:47.840 --> 00:02:51.519
-z awk grep and friends let you play with
-
-00:02:51.519 --> 00:02:54.000
-text
-
-00:02:54.000 --> 00:02:56.160
-let me give you a quick demonstration of
-
-00:02:56.160 --> 00:02:57.519
-it by the way
-
-00:02:57.519 --> 00:02:59.680
-it's written in portable c it has zero
-
-00:02:59.680 --> 00:03:01.920
-runtime dependency so it's very easy
-
-00:03:01.920 --> 00:03:04.959
-to get started with it and use it on
-
-00:03:04.959 --> 00:03:09.040
-pretty much any unix-based
-
-00:03:09.040 --> 00:03:12.800
-computer sorry no linux based computer
-
-00:03:12.800 --> 00:03:16.159
-apologies okay so let's explore a
-
-00:03:16.159 --> 00:03:19.599
-json file with it it's a command line
-
-00:03:19.599 --> 00:03:21.120
-tool and it has a very
-
-00:03:21.120 --> 00:03:24.640
-simple command line syntax so you
-
-00:03:24.640 --> 00:03:26.799
-call the binary and then you give it a
-
-00:03:26.799 --> 00:03:27.840
-query
-
-00:03:27.840 --> 00:03:31.680
-and a file and then we'll return
-
-00:03:31.680 --> 00:03:33.840
-its answer so for example if I want the
-
-00:03:33.840 --> 00:03:35.440
-top level keys
-
-00:03:35.440 --> 00:03:38.319
-I will just say jq keys the file and it
-
-00:03:38.319 --> 00:03:39.840
-will return the keys
-
-00:03:39.840 --> 00:03:42.319
-simple as that so let's check this out
-
-00:03:42.319 --> 00:03:43.519
-in a real
-
-00:03:43.519 --> 00:03:46.879
-shell here I am in eshel
-
-00:03:46.879 --> 00:03:50.080
-let's run jq keys on the github
-
-00:03:50.080 --> 00:03:53.200
-issue comment and we can see
-
-00:03:53.200 --> 00:03:56.959
-that we have actually received a list
-
-00:03:56.959 --> 00:04:00.000
-back here with the top level
-
-00:04:00.000 --> 00:04:02.000
-things okay so this issue it looks very
-
-00:04:02.000 --> 00:04:04.319
-very interesting so let's uh ask it to
-
-00:04:04.319 --> 00:04:06.239
-give me more information on this
-
-00:04:06.239 --> 00:04:10.080
-issue then it's hairy again that's a lot
-
-00:04:10.080 --> 00:04:11.360
-of stuff
-
-00:04:11.360 --> 00:04:14.319
-I mean lucky for for us we are in Emacs
-
-00:04:14.319 --> 00:04:17.759
-here so we can use nice shortcuts we can
-
-00:04:17.759 --> 00:04:21.040
-copy this we go can go in here just
-
-00:04:21.040 --> 00:04:22.000
-select that
-
-00:04:22.000 --> 00:04:24.400
-get that out or something like this but
-
-00:04:24.400 --> 00:04:25.600
-still
-
-00:04:25.600 --> 00:04:28.320
-this is not really it's not really the
-
-00:04:28.320 --> 00:04:29.600
-best way
-
-00:04:29.600 --> 00:04:34.080
-to do that right it gets kind of tedious
-
-00:04:34.080 --> 00:04:36.639
-at this point the output can be
-
-00:04:36.639 --> 00:04:37.680
-humongous
-
-00:04:37.680 --> 00:04:39.360
-the shell is not really the best place
-
-00:04:39.360 --> 00:04:42.479
-to read through such big output I mean e
-
-00:04:42.479 --> 00:04:43.600
-shell is
-
-00:04:43.600 --> 00:04:45.440
-probably one of the better shells for
-
-00:04:45.440 --> 00:04:47.440
-this because it's just a regular Emacs
-
-00:04:47.440 --> 00:04:48.560
-buffer but still
-
-00:04:48.560 --> 00:04:51.199
-it's not really the best tool and I need
-
-00:04:51.199 --> 00:04:52.720
-to repeat the command
-
-00:04:52.720 --> 00:04:55.280
-all the time until I finally build the
-
-00:04:55.280 --> 00:04:56.000
-right query
-
-00:04:56.000 --> 00:04:59.120
-and all the time I use I lose my
-
-00:04:59.120 --> 00:05:02.080
-focus I lose what I'm currently looking
-
-00:05:02.080 --> 00:05:02.800
-at
-
-00:05:02.800 --> 00:05:06.080
-I'm seeing the new result it would be so
-
-00:05:06.080 --> 00:05:08.160
-much nicer to have live feedback
-
-00:05:08.160 --> 00:05:10.080
-and when working with Emacs we're quite
-
-00:05:10.080 --> 00:05:11.600
-used to that so there should be an
-
-00:05:11.600 --> 00:05:12.320
-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:20.880
-there is various good tools for
-
-00:05:20.880 --> 00:05:22.960
-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 code the usp for ivy
-
-00:05:29.039 --> 00:05:31.840
-iv is a generic completion mechanism for
-
-00:05:31.840 --> 00:05:32.639
-Emacs
-
-00:05:32.639 --> 00:05:34.639
-while it operates similarly to other
-
-00:05:34.639 --> 00:05:35.919
-completion schemes
-
-00:05:35.919 --> 00:05:38.960
-such as icomplete mode iv aims to be
-
-00:05:38.960 --> 00:05:40.400
-more efficient smaller
-
-00:05:40.400 --> 00:05:43.120
-simpler and smoother to use yet highly
-
-00:05:43.120 --> 00:05:45.199
-customizable
-
-00:05:45.199 --> 00:05:47.840
-and that's true one of the cool things
-
-00:05:47.840 --> 00:05:49.440
-of iv
-
-00:05:49.440 --> 00:05:52.479
-compared to other completion mechanisms
-
-00:05:52.479 --> 00:05:54.320
-in Emacs
-
-00:05:54.320 --> 00:05:58.160
-is that it can be used on dynamic
-
-00:05:58.160 --> 00:06:01.600
-data so usually completion works on a
-
-00:06:01.600 --> 00:06:03.520
-static input for example you're in a
-
-00:06:03.520 --> 00:06:05.360
-buffer a text buffer
-
-00:06:05.360 --> 00:06:08.800
-and you use I search maybe with idle
-
-00:06:08.800 --> 00:06:09.600
-mode
-
-00:06:09.600 --> 00:06:12.400
-and you find your results that's all
-
-00:06:12.400 --> 00:06:13.360
-nice
-
-00:06:13.360 --> 00:06:16.960
-however if I
-
-00:06:16.960 --> 00:06:19.840
-want to search on dynamic data that
-
-00:06:19.840 --> 00:06:20.720
-doesn't work
-
-00:06:20.720 --> 00:06:23.759
-so whenever I type in my query
-
-00:06:23.759 --> 00:06:27.039
-for jq I actually need to call the jq
-
-00:06:27.039 --> 00:06:28.000
-binary
-
-00:06:28.000 --> 00:06:30.160
-and it will give a different result set
-
-00:06:30.160 --> 00:06:32.840
-back so it's a really
-
-00:06:32.840 --> 00:06:36.319
-dynamic mechanism that we need here it's
-
-00:06:36.319 --> 00:06:38.240
-much more like a search engine
-
-00:06:38.240 --> 00:06:41.440
-and ivy luckily has something built in
-
-00:06:41.440 --> 00:06:42.560
-and it's called
-
-00:06:42.560 --> 00:06:46.000
-console so I used council and jq
-
-00:06:46.000 --> 00:06:48.160
-and combined them and build a new
-
-00:06:48.160 --> 00:06:49.199
-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:58.800
-it's very easy to use so you just call
-
-00:06:58.800 --> 00:06:59.840
-console.jq
-
-00:06:59.840 --> 00:07:02.800
-on a buffer containing json for example
-
-00:07:02.800 --> 00:07:04.319
-the one we have here
-
-00:07:04.319 --> 00:07:07.280
-let's call console.jq on it and we
-
-00:07:07.280 --> 00:07:08.319
-already
-
-00:07:08.319 --> 00:07:11.280
-get a default query the dot query which
-
-00:07:11.280 --> 00:07:13.039
-just gives us
-
-00:07:13.039 --> 00:07:16.080
-the same file but now we can change it
-
-00:07:16.080 --> 00:07:17.280
-and for example
-
-00:07:17.280 --> 00:07:19.039
-find all the keys in here and then we
-
-00:07:19.039 --> 00:07:21.039
-see I had this issue this was the one
-
-00:07:21.039 --> 00:07:22.800
-that we were interested in
-
-00:07:22.800 --> 00:07:24.639
-so let's find more information on the
-
-00:07:24.639 --> 00:07:26.479
-issue what
-
-00:07:26.479 --> 00:07:28.800
-keys does it have actually have uh it
-
-00:07:28.800 --> 00:07:31.680
-has assignees that 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:37.039
-there's two of them but I'm only
-
-00:07:37.039 --> 00:07:39.759
-interested in the first one
-
-00:07:39.759 --> 00:07:42.000
-I'm making stuff up as I go here of
-
-00:07:42.000 --> 00:07:43.599
-course
-
-00:07:43.599 --> 00:07:46.000
-and whenever I hit enter I get a new
-
-00:07:46.000 --> 00:07:47.039
-buffer
-
-00:07:47.039 --> 00:07:50.160
-which just shows me this
-
-00:07:50.160 --> 00:07:53.520
-particular result for the particular
-
-00:07:53.520 --> 00:07:55.599
-query that I entered
-
-00:07:55.599 --> 00:07:59.199
-so let me do that again we are in here
-
-00:07:59.199 --> 00:08:03.199
-we are looking at a
-
-00:08:03.199 --> 00:08:05.840
-json file this can be very very big
-
-00:08:05.840 --> 00:08:07.520
-doesn't also need to be a file just
-
-00:08:07.520 --> 00:08:09.520
-needs to be a buffer
-
-00:08:09.520 --> 00:08:12.160
-you call console.jq on it and you can do
-
-00:08:12.160 --> 00:08:13.599
-any kind of
-
-00:08:13.599 --> 00:08:16.479
-query on it for example let's see if
-
-00:08:16.479 --> 00:08:18.080
-there is a url here
-
-00:08:18.080 --> 00:08:20.319
-yes there's a url let's see if there's a
-
-00:08:20.319 --> 00:08:23.759
-repository here repository
-
-00:08:23.759 --> 00:08:26.879
-no there isn't what was it called issue
-
-00:08:26.879 --> 00:08:33.440
-keys repository url it was called okay
-
-00:08:33.440 --> 00:08:36.640
-so let's see issue pause
-
-00:08:36.640 --> 00:08:40.240
-url and then we see so
-
-00:08:40.240 --> 00:08:42.959
-apparently this issue command is for a
-
-00:08:42.959 --> 00:08:44.159
-repository called
-
-00:08:44.159 --> 00:08:47.839
-organize I wonder what that might be
-
-00:08:47.839 --> 00:08:50.320
-okay so that was a very short
-
-00:08:50.320 --> 00:08:52.640
-introduction to console jq
-
-00:08:52.640 --> 00:08:54.800
-you can see the timer here I only have
-
-00:08:54.800 --> 00:08:56.800
-one minute left to go so I'm going to
-
-00:08:56.800 --> 00:08:57.440
-leave
-
-00:08:57.440 --> 00:08:59.760
-with a very very short introduction to
-
-00:08:59.760 --> 00:09:01.519
-the console gq
-
-00:09:01.519 --> 00:09:05.040
-code it's not even 60 lines
-
-00:09:05.040 --> 00:09:07.519
-of e-lisp so building something like
-
-00:09:07.519 --> 00:09:09.600
-this is very very easy
-
-00:09:09.600 --> 00:09:12.800
-I would encourage you to go and read
-
-00:09:12.800 --> 00:09:14.560
-through the code in your own time
-
-00:09:14.560 --> 00:09:16.160
-if you're interested in building
-
-00:09:16.160 --> 00:09:18.320
-something like this if you're interested
-
-00:09:18.320 --> 00:09:19.600
-in just using
-
-00:09:19.600 --> 00:09:22.720
-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:25.839
-console.jq of course
-
-00:09:25.839 --> 00:09:28.800
-is readily available on melpah also
-
-00:09:28.800 --> 00:09:29.519
-developed
-
-00:09:29.519 --> 00:09:32.959
-under the agpl license on github
-
-00:09:32.959 --> 00:09:36.080
-and disorganized thing by the way it's
-
-00:09:36.080 --> 00:09:37.839
-orig mode for mobile and desktop
-
-00:09:37.839 --> 00:09:39.839
-browsers also a great
-
-00:09:39.839 --> 00:09:42.399
-free software tool maybe that interests
-
-00:09:42.399 --> 00:09:43.120
-you
-
-00:09:43.120 --> 00:09:46.240
-thank you for listening have great time
-
-00:09:46.240 --> 00:09:48.800
-10 seconds left I am going to stop this
-
-00:09:48.800 --> 00:09:49.360
-now
-
-00:09:49.360 --> 00:09:53.920
-enjoy EmacsConf have a great day
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-autogen.vtt b/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang-autogen.vtt
deleted file mode 100644
index e0ddcb76..00000000
--- a/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang-autogen.vtt
+++ /dev/null
@@ -1,769 +0,0 @@
-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--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--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann-autogen.vtt b/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann-autogen.vtt
deleted file mode 100644
index 1d41f1e5..00000000
--- a/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann-autogen.vtt
+++ /dev/null
@@ -1,913 +0,0 @@
-WEBVTT
-
-00:00:00.880 --> 00:00:02.879
-hello everyone and welcome to my talk
-
-00:00:02.879 --> 00:00:04.520
-state of retrogaming and Emacs
-
-00:00:04.520 --> 00:00:06.960
-[Music]
-
-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 neilman I'm 28 years old
-
-00:00:12.000 --> 00:00:13.599
-I work as a cyber security consultant
-
-00:00:13.599 --> 00:00:15.200
-msg systems and
-
-00:00:15.200 --> 00:00:17.440
-test other people's web applications and
-
-00:00:17.440 --> 00:00:19.359
-review the source code for security
-
-00:00:19.359 --> 00:00:20.160
-problems
-
-00:00:20.160 --> 00:00:22.960
-you can reach me by email I have my own
-
-00:00:22.960 --> 00:00:25.039
-self-hosted git repositories
-
-00:00:25.039 --> 00:00:26.480
-and I have a blog where you can
-
-00:00:26.480 --> 00:00:28.480
-occasionally find new posts by me on all
-
-00:00:28.480 --> 00:00:32.160
-kinds of things not just emix things
-
-00:00:32.160 --> 00:00:34.800
-so but the motivation about this one I
-
-00:00:34.800 --> 00:00:36.480
-found that Emacs is the ultimate
-
-00:00:36.480 --> 00:00:38.079
-procrastination machine and there are
-
-00:00:38.079 --> 00:00:40.160
-lots of fun demonstrations I'll go over
-
-00:00:40.160 --> 00:00:41.200
-a few of them
-
-00:00:41.200 --> 00:00:44.160
-for example someone made a thing to
-
-00:00:44.160 --> 00:00:46.079
-order sell it for himself online so it
-
-00:00:46.079 --> 00:00:48.239
-doesn't have to walk over to the shop
-
-00:00:48.239 --> 00:00:50.879
-there's plenty rc bots there's some game
-
-00:00:50.879 --> 00:00:51.760
-things
-
-00:00:51.760 --> 00:00:53.520
-there's an emulator for the z machine
-
-00:00:53.520 --> 00:00:55.600
-which you can use to play zorg
-
-00:00:55.600 --> 00:00:57.600
-and so I asked myself at this point can
-
-00:00:57.600 --> 00:00:59.039
-you actually emulate retro games at
-
-00:00:59.039 --> 00:01:01.039
-60fps and it looked around a bit
-
-00:01:01.039 --> 00:01:02.800
-and found some projects but none that
-
-00:01:02.800 --> 00:01:04.479
-were actually able to
-
-00:01:04.479 --> 00:01:07.360
-do it at 60fps so I set out to do my own
-
-00:01:07.360 --> 00:01:08.000
-one
-
-00:01:08.000 --> 00:01:09.439
-and looked out for a console that you
-
-00:01:09.439 --> 00:01:11.119
-can actually emulate at that speed
-
-00:01:11.119 --> 00:01:13.439
-using emax with its very very limited
-
-00:01:13.439 --> 00:01:14.690
-rendering
-
-00:01:14.690 --> 00:01:16.320
-[Music]
-
-00:01:16.320 --> 00:01:19.520
-and here's the project chip8.el it's
-
-00:01:19.520 --> 00:01:20.560
-pretty much finished
-
-00:01:20.560 --> 00:01:22.880
-it clocks into under 1000 sourced lines
-
-00:01:22.880 --> 00:01:24.000
-of code
-
-00:01:24.000 --> 00:01:26.159
-it supports the superchip 8 extensions
-
-00:01:26.159 --> 00:01:28.080
-it runs at full speed all games behave
-
-00:01:28.080 --> 00:01:30.159
-okay as far as I'm concerned and
-
-00:01:30.159 --> 00:01:32.320
-yeah I'm pretty happy with it it's very
-
-00:01:32.320 --> 00:01:34.479
-much the hell world of emulation
-
-00:01:34.479 --> 00:01:37.040
-and I might maybe do some other
-
-00:01:37.040 --> 00:01:40.880
-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 ship a dot el
-
-00:01:45.439 --> 00:01:46.320
-which I've learned
-
-00:01:46.320 --> 00:01:49.759
-during this project so
-
-00:01:49.759 --> 00:01:52.240
-what the hell is debate anyway first of
-
-00:01:52.240 --> 00:01:54.640
-all unlike many other emulation game
-
-00:01:54.640 --> 00:01:56.799
-things it's not a console but a vm
-
-00:01:56.799 --> 00:01:58.560
-it was designed for easy parting of home
-
-00:01:58.560 --> 00:02:00.000
-computer games
-
-00:02:00.000 --> 00:02:02.560
-it wasn't terribly successful and but
-
-00:02:02.560 --> 00:02:03.680
-there's still a small community of
-
-00:02:03.680 --> 00:02:04.320
-enthusiasts
-
-00:02:04.320 --> 00:02:06.079
-writing games for it and there are even
-
-00:02:06.079 --> 00:02:09.119
-a few demos
-
-00:02:09.119 --> 00:02:11.920
-this vm has system specs it has a very
-
-00:02:11.920 --> 00:02:14.720
-very simple 8-bit cpu with 16 registers
-
-00:02:14.720 --> 00:02:14.959
-and
-
-00:02:14.959 --> 00:02:17.760
-36 fixed size instructions you have a
-
-00:02:17.760 --> 00:02:18.160
-whole
-
-00:02:18.160 --> 00:02:20.560
-4 kilobyte of ram you have a stack with
-
-00:02:20.560 --> 00:02:22.080
-16 return addresses
-
-00:02:22.080 --> 00:02:24.480
-the resolution is 64 by 32 black white
-
-00:02:24.480 --> 00:02:25.760
-pixels
-
-00:02:25.760 --> 00:02:28.000
-rendering is done by drawing sprites
-
-00:02:28.000 --> 00:02:29.440
-these are drawn in excel mode meaning
-
-00:02:29.440 --> 00:02:30.160
-that if you
-
-00:02:30.160 --> 00:02:32.239
-draw a sprite and set a bit it just
-
-00:02:32.239 --> 00:02:33.840
-flips over from black to white or white
-
-00:02:33.840 --> 00:02:35.040
-to black
-
-00:02:35.040 --> 00:02:36.560
-first one you have a modern buzz that
-
-00:02:36.560 --> 00:02:38.239
-can just beep at one
-
-00:02:38.239 --> 00:02:40.640
-frequency and most unusually there's a
-
-00:02:40.640 --> 00:02:43.120
-hexadecimal keypad as input
-
-00:02:43.120 --> 00:02:45.360
-so the keys are basically zero to nine
-
-00:02:45.360 --> 00:02:48.480
-and a to f
-
-00:02:48.480 --> 00:02:50.879
-so how does this whole thing work it
-
-00:02:50.879 --> 00:02:52.400
-runs an unspecified speed
-
-00:02:52.400 --> 00:02:53.599
-you'll probably have to do some fine
-
-00:02:53.599 --> 00:02:54.879
-tune you find the speed you're happy
-
-00:02:54.879 --> 00:02:56.080
-with
-
-00:02:56.080 --> 00:02:58.560
-sound and delay timers exist they count
-
-00:02:58.560 --> 00:03:01.120
-down at 60fps down to zero
-
-00:03:01.120 --> 00:03:02.879
-this is done so that you can play a
-
-00:03:02.879 --> 00:03:05.120
-sound at some specific time
-
-00:03:05.120 --> 00:03:06.640
-the game itself is loaded with a fixed
-
-00:03:06.640 --> 00:03:08.640
-offset into ram the program account is
-
-00:03:08.640 --> 00:03:10.480
-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.840
-where decodes and instruction executes
-
-00:03:13.840 --> 00:03:15.519
-it for the side effects and just
-
-00:03:15.519 --> 00:03:18.130
-loops and does this at infinitum
-
-00:03:18.130 --> 00:03:19.599
-[Music]
-
-00:03:19.599 --> 00:03:21.920
-so the game was the first thing where
-
-00:03:21.920 --> 00:03:23.920
-into problems the usual game approach is
-
-00:03:23.920 --> 00:03:24.239
-to
-
-00:03:24.239 --> 00:03:26.640
-do stuff figure out how long to eight
-
-00:03:26.640 --> 00:03:28.239
-wait for exactly that much and
-
-00:03:28.239 --> 00:03:30.640
-repeat this doesn't work well in imax at
-
-00:03:30.640 --> 00:03:31.680
-all because well
-
-00:03:31.680 --> 00:03:34.959
-user input basically and
-
-00:03:34.959 --> 00:03:37.280
-Emacs is designed to just do whatever it
-
-00:03:37.280 --> 00:03:39.040
-needs to do whenever you enter use input
-
-00:03:39.040 --> 00:03:40.080
-instead of
-
-00:03:40.080 --> 00:03:42.799
-doing things at one specific time if you
-
-00:03:42.799 --> 00:03:43.440
-try to do
-
-00:03:43.440 --> 00:03:45.040
-interruptable sleep well you get
-
-00:03:45.040 --> 00:03:46.640
-unpredictable behavior
-
-00:03:46.640 --> 00:03:49.440
-for example can be the timer doesn't run
-
-00:03:49.440 --> 00:03:50.959
-at all at next time because you've
-
-00:03:50.959 --> 00:03:52.560
-accidentally cancelled it
-
-00:03:52.560 --> 00:03:54.400
-if you do uninterruptable sleep it's
-
-00:03:54.400 --> 00:03:55.760
-freezes instead which isn't what you
-
-00:03:55.760 --> 00:03:56.720
-want either
-
-00:03:56.720 --> 00:03:59.360
-so I went for timers which forced me to
-
-00:03:59.360 --> 00:04:00.560
-do inversion of control
-
-00:04:00.560 --> 00:04:02.159
-meaning that I have to write code in the
-
-00:04:02.159 --> 00:04:04.080
-style where it's just call it
-
-00:04:04.080 --> 00:04:06.159
-time and this allows this input to
-
-00:04:06.159 --> 00:04:07.200
-happen and to
-
-00:04:07.200 --> 00:04:09.120
-for things to progress at roughly the
-
-00:04:09.120 --> 00:04:11.040
-speed I want to
-
-00:04:11.040 --> 00:04:12.879
-so there's the skydiver function which
-
-00:04:12.879 --> 00:04:14.159
-is called a 60fps
-
-00:04:14.159 --> 00:04:16.000
-and I have to be very careful to not do
-
-00:04:16.000 --> 00:04:17.359
-too much in it
-
-00:04:17.359 --> 00:04:20.479
-and say this function execute cpu cycles
-
-00:04:20.479 --> 00:04:22.960
-decrypt the sound delay registers and
-
-00:04:22.960 --> 00:04:23.680
-redraw
-
-00:04:23.680 --> 00:04:27.759
-the screen so to map this whole system
-
-00:04:27.759 --> 00:04:28.800
-to mx 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.759
-return stack key state screen and so on
-
-00:04:37.759 --> 00:04:39.120
-and so forth basically
-
-00:04:39.120 --> 00:04:41.520
-what you would do if you were writing c
-
-00:04:41.520 --> 00:04:42.800
-all of this is stored in global
-
-00:04:42.800 --> 00:04:44.560
-variables I'm not using any
-
-00:04:44.560 --> 00:04:46.479
-lists at all and as a side effect
-
-00:04:46.479 --> 00:04:48.400
-there's no constant going on at all
-
-00:04:48.400 --> 00:04:50.320
-there are no extra objects created which
-
-00:04:50.320 --> 00:04:51.120
-would trigger
-
-00:04:51.120 --> 00:04:53.919
-garbage collection pulses this getting
-
-00:04:53.919 --> 00:04:55.840
-this red was rather tricky actually and
-
-00:04:55.840 --> 00:04:56.720
-there were some
-
-00:04:56.720 --> 00:04:58.560
-in garbage collection problems which I
-
-00:04:58.560 --> 00:05:01.759
-had to resolve over time
-
-00:05:01.759 --> 00:05:04.320
-so the coding instructions for this you
-
-00:05:04.320 --> 00:05:05.520
-have to know that all instructions are
-
-00:05:05.520 --> 00:05:06.800
-two bytes long
-
-00:05:06.800 --> 00:05:08.880
-and the arguments encoded inside them
-
-00:05:08.880 --> 00:05:10.240
-for example the jump to address
-
-00:05:10.240 --> 00:05:11.440
-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 f000
-
-00:05:18.400 --> 00:05:20.800
-and then shifting it by 12 bits mask
-
-00:05:20.800 --> 00:05:21.680
-means the hd
-
-00:05:21.680 --> 00:05:24.000
-performance binary end you can do the
-
-00:05:24.000 --> 00:05:25.440
-same with the argument basement with
-
-00:05:25.440 --> 00:05:26.639
-zero fff
-
-00:05:26.639 --> 00:05:29.520
-and no shift if you do this long enough
-
-00:05:29.520 --> 00:05:31.039
-you'll find common patterns for example
-
-00:05:31.039 --> 00:05:32.639
-addresses are always encoded like this
-
-00:05:32.639 --> 00:05:35.280
-using the last three nibbles in the code
-
-00:05:35.280 --> 00:05:36.880
-you'll find a big count which dispatches
-
-00:05:36.880 --> 00:05:38.400
-on the type and executes it for the side
-
-00:05:38.400 --> 00:05:40.070
-effects
-
-00:05:40.070 --> 00:05:41.440
-[Music]
-
-00:05:41.440 --> 00:05:43.440
-for testing I've initially just accused
-
-00:05:43.440 --> 00:05:45.919
-the rom until I fit ctrl g
-
-00:05:45.919 --> 00:05:47.280
-and then use the debug command to run
-
-00:05:47.280 --> 00:05:49.039
-the screen to a buffer
-
-00:05:49.039 --> 00:05:51.360
-later on I found tiny roms that just
-
-00:05:51.360 --> 00:05:52.320
-display a static
-
-00:05:52.320 --> 00:05:55.680
-test screen for example logo and looked
-
-00:05:55.680 --> 00:05:57.280
-whether it looked right
-
-00:05:57.280 --> 00:05:59.199
-I added instructions as needed and went
-
-00:05:59.199 --> 00:06:00.960
-through more and more and more roms and
-
-00:06:00.960 --> 00:06:03.360
-later I wrote in unit test suite as a
-
-00:06:03.360 --> 00:06:05.199
-safety net and this unit test suite it
-
-00:06:05.199 --> 00:06:06.000
-just
-
-00:06:06.000 --> 00:06:08.400
-sets up an empty emulator state executes
-
-00:06:08.400 --> 00:06:10.080
-some instructions and then looks whether
-
-00:06:10.080 --> 00:06:10.400
-the
-
-00:06:10.400 --> 00:06:14.880
-expected side effects have happened
-
-00:06:14.880 --> 00:06:17.120
-for debugging I usually use e-debug but
-
-00:06:17.120 --> 00:06:19.120
-this was super ineffective because well
-
-00:06:19.120 --> 00:06:20.880
-you don't really want to step through
-
-00:06:20.880 --> 00:06:22.960
-big cons doing side effects for every
-
-00:06:22.960 --> 00:06:24.960
-single cycle when it can take like 100
-
-00:06:24.960 --> 00:06:26.880
-cycles for things to happen
-
-00:06:26.880 --> 00:06:29.680
-therefore I've set up logging and
-
-00:06:29.680 --> 00:06:31.360
-whenever I locked something
-
-00:06:31.360 --> 00:06:32.720
-and couldn't figure out the error I
-
-00:06:32.720 --> 00:06:33.919
-compared my lock output with
-
-00:06:33.919 --> 00:06:37.039
-instrumented version of another emulator
-
-00:06:37.039 --> 00:06:39.199
-and if the locks diverge then I have
-
-00:06:39.199 --> 00:06:40.880
-figured out where the bug lies and could
-
-00:06:40.880 --> 00:06:42.720
-look deeper into it
-
-00:06:42.720 --> 00:06:44.479
-future project idea might be a chip 8
-
-00:06:44.479 --> 00:06:46.639
-debugger but I doubt I'll ever
-
-00:06:46.639 --> 00:06:50.720
-go into it for analysis I initially
-
-00:06:50.720 --> 00:06:52.639
-wrote a disassembler which is a very
-
-00:06:52.639 --> 00:06:54.400
-simple thing but super tedious
-
-00:06:54.400 --> 00:06:56.160
-especially if you wanted to add advanced
-
-00:06:56.160 --> 00:06:57.599
-functionality for example analysis or
-
-00:06:57.599 --> 00:06:59.120
-thinking of what part is data what had
-
-00:06:59.120 --> 00:07:00.000
-this code
-
-00:07:00.000 --> 00:07:01.840
-and I had this great idea for using the
-
-00:07:01.840 --> 00:07:03.360
-radari 2 framework
-
-00:07:03.360 --> 00:07:05.120
-and adding analysis and disassembly
-
-00:07:05.120 --> 00:07:06.479
-plug-in for it
-
-00:07:06.479 --> 00:07:08.400
-so I looked into this found okay here
-
-00:07:08.400 --> 00:07:10.319
-where you can write plugins in c
-
-00:07:10.319 --> 00:07:12.160
-but also in python so I wrote one in
-
-00:07:12.160 --> 00:07:13.520
-python and then the scout there's
-
-00:07:13.520 --> 00:07:15.039
-actually existing one in core which you
-
-00:07:15.039 --> 00:07:17.440
-have to enable explicitly by passing its
-
-00:07:17.440 --> 00:07:19.599
-argument so I've tried it and found it's
-
-00:07:19.599 --> 00:07:21.840
-not exactly as good as my own one so
-
-00:07:21.840 --> 00:07:23.680
-improved this one and submitted pull
-
-00:07:23.680 --> 00:07:26.610
-requests until it was at the same level
-
-00:07:26.610 --> 00:07:28.080
-[Music]
-
-00:07:28.080 --> 00:07:30.160
-rendering was the trickiest part of this
-
-00:07:30.160 --> 00:07:31.360
-whole thing because
-
-00:07:31.360 --> 00:07:34.319
-well I decided against using a library
-
-00:07:34.319 --> 00:07:35.759
-not like there would have been any
-
-00:07:35.759 --> 00:07:37.120
-usable library for this
-
-00:07:37.120 --> 00:07:39.599
-my usual approach of accelerating svg
-
-00:07:39.599 --> 00:07:41.680
-file was too expensive it just created
-
-00:07:41.680 --> 00:07:45.120
-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:49.599
-this was either either too expensive
-
-00:07:49.599 --> 00:07:52.639
-just like svgs or too complicated I
-
-00:07:52.639 --> 00:07:55.039
-tried changing svg tiles which created
-
-00:07:55.039 --> 00:07:57.280
-gaps between the lines
-
-00:07:57.280 --> 00:07:59.520
-then I tried to create an xpm file which
-
-00:07:59.520 --> 00:08:00.720
-was backed by a bull vector
-
-00:08:00.720 --> 00:08:02.400
-administrating this bull vector
-
-00:08:02.400 --> 00:08:04.400
-but the image caching effect made it
-
-00:08:04.400 --> 00:08:06.879
-just every nth frame to appear which
-
-00:08:06.879 --> 00:08:10.000
-wasn't good either then I had the idea
-
-00:08:10.000 --> 00:08:11.440
-to just use plain text
-
-00:08:11.440 --> 00:08:13.280
-and paint the individual characters with
-
-00:08:13.280 --> 00:08:14.800
-a different background color this
-
-00:08:14.800 --> 00:08:17.120
-this had perfect perfect performance
-
-00:08:17.120 --> 00:08:18.479
-there were many optimization attempts
-
-00:08:18.479 --> 00:08:20.000
-until I got there and it was
-
-00:08:20.000 --> 00:08:21.840
-very very stressful I wasn't sure
-
-00:08:21.840 --> 00:08:23.199
-whether I would ever get to accept the
-
-00:08:23.199 --> 00:08:26.160
-performance at all
-
-00:08:26.160 --> 00:08:28.560
-for sound you only need to a single beep
-
-00:08:28.560 --> 00:08:30.319
-so technically it shouldn't be difficult
-
-00:08:30.319 --> 00:08:31.280
-to emulate it
-
-00:08:31.280 --> 00:08:33.519
-however doing this is hard because Emacs
-
-00:08:33.519 --> 00:08:34.880
-officially only supports synchronous
-
-00:08:34.880 --> 00:08:37.200
-playback of sounds
-
-00:08:37.200 --> 00:08:39.039
-but there's also emax process which you
-
-00:08:39.039 --> 00:08:41.360
-can launch in asynchronous way
-
-00:08:41.360 --> 00:08:43.519
-so I looked into it and found that
-
-00:08:43.519 --> 00:08:45.279
-employee has a slave mode and mpv
-
-00:08:45.279 --> 00:08:46.640
-supports listing on the
-
-00:08:46.640 --> 00:08:50.880
-fifo for commands so I've created a pipe
-
-00:08:50.880 --> 00:08:54.000
-started a past mpv in loop mode and
-
-00:08:54.000 --> 00:08:55.519
-always send in pause and pause command
-
-00:08:55.519 --> 00:08:58.000
-to the fifo 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:05.760
-so yeah that's it so far was a very
-
-00:09:05.760 --> 00:09:07.200
-educational experience
-
-00:09:07.200 --> 00:09:09.279
-I have tried out a bunch of games which
-
-00:09:09.279 --> 00:09:10.320
-were
-
-00:09:10.320 --> 00:09:12.640
-well I almost say the worst ports of
-
-00:09:12.640 --> 00:09:14.320
-classic games I've ever tried
-
-00:09:14.320 --> 00:09:15.839
-it wasn't terribly fun to play them but
-
-00:09:15.839 --> 00:09:18.320
-was fun to improve the emulator until
-
-00:09:18.320 --> 00:09:21.760
-well things worked good enough
-
-00:09:21.760 --> 00:09:23.279
-and I've learned a lot about how
-
-00:09:23.279 --> 00:09:25.120
-computers work at this level
-
-00:09:25.120 --> 00:09:27.760
-so maybe maybe I'll in the future make
-
-00:09:27.760 --> 00:09:28.880
-another emulator
-
-00:09:28.880 --> 00:09:31.920
-but uh I'm not sure whether anything
-
-00:09:31.920 --> 00:09:34.000
-more advanced like intel 8080 emulator
-
-00:09:34.000 --> 00:09:36.560
-will actually run mix fast enough
-
-00:09:36.560 --> 00:09:37.839
-but it's still an interesting idea
-
-00:09:37.839 --> 00:09:39.200
-because then you could actually have an
-
-00:09:39.200 --> 00:09:39.600
-os
-
-00:09:39.600 --> 00:09:41.680
-inside Emacs and fulfill that one
-
-00:09:41.680 --> 00:09:43.120
-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.279
-I'll probably use chicken scheme which
-
-00:09:47.279 --> 00:09:48.000
-is my
-
-00:09:48.000 --> 00:09:49.920
-preferred language for serious projects
-
-00:09:49.920 --> 00:09:53.279
-and writing neso gamer emulator
-
-00:09:53.279 --> 00:09:57.839
-and that's it thank you
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
index cf3c1134..24c1910c 100644
--- 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
@@ -1,4993 +1,3187 @@
WEBVTT
-00:00:08.559 --> 00:00:12.960
-okay
+00:00:08.559 --> 00:00:16.074
+CORWIN: Okay. So I'm gonna start with my demo Emacs here.
-00:00:12.960 --> 00:00:14.960
-so I'm gonna start with my just my demo
-
-00:00:14.960 --> 00:00:18.000
-Emacs here eric we're ready
+00:00:16.074 --> 00:00:18.000
+Erik, we're ready.
00:00:18.000 --> 00:00:31.840
-oh we are live
+AMIN: We are live.
00:00:31.840 --> 00:00:35.440
-okay so you're starting then
+ERIK: Okay, so you're starting then.
00:00:35.440 --> 00:00:39.200
-I guess I'll start right now here we go
-
-00:00:39.200 --> 00:00:41.760
-so I'm a windows user as we talked about
-
-00:00:41.760 --> 00:00:43.440
-yesterday
-
-00:00:43.440 --> 00:00:46.719
-I'm gonna try to uh start Emacs for you
-
-00:00:46.719 --> 00:00:47.440
-now
-
-00:00:47.440 --> 00:00:48.960
-and I've kind of got it pinned to this
-
-00:00:48.960 --> 00:00:52.879
-thing but mostly what I actually do
-
-00:00:52.879 --> 00:00:55.760
-is grab a file explorer and head to my
-
-00:00:55.760 --> 00:01:00.559
-desktop where I have all sorts of Emacs
-
-00:01:00.559 --> 00:01:05.960
-eric can you make sure that your vlc is
+CORWIN: I guess I'll start right now. Here we go.
-00:01:05.960 --> 00:01:10.840
-muted
+00:00:39.200 --> 00:00:43.440
+So I'm a Windows user, as we talked about yesterday.
-00:01:10.840 --> 00:01:21.840
-okay
+00:00:43.440 --> 00:00:47.440
+I'm going to try to start Emacs for you now.
-00:01:21.840 --> 00:01:39.360
-give me a second please
+00:00:47.440 --> 00:00:49.360
+I've got it pinned to this thing,
-00:01:39.360 --> 00:01:42.079
-I do okay all right we should be we
+00:00:49.360 --> 00:00:52.879
+but mostly what I actually do
-00:01:42.079 --> 00:01:44.000
-should be working again now my apologies
+00:00:52.879 --> 00:00:56.320
+is grab a file explorer and head to my desktop
-00:01:44.000 --> 00:01:44.560
-for that
+00:00:56.320 --> 00:01:00.559
+where I have all sorts of Emacs.
-00:01:44.560 --> 00:01:46.560
-all right handling technical problems in
+00:01:00.559 --> 00:01:10.840
+Erik, can you make sure that your VLC is muted?
-00:01:46.560 --> 00:01:47.759
-real time is
+00:01:10.840 --> 00:01:39.360
+ERIK: Okay, give me a second, please.
-00:01:47.759 --> 00:01:50.079
-uh what Emacs is all about as we're
+00:01:39.360 --> 00:01:41.920
+CORWIN: I do. Okay. All right.
-00:01:50.079 --> 00:01:52.079
-coding we're constantly making errors
+00:01:41.920 --> 00:01:44.560
+We should be working again now. My apologies for that.
-00:01:52.079 --> 00:01:53.360
-and fixing them and
+00:01:44.560 --> 00:01:47.360
+All right. Handling technical problems in real-time
-00:01:53.360 --> 00:01:54.560
-learning from the kinds of errors that
+00:01:47.360 --> 00:01:49.600
+is what Emacs is all about.
-00:01:54.560 --> 00:01:56.159
-we make and adjusting the editor to be
+00:01:49.600 --> 00:01:52.799
+As we're coding, we're constantly making errors, and fixing them,
-00:01:56.159 --> 00:01:57.759
-easier to use
+00:01:52.799 --> 00:01:54.880
+and learning from the kinds of errors that we make,
-00:01:57.759 --> 00:02:00.719
-so today we'll try to build on uh some
+00:01:54.880 --> 00:01:57.759
+and adjusting the editor to be easier to use.
-00:02:00.719 --> 00:02:02.640
-of the ideas we introduced yesterday
+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:05.600
-around how a community can help us learn
+00:02:02.640 --> 00:02:07.280
+around how a community can help us learn Emacs faster,
-00:02:05.600 --> 00:02:07.280
-Emacs faster
+00:02:07.280 --> 00:02:12.160
+and how we can think broadly about the people in our team
-00:02:07.280 --> 00:02:10.479
-and how we can think broadly
+00:02:12.160 --> 00:02:15.920
+when we decide how what kind of Emacs configuration
-00:02:10.479 --> 00:02:13.040
-about the people in our team when we
+00:02:15.920 --> 00:02:18.000
+we're going to have going for our project.
-00:02:13.040 --> 00:02:14.160
-decide how
+00:02:18.000 --> 00:02:21.120
+So I'm just going to fire up my normal Emacs config now,
-00:02:14.160 --> 00:02:16.080
-what kind of Emacs configuration we're
+00:02:21.120 --> 00:02:24.720
+so that we get hopefully a nice pretty demo
-00:02:16.080 --> 00:02:18.000
-going to have going for our project
+00:02:24.720 --> 00:02:28.080
+or at least some slides.
-00:02:18.000 --> 00:02:19.680
-so I'm just going to fire up my normal
+00:02:28.080 --> 00:02:30.720
+For safety, we're going to avoid the server,
-00:02:19.680 --> 00:02:22.239
-Emacs config now so that we get
+00:02:30.720 --> 00:02:33.360
+because I hate it when it crashes.
-00:02:22.239 --> 00:02:25.440
-uh hopefully a nice pretty demo or uh
+00:02:33.360 --> 00:02:41.120
+It's a little less stable under Windows, I think.
-00:02:25.440 --> 00:02:29.120
-at least some slides and for safety
+00:02:41.120 --> 00:02:43.200
+And well, while this starts up,
-00:02:29.120 --> 00:02:30.959
-we're going to avoid the server because
+00:02:43.200 --> 00:02:44.800
+I'll just briefly introduce
-00:02:30.959 --> 00:02:33.360
-I hate it when it crashes
+00:02:44.800 --> 00:02:47.680
+my lifelong friend Erik Elmshauser
-00:02:33.360 --> 00:02:35.280
-it's a little less stable under windows
+00:02:47.680 --> 00:02:50.400
+who's hanging in the wings and waiting impatiently
-00:02:35.280 --> 00:02:41.120
-I think
-
-00:02:41.120 --> 00:02:43.360
-and well uh while this starts up I'll
-
-00:02:43.360 --> 00:02:44.800
-just briefly introduce
-
-00:02:44.800 --> 00:02:47.200
-my lifelong friend and eric uh elm
-
-00:02:47.200 --> 00:02:49.519
-salzer who's hanging in the wings and
-
-00:02:49.519 --> 00:02:51.120
-waiting impatiently for us to be able to
-
-00:02:51.120 --> 00:02:54.400
-start our slides
+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
-hello everybody
-
-00:02:58.560 --> 00:03:00.720
-so you've heard plenty from me already
+ERIK: Hello, everybody. I'm Erik.
-00:03:00.720 --> 00:03:02.000
-this conference
+00:02:58.560 --> 00:03:03.200
+CORWIN: So you've heard plenty from me already this conference,
-00:03:02.000 --> 00:03:05.760
-um I suppose
+00:03:03.200 --> 00:03:09.120
+I suppose, so I'm just going to...
-00:03:05.760 --> 00:03:09.120
-uh so I'm just gonna uh
+00:03:09.120 --> 00:03:10.560
+So Erik and I have worked things out
-00:03:09.120 --> 00:03:10.720
-so eric and I have worked things out so
-
-00:03:10.720 --> 00:03:12.400
-that he'll do most of the talking today
+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:14.879
-but
+I'll drive us through some code parts,
-00:03:14.879 --> 00:03:16.239
-the hope is that we'll just focus a
+00:03:14.159 --> 00:03:16.159
+but the hope is that we'll just focus
-00:03:16.239 --> 00:03:18.000
-little more on the game and if you have
+00:03:16.159 --> 00:03:17.599
+a little more on the game.
-00:03:18.000 --> 00:03:20.000
-questions about the game at all please
+00:03:17.599 --> 00:03:19.360
+If you have questions about the game at all,
-00:03:20.000 --> 00:03:21.840
-don't hesitate to ask those as well as
+00:03:19.360 --> 00:03:28.480
+please don't hesitate to ask those as well as your Emacs questions.
-00:03:21.840 --> 00:03:28.480
-your Emacs questions
+00:03:28.480 --> 00:03:30.840
+I think we're starting out.
-00:03:28.480 --> 00:03:34.959
-and I think we're starting out welcome
+00:03:30.840 --> 00:03:41.200
+Welcome. Let's cut away here so we can show some faces.
-00:03:34.959 --> 00:03:37.680
-and let's cut away here so we can show
+00:03:41.200 --> 00:03:43.920
+I lost you, Erik.
-00:03:37.680 --> 00:03:41.200
-some faces
-
-00:03:41.200 --> 00:03:45.040
-I lost you eric why would you do that
+00:03:43.920 --> 00:03:45.040
+ERIK: Why would you do that?
00:03:45.040 --> 00:03:48.319
-there he is
+CORWIN: There he is.
-00:03:48.319 --> 00:03:50.239
-and let's just do one more thing because
+00:03:48.319 --> 00:03:50.000
+Let's just do one more thing
-00:03:50.239 --> 00:03:53.280
-that's just kind of offensive
+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 gonna kill off that cute wallpaper
+I'm going to kill off that cute wallpaper
00:03:55.439 --> 00:03:59.360
-we all were playing with yesterday
+we all were playing with yesterday,
00:03:59.360 --> 00:04:02.640
-although that's not so bad anymore
+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
+Oh, that's terrible. It's got to come back.
00:04:04.480 --> 00:04:11.120
-I'm sorry everybody
+I'm sorry, everybody.
00:04:11.120 --> 00:04:16.720
-oh my dear all right
-
-00:04:16.720 --> 00:04:19.040
-and we just opened Emacs so I have to
+Oh my dear. All right.
-00:04:19.040 --> 00:04:25.040
-open my slideshow
+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:30.320
-okay eric I think I'm about as ready as
-
-00:04:30.320 --> 00:04:32.560
-I get
-
-00:04:32.560 --> 00:04:35.520
-cool well uh let's begin here welcome to
-
-00:04:35.520 --> 00:04:37.840
-the dungeon everybody
-
-00:04:37.840 --> 00:04:41.199
-I'm eric and this
-
-00:04:41.199 --> 00:04:43.199
-london is that we've been working on for
-
-00:04:43.199 --> 00:04:45.120
-about a year now
-
-00:04:45.120 --> 00:04:48.240
-um the dungeon
+and there we are.
-00:04:48.240 --> 00:04:52.000
-game is based on
+00:04:28.479 --> 00:04:32.560
+Okay, Erik, I think I'm about as ready as I get.
-00:04:52.000 --> 00:04:54.000
-a tradition of gaming that came out of
+00:04:32.560 --> 00:04:35.120
+ERIK: Cool. Well, let's begin here.
-00:04:54.000 --> 00:04:56.160
-the university of minnesota back in like
+00:04:35.120 --> 00:04:37.840
+Welcome to the dungeon, everybody.
-00:04:56.160 --> 00:04:57.520
-the 1950s
+00:04:37.840 --> 00:04:38.320
+As you're aware, I'm Erik and this is Corwin,
-00:04:57.520 --> 00:05:00.639
-as far as we can tell and it
+00:04:38.320 --> 00:04:43.040
+and this is the Dungeon project that we've been working on
-00:05:00.639 --> 00:05:03.680
-is a predecessor an ancestor of most of
+00:04:43.040 --> 00:04:45.120
+for about a year now.
-00:05:03.680 --> 00:05:05.199
-the commercial role-playing games
+00:04:45.120 --> 00:04:52.000
+The Dungeon game is based on
-00:05:05.199 --> 00:05:07.680
-that you have heard of or maybe tried
+00:04:52.000 --> 00:04:53.360
+a tradition of gaming
-00:05:07.680 --> 00:05:08.720
-out from
+00:04:53.360 --> 00:04:55.520
+that came out of the University of Minnesota
-00:05:08.720 --> 00:05:10.800
-various stores and friends when I have
+00:04:55.520 --> 00:04:57.520
+back in the 1950s,
-00:05:10.800 --> 00:05:11.919
-you
+00:04:57.520 --> 00:05:00.320
+as far as we can tell.
-00:05:11.919 --> 00:05:14.240
-so one of the first things we want to
+00:05:00.320 --> 00:05:03.360
+It is a predecessor, an ancestor of
-00:05:14.240 --> 00:05:15.759
-talk about is what is it that sets
+00:05:03.360 --> 00:05:05.199
+most of the commercial role-playing games
-00:05:15.759 --> 00:05:17.039
-dungeon apart
+00:05:05.199 --> 00:05:07.919
+that you have heard of or maybe tried out
-00:05:17.039 --> 00:05:19.440
-why is it you know what is it about this
+00:05:07.919 --> 00:05:11.919
+from various stores and friends, what have you.
-00:05:19.440 --> 00:05:20.800
-game that makes us want to
+00:05:11.919 --> 00:05:14.800
+So one of the first things we want to talk about is:
-00:05:20.800 --> 00:05:22.880
-continue bringing it forward when there
+00:05:14.800 --> 00:05:17.039
+What is it that sets Dungeon apart?
-00:05:22.880 --> 00:05:25.039
-are so many games
+00:05:17.039 --> 00:05:19.680
+why is it... what is it about this game
-00:05:25.039 --> 00:05:26.800
-already commercially available that are
+00:05:19.680 --> 00:05:22.479
+that makes us want to continue bringing it forward,
-00:05:26.800 --> 00:05:28.479
-descended from it
+00:05:22.479 --> 00:05:26.479
+when there are so many games already commercially available
-00:05:28.479 --> 00:05:32.400
-um dungeon is kind of a
+00:05:26.479 --> 00:05:28.479
+that are descended from it?
-00:05:32.400 --> 00:05:36.479
-simpler game like we
+00:05:28.479 --> 00:05:34.160
+Dungeon is kind of a simpler game.
-00:05:36.479 --> 00:05:39.280
-don't a lot of the mechanics that you
+00:05:34.160 --> 00:05:40.400
+Like we don't do a lot of the mechanics that you think about.
-00:05:39.280 --> 00:05:40.400
-think of about like
-
-00:05:40.400 --> 00:05:42.240
-what is it that defines your character
-
-00:05:42.240 --> 00:05:44.560
-stats and skills and attributes
+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 in dungeon um
-
-00:05:48.080 --> 00:05:51.199
-but dungeon
+We just don't deal with it in Dungeon.
-00:05:51.199 --> 00:05:54.720
-the simplicity of it allows it um
+00:05:48.080 --> 00:05:54.720
+But Dungeon... The simplicity of it allows it
-00:05:54.720 --> 00:05:59.560
-to be a view over creativity more than
+00:05:54.720 --> 00:06:01.840
+to be a vehicle for creativity more than just a numbers project.
-00:05:59.560 --> 00:06:01.840
-um
+00:06:01.840 --> 00:06:04.240
+So that's kind of why we like it,
-00:06:01.840 --> 00:06:04.720
-so that's kind of why we like it but
+00:06:04.240 --> 00:06:08.533
+but also it makes it a tricky problem
-00:06:04.720 --> 00:06:16.639
-also
+00:06:08.533 --> 00:06:12.567
+when it comes to writing a computer game to mimic
-00:06:16.639 --> 00:06:20.800
-so when we look at it as kind of like
+00:06:12.567 --> 00:06:16.400
+the game that we played with paper and dice around a table.
-00:06:20.800 --> 00:06:24.000
-uh a technology problem whoops
+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:26.880
-when we try to hey home uh I'm sorry I
-
-00:06:26.880 --> 00:06:27.919
-got ahead of us I'll
+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
+I'll cut back.
00:06:32.160 --> 00:06:35.520
-I I thought we were doing fine
-
-00:06:35.520 --> 00:06:37.600
-okay well then I'll I'll just yeah
+ERIK: I thought we were doing fine
-00:06:37.600 --> 00:06:40.319
-either way
+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
-so we've been friends since um
+ERIK: So we've been friends since...
00:06:43.360 --> 00:06:46.479
-it was our parents basically
+It was our parents' idea, basically.
-00:06:46.479 --> 00:06:49.840
-um our parents are friends uh and
-
-00:06:49.840 --> 00:06:53.120
-we learn this game from our parents
+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
-um specifically um
-
-00:07:02.479 --> 00:07:04.560
-uh yeah that's where that's that's
-
-00:07:04.560 --> 00:07:06.400
-that's my q in right
-
-00:07:06.400 --> 00:07:09.599
-so um yeah my my
+Specifically, I learned it from Corwin when I was 7 or 8.
-00:07:09.599 --> 00:07:13.759
-my folks uh and and eric's folks were
+00:07:02.479 --> 00:07:06.400
+CORWIN: Yeah, that's where... that's my cue in, right?
-00:07:13.759 --> 00:07:15.120
-were really tight they used to run
+00:07:09.599 --> 00:07:14.560
+My folks and Erik's folks were really tight.
-00:07:15.120 --> 00:07:17.360
-science fiction conventions together
+00:07:14.560 --> 00:07:17.360
+They used to run science fiction conventions together.
-00:07:17.360 --> 00:07:20.400
-and yeah we our play
+00:07:17.360 --> 00:07:22.400
+Our play featured imaginative role-playing.
-00:07:20.400 --> 00:07:21.840
-featured you know imaginative
+00:07:22.400 --> 00:07:28.639
+Usually we would find ways to work the computers into things.
-00:07:21.840 --> 00:07:23.520
-role-playing usually we would find ways
+00:07:28.639 --> 00:07:35.000
+I don't know. I hardly have memories that precede Erik.
-00:07:23.520 --> 00:07:25.360
-to work the computers in
+00:07:35.000 --> 00:07:39.199
+ERIK: Also, it turns out we're both kind of nerds.
-00:07:25.360 --> 00:07:28.639
-to things and uh uh
+00:07:39.199 --> 00:07:46.560
+I learned to program from my mother back in the early 80s,
-00:07:28.639 --> 00:07:30.479
-I don't I don't know I I hardly have
+00:07:46.560 --> 00:07:49.039
+and for as long as we've been friends,
-00:07:30.479 --> 00:07:35.000
-memories uh that proceed eric
+00:07:49.039 --> 00:07:52.800
+basically we've also been into playing with computers.
-00:07:35.000 --> 00:07:37.840
-um also it turns out we're both
+00:07:52.800 --> 00:07:56.720
+Over the years, we've worked with many, many different systems.
-00:07:37.840 --> 00:07:44.240
-kind of nervous uh we've been um
+00:07:56.720 --> 00:07:59.700
+We've played with Ataris, Apples, and Amigas
-00:07:44.240 --> 00:07:47.280
-back in the early 80s and
+00:07:59.700 --> 00:08:03.567
+for a long time before either of us got PC clones
-00:07:47.280 --> 00:07:49.039
-for as long as we've been friends
+00:08:03.567 --> 00:08:07.967
+and Windows or DOS or Linux or any of those systems.
-00:07:49.039 --> 00:07:51.360
-basically we've also been into playing
+00:08:07.967 --> 00:08:11.360
+We went through all of them, and kinda liked them.
-00:07:51.360 --> 00:07:52.800
-with computers
+00:08:11.360 --> 00:08:17.919
+So we also always thought, like,
-00:07:52.800 --> 00:07:55.440
-um over the years we've worked with many
+00:08:17.919 --> 00:08:22.639
+how is it that we can use these cool computers that we're into
-00:07:55.440 --> 00:07:55.840
-many
+00:08:22.639 --> 00:08:25.967
+to build this Dungeon game that we're into?
-00:07:55.840 --> 00:08:11.360
-different systems we've played
-
-00:08:11.360 --> 00:08:14.560
-like um so we
-
-00:08:14.560 --> 00:08:17.919
-also always thought like
-
-00:08:17.919 --> 00:08:20.800
-how is it that we can use these cool
-
-00:08:20.800 --> 00:08:22.639
-computers
-
-00:08:22.639 --> 00:08:28.319
-to build this dungeons
+00:08:25.967 --> 00:08:28.319
+'Cause that's what you do, right?
00:08:28.319 --> 00:08:32.080
-right that's certainly what we did um
+CORWIN: That's certainly what we did.
00:08:32.080 --> 00:08:35.039
-so after some decades of bike shedding
+So after some decades of bike-shedding
-00:08:35.039 --> 00:08:35.839
-where we saw
+00:08:35.039 --> 00:08:39.039
+where we saw really a lot of changes in the technology field,
-00:08:35.839 --> 00:08:37.360
-really a lot of changes in the
+00:08:39.039 --> 00:08:40.159
+cell phones were invented,
-00:08:37.360 --> 00:08:39.039
-technology field
+00:08:40.159 --> 00:08:41.919
+smartphones were invented...
-00:08:39.039 --> 00:08:40.800
-cell phones were invented smartphones
+00:08:41.919 --> 00:08:45.360
+Text messaging in particular had a dramatic impact
-00:08:40.800 --> 00:08:42.880
-were invented text messaging in
-
-00:08:42.880 --> 00:08:44.720
-particular had a dramatic
-
-00:08:44.720 --> 00:08:47.120
-impact on on what we thought dungeon
-
-00:08:47.120 --> 00:08:48.640
-would have to be able to do to be more
-
-00:08:48.640 --> 00:08:49.519
-fun
+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 in graph paper
+than scribbling in graph paper.
00:08:54.720 --> 00:08:58.480
-um yeah either way
+Yeah, either way.
00:08:58.480 --> 00:09:01.519
-we've been using linux since the mid 90s
-
-00:09:01.519 --> 00:09:04.399
-um I don't remember exactly when I did
+ERIK: We've been using Linux since the mid 90s
-00:09:04.399 --> 00:09:06.160
-my first linux install
+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:09.279
-but uh I really
+00:09:06.160 --> 00:09:11.200
+but I really liked it from the get-go,
-00:09:09.279 --> 00:09:12.560
-liked it from the get-go and um I think
+00:09:11.200 --> 00:09:17.267
+and I think it was shortly after I
+installed it on a 486,
-00:09:12.560 --> 00:09:13.279
-it was
+00:09:17.267 --> 00:09:18.900
+I went over to Corwin's house
-00:09:13.279 --> 00:09:23.360
-you know um
+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:26.320
-uh and I'll add I remember the day that
+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:26.320 --> 00:09:28.800
-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:28.800 --> 00:09:32.560
-it um it had a life I I mean I read lots
+00:09:33.440 --> 00:09:38.480
+I think a lot of us have written our own SWAG license code
-00:09:32.560 --> 00:09:33.440
-of licenses I
+00:09:38.480 --> 00:09:42.080
+and I definitely credit the formation of GNU
-00:09:33.440 --> 00:09:36.880
-I think a lot of us have written our own
-
-00:09:36.880 --> 00:09:38.480
-swag license code
-
-00:09:38.480 --> 00:09:41.600
-and uh I definitely credit the formation
-
-00:09:41.600 --> 00:09:42.800
-of gnu to my
-
-00:09:42.800 --> 00:09:48.640
-being interested in thinking about that
+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:53.040
-well um
-
-00:09:53.040 --> 00:09:55.200
-so yeah this is your turn I already
-
-00:09:55.200 --> 00:09:56.080
-mentioned uh
-
-00:09:56.080 --> 00:09:58.720
-jeff yesterday so you're turning to take
-
-00:09:58.720 --> 00:10:00.399
-it for a few slides
+Right. I am working the slides here. Okay.
-00:10:00.399 --> 00:10:03.519
-okay well I mean you know along the
+00:09:50.720 --> 00:09:54.800
+Well. So yeah, this is your turn.
-00:10:03.519 --> 00:10:04.240
-learning
+00:09:54.800 --> 00:09:57.360
+I already mentioned Jeff yesterday,
-00:10:04.240 --> 00:10:07.200
-linux we started learning the various
+00:09:57.360 --> 00:10:00.399
+so your turn to take it for a few slides.
-00:10:07.200 --> 00:10:08.560
-tools that were available
+00:10:00.399 --> 00:10:07.600
+ERIK: Along with learning Linux, we started learning the various tools
-00:10:08.560 --> 00:10:11.680
-through the new free software movement
+00:10:07.600 --> 00:10:11.680
+that were available through the GNU free software movement.
-00:10:11.680 --> 00:10:14.000
-and um it didn't take very long before
+00:10:11.680 --> 00:10:16.560
+It didn't take very long before we got into using Emacs.
-00:10:14.000 --> 00:10:14.720
-we got
+00:10:16.560 --> 00:10:21.839
+When we were working as software developers back in the 90s,
-00:10:14.720 --> 00:10:18.240
-into using Emacs um and when we were
+00:10:21.839 --> 00:10:25.200
+we both were using Emacs in an office environment
-00:10:18.240 --> 00:10:21.040
-working as software developers um back
+00:10:25.200 --> 00:10:28.959
+with some other developers.
-00:10:21.040 --> 00:10:24.000
-in the 90s we both were using Emacs in
+00:10:28.959 --> 00:10:32.367
+It was obviously a very powerful tool,
-00:10:24.000 --> 00:10:25.680
-an office environment with
+00:10:32.367 --> 00:10:40.560
+and we have really enjoyed using it for a couple of decades since then.
-00:10:25.680 --> 00:10:28.959
-some other developers and it I mean
+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:28.959 --> 00:10:40.560
-it was obviously a very powerful
+00:10:48.880 --> 00:10:52.480
+So we put together a project.
-00:10:40.560 --> 00:10:43.120
-um yeah I'm not going to go on at length
+00:10:52.480 --> 00:10:54.033
+Each time we rehearse this,
-00:10:43.120 --> 00:10:48.880
-about my love for Emacs here so um
-
-00:10:48.880 --> 00:10:52.000
-so we yeah so we put together a project
-
-00:10:52.000 --> 00:10:52.480
-and
-
-00:10:52.480 --> 00:10:54.240
-and each time we rehearse this eric
-
-00:10:54.240 --> 00:10:56.320
-introduces it with it's my story to tell
+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:10:59.360
-and we're just having a conversation
-
-00:10:59.360 --> 00:11:00.880
-with you today
+00:10:58.000 --> 00:11:00.880
+and we're just having a conversation with you today,
-00:11:00.880 --> 00:11:03.920
-um I'll just jump in and say
+00:11:00.880 --> 00:11:05.920
+I'll just jump in and say from a project standpoint,
-00:11:03.920 --> 00:11:06.399
-from a project standpoint the the
+00:11:05.920 --> 00:11:08.160
+the project owes its inception
-00:11:06.399 --> 00:11:08.160
-project owes its inception
+00:11:08.160 --> 00:11:10.320
+to a tremendous number of people in fandom
-00:11:08.160 --> 00:11:09.839
-to a tremendous number of people in
+00:11:10.320 --> 00:11:15.680
+that encouraged us to just do crazy projects.
-00:11:09.839 --> 00:11:12.079
-fandom that you know
+00:11:15.680 --> 00:11:17.760
+In this case, to our friends
-00:11:12.079 --> 00:11:14.000
-uh encouraged us to just do crazy
+00:11:17.760 --> 00:11:20.640
+that were hanging out with us on Discord all the time
-00:11:14.000 --> 00:11:15.680
-projects and
-
-00:11:15.680 --> 00:11:18.160
-in this case to our friends that were
-
-00:11:18.160 --> 00:11:18.800
-hanging out
-
-00:11:18.800 --> 00:11:21.360
-with us on discord all the time while we
-
-00:11:21.360 --> 00:11:22.560
-played different games
+00:11:20.640 --> 00:11:22.560
+while we played different games.
00:11:22.560 --> 00:11:25.200
-and uh through that and while I was
+And through that, and while I was
00:11:25.200 --> 00:11:26.640
-fooling with Emacs is
+fooling with Emacs,
00:11:26.640 --> 00:11:34.000
-generally other people played games uh
-
-00:11:34.000 --> 00:11:35.680
-kind of the pieces fell into place and
+generally other people played games,
-00:11:35.680 --> 00:11:37.200
-we were all there so we could talk about
+00:11:34.000 --> 00:11:35.519
+the pieces fell into place.
-00:11:37.200 --> 00:11:38.320
-it and the idea got
+00:11:35.519 --> 00:11:37.279
+We were all there, so we could talk about it,
-00:11:38.320 --> 00:11:41.040
-exciting again and we started going back
+00:11:37.279 --> 00:11:39.760
+and the idea got exciting again.
-00:11:41.040 --> 00:11:42.800
-to all the places that we had
+00:11:39.760 --> 00:11:41.920
+We started going back to all the places
-00:11:42.800 --> 00:11:44.480
-had trouble with it in the past and it
+00:11:41.920 --> 00:11:44.160
+that we had had trouble with it in the past.
-00:11:44.480 --> 00:11:46.640
-really did seem to add up we built proof
+00:11:44.160 --> 00:11:45.760
+It really did seem to add up.
-00:11:46.640 --> 00:11:48.000
-of concepts to do
+00:11:45.760 --> 00:11:48.880
+We built proof of concepts to do hard stuff quickly.
-00:11:48.000 --> 00:11:50.240
-hard stuff quickly and I guess we'll
+00:11:48.880 --> 00:11:54.880
+I guess we'll probably head into that that area now.
-00:11:50.240 --> 00:11:51.440
-probably head into that
+00:11:54.880 --> 00:11:59.300
+ERIK: This slide mentions: Why build a role-playing game in Emacs?
-00:11:51.440 --> 00:11:54.880
-that area now
+00:11:59.300 --> 00:12:03.360
+I was watching the last presentation
-00:11:54.880 --> 00:12:03.360
-so
+00:12:03.360 --> 00:12:08.167
+and there was a slide about all of the
+problems
-00:12:03.360 --> 00:12:06.800
-and there was a slide about all of
+00:12:08.167 --> 00:12:10.333
+that Emacs poses for retro gaming,
-00:12:06.800 --> 00:12:31.360
-the problems
+00:12:10.333 --> 00:12:14.100
+where it interrupts the game loops and
+it waits for user input.
-00:12:31.360 --> 00:12:34.959
-hey there hey
+00:12:14.100 --> 00:12:17.667
+That was a whole list of reasons why
-00:12:34.959 --> 00:12:37.279
-um yeah go ahead and continue I just got
+00:12:17.667 --> 00:12:21.233
+Emacs actually does exactly what we want in our project
-00:12:37.279 --> 00:12:38.800
-a phone call I think from leo so I'm
+00:12:21.233 --> 00:12:31.360
+and why Dungeon is a natural fit for Emacs.
-00:12:38.800 --> 00:12:40.639
-gonna mute
+00:12:31.360 --> 00:12:36.480
+CORWIN: Hey there. Yeah, go ahead and continue.
-00:12:40.639 --> 00:12:44.480
-okay so um what we did in
+00:12:36.480 --> 00:12:38.639
+I just got a phone call, I think from Leo,
-00:12:44.480 --> 00:12:47.600
-in the project was basically come up
+00:12:38.639 --> 00:12:40.639
+so I'm going to mute.
-00:12:47.600 --> 00:12:49.680
-with our minimum play testable candidate
+00:12:40.639 --> 00:12:47.279
+ERIK: So what we did in the project was basically
-00:12:49.680 --> 00:12:51.440
-we listed all of the things that we need
+00:12:47.279 --> 00:12:49.680
+come up with our minimum play-testable candidate.
-00:12:51.440 --> 00:12:52.000
-to be able
+00:12:49.680 --> 00:12:50.959
+We listed all of the things
-00:12:52.000 --> 00:12:56.240
-to make the project do in order to
+00:12:50.959 --> 00:12:54.240
+that we need to be able to make the project do
-00:12:56.240 --> 00:12:59.040
-recreate the dungeon experience that we
-
-00:12:59.040 --> 00:12:59.519
-had
+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:05.600 --> 00:13:09.680
-and
-
-00:13:09.680 --> 00:13:12.079
-I mean we you know it took a while for
-
-00:13:12.079 --> 00:13:13.839
-us to kind of
-
-00:13:13.839 --> 00:13:16.079
-tease apart the problem in a way where
-
-00:13:16.079 --> 00:13:18.000
-we could actually list out all of the
-
-00:13:18.000 --> 00:13:19.120
-features like
-
-00:13:19.120 --> 00:13:20.959
-what are the problems we have to solve
-
-00:13:20.959 --> 00:13:27.760
-and how do we solve them
-
-00:13:27.760 --> 00:13:30.959
-so creating any free software any
-
-00:13:30.959 --> 00:13:33.040
-self-organizing free software project
-
-00:13:33.040 --> 00:13:36.000
-is is challenging to start with and
-
-00:13:36.000 --> 00:13:37.200
-we're generally
-
-00:13:37.200 --> 00:13:38.480
-people with a bunch of other
-
-00:13:38.480 --> 00:13:40.320
-responsibilities by the time we get to
-
-00:13:40.320 --> 00:13:40.560
-it
-
-00:13:40.560 --> 00:13:44.000
-so it's it's not just hey
-
-00:13:44.000 --> 00:13:47.040
-you know the general herding cats it's
-
-00:13:47.040 --> 00:13:47.680
-it's
-
-00:13:47.680 --> 00:13:49.120
-you know trying to make it a part of
-
-00:13:49.120 --> 00:13:51.040
-your life to
-
-00:13:51.040 --> 00:13:54.399
-uh that being kind of a
-
-00:13:54.399 --> 00:13:57.680
-you know challenging battle we we
-
-00:13:57.680 --> 00:14:00.480
-kind of aligned on some some principles
-
-00:14:00.480 --> 00:14:02.639
-that we wanted to adhere to
-
-00:14:02.639 --> 00:14:04.079
-once we started taking the project
-
-00:14:04.079 --> 00:14:05.680
-seriously
-
-00:14:05.680 --> 00:14:09.519
-like pre you know particularly
-
-00:14:09.519 --> 00:14:12.720
-recognizing gnu in specific as we focus
-
-00:14:12.720 --> 00:14:15.199
-on giving back to the community
-
-00:14:15.199 --> 00:14:16.480
-taking what we learned as pearl
-
-00:14:16.480 --> 00:14:18.240
-programmers and
-
-00:14:18.240 --> 00:14:22.079
-uh you know bringing that spirit forward
-
-00:14:22.079 --> 00:14:24.320
-into into our work and maybe
-
-00:14:24.320 --> 00:14:26.399
-specifically support making sure that we
-
-00:14:26.399 --> 00:14:27.120
-can
-
-00:14:27.120 --> 00:14:30.639
-um you know write uh functions for the
-
-00:14:30.639 --> 00:14:31.760
-game
-
-00:14:31.760 --> 00:14:35.199
-um in pearl if we want to
-
-00:14:35.199 --> 00:14:38.079
-and then to use the game as a vehicle to
-
-00:14:38.079 --> 00:14:40.320
-make people look beyond
-
-00:14:40.320 --> 00:14:43.360
-the
-
-00:14:43.360 --> 00:14:46.800
-typically open source or sorry typically
-
-00:14:46.800 --> 00:14:49.600
-uh nominally open source at best
-
-00:14:49.600 --> 00:14:52.160
-generally pretty closed world of
-
-00:14:52.160 --> 00:14:54.160
-computer gaming a lot of windows users
-
-00:14:54.160 --> 00:14:55.440
-out there a lot of free
-
-00:14:55.440 --> 00:14:57.519
-non-free communication tools and a lot
-
-00:14:57.519 --> 00:14:59.760
-of uh
-
-00:14:59.760 --> 00:15:01.839
-you know a lot of ground to cover from a
-
-00:15:01.839 --> 00:15:03.360
-free software perspective
-
-00:15:03.360 --> 00:15:05.920
-so what can Emacs do from a gaming
-
-00:15:05.920 --> 00:15:07.360
-standpoint to
-
-00:15:07.360 --> 00:15:12.160
-to open that up
-
-00:15:12.160 --> 00:15:14.880
-and not to mention the hubris of the you
-
-00:15:14.880 --> 00:15:16.720
-know the two of us with a few friends
-
-00:15:16.720 --> 00:15:18.399
-basically deciding to take on what
-
-00:15:18.399 --> 00:15:19.440
-amounts to a
-
-00:15:19.440 --> 00:15:21.839
-huge project um you know we're
-
-00:15:21.839 --> 00:15:24.720
-essentially a year in now and we haven't
-
-00:15:24.720 --> 00:15:27.839
-really gotten over halfway to our
-
-00:15:27.839 --> 00:15:30.000
-minimum playtestable candidate
-
-00:15:30.000 --> 00:15:32.880
-um it's a it's a work in progress we've
-
-00:15:32.880 --> 00:15:34.320
-got a long row to go
-
-00:15:34.320 --> 00:15:36.800
-there's at least 50 items on the things
-
-00:15:36.800 --> 00:15:38.399
-that we think are critical to
-
-00:15:38.399 --> 00:15:40.320
-to be able to introduce it to my younger
-
-00:15:40.320 --> 00:15:44.720
-kids for example
-
-00:15:44.720 --> 00:15:48.399
-um okay so we're in the accomplishments
-
-00:15:48.399 --> 00:15:49.279
-section
-
-00:15:49.279 --> 00:15:50.959
-so we're supposed to be talking about
-
-00:15:50.959 --> 00:15:52.639
-the things that we have
-
-00:15:52.639 --> 00:15:55.920
-succeeded in doing in our first year um
-
-00:15:55.920 --> 00:15:58.880
-we have succeeded in working with data
-
-00:15:58.880 --> 00:16:01.199
-in org documents using org mode
-
-00:16:01.199 --> 00:16:04.480
-tables to store the data that we're
-
-00:16:04.480 --> 00:16:05.360
-going to use
-
-00:16:05.360 --> 00:16:09.279
-in the various parts of our game
-
-00:16:09.279 --> 00:16:12.519
-um and we've had a lot of success with
-
-00:16:12.519 --> 00:16:14.160
-svg.el
-
-00:16:14.160 --> 00:16:16.639
-uh it started withdrawing maps and we
-
-00:16:16.639 --> 00:16:17.279
-have
-
-00:16:17.279 --> 00:16:19.440
-another talk about our mapping
-
-00:16:19.440 --> 00:16:21.440
-specifically coming up next so we'll
-
-00:16:21.440 --> 00:16:23.759
-put off some of that discussion for a
-
-00:16:23.759 --> 00:16:25.199
-separate talk
-
-00:16:25.199 --> 00:16:28.720
-um but we've also succeeded in
-
-00:16:28.720 --> 00:16:32.320
-um getting into a bunch of different
-
-00:16:32.320 --> 00:16:35.680
-elements of the game where uh
-
-00:16:35.680 --> 00:16:38.160
-we're you know making a lot of progress
-
-00:16:38.160 --> 00:16:38.959
-using this
-
-00:16:38.959 --> 00:16:41.920
-drawing engine we developed to also draw
-
-00:16:41.920 --> 00:16:43.759
-this other thing and also draw this
-
-00:16:43.759 --> 00:16:45.279
-other thing and also draw this other
-
-00:16:45.279 --> 00:16:46.079
-thing and it's
-
-00:16:46.079 --> 00:16:49.519
-um you know we kind of backed into
-
-00:16:49.519 --> 00:16:52.560
-we've got this aesthetic and we're
-
-00:16:52.560 --> 00:16:54.720
-using it to draw interfaces for all of
-
-00:16:54.720 --> 00:17:03.120
-the different parts of the game
-
-00:17:03.120 --> 00:17:05.600
-so let's talk let's talk a little bit
-
-00:17:05.600 --> 00:17:06.959
-about what
-
-00:17:06.959 --> 00:17:10.880
-uh what works now um
-
-00:17:10.880 --> 00:17:13.360
-first of all there's the mapping part
-
-00:17:13.360 --> 00:17:14.640
-that eric mentioned
-
-00:17:14.640 --> 00:17:18.480
-and we'll jump here into um we'll start
-
-00:17:18.480 --> 00:17:20.880
-opening up some files and looking around
-
-00:17:20.880 --> 00:17:22.160
-um but then
-
-00:17:22.160 --> 00:17:25.520
-also later uh we'll we'll fire up an eye
-
-00:17:25.520 --> 00:17:26.959
-elm and look at some of the
-
-00:17:26.959 --> 00:17:28.400
-some of the other proofs of concept so
-
-00:17:28.400 --> 00:17:30.240
-hopefully we can
-
-00:17:30.240 --> 00:17:32.240
-pivot the second talk more toward the
-
-00:17:32.240 --> 00:17:34.320
-demos as as we skip some of the
-
-00:17:34.320 --> 00:17:35.520
-interactive stuff that might be
-
-00:17:35.520 --> 00:17:43.200
-mentioned in the slides that we go by
-
-00:17:43.200 --> 00:17:46.880
-so maps
-
-00:17:46.880 --> 00:17:50.080
-visual battle board um
-
-00:17:50.080 --> 00:17:53.120
-the battle board I'm just gonna I'm just
-
-00:17:53.120 --> 00:17:54.160
-gonna skip it eric
-
-00:17:54.160 --> 00:18:02.000
-we'll hit it in the next one okay
-
-00:18:02.000 --> 00:18:08.480
-hang on
-
-00:18:08.480 --> 00:18:09.919
-okay so I'm just going to go ahead and
-
-00:18:09.919 --> 00:18:11.840
-open up uh maps and
-
-00:18:11.840 --> 00:18:13.760
-let you talk from the from the svg
-
-00:18:13.760 --> 00:18:15.039
-process itself
-
-00:18:15.039 --> 00:18:16.480
-because that's the interesting part to
-
-00:18:16.480 --> 00:18:22.240
-me that uh to me
-
-00:18:22.240 --> 00:18:26.080
-okay talk about the svg
-
-00:18:26.080 --> 00:18:28.640
-process like what what are you thinking
-
-00:18:28.640 --> 00:18:30.640
-exactly we want to talk about how
-
-00:18:30.640 --> 00:18:33.760
-we turn our data into an image or
-
-00:18:33.760 --> 00:18:37.919
-what what are you hoping for yeah so
-
-00:18:37.919 --> 00:18:39.760
-I mean did you did you want to talk more
-
-00:18:39.760 --> 00:18:41.200
-from from the
-
-00:18:41.200 --> 00:18:45.679
-svg the hand-drawn svg graphics at all
-
-00:18:45.679 --> 00:18:47.039
-I thought we were going to save that
-
-00:18:47.039 --> 00:18:49.760
-stuff for the passing talk okay
-
-00:18:49.760 --> 00:18:52.000
-right now if you want yeah I mean so
-
-00:18:52.000 --> 00:18:53.440
-we've got about
-
-00:18:53.440 --> 00:18:56.559
-uh 10 minutes before the turn where we
-
-00:18:56.559 --> 00:18:58.400
-thought we would first take any
-
-00:18:58.400 --> 00:19:00.400
-questions that are hanging out there
-
-00:19:00.400 --> 00:19:02.320
-I unfortunately closed the ether pad but
-
-00:19:02.320 --> 00:19:04.799
-I can open it again real quick
-
-00:19:04.799 --> 00:19:08.480
-and or you can jump
-
-00:19:08.480 --> 00:19:11.440
-jump into the to the pathing stuff now
-
-00:19:11.440 --> 00:19:12.320
-or I can just
-
-00:19:12.320 --> 00:19:13.760
-throw up an animal and we can start the
-
-00:19:13.760 --> 00:19:15.440
-demos so
-
-00:19:15.440 --> 00:19:18.880
-let me invite uh almond or sasha back in
-
-00:19:18.880 --> 00:19:19.840
-if you guys
-
-00:19:19.840 --> 00:19:22.160
-or leo if any of you want to join the
-
-00:19:22.160 --> 00:19:22.960
-conversation
-
-00:19:22.960 --> 00:19:25.840
-make a suggestion as to how we balance
-
-00:19:25.840 --> 00:19:27.120
-between the remaining time
-
-00:19:27.120 --> 00:19:29.840
-the rest of what we have left starts in
-
-00:19:29.840 --> 00:19:32.480
-on toward the technical so especially
-
-00:19:32.480 --> 00:19:35.120
-if there would be questions uh questions
-
-00:19:35.120 --> 00:19:36.840
-about the game right now that would be
-
-00:19:36.840 --> 00:19:40.160
-awesome
-
-00:19:40.160 --> 00:19:48.720
-and I'm gonna get seated again
-
-00:19:48.720 --> 00:19:51.200
-I'm not sure if I talk over the stream
-
-00:19:51.200 --> 00:19:53.200
-um if you'll hear it because I'm just
-
-00:19:53.200 --> 00:19:54.720
-watching your stream
-
-00:19:54.720 --> 00:20:01.200
-but I can try writing an irc um
-
-00:20:01.200 --> 00:20:04.640
-sure yeah questions would be cool um or
-
-00:20:04.640 --> 00:20:07.360
-um yeah well eric why don't you just go
-
-00:20:07.360 --> 00:20:08.559
-ahead and start walking us through the
-
-00:20:08.559 --> 00:20:09.120
-hand
-
-00:20:09.120 --> 00:20:11.440
-hand-drawn svg stuff just a little bit
-
-00:20:11.440 --> 00:20:12.960
-because I think
-
-00:20:12.960 --> 00:20:14.640
-if that isn't interesting to people we
-
-00:20:14.640 --> 00:20:17.120
-can just preempt for a question
-
-00:20:17.120 --> 00:20:21.120
-okay so historically when we
-
-00:20:21.120 --> 00:20:24.080
-um decided to actually start writing
-
-00:20:24.080 --> 00:20:25.840
-code one of the very first things we
-
-00:20:25.840 --> 00:20:26.720
-wanted to do
-
-00:20:26.720 --> 00:20:30.080
-was the maps because initially it seemed
-
-00:20:30.080 --> 00:20:31.919
-like the maps were going to be one of
-
-00:20:31.919 --> 00:20:33.840
-the biggest challenges
-
-00:20:33.840 --> 00:20:35.760
-in terms of how do we get a text editor
-
-00:20:35.760 --> 00:20:38.000
-to draw pictures for us
-
-00:20:38.000 --> 00:20:42.159
-um we pretty quickly decided we wanted
-
-00:20:42.159 --> 00:20:45.280
-to work with svgs because it allowed us
-
-00:20:45.280 --> 00:20:48.559
-to leverage the power of Emacs as a text
-
-00:20:48.559 --> 00:20:52.159
-editor and a text manipulator to write
-
-00:20:52.159 --> 00:20:56.080
-text graphics with the svg format
-
-00:20:56.080 --> 00:20:59.520
-so we did some svg graphics by hand
-
-00:20:59.520 --> 00:21:01.440
-we went in and just started hand coding
-
-00:21:01.440 --> 00:21:02.640
-things that looked
-
-00:21:02.640 --> 00:21:05.440
-visually like the maps we used to draw
-
-00:21:05.440 --> 00:21:07.440
-by hand on graph paper when
-
-00:21:07.440 --> 00:21:08.960
-we were you know sitting around the
-
-00:21:08.960 --> 00:21:11.360
-table
-
-00:21:11.360 --> 00:21:14.559
-yep absolutely what emerged from that
-
-00:21:14.559 --> 00:21:17.840
-is as we started working on um some of
-
-00:21:17.840 --> 00:21:20.400
-these files this particular image is a
-
-00:21:20.400 --> 00:21:24.000
-test of some 20 wide water
-
-00:21:24.000 --> 00:21:26.240
-with some beaches around it and a
-
-00:21:26.240 --> 00:21:28.000
-special chamber kind of off to the side
-
-00:21:28.000 --> 00:21:29.679
-called a clapper
-
-00:21:29.679 --> 00:21:33.760
-and this was the way we would code is by
-
-00:21:33.760 --> 00:21:36.559
-sketching by hand all of these things to
-
-00:21:36.559 --> 00:21:37.600
-look right
-
-00:21:37.600 --> 00:21:39.440
-and then we would take that code and we
-
-00:21:39.440 --> 00:21:42.080
-noticed um it became real repetitive
-
-00:21:42.080 --> 00:21:43.919
-as we would go like chunk of water chunk
-
-00:21:43.919 --> 00:21:45.440
-of water chunk of water
-
-00:21:45.440 --> 00:21:46.880
-and we're like okay so what we really
-
-00:21:46.880 --> 00:21:48.559
-need is to define a
-
-00:21:48.559 --> 00:21:52.000
-set of um we called it tiles um but like
-
-00:21:52.000 --> 00:21:53.600
-you could think of it as rubber stamps
-
-00:21:53.600 --> 00:21:55.760
-where we write this graphics code
-
-00:21:55.760 --> 00:21:57.440
-and then we're able to repeat it in
-
-00:21:57.440 --> 00:22:00.400
-different places around the map
-
-00:22:00.400 --> 00:22:03.039
-um you want to flip over to code view
-
-00:22:03.039 --> 00:22:07.120
-and show that or do we want to move into
-
-00:22:07.120 --> 00:22:10.240
-tiles code
-
-00:22:10.240 --> 00:22:12.720
-so you know you can see just really
-
-00:22:12.720 --> 00:22:14.320
-obviously here the only thing that's
-
-00:22:14.320 --> 00:22:15.200
-changing from
-
-00:22:15.200 --> 00:22:18.240
-chunk of water to chunk of water is the
-
-00:22:18.240 --> 00:22:21.600
-x and y coordinates um
-
-00:22:21.600 --> 00:22:24.640
-we're you know we can skip getting into
-
-00:22:24.640 --> 00:22:26.000
-the svg directives
-
-00:22:26.000 --> 00:22:29.360
-and how all of the path statements
-
-00:22:29.360 --> 00:22:30.640
-actually work
-
-00:22:30.640 --> 00:22:33.679
-but you can trust us
-
-00:22:33.679 --> 00:22:36.480
-all of these d equals and there's m's
-
-00:22:36.480 --> 00:22:39.039
-and h's and v's that turns out to be
-
-00:22:39.039 --> 00:22:41.039
-horizontal lines and vertical lines and
-
-00:22:41.039 --> 00:22:42.480
-cursor moves and it's kind of like
-
-00:22:42.480 --> 00:22:44.159
-turtle graphics if anyone
-
-00:22:44.159 --> 00:22:46.640
-remembers that far back and we're
-
-00:22:46.640 --> 00:22:48.720
-picking up our pen and dropping it and
+table when we were kids.
-00:22:48.720 --> 00:22:54.720
-drawing lines around on our map
+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:22:54.720 --> 00:22:56.240
-so we do have a few questions if you
+00:13:12.570 --> 00:13:15.870
+tease apart the problem in a way where we could actually
-00:22:56.240 --> 00:22:58.000
-want to take them now otherwise
+00:13:15.870 --> 00:13:19.370
+list out all of the features, like, what are the problems
-00:22:58.000 --> 00:23:01.200
-um we can also jump in
+00:13:19.370 --> 00:13:22.160
+we have to solve and how do we solve them?
-00:23:01.200 --> 00:23:03.120
-let's get them while they're fresh okay
+00:13:27.160 --> 00:13:31.050
+So, creating any free software, any self-organizing free
-00:23:03.120 --> 00:23:04.559
-sounds good
+00:13:31.050 --> 00:13:34.740
+software project is challenging to start with, and we're
-00:23:04.559 --> 00:23:07.520
-um so we'll probably shift to question
+00:13:34.740 --> 00:13:38.530
+generally people with a bunch of other responsibilities by
-00:23:07.520 --> 00:23:08.000
-and answer
+00:13:38.530 --> 00:13:43.570
+the time we get to it. So, it's not just, hey, you know,
-00:23:08.000 --> 00:23:10.799
-mode for up to 15 minutes here so if you
+00:13:43.570 --> 00:13:48.350
+the general herding cats, it's, you know, trying to make it
-00:23:10.799 --> 00:23:11.919
-do have questions
+00:13:48.350 --> 00:13:50.160
+a part of your life, too.
-00:23:11.919 --> 00:23:14.480
-um maybe stack rank go ahead and sort
+00:13:52.160 --> 00:13:56.570
+That being kind of a, you know, challenging battle, we kind
-00:23:14.480 --> 00:23:15.679
-the questions
+00:13:56.570 --> 00:14:00.580
+of aligned on some principles that we wanted to adhere to
-00:23:15.679 --> 00:23:17.600
-a little for us or comment on them to
+00:14:00.580 --> 00:14:04.160
+once we started taking the project seriously.
-00:23:17.600 --> 00:23:18.960
-let us know which ones you want to see
+00:14:04.160 --> 00:14:10.640
+Like, you know, particularly recognizing GNU in specific as
-00:23:18.960 --> 00:23:19.760
-us get here
+00:14:10.640 --> 00:14:14.160
+we focus on giving back to the community.
-00:23:19.760 --> 00:23:21.280
-if we start getting a little long-winded
+00:14:15.160 --> 00:14:19.830
+Taking what we learned as Perl programmers and, you know,
-00:23:21.280 --> 00:23:23.600
-or nudges along we'll take direction
+00:14:19.830 --> 00:14:23.920
+bringing that spirit forward into our work and maybe
-00:23:23.600 --> 00:23:26.960
-but thanks for your questions um I'd
+00:14:23.920 --> 00:14:28.830
+specifically support, making sure that we can, you know,
-00:23:26.960 --> 00:23:28.799
-like to see a demo as well we'll look at
+00:14:28.830 --> 00:14:34.160
+write functions for the game in Perl if we want to.
-00:23:28.799 --> 00:23:30.720
-that with the remaining time after this
+00:14:35.160 --> 00:14:40.250
+And then to use the game as a vehicle to make people look
-00:23:30.720 --> 00:23:32.159
-question block
+00:14:40.250 --> 00:14:45.510
+beyond the typically open source – sorry, typically nom
-00:23:32.159 --> 00:23:35.200
-um more about what the game is
+00:14:45.510 --> 00:14:50.290
+inally open source at best, generally pretty closed world of
-00:23:35.200 --> 00:23:38.720
-okay sure so let's let's take our
+00:14:50.290 --> 00:14:52.160
+computer gaming.
-00:23:38.720 --> 00:23:40.720
-uh one minute each swing at what the
+00:14:52.160 --> 00:14:55.260
+A lot of Windows users out there, a lot of non-free
-00:23:40.720 --> 00:23:42.799
-game is you wanna go first I called
+00:14:55.260 --> 00:14:58.670
+communication tools, and a lot of, you know, a lot of
-00:23:42.799 --> 00:23:45.120
-weapons
+00:14:58.670 --> 00:15:02.160
+ground to cover from a free software perspective.
-00:23:45.120 --> 00:23:48.840
-okay um dungeon
+00:15:03.160 --> 00:15:08.160
+So what can Emacs do from a gaming standpoint to open that up?
-00:23:48.840 --> 00:23:52.720
-is like role-playing games
+00:15:08.160 --> 00:15:12.960
+And not to mention the hubris of the, you know, the two of
-00:23:52.720 --> 00:23:55.440
-but you don't really do role-playing
+00:15:12.960 --> 00:15:17.600
+us with a few friends basically deciding to take on what
-00:23:55.440 --> 00:23:56.159
-like the
+00:15:17.600 --> 00:15:20.160
+amounts to a huge project.
-00:23:56.159 --> 00:23:57.919
-for me the thing the core of being a
+00:15:20.160 --> 00:15:24.080
+You know, we're essentially a year in now and we haven't
-00:23:57.919 --> 00:23:59.520
-role-playing game is you
+00:15:24.080 --> 00:15:29.160
+really gotten over halfway to our minimum play testable candidate.
-00:23:59.520 --> 00:24:02.080
-take on the role of being your character
+00:15:30.160 --> 00:15:34.160
+It's a work in progress. We've got a long road to go.
-00:24:02.080 --> 00:24:03.039
-and you play
+00:15:34.160 --> 00:15:37.310
+There's at least 50 items on the things that we think are
-00:24:03.039 --> 00:24:06.000
-your character and dungeon's not like
+00:15:37.310 --> 00:15:40.390
+critical to be able to introduce it to my younger kids, for
-00:24:06.000 --> 00:24:06.400
-that
+00:15:40.390 --> 00:15:41.160
+example.
-00:24:06.400 --> 00:24:10.320
-dungeon um you can play
+00:15:41.160 --> 00:15:48.650
+Okay, so we're in the accomplishments section. So we're
-00:24:10.320 --> 00:24:12.640
-so the dungeon party always has eight
+00:15:48.650 --> 00:15:51.700
+supposed to be talking about the things that we have
-00:24:12.640 --> 00:24:13.840
-characters in it
+00:15:51.700 --> 00:15:54.160
+succeeded in doing in our first year.
-00:24:13.840 --> 00:24:15.840
-there's four in the front row and four
+00:15:55.160 --> 00:15:59.580
+We have succeeded in working with data in org documents,
-00:24:15.840 --> 00:24:17.679
-in the back row and you march through
+00:15:59.580 --> 00:16:04.030
+using org mode tables to store the data that we're going to
-00:24:17.679 --> 00:24:18.720
-the dungeon
+00:16:04.030 --> 00:16:07.160
+use in the various parts of our game.
-00:24:18.720 --> 00:24:22.159
-fighting whatever you encounter and if
+00:16:07.160 --> 00:16:14.440
+And we've had a lot of success with svg.el. It started with
-00:24:22.159 --> 00:24:24.000
-there's one player you play all eight
+00:16:14.440 --> 00:16:18.130
+drawing maps and we have another talk about our mapping
-00:24:24.000 --> 00:24:25.200
-characters
+00:16:18.130 --> 00:16:20.160
+specifically coming up next.
-00:24:25.200 --> 00:24:27.120
-and depending on how many players you
+00:16:21.160 --> 00:16:25.160
+So we'll put off some of that discussion for a separate talk.
-00:24:27.120 --> 00:24:28.720
-have you split up the party
+00:16:25.160 --> 00:16:30.050
+But we've also succeeded in getting into a bunch of
-00:24:28.720 --> 00:24:30.799
-in whatever way seems fair and equitable
+00:16:30.050 --> 00:16:36.770
+different elements of the game where we're, you know,
-00:24:30.799 --> 00:24:32.960
-to everybody
+00:16:36.770 --> 00:16:39.340
+making a lot of progress using this drawing engine we
-00:24:32.960 --> 00:24:34.880
-similarly I said the dungeon is kind of
+00:16:39.340 --> 00:16:43.360
+developed to also draw this other thing and also draw this
-00:24:34.880 --> 00:24:36.720
-a simple game like there's only
+00:16:43.360 --> 00:16:45.160
+other thing and also draw this other thing.
-00:24:36.720 --> 00:24:38.320
-three races and there's only three
+00:16:46.160 --> 00:16:46.160
+And we kind of backed into, we've got this aesthetic
-00:24:38.320 --> 00:24:40.080
-classes all of your characters are
+00:16:46.161 --> 00:16:54.750
+and we're using it to draw interfaces for all of the different
-00:24:40.080 --> 00:24:41.760
-either human elf dwarf
+00:16:54.750 --> 00:16:56.160
+parts of the game.
-00:24:41.760 --> 00:24:44.080
-they're all a warrior a priest or a
+00:16:56.160 --> 00:17:08.160
+So let's talk a little bit about what works now.
-00:24:44.080 --> 00:24:44.880
-wizard
+00:17:11.160 --> 00:17:15.330
+First of all, there's the mapping part that Erik mentioned
-00:24:44.880 --> 00:24:46.640
-and all of these characters have you
+00:17:15.330 --> 00:17:19.040
+and we'll jump here into, we'll start opening up some files
-00:24:46.640 --> 00:24:48.320
-know special properties
+00:17:19.040 --> 00:17:20.160
+and looking around.
-00:24:48.320 --> 00:24:51.279
-and special talents that is why they
+00:17:20.160 --> 00:17:25.060
+But then also later we'll fire up an IELM and look at some
-00:24:51.279 --> 00:24:53.760
-come together in this party of eight
+00:17:25.060 --> 00:17:28.160
+of the other proofs of concept.
-00:24:53.760 --> 00:24:56.240
-but essentially dungeon is a game about
+00:17:28.160 --> 00:17:31.350
+So hopefully we can pivot the second talk more toward the
-00:24:56.240 --> 00:24:57.600
-making up all of these
+00:17:31.350 --> 00:17:34.520
+demos as we skip some of the interactive stuff that might
-00:24:57.600 --> 00:25:00.000
-um eight characters and stomping through
+00:17:34.520 --> 00:17:37.160
+be mentioned in the slides that we go by.
-00:25:00.000 --> 00:25:01.679
-the dungeon killing things taking their
+00:17:37.160 --> 00:17:38.160
+Okay.
-00:25:01.679 --> 00:25:03.840
-stuff
+00:17:38.160 --> 00:17:48.160
+So, maps, visual battleboard.
-00:25:03.840 --> 00:25:05.120
-well you're way over but I don't know
+00:17:48.160 --> 00:17:51.160
+The battleboard...
-00:25:05.120 --> 00:25:06.960
-how much I have to add to that
+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:25:06.960 --> 00:25:10.080
-I will just add that if if you're
+00:17:55.160 --> 00:17:57.160
+Okay.
-00:25:10.080 --> 00:25:14.159
-uh if if one's passion as a dungeon
+00:17:57.160 --> 00:18:03.160
+Hang on.
-00:25:14.159 --> 00:25:16.559
-master is killing player characters this
+00:18:05.160 --> 00:18:07.660
+Okay, so I'm just going to go ahead and open up maps and
-00:25:16.559 --> 00:25:17.120
-game
+00:18:07.660 --> 00:18:12.490
+let you talk from the SVG process itself, because that's
-00:25:17.120 --> 00:25:19.600
-is meant for you you don't have to build
+00:18:12.490 --> 00:18:15.160
+the interesting part to me.
-00:25:19.600 --> 00:25:21.039
-your game like that
+00:18:15.160 --> 00:18:21.160
+Okay.
-00:25:21.039 --> 00:25:22.559
-but that's definitely a thing that
+00:18:22.160 --> 00:18:26.350
+Talk about the SVG process, like what do you think exactly
-00:25:22.559 --> 00:25:24.400
-people do with this game
+00:18:26.350 --> 00:18:31.310
+we want to talk about? How we turn our data into an image
-00:25:24.400 --> 00:25:27.360
-um and then as eric said it just
+00:18:31.310 --> 00:18:34.160
+or what are you hoping for?
-00:25:27.360 --> 00:25:28.960
-encourages you to put your creativity on
+00:18:34.160 --> 00:18:40.140
+Yeah, so I mean did you want to talk more from the hand-d
-00:25:28.960 --> 00:25:30.320
-the table to bring all the different
+00:18:40.140 --> 00:18:43.160
+rawn SVG graphics at all?
-00:25:30.320 --> 00:25:31.039
-elements
+00:18:43.160 --> 00:18:48.160
+I thought we were going to save that stuff for the pathing talk.
-00:25:31.039 --> 00:25:33.760
-um and this hopefully this may be clear
+00:18:48.160 --> 00:18:49.160
+Okay, that sounds fine.
-00:25:33.760 --> 00:25:35.039
-in our slides since we were a little
+00:18:49.160 --> 00:18:50.160
+But we can go into it right now if you want.
-00:25:35.039 --> 00:25:36.400
-fumbling for the first few minutes of
+00:18:50.160 --> 00:18:54.640
+Yeah, so we've got about 10 minutes before the turn where
-00:25:36.400 --> 00:25:36.960
-the talk
+00:18:54.640 --> 00:18:58.470
+we thought we would first take any questions that are
-00:25:36.960 --> 00:25:40.480
-but um there's also a kind of a player's
+00:18:58.470 --> 00:19:00.160
+hanging out there.
-00:25:40.480 --> 00:25:41.200
-guide
+00:19:00.160 --> 00:19:04.160
+I unfortunately closed the Etherpad, but I can open it again real quick.
-00:25:41.200 --> 00:25:43.760
-that that I started a few years ago um
+00:19:04.160 --> 00:19:09.850
+Or you can jump into the pathing stuff now, or I can just
-00:25:43.760 --> 00:25:45.919
-that's that's not super complete
+00:19:09.850 --> 00:19:14.160
+throw open an IELM and we can start the demos.
-00:25:45.919 --> 00:25:48.400
-but um but does cover some of the high
+00:19:15.160 --> 00:19:20.600
+So let me invite Amin or Sacha back in, or Leo, if any of
-00:25:48.400 --> 00:25:50.159
-level basics of the game that eric's
+00:19:20.600 --> 00:19:23.350
+you want to join the conversation and make a suggestion as
-00:25:50.159 --> 00:25:52.320
-been talking from
+00:19:23.350 --> 00:19:27.160
+to how we balance between the remaining time.
-00:25:52.320 --> 00:25:55.679
-and I would add that some of the things
+00:19:27.160 --> 00:19:30.300
+The rest of what we have left starts in on toward the
-00:25:55.679 --> 00:25:56.960
-you know some of what makes dungeon
+00:19:30.300 --> 00:19:34.250
+technical, so especially if there would be questions about
-00:25:56.960 --> 00:25:58.480
-great is that there's a lot of mystery
+00:19:34.250 --> 00:19:37.160
+the game right now, that would be awesome.
-00:25:58.480 --> 00:25:59.360
-about it
+00:19:37.160 --> 00:19:42.160
+And I'm going to get seated again.
-00:25:59.360 --> 00:26:01.120
-like the player's handbook doesn't tell
+00:19:44.160 --> 00:19:48.870
+I'm not sure if I talk over the stream, if you'll hear it,
-00:26:01.120 --> 00:26:02.880
-you all of the rules
+00:19:48.870 --> 00:19:57.160
+because I'm just watching your stream, but I can try writing on IRC.
-00:26:02.880 --> 00:26:06.080
-um or like really mystery
+00:20:01.160 --> 00:20:06.140
+Sure, yeah, questions would be cool. Or, yeah, well Erik,
-00:26:06.080 --> 00:26:08.080
-and like there's mazes and there's
+00:20:06.140 --> 00:20:08.980
+why don't you just go ahead and start walking us through
-00:26:08.080 --> 00:26:09.679
-puzzles and
+00:20:08.980 --> 00:20:12.000
+the hand drawn SVG stuff just a little bit, because I think
-00:26:09.679 --> 00:26:12.240
-you have to figure out how things work
+00:20:12.000 --> 00:20:14.950
+if that isn't interesting to people, we can just preempt
-00:26:12.240 --> 00:26:12.799
-and like
+00:20:14.950 --> 00:20:16.160
+for a question.
-00:26:12.799 --> 00:26:14.559
-we've got all of these treasure items in
+00:20:17.160 --> 00:20:23.010
+Okay, so historically when we decided to actually start
-00:26:14.559 --> 00:26:16.640
-there that could help you deal with a
+00:20:23.010 --> 00:20:27.080
+writing code, one of the very first things we wanted to do
-00:26:16.640 --> 00:26:18.480
-particular monster if it occurs to you
+00:20:27.080 --> 00:20:30.990
+was the maps, because initially it seemed like the maps
-00:26:18.480 --> 00:26:19.919
-to use it
+00:20:30.990 --> 00:20:34.750
+were going to be one of the biggest challenges in terms of
-00:26:19.919 --> 00:26:22.720
-and um you know like that there's a lot
+00:20:34.750 --> 00:20:37.160
+how do we get a text editor to draw pictures for us.
-00:26:22.720 --> 00:26:23.360
-of
+00:20:40.160 --> 00:20:44.350
+So, we pretty quickly decided we wanted to work with SVGs
-00:26:23.360 --> 00:26:25.279
-um you don't know what's going on you're
+00:20:44.350 --> 00:20:48.370
+because it allowed us to leverage the power of Emacs as a
-00:26:25.279 --> 00:26:27.039
-dropped in the middle of this situation
+00:20:48.370 --> 00:20:53.680
+text editor and a text manipulator to write text graphics
-00:26:27.039 --> 00:26:28.559
-and you have to try and survive
+00:20:53.680 --> 00:20:56.160
+with the SVG format.
-00:26:28.559 --> 00:26:31.919
-and level up and figure it out and
+00:20:56.160 --> 00:20:59.770
+So we did some SVG graphics by hand, we went in and just
-00:26:31.919 --> 00:26:33.840
-if you succeed in doing that for long
+00:20:59.770 --> 00:21:03.620
+started hand coding things that looked visually like the
-00:26:33.840 --> 00:26:35.520
-enough eventually you start realizing
+00:21:03.620 --> 00:21:07.300
+maps we used to draw by hand on graph paper when we were,
-00:26:35.520 --> 00:26:37.520
-that there are big picture puzzles
+00:21:07.300 --> 00:21:10.160
+you know, sitting around the table.
-00:26:37.520 --> 00:26:40.000
-that there are you know there is more to
+00:21:10.160 --> 00:21:13.160
+Yep, absolutely.
-00:26:40.000 --> 00:26:41.760
-this than just killing things and taking
+00:21:13.160 --> 00:21:17.610
+What emerged from that is as we started working on some of
-00:26:41.760 --> 00:26:43.360
-their stuff
+00:21:17.610 --> 00:21:22.140
+these files, this particular image is a test of some 20
-00:26:43.360 --> 00:26:46.000
-and that's where the joy of designing
+00:21:22.140 --> 00:21:25.910
+wide water with some beaches around it and a special
-00:26:46.000 --> 00:26:47.279
-these games comes in
+00:21:25.910 --> 00:21:29.160
+chamber kind of off to the side called a clapper.
-00:26:47.279 --> 00:26:49.679
-for me is like designing the mazes and
+00:21:29.160 --> 00:21:32.960
+And this was the way we would code is by sketching by hand
-00:26:49.679 --> 00:26:51.679
-designing the puzzles and like
+00:21:32.960 --> 00:21:36.940
+all of these things to look right. And then we would take
-00:26:51.679 --> 00:26:53.200
-oh yeah and then they're going to come
+00:21:36.940 --> 00:21:40.810
+that code and we noticed it became real repetitive as we
-00:26:53.200 --> 00:26:54.240
-out of this room and you know what
+00:21:40.810 --> 00:21:45.160
+would go like chunk of water chunk of water chunk of water.
-00:26:54.240 --> 00:26:55.919
-they're going to do they want to
+00:21:45.160 --> 00:21:48.860
+And we're like okay so what we really need is to define a
-00:26:55.919 --> 00:26:58.240
-go that way so I'm going to put the trap
+00:21:48.860 --> 00:21:52.620
+set of, we call it tiles, but like you can think of it as
-00:26:58.240 --> 00:26:59.600
-right there
+00:21:52.620 --> 00:21:56.660
+rubber stamps where we write this graphics code, and then
-00:26:59.600 --> 00:27:01.360
-and they'll walk right into it every
+00:21:56.660 --> 00:22:01.160
+we're able to repeat it in different places around the map.
-00:27:01.360 --> 00:27:03.840
-time and then when the party does get in
+00:22:01.160 --> 00:22:05.680
+You want to flip over to code view and show that or do we
-00:27:03.840 --> 00:27:05.440
-your map and they do exactly what you
+00:22:05.680 --> 00:22:09.160
+want to move into. Sure.
-00:27:05.440 --> 00:27:07.200
-thought and they hit the trap it's just
+00:22:09.160 --> 00:22:10.160
+Code view.
-00:27:07.200 --> 00:27:09.279
-really satisfying to watch the look on
+00:22:10.160 --> 00:22:14.700
+So, you know, you can see just really obviously here the
-00:27:09.279 --> 00:27:10.960
-their little faces as they squirm and
+00:22:14.700 --> 00:22:19.240
+only thing that's changing from chunk of water to chunk of
-00:27:10.960 --> 00:27:12.320
-struggle to stay alive
+00:22:19.240 --> 00:22:22.160
+water is the x and y coordinates.
-00:27:12.320 --> 00:27:13.760
-yeah that's that's what I was trying to
+00:22:22.160 --> 00:22:26.990
+And, you know, we can skip getting into the SVG directives
-00:27:13.760 --> 00:27:15.520
-get at thanks all right that was perfect
+00:22:26.990 --> 00:22:31.640
+and how all of the path statements actually work, but you
-00:27:15.520 --> 00:27:16.320
-for me
+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:27:16.320 --> 00:27:19.200
-all right um so so highlight your
+00:22:36.230 --> 00:22:41.160
+and V's that turns out to be horizontal lines and vertical
-00:27:19.200 --> 00:27:20.320
-question for me if you think it's
+00:22:41.160 --> 00:22:42.160
+lines and cursor moves
-00:27:20.320 --> 00:27:21.840
-important we grab it here before we jump
+00:22:42.160 --> 00:22:46.900
+kind of like turtle graphics if anyone remembers that far
-00:27:21.840 --> 00:27:22.960
-into demos
+00:22:46.900 --> 00:22:50.910
+back, and we're picking up our pen and dropping it and
-00:27:22.960 --> 00:27:25.039
-but otherwise I think it's time to try
+00:22:50.910 --> 00:22:54.160
+drawing lines around on our map.
-00:27:25.039 --> 00:27:27.919
-running some code
+00:22:54.160 --> 00:22:58.090
+Okay, so we do have a few questions if you want to take
-00:27:27.919 --> 00:27:31.279
-what say okay I say do it
+00:22:58.090 --> 00:23:01.160
+them now otherwise we can also jump in.
-00:27:31.279 --> 00:27:33.840
-okay so you less less camera more more
+00:23:01.160 --> 00:23:05.160
+Let's get them while they're fresh. Okay, sounds good.
-00:27:33.840 --> 00:27:36.480
-Emacs now
+00:23:05.160 --> 00:23:08.540
+So we'll probably shift to question and answer mode for up
-00:27:36.480 --> 00:27:39.120
-and hopefully I could find the right e
+00:23:08.540 --> 00:23:12.490
+to 15 minutes here. So if you do have questions, maybe
-00:27:39.120 --> 00:27:39.840
-max
+00:23:12.490 --> 00:23:15.740
+stack rank, go ahead and sort the questions a little for us
-00:27:39.840 --> 00:27:42.960
-the right desktop all right there we are
+00:23:15.740 --> 00:23:18.880
+or comment on them to let us know which ones you want to
-00:27:42.960 --> 00:27:48.799
-so we'll try to fire up uh
+00:23:18.880 --> 00:23:21.540
+see us get here if we start getting a little long winded or
-00:27:48.799 --> 00:27:54.000
-and right now and I usually like to do
+00:23:21.540 --> 00:23:23.160
+not just a long, we'll take direction.
-00:27:54.000 --> 00:27:59.120
-the full path to emax
+00:23:23.160 --> 00:23:26.160
+But thanks for your questions.
-00:27:59.120 --> 00:28:07.279
-when I'm gonna run it under minus q
+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:28:07.279 --> 00:28:13.120
-all right
+00:23:30.050 --> 00:23:33.160
+remaining time after this question block.
-00:28:13.120 --> 00:28:16.720
-let's have some iom
+00:23:33.160 --> 00:23:38.000
+More about what the game is okay sure. So let's let's take
-00:28:16.720 --> 00:28:19.360
-all right and then I'm also going to do
+00:23:38.000 --> 00:23:42.510
+our one minute each swing at what the game is, you want to
-00:28:19.360 --> 00:28:20.000
-a
+00:23:42.510 --> 00:23:45.160
+go first, I called weapons.
-00:28:20.000 --> 00:28:24.000
-load file on the init script that you
+00:23:45.160 --> 00:23:47.160
+Okay.
-00:28:24.000 --> 00:28:25.840
-can find in the repository
+00:23:47.160 --> 00:23:52.180
+Dungeon is like role playing games, but you don't really do
-00:28:25.840 --> 00:28:30.480
-in the Emacs user and it's uh
+00:23:52.180 --> 00:23:56.990
+role playing like the, for me the thing the core of being a
-00:28:30.480 --> 00:28:34.960
-init scripts
+00:23:56.990 --> 00:24:01.400
+role playing game is you take on the role of being your
-00:28:34.960 --> 00:28:40.159
-uh users folder
+00:24:01.400 --> 00:24:06.500
+character and you play your character and dungeons not like
-00:28:40.159 --> 00:28:48.080
-user folder nice
+00:24:06.500 --> 00:24:08.160
+that dungeon.
-00:28:48.080 --> 00:28:49.919
-and it's called init dm because that
+00:24:08.160 --> 00:24:11.160
+You can play.
-00:28:49.919 --> 00:28:51.840
-happened to fit with my naming scheme
+00:24:11.160 --> 00:24:14.660
+So, the dungeon party always has eight characters in it.
-00:28:51.840 --> 00:28:55.360
-potentially terrible all right and with
+00:24:14.660 --> 00:24:17.890
+There's four in the front row and four in the back row and
-00:28:55.360 --> 00:28:56.320
-that loaded
+00:24:17.890 --> 00:24:22.160
+you march through the dungeon, fighting, whatever you encounter.
-00:28:56.320 --> 00:28:58.320
-in theory some very basic stuff will
+00:24:22.160 --> 00:24:25.700
+And if there's one player you play all eight characters.
-00:28:58.320 --> 00:29:00.159
-work even without us doing anything in
+00:24:25.700 --> 00:24:29.180
+And depending on how many players you have you split up the
-00:29:00.159 --> 00:29:02.159
-iom so I think the the last thing eric
+00:24:29.180 --> 00:24:33.160
+party in whatever way seems fair and equitable to everybody.
-00:29:02.159 --> 00:29:04.399
-was talking about was the svg code
+00:24:33.160 --> 00:24:36.010
+And similarly I said the dungeon is kind of a simple game
-00:29:04.399 --> 00:29:06.000
-behind the maps
+00:24:36.010 --> 00:24:38.720
+like there's only three races and there's only three
-00:29:06.000 --> 00:29:10.720
-um there as kind of the technical thread
+00:24:38.720 --> 00:24:42.160
+classes, all of your characters are either human elf dwarf.
-00:29:10.720 --> 00:29:13.760
-so we'll just fire open the maps pick a
+00:24:42.160 --> 00:24:45.680
+They're all a warrior, a priest or a wizard, and all of
-00:29:13.760 --> 00:29:15.440
-dungeon level
+00:24:45.680 --> 00:24:49.400
+these characters have, you know, special properties and
-00:29:15.440 --> 00:29:18.480
-let's pick a pretty one okay if I show
+00:24:49.400 --> 00:24:52.820
+special talents, that is why they come together in this
-00:29:18.480 --> 00:29:19.840
-this
+00:24:52.820 --> 00:24:54.160
+party of eight.
-00:29:19.840 --> 00:29:23.440
-yeah whatever
+00:24:54.160 --> 00:24:57.730
+So essentially dungeon is a game about making up all of
-00:29:23.440 --> 00:29:27.679
-is that the surface yeah
+00:24:57.730 --> 00:25:01.530
+these eight characters and stomping through the dungeon
-00:29:27.679 --> 00:29:30.799
-and let's scale it here I think if I
+00:25:01.530 --> 00:25:04.160
+killing things taking their stuff.
-00:29:30.799 --> 00:29:32.159
-wrap
+00:25:04.160 --> 00:25:08.120
+Well you're way over but I don't know how much I have to
-00:29:32.159 --> 00:29:34.960
-like once once we got the engine up and
+00:25:08.120 --> 00:25:12.160
+add to that. I will just add that if, if you're.
-00:29:34.960 --> 00:29:36.399
-running a little bit
+00:25:12.160 --> 00:25:15.570
+If one's passion as a dungeon master is killing player
-00:29:36.399 --> 00:29:39.120
-we decided to do some experimentation
+00:25:15.570 --> 00:25:19.210
+characters this game is meant for you. You don't have to
-00:29:39.120 --> 00:29:42.480
-about seeing what we could do to push
+00:25:19.210 --> 00:25:23.050
+build your game like that. But that's definitely a thing
-00:29:42.480 --> 00:29:46.080
-the limits of our tile
+00:25:23.050 --> 00:25:25.160
+that people do with this game.
-00:29:46.080 --> 00:29:49.360
-and gender so we more or less on the
+00:25:25.160 --> 00:25:28.430
+And then as Erik said, it just encourages you to put your
-00:29:49.360 --> 00:29:50.080
-surface
+00:25:28.430 --> 00:25:32.160
+creativity on the table to bring all the different elements.
-00:29:50.080 --> 00:29:53.120
-map I
+00:25:32.160 --> 00:25:35.830
+Hopefully, this may be clear in our slides since we were a
-00:29:53.120 --> 00:29:56.399
-basically started with almost no
+00:25:35.830 --> 00:25:39.430
+little fumbling for the first few minutes of the talk
-00:29:56.399 --> 00:29:58.399
-tiles from below like the water and the
+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:29:58.399 --> 00:30:00.240
-beaches and the general store and the
+00:25:44.160 --> 00:25:47.950
+That's not super complete, but does cover some
-00:30:00.240 --> 00:30:01.279
-stairs
+00:25:47.950 --> 00:25:52.160
+of the high level basics of the game that Erik's been talking from.
-00:30:01.279 --> 00:30:03.679
-were existing tiles but then we were
+00:25:52.160 --> 00:25:55.800
+And I would add that some of the things that you know some
-00:30:03.679 --> 00:30:05.200
-like this is going to be a surface map
+00:25:55.800 --> 00:25:58.890
+of what makes dungeon great is that there's a lot of
-00:30:05.200 --> 00:30:07.279
-so we're outdoors so I want hills and I
+00:25:58.890 --> 00:26:02.950
+mystery about it, like the player's handbook doesn't tell
-00:30:07.279 --> 00:30:08.399
-want trees
+00:26:02.950 --> 00:26:07.020
+you all of the rules, or like any really mystery and like
-00:30:08.399 --> 00:30:11.760
-and I want grass and um it took a little
+00:26:07.020 --> 00:26:09.160
+there's mazes and there's puzzles,
-00:30:11.760 --> 00:30:12.399
-while
+00:26:09.160 --> 00:26:12.650
+and you have to figure out how things work, and like we've
-00:30:12.399 --> 00:30:15.039
-playing with svg to come up with some
+00:26:12.650 --> 00:26:16.020
+got all of these treasure items in there that could help
-00:30:15.039 --> 00:30:16.320
-acceptable code
+00:26:16.020 --> 00:26:20.160
+you deal with a particular monster if it occurs to you to use it.
-00:30:16.320 --> 00:30:18.480
-but once the like the grass gets tiled
+00:26:20.160 --> 00:26:24.160
+And, you know, like that. There's a lot of.
-00:30:18.480 --> 00:30:19.840
-out it
+00:26:24.160 --> 00:26:27.450
+You don't know what's going on you're dropped in the middle
-00:30:19.840 --> 00:30:21.600
-kind of you know gives the illusion of
+00:26:27.450 --> 00:26:30.680
+of this situation and you have to try and survive and level
-00:30:21.600 --> 00:30:23.039
-grass and
+00:26:30.680 --> 00:26:33.750
+up and figure it out. And if you succeed in doing that for
-00:30:23.039 --> 00:30:24.880
-you know these are all in my estimation
+00:26:33.750 --> 00:26:36.520
+a long enough eventually you start realizing that there are
-00:30:24.880 --> 00:30:26.399
-kind of crude graphics
+00:26:36.520 --> 00:26:40.890
+big picture puzzles that there are, you know, there is more to this than just
-00:30:26.399 --> 00:30:28.640
-but we're at the proof of concept stage
+00:26:40.890 --> 00:26:43.160
+killing things and taking their stuff.
-00:30:28.640 --> 00:30:30.399
-and it definitely proves that we can use
+00:26:43.160 --> 00:26:46.190
+And that's where the joy of designing these games comes in
-00:30:30.399 --> 00:30:31.679
-our graphics engine
+00:26:46.190 --> 00:26:48.890
+for me is like designing the mazes and designing the
-00:30:31.679 --> 00:30:34.640
-to decide what we want our maps to look
+00:26:48.890 --> 00:26:51.890
+puzzles and like, oh yeah and then they're going to come
-00:30:34.640 --> 00:30:35.279
-like
+00:26:51.890 --> 00:26:51.890
+out of this room and you know what they're going to do.
-00:30:35.279 --> 00:30:39.440
-and real quickly compose new map tiles
+00:26:51.891 --> 00:26:57.160
+They're wanting to go that way.
-00:30:39.440 --> 00:30:44.240
-and uh stamp out a bunch of new maps
+00:26:57.160 --> 00:27:00.160
+So I'm going to put the trap right there.
-00:30:44.240 --> 00:30:46.880
-so now I'll uh show off one of the other
+00:27:00.160 --> 00:27:00.160
+And I walk right into it every time.
-00:30:46.880 --> 00:30:48.640
-things so the next thing we did once we
+00:27:00.161 --> 00:27:00.161
+And then when the party does get in your map
-00:30:48.640 --> 00:30:50.559
-once we had the maps doing
+00:27:00.162 --> 00:27:00.162
+and they do exactly what you thought and they hit the trap
-00:30:50.559 --> 00:30:51.919
-and we haven't gotten into the features
+00:27:00.163 --> 00:27:07.820
+it's just really satisfying
-00:30:51.919 --> 00:30:53.600
-of the maps we can we can appoint time
+00:27:07.820 --> 00:27:07.820
+to watch the look on their little faces
-00:30:53.600 --> 00:30:54.960
-to that or not
+00:27:07.821 --> 00:27:12.160
+as they squirm and struggle to stay alive.
-00:30:54.960 --> 00:30:58.960
-but um there are a number of
+00:27:12.160 --> 00:27:14.580
+Yeah, that's, that's what I was trying to get at. Thanks.
-00:30:58.960 --> 00:31:00.720
-uh featured features there that we can
+00:27:14.580 --> 00:27:18.160
+All right, that was perfect for me. All right.
-00:31:00.720 --> 00:31:02.840
-look at the
+00:27:18.160 --> 00:27:21.360
+So so highlight your question for me if you think it's
-00:31:02.840 --> 00:31:05.760
-uh we then wanted to
+00:27:21.360 --> 00:27:24.800
+important we grab it here before we jump into demos,
-00:31:05.760 --> 00:31:08.640
-try to see if that could make other
+00:27:24.801 --> 00:27:28.160
+but otherwise I think it's time to try running some code.
-00:31:08.640 --> 00:31:10.399
-interfaces more appealing so we built
+00:27:28.160 --> 00:27:30.160
+Let's say.
-00:31:10.399 --> 00:31:11.360
-stuff like
+00:27:30.160 --> 00:27:37.160
+Okay, I say do it. Okay, so you less less camera more more emacs now.
-00:31:11.360 --> 00:31:14.320
-oop that's gonna be the map again um
+00:27:37.160 --> 00:27:40.380
+And hopefully I could find the right emacs the right
-00:31:14.320 --> 00:31:15.919
-I'll just run it here through I
+00:27:40.380 --> 00:27:43.160
+desktop. All right, there we are.
-00:31:15.919 --> 00:31:18.320
-am so it's more obvious what I'm doing
+00:27:43.160 --> 00:27:49.160
+So we'll try to fire up
-00:31:18.320 --> 00:31:20.080
-um
+00:27:49.160 --> 00:27:59.160
+a command right now. And I usually like to do the full path to emacs.
-00:31:20.080 --> 00:31:21.679
-so let's look next to the character
+00:27:59.160 --> 00:28:07.160
+When I'm going to run it under minus q.
-00:31:21.679 --> 00:31:26.080
-sheet oops
+00:28:07.160 --> 00:28:13.160
+All right.
-00:31:26.080 --> 00:31:32.880
-back and alt p doesn't work okay
+00:28:13.160 --> 00:28:17.160
+Let's have some IELM.
-00:31:32.880 --> 00:31:35.840
-that's a bummer uh that is not
+00:28:17.160 --> 00:28:23.270
+All right, and then I'm also going to do a load file on the
-00:31:35.840 --> 00:31:38.240
-autoloaded
+00:28:23.270 --> 00:28:29.790
+net script that you can find in the repository in the emacs
-00:31:38.240 --> 00:31:40.559
-so this this project is a bit of a mess
+00:28:29.790 --> 00:28:36.160
+user and it's init scripts
-00:31:40.559 --> 00:31:41.600
-right now y'all
+00:28:36.160 --> 00:28:41.160
+users folder
-00:31:41.600 --> 00:31:43.120
-it does some stuff that's really
+00:28:41.160 --> 00:28:48.160
+nice.
-00:31:43.120 --> 00:31:45.120
-exciting to us but the code is terrible
+00:28:48.160 --> 00:28:51.530
+And it's called init-dm because that happened to fit with
-00:31:45.120 --> 00:31:47.039
-and we need all the help we can get uh
+00:28:51.531 --> 00:28:54.160
+my naming scheme, potentially terrible.
-00:31:47.039 --> 00:31:48.399
-being told what our problems are and how
+00:28:54.160 --> 00:28:54.160
+All right, and with that loaded in theory some very basic stuff will work
-00:31:48.399 --> 00:31:49.279
-to fix them
+00:28:54.161 --> 00:28:54.161
+even without us doing anything in IELM
-00:31:49.279 --> 00:31:51.360
-so that is if you take nothing away from
+00:28:54.162 --> 00:29:05.870
+so I think the last thing Erik was talking about
-00:31:51.360 --> 00:31:52.559
-this talk
+00:29:05.871 --> 00:29:07.160
+was the SVG code behind the maps.
-00:31:52.559 --> 00:31:54.799
-uh take away from it that we could use
+00:29:07.160 --> 00:29:11.800
+There as kind of the technical thread so we'll just fire
-00:31:54.799 --> 00:32:00.480
-your help
+00:29:11.800 --> 00:29:15.160
+open the maps, pick a dungeon level.
-00:32:00.480 --> 00:32:02.399
-yeah that doubles back to uh when we
+00:29:15.160 --> 00:29:17.160
+Let's pick a pretty one.
-00:32:02.399 --> 00:32:04.640
-were talking about larry wall's cardinal
+00:29:17.160 --> 00:29:19.160
+Okay, if I show this.
-00:32:04.640 --> 00:32:06.320
-virtues of programming like we
+00:29:19.160 --> 00:29:23.160
+Yeah, whatever.
-00:32:06.320 --> 00:32:07.440
-definitely
+00:29:23.160 --> 00:29:27.160
+Is that the surface. Yeah.
-00:32:07.440 --> 00:32:09.760
-took on some hubris thinking we could do
+00:29:27.160 --> 00:29:32.740
+And let's scale it here I think if I recall that fun like
-00:32:09.760 --> 00:32:10.640
-this
+00:29:32.740 --> 00:29:36.820
+once, once we got the engine up and running a little bit.
-00:32:10.640 --> 00:32:13.519
-and we might not be wrong but um we
+00:29:36.820 --> 00:29:40.870
+We decided to do some experimentation about seeing
-00:32:13.519 --> 00:32:14.799
-could do it easier with
+00:29:40.871 --> 00:29:47.160
+what we could do to push the limits of our tile engine.
-00:32:14.799 --> 00:32:16.799
-more hands you know many hands make
+00:29:47.160 --> 00:29:54.450
+So we more or less on the surface map, I basically started
-00:32:16.799 --> 00:32:18.240
-light work all right
+00:29:54.450 --> 00:29:54.450
+with almost no tiles from below like the water
-00:32:18.240 --> 00:32:21.760
-I'll bite yeah
+00:29:54.451 --> 00:30:01.370
+and the beaches and the general store and the stairs were existing tiles
-00:32:21.760 --> 00:32:23.360
-and the character she won't load for us
+00:30:01.371 --> 00:30:04.730
+but then we were like this is going to be surface maps.
-00:32:23.360 --> 00:32:24.799
-today I had some problems with my
+00:30:04.731 --> 00:30:07.160
+We're outdoors so I want hills
-00:32:24.799 --> 00:32:26.960
-version control I had to revert my thing
+00:30:07.160 --> 00:30:11.150
+and I want trees, and I want grass, and it took a little
-00:32:26.960 --> 00:32:29.360
-I threw all my local changes in a stash
+00:30:11.150 --> 00:30:15.430
+while playing with SVG to come up with some acceptable code,
-00:32:29.360 --> 00:32:31.200
-and it's it's a terrible mess let's look
+00:30:15.430 --> 00:30:19.610
+but once the like the grass gets tiled out, it kind of,
-00:32:31.200 --> 00:32:32.080
-at stuff I
+00:30:19.610 --> 00:30:24.510
+you know, gives the illusion of grass, and, you know, these
-00:32:32.080 --> 00:32:37.519
-tested already today uh before
+00:30:24.510 --> 00:30:25.160
+are all in my estimation
-00:32:37.519 --> 00:32:40.559
-you got the battle board available
+00:30:25.160 --> 00:30:29.970
+of crude graphics, but we're at the proof of concept stage,
-00:32:40.559 --> 00:32:43.760
-let's find out first we'll load library
+00:30:29.970 --> 00:30:34.130
+and it definitely proves that we can use our graphics
-00:32:43.760 --> 00:32:45.760
-it
+00:30:34.130 --> 00:30:38.490
+engine to decide what we want our maps to look like, and
-00:32:45.760 --> 00:32:48.000
-uh in fact actually your basic require
+00:30:38.490 --> 00:30:42.970
+real quickly compose new map tiles and stamp out a bunch of
-00:32:48.000 --> 00:32:57.440
-should work
+00:30:42.970 --> 00:30:44.160
+new maps.
-00:32:57.440 --> 00:33:00.480
-no uh I can try load library
+00:30:44.160 --> 00:30:48.050
+So now I'll show off one of the other things. So the next
-00:33:00.480 --> 00:33:02.640
-uh you know what let's forg I'm just
+00:30:48.050 --> 00:30:51.680
+thing we did once we once we had the maps doing, and we
-00:33:02.640 --> 00:33:03.760
-gonna go ahead and give it to you as a
+00:30:51.680 --> 00:30:56.040
+haven't gotten into the features of the maps we can we can
-00:33:03.760 --> 00:33:04.960
-lab beast
+00:30:56.040 --> 00:30:59.200
+appoint time to that or not, but there are a number of
-00:33:04.960 --> 00:33:09.919
-since that's probably more fun to watch
+00:30:59.200 --> 00:31:01.160
+features there that we can look at.
-00:33:09.919 --> 00:33:11.600
-we'll take it from my own inet
+00:31:01.160 --> 00:31:06.310
+The, we then wanted to try to see if that could make other
-00:33:11.600 --> 00:33:16.640
-this is more likely to be healthy
+00:31:06.310 --> 00:31:11.550
+interfaces more appealing so we built stuff like, that's
-00:33:16.640 --> 00:33:19.840
-since only some of the time uh first we
+00:31:11.550 --> 00:31:14.160
+going to be the map again.
-00:33:19.840 --> 00:33:20.880
-have to
+00:31:14.160 --> 00:31:18.580
+I'll just run it here through I am so it's more obvious
-00:33:20.880 --> 00:33:24.799
-uh ctrl x alt I d m
+00:31:18.580 --> 00:31:20.160
+what I'm doing.
-00:33:24.799 --> 00:33:28.559
-all right and having then loaded
+00:31:20.160 --> 00:31:23.160
+So let's look next to the character sheet.
-00:33:28.559 --> 00:33:31.760
-the init control u f9
+00:31:23.160 --> 00:31:27.160
+Oops.
-00:33:31.760 --> 00:33:34.080
-should give me the maps and we can
+00:31:27.160 --> 00:31:33.160
+And alt P doesn't work. Okay.
-00:33:34.080 --> 00:33:35.200
-verify
+00:31:33.160 --> 00:31:35.160
+That's a bummer.
-00:33:35.200 --> 00:33:37.200
-things work in a basic way just by
+00:31:35.160 --> 00:31:38.160
+That is not auto loaded.
-00:33:37.200 --> 00:33:38.640
-changing level
+00:31:38.160 --> 00:31:41.120
+So this, this project is a bit of a mess right now, y'all,
-00:33:38.640 --> 00:33:43.200
-let's look at something else
+00:31:41.120 --> 00:31:43.800
+it does some stuff that's really exciting to us but the
-00:33:43.200 --> 00:33:46.399
-um I mentioned there were a number of
+00:31:43.800 --> 00:31:46.560
+code is terrible and we need all the help we can get being
-00:33:46.399 --> 00:33:47.360
-bindings
+00:31:46.560 --> 00:31:49.160
+told what our problems are and how to fix them.
-00:33:47.360 --> 00:33:51.600
-show them briefly we wrote our own
+00:31:49.160 --> 00:31:53.160
+So that is if you take nothing away from this talk.
-00:33:51.600 --> 00:33:54.080
-functions to handle movement some of
+00:31:53.160 --> 00:32:00.160
+Take away from it that we could use your help.
-00:33:54.080 --> 00:33:56.640
-those in svg.el the left
+00:32:00.160 --> 00:32:03.692
+Yeah, that doubles back to when we were talking about
-00:33:56.640 --> 00:33:59.679
-uh left and right movements didn't
+00:32:03.693 --> 00:32:07.800
+Larry Wall's cardinal virtues of programming like we definitely
-00:33:59.679 --> 00:34:02.640
-didn't seem to work quite quite likely
+00:32:07.800 --> 00:32:11.160
+took on some hubris, thinking we could do this.
-00:34:02.640 --> 00:34:03.120
-coding
+00:32:11.160 --> 00:32:14.300
+We might not be wrong, but we could do it easier with more
-00:34:03.120 --> 00:34:06.720
-of course
+00:32:14.300 --> 00:32:18.160
+hands, you know, many hands make light work. All right.
-00:34:06.720 --> 00:34:09.760
-um all right enough
+00:32:18.160 --> 00:32:21.160
+I'll bite.
-00:34:09.760 --> 00:34:11.760
-so let's let's see if battleboard works
+00:32:21.160 --> 00:32:24.580
+Yeah, and the character she won't load for us today I had
-00:34:11.760 --> 00:34:13.040
-now
+00:32:24.580 --> 00:32:27.880
+some problems with my version control I had to revert my
-00:34:13.040 --> 00:34:15.760
-I really thought that was on f7 up
+00:32:27.880 --> 00:32:31.290
+thing I threw all my local changes in a stash and it's it's
-00:34:15.760 --> 00:34:17.040
-that's the character sheet
+00:32:31.290 --> 00:32:35.160
+a terrible mess let's look at stuff I tested already today.
-00:34:17.040 --> 00:34:19.679
-sweet that's why you stay out of user
+00:32:35.160 --> 00:32:40.160
+Before you got the battle board available.
-00:34:19.679 --> 00:34:24.879
-bindings
+00:32:40.160 --> 00:32:42.160
+Let's find out.
-00:34:24.879 --> 00:34:28.079
-so that looks a little better
+00:32:42.160 --> 00:32:46.160
+First of all, the library.
-00:34:28.079 --> 00:34:33.919
-so let's talk about the character sheet
+00:32:46.160 --> 00:32:57.160
+In fact, actually, your basic require should work.
-00:34:33.919 --> 00:34:35.919
-yeah
+00:32:57.160 --> 00:32:59.160
+No.
-00:34:35.919 --> 00:34:38.000
-so the character sheet was our first big
+00:32:59.160 --> 00:33:03.490
+You can try a load library. You know what, let's, I'm just
-00:34:38.000 --> 00:34:39.839
-uh repurposing
+00:33:03.490 --> 00:33:07.350
+going to go ahead and give it to you as a lab beast, since
-00:34:39.839 --> 00:34:42.560
-of the engine that we couldn't do uh the
+00:33:07.350 --> 00:33:10.160
+that's probably more fun to watch.
-00:34:42.560 --> 00:34:44.159
-battle board program
+00:33:10.160 --> 00:33:16.570
+So we'll take it from my own and this is more likely to be
-00:34:44.159 --> 00:34:53.599
-that uh let's see if that runs now too
+00:33:16.570 --> 00:33:17.160
+healthy.
-00:34:53.599 --> 00:35:00.880
-uh it's not interactive if it does
+00:33:17.160 --> 00:33:19.160
+Since only some of the time.
-00:35:00.880 --> 00:35:04.960
-good
+00:33:19.160 --> 00:33:25.160
+First we have to control x, all the IDM.
-00:35:04.960 --> 00:35:08.480
-no
+00:33:25.160 --> 00:33:30.360
+All right, and having then loaded the net control you have
-00:35:08.480 --> 00:35:11.760
-try let cemex guess no joy all right I'm
+00:33:30.360 --> 00:33:35.550
+nine should give me the maps, and we can verify things work
-00:35:11.760 --> 00:35:13.040
-not sure what's up with the battle board
+00:33:35.550 --> 00:33:39.160
+in a basic way just by changing level.
-00:35:13.040 --> 00:35:14.079
-eric
+00:33:39.160 --> 00:33:44.160
+Let's look at something else.
-00:35:14.079 --> 00:35:15.280
-we haven't messed with that one for a
+00:33:44.160 --> 00:33:49.380
+I mentioned, there were a number of bindings, show them
-00:35:15.280 --> 00:35:17.119
-while in fact um
+00:33:49.380 --> 00:33:50.160
+briefly.
-00:35:17.119 --> 00:35:18.880
-we had discussed using its code as an
+00:33:50.160 --> 00:33:55.820
+We wrote our own functions to handle movement. Some of
-00:35:18.880 --> 00:35:21.040
-example so maybe we'll debug it with you
+00:33:55.820 --> 00:34:00.872
+those in SVG dot el the left, left and right movements
-00:35:21.040 --> 00:35:22.640
-um I'll certainly check for questions
+00:34:00.873 --> 00:34:07.160
+didn't seem to work quite quite likely coding, of course.
-00:35:22.640 --> 00:35:25.359
-first um
+00:34:07.160 --> 00:34:10.160
+Um, all right, enough.
-00:35:25.359 --> 00:35:28.079
-the uh so the character sheet which is
+00:34:10.160 --> 00:34:13.160
+So let's, let's see if battle board works now.
-00:35:28.079 --> 00:35:31.280
-not scaling ideally here
+00:34:13.160 --> 00:34:16.160
+I really thought that was on F7.
-00:35:31.280 --> 00:35:35.680
-see if reloading it does anything
+00:34:16.160 --> 00:34:19.160
+Up that's the character sheet suite.
-00:35:35.680 --> 00:35:39.440
-nope not as far as I can tell assuming
+00:34:19.160 --> 00:34:25.160
+Okay, how to use your bindings.
-00:35:39.440 --> 00:35:40.960
-you don't have this scale implemented
+00:34:25.160 --> 00:34:28.160
+So that looks a little better.
-00:35:40.960 --> 00:35:42.800
-for character sheet
+00:34:28.160 --> 00:34:34.160
+So let's talk about the character sheet.
-00:35:42.800 --> 00:35:44.960
-that's right there's everything in scale
+00:34:34.160 --> 00:34:36.160
+Yeah.
-00:35:44.960 --> 00:35:46.800
-it take in order to get what you were
+00:34:36.160 --> 00:34:40.570
+So the character sheet was our first big repurposing of the
-00:35:46.800 --> 00:35:54.079
-looking at there
+00:34:40.570 --> 00:34:45.160
+engine that we couldn't do the battle board program that.
-00:35:54.079 --> 00:35:58.640
-all right this uh
+00:34:45.160 --> 00:34:54.160
+Let's see if that runs now to.
-00:35:58.640 --> 00:36:02.240
-this whole thing is hard-coded
+00:34:54.160 --> 00:35:01.160
+It's not interactive if it does.
-00:36:02.240 --> 00:36:05.440
-basically to the gills except
+00:35:01.160 --> 00:35:05.160
+Good.
-00:36:05.440 --> 00:36:09.040
-for things like this this program
+00:35:05.160 --> 00:35:09.160
+So,
-00:36:09.040 --> 00:36:10.640
-represents a re-implementation of the
+00:35:09.160 --> 00:35:12.360
+try smex guess? No joy. All right, I'm not sure what's
-00:36:10.640 --> 00:36:11.040
-draw
+00:35:12.360 --> 00:35:14.160
+up with the battle board Erik.
-00:36:11.040 --> 00:36:14.880
-engine using um all of the same things
+00:35:14.160 --> 00:35:17.190
+We haven't messed with that one for a while in fact we had
-00:36:14.880 --> 00:36:19.599
-let's see that's selected so
+00:35:17.190 --> 00:35:20.270
+discussed using its code as an example so maybe we'll debug
-00:36:19.599 --> 00:36:21.680
-uh we'll just try bringing up a map
+00:35:20.270 --> 00:35:21.160
+it with you.
-00:36:21.680 --> 00:36:23.119
-again
+00:35:21.160 --> 00:35:24.160
+I'll certainly check for questions first.
-00:36:23.119 --> 00:36:26.320
-there's one and you'll notice um dm
+00:35:24.160 --> 00:35:29.740
+Um, the. So the character sheet which is not scaling
-00:36:26.320 --> 00:36:28.560
-map doesn't know anything about the new
+00:35:29.740 --> 00:35:31.160
+ideally here.
-00:36:28.560 --> 00:36:29.839
-draw engine
+00:35:31.160 --> 00:35:36.160
+See if reloading it does anything.
-00:36:29.839 --> 00:36:31.599
-and there are a couple of places where
+00:35:36.160 --> 00:35:37.160
+Nope.
-00:36:31.599 --> 00:36:33.520
-the new draw engine is still
+00:35:37.160 --> 00:35:40.660
+As far as I can tell, assuming you don't have this
-00:36:33.520 --> 00:36:36.480
-hooked in to the s for example
+00:35:40.660 --> 00:35:43.160
+implemented character sheet.
-00:36:36.480 --> 00:36:37.440
-particularly
+00:35:43.160 --> 00:35:49.800
+That's right, there's everything in scale, it take in order
-00:36:37.440 --> 00:36:39.680
-the sizing of the graph paper background
+00:35:49.800 --> 00:35:54.160
+to get what you were looking at there.
-00:36:39.680 --> 00:36:41.119
-so I've started the work
+00:35:54.160 --> 00:35:56.160
+All right.
-00:36:41.119 --> 00:36:44.240
-in dmdraw.el
+00:35:56.160 --> 00:36:03.201
+This, this whole thing is hard coded, basically to the
-00:36:44.240 --> 00:36:47.040
-of trying to show how exactly we did
+00:36:03.202 --> 00:36:08.160
+gills, except for things like this.
-00:36:47.040 --> 00:36:47.440
-this
+00:36:08.160 --> 00:36:11.780
+This program represents a re implementation of the drawing
-00:36:47.440 --> 00:36:50.160
-removing the how did we get data out of
+00:36:11.780 --> 00:36:17.420
+engine using all of the same things. Let's see that
-00:36:50.160 --> 00:36:51.760
-org mode that I talked about yesterday
+00:36:17.420 --> 00:36:20.160
+selected so
-00:36:51.760 --> 00:36:53.280
-with our etl flows
+00:36:20.160 --> 00:36:23.160
+we'll just try bringing up a map again.
-00:36:53.280 --> 00:36:56.480
-and just focusing on
+00:36:23.160 --> 00:36:27.180
+There's one and you'll notice DM map doesn't know anything
-00:36:56.480 --> 00:36:58.960
-how did we solve the problem of
+00:36:27.180 --> 00:36:31.240
+about the new draw engine, and there are a couple of places
-00:36:58.960 --> 00:37:00.160
-predicated drawing
+00:36:31.240 --> 00:36:35.160
+where the new draw engine is still hooked in to the.
-00:37:00.160 --> 00:37:01.839
-which I realized we didn't really talk
+00:36:35.160 --> 00:36:38.250
+For example, particularly the sizing of the graph paper
-00:37:01.839 --> 00:37:05.200
-about so should I jump into that
+00:36:38.250 --> 00:36:43.160
+background. So I've started the work in DM draw.
-00:37:05.200 --> 00:37:07.760
-yeah I guess uh how are we on time we
+00:36:44.160 --> 00:36:47.950
+Of trying to show how exactly we did this removing the, how
-00:37:07.760 --> 00:37:09.280
-have time for detours
+00:36:47.950 --> 00:36:51.040
+did we get data out of org mode that I talked about
-00:37:09.280 --> 00:37:11.359
-um yeah it looks like we could spend two
+00:36:51.040 --> 00:36:56.410
+yesterday with our ETL flows, and just focusing on what how
-00:37:11.359 --> 00:37:12.800
-or three minutes on that and then
+00:36:56.410 --> 00:37:00.580
+did we solve the problem of predicated drawing, which I
-00:37:12.800 --> 00:37:15.599
-uh come back for the questions cool do
+00:37:00.580 --> 00:37:04.290
+realized we didn't really talk about so should I jump into
-00:37:15.599 --> 00:37:17.680
-it
+00:37:04.290 --> 00:37:05.160
+that.
-00:37:17.680 --> 00:37:20.480
-and I'm just gonna peek into my org mode
+00:37:05.160 --> 00:37:06.160
+Yeah, I guess.
-00:37:20.480 --> 00:37:20.800
-by
+00:37:06.160 --> 00:37:09.160
+How are we on time, we have time for detours.
-00:37:20.800 --> 00:37:23.200
-into my chat conference and I don't see
+00:37:09.160 --> 00:37:12.450
+Um, yeah, it looks like we could spend two or three minutes
-00:37:23.200 --> 00:37:24.960
-anybody talking to me from the organizer
+00:37:12.450 --> 00:37:15.160
+on that and then come back for the questions.
-00:37:24.960 --> 00:37:25.520
-channel
+00:37:15.160 --> 00:37:18.160
+Cool.
-00:37:25.520 --> 00:37:26.560
-so I'm going to assume that's a good
+00:37:18.160 --> 00:37:21.440
+And I'm just going to peek into my org mode into my chat
-00:37:26.560 --> 00:37:28.800
-guess
+00:37:21.440 --> 00:37:24.970
+conference and I don't see anybody talking to me from the
-00:37:28.800 --> 00:37:32.079
-um all right so let's let's go ahead and
+00:37:24.970 --> 00:37:29.160
+organizer channel, so I'm gonna assume that's a good guess.
-00:37:32.079 --> 00:37:34.160
-play with the map a little then that is
+00:37:29.160 --> 00:37:33.700
+All right, so let's go ahead and play with the map a
-00:37:34.160 --> 00:37:37.760
-uh pretty fun and and uh so much fun
+00:37:33.700 --> 00:37:38.170
+little then that is pretty fun and so much fun that we
-00:37:37.760 --> 00:37:39.440
-that we had to curtail play sessions in
+00:37:38.170 --> 00:37:42.640
+had to curtail play sessions in order to keep working on
-00:37:39.440 --> 00:37:41.760
-order to keep working on the project
+00:37:42.640 --> 00:37:44.160
+the project.
-00:37:41.760 --> 00:37:45.119
-um
+00:37:44.160 --> 00:37:52.160
+So, I'll, I'll do the.
-00:37:45.119 --> 00:37:48.480
-so uh I'll
+00:37:52.160 --> 00:37:58.516
+Um, we'll try to find something different from any gift
-00:37:48.480 --> 00:37:51.839
-I'll do the
+00:37:58.517 --> 00:38:01.160
+I've shared here right.
-00:37:51.839 --> 00:37:55.920
-um we'll try to find something different
+00:38:01.160 --> 00:38:06.160
+So here we are in a random. Go ahead, Erik, you feel.
-00:37:55.920 --> 00:38:01.040
-from any gif I've shared here right
+00:38:06.160 --> 00:38:10.660
+Okay, so what we're, what Corwin is doing here is he's
-00:38:01.040 --> 00:38:03.359
-so here we are in a random go ahead eric
+00:38:10.660 --> 00:38:15.380
+about to put the map into play mode, which is going to turn
-00:38:03.359 --> 00:38:05.760
-you phil
+00:38:15.380 --> 00:38:17.160
+on the fog of war.
-00:38:05.760 --> 00:38:08.240
-oh okay so what what what corwin is
+00:38:17.160 --> 00:38:21.100
+And then we're going to use the fog of war and the, the
-00:38:08.240 --> 00:38:10.000
-doing here is he's about to put the
+00:38:21.100 --> 00:38:25.230
+play mode to kind of reveal the map, one square at a time
-00:38:10.000 --> 00:38:13.359
-the map into play mode um
+00:38:25.230 --> 00:38:28.160
+like we would during a play session.
-00:38:13.359 --> 00:38:16.800
-which is going to turn on the fog of war
+00:38:28.160 --> 00:38:32.350
+So we'll just drop the party randomly somewhere onto this
-00:38:16.800 --> 00:38:19.920
-and then we're gonna use
+00:38:32.350 --> 00:38:36.160
+map looks like we're on alpha maze level three here.
-00:38:19.920 --> 00:38:23.040
-the fog of war and the the play mode to
+00:38:36.160 --> 00:38:46.160
+And then we'll walk around a little.
-00:38:23.040 --> 00:38:24.560
-kind of reveal the map
+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:24.560 --> 00:38:26.240
-one square at a time like we would
+00:38:52.280 --> 00:38:55.540
+a full redraw the sketch the sketching stuff has has has
-00:38:26.240 --> 00:38:28.160
-during a play session
+00:38:55.540 --> 00:38:58.980
+broken things here like I said, the two aren't separated
-00:38:28.160 --> 00:38:29.920
-so we'll just drop the party randomly
+00:38:58.980 --> 00:39:01.910
+once I run them in the same instance, they're not
-00:38:29.920 --> 00:38:31.280
-somewhere onto this map
+00:39:01.910 --> 00:39:03.160
+predictable.
-00:38:31.280 --> 00:38:33.839
-looks like we're on alpha maze level
+00:39:03.160 --> 00:39:08.060
+Okay, so let me elaborate here when he says the sketching
-00:38:33.839 --> 00:38:36.079
-three here
+00:39:08.060 --> 00:39:12.960
+stuff. The current focus of our work is to turn all of this
-00:38:36.079 --> 00:38:40.800
-and um
+00:39:12.960 --> 00:39:17.940
+map stuff we've got into a basically a WYSIWYG map editor,
-00:38:40.800 --> 00:38:46.320
-uh-oh then we'll walk around a little
+00:39:17.940 --> 00:39:22.330
+where we can get into the tiles, and we'll be able to
-00:38:46.320 --> 00:38:50.480
-okay there we go we're halfway there
-
-00:38:50.480 --> 00:38:52.160
-I'll have to I'll have to do a full
-
-00:38:52.160 --> 00:38:53.520
-redraw
-
-00:38:53.520 --> 00:38:55.920
-uh the sketch the sketching stuff has
-
-00:38:55.920 --> 00:38:58.480
-has has broken things here like I said
-
-00:38:58.480 --> 00:39:00.240
-the two aren't separated once I run them
-
-00:39:00.240 --> 00:39:01.599
-in the same instance they're not
-
-00:39:01.599 --> 00:39:03.520
-predictable
-
-00:39:03.520 --> 00:39:05.359
-okay so let me elaborate here when he
-
-00:39:05.359 --> 00:39:07.040
-says the sketching stuff
-
-00:39:07.040 --> 00:39:10.560
-the current um focus of our work is to
-
-00:39:10.560 --> 00:39:13.520
-turn all of this map stuff we've got
-
-00:39:13.520 --> 00:39:14.320
-into
-
-00:39:14.320 --> 00:39:17.920
-a basically a wysiwyg map editor
-
-00:39:17.920 --> 00:39:20.880
-where we can get into the tiles and
-
-00:39:20.880 --> 00:39:22.160
-we'll be able to
-
-00:39:22.160 --> 00:39:24.480
+00:39:22.330 --> 00:39:24.160
select the tile and basically rubber
-00:39:24.480 --> 00:39:26.560
-stamp it into a map
-
-00:39:26.560 --> 00:39:29.680
-graphically and then save the map file
-
-00:39:29.680 --> 00:39:30.000
-out
-
-00:39:30.000 --> 00:39:33.280
-and load it back in later so that um
-
-00:39:33.280 --> 00:39:36.720
-we're able to you know just pound out
-
-00:39:36.720 --> 00:39:38.480
-these maps real fast
-
-00:39:38.480 --> 00:39:42.000
-um using a graphical editor rather than
-
-00:39:42.000 --> 00:39:43.200
-having to hand code
-
-00:39:43.200 --> 00:39:45.440
-every symbol and every square of the
-
-00:39:45.440 --> 00:39:48.000
-tables
-
-00:39:48.000 --> 00:39:52.960
-so the process of doing that um
-
-00:39:52.960 --> 00:39:54.800
-things are a mess we've got covers off
-
-00:39:54.800 --> 00:39:56.720
-there's wires hanging out
-
-00:39:56.720 --> 00:39:58.720
-um different stuff works on different
-
-00:39:58.720 --> 00:40:03.119
-days
-
-00:40:03.119 --> 00:40:05.200
-well I will say in our defense this is
-
-00:40:05.200 --> 00:40:07.119
-exactly why we staged a complicated
-
-00:40:07.119 --> 00:40:07.520
-thing
-
-00:40:07.520 --> 00:40:09.680
-and uh probably we should have just gone
-
-00:40:09.680 --> 00:40:11.119
-with that instead of
-
-00:40:11.119 --> 00:40:14.160
-trying to give you uh the experience
-
-00:40:14.160 --> 00:40:17.760
-of of of what it's like uh to use Emacs
-
-00:40:17.760 --> 00:40:19.200
-to do this which is
-
-00:40:19.200 --> 00:40:21.359
-which is sort of the last minute thought
-
-00:40:21.359 --> 00:40:23.280
-there and my apologies for that
-
-00:40:23.280 --> 00:40:25.119
-if that's made it harder to follow the
-
-00:40:25.119 --> 00:40:27.200
-thread let's check back now for
-
-00:40:27.200 --> 00:40:28.240
-questions
-
-00:40:28.240 --> 00:40:30.000
-and see if anybody wants to redirect at
-
-00:40:30.000 --> 00:40:36.640
-all
-
-00:40:36.640 --> 00:40:39.599
-so yep this so what you're looking at
-
-00:40:39.599 --> 00:40:40.800
-all uses prog
-
-00:40:40.800 --> 00:40:44.880
-pragmatic svg uh
-
-00:40:44.880 --> 00:40:47.760
-svg generation uh for question number
-
-00:40:47.760 --> 00:40:49.119
-four there have you played with
-
-00:40:49.119 --> 00:40:52.000
-generating svgs pragmatically in Emacs
-
-00:40:52.000 --> 00:40:55.119
-that is what the maps are doing um in
-
-00:40:55.119 --> 00:40:55.680
-terms
-
-00:40:55.680 --> 00:40:58.480
-of uh uh we should have been maybe more
-
-00:40:58.480 --> 00:41:00.400
-explicit about that we started hand
-
-00:41:00.400 --> 00:41:01.680
-coding things and
-
-00:41:01.680 --> 00:41:05.119
-once we got the idea of what the code
-
-00:41:05.119 --> 00:41:06.400
-was going to look like
-
-00:41:06.400 --> 00:41:09.359
-we switched to doing it programmatically
-
-00:41:09.359 --> 00:41:10.000
-so
-
-00:41:10.000 --> 00:41:12.880
-um we were going to open up maybe now if
-
-00:41:12.880 --> 00:41:14.640
-we've got time we can get into the tile
-
-00:41:14.640 --> 00:41:15.839
-set real quick
-
-00:41:15.839 --> 00:41:18.640
-sure we definitely didn't do any of the
-
-00:41:18.640 --> 00:41:20.560
-pathing slides and so now we've skipped
-
-00:41:20.560 --> 00:41:23.040
-over some stuff we were going to present
-
-00:41:23.040 --> 00:41:25.040
-yeah that's right we skipped a whole
-
-00:41:25.040 --> 00:41:26.880
-bunch of slides and I can certainly uh
-
-00:41:26.880 --> 00:41:28.160
-go back to them they're open here
-
-00:41:28.160 --> 00:41:31.040
-obviously
-
-00:41:31.040 --> 00:41:33.599
-um right I was just showing off the
-
-00:41:33.599 --> 00:41:34.480
-sketching
-
-00:41:34.480 --> 00:41:36.880
-tool uh briefly in that context but I
-
-00:41:36.880 --> 00:41:38.000
-think you're right let's
-
-00:41:38.000 --> 00:41:40.000
-we can jump over to the actually I
-
-00:41:40.000 --> 00:41:41.280
-should finish with this now having
-
-00:41:41.280 --> 00:41:42.000
-teased it
-
-00:41:42.000 --> 00:41:45.119
-so let's do the same thing here ctrl h m
-
-00:41:45.119 --> 00:41:47.119
-and you'll see in this case there are
-
-00:41:47.119 --> 00:41:48.560
-very few keyboard
-
-00:41:48.560 --> 00:41:52.160
-key bindings that are set up um even
-
-00:41:52.160 --> 00:41:55.359
-this uh shift delete has a tera uh
-
-00:41:55.359 --> 00:41:59.280
-or shift with uh
-
-00:41:59.280 --> 00:42:02.560
-yeah control delete it would seem to be
-
-00:42:02.560 --> 00:42:05.680
-so that has couple obvious bugs with it
-
-00:42:05.680 --> 00:42:07.119
-right didn't pick it didn't pick up
-
-00:42:07.119 --> 00:42:09.280
-those control points until I reused them
-
-00:42:09.280 --> 00:42:11.280
-not clearing that stack
-
-00:42:11.280 --> 00:42:13.760
-um and also should probably think about
-
-00:42:13.760 --> 00:42:14.480
-whether
-
-00:42:14.480 --> 00:42:16.720
-the origin should return and hey marking
-
-00:42:16.720 --> 00:42:18.400
-that origin would be nice
-
-00:42:18.400 --> 00:42:19.839
-so there's a tremendous amount to do
-
-00:42:19.839 --> 00:42:21.680
-here this is just uh
-
-00:42:21.680 --> 00:42:24.400
-showing that it is possible to use
-
-00:42:24.400 --> 00:42:26.079
-essentially like a touch input
-
-00:42:26.079 --> 00:42:31.680
-to um uh
-
-00:42:31.680 --> 00:42:35.119
-yeah and then also we can switch over to
-
-00:42:35.119 --> 00:42:35.760
-our place
-
-00:42:35.760 --> 00:42:39.040
-tool and
-
-00:42:39.040 --> 00:42:43.040
-um hopefully we can get a nice big menu
-
-00:42:43.040 --> 00:42:45.040
-of all the tiles that eric prepared for
-
-00:42:45.040 --> 00:42:49.440
-the game maps
-
-00:42:49.440 --> 00:42:51.680
-uh that was probably a terrible choice
-
-00:42:51.680 --> 00:42:53.119
-but there you have just a bit of
-
-00:42:53.119 --> 00:42:56.800
-corridor right
-
-00:42:56.800 --> 00:43:00.480
-that looks
-
-00:43:00.480 --> 00:43:04.560
-uh and even the click yep and this this
-
-00:43:04.560 --> 00:43:06.160
-glitch action here is the last thing I
-
-00:43:06.160 --> 00:43:07.280
-was working on before I dropped
-
-00:43:07.280 --> 00:43:08.079
-everything to
-
-00:43:08.079 --> 00:43:10.079
-to build the decks that uh we will soon
-
-00:43:10.079 --> 00:43:14.240
-share for this conference
-
-00:43:14.240 --> 00:43:19.680
-so okay back to the tile sets
-
-00:43:19.680 --> 00:43:22.160
-right so the way we approached drawing
-
-00:43:22.160 --> 00:43:23.440
-it programmatically
-
-00:43:23.440 --> 00:43:25.200
-is we broke our code up into little
-
-00:43:25.200 --> 00:43:27.280
-snippets we called tiles
-
-00:43:27.280 --> 00:43:29.280
-um corman's going to open up the tile
-
-00:43:29.280 --> 00:43:32.160
-set here basically each tile has a name
-
-00:43:32.160 --> 00:43:35.280
-and then with that name we place data
-
-00:43:35.280 --> 00:43:37.920
-into different layers of the image
-
-00:43:37.920 --> 00:43:40.640
-some of the layers are just svg paths
-
-00:43:40.640 --> 00:43:41.280
-and
-
-00:43:41.280 --> 00:43:44.880
-the data is just svg commands
-
-00:43:44.880 --> 00:43:47.920
-like we saw in that handwritten code and
-
-00:43:47.920 --> 00:43:50.960
-some of it is compositions of other
-
-00:43:50.960 --> 00:43:54.160
-tiles so a tile can be made up of other
-
-00:43:54.160 --> 00:43:56.160
-tiles
-
-00:43:56.160 --> 00:43:58.000
-furthermore some of these tiles have
-
-00:43:58.000 --> 00:43:59.599
-conditional code in it
-
-00:43:59.599 --> 00:44:02.319
-where like some of this stuff is talking
-
-00:44:02.319 --> 00:44:02.720
-about
-
-00:44:02.720 --> 00:44:06.560
-elf and bang elf so the map is going to
-
-00:44:06.560 --> 00:44:08.079
-be drawn differently depending
-
-00:44:08.079 --> 00:44:09.440
-on whether or not there's elves in the
-
-00:44:09.440 --> 00:44:11.200
-party
-
-00:44:11.200 --> 00:44:16.880
-um so and that's the demo they broke
-
-00:44:16.880 --> 00:44:18.240
-the engine has to make all those
-
-00:44:18.240 --> 00:44:20.000
-decisions um
-
-00:44:20.000 --> 00:44:21.599
-and that's what we're calling predicated
-
-00:44:21.599 --> 00:44:23.280
-drawing oh there's a
-
-00:44:23.280 --> 00:44:25.200
-special room here do you have any elves
-
-00:44:25.200 --> 00:44:26.480
-you do so I draw
-
-00:44:26.480 --> 00:44:32.880
-there is elf's way um
-
-00:44:32.880 --> 00:44:35.839
-yeah so we built up the set of tiles and
-
-00:44:35.839 --> 00:44:36.319
-then
-
-00:44:36.319 --> 00:44:39.920
-um we basically made map files which
-
-00:44:39.920 --> 00:44:43.760
-take um our map and break it up into xy
-
-00:44:43.760 --> 00:44:47.839
-grids and then we drop these tiles into
-
-00:44:47.839 --> 00:44:50.240
-positions on the map so we can use the
-
-00:44:50.240 --> 00:44:52.000
-same tile square after square after
-
-00:44:52.000 --> 00:44:52.480
-square
-
-00:44:52.480 --> 00:44:54.720
-when there's a corridor north south it's
-
-00:44:54.720 --> 00:44:55.680
-the same tile
-
-00:44:55.680 --> 00:44:59.119
-over and over again and that makes it
-
-00:44:59.119 --> 00:45:02.400
-easy to reuse the code and then also
-
-00:45:02.400 --> 00:45:05.920
-when uh
-
-00:45:05.920 --> 00:45:10.560
-when we go to present um the
-
-00:45:10.560 --> 00:45:13.520
-what am I trying to say the the drawing
-
-00:45:13.520 --> 00:45:15.839
-in in fog of war mode as we move down
-
-00:45:15.839 --> 00:45:18.000
-the corridor we can just add the
-
-00:45:18.000 --> 00:45:20.640
-necessary code one bit at a time to the
-
-00:45:20.640 --> 00:45:23.440
-visible image so that what we're
-
-00:45:23.440 --> 00:45:24.960
-displaying doesn't contain
-
-00:45:24.960 --> 00:45:27.359
-any data except what the party has
-
-00:45:27.359 --> 00:45:30.240
-already discovered
-
-00:45:30.240 --> 00:45:32.319
-and thus we have kind of spoiler rich
-
-00:45:32.319 --> 00:45:34.400
-documents sitting on the gm
-
-00:45:34.400 --> 00:45:37.359
-server and then less you know and
-
-00:45:37.359 --> 00:45:38.400
-spoiler-free
-
-00:45:38.400 --> 00:45:41.440
-data that flows down to the org mode uh
-
-00:45:41.440 --> 00:45:44.000
-files on the player system and the only
-
-00:45:44.000 --> 00:45:47.040
-real challenge is making sure that the
-
-00:45:47.040 --> 00:45:50.160
-the nothing that the game does can mess
-
-00:45:50.160 --> 00:45:50.960
-with the
-
-00:45:50.960 --> 00:45:54.480
-the the users the the players data file
-
-00:45:54.480 --> 00:45:55.280
-in case they
-
-00:45:55.280 --> 00:45:57.680
-might have their own notes and things in
-
-00:45:57.680 --> 00:46:00.160
-it that that would be the one
-
-00:46:00.160 --> 00:46:06.160
-uh you know number one thing to avoid
-
-00:46:06.160 --> 00:46:08.000
-another thing we can talk about here is
-
-00:46:08.000 --> 00:46:09.680
-that there are layers
-
-00:46:09.680 --> 00:46:11.839
-you can see this table at the bottom has
-
-00:46:11.839 --> 00:46:13.520
-tile and overlay
-
-00:46:13.520 --> 00:46:15.119
-the overlay column is just going to
-
-00:46:15.119 --> 00:46:17.040
-contain some actual svg
-
-00:46:17.040 --> 00:46:20.800
-xml style tags um so that's where we can
-
-00:46:20.800 --> 00:46:21.599
-add whatever
-
-00:46:21.599 --> 00:46:25.359
-text elements or other svg like raw svg
-
-00:46:25.359 --> 00:46:26.720
-tags we want
-
-00:46:26.720 --> 00:46:28.880
-whereas a lot of the other layers are
-
-00:46:28.880 --> 00:46:30.560
-going to be like path layers we've got
-
-00:46:30.560 --> 00:46:32.960
-water layers and beach layers
-
-00:46:32.960 --> 00:46:35.359
-and our plan was to have a style sheet
-
-00:46:35.359 --> 00:46:37.680
-that defines how each of those layers
-
-00:46:37.680 --> 00:46:38.720
-are represented
-
-00:46:38.720 --> 00:46:40.720
-so like when the water gets drawn blue
-
-00:46:40.720 --> 00:46:42.160
-and it's got arrows on it
-
-00:46:42.160 --> 00:46:45.520
-giving it direction um all of that
-
-00:46:45.520 --> 00:46:47.680
-can be customized with a style sheet to
-
-00:46:47.680 --> 00:46:49.200
-change the water to be
-
-00:46:49.200 --> 00:46:51.200
-whatever you want and like we have
-
-00:46:51.200 --> 00:46:52.960
-beaches as yellow but maybe you like
-
-00:46:52.960 --> 00:46:54.319
-beaches as red or
-
-00:46:54.319 --> 00:46:57.359
-you know whatever so we also built
-
-00:46:57.359 --> 00:47:01.200
-some test programs um
-
-00:47:01.200 --> 00:47:04.079
-and various of the I'm not not sure what
-
-00:47:04.079 --> 00:47:05.359
-kind of shape we're gonna find these in
-
-00:47:05.359 --> 00:47:07.040
-but we can try running them
-
-00:47:07.040 --> 00:47:10.640
-um here for example is just a
-
-00:47:10.640 --> 00:47:12.960
-very basic all of using a saint using
-
-00:47:12.960 --> 00:47:15.119
-the same file to define
-
-00:47:15.119 --> 00:47:18.560
-the tiles and and then
-
-00:47:18.560 --> 00:47:24.880
-the layout so to speak oh look at that
-
-00:47:24.880 --> 00:47:26.640
-uh there's the layout okay so that
-
-00:47:26.640 --> 00:47:28.960
-actually looks fine tile
-
-00:47:28.960 --> 00:47:30.960
-and it's pat so this is defining a tile
-
-00:47:30.960 --> 00:47:32.400
-named seas
-
-00:47:32.400 --> 00:47:35.440
-and uh it's gonna have a list of tiles
-
-00:47:35.440 --> 00:47:38.720
-defined above um and you'll notice also
-
-00:47:38.720 --> 00:47:41.839
-that we can just sort of freely define
-
-00:47:41.839 --> 00:47:44.559
-and redefine and it sort of figures out
-
-00:47:44.559 --> 00:47:46.160
-oh this must still be part of the b
-
-00:47:46.160 --> 00:47:50.839
-row um we could also have done
-
-00:47:50.839 --> 00:48:00.000
-this
-
-00:48:00.000 --> 00:48:02.160
-okay so this would this would work as
-
-00:48:02.160 --> 00:48:08.480
-would this
-
-00:48:08.480 --> 00:48:11.599
-one of uh early on in development when
-
-00:48:11.599 --> 00:48:12.720
-we were talking about
-
-00:48:12.720 --> 00:48:14.400
-getting data in and out of these org
-
-00:48:14.400 --> 00:48:15.839
-tables it
-
-00:48:15.839 --> 00:48:19.440
-was kind of a priority to us to
-
-00:48:19.440 --> 00:48:22.319
-leave the way the data is organized open
-
-00:48:22.319 --> 00:48:23.040
-to
-
-00:48:23.040 --> 00:48:26.960
-the users and to the dungeon masters so
-
-00:48:26.960 --> 00:48:30.720
-while we set our tile set apart from our
-
-00:48:30.720 --> 00:48:32.559
-map sets
-
-00:48:32.559 --> 00:48:35.440
-this clearly shows that you can cram a
-
-00:48:35.440 --> 00:48:38.319
-tile set and a map into a single file
-
-00:48:38.319 --> 00:48:41.040
-so in situations like the surface where
-
-00:48:41.040 --> 00:48:43.040
-we're using different tiles from other
-
-00:48:43.040 --> 00:48:43.760
-maps
-
-00:48:43.760 --> 00:48:46.559
-maybe it makes sense to move you know
-
-00:48:46.559 --> 00:48:48.079
-those tiles just into the file
-
-00:48:48.079 --> 00:48:50.559
-with your map or like it's hard for us
-
-00:48:50.559 --> 00:48:52.400
-to predict how other people are going to
-
-00:48:52.400 --> 00:48:54.319
-want to use this when they design their
-
-00:48:54.319 --> 00:48:55.119
-games
-
-00:48:55.119 --> 00:48:57.359
-so we wanted to leave it as versatile as
-
-00:48:57.359 --> 00:48:58.160
-possible
-
-00:48:58.160 --> 00:49:01.599
-about how you can use it where it
-
-00:49:01.599 --> 00:49:02.640
-matters right
-
-00:49:02.640 --> 00:49:04.319
-not support every feature in the world I
-
-00:49:04.319 --> 00:49:05.920
-can't count the number of times I said
-
-00:49:05.920 --> 00:49:07.280
-eric eric eric
-
-00:49:07.280 --> 00:49:09.200
-hey if we do it like this people will be
-
-00:49:09.200 --> 00:49:10.800
-able and he just like
-
-00:49:10.800 --> 00:49:14.000
-does it have to do that do we do we does
-
-00:49:14.000 --> 00:49:14.480
-it like
-
-00:49:14.480 --> 00:49:17.920
-do we need it right away uh
-
-00:49:17.920 --> 00:49:19.599
-do you have to really rewrite everything
-
-00:49:19.599 --> 00:49:21.040
-so it can all do that
-
-00:49:21.040 --> 00:49:24.160
-and uh a lot of those
-
-00:49:24.160 --> 00:49:26.880
-a lot of those conversations too but the
-
-00:49:26.880 --> 00:49:28.240
-the key flexibilities
-
-00:49:28.240 --> 00:49:31.200
-are really there people might want to
-
-00:49:31.200 --> 00:49:32.559
-use a lot of different files they might
-
-00:49:32.559 --> 00:49:34.160
-want to lay the tables out however they
-
-00:49:34.160 --> 00:49:35.760
-want they have to be able to say hey
-
-00:49:35.760 --> 00:49:37.440
-this is a table that has
-
-00:49:37.440 --> 00:49:39.440
-data that's controlled by the game and
-
-00:49:39.440 --> 00:49:40.720
-everything else in the file
-
-00:49:40.720 --> 00:49:44.079
-is not the game's problem
-
-00:49:44.079 --> 00:49:45.920
-on our table some of our tables started
-
-00:49:45.920 --> 00:49:47.440
-getting really wide so we started
-
-00:49:47.440 --> 00:49:48.960
-striping the tables
-
-00:49:48.960 --> 00:49:51.119
-where we'll repeat the same table over
-
-00:49:51.119 --> 00:49:52.640
-and over and over again to
-
-00:49:52.640 --> 00:49:56.400
-get all of the columns in there without
-
-00:49:56.400 --> 00:49:59.119
-making it you know a million miles wide
-
-00:49:59.119 --> 00:49:59.599
-yeah
-
-00:49:59.599 --> 00:50:01.040
-do you want to should I go ahead and
-
-00:50:01.040 --> 00:50:02.640
-pull open like a level here
-
-00:50:02.640 --> 00:50:06.079
-do you think sure just to have shown it
-
-00:50:06.079 --> 00:50:08.319
-the aisle set's a great example of
-
-00:50:08.319 --> 00:50:09.680
-striped tables if you
-
-00:50:09.680 --> 00:50:11.119
-look down like in the level change
-
-00:50:11.119 --> 00:50:18.800
-feature oh sure
-
-00:50:18.800 --> 00:50:20.240
-sorry I'm not quite sitting well to my
-
-00:50:20.240 --> 00:50:22.400
-keyboard here I can just readjust things
-
-00:50:22.400 --> 00:50:30.079
-real quick
-
-00:50:30.079 --> 00:50:33.280
-so what you know you can see here
-
-00:50:33.280 --> 00:50:35.200
-like some of these tables got real wide
-
-00:50:35.200 --> 00:50:36.800
-when we're stuffing svg
-
-00:50:36.800 --> 00:50:40.559
-tags into them and what we
-
-00:50:40.559 --> 00:50:44.160
-oh maybe it's not in these
-
-00:50:44.160 --> 00:50:50.079
-I thought it was
-
-00:50:50.079 --> 00:50:52.960
-special probably yeah no there it is
-
-00:50:52.960 --> 00:50:54.240
-yeah
-
-00:50:54.240 --> 00:50:56.000
-it was in level change it does the table
+00:39:24.160 --> 00:39:30.510
+stamp it into a map graphically, and then save the map file
-00:50:56.000 --> 00:50:58.720
-can you repeat okay great
+00:39:30.510 --> 00:39:36.470
+out and load it back in later, so that we're able to just
-00:50:58.720 --> 00:51:00.640
-up and down so fast I didn't realize so
+00:39:36.470 --> 00:39:40.160
+pound out these maps real fast.
-00:51:00.640 --> 00:51:01.920
-this first table
+00:39:40.160 --> 00:39:44.480
+Using a graphical editor rather than having to hand code
-00:51:01.920 --> 00:51:05.680
-we've got path and what is that stairs
+00:39:44.480 --> 00:39:48.160
+every symbol and every square of the tables.
-00:51:05.680 --> 00:51:08.800
-so the stairs level is one that draws in
+00:39:48.160 --> 00:39:51.160
+So the process of doing that.
-00:51:08.800 --> 00:51:10.079
-like a pink color
+00:39:51.160 --> 00:39:56.190
+I hate them on things are a mess we've got covers off those
-00:51:10.079 --> 00:51:11.920
-to highlight the places where you can
+00:39:56.190 --> 00:40:03.160
+wires hanging out different stuff works on different days.
-00:51:11.920 --> 00:51:13.440
-change level
+00:40:03.160 --> 00:40:06.860
+Well, I will say in our defense this is exactly why we
-00:51:13.440 --> 00:51:15.200
-and then if we scroll down to the second
+00:40:06.860 --> 00:40:10.880
+staged a complicated thing, and probably we should have
-00:51:15.200 --> 00:51:17.200
-half of this section
+00:40:10.880 --> 00:40:14.510
+just gone with that instead of trying to give you the
-00:51:17.200 --> 00:51:19.359
-the second table is going to have all of
+00:40:14.510 --> 00:40:18.460
+experience of, of what it's like to use Emacs to do this
-00:51:19.359 --> 00:51:20.960
-these same tiles in it but
+00:40:18.460 --> 00:40:21.160
+which is sort of the last
-00:51:20.960 --> 00:51:22.800
-instead of path and stairs we're going
+00:40:21.160 --> 00:40:26.450
+thought there and my apologies for that if that's made it
-00:51:22.800 --> 00:51:24.720
-to have other
+00:40:26.450 --> 00:40:31.650
+harder to follow the thread. Let's check back now for
-00:51:24.720 --> 00:51:27.920
-columns can we
+00:40:31.650 --> 00:40:37.160
+questions and see if anybody wants to redirect at all.
-00:51:27.920 --> 00:51:31.680
-see the next table
+00:40:37.160 --> 00:40:41.438
+Oh yep, this. So what you're looking at all uses
-00:51:31.680 --> 00:51:33.839
-there we go so the same tiles only here
+00:40:41.439 --> 00:40:46.860
+progrmamatic SVG generation for question number four there,
-00:51:33.839 --> 00:51:35.359
-we've got overlay
+00:40:46.860 --> 00:40:52.160
+have you played with generating SVGs programmatically in Emacs.
-00:51:35.359 --> 00:51:38.720
-documentation and behavior and I guess
+00:40:52.160 --> 00:40:58.160
+That is what the maps are doing in terms of
-00:51:38.720 --> 00:51:40.319
-we haven't talked about this at all the
+00:40:58.160 --> 00:41:01.860
+being more explicit about that we started hand coding
-00:51:40.319 --> 00:51:41.839
-behavior column
+00:41:01.860 --> 00:41:05.650
+things and once we got the, the idea of what the code was
-00:51:41.839 --> 00:51:44.880
-was our concept of a way that we could
+00:41:05.650 --> 00:41:10.160
+going to look like we switched to doing it programmatically.
-00:51:44.880 --> 00:51:47.520
-attach
+00:41:10.160 --> 00:41:13.330
+So, we were going to open up maybe now we've got time we
-00:51:47.520 --> 00:51:49.680
-functions basically to these different
+00:41:13.330 --> 00:41:16.910
+can get into the tileset real quick. Sure, we definitely
-00:51:49.680 --> 00:51:51.359
-areas of the map
+00:41:16.910 --> 00:41:19.820
+didn't do any of the pathing slides and so now we've
-00:51:51.359 --> 00:51:54.720
-because sometimes when you enter an area
+00:41:19.820 --> 00:41:23.160
+skipped over some stuff we were going to present.
-00:51:54.720 --> 00:51:57.760
-we want it to do something like
+00:41:23.160 --> 00:41:27.030
+Yeah, that's right we skipped a whole bunch of slides and I
-00:51:57.760 --> 00:51:59.920
-when you enter a stairs down maybe we
+00:41:27.030 --> 00:41:31.160
+can certainly go back to them they're open here obviously.
-00:51:59.920 --> 00:52:02.319
-want it to change to the next level
+00:41:31.160 --> 00:41:34.110
+I'm right I was just showing off the sketching tool,
-00:52:02.319 --> 00:52:04.559
-and draw the stairs up behind you and
+00:41:34.110 --> 00:41:37.530
+briefly in that context but I think you're right, let's, we
-00:52:04.559 --> 00:52:06.160
-draw you where you are
+00:41:37.530 --> 00:41:40.800
+can jump over to the actually I should finish with this now
-00:52:06.160 --> 00:52:09.200
-on the next level so
+00:41:40.800 --> 00:41:42.160
+having teased it.
-00:52:09.200 --> 00:52:11.040
-these are like hooks where we could
+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:52:11.040 --> 00:52:12.240
-attach functions
+00:41:46.970 --> 00:41:52.160
+this case there are very few key bindings that are set up.
-00:52:12.240 --> 00:52:16.400
-or you know macros or whatever to
+00:41:52.160 --> 00:41:57.320
+This shift delete has a terror or shift with a control
-00:52:16.400 --> 00:52:18.480
-make the map have these behaviors as we
+00:41:57.320 --> 00:42:01.920
+delete, it would seem to be. So that has a couple obvious
-00:52:18.480 --> 00:52:23.440
-get further towards automation
+00:42:01.920 --> 00:42:06.590
+bugs with it right didn't pick it didn't pick up those
-00:52:23.440 --> 00:52:26.559
-cool um so that's that
+00:42:06.590 --> 00:42:12.160
+control points until I reuse them not clearing that stack.
-00:52:26.559 --> 00:52:30.839
-should be pretty close to our time
+00:42:12.160 --> 00:42:16.720
+I think we can also should probably think about whether the
-00:52:30.839 --> 00:52:33.920
-um questions or just say goodbye
+00:42:16.720 --> 00:42:21.060
+origin should return and hey marking that origin would be
-00:52:33.920 --> 00:52:36.880
-um yeah so there's the I'm sorry we
+00:42:21.060 --> 00:42:25.370
+nice. So there's a tremendous amount to do here this is
-00:52:36.880 --> 00:52:38.559
-couldn't show it earlier there is the
+00:42:25.370 --> 00:42:30.090
+just showing that it is possible to use, essentially like a
-00:52:38.559 --> 00:52:40.000
-battle board
+00:42:30.090 --> 00:42:31.160
+touch input to,
-00:52:40.000 --> 00:52:44.240
-um and so this is used just to keep
+00:42:31.160 --> 00:42:40.730
+yeah, and then also we can switch over to our place tool,
-00:52:44.240 --> 00:52:48.079
-track of hit points so with this example
+00:42:40.730 --> 00:42:46.830
+and hopefully we can get a nice big menu of all the tiles that
-00:52:48.079 --> 00:52:49.319
-battle board
+00:42:46.830 --> 00:42:50.160
+Erik prepared for the game maps.
-00:52:49.319 --> 00:52:51.680
-dmbattleboard.el there's there's a
+00:42:50.160 --> 00:42:55.160
+That was probably a terrible choice but there you have just
-00:52:51.680 --> 00:52:53.760
-complete example of not only
+00:42:55.160 --> 00:42:57.160
+a bit of corridor right.
-00:52:53.760 --> 00:52:57.200
-in a single file repub filling out the
+00:42:57.160 --> 00:43:01.160
+That looks.
-00:52:57.200 --> 00:53:00.480
-the cells and the tiles but then coming
+00:43:01.160 --> 00:43:03.160
+And even the click.
-00:53:00.480 --> 00:53:00.960
-in
+00:43:03.160 --> 00:43:06.870
+Yep, and this click action here is the last thing I
-00:53:00.960 --> 00:53:04.640
-and keeping the org mode file in sync
+00:43:06.870 --> 00:43:10.510
+was working on before I dropped everything to build the
-00:53:04.640 --> 00:53:05.280
-with
+00:43:10.510 --> 00:43:14.160
+decks that we will soon share for this conference.
-00:53:05.280 --> 00:53:09.040
-with clicks so and I can press the star
+00:43:14.160 --> 00:43:20.160
+So okay, back to the tile sets.
-00:53:09.040 --> 00:53:12.319
-key and set my damage to -1 and
+00:43:20.160 --> 00:43:24.130
+So the way we approached drawing it programmatically is we
-00:53:12.319 --> 00:53:15.359
-take the damage back off I just haven't
+00:43:24.130 --> 00:43:28.160
+broke our code up into little snippets we called tiles.
-00:53:15.359 --> 00:53:16.400
-spent a lot of time
+00:43:28.160 --> 00:43:31.240
+And so this is where I was going to open up the tiles out
-00:53:16.400 --> 00:53:18.079
-building up fancy bindings for this
+00:43:31.240 --> 00:43:34.610
+here, basically each tile has a name, and then with that
-00:53:18.079 --> 00:53:20.800
-you'll also find that the crew
+00:43:34.610 --> 00:43:38.160
+name we place data into different layers of the image.
-00:53:20.800 --> 00:53:23.119
-probably find how I figure out what was
+00:43:38.160 --> 00:43:43.290
+Some of the layers are just SVG paths, and the data is just
-00:53:23.119 --> 00:53:23.839
-clicked on
+00:43:43.290 --> 00:43:48.430
+SVG commands, like we saw in that handwritten code, and
-00:53:23.839 --> 00:53:26.880
-in the code hard but if I just assign
+00:43:48.430 --> 00:43:53.560
+some of it is compositions of other tiles, so a tile can be
-00:53:26.880 --> 00:53:28.000
-something recognizable
+00:43:53.560 --> 00:43:56.160
+made up of other tiles.
-00:53:28.000 --> 00:53:33.520
-for damage and then come into
+00:43:56.160 --> 00:44:00.270
+Furthermore, some of these tiles have conditional code in
-00:53:33.520 --> 00:53:35.440
-it will now have opened the org mode
+00:44:00.270 --> 00:44:04.460
+it, where like some of this stuff is talking about elf and
-00:53:35.440 --> 00:53:37.040
-file behind the scenes because it's
+00:44:04.460 --> 00:44:05.160
+bang elf.
-00:53:37.040 --> 00:53:41.280
-changing it
+00:44:05.160 --> 00:44:09.540
+So the map is going to be drawn differently depending on
-00:53:41.280 --> 00:53:44.640
-and we can then look at that file a
+00:44:09.540 --> 00:44:13.160
+whether or not there's elves in the party.
-00:53:44.640 --> 00:53:47.599
-little bit and hopefully
+00:44:13.160 --> 00:44:17.160
+So, and that's the demo they broke.
-00:53:47.599 --> 00:53:51.040
-that is un
+00:44:17.160 --> 00:44:20.160
+So the engine has to make all those decisions.
-00:53:51.040 --> 00:53:53.440
-uh large enough you can kind of see
+00:44:20.160 --> 00:44:22.887
+And that's what we're calling predicated drawing. Oh, there's
-00:53:53.440 --> 00:53:55.520
-there's our 17 damage landed
+00:44:22.888 --> 00:44:26.810
+a special room here. Do you have any elves? You do. So I
-00:53:55.520 --> 00:53:59.119
-in armor the logic that sits behind that
+00:44:26.810 --> 00:44:33.160
+draw it the "there is elves" way.
-00:53:59.119 --> 00:54:01.200
-to figure out the part of the screen
+00:44:33.160 --> 00:44:37.440
+Yeah, so we built up the set of tiles, and then we
-00:54:01.200 --> 00:54:08.880
-is not necessarily our finest work
+00:44:37.440 --> 00:44:42.450
+basically made map files, which take our map and break it
-00:54:08.880 --> 00:54:11.839
-uh uh but it but it does work and it's
+00:44:42.450 --> 00:44:46.840
+up into XY grids, and then we drop these tiles into
-00:54:11.839 --> 00:54:12.319
-one for
+00:44:46.840 --> 00:44:49.160
+positions on the map.
-00:54:12.319 --> 00:54:14.000
-the stuff was used on the map a little
+00:44:49.160 --> 00:44:52.060
+So we can use the same tile square after square after
-00:54:14.000 --> 00:54:15.920
-bit too we didn't really need to show
+00:44:52.060 --> 00:44:55.470
+square. When there's a corridor north-south, it's the same
-00:54:15.920 --> 00:54:17.520
-that in the demo but as you're scrolling
+00:44:55.470 --> 00:44:59.980
+tile over and over again. And that makes it easy to reuse
-00:54:17.520 --> 00:54:19.680
-around there's like a highlighter
+00:44:59.980 --> 00:45:01.160
+the code.
-00:54:19.680 --> 00:54:22.960
-um that that you know we were drawing on
+00:45:01.160 --> 00:45:12.370
+And also, when we go to present the -- what am I trying to
-00:54:22.960 --> 00:54:24.720
-shaft to show you which square you've
+00:45:12.370 --> 00:45:16.180
+say -- the drawing in fog of war mode, as we move down the
-00:54:24.720 --> 00:54:26.160
-got selected
+00:45:16.180 --> 00:45:20.280
+corridor, we can just add the necessary code one bit at a
-00:54:26.160 --> 00:54:28.800
-um because we were having trouble with
+00:45:20.280 --> 00:45:24.160
+time to the visible image, so that what we're displaying
-00:54:28.800 --> 00:54:29.839
-that code
+00:45:24.160 --> 00:45:28.160
+doesn't contain any data except what the party has already
-00:54:29.839 --> 00:54:31.280
-initially and we were sometimes
+00:45:28.160 --> 00:45:30.160
+discovered.
-00:54:31.280 --> 00:54:36.839
-revealing the wrong
+00:45:30.160 --> 00:45:34.720
+And thus we have kind of spoiler-rich documents sitting on
-00:54:36.839 --> 00:54:38.720
-okay
+00:45:34.720 --> 00:45:39.120
+the GM server, and then less -- and spoiler-free data that
-00:54:38.720 --> 00:54:40.480
-and I don't know how we're set for time
+00:45:39.120 --> 00:45:43.160
+flows down to the org mode files on the player system.
-00:54:40.480 --> 00:54:42.160
-but I just saw a message
+00:45:43.160 --> 00:45:47.660
+And the only real challenge is making sure that nothing
-00:54:42.160 --> 00:54:44.400
-um from trixie that she could jump on if
+00:45:47.660 --> 00:45:52.230
+that the game does can mess with the users -- the players'
-00:54:44.400 --> 00:54:46.480
-we want her oh that would be amazing
+00:45:52.230 --> 00:45:56.610
+data file, in case they might have their own notes and
-00:54:46.480 --> 00:54:47.920
-yeah go ahead and invite her in I'll
+00:45:56.610 --> 00:46:03.800
+things in it. That would be the one, you know, number one
-00:54:47.920 --> 00:54:51.680
-just cut to the scene as soon as she's
+00:46:03.800 --> 00:46:06.160
+thing to avoid.
-00:54:51.680 --> 00:54:56.160
-I in uh yeah so we're reaching the ask
+00:46:06.160 --> 00:46:09.200
+Another thing we can talk about here is that there are
-00:54:56.160 --> 00:54:56.799
-me any
+00:46:09.200 --> 00:46:12.350
+layers. You can see this table at the bottom has tile and
-00:54:56.799 --> 00:54:58.960
-anything uh portion of the program here
+00:46:12.350 --> 00:46:16.860
+overlay. The overlay column is just going to contain some
-00:54:58.960 --> 00:55:01.200
-with what uh with what time we have left
+00:46:16.860 --> 00:46:19.160
+actual SVG XML style tags.
-00:55:01.200 --> 00:55:02.559
-for your questions
+00:46:19.160 --> 00:46:23.100
+So that's where we can add whatever text elements or other
-00:55:02.559 --> 00:55:05.200
-um please correct me if we're still like
+00:46:23.100 --> 00:46:27.120
+SVG, like raw SVG tags we want. Whereas a lot of the other
-00:55:05.200 --> 00:55:06.160
-10 minutes
+00:46:27.120 --> 00:46:30.980
+layers are going to be like path layers, we've got water
-00:55:06.160 --> 00:55:08.799
-you know if we're if we're more than
+00:46:30.980 --> 00:46:33.160
+layers and beach layers.
-00:55:08.799 --> 00:55:10.000
-like
+00:46:33.160 --> 00:46:36.370
+And our plan was to have a style sheet that defines how
-00:55:10.000 --> 00:55:12.640
-15 to 20 minutes from our time but I I
+00:46:36.370 --> 00:46:39.790
+each of those layers are represented. So like when the
-00:55:12.640 --> 00:55:13.760
-suspect we've less weight
+00:46:39.790 --> 00:46:43.140
+water gets drawn blue and it's got arrows on it giving it
-00:55:13.760 --> 00:55:16.640
-left way less than that and out of
+00:46:43.140 --> 00:46:47.140
+direction, all of that can be customized with a style sheet
-00:55:16.640 --> 00:55:17.440
-respect for
+00:46:47.140 --> 00:46:50.160
+to change the water to be whatever you want.
-00:55:17.440 --> 00:55:24.319
-all the other presenters um
+00:46:50.160 --> 00:46:53.430
+And like we have beaches as yellow, but maybe you like
-00:55:24.319 --> 00:55:28.720
-oh I don't want to close that actually
+00:46:53.430 --> 00:46:56.160
+beaches as red or, you know, whatever.
-00:55:28.720 --> 00:55:30.640
-I think I may have found an old version
+00:46:56.160 --> 00:47:03.570
+So we also built some test programs and various -- I'm not
-00:55:30.640 --> 00:55:32.839
-of my slides that could have some good
+00:47:03.570 --> 00:47:05.900
+sure what kind of shape we're going to find these in, but
-00:55:32.839 --> 00:55:35.200
-stuff
+00:47:05.900 --> 00:47:07.160
+we can try running them.
-00:55:35.200 --> 00:55:36.799
-it's been an event for a couple of weeks
+00:47:07.160 --> 00:47:13.950
+Here, for example, is just a very basic -- using the same
-00:55:36.799 --> 00:55:38.799
-here I had a break in and uh
+00:47:13.950 --> 00:47:21.160
+file to define the tiles and then the layout, so to speak.
-00:55:38.799 --> 00:55:41.359
-my somebody got into our bank accounts
+00:47:21.160 --> 00:47:25.160
+Oh, look at that.
-00:55:41.359 --> 00:55:43.599
-and
+00:47:25.160 --> 00:47:29.160
+There's the layout. Okay, so that actually looks fine. Tile.
-00:55:43.599 --> 00:55:46.880
-nasty business just a lot going on over
+00:47:29.160 --> 00:47:33.430
+And it's path. So this is defining a tile named "seas" and
-00:55:46.880 --> 00:55:50.720
-over this whole year I think
+00:47:33.430 --> 00:47:37.160
+it's going to have a list of tiles defined above.
-00:55:50.720 --> 00:55:53.040
-do we have more questions to shag or
+00:47:37.160 --> 00:47:41.120
+And you'll notice also that we can just sort of freely
-00:55:53.040 --> 00:55:53.839
-where
+00:47:41.120 --> 00:47:44.750
+define and redefine and it sort of figures out, oh, this
-00:55:53.839 --> 00:55:56.960
-sure so I think
+00:47:44.750 --> 00:47:47.160
+must still be part of the B row.
-00:55:56.960 --> 00:55:58.799
-there was at least one we deferred a
+00:47:47.160 --> 00:48:00.160
+We could also have done this.
-00:55:58.799 --> 00:56:01.040
-little bit uh what the game
+00:48:00.160 --> 00:48:08.160
+Okay, so this would work as would this.
-00:56:01.040 --> 00:56:05.040
-is
+00:48:08.160 --> 00:48:11.930
+>> Early on in development when we were talking about
-00:56:05.040 --> 00:56:06.799
-uh always eight characters that can be
+00:48:11.930 --> 00:48:16.520
+getting data in and out of these org tables, it was kind of
-00:56:06.799 --> 00:56:08.400
-divided right that's so always eight
+00:48:16.520 --> 00:48:22.160
+a priority to us to leave the way the data is organized
-00:56:08.400 --> 00:56:10.000
-characters that can be divided between
+00:48:22.160 --> 00:48:25.160
+open to the users and to the dungeon masters.
-00:56:10.000 --> 00:56:12.160
-the party is the classic formula
+00:48:25.160 --> 00:48:30.860
+So while we set our tile set apart from our map sets, this
-00:56:12.160 --> 00:56:14.319
-it actually works pretty well for a
+00:48:30.860 --> 00:48:36.430
+clearly shows that you can cram a tile set and a map into a
-00:56:14.319 --> 00:56:16.240
-conversational group remember that
+00:48:36.430 --> 00:48:38.160
+single file.
-00:56:16.240 --> 00:56:17.760
-role-playing games are about talking to
+00:48:38.160 --> 00:48:41.170
+So in situations like the surface where we're using
-00:56:17.760 --> 00:56:18.480
-each other
+00:48:41.170 --> 00:48:44.610
+different tiles from other maps, maybe it makes sense to
-00:56:18.480 --> 00:56:20.000
-and being good at them is about taking
+00:48:44.610 --> 00:48:47.890
+move, you know, those tiles just into the file with your
-00:56:20.000 --> 00:56:22.079
-excellent notes so
+00:48:47.890 --> 00:48:49.160
+map.
-00:56:22.079 --> 00:56:23.200
-when you're sitting around with a group
+00:48:49.160 --> 00:48:51.880
+But we also wanted to make sure, like, it's hard for us to
-00:56:23.200 --> 00:56:24.559
-of people and you're going to have to
+00:48:51.880 --> 00:48:54.640
+predict how other people are going to want to use this when
-00:56:24.559 --> 00:56:25.920
-wait for them while they dig through
+00:48:54.640 --> 00:48:56.160
+they design their games.
-00:56:25.920 --> 00:56:26.880
-their notes
+00:48:56.160 --> 00:49:00.780
+So we wanted to leave it as versatile as possible about how
-00:56:26.880 --> 00:56:28.720
-and listen to all of the things they
+00:49:00.780 --> 00:49:02.160
+you can use it.
-00:56:28.720 --> 00:56:30.319
-find interesting to say
+00:49:02.160 --> 00:49:04.810
+>> Where it matters, right? Not support every feature in
-00:56:30.319 --> 00:56:32.240
-and try to reach an imaginative place
+00:49:04.810 --> 00:49:05.160
+the world.
-00:56:32.240 --> 00:56:34.160
-that you can stay together
+00:49:05.160 --> 00:49:08.560
+I can't count the number of times I said, Erik, Erik, Erik,
-00:56:34.160 --> 00:56:36.160
-while you're doing all that and working
+00:49:08.560 --> 00:49:12.000
+hey, if we do it like this, people will be -- and he just,
-00:56:36.160 --> 00:56:38.319
-in dice and remembering the rules
+00:49:12.000 --> 00:49:14.160
+like, does it have to do that?
-00:56:38.319 --> 00:56:40.880
-it's actually a complicated activity I
+00:49:14.160 --> 00:49:19.090
+Like, do we need it right away? Do you have to really
-00:56:40.880 --> 00:56:43.200
-liken it more to a bridge game
+00:49:19.090 --> 00:49:21.160
+rewrite everything so it can all do that?
-00:56:43.200 --> 00:56:46.240
-than to like uh
+00:49:21.160 --> 00:49:26.160
+And a lot of those conversations, too.
-00:56:46.240 --> 00:56:48.960
-you know parcheesi or perhaps even like
+00:49:26.160 --> 00:49:30.160
+But the key flexibilities are really there.
-00:56:48.960 --> 00:56:51.359
-risk or access and allies or other games
+00:49:30.160 --> 00:49:32.160
+People might want to use a lot of different files.
-00:56:51.359 --> 00:56:52.160
-that
+00:49:32.160 --> 00:49:34.160
+They might want to lay the tables out however they want.
-00:56:52.160 --> 00:56:54.319
-have have definitely the strategy to
+00:49:34.160 --> 00:49:37.590
+They have to be able to say, hey, this is a table that has
-00:56:54.319 --> 00:56:56.160
-them but
+00:49:37.590 --> 00:49:40.950
+data that's controlled by the game, and everything else in
-00:56:56.160 --> 00:57:00.160
-I don't eric your thoughts
+00:49:40.950 --> 00:49:43.160
+the file is not the game's problem.
-00:57:00.160 --> 00:57:03.920
-yeah I mean I think that's fair um
+00:49:43.160 --> 00:49:45.980
+>> And our table, some of our tables started getting really
-00:57:03.920 --> 00:57:06.640
-you know yes definitely the the
+00:49:45.980 --> 00:49:48.160
+wide, so we started striping the tables.
-00:57:06.640 --> 00:57:08.160
-tradition is to always have eight
+00:49:48.160 --> 00:49:52.140
+We'll repeat the same table over and over and over again to
-00:57:08.160 --> 00:57:09.440
-characters in the party
+00:49:52.140 --> 00:49:56.180
+get all of the columns in there without making it, you know,
-00:57:09.440 --> 00:57:12.079
-and you know one of the great things
+00:49:56.180 --> 00:49:58.160
+a million miles wide.
-00:57:12.079 --> 00:57:13.760
-about dungeon is that everybody who
+00:49:58.160 --> 00:49:59.160
+>> Yeah.
-00:57:13.760 --> 00:57:15.200
-writes their own dungeon
+00:49:59.160 --> 00:50:02.450
+Do you want to -- should I go ahead and pull open, like, a
-00:57:15.200 --> 00:57:18.000
-gets to write their own rules and is
+00:50:02.450 --> 00:50:04.160
+level here, do you think?
-00:57:18.000 --> 00:57:19.440
-free to change whatever
+00:50:04.160 --> 00:50:05.160
+>> Sure.
-00:57:19.440 --> 00:57:21.760
-you want and that being said I've
+00:50:05.160 --> 00:50:06.160
+>> Just to have shown it.
-00:57:21.760 --> 00:57:22.720
-certainly seen
+00:50:06.160 --> 00:50:08.750
+>> The file set's a great example of striped tables if you
-00:57:22.720 --> 00:57:25.839
-people try to take on challenging that
+00:50:08.750 --> 00:50:11.160
+look down, like, in the level change feature.
-00:57:25.839 --> 00:57:28.079
-always eight characters in a party
+00:50:11.160 --> 00:50:18.160
+>> Oh, sure.
-00:57:28.079 --> 00:57:30.640
-thing um I've seen people take
+00:50:18.160 --> 00:50:21.160
+>> Sorry, I'm not quite sitting well to my keyboard here.
-00:57:30.640 --> 00:57:32.640
-approaches like every player gets two
+00:50:21.160 --> 00:50:30.160
+I can just readjust things real quick.
-00:57:32.640 --> 00:57:34.640
-characters and then you can have a party
+00:50:30.160 --> 00:50:33.920
+So what, you know, you can see here, like, some of these
-00:57:34.640 --> 00:57:36.319
-ranging from two to ten
+00:50:33.920 --> 00:50:38.160
+tables got real wide when we're stuffing SVG tags into them.
-00:57:36.319 --> 00:57:38.079
-or there's always going to be ten or
+00:50:38.160 --> 00:50:44.160
+And what we -- oh, maybe it's not in these.
-00:57:38.079 --> 00:57:40.000
-there's you know this or that or people
+00:50:44.160 --> 00:50:50.160
+I thought it was.
-00:57:40.000 --> 00:57:43.200
-have um tried stuff and none of it has
+00:50:50.160 --> 00:50:51.160
+It's special, probably.
-00:57:43.200 --> 00:57:45.280
-really worked out very satisfactorily we
+00:50:51.160 --> 00:50:52.160
+>> Yeah.
-00:57:45.280 --> 00:57:45.839
-always
+00:50:52.160 --> 00:50:54.160
+No, there it is, yeah.
-00:57:45.839 --> 00:57:48.319
-seem to keep coming back to our um party
+00:50:54.160 --> 00:50:55.160
+It was in level change.
-00:57:48.319 --> 00:57:49.680
-of eight
+00:50:55.160 --> 00:50:57.160
+It does the table key repeat.
-00:57:49.680 --> 00:57:54.160
-yeah it's I I I I it's one of the things
+00:50:57.160 --> 00:50:58.160
+>> Okay, great.
-00:57:54.160 --> 00:57:55.839
-dungeon that you can't change when you
+00:50:58.160 --> 00:50:59.720
+>> You were just scrolling up and down so fast I didn't
-00:57:55.839 --> 00:57:57.359
-write your own dungeon
+00:50:59.720 --> 00:51:00.160
+realize.
-00:57:57.359 --> 00:57:58.720
-and that's the reason it's so
+00:51:00.160 --> 00:51:04.270
+So this first table, we've got path and what is that,
-00:57:58.720 --> 00:58:00.960
-complicated as a as a software
+00:51:04.270 --> 00:51:05.160
+stairs?
-00:58:00.960 --> 00:58:03.119
-project why it's taken us decades
+00:51:05.160 --> 00:51:09.010
+So the stairs level is one that draws in, like, a pink
-00:58:03.119 --> 00:58:04.559
-because
+00:51:09.010 --> 00:51:13.160
+color to highlight places where you can change level.
-00:58:04.559 --> 00:58:08.000
-trying to model the data for example or
+00:51:13.160 --> 00:51:16.120
+And then if we scroll down to the second half of this
-00:58:08.000 --> 00:58:11.280
-really any attempt to
+00:51:16.120 --> 00:51:19.380
+section, the second table is going to have all of these
-00:58:11.280 --> 00:58:14.160
-quantify it in specific terms always
+00:51:19.380 --> 00:51:24.000
+same tiles in it, but instead of path and stairs, we're
-00:58:14.160 --> 00:58:15.680
-falls to examples
+00:51:24.000 --> 00:51:27.160
+going to have other columns.
-00:58:15.680 --> 00:58:18.880
-well you know dungeons usually have
+00:51:27.160 --> 00:51:31.160
+Can we see the next table?
-00:58:18.880 --> 00:58:22.079
-elves dwarves and humans they have uh
+00:51:31.160 --> 00:51:32.160
+There we go.
-00:58:22.079 --> 00:58:25.280
-priests wizards and warriors uh they
+00:51:32.160 --> 00:51:35.610
+So the same tiles, only here we've got overlay,
-00:58:25.280 --> 00:58:27.599
-have eight characters in the party
+00:51:35.610 --> 00:51:38.160
+documentation, and behavior.
-00:58:27.599 --> 00:58:30.000
-the bell rocks are particularly nasty
+00:51:38.160 --> 00:51:40.160
+And I guess we haven't talked about this at all.
-00:58:30.000 --> 00:58:31.680
-and live in a room of some
+00:51:40.160 --> 00:51:44.920
+The behavior column was our concept of a way that we could
-00:58:31.680 --> 00:58:35.119
-specific shape um spoilers
+00:51:44.920 --> 00:51:50.100
+attach functions, basically, to these different areas of
-00:58:35.119 --> 00:58:38.319
-uh right and we don't tell you the rules
+00:51:50.100 --> 00:51:51.160
+the map.
-00:58:38.319 --> 00:58:39.520
-and that's what you know
+00:51:51.160 --> 00:51:55.920
+Because sometimes when you enter an area, we want it to do
-00:58:39.520 --> 00:58:40.960
-and you sit down at the table and you
+00:51:55.920 --> 00:51:57.160
+something.
-00:58:40.960 --> 00:58:42.640
-say what's your character name and
+00:51:57.160 --> 00:52:00.880
+Like when you enter a stairs down, maybe we want it to
-00:58:42.640 --> 00:58:44.480
-what's your special power
+00:52:00.880 --> 00:52:04.850
+change to the next level and draw the stairs up behind you
-00:58:44.480 --> 00:58:48.400
-and and then I say uh I
+00:52:04.850 --> 00:52:08.160
+and draw you where you are on the next level.
-00:58:48.400 --> 00:58:51.599
-I I'm zelda and uh
+00:52:08.160 --> 00:52:13.470
+So these are like hooks where we could attach functions or,
-00:58:51.599 --> 00:58:53.839
-I I have this bridge that I can put down
+00:52:13.470 --> 00:52:18.390
+you know, macros or whatever to make the map have these
-00:58:53.839 --> 00:58:56.000
-that always gets me across the river
+00:52:18.390 --> 00:52:23.160
+behaviors as we get further towards automation.
-00:58:56.000 --> 00:58:59.040
-um so let's touch on special power real
+00:52:23.160 --> 00:52:25.160
+Cool.
-00:58:59.040 --> 00:58:59.359
-quick
+00:52:25.160 --> 00:52:31.160
+So that's that should be pretty close to our time.
-00:58:59.359 --> 00:59:01.119
-since that's one of the things that is
+00:52:31.160 --> 00:52:34.160
+Questions or just say goodbye.
-00:59:01.119 --> 00:59:03.280
-kind of unique to dungeon
+00:52:34.160 --> 00:52:38.160
+Yeah, so there's the I'm sorry we couldn't show it earlier.
-00:59:03.280 --> 00:59:06.160
-and one of the things that is the
+00:52:38.160 --> 00:52:41.160
+There is the battle board.
-00:59:06.160 --> 00:59:06.720
-biggest
+00:52:41.160 --> 00:52:46.160
+And so this is used just to keep track of hit points.
-00:59:06.720 --> 00:59:08.960
-challenge to us in trying to code a
+00:52:46.160 --> 00:52:50.540
+So with this example, battle board, dm battle board.el,
-00:59:08.960 --> 00:59:10.240
-system like this for
+00:52:50.540 --> 00:52:54.590
+there's there's a complete example of not only in a single
-00:59:10.240 --> 00:59:13.200
-automated play and that's that every
+00:52:54.590 --> 00:52:58.430
+file reaper, we filling out the tell the cells and the
-00:59:13.200 --> 00:59:14.319
-character gets a
+00:52:58.430 --> 00:53:03.720
+tiles, but then coming in and keeping the org mode file in
-00:59:14.319 --> 00:59:17.119
-unique special power and traditionally
+00:53:03.720 --> 00:53:06.160
+sync with with clicks.
-00:59:17.119 --> 00:59:18.000
-you negotiate
+00:53:06.160 --> 00:53:11.040
+So, and I can press the star key and set my damage to minus
-00:59:18.000 --> 00:59:19.520
-your special power with the dungeon
+00:53:11.040 --> 00:53:14.160
+one and take the damage back off.
-00:59:19.520 --> 00:59:21.839
-master when you create your character
+00:53:14.160 --> 00:53:17.770
+I just haven't spent a lot of time building up fancy bind
-00:59:21.839 --> 00:59:24.079
-and occasionally throughout the course
+00:53:17.770 --> 00:53:21.620
+ings for this, you'll also find that the crew probably find
-00:59:24.079 --> 00:59:25.839
-of the character's life their special
+00:53:21.620 --> 00:53:25.270
+how I figure out what was clicked on in the code hard, but
-00:59:25.839 --> 00:59:27.359
-power might change
+00:53:25.270 --> 00:53:30.010
+if I just assign something recognizable for damage, and
-00:59:27.359 --> 00:59:29.920
-due to game circumstances usually it
+00:53:30.010 --> 00:53:33.160
+then come into.
-00:59:29.920 --> 00:59:33.280
-improves but sometimes not
+00:53:33.160 --> 00:53:39.030
+It will now have opened the org mode file behind the scenes
-00:59:33.280 --> 00:59:34.960
-uh and that's those are the most fun
+00:53:39.030 --> 00:53:41.160
+because it's changing it.
-00:59:34.960 --> 00:59:36.960
-conversations right sometimes we have
+00:53:41.160 --> 00:53:48.340
+And we can then look at that file a little bit and
-00:59:36.960 --> 00:59:39.440
-fun gaming sessions where we barely get
+00:53:48.340 --> 00:53:54.130
+hopefully that is on large enough you can kind of see there
-00:59:39.440 --> 00:59:41.760
-all the characters created and started
+00:53:54.130 --> 00:53:57.160
+'s our 17 damage landed in armor.
-00:59:41.760 --> 00:59:43.680
-because we get off into arguing about
+00:53:57.160 --> 00:54:04.200
+The logic that sits behind that to figure out the part of
-00:59:43.680 --> 00:59:45.440
-the special powers no zelda special
+00:54:04.200 --> 00:54:10.160
+the screen is not necessarily our finest work.
-00:59:45.440 --> 00:59:48.319
-powers obviously the candle come on
+00:54:10.160 --> 00:54:12.960
+But it does work and that's one kind of stuff was used on
-00:59:48.319 --> 00:59:53.359
-also that was link not zelda
+00:54:12.960 --> 00:54:16.030
+the map a little bit too. We didn't really get to show that
-00:59:53.359 --> 00:59:56.240
-I still have my t-shirt hey there she is
+00:54:16.030 --> 00:54:18.970
+in the demo but as you're scrolling around there's like a
-00:59:56.240 --> 01:00:01.440
-let's cut scene
+00:54:18.970 --> 00:54:22.160
+highlighter that that, you know, we were drawing on.
-01:00:01.440 --> 01:00:05.839
-you get video fun filters today because
+00:54:22.160 --> 00:54:26.160
+Oh sure, show you which square you've got selected.
-01:00:05.839 --> 01:00:07.359
-that's what we got going on over here
+00:54:26.160 --> 00:54:30.300
+We were having trouble with that code. Initially, and we
-01:00:07.359 --> 01:00:08.799
-today all right I'm gonna recut
+00:54:30.300 --> 00:54:33.160
+were sometimes revealing the wrong.
-01:00:08.799 --> 01:00:18.079
-everybody hang on tight
+00:54:33.160 --> 00:54:38.160
+Okay.
-01:00:18.079 --> 01:00:20.799
-all right there's eric this is gonna be
+00:54:38.160 --> 00:54:41.320
+And I don't know how we're set for time but I just saw a
-01:00:20.799 --> 01:00:23.200
-eric for a second hope
+00:54:41.320 --> 00:54:45.240
+message from Trixie that she could jump on if we want her.
-01:00:23.200 --> 01:00:25.200
-no worries and welcome to the welcome to
+00:54:45.240 --> 00:54:48.290
+Oh, that would be amazing. Yeah, go ahead and invite her in
-01:00:25.200 --> 01:00:27.440
-the stream uh trixie horror
+00:54:48.290 --> 00:54:51.160
+I'll just cut to the scene as soon as she's in.
-01:00:27.440 --> 01:00:30.960
-uh who is
+00:54:51.160 --> 00:54:54.160
+I think.
-01:00:30.960 --> 01:00:32.720
-uh one of our project team members
+00:54:54.160 --> 00:54:58.080
+Yeah, so we're reaching the ask me anything portion of the
-01:00:32.720 --> 01:00:34.559
-somebody who's learning Emacs as part of
+00:54:58.080 --> 00:55:01.760
+program here with what, with what time we have left for
-01:00:34.559 --> 01:00:35.440
-the project
+00:55:01.760 --> 00:55:03.160
+your questions.
-01:00:35.440 --> 01:00:38.480
-and um yeah I
+00:55:03.160 --> 00:55:09.170
+Please correct me if we're still like 10 minutes, you know,
-01:00:38.480 --> 01:00:40.720
-I I particularly wanted to invite you on
+00:55:09.170 --> 00:55:15.450
+if we're, if we're more than like 15 to 20 minutes from our
-01:00:40.720 --> 01:00:42.160
-to talk about your experience learning
+00:55:15.450 --> 00:55:20.560
+time but I suspect we've left way left way less than that
-01:00:42.160 --> 01:00:44.319
-Emacs I think you have run into
+00:55:20.560 --> 00:55:25.160
+and out of respect for all the other presenters.
-01:00:44.319 --> 01:00:46.079
-places where it's a pain in the butt to
+00:55:25.160 --> 00:55:29.160
+I don't want to close that actually.
-01:00:46.079 --> 01:00:47.839
-learn Emacs and that this is a safe
+00:55:29.160 --> 00:55:33.060
+I think I may have found an old version of my slides that
-01:00:47.839 --> 01:00:56.000
-space to talk about that
+00:55:33.060 --> 00:55:35.160
+can have some good stuff.
-01:00:56.000 --> 01:00:58.960
-jump into that by saying um the Emacs
+00:55:35.160 --> 00:55:40.220
+It's been an event for a couple of weeks here I had a break
-01:00:58.960 --> 01:01:00.640
-cheat sheet
+00:55:40.220 --> 00:55:45.190
+in and my somebody got into our bank accounts and nasty
-01:01:00.640 --> 01:01:02.880
-um I think it's the one that canoe puts
+00:55:45.190 --> 00:55:51.160
+business, just a lot going on over, over this whole year I think.
-01:01:02.880 --> 01:01:03.680
-out
+00:55:51.160 --> 00:55:54.160
+Any more questions to share.
-01:01:03.680 --> 01:01:07.680
-is a lifesaver um a little bit of a
+00:55:54.160 --> 00:56:02.240
+Sure. So, I think there was at least one we deferred a
-01:01:07.680 --> 01:01:09.440
-vocabulary disconnect
+00:56:02.240 --> 00:56:06.160
+little bit with the game is
-01:01:09.440 --> 01:01:12.480
-like and this actually kind of comes up
+00:56:06.160 --> 00:56:08.990
+always eight characters that can be divided right that's so
-01:01:12.480 --> 01:01:13.359
-a lot
+00:56:08.990 --> 00:56:11.660
+always eight characters that can be divided between the
-01:01:13.359 --> 01:01:15.200
-in conversation with corona and eric and
+00:56:11.660 --> 00:56:14.540
+party is the classic formula, it actually works pretty well
-01:01:15.200 --> 01:01:18.000
-I but copy paste versus
+00:56:14.540 --> 00:56:16.160
+for a conversational group.
-01:01:18.000 --> 01:01:21.920
-what yank and w
+00:56:16.160 --> 00:56:18.810
+I think the idea that role playing games are about talking
-01:01:21.920 --> 01:01:27.920
-whatever w
+00:56:18.810 --> 00:56:21.330
+to each other and being good at them is about taking
-01:01:27.920 --> 01:01:30.000
-why would you even do that to us right
+00:56:21.330 --> 00:56:23.770
+excellent notes. So, when you're sitting around with a
-01:01:30.000 --> 01:01:31.200
-where where were you
+00:56:23.770 --> 00:56:26.070
+group of people and you're going to have to wait for them
-01:01:31.200 --> 01:01:33.359
-when zero's park happened no I I
+00:56:26.070 --> 00:56:29.410
+while they dig through their notes and listen to all of the
-01:01:33.359 --> 01:01:38.480
-understand that makes sense what else
+00:56:29.410 --> 00:56:33.160
+things they find interesting to say, and try to reach an
-01:01:38.480 --> 01:01:39.520
-I mean you don't have to sit here and
+00:56:33.160 --> 00:56:35.160
+imaginative place that you can stay together.
-01:01:39.520 --> 01:01:41.440
-rag on Emacs but we're here for that
+00:56:35.160 --> 00:56:38.800
+And when you're doing all that and working in dice and
-01:01:41.440 --> 01:01:43.119
-that's all I'm saying
+00:56:38.800 --> 00:56:43.250
+remembering the rules. It's actually a complicated activity,
-01:01:43.119 --> 01:01:44.400
-no I'm like that's been the biggest
+00:56:43.250 --> 00:56:47.340
+I liken it more to a bridge game, then to like, you know,
-01:01:44.400 --> 01:01:46.799
-thing like I'm
+00:56:47.340 --> 00:56:51.310
+part cheesy or perhaps even like risk or access and allies
-01:01:46.799 --> 01:01:49.920
-I'm used to like just kind of the
+00:56:51.310 --> 00:56:55.620
+or other games that have have definitely the strategy to
-01:01:49.920 --> 01:01:52.319
-very binary nature like nope that didn't
+00:56:55.620 --> 00:56:57.160
+them but I don't.
-01:01:52.319 --> 01:01:53.839
-work try something else
+00:56:57.160 --> 00:57:01.160
+Erik, your thoughts.
-01:01:53.839 --> 01:01:57.119
-so as long as you're like willing to try
+00:57:02.160 --> 00:57:05.160
+I think that's fair.
-01:01:57.119 --> 01:01:59.200
-other stuff
+00:57:05.160 --> 00:57:08.880
+You know yes definitely. The, the tradition is to always
-01:01:59.200 --> 01:02:02.880
-like Emacs will be fine so
+00:57:08.880 --> 00:57:12.600
+have eight characters in the party, and, you know, one of
-01:02:02.880 --> 01:02:06.559
-it's a tough cookie I can take it
+00:57:12.600 --> 00:57:16.320
+the great things about dungeon is that everybody who writes
-01:02:06.559 --> 01:02:08.960
-worst thing that happens is you have to
+00:57:16.320 --> 00:57:19.730
+their own dungeon gets to write their own rules, and is
-01:02:08.960 --> 01:02:11.119
-really install it
+00:57:19.730 --> 00:57:22.160
+free to change whatever you want.
-01:02:11.119 --> 01:02:13.520
-throw your ignite file that you
+00:57:22.160 --> 00:57:26.700
+I've definitely seen people try to take on challenging that
-01:02:13.520 --> 01:02:19.920
-hopefully have a backup of
+00:57:26.700 --> 00:57:30.160
+always eight characters in a party thing.
-01:02:19.920 --> 01:02:22.079
-all right fine um are there more
+00:57:30.160 --> 00:57:33.460
+I've seen people take approaches like every player gets two
-01:02:22.079 --> 01:02:24.640
-questions in the hopper
+00:57:33.460 --> 00:57:36.570
+characters and then you can have a party ranging from two
-01:02:24.640 --> 01:02:26.480
-yeah if anybody does have any questions
+00:57:36.570 --> 00:57:40.130
+to 10, or there's always going to be 10 or there's, you
-01:02:26.480 --> 01:02:27.680
-up there uh
+00:57:40.130 --> 00:57:43.340
+know, this or that or people have tried stuff, and none of
-01:02:27.680 --> 01:02:29.839
-for hope for eric or I so just to
+00:57:43.340 --> 00:57:47.170
+it has really worked out very satisfactorily we always seem
-01:02:29.839 --> 01:02:32.000
-summarize I've known eric
+00:57:47.170 --> 00:57:50.160
+to keep coming back to our party of eight.
-01:02:32.000 --> 01:02:34.240
-I've known eric my whole life I've known
+00:57:50.160 --> 00:57:55.710
+It's, it's one of the things that dungeon that you can't
-01:02:34.240 --> 01:02:36.160
-hope around a decade we
+00:57:55.710 --> 00:57:59.290
+change when you write your own dungeon. And that's the
-01:02:36.160 --> 01:02:39.599
-worked together on a project for
+00:57:59.290 --> 00:58:03.900
+reason it's so complicated as a, as a software project why
-01:02:39.599 --> 01:02:44.559
-uh for a science fiction convention yeah
+00:58:03.900 --> 00:58:08.640
+it's taken us decades, because trying to model the data for
-01:02:44.559 --> 01:02:46.880
-we got conventions and then I also
+00:58:08.640 --> 00:58:13.820
+example or really any attempt, quantify it in specific
-01:02:46.880 --> 01:02:48.960
-helped with I just wrote a bio
+00:58:13.820 --> 00:58:16.160
+terms always falls to examples.
-01:02:48.960 --> 01:02:50.799
-so this should like all theoretically be
+00:58:16.160 --> 00:58:20.740
+You know dungeons usually have elves, elves, dwarves and
-01:02:50.799 --> 01:02:53.599
-in my head right
+00:58:20.740 --> 00:58:25.160
+humans. They have priests, wizards and warriors.
-01:02:53.599 --> 01:02:58.079
-I want I refer to my own bio
+00:58:25.160 --> 00:58:29.330
+They have eight characters in the party. The Balrogs are
-01:02:58.079 --> 01:03:00.160
-I'm the project coordinator for dungeon
+00:58:29.330 --> 00:58:34.160
+particularly nasty and live in a room of some specific shape.
-01:03:00.160 --> 01:03:10.799
-mode
+00:58:34.160 --> 00:58:57.160
+And they have spoilers.
-01:03:10.799 --> 01:03:14.000
-um that's nice
+00:58:57.160 --> 00:59:00.900
+So let's touch on special power real quick since that's one
-01:03:14.000 --> 01:03:16.400
-we've gotten a ton of support from a lot
+00:59:00.900 --> 00:59:04.820
+of the things that is kind of unique to dungeon. And one of
-01:03:16.400 --> 01:03:18.000
-of our lifelong friends people
+00:59:04.820 --> 00:59:08.710
+the things that is the biggest challenge to us and trying
-01:03:18.000 --> 01:03:20.480
-and also people that we just met maybe
+00:59:08.710 --> 00:59:12.160
+to code a system like this for automated play.
-01:03:20.480 --> 01:03:22.319
-that's a that's a great segue
+00:59:12.160 --> 00:59:15.680
+And that's that every character gets a unique special power
-01:03:22.319 --> 01:03:25.039
-um do throw your questions in there I'm
+00:59:15.680 --> 00:59:19.300
+and traditionally you negotiate your special power with the
-01:03:25.039 --> 01:03:26.400
-gonna fill for just a second and then
+00:59:19.300 --> 00:59:22.600
+dungeon master when you create your character, and
-01:03:26.400 --> 01:03:27.839
-we'll probably cut away
+00:59:22.600 --> 00:59:25.970
+occasionally throughout the course of the characters life
-01:03:27.839 --> 01:03:32.319
-um but uh
+00:59:25.970 --> 00:59:29.160
+their special power might change due to game circumstances,
-01:03:32.319 --> 01:03:34.960
-uh I mean thematically actually that's
+00:59:29.160 --> 00:59:34.160
+usually it improves but sometimes not.
-01:03:34.960 --> 01:03:36.319
-that's too abrupt so we need to go
+00:59:34.160 --> 00:59:37.180
+So those are the most fun conversations right sometimes we
-01:03:36.319 --> 01:03:37.200
-around the room
+00:59:37.180 --> 00:59:39.820
+have fun gaming sessions where we barely get all the
-01:03:37.200 --> 01:03:39.119
-eric you had hours and hours to rehearse
+00:59:39.820 --> 00:59:42.800
+characters created and started, because we get off into
-01:03:39.119 --> 01:03:40.720
-hope kind of jumped in on the last
+00:59:42.800 --> 00:59:45.780
+arguing about the special powers no Zelda special powers
-01:03:40.720 --> 01:03:41.359
-minute
+00:59:45.780 --> 00:59:49.160
+obviously the candle Come on.
-01:03:41.359 --> 01:03:43.520
-so let's let's is it okay to pick on you
+00:59:49.160 --> 00:59:54.160
+Also that was like, not so.
-01:03:43.520 --> 01:03:46.319
-or do you want me to give mine
+00:59:54.160 --> 01:00:02.160
+I still have my t shirt. Hey, there she is. Let's cut scene.
-01:03:46.319 --> 01:03:48.880
-uh to what are you asking me to do what
+01:00:02.160 --> 01:00:05.890
+I'm going to be working with fun filters today, because
-01:03:48.880 --> 01:03:50.000
-do you what do you want people to take
+01:00:05.890 --> 01:00:12.250
+that's what we got going on over here. All right, I'm going
-01:03:50.000 --> 01:03:51.359
-away from this talk
+01:00:12.250 --> 01:00:19.160
+to recut everybody hang on tight.
-01:03:51.359 --> 01:03:54.240
-you know as we think about dungeon and
+01:00:19.160 --> 01:00:21.160
+All right, there's Erik.
-01:03:54.240 --> 01:03:55.280
-sharing it's
+01:00:21.160 --> 01:00:24.160
+This is going to be Erik for a second home.
-01:03:55.280 --> 01:03:57.520
-sharing its tradition as we think about
+01:00:24.160 --> 01:00:27.680
+No worries. And welcome to that welcome to the stream. Trix
-01:03:57.520 --> 01:03:58.799
-learning Emacs
+01:00:27.680 --> 01:00:29.160
+ie horror.
-01:03:58.799 --> 01:04:02.799
-and like making that awesome um
+01:00:29.160 --> 01:00:33.410
+Who is one of our project team members somebody who's
-01:04:02.799 --> 01:04:04.880
-and just you know generally what's up
+01:00:33.410 --> 01:00:37.160
+learning Emacs as part of the project, and.
-01:04:04.880 --> 01:04:07.599
-with free software and trying to make
+01:00:37.160 --> 01:00:42.690
+Yeah, I particularly wanted to invite you on to talk about
-01:04:07.599 --> 01:04:12.480
-computers a tool to make people freer
+01:00:42.690 --> 01:00:47.700
+your experience learning Emacs I think you have run into
-01:04:12.480 --> 01:04:15.200
-wow that's like five questions yeah so
+01:00:47.700 --> 01:00:52.900
+places where it's a pain in the butt to learn Emacs and that
-01:04:15.200 --> 01:04:15.920
-I'm gonna start
+01:00:52.900 --> 01:00:56.160
+this is a safe space to talk about that.
-01:04:15.920 --> 01:04:18.960
-with jumping um I think
+01:00:56.160 --> 01:01:02.160
+I'll jump in by saying the Emacs cheat sheet.
-01:04:18.960 --> 01:04:22.240
-that dungeon is a lot of fun and
+01:01:02.160 --> 01:01:07.160
+I think it's the one that can do puts out is a lifesaver.
-01:04:22.240 --> 01:04:25.359
-you know I'm I've played many
+01:01:07.160 --> 01:01:12.030
+I think there's a little bit of a vocabulary disconnect,
-01:04:25.359 --> 01:04:27.599
-commercial role-playing games over the
+01:01:12.030 --> 01:01:16.050
+like, and this actually kind of comes up a lot in
-01:04:27.599 --> 01:04:28.480
-years
+01:01:16.050 --> 01:01:21.080
+conversation with Corwin and Erik and I, but coffee paste
-01:04:28.480 --> 01:04:31.680
-and I've enjoyed all of them and there
+01:01:21.080 --> 01:01:25.160
+versus what yank and w, whatever w killing yank.
-01:04:31.680 --> 01:04:32.000
-are
+01:01:25.160 --> 01:01:28.160
+Yeah.
-01:04:32.000 --> 01:04:34.720
-very few of them that I've had as many
+01:01:28.160 --> 01:01:31.380
+Why would you even do that to us right where where were you
-01:04:34.720 --> 01:04:36.319
-belly laughs and as much
+01:01:31.380 --> 01:01:34.810
+when zeros park happened. No, I understand that makes sense.
-01:04:36.319 --> 01:04:40.160
-just joy playing as from dungeon
+01:01:34.810 --> 01:01:39.160
+What else.
-01:04:40.160 --> 01:04:42.799
-and I think you know the magic of it is
+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:04:42.799 --> 01:04:43.280
-you know
+01:01:41.920 --> 01:01:44.160
+here for that. That's all I'm saying.
-01:04:43.280 --> 01:04:45.520
-like any game like the real magic is the
+01:01:44.160 --> 01:01:48.250
+I think that's the biggest thing, like, I'm, I'm used to,
-01:04:45.520 --> 01:04:47.200
-people you play with and having fun with
+01:01:48.250 --> 01:01:52.170
+like, just kind of the very binary nature of like, nope,
-01:04:47.200 --> 01:04:49.599
-your friends
+01:01:52.170 --> 01:01:55.160
+that didn't work, try something else.
-01:04:49.599 --> 01:04:51.280
-and what I would hope that people can
+01:01:55.160 --> 01:02:00.680
+So, as long as you're willing to try other stuff like Emacs
-01:04:51.280 --> 01:04:53.440
-take away from is that dungeon has the
+01:02:00.680 --> 01:02:07.160
+will be fine. So, it's a tough cookie it can take it.
-01:04:53.440 --> 01:04:55.920
-ability to be that magical thing
+01:02:07.160 --> 01:02:14.430
+The only thing that happens is you have to install it
-01:04:55.920 --> 01:04:59.280
-and hopefully we can get our project to
+01:02:14.430 --> 01:02:21.160
+through your file that you hopefully have a backup of.
-01:04:59.280 --> 01:05:00.000
-the point
+01:02:21.160 --> 01:02:25.160
+Um, are there more questions in the hopper.
-01:05:00.000 --> 01:05:02.160
-where it gets out of the way and lets
+01:02:25.160 --> 01:02:29.500
+If anybody does have any questions up there for hope for
-01:05:02.160 --> 01:05:04.960
-you have that fun with your friends
+01:02:29.500 --> 01:02:34.210
+Erik or I so just to summarize, I've known Erik, I've known
-01:05:04.960 --> 01:05:07.200
-um but there's a lot of work to do we
+01:02:34.210 --> 01:02:38.640
+Erik, my whole life, I've known hope around a decade we
-01:05:07.200 --> 01:05:08.240
-could use some help
+01:02:38.640 --> 01:02:41.760
+work together on a project for, for a science fiction
-01:05:08.240 --> 01:05:10.880
-so if you're interested in having fun
+01:02:41.760 --> 01:02:42.160
+convention.
-01:05:10.880 --> 01:05:20.960
-come help us build this fun tool
+01:02:42.160 --> 01:02:45.160
+Yeah.
-01:05:20.960 --> 01:05:22.319
-all right so I just got the call that
+01:02:45.160 --> 01:02:49.360
+I've written a few conventions and then I also helped with
-01:05:22.319 --> 01:05:24.079
-we've got just about two to three
+01:02:49.360 --> 01:02:53.710
+I just wrote a bio. So this should like all theoretically
-01:05:24.079 --> 01:05:25.039
-minutes left
+01:02:53.710 --> 01:02:55.160
+be in my head right.
-01:05:25.039 --> 01:05:28.160
-and we should start our wrap-up
+01:02:55.160 --> 01:03:01.660
+I want to refer to my own bio project coordinator for
-01:05:28.160 --> 01:05:31.440
-okay wrap up so
+01:03:01.660 --> 01:03:03.160
+dungeon mode.
-01:05:31.440 --> 01:05:34.240
-yeah um so I'll I'll see if I can charge
+01:03:03.160 --> 01:03:07.160
+I was a bird assistant good credit.
-01:05:34.240 --> 01:05:35.920
-the room with some energy unless you're
+01:03:07.160 --> 01:03:13.160
+And family friend to the Bruce. Oh,
-01:05:35.920 --> 01:05:38.480
-ready to have at it hope
+01:03:13.160 --> 01:03:17.870
+yeah, we've gotten a ton of support from a lot of our
-01:05:38.480 --> 01:05:40.720
-here here's here's what I want people to
+01:03:17.870 --> 01:03:21.720
+lifelong friends people, and also people that we just met.
-01:05:40.720 --> 01:05:42.799
-take away
+01:03:21.720 --> 01:03:24.160
+Maybe that's a that's a great segue.
-01:05:42.799 --> 01:05:47.039
-were you like no okay
+01:03:24.160 --> 01:03:26.900
+Do throw your questions in there I'm going to fill for just
-01:05:47.039 --> 01:05:53.599
-I'm not getting your audio hope
+01:03:26.900 --> 01:03:29.160
+a second and then we'll probably cut away.
-01:05:53.599 --> 01:05:55.839
-it's okay on my end maybe I just need to
+01:03:29.160 --> 01:03:35.970
+But, I'm thinking thematically actually, that's that's too
-01:05:55.839 --> 01:05:57.359
-speak up
+01:03:35.970 --> 01:03:38.810
+abrupt so we need to go around the room, Erik you had hours
-01:05:57.359 --> 01:05:58.880
-is this better let me know when I'm
+01:03:38.810 --> 01:03:41.480
+and hours to rehearse hope kind of jumped in on the last
-01:05:58.880 --> 01:06:00.640
-coming through yeah you're coming
+01:03:41.480 --> 01:03:42.160
+minute.
-01:06:00.640 --> 01:06:01.680
-through now
+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:06:01.680 --> 01:06:05.359
-okay cool oh no I
+01:03:47.050 --> 01:03:48.160
+to get mine.
-01:06:05.359 --> 01:06:08.799
-was gonna say go ahead I didn't okay
+01:03:48.160 --> 01:03:51.490
+What are you asking me to do what do you what do you want
-01:06:08.799 --> 01:06:10.559
-I mean I I don't know that I know what I
+01:03:51.490 --> 01:03:55.280
+people to take away from this talk, you know, as we think
-01:06:10.559 --> 01:06:12.880
-want to say either except a whole ton of
+01:03:55.280 --> 01:03:59.010
+about dungeon and sharing it's sharing its tradition, as we
-01:06:12.880 --> 01:06:13.599
-thank yous
+01:03:59.010 --> 01:04:03.160
+think about learning Emacs, and like making that awesome.
-01:06:13.599 --> 01:06:16.480
-so I will I will save those for the for
+01:04:03.160 --> 01:04:08.210
+And just, you know, generally what's up with free software
-01:06:16.480 --> 01:06:17.200
-the literal
+01:04:08.210 --> 01:04:13.160
+and trying to make computers a tool to make people freer.
-01:06:17.200 --> 01:06:20.880
-end here and instead
+01:04:13.160 --> 01:04:18.160
+Yeah, I'm going to ask like five questions. Yeah, so just
-01:06:20.880 --> 01:06:24.160
-what I would say is as we build
+01:04:18.160 --> 01:04:19.160
+jump in.
-01:06:24.160 --> 01:06:27.839
-our amazing innovations and
+01:04:19.160 --> 01:04:24.160
+I think that dungeon is a lot of fun. And, you know, I'm, I
-01:06:27.839 --> 01:06:32.160
-explore our ideas in Emacs
+01:04:24.160 --> 01:04:29.260
+'ve played many commercial role playing games over the years
-01:06:32.160 --> 01:06:35.119
-we are fighting our own ego for the will
+01:04:29.260 --> 01:04:32.160
+, and I've enjoyed all of them.
-01:06:35.119 --> 01:06:36.079
-to get them done
+01:04:32.160 --> 01:04:36.500
+But there's very few of them that I've had as many belly
-01:06:36.079 --> 01:06:37.680
-it's hard and we're not sure if they're
+01:04:36.500 --> 01:04:41.410
+laughs and as much just joy, playing as from dungeon. And I
-01:06:37.680 --> 01:06:38.960
-going to be a good idea and will it
+01:04:41.410 --> 01:04:44.500
+think, you know, the magic of it is, you know, like any
-01:06:38.960 --> 01:06:40.000
-excite people and part of our
+01:04:44.500 --> 01:04:47.400
+game like the real magic is the people you play with and
-01:06:40.000 --> 01:06:41.680
-responsibility is to excite people so
+01:04:47.400 --> 01:04:50.160
+having fun with your friends.
-01:06:41.680 --> 01:06:43.440
-that they can feel good about liking
+01:04:50.160 --> 01:04:53.780
+And what I would hope that people can take away from is
-01:06:43.440 --> 01:06:44.240
-them
+01:04:53.780 --> 01:04:57.900
+that dungeon has the ability to be that magical thing. And
-01:06:44.240 --> 01:06:45.680
-if you come off and you're like hey this
+01:04:57.900 --> 01:05:01.870
+hopefully we can get our project to the point where it gets
-01:06:45.680 --> 01:06:47.359
-is a terrible idea it's really hard to
+01:05:01.870 --> 01:05:06.160
+out of the way and lets you have that fun with your friends.
-01:06:47.359 --> 01:06:47.920
-be like
+01:05:06.160 --> 01:05:12.180
+So I think there's a lot of work to do we could use some
-01:06:47.920 --> 01:06:49.760
-no I love that idea it works
+01:05:12.180 --> 01:05:19.330
+help. So if you're interested in having fun. Come help us
-01:06:49.760 --> 01:06:51.200
-theatrically but
+01:05:19.330 --> 01:05:22.160
+build this fun tool.
-01:06:51.200 --> 01:06:55.680
-in larger groups may not scale
+01:05:22.160 --> 01:05:25.370
+Alright so I just got the call that we've got just about
-01:06:55.680 --> 01:06:58.400
-so that's a crucible for ideas and a
+01:05:25.370 --> 01:05:29.160
+two to three minutes left, and we should start our wrap up.
-01:06:58.400 --> 01:07:00.400
-crucible for teams
+01:05:29.160 --> 01:05:31.160
+Wrap up.
-01:07:00.400 --> 01:07:03.280
-the first part is definitely healthy the
+01:05:31.160 --> 01:05:35.090
+Yeah, so I'll see if I can charge the room with some energy
-01:07:03.280 --> 01:07:04.240
-second part
+01:05:35.090 --> 01:05:38.160
+unless you're ready to have that at home.
-01:07:04.240 --> 01:07:07.440
-there's a lot we can we can do you know
+01:05:38.160 --> 01:05:43.160
+Here, here's, here's what I want people to take away.
-01:07:07.440 --> 01:07:08.640
-having upfront
+01:05:43.160 --> 01:05:47.160
+Were you like, No, okay.
-01:07:08.640 --> 01:07:10.880
-and and and good faith conversations on
+01:05:47.160 --> 01:05:54.160
+I'm not getting your audio hope.
-01:07:10.880 --> 01:07:15.440
-that subject
+01:05:54.160 --> 01:05:57.160
+So my end, maybe I just need to speak up.
-01:07:15.440 --> 01:07:17.520
-anybody else wanted I want to weigh it
+01:05:57.160 --> 01:06:01.160
+Is this better, let me know when I'm coming through.
-01:07:17.520 --> 01:07:19.119
-in after that sorry that that was more
+01:06:01.160 --> 01:06:05.160
+Okay, cool.
-01:07:19.119 --> 01:07:23.200
-of a calm down than a then a fire out
+01:06:05.160 --> 01:06:07.160
+I was gonna say go ahead.
-01:07:23.200 --> 01:07:27.280
-oh that's okay
+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:07:27.280 --> 01:07:29.280
-I mean um the first part of this but I
+01:06:11.240 --> 01:06:15.290
+to say either except a whole ton of thank you. So, I will,
-01:07:29.280 --> 01:07:30.960
-think um
+01:06:15.290 --> 01:06:19.160
+I will save those for the, for the literal end here.
-01:07:30.960 --> 01:07:32.960
-we would be remiss not to highlight org
+01:06:19.160 --> 01:06:26.630
+And instead, what I would say is, as we build our amazing
-01:07:32.960 --> 01:07:34.880
-mode a little bit
+01:06:26.630 --> 01:06:32.160
+innovations and explore our ideas in Emacs.
-01:07:34.880 --> 01:07:37.839
-yeah like that's that's our bread and
+01:06:32.160 --> 01:06:34.980
+We are fighting our own ego for the will to get them done,
-01:07:37.839 --> 01:07:38.480
-butter
+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:07:38.480 --> 01:07:40.240
-yeah our whole project is built on org
+01:06:37.740 --> 01:06:39.960
+idea and will it excite people and part of our
-01:07:40.240 --> 01:07:42.720
-mode right and I'm just really excited
+01:06:39.960 --> 01:06:42.780
+responsibility is to excite people so that they can feel
-01:07:42.720 --> 01:07:46.240
-because like I have I don't have adhd
+01:06:42.780 --> 01:06:44.160
+good about liking them.
-01:07:46.240 --> 01:07:49.680
-but I have like something similar and so
+01:06:44.160 --> 01:06:47.930
+If you come off and you're like hey this is a terrible idea
-01:07:49.680 --> 01:07:51.119
-like to know that there's something that
+01:06:47.930 --> 01:06:51.470
+it's really hard to be like, no I love that idea works
-01:07:51.119 --> 01:07:54.880
-exists that is like purely hierarchical
+01:06:51.470 --> 01:06:55.160
+theatrically but in larger groups may not scale.
-01:07:54.880 --> 01:07:57.760
-is incredible like I can just run a
+01:06:55.160 --> 01:07:00.160
+So that's a crucible for ideas and a crucible for teams.
-01:07:57.760 --> 01:07:58.559
-report
+01:07:00.160 --> 01:07:05.280
+The first part is definitely healthy. The second part,
-01:07:58.559 --> 01:08:01.839
-basically and get all of my like
+01:07:05.280 --> 01:07:10.070
+there's a lot we can we can do, you know, having a front
-01:08:01.839 --> 01:08:03.839
-to-do lists that I didn't have to put in
+01:07:10.070 --> 01:07:15.160
+and and and good faith conversations on that subject.
-01:08:03.839 --> 01:08:05.760
-one specific place
+01:07:15.160 --> 01:07:19.600
+Anybody else want to want to wade in after that sorry that
-01:08:05.760 --> 01:08:10.559
-um and like that's kind of been
+01:07:19.600 --> 01:07:23.160
+that was more of a calm down than a fire out.
-01:08:10.559 --> 01:08:14.559
-a complex issue for me of like
+01:07:23.160 --> 01:07:25.160
+Okay.
-01:08:14.559 --> 01:08:16.480
-okay I have all these to-do lists like
+01:07:25.160 --> 01:07:27.160
+I think.
-01:08:16.480 --> 01:08:18.080
-in google keep or whatever like what do
+01:07:27.160 --> 01:07:32.180
+The first part of this but I think we would be remiss not
-01:08:18.080 --> 01:08:18.319
-I
+01:07:32.180 --> 01:07:35.860
+to highlight org mode, a little bit. Yeah, like, that's,
-01:08:18.319 --> 01:08:20.719
-do with them now so being able to like
+01:07:35.860 --> 01:07:39.280
+that's our bread and butter. Yeah, our whole project is
-01:08:20.719 --> 01:08:21.359
-pull them
+01:07:39.280 --> 01:07:40.160
+built on org mode.
-01:08:21.359 --> 01:08:24.400
-into one list and then just cycle
+01:07:40.160 --> 01:07:44.580
+Right. And I'm just really excited because, like, I have, I
-01:08:24.400 --> 01:08:26.640
-through them is really incredible
+01:07:44.580 --> 01:07:48.670
+don't have ADHD, but I have like something similar. And so,
-01:08:26.640 --> 01:08:30.239
-and I think taking a dungeon and
+01:07:48.670 --> 01:07:52.230
+like to know that there's something that exists, that is
-01:08:30.239 --> 01:08:34.480
-like using it to
+01:07:52.230 --> 01:07:54.160
+like purely hierarchical.
-01:08:34.480 --> 01:08:35.839
-like combining it with org mode
+01:07:54.160 --> 01:07:59.170
+It's incredible, like I can just run a report, basically
-01:08:35.839 --> 01:08:37.759
-basically um
+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:37.759 --> 01:08:41.040
-really yeah I'm excited about it I'm
+01:08:03.550 --> 01:08:06.160
+put in one specific place.
-01:08:41.040 --> 01:08:42.560
-excited to see like what it can do for
+01:08:06.160 --> 01:08:13.190
+And, like, that's kind of been a complex issue for me of
-01:08:42.560 --> 01:08:44.159
-player groups
+01:08:13.190 --> 01:08:16.680
+like, okay, I have all these to do lists, like in Google
-01:08:44.159 --> 01:08:47.759
-um yeah especially
+01:08:16.680 --> 01:08:19.160
+Keep or whatever like what do I do with them now.
-01:08:47.759 --> 01:08:50.319
-like I was excited about dungeon mode um
+01:08:19.160 --> 01:08:24.160
+So being able to like pull them into one list.
-01:08:50.319 --> 01:08:52.319
-before the pandemic and now like I'm
+01:08:24.160 --> 01:08:27.160
+And then recycle through them is really incredible.
-01:08:52.319 --> 01:08:53.920
-only more enthusiastic
+01:08:27.160 --> 01:08:35.500
+And I think taking dungeon and like using it to like
-01:08:53.920 --> 01:08:57.120
-so yeah uh definitely the pandemic has
+01:08:35.500 --> 01:08:40.160
+combining it with org mode basically really.
-01:08:57.120 --> 01:08:58.400
-been the greatest thing that happened to
+01:08:40.160 --> 01:08:44.210
+I'm excited about it and I'm excited to see like what it
-01:08:58.400 --> 01:08:59.120
-this game
+01:08:44.210 --> 01:08:46.160
+can do for player groups.
-01:08:59.120 --> 01:09:02.080
-terrible terrible as it is to say that
+01:08:46.160 --> 01:08:49.190
+Especially now that quarantine like I was excited about
-01:09:02.080 --> 01:09:02.640
-it
+01:08:49.190 --> 01:08:50.160
+dungeon mode.
-01:09:02.640 --> 01:09:05.120
-if we uh needed a hobby and it turns out
+01:08:50.160 --> 01:08:54.040
+Before the pandemic and now like I'm only more enthusiastic.
-01:09:05.120 --> 01:09:06.719
-role-playing games are
+01:08:54.040 --> 01:08:57.940
+So, yeah, definitely the pandemic has been the greatest
-01:09:06.719 --> 01:09:11.279
-a really good fit
+01:08:57.940 --> 01:09:01.720
+thing that happened to this game, terrible terrible as it
-01:09:11.279 --> 01:09:13.839
-so um so I think that's probably about
+01:09:01.720 --> 01:09:05.090
+is to say that it, if we needed a hobby and it turns out
-01:09:13.839 --> 01:09:14.799
-our time
+01:09:05.090 --> 01:09:11.160
+role playing games are are really good.
-01:09:14.799 --> 01:09:18.560
-um I'm guessing that's my call and
+01:09:11.160 --> 01:09:16.610
+So, so I think that's probably about our time. I'm guessing
-01:09:18.560 --> 01:09:21.759
-uh thank you very much thank you
+01:09:16.610 --> 01:09:21.160
+that's my call. And thank you very much.
-01:09:21.759 --> 01:09:23.120
-everybody
+01:09:21.160 --> 01:09:24.970
+Thank you everybody will be around for discord and stuff
-01:09:23.120 --> 01:09:25.679
-we'll 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:25.679 --> 01:09:31.759
-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-autogen.vtt b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt
deleted file mode 100644
index 49db0989..00000000
--- a/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt
+++ /dev/null
@@ -1,634 +0,0 @@
-WEBVTT
-
-00:00:00.880 --> 00:00:03.760
-hello and welcome to the stock
-
-00:00:03.760 --> 00:00:06.080
-the title of the stock is a tour feature
-
-00:00:06.080 --> 00:00:07.919
-a fast and fully featured terminal
-
-00:00:07.919 --> 00:00:08.559
-emulator
-
-00:00:08.559 --> 00:00:11.840
-inside new e-max so let's try to
-
-00:00:11.840 --> 00:00:13.360
-understand what we mean with the pass
-
-00:00:13.360 --> 00:00:14.559
-and fully featured
-
-00:00:14.559 --> 00:00:17.520
-and to do that we'll compare v term with
-
-00:00:17.520 --> 00:00:18.320
-the
-
-00:00:18.320 --> 00:00:20.640
-packages which are built in Emacs mean
-
-00:00:20.640 --> 00:00:22.400
-the term
-
-00:00:22.400 --> 00:00:25.199
-so let's let's jump into the v term so
-
-00:00:25.199 --> 00:00:26.720
-this is a feature buffer
-
-00:00:26.720 --> 00:00:29.679
-and this is a ansi term buffer what I'm
-
-00:00:29.679 --> 00:00:31.519
-going to do now is first I'm going to
-
-00:00:31.519 --> 00:00:32.160
-prove you
-
-00:00:32.160 --> 00:00:35.760
-what we move fast so to do that let me
-
-00:00:35.760 --> 00:00:37.520
-open a large file display on screen or
-
-00:00:37.520 --> 00:00:39.280
-large file this is about one megabyte of
-
-00:00:39.280 --> 00:00:40.239
-data
-
-00:00:40.239 --> 00:00:43.520
-and let me time that it takes about 0.6
-
-00:00:43.520 --> 00:00:44.160
-seconds
-
-00:00:44.160 --> 00:00:47.200
-with feature let's do the same with
-
-00:00:47.200 --> 00:00:49.760
-with ancient term well we already
-
-00:00:49.760 --> 00:00:51.520
-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:54.559
-what's different and
-
-00:00:54.559 --> 00:00:57.360
-what is v term exactly so v term is a
-
-00:00:57.360 --> 00:00:58.879
-terminal emulator built
-
-00:00:58.879 --> 00:01:01.120
-on top of an external library the
-
-00:01:01.120 --> 00:01:02.719
-library is called libvi term
-
-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.000
-it's a c library and this is what gives
-
-00:01:10.000 --> 00:01:10.799
-us
-
-00:01:10.799 --> 00:01:15.119
-a lot of good features first the speed
-
-00:01:15.119 --> 00:01:17.280
-time spent here 0.6 is essentially the
-
-00:01:17.280 --> 00:01:18.479
-time that it takes to
-
-00:01:18.479 --> 00:01:21.520
-one convert the emax representation of
-
-00:01:21.520 --> 00:01:22.240
-like text
-
-00:01:22.240 --> 00:01:23.840
-into the visa and representation of what
-
-00:01:23.840 --> 00:01:26.400
-was a string and two into
-
-00:01:26.400 --> 00:01:28.479
-actually displaying that and that can
-
-00:01:28.479 --> 00:01:29.520
-take time
-
-00:01:29.520 --> 00:01:31.840
-if there's a if there's quantification
-
-00:01:31.840 --> 00:01:33.680
-involved so these are the 0.6 seconds
-
-00:01:33.680 --> 00:01:34.240
-there
-
-00:01:34.240 --> 00:01:36.960
-as we say in the in ancestor that's much
-
-00:01:36.960 --> 00:01:37.920
-much
-
-00:01:37.920 --> 00:01:39.920
-more time it's much slower so the
-
-00:01:39.920 --> 00:01:41.680
-terminal will feel much snappier much
-
-00:01:41.680 --> 00:01:42.880
-faster
-
-00:01:42.880 --> 00:01:46.079
-but that's not the main benefit or the
-
-00:01:46.079 --> 00:01:47.840
-only benefit of using this external
-
-00:01:47.840 --> 00:01:48.799
-library
-
-00:01:48.799 --> 00:01:52.320
-feature the second big benefit
-
-00:01:52.320 --> 00:01:55.439
-is that v term has support for all the
-
-00:01:55.439 --> 00:01:56.560
-escape codes
-
-00:01:56.560 --> 00:01:59.200
-that exterm has support for so v term is
-
-00:01:59.200 --> 00:02:01.119
-essentially as running x term
-
-00:02:01.119 --> 00:02:03.600
-inside an imax buffer so let's see that
-
-00:02:03.600 --> 00:02:04.799
-this for example
-
-00:02:04.799 --> 00:02:07.119
-let's start by looking at the support
-
-00:02:07.119 --> 00:02:08.239
-for colors
-
-00:02:08.239 --> 00:02:09.920
-we have support for all the colors out
-
-00:02:09.920 --> 00:02:11.840
-of the box we don't have to do anything
-
-00:02:11.840 --> 00:02:15.040
-and if we did the same here well we have
-
-00:02:15.040 --> 00:02:15.680
-only
-
-00:02:15.680 --> 00:02:17.920
-20 colors there's a way to get all the
-
-00:02:17.920 --> 00:02:19.680
-colors but it's much more involved
-
-00:02:19.680 --> 00:02:23.040
-but this is not where v term shines
-
-00:02:23.040 --> 00:02:26.000
-uh we can run all the commands that we
-
-00:02:26.000 --> 00:02:27.200
-want
-
-00:02:27.200 --> 00:02:30.480
-h top and cdu
-
-00:02:30.480 --> 00:02:33.040
-everything runs here also this title
-
-00:02:33.040 --> 00:02:33.840
-it's a
-
-00:02:33.840 --> 00:02:36.400
-it's a fairly complicated manipulation
-
-00:02:36.400 --> 00:02:37.040
-of
-
-00:02:37.040 --> 00:02:40.879
-the window and it will not work here
-
-00:02:40.879 --> 00:02:42.319
-it just doesn't work actually now the
-
-00:02:42.319 --> 00:02:44.640
-terminal is probably messed up
-
-00:02:44.640 --> 00:02:48.400
-yes 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.000
-of having to implement
-
-00:02:52.000 --> 00:02:54.000
-support for all these cape codes we just
-
-00:02:54.000 --> 00:02:55.360
-use those
-
-00:02:55.360 --> 00:02:58.480
-so in many ways running veteran
-
-00:02:58.480 --> 00:03:01.760
-is us running extern inside a max
-
-00:03:01.760 --> 00:03:04.400
-but it's better than that because since
-
-00:03:04.400 --> 00:03:05.840
-this is an e-max buffer
-
-00:03:05.840 --> 00:03:08.879
-we can enjoy a lot of features from
-
-00:03:08.879 --> 00:03:09.760
-Emacs
-
-00:03:09.760 --> 00:03:11.920
-as well as a tighter integration with
-
-00:03:11.920 --> 00:03:13.200
-e-max itself
-
-00:03:13.200 --> 00:03:16.560
-for example as you see here the title of
-
-00:03:16.560 --> 00:03:17.599
-my buffer
-
-00:03:17.599 --> 00:03:20.720
-is from the director I'm in so let's go
-
-00:03:20.720 --> 00:03:21.760
-to my tmp
-
-00:03:21.760 --> 00:03:24.799
-the title will change so there's
-
-00:03:24.799 --> 00:03:26.560
-information being exchanged between v
-
-00:03:26.560 --> 00:03:28.000
-term and index
-
-00:03:28.000 --> 00:03:29.760
-and of course the title is not the only
-
-00:03:29.760 --> 00:03:32.000
-place where information is exchanged
-
-00:03:32.000 --> 00:03:34.799
-I can find a file and I will be in the
-
-00:03:34.799 --> 00:03:35.920
-directory
-
-00:03:35.920 --> 00:03:38.239
-where my terminal is this feature is
-
-00:03:38.239 --> 00:03:40.000
-also available in nc term
-
-00:03:40.000 --> 00:03:41.680
-and it works also on b term and it
-
-00:03:41.680 --> 00:03:43.840
-follows me so if I go to tmp I'll get
-
-00:03:43.840 --> 00:03:44.720
-the tmp
-
-00:03:44.720 --> 00:03:48.000
-if I ssh to a remote server it will work
-
-00:03:48.000 --> 00:03:48.640
-also
-
-00:03:48.640 --> 00:03:51.120
-on remote servers as well which is a
-
-00:03:51.120 --> 00:03:53.920
-very nice way to edit files remotely
-
-00:03:53.920 --> 00:03:55.760
-while we're working on a shelf and
-
-00:03:55.760 --> 00:03:57.360
-second while vterm
-
-00:03:57.360 --> 00:03:59.599
-is not an e-lisp interpreter like
-
-00:03:59.599 --> 00:04:02.159
-initial what we can do is we can
-
-00:04:02.159 --> 00:04:06.080
-still run inbox functions so for example
-
-00:04:06.080 --> 00:04:08.319
-that requires some configuration the
-
-00:04:08.319 --> 00:04:10.159
-term
-
-00:04:10.159 --> 00:04:12.480
-command message I as you see there's a
-
-00:04:12.480 --> 00:04:14.000
-higher so what I'm doing
-
-00:04:14.000 --> 00:04:16.239
-is I'm executing the eagles function I
-
-00:04:16.239 --> 00:04:17.199
-and I can drop that
-
-00:04:17.199 --> 00:04:19.840
-and turn it around uh hash function to
-
-00:04:19.840 --> 00:04:20.320
-run
-
-00:04:20.320 --> 00:04:24.880
-a-list functions or another one file see
-
-00:04:24.880 --> 00:04:27.600
-we call this feature message passing and
-
-00:04:27.600 --> 00:04:28.800
-it requires
-
-00:04:28.800 --> 00:04:30.880
-some configuration on the emac side as
-
-00:04:30.880 --> 00:04:32.000
-well as in the shell side
-
-00:04:32.000 --> 00:04:34.000
-it's important to stress what's the
-
-00:04:34.000 --> 00:04:35.360
-nature of feature
-
-00:04:35.360 --> 00:04:37.360
-for instance every time I'm sending a
-
-00:04:37.360 --> 00:04:39.120
-key binding it's not immediately clear
-
-00:04:39.120 --> 00:04:40.800
-if my intention is to send it to the
-
-00:04:40.800 --> 00:04:42.720
-shell or to imax so v term implements
-
-00:04:42.720 --> 00:04:44.320
-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:51.199
-so for example if you're using evil the
-
-00:04:51.199 --> 00:04:53.600
-editing commands in evil will not work
-
-00:04:53.600 --> 00:04:55.759
-immediately there's some work to be done
-
-00:04:55.759 --> 00:04:57.840
-and integration can be improved on that
-
-00:04:57.840 --> 00:04:58.479
-side but
-
-00:04:58.479 --> 00:05:00.240
-sometimes we really want this to behave
-
-00:05:00.240 --> 00:05:02.240
-exactly like a imax buffer
-
-00:05:02.240 --> 00:05:05.440
-we want to be able to search if
-
-00:05:05.440 --> 00:05:07.039
-if I try to get it to search it will not
-
-00:05:07.039 --> 00:05:08.880
-work I will send it to the shop so to do
-
-00:05:08.880 --> 00:05:09.360
-that
-
-00:05:09.360 --> 00:05:12.400
-we enabled the term copy mode so as you
-
-00:05:12.400 --> 00:05:12.800
-see
-
-00:05:12.800 --> 00:05:15.280
-copy mode and now this buffer is
-
-00:05:15.280 --> 00:05:17.039
-essentially a fundamental buffer
-
-00:05:17.039 --> 00:05:21.120
-I can move around as I can search
-
-00:05:21.120 --> 00:05:24.400
-uh so it must have I
-
-00:05:24.400 --> 00:05:25.840
-can do everything I want and there are
-
-00:05:25.840 --> 00:05:27.120
-additional features for example I can
-
-00:05:27.120 --> 00:05:29.600
-jump around
-
-00:05:29.600 --> 00:05:31.440
-all the prompts and I find this
-
-00:05:31.440 --> 00:05:32.639
-extremely useful
-
-00:05:32.639 --> 00:05:34.400
-because I can copy update from my
-
-00:05:34.400 --> 00:05:35.919
-programs or
-
-00:05:35.919 --> 00:05:39.199
-what I always have to do is I have to
-
-00:05:39.199 --> 00:05:42.400
-google some errors so what I do is I
-
-00:05:42.400 --> 00:05:43.120
-select that
-
-00:05:43.120 --> 00:05:45.919
-and I have my keybinding in maksakov and
-
-00:05:45.919 --> 00:05:46.880
-I'm googling
-
-00:05:46.880 --> 00:05:49.199
-what I have to google so this is very
-
-00:05:49.199 --> 00:05:50.400
-nice and
-
-00:05:50.400 --> 00:05:52.800
-if I now that have selected something if
-
-00:05:52.800 --> 00:05:54.400
-I just press return I will
-
-00:05:54.400 --> 00:05:57.120
-go back to my normal editing mode with
-
-00:05:57.120 --> 00:05:57.440
-the
-
-00:05:57.440 --> 00:06:00.400
-text copied so I can paste it back so
-
-00:06:00.400 --> 00:06:01.600
-it's a quick way to
-
-00:06:01.600 --> 00:06:04.160
-interact with copy and interact with uh
-
-00:06:04.160 --> 00:06:06.400
-with the output of a buffer so finally
-
-00:06:06.400 --> 00:06:07.840
-let's discuss how to actually
-
-00:06:07.840 --> 00:06:10.560
-use beta let's circle back and 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.400
-where development is happening v term is
-
-00:06:14.400 --> 00:06:15.520
-available in velpa
-
-00:06:15.520 --> 00:06:17.919
-but since it's leveraging the power of
-
-00:06:17.919 --> 00:06:18.960
-an external module
-
-00:06:18.960 --> 00:06:20.639
-you must have Emacs compiled with
-
-00:06:20.639 --> 00:06:22.000
-support for modules
-
-00:06:22.000 --> 00:06:25.600
-and many distros like ubuntu debian
-
-00:06:25.600 --> 00:06:27.199
-that's not there so you have to get
-
-00:06:27.199 --> 00:06:29.840
-Emacs with support for modules compiling
-
-00:06:29.840 --> 00:06:30.160
-or
-
-00:06:30.160 --> 00:06:32.000
-getting images somewhere else and also
-
-00:06:32.000 --> 00:06:33.840
-the first time you are going to use this
-
-00:06:33.840 --> 00:06:34.400
-which
-
-00:06:34.400 --> 00:06:37.440
-works only on mac or
-
-00:06:37.440 --> 00:06:40.319
-new linux systems Emacs will try to find
-
-00:06:40.319 --> 00:06:41.759
-and compile this module
-
-00:06:41.759 --> 00:06:43.680
-so it's important this requirement is
-
-00:06:43.680 --> 00:06:45.440
-important if you're using windows
-
-00:06:45.440 --> 00:06:47.600
-well that's not it's not available and
-
-00:06:47.600 --> 00:06:49.199
-will not work
-
-00:06:49.199 --> 00:06:52.560
-so to conclude I want to just advertise
-
-00:06:52.560 --> 00:06:53.440
-this page
-
-00:06:53.440 --> 00:06:56.240
-if you have problems look at the issues
-
-00:06:56.240 --> 00:06:57.120
-and
-
-00:06:57.120 --> 00:06:59.039
-open unusual in case we'll try to help
-
-00:06:59.039 --> 00:07:00.800
-you we are very excited about feature
-
-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 glue imax
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--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
index 9f4d0e06..55af2c4c 100644
--- 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
@@ -1,733 +1,682 @@
WEBVTT
00:00:01.839 --> 00:00:04.160
-hello EmacsConf
+Hello, EmacsConf!
-00:00:04.160 --> 00:00:05.759
-thanks very much first of all to the
+00:00:04.160 --> 00:00:05.279
+Thanks very much, first of all,
-00:00:05.759 --> 00:00:07.200
-organizers of the conference
+00:00:05.280 --> 00:00:07.200
+to the organizers of the conference
-00:00:07.200 --> 00:00:09.440
-and to the audience who I hope is out
+00:00:07.200 --> 00:00:08.800
+and to the audience,
-00:00:09.440 --> 00:00:10.480
-there somewhere
+00:00:08.801 --> 00:00:10.480
+who I hope is out there somewhere,
-00:00:10.480 --> 00:00:12.080
-uh for giving me this chance to talk
+00:00:10.480 --> 00:00:11.679
+for giving me this chance
-00:00:12.080 --> 00:00:14.240
-about Emacs and some of my uh
+00:00:11.680 --> 00:00:12.880
+to talk about Emacs
-00:00:14.240 --> 00:00:16.560
-my poking around with Emacs lisp my name
+00:00:12.881 --> 00:00:16.240
+and some of my poking around with Emacs Lisp.
-00:00:16.560 --> 00:00:18.480
-is eric abrahamson I'm not
+00:00:16.241 --> 00:00:17.680
+My name is Eric Abrahamsen.
-00:00:18.480 --> 00:00:20.960
-a professional programmer but I use
+00:00:17.681 --> 00:00:20.480
+I'm not a professional programmer,
-00:00:20.960 --> 00:00:21.920
-Emacs all day
+00:00:20.481 --> 00:00:23.039
+but I use Emacs all day, every day,
-00:00:21.920 --> 00:00:24.800
-every day for writing for translating
+00:00:23.040 --> 00:00:24.800
+for writing, for translating,
00:00:24.800 --> 00:00:26.160
-for project management
+for project management,
-00:00:26.160 --> 00:00:28.160
-and most importantly for email which
+00:00:26.160 --> 00:00:27.920
+and most importantly, for email,
-00:00:28.160 --> 00:00:29.199
-will be the
+00:00:27.921 --> 00:00:30.640
+which will be the subject of my talk today.
-00:00:29.199 --> 00:00:32.480
-subject of my talk today so I'm talking
+00:00:30.641 --> 00:00:32.880
+So I'm talking about
-00:00:32.480 --> 00:00:35.440
-about object-oriented code in Emacs
+00:00:32.881 --> 00:00:34.160
+object-oriented code
-00:00:35.440 --> 00:00:38.320
-uh most famous possibly oldest
+00:00:34.161 --> 00:00:38.320
+in Emacs' most famous, possibly oldest,
-00:00:38.320 --> 00:00:40.160
-definitely most notorious news reader
+00:00:38.320 --> 00:00:39.520
+definitely most notorious
-00:00:40.160 --> 00:00:41.760
-slash Emacs client
+00:00:39.521 --> 00:00:42.800
+news reader / email client,
-00:00:41.760 --> 00:00:44.320
-email client so in particular object
+00:00:42.801 --> 00:00:44.000
+so, in particular,
-00:00:44.320 --> 00:00:45.440
-oriented code
+00:00:44.001 --> 00:00:46.000
+object-oriented code in Gnus.
-00:00:45.440 --> 00:00:50.239
-in news why object-oriented code
+00:00:46.001 --> 00:00:50.239
+Why object-oriented code?
-00:00:50.239 --> 00:00:51.920
-the way news works is it started off as
+00:00:50.239 --> 00:00:51.199
+The way Gnus works is
-00:00:51.920 --> 00:00:53.600
-a news reader so for access
+00:00:51.200 --> 00:00:52.480
+it started off as a news reader,
-00:00:53.600 --> 00:00:57.039
-accessing nntp servers and later on grew
+00:00:52.481 --> 00:00:55.920
+so for accessing NNTP servers
-00:00:57.039 --> 00:00:59.120
-a whole bunch of new functionality as a
+00:00:55.921 --> 00:00:57.600
+and later on grew a whole bunch
-00:00:59.120 --> 00:01:01.039
-mail client so it can talk to imap
+00:00:57.601 --> 00:00:59.760
+of new functionality as a mail client,
-00:01:01.039 --> 00:01:02.079
-servers
+00:00:59.761 --> 00:01:02.079
+so it can talk to IMAP servers,
-00:01:02.079 --> 00:01:04.799
-mail dealer directories uh folders on
+00:01:02.079 --> 00:01:04.320
+Maildir directories,
-00:01:04.799 --> 00:01:06.640
-your file system all kinds of stuff
+00:01:04.321 --> 00:01:05.360
+folders on your file system,
-00:01:06.640 --> 00:01:08.400
-but it presents a unified interface to
+00:01:05.361 --> 00:01:06.640
+all kinds of stuff,
-00:01:08.400 --> 00:01:09.760
-all those things so it's basically
+00:01:06.640 --> 00:01:08.320
+but it presents a unified interface
-00:01:09.760 --> 00:01:11.040
-polymorphism
+00:01:08.321 --> 00:01:08.960
+to all those things,
-00:01:11.040 --> 00:01:14.000
-one of the the basic fundamental
+00:01:08.961 --> 00:01:11.040
+so it's basically polymorphism,
-00:01:14.000 --> 00:01:16.400
-principles of object oriented code so
+00:01:11.040 --> 00:01:14.560
+one of the the basic fundamental principles
-00:01:16.400 --> 00:01:18.720
-it's a good fit second reason is it
+00:01:14.561 --> 00:01:15.680
+of object oriented code.
-00:01:18.720 --> 00:01:19.920
-already is
+00:01:15.681 --> 00:01:17.600
+So it's a good fit.
-00:01:19.920 --> 00:01:22.880
-object oriented and I'll get into what
+00:01:17.601 --> 00:01:21.439
+Second reason is it already is object-oriented,
-00:01:22.880 --> 00:01:23.759
-that means
+00:01:21.440 --> 00:01:25.280
+and I'll get into what that means in a second.
-00:01:23.759 --> 00:01:27.280
-in a second so
+00:01:25.281 --> 00:01:28.479
+So the background that you should know
-00:01:27.280 --> 00:01:28.640
-the background that you should know is
+00:01:28.480 --> 00:01:30.000
+is that most of this code
-00:01:28.640 --> 00:01:30.640
-that most of this code was written in
-
-00:01:30.640 --> 00:01:32.560
-the 90s
+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.880 --> 00:01:36.159
-official
+Emacs Lisp has only grown sort of
-00:01:36.159 --> 00:01:38.640
-object orientation support libraries
+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:43.840
-from about 2010 to the present so what
-
-00:01:43.840 --> 00:01:44.799
-does
-
-00:01:44.799 --> 00:01:48.640
-news do so the basics of
+over the past 10 years or so,
-00:01:48.640 --> 00:01:50.560
-object orientation in most languages are
+00:01:41.200 --> 00:01:42.799
+from about 2010 to the present.
-00:01:50.560 --> 00:01:52.240
-you you define
+00:01:42.800 --> 00:01:45.920
+So what does Gnus do?
-00:01:52.240 --> 00:01:53.759
-a class of some sort and then you
+00:01:45.921 --> 00:01:49.520
+So the basics of object orientation
-00:01:53.759 --> 00:01:55.840
-instantiate that class and these
+00:01:49.521 --> 00:01:50.560
+in most languages are:
-00:01:55.840 --> 00:01:58.079
-class instances have two things they
+00:01:50.560 --> 00:01:53.439
+you define a class of some sort,
-00:01:58.079 --> 00:02:00.320
-have data attributes or
+00:01:53.440 --> 00:01:55.040
+and then you instantiate that class.
-00:02:00.320 --> 00:02:01.759
-slots or members or whatever you're
+00:01:55.041 --> 00:01:57.920
+These class instances have two things:
-00:02:01.759 --> 00:02:04.799
-going to call them and they have
+00:01:57.921 --> 00:02:00.719
+they have data attributes (or slots,
-00:02:04.799 --> 00:02:07.280
-methods which operate on individual
+00:02:00.720 --> 00:02:01.680
+or members, or whatever
-00:02:07.280 --> 00:02:08.399
-instances
+00:02:01.681 --> 00:02:02.640
+you're going to call them),
-00:02:08.399 --> 00:02:11.120
-so you could say that you create or
+00:02:02.641 --> 00:02:05.600
+and they have methods
-00:02:11.120 --> 00:02:12.879
-instantiate an instance of a class in
+00:02:05.601 --> 00:02:08.399
+which operate on individual instances.
-00:02:12.879 --> 00:02:13.920
-that instance
+00:02:08.399 --> 00:02:10.239
+So you could say that
-00:02:13.920 --> 00:02:16.239
-owns two things that owns its set of
+00:02:10.240 --> 00:02:11.840
+you create or instantiate
-00:02:16.239 --> 00:02:17.120
-attributes
+00:02:11.841 --> 00:02:12.800
+an instance of a class,
-00:02:17.120 --> 00:02:20.239
-and it owns some methods which
+00:02:12.801 --> 00:02:14.800
+and that instance owns two things.
-00:02:20.239 --> 00:02:23.280
-also work on the on the instance
+00:02:14.801 --> 00:02:17.120
+That owns its set of attributes,
-00:02:23.280 --> 00:02:26.720
-so both in nurse's existing code and in
+00:02:17.120 --> 00:02:19.520
+and it owns some methods,
-00:02:26.720 --> 00:02:29.040
-the more standard object oriented Emacs
+00:02:19.521 --> 00:02:23.280
+which also work on the instance.
-00:02:29.040 --> 00:02:30.080
-lisp libraries
+00:02:23.280 --> 00:02:25.680
+Both in Gnus' existing code
-00:02:30.080 --> 00:02:32.480
-this relationship is turned on its head
+00:02:25.681 --> 00:02:28.560
+and in the more standard object-oriented
-00:02:32.480 --> 00:02:34.080
-a little bit
+00:02:28.561 --> 00:02:31.680
+Emacs Lisp libraries, this relationship
-00:02:34.080 --> 00:02:37.599
-in that data slots and
+00:02:31.681 --> 00:02:34.080
+is turned on its head a little bit,
-00:02:37.599 --> 00:02:40.239
-uh and instance methods are defined
+00:02:34.080 --> 00:02:39.599
+in that data slots and instance methods
-00:02:40.239 --> 00:02:41.360
-outside of the
+00:02:39.600 --> 00:02:41.760
+are defined outside of the class
-00:02:41.360 --> 00:02:42.959
-class or the instances themselves so
+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
+They are top-level definitions.
00:02:45.040 --> 00:02:46.879
-so we'll get to what that means in the
+We'll get to what that means
-00:02:46.879 --> 00:02:48.319
-in the newer libraries um
+00:02:46.879 --> 00:02:48.720
+in the newer libraries in a bit,
-00:02:48.319 --> 00:02:49.840
-in a bit but uh first I want to talk
+00:02:48.721 --> 00:02:49.920
+but first I want to talk about
-00:02:49.840 --> 00:02:51.760
-about how news does this and in order to
+00:02:49.921 --> 00:02:51.280
+how Gnus does this.
-00:02:51.760 --> 00:02:54.319
-do that we are going to go deep into
+00:02:51.281 --> 00:02:52.160
+In order to do that,
-00:02:54.319 --> 00:02:57.440
-the darkest corner of the new co source
+00:02:52.161 --> 00:02:54.319
+we are going to go deep into
-00:02:57.440 --> 00:02:59.879
-code tree to a library called
+00:02:54.319 --> 00:02:55.760
+the darkest corner
-00:02:59.879 --> 00:03:02.879
-nno.l very cryptically
+00:02:55.761 --> 00:02:58.080
+of the Gnus source code tree
-00:03:02.879 --> 00:03:05.040
-titled uh library and when we open it up
+00:02:58.081 --> 00:03:01.440
+to a library called nnoo.el,
-00:03:05.040 --> 00:03:06.800
-we find
+00:03:01.441 --> 00:03:04.080
+very cryptically-titled library,
-00:03:06.800 --> 00:03:09.519
-a library with no code comments and
+00:03:04.081 --> 00:03:06.800
+and when we open it up, we find
-00:03:09.519 --> 00:03:11.040
-almost no doc strings
+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
+Almost as if Lars was a little ashamed--
00:03:12.800 --> 00:03:14.159
-not ashamed but knew he was doing
+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:19.040
-and didn't want anyone to see so
+00:03:16.000 --> 00:03:18.080
+and didn't want anyone to see.
-00:03:19.040 --> 00:03:21.040
-this file contains the the object
+00:03:18.081 --> 00:03:20.560
+So this file contains
-00:03:21.040 --> 00:03:22.400
-oriented mechanism
+00:03:20.561 --> 00:03:22.400
+the object-oriented mechanism
-00:03:22.400 --> 00:03:24.480
-whereby you can define different kinds
+00:03:22.400 --> 00:03:23.920
+whereby you can define
-00:03:24.480 --> 00:03:25.760
-of back ends for news
+00:03:23.921 --> 00:03:25.760
+different kinds of backends for Gnus,
-00:03:25.760 --> 00:03:27.280
-and then those back ends can be
+00:03:25.760 --> 00:03:26.799
+and then those backends
-00:03:27.280 --> 00:03:29.760
-instantiated as individual
+00:03:26.800 --> 00:03:30.879
+can be instantiated as individual servers.
-00:03:29.760 --> 00:03:32.480
-servers and as you define these backends
+00:03:30.880 --> 00:03:32.480
+As you define these backends,
-00:03:32.480 --> 00:03:33.360
-you're supposed to use
+00:03:32.480 --> 00:03:34.319
+you're supposed to use two macros,
-00:03:33.360 --> 00:03:36.000
-two macros which you can see here one is
+00:03:34.320 --> 00:03:35.680
+which you can see here.
-00:03:36.000 --> 00:03:36.640
-called def
+00:03:35.681 --> 00:03:37.280
+One is called defvoo,
-00:03:36.640 --> 00:03:39.599
-vu and one is called defu and if you
+00:03:37.281 --> 00:03:39.440
+and one is called deffoo.
-00:03:39.599 --> 00:03:41.280
-look at the definitions the definitions
+00:03:39.441 --> 00:03:40.400
+If you look at the definitions,
-00:03:41.280 --> 00:03:43.280
-look pretty simple here def vu basically
+00:03:40.401 --> 00:03:41.920
+the definitions look pretty simple.
-00:03:43.280 --> 00:03:45.440
-turns into a def var
+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 defund
+and foo turns into a defun.
00:03:49.040 --> 00:03:52.239
-and along with those basic definitions
+Along with those basic definitions,
00:03:52.239 --> 00:03:55.760
-the library also does some registration
+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.080
-it saves them in the structure
-
-00:04:00.080 --> 00:04:01.840
-for later use so that we know that those
-
-00:04:01.840 --> 00:04:03.360
-are meant to be
-
-00:04:03.360 --> 00:04:05.280
-uh attributes and methods that are used
+memoization, caching of those variables.
-00:04:05.280 --> 00:04:06.640
-with instances
+00:03:58.720 --> 00:04:00.879
+It saves them in the structure for later use,
-00:04:06.640 --> 00:04:08.000
-with server instances but you can see
+00:04:00.880 --> 00:04:03.360
+so that we know that those are meant to be
-00:04:08.000 --> 00:04:09.280
-that there's no server instance
+00:04:03.360 --> 00:04:04.799
+attributes and methods
-00:04:09.280 --> 00:04:10.560
-definition here there's no
+00:04:04.800 --> 00:04:06.640
+that are used with instances,
-00:04:10.560 --> 00:04:13.200
-like no nothing these are top level
+00:04:06.640 --> 00:04:07.519
+with server instances.
-00:04:13.200 --> 00:04:14.239
-these are top level
+00:04:07.520 --> 00:04:08.159
+But you can see that
-00:04:14.239 --> 00:04:18.160
-definitions so really data attributes
+00:04:08.160 --> 00:04:10.000
+there's no server instance definition here.
-00:04:18.160 --> 00:04:18.639
-for
+00:04:10.001 --> 00:04:12.159
+There's no, like, no nothing.
-00:04:18.639 --> 00:04:22.000
-new servers and
+00:04:12.160 --> 00:04:14.799
+These are top-level definitions,
-00:04:22.000 --> 00:04:23.840
-methods or functions that operate on
+00:04:14.800 --> 00:04:20.239
+so really, data attributes for new servers
-00:04:23.840 --> 00:04:25.440
-those instances are completely
+00:04:20.240 --> 00:04:23.040
+and methods or functions
-00:04:25.440 --> 00:04:28.400
-separate mechanisms they don't really
+00:04:23.041 --> 00:04:24.639
+that operate on those instances
-00:04:28.400 --> 00:04:29.600
-have anything to do with each other they
+00:04:24.640 --> 00:04:27.840
+are completely separate mechanisms.
-00:04:29.600 --> 00:04:31.680
-don't belong to the same data structures
+00:04:27.841 --> 00:04:29.040
+They don't really have anything to do
-00:04:31.680 --> 00:04:37.120
-so how do they work follow me
+00:04:29.041 --> 00:04:29.520
+with each other.
-00:04:37.120 --> 00:04:39.520
-aka methods and attributes these are all
+00:04:29.521 --> 00:04:31.680
+They don't belong to the same data structures.
-00:04:39.520 --> 00:04:41.360
-the things I just said
+00:04:31.680 --> 00:04:34.080
+So how do they work?
-00:04:41.360 --> 00:04:44.479
-so when you define a
+00:04:34.081 --> 00:04:37.120
+Follow me. deffoo and defvoo,
-00:04:44.479 --> 00:04:48.560
-a backend type
+00:04:37.120 --> 00:04:38.960
+aka methods and attributes,
-00:04:48.560 --> 00:04:51.199
-in noose what you get is this a
+00:04:38.961 --> 00:04:41.360
+these are all the things I just said.
-00:04:51.199 --> 00:04:52.400
-definition a list
+00:04:41.360 --> 00:04:50.240
+So when you define a a backend type in Gnus,
-00:04:52.400 --> 00:04:54.080
-and it'll say there is such a back end
+00:04:50.241 --> 00:04:52.400
+what you get is this: a definition, a list.
-00:04:54.080 --> 00:04:55.520
-as nnml
+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 uh data attributes
+and these are its data attributes
-00:04:58.880 --> 00:04:59.520
-that any
+00:04:58.880 --> 00:05:01.039
+that any given instance can have,
-00:04:59.520 --> 00:05:01.840
-given instance can have and then these
+00:05:01.040 --> 00:05:04.720
+and then these are the functions or methods
-00:05:01.840 --> 00:05:02.960
-are
+00:05:04.721 --> 00:05:06.880
+that are defined to operate on
-00:05:02.960 --> 00:05:04.960
-the functions or methods that are
+00:05:06.880 --> 00:05:08.240
+an instance of this backend,
-00:05:04.960 --> 00:05:06.880
-defined to operate on
+00:05:08.241 --> 00:05:09.600
+so a server that belongs to
-00:05:06.880 --> 00:05:08.960
-an instance of this backend so a server
+00:05:09.601 --> 00:05:12.160
+the nnml backend.
-00:05:08.960 --> 00:05:11.440
-that belongs to the nnml
+00:05:12.161 --> 00:05:13.600
+So at least we have this data here.
-00:05:11.440 --> 00:05:13.360
-backend so at least we have this data
+00:05:13.601 --> 00:05:16.080
+That's handy. We don't really touch that.
-00:05:13.360 --> 00:05:15.120
-here so that's that's handy we don't you
+00:05:16.081 --> 00:05:19.600
+That's, like, very, very, very deep Gnus code
-00:05:15.120 --> 00:05:16.880
-don't really touch that that's like very
+00:05:19.601 --> 00:05:20.560
+that doesn't really come up
-00:05:16.880 --> 00:05:18.000
-very very deep
+00:05:20.560 --> 00:05:25.199
+even as a bug squasher or whatever.
-00:05:18.000 --> 00:05:20.560
-um use code that doesn't really come up
+00:05:25.200 --> 00:05:26.160
+We don't touch that very often,
-00:05:20.560 --> 00:05:22.560
-even as a
+00:05:26.161 --> 00:05:26.800
+but there they are,
-00:05:22.560 --> 00:05:25.280
-even as a bug squasher or whatever we
+00:05:26.801 --> 00:05:29.199
+and that's how they work.
-00:05:25.280 --> 00:05:26.479
-don't touch that very often but there
+00:05:29.200 --> 00:05:31.039
+Now the next thing that obviously
-00:05:26.479 --> 00:05:27.280
-they are and that's
+00:05:31.040 --> 00:05:32.080
+you want to know is, okay,
-00:05:27.280 --> 00:05:30.400
-that's how they work now the next thing
+00:05:32.080 --> 00:05:33.759
+where are... if I've started up Gnus,
-00:05:30.400 --> 00:05:32.080
-that obviously you want to know is okay
+00:05:33.760 --> 00:05:35.039
+where are my servers?
-00:05:32.080 --> 00:05:34.000
-where are if I've started up news where
+00:05:35.039 --> 00:05:36.880
+Where are these server objects,
-00:05:34.000 --> 00:05:35.039
-are my servers
+00:05:36.881 --> 00:05:40.479
+since this is object-oriented programming?
-00:05:35.039 --> 00:05:37.199
-uh where are these server objects since
+00:05:40.480 --> 00:05:41.520
+And the weird thing
-00:05:37.199 --> 00:05:39.199
-this is object oriented
+00:05:41.521 --> 00:05:43.759
+that you will eventually figure out
-00:05:39.199 --> 00:05:41.840
-programming and the weird thing that you
+00:05:43.760 --> 00:05:45.680
+(in some cases, after years of poking around)
-00:05:41.840 --> 00:05:43.199
-will eventually
+00:05:45.681 --> 00:05:46.880
+in the Gnus source code
-00:05:43.199 --> 00:05:45.199
-figure out in some cases after years of
+00:05:46.880 --> 00:05:48.880
+is that servers do not exist
-00:05:45.199 --> 00:05:46.880
-poking around in the new source code
+00:05:48.881 --> 00:05:51.360
+in an ontological, philosophical sense,
-00:05:46.880 --> 00:05:49.199
-is that servers do not exist in an
+00:05:51.361 --> 00:05:55.280
+as objects. The primary data structures of Gnus
-00:05:49.199 --> 00:05:50.320
-ontological
+00:05:55.281 --> 00:05:58.160
+are groups, and in sort of
-00:05:50.320 --> 00:05:53.440
-philosophical sense as objects the
+00:05:58.161 --> 00:06:00.560
+an object-oriented hierarchical mindset,
-00:05:53.440 --> 00:05:55.440
-primary data structures of noose are
+00:06:00.561 --> 00:06:03.039
+you'd think, well, groups belong to servers,
-00:05:55.440 --> 00:05:57.039
-groups
+00:06:03.040 --> 00:06:05.759
+so servers must exist, but they don't.
-00:05:57.039 --> 00:05:58.960
-and in sort of an object-oriented
+00:06:05.759 --> 00:06:07.840
+Each group... And here you can see
-00:05:58.960 --> 00:06:00.720
-hierarchical you know mindset you'd
-
-00:06:00.720 --> 00:06:01.759
-think well
-
-00:06:01.759 --> 00:06:03.759
-groups belong to servers so servers must
-
-00:06:03.759 --> 00:06:05.759
-exist but they don't
-
-00:06:05.759 --> 00:06:08.000
-each group and here you can see some
-
-00:06:08.000 --> 00:06:09.360
-examples of groups
+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
+These are basically the data structures
-00:06:11.199 --> 00:06:13.039
-that represent a group each group also
+00:06:11.199 --> 00:06:12.240
+that represent a group.
-00:06:13.039 --> 00:06:14.960
-has a little entry here that
+00:06:12.241 --> 00:06:14.160
+Each group also has a little entry here
-00:06:14.960 --> 00:06:17.039
-that tells you what server it belongs to
+00:06:14.161 --> 00:06:17.039
+that tells you what server it belongs to,
-00:06:17.039 --> 00:06:18.000
-and each group
+00:06:17.039 --> 00:06:20.080
+and each group replicates that data,
-00:06:18.000 --> 00:06:20.479
-replicates that data uh saying which
+00:06:20.081 --> 00:06:21.600
+saying which server it belongs to.
-00:06:20.479 --> 00:06:23.120
-server it belongs to and so when
+00:06:21.601 --> 00:06:24.000
+So when Gnus is going through
-00:06:23.120 --> 00:06:24.479
-nurse is going through doing its
+00:06:24.001 --> 00:06:25.280
+doing its business,
-00:06:24.479 --> 00:06:26.160
-business uh trying to figure out what's
+00:06:25.281 --> 00:06:27.039
+trying to figure out updating mail
-00:06:26.160 --> 00:06:27.680
-like updating mail from the groups or
+00:06:27.040 --> 00:06:28.479
+from the groups or whatever,
-00:06:27.680 --> 00:06:29.840
-whatever almost every time
+00:06:28.480 --> 00:06:30.960
+almost every time, it will cycle through
-00:06:29.840 --> 00:06:31.600
-it will cycle through all the list of
-
-00:06:31.600 --> 00:06:32.960
-groups it'll
+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:36.720
-and it will categorize the groups by
+It'll look at all the server definitions,
-00:06:36.720 --> 00:06:38.160
-server
+00:06:34.960 --> 00:06:38.160
+and it will categorize the groups by server,
-00:06:38.160 --> 00:06:41.120
-which which is just weird because you're
+00:06:38.160 --> 00:06:40.000
+which is just weird,
-00:06:41.120 --> 00:06:42.160
-sort of looking for okay where does the
+00:06:40.001 --> 00:06:41.680
+because you're sort of looking for...
-00:06:42.160 --> 00:06:43.840
-server exist it doesn't exist it's put
+00:06:41.681 --> 00:06:42.720
+okay, where does the server exist?
-00:06:43.840 --> 00:06:44.479
-together
+00:06:42.721 --> 00:06:43.440
+It doesn't exist.
-00:06:44.479 --> 00:06:48.319
-every time uh out of out of code
+00:06:43.441 --> 00:06:46.240
+It's put together every time
-00:06:48.319 --> 00:06:50.400
-elsewhere in the news code base
+00:06:46.241 --> 00:06:50.400
+out of code elsewhere in the Gnus code base,
-00:06:50.400 --> 00:06:51.840
-specifically from these group
+00:06:50.400 --> 00:06:53.599
+specifically from these group definitions.
-00:06:51.840 --> 00:06:54.080
-these group definitions and so this is
+00:06:53.600 --> 00:06:54.479
+So this is very odd,
-00:06:54.080 --> 00:06:55.199
-very odd because
+00:06:54.480 --> 00:06:56.319
+because in some sense...
-00:06:55.199 --> 00:06:58.080
-in in some sense like here this one its
+00:06:56.320 --> 00:06:59.360
+Like here, this one, its server is nnml
-00:06:58.080 --> 00:06:58.720
-server is
+00:06:59.361 --> 00:07:01.680
+and an empty string,
-00:06:58.720 --> 00:07:02.240
-nnml and an empty string so there's a
+00:07:01.681 --> 00:07:02.880
+so there's a certain sense here
-00:07:02.240 --> 00:07:03.919
-certain sense here in which this server
+00:07:02.881 --> 00:07:04.720
+in which this server is not really
-00:07:03.919 --> 00:07:04.479
-is not
+00:07:04.721 --> 00:07:06.160
+an object at all. What it is
-00:07:04.479 --> 00:07:06.400
-really an object at all what it is is a
+00:07:06.161 --> 00:07:07.120
+is a set of instructions
-00:07:06.400 --> 00:07:07.759
-set of instructions for how to find
+00:07:07.121 --> 00:07:08.560
+for how to find messages,
-00:07:07.759 --> 00:07:08.560
-messages
+00:07:08.560 --> 00:07:10.319
+and this set of instructions is:
-00:07:08.560 --> 00:07:11.199
-and this set of instructions is go to
+00:07:10.320 --> 00:07:12.000
+go to the default place
-00:07:11.199 --> 00:07:12.800
-the default place where the user
+00:07:12.001 --> 00:07:14.000
+where the user might have their mail
-00:07:12.800 --> 00:07:15.440
-might have their mail and expect to find
+00:07:14.001 --> 00:07:16.319
+and expect to find messages there
-00:07:15.440 --> 00:07:16.000
-messages
+00:07:16.320 --> 00:07:18.479
+in an nnml format, which is basically
-00:07:16.000 --> 00:07:18.080
-there in an nml format which is
+00:07:18.480 --> 00:07:21.759
+just one message per file.
-00:07:18.080 --> 00:07:19.840
-basically just one message per
+00:07:21.760 --> 00:07:22.720
+Any number of groups could have
-00:07:19.840 --> 00:07:22.479
-um per file and any number of groups
+00:07:22.721 --> 00:07:24.400
+those same instructions, but they're not...
-00:07:22.479 --> 00:07:23.840
-could have those same instructions uh
-
-00:07:23.840 --> 00:07:25.440
-but they're not it's not really a thing
+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
+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.240
-and on the other end of the spectrum you
+It's more of a procedural instruction.
-00:07:30.240 --> 00:07:31.919
-might have an nni map
+00:07:28.639 --> 00:07:30.160
+On the other end of the spectrum,
-00:07:31.919 --> 00:07:33.599
-server which very much is a thing it has
+00:07:30.161 --> 00:07:32.240
+you might have an nnimap server,
-00:07:33.599 --> 00:07:35.840
-its own it has its own server its own
+00:07:32.241 --> 00:07:33.280
+which very much is a thing.
-00:07:35.840 --> 00:07:37.759
-port its own authentication
+00:07:33.281 --> 00:07:36.160
+It has its own server, its own port,
-00:07:37.759 --> 00:07:40.240
-system so some of the servers are more
+00:07:36.161 --> 00:07:38.960
+its own authentication system.
-00:07:40.240 --> 00:07:41.360
-like things some of the servers are more
+00:07:38.961 --> 00:07:40.639
+So some of the servers are more like things,
-00:07:41.360 --> 00:07:42.400
-like instructions
+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 news works right now um these
+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
+just instruction sets,
00:07:48.879 --> 00:07:50.879
-and and there's no place where you can
+and there's no place where you can
-00:07:50.879 --> 00:07:53.120
-go and find them there's no one central
+00:07:50.880 --> 00:07:51.840
+go and find them.
-00:07:53.120 --> 00:07:55.360
-uh variable that defines them all so how
+00:07:51.841 --> 00:07:53.680
+There's no one central variable
-00:07:55.360 --> 00:07:56.160
-do the
+00:07:53.681 --> 00:07:56.160
+that defines them all. So how do the...
-00:07:56.160 --> 00:07:57.520
-um so we'll talk about the methods in a
+00:07:56.160 --> 00:07:57.759
+We'll talk about the methods in a second.
-00:07:57.520 --> 00:07:59.520
-second how do the data attributes work
+00:07:57.760 --> 00:07:59.520
+How do the data attributes work?
00:07:59.520 --> 00:08:02.639
-uh put very crudely um
+Put very crudely,
00:08:02.639 --> 00:08:04.479
-your servers when they're put together
+your servers, when they're put together,
-00:08:04.479 --> 00:08:05.919
-uh they are okay they are
+00:08:04.479 --> 00:08:06.879
+they are kept in a variable,
-00:08:05.919 --> 00:08:08.080
-kept in a variable and it's called nno
+00:08:06.880 --> 00:08:08.080
+and it's called nnoo
00:08:08.080 --> 00:08:08.960
nno
diff --git a/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt b/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt
index d9a406f9..cb262355 100644
--- a/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt
+++ b/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt
@@ -1,13 +1,13 @@
WEBVTT
00:00:03.600 --> 00:00:04.560
-hello
+Hello.
00:00:04.560 --> 00:00:06.720
-hopefully everyone is staying safe and
+Hopefully everyone is staying safe and
00:00:06.720 --> 00:00:08.000
-staying home
+staying home,
00:00:08.000 --> 00:00:10.000
I feel very grateful to live in a world
@@ -19,124 +19,124 @@ today that technology and free software
can be leveraged to connect people in
00:00:13.759 --> 00:00:16.080
-such disconnected and difficult times
+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
+this. Hopefully you've all
00:00:19.920 --> 00:00:22.960
-enjoyed this year's Emacs con so far
+enjoyed this year's EmacsConf so far.
00:00:22.960 --> 00:00:24.720
-many thanks to all the people that made
+Many thanks to all the people that made
00:00:24.720 --> 00:00:26.880
-this possible
+this possible.
00:00:26.880 --> 00:00:30.000
-anyways welcome to my talk extend Emacs
+Anyways, welcome to my talk "Extend Emacs
00:00:30.000 --> 00:00:30.960
-to modern gui
+to Modern GUI
00:00:30.960 --> 00:00:34.079
-applications with eaf the imax
+Applications with EAF, the Emacs
00:00:34.079 --> 00:00:35.920
-application framework
+Application Framework".
00:00:35.920 --> 00:00:38.320
-this will be my first ever talk so
+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
+inexperience, let us begin.
00:00:43.280 --> 00:00:46.559
-about me my name is matthew zing you can
+About me: my name is Matthew Zeng, you can
00:00:46.559 --> 00:00:47.840
-also call me mt
+also call me MT
00:00:47.840 --> 00:00:50.640
-or mindu I'm a chinese canadian living
+or Mingde. I'm a Chinese Canadian living
00:00:50.640 --> 00:00:51.440
-in toronto
+in Toronto,
00:00:51.440 --> 00:00:54.239
-ontario offline I'm an undergrad
+Ontario. Offline: I'm an undergrad
00:00:54.239 --> 00:00:56.079
-studying mathematics at the university
+studying mathematics at the University
00:00:56.079 --> 00:00:57.760
-of urudu
+of Waterloo.
00:00:57.760 --> 00:01:00.480
-online I mean one of the admins of the
+Online: I'm one of the admins of the
00:01:00.480 --> 00:01:03.039
-Emacs china
+Emacs China
00:01:03.039 --> 00:01:06.320
-the largest Emacs forum in china so
+— the largest Emacs forum in China. So,
00:01:06.320 --> 00:01:08.080
-to all chinese listen to my talk right
+to all Chinese listening to my talk right
00:01:08.080 --> 00:01:10.960
-now feel free to check it out
+now, feel free to check it out.
00:01:10.960 --> 00:01:14.320
-and this is a link to my github profile
+And this is a link to my GitHub profile,
-00:01:14.320 --> 00:01:17.280
-to my projects I'm involving one's me
+00:01:14.320 --> 00:01:16.206
+(and) to my projects I'm involved in.
-00:01:17.280 --> 00:01:18.240
-max which is
+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
+I'm the author of — a user-friendly
00:01:20.159 --> 00:01:21.840
-full-featured image configuration
+full-featured Emacs configuration
00:01:21.840 --> 00:01:22.799
-distribution
+distribution,
00:01:22.799 --> 00:01:25.040
-it is what I'm using right now as well
+it is what I'm using right now, as well
00:01:25.040 --> 00:01:26.880
-as the imax application filter
+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 other
+other author
00:01:30.400 --> 00:01:33.040
-lazy cat which of course is today's
+lazycat, which of course, is today's
00:01:33.040 --> 00:01:35.759
-topic
+topic.
00:01:35.759 --> 00:01:38.720
-so as you might all might have already
+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 oh and opening navigating closing
+and opening navigating closing
00:01:43.600 --> 00:01:45.360
all these websites that are rendered
@@ -145,19 +145,19 @@ all these websites that are rendered
properly
00:01:46.159 --> 00:01:49.200
-or within Emacs it's all thanks to the
+all within Emacs, it's all thanks to the
00:01:49.200 --> 00:01:51.840
-ef project
+EAF project.
00:01:51.840 --> 00:01:54.000
-so we're living in a society that's
+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
+and multimedia, it is unavoidable to run
00:01:59.520 --> 00:02:01.200
to some occasion that you need to
@@ -166,13 +166,13 @@ to some occasion that you need to
open a fancy website that uses
00:02:02.880 --> 00:02:04.799
-javascript and css
+JavaScript and CSS,
00:02:04.799 --> 00:02:08.239
-or you need to watch some videos however
+or you need to watch some videos. However,
00:02:08.239 --> 00:02:11.120
-due to the nature and history of Emacs
+due to the nature and history of Emacs,
00:02:11.120 --> 00:02:11.840
it cannot
@@ -181,19 +181,19 @@ it cannot
render all these modern graphics
00:02:13.840 --> 00:02:16.400
-effectively and efficiently
+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
+environment,
00:02:20.400 --> 00:02:23.520
-and I argue that this is not a bad thing
+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
+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
@@ -202,28 +202,28 @@ and I believe many of you as well
are attracted to Emacs in the first
00:02:29.760 --> 00:02:30.879
-place
+place.
00:02:30.879 --> 00:02:33.760
-unfortunately this results in us having
+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
+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 render to read some
+some videos, or a PDF renderer to read some
00:02:41.440 --> 00:02:42.640
-documents
+documents.
00:02:42.640 --> 00:02:45.200
-so far ems cannot do all these tasks on
+So far Emacs cannot do all these tasks on
00:02:45.200 --> 00:02:46.000
its own
@@ -232,40 +232,40 @@ its own
but can only be achieved using other
00:02:48.080 --> 00:02:51.519
-external applications
+external applications.
00:02:51.519 --> 00:02:55.840
-so the other the author manatee lazy cat
+So, the other author manateelazycat,
00:02:55.840 --> 00:02:58.640
-or lazy cat in short didn't want to use
+or lazycat in short, didn't want to use
00:02:58.640 --> 00:03:00.560
-all these external applications
+all these external applications,
00:03:00.560 --> 00:03:03.120
-he wanted to have an uninterrupted e-max
+he wanted to have an uninterrupted Emacs
00:03:03.120 --> 00:03:04.159
-experience
+experience,
00:03:04.159 --> 00:03:07.280
-he wanted to truly live in e-max
+he wanted to truly live in Emacs.
00:03:07.280 --> 00:03:10.080
-however it would be a lot of work to
+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
+modern application from scratch, there's
00:03:13.519 --> 00:03:16.239
-simply no time or research to do that
+simply no time or research to do that.
00:03:16.239 --> 00:03:18.800
-so lazy car without utilizing existing
+So, lazycat thought of utilizing existing
00:03:18.800 --> 00:03:20.400
applications
@@ -274,193 +274,193 @@ applications
and to try to make it collaborate with
00:03:22.319 --> 00:03:24.959
-Emacs there are many solutions available
+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 e-max x windows manager and I'm
+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
+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
+the EXWM. However, it didn't work for him,
00:03:33.360 --> 00:03:35.200
-because although ux doubling opens the
+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
+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
+modify,
00:03:41.519 --> 00:03:43.920
-customize or extend other software from
+customize, or extend other software from
00:03:43.920 --> 00:03:45.040
-Emacs
+Emacs.
00:03:45.040 --> 00:03:46.799
-for example it cannot modify the
+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
+Chromium or
00:03:49.599 --> 00:03:52.159
-pdf viewer therefore it cannot utilize
+PDF viewer, therefore it cannot utilize
00:03:52.159 --> 00:03:54.000
-the rich emax ecosystem that's been
+the rich Emacs ecosystem that's been
00:03:54.000 --> 00:03:57.360
-growing for almost 40 years
+growing for almost 40 years.
00:03:57.360 --> 00:04:00.720
-on the other hand in the ef browser so
+On the other hand, in the EAF browser, so,
-00:04:00.720 --> 00:04:03.760
-if you mx ef open
+00:04:00.720 --> 00:04:06.206
+if you M-x eaf-open-browser-with-history,
-00:04:03.760 --> 00:04:07.200
-browser with history you can see
+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
+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
+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
-into or search for some keyword and in a
+to or search for some keyword in a
00:04:19.440 --> 00:04:21.840
-search engine
+search engine.
00:04:21.840 --> 00:04:24.240
-so this is all achieved by utilizing the
+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
+Emacs ecosystem — ivy.
00:04:29.280 --> 00:04:31.120
-so this car decided to develop a
+So, lazycat decided to develop a
00:04:31.120 --> 00:04:33.680
-solution of its own in 2018
+solution of his own in 2018,
00:04:33.680 --> 00:04:36.960
-namely the eaf project so I joined the
+namely the EAF project, so, I joined the
-00:04:36.960 --> 00:04:40.840
-development last year
+00:04:36.960 --> 00:04:42.756
+development last year, 2019.
-00:04:40.840 --> 00:04:44.000
-2019 ef is
+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
-reapplication framework that extends
+GUI application framework that extends
-00:04:49.759 --> 00:04:52.160
-imax to graphical capabilities using pi
+00:04:49.759 --> 00:04:52.056
+Emacs to graphical capabilities using
-00:04:52.160 --> 00:04:57.840
-qd5 and it is not a window manager
+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
+Alright. So, in the README, you can see a
00:05:02.479 --> 00:05:03.440
-list of gifs
+list of GIFs
00:05:03.440 --> 00:05:05.600
-showcasing all the available ef
+showcasing all the available EAF
00:05:05.600 --> 00:05:06.720
-applications
+applications,
00:05:06.720 --> 00:05:09.520
-a browser a markdown premier a video
+a browser, a markdown previewer, a video
-00:05:09.520 --> 00:05:10.960
-player
+00:05:09.520 --> 00:05:12.789
+player, a PDF viewer, and more.
-00:05:10.960 --> 00:05:14.240
-a pdf viewer and more today I don't have
+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
+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
+to show you.
00:05:21.120 --> 00:05:24.240
-so since we are already using ef browser
+So, since we are already using EAF browser,
00:05:24.240 --> 00:05:27.840
-we'll start with this besides using the
+we'll start with this. Besides using the
00:05:27.840 --> 00:05:29.600
-classic control n control p
+classic Control n (C-n), Control p (C-p)
00:05:29.600 --> 00:05:32.000
-you can also use the vim style xjkl to
+you can also use the Vim style hjkl to
00:05:32.000 --> 00:05:33.840
-move up or down
+move up or down.
00:05:33.840 --> 00:05:36.320
-also meta shift comma or g to the
+Also, Meta Shift comma (M-<) or g (moves) to the
00:05:36.320 --> 00:05:37.280
-beginning of page
+beginning of page,
00:05:37.280 --> 00:05:39.120
-when that shift period or capital g to
+Meta Shift period (M->) or capital g (moves) to
00:05:39.120 --> 00:05:41.199
-the end of page
+the end of page.
-00:05:41.199 --> 00:05:44.320
-limiting and surfing keys linear and
+00:05:41.199 --> 00:05:45.306
+Vimium and Surfingkeys
-00:05:44.320 --> 00:05:46.479
-surfing keys are popular keyboard-based
+00:05:45.306 --> 00:05:46.479
+are popular keyboard-based
00:05:46.479 --> 00:05:48.400
-browsing techniques in chrome
+browsing techniques in Chrome,
00:05:48.400 --> 00:05:50.479
-and they've imported here as well you
+and they've imported here as well. You
00:05:50.479 --> 00:05:52.720
can press f to toggle markers pointing
@@ -469,682 +469,655 @@ can press f to toggle markers pointing
to
00:05:53.039 --> 00:05:55.280
-all the links in the current page say I
+all the links in the current page, say, I
00:05:55.280 --> 00:05:56.960
-want to visit the wiki
+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 ef to your liking
+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
+dd,
00:06:05.440 --> 00:06:08.479
-press dd and you enter and now
+press dd and Enter (RET), and now
00:06:08.479 --> 00:06:10.240
-you will navigate it to this link so you
+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
+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
+So, a full list of key bindings can be
00:06:16.560 --> 00:06:17.680
-found when you
+found when you (press)
00:06:17.680 --> 00:06:20.560
-control hm just as any other max major
+Control h m (C-h m), just as any other Emacs major
00:06:20.560 --> 00:06:21.199
-mode
+mode,
00:06:21.199 --> 00:06:22.960
-so you don't have to remember everything
+so you don't have to remember everything…
00:06:22.960 --> 00:06:25.600
-all the key bindings I said to you
+all the key bindings I said to you.
00:06:25.600 --> 00:06:28.560
-so this is a global binding application
+So, this is a global binding application
00:06:28.560 --> 00:06:30.960
-to every other ef application as well
-
-00:06:30.960 --> 00:06:34.319
-so you can find it under the week or or
+to every other EAF application as well.
-00:06:34.319 --> 00:06:36.720
-you can find it under the wiki in the
+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
-key binding
+keybindings
00:06:37.600 --> 00:06:40.639
-section so press f again and use
+section, so press f again and use
00:06:40.639 --> 00:06:44.240
-ns press enter now you're in the key
+ns, press Enter (RET), now you're in the
00:06:44.240 --> 00:06:45.600
-binding web page
+keybindings web page.
00:06:45.600 --> 00:06:47.520
-you can see all of the key buttons
+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
-es application and you can try them out
+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.360
-using ef
+00:06:56.479 --> 00:06:57.956
+using eaf-bind-key,
-00:06:57.360 --> 00:07:00.240
-bank key you can customize control n as
+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 to
+in the web page
00:07:02.960 --> 00:07:05.759
-to scroll up in the ef pdf viewer or you
+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:09.599
-an existing binding using using yet bank
+00:07:06.639 --> 00:07:08.806
+an existing binding using
-00:07:09.599 --> 00:07:10.000
-key
+00:07:08.806 --> 00:07:10.000
+eaf-bind-key,
00:07:10.000 --> 00:07:14.840
-binder to new so it doesn't bind to
+bind it to nil, so it doesn't bind to
00:07:14.840 --> 00:07:16.160
-anything
+anything.
00:07:16.160 --> 00:07:20.319
-okay so here comes the important part
+Okay, so, here comes the important part,
00:07:20.319 --> 00:07:22.479
-if you want to customize ef you should
+if you want to customize EAF, you should
00:07:22.479 --> 00:07:25.440
-visit the customization page in the wiki
+visit the customization page in the wiki.
00:07:25.440 --> 00:07:28.840
-so now I press meta b to go back in
+Now, I press Meta b to go back in
00:07:28.840 --> 00:07:30.240
-history and
+history, and
00:07:30.240 --> 00:07:32.960
-go to the customization package press f
+go to the customization page, press f,
00:07:32.960 --> 00:07:34.080
-press a d
+press ad,
00:07:34.080 --> 00:07:36.639
-enter and now we're in the customization
+Enter, and now we're in the customization
00:07:36.639 --> 00:07:37.360
-page
+page.
00:07:37.360 --> 00:07:39.280
-so the first customization option you
+So, the first customization option you
00:07:39.280 --> 00:07:42.639
-see is dark mode
+see is dark mode,
00:07:42.639 --> 00:07:44.479
-let's say if you want to turn on the doc
+let's say, if you want to turn on the dark
00:07:44.479 --> 00:07:46.720
-mode for ef browser
+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
+do all this stuff.
00:07:49.919 --> 00:07:53.360
-you press c and you can select
+You press c, and you can select
00:07:53.360 --> 00:07:55.840
-c to toggle the correct browsing you can
+c to toggle the caret browsing, you can
00:07:55.840 --> 00:07:58.240
-see a lot of markers available
+see a lot of markers available,
00:07:58.240 --> 00:08:01.280
-pop um again but they're not they're not
+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
+paragraphs.
00:08:03.599 --> 00:08:05.360
-you select the paragraph or your choice
+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
+ls which comes here,
00:08:10.240 --> 00:08:12.720
-and then you just you just move the
+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:23.280
-and use meta w to
-
-00:08:23.280 --> 00:08:25.680
-excuse me metadata to copy the taste the
+in Emacs, and now you select everything
-00:08:25.680 --> 00:08:26.479
-text
+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 made a shift column to evaluate
+Now, we (run) Meta Shift colon (M-:) to evaluate
00:08:29.199 --> 00:08:30.960
-what we just copied
+what we just copied,
00:08:30.960 --> 00:08:35.120
-and set that to true and
+and set that to true, and
00:08:35.120 --> 00:08:38.320
-press r or f5 to refresh the page
+press r or F5 to refresh the page,
00:08:38.320 --> 00:08:42.159
-voila we have the dark mode enabled
+voilà we have the dark mode enabled.
00:08:42.159 --> 00:08:44.880
-so there are well let's take a toggle
+So, there are…, well, let's toggle
00:08:44.880 --> 00:08:46.160
-back off for now
+it back off for now.
00:08:46.160 --> 00:08:49.360
-now we made our shift column again
+Now, we (run) Meta Shift colon (M-:) again,
00:08:49.360 --> 00:08:51.600
-and we find the the one we just used and
+and we find the one we just used, and
00:08:51.600 --> 00:08:53.519
-change it back to false
+change it back to false,
00:08:53.519 --> 00:08:56.880
-and refresh the page back in the light
+and refresh the page, back in the light
00:08:56.880 --> 00:08:59.360
-mode
+mode.
00:08:59.360 --> 00:09:02.160
-so there are many other customization
+So, there are many other customization
00:09:02.160 --> 00:09:03.680
-options available you can either
+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
+to your Emacs configuration file.
00:09:08.000 --> 00:09:11.680
-so in this wiki you can have you can
+So, in this wiki…,
00:09:11.680 --> 00:09:14.399
-you can make the ef browser to to
+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
+similar to the Chromium setting.
00:09:20.160 --> 00:09:22.800
-and you can make yes the default browser
+You can make EAF the default browser
00:09:22.800 --> 00:09:23.839
-Emacs by
+(in) Emacs by
00:09:23.839 --> 00:09:26.720
-aliasing aliasing browse web to your
+aliasing browse-web to
00:09:26.720 --> 00:09:27.680
-open browser
+eaf-open-browser,
-00:09:27.680 --> 00:09:30.399
-or or set the browse url browser
-
-00:09:30.399 --> 00:09:31.200
-function to
+00:09:27.680 --> 00:09:31.200
+or set the browse-url-browser-function to
00:09:31.200 --> 00:09:33.519
-open browser there's just some tricks
+eaf-open-browser, there's just some tricks.
00:09:33.519 --> 00:09:34.480
-and there are also
+And there (is) also
00:09:34.480 --> 00:09:37.920
-uh an experimental app blocker currently
+an experimental adblocker currently
00:09:37.920 --> 00:09:41.680
-take in place and so therefore it can
+in place, therefore it can
00:09:41.680 --> 00:09:44.720
-block some elements but not all so
+block some elements but not all, so
00:09:44.720 --> 00:09:47.279
-we we really encourage people to help us
+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
+add more conditions in.
00:09:51.440 --> 00:09:54.560
-so you can so the ef browser is able to
+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:09:59.920
-be downloaded using
+any files from the internet, and it will
-00:09:59.920 --> 00:10:04.000
-a area too and
+00:09:57.680 --> 00:10:04.000
+be downloaded using Aria2.
-00:10:04.000 --> 00:10:06.079
-you can also customize the ef browser
+00:10:04.000 --> 00:10:05.339
+You can also customize
-00:10:06.079 --> 00:10:07.200
-download path
+00:10:05.339 --> 00:10:07.200
+the eaf-browser-download-path
00:10:07.200 --> 00:10:11.120
-using ef set so it's a function that we
+using eaf-setq, it's a function that we
-00:10:11.120 --> 00:10:14.399
-defined similar to set the normal set we
+00:10:11.120 --> 00:10:13.623
+defined similar to setq,
-00:10:14.399 --> 00:10:15.040
-know
+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
+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
+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
+want. You can also disable
00:10:22.720 --> 00:10:26.079
-saving browsing history so remember
+saving browsing history, so, remember
+
+00:10:26.079 --> 00:10:27.089
+when I press…,
-00:10:26.079 --> 00:10:28.959
-when I press when I use mx you have open
+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
-browser's history I see all the
+history, I see all the
00:10:30.480 --> 00:10:32.079
-histories here but if you want more
+histories here, but if you want more
00:10:32.079 --> 00:10:33.680
-privacy you don't want that to be
+privacy, you don't want that to be
00:10:33.680 --> 00:10:35.360
-available at all you can turn it off
+available at all. You can turn it off
-00:10:35.360 --> 00:10:36.560
-easily with ef
+00:10:35.360 --> 00:10:37.356
+easily with eaf-setq,
-00:10:36.560 --> 00:10:38.720
-set queue and set that remember history
-
-00:10:38.720 --> 00:10:40.640
-to false
+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 say your default search
+You can also set your default search
00:10:42.399 --> 00:10:43.839
-engine so
+engine.
00:10:43.839 --> 00:10:47.200
-so right now we have google although
+Right now we have Google, although
00:10:47.200 --> 00:10:50.480
-not not really good but google and also
+not really good but… Google and also
00:10:50.480 --> 00:10:53.600
-go which is a better search engine
+DuckDuckGo which is a better search engine,
00:10:53.600 --> 00:10:57.360
-well uh yeah ethically better search
+well, yeah, ethically better search
00:10:57.360 --> 00:10:59.360
-engine
+engine.
00:10:59.360 --> 00:11:02.560
-so you can also configure
+So, you can also configure
00:11:02.560 --> 00:11:05.040
-the zoom so the default zoom of your
+the zoom. The default zoom of your
00:11:05.040 --> 00:11:07.600
-browser is 1.0 so you can convert
+browser is 1.0, you can convert
00:11:07.600 --> 00:11:10.000
-convert 3000 to 1.25 so you can so when
+default-zoom to 1.25, so when
00:11:10.000 --> 00:11:11.920
-you open any web page about it will be
-
-00:11:11.920 --> 00:11:14.079
-zoomed
+you open any web page, it will be
-00:11:14.079 --> 00:11:17.360
-by default uh you can
+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
+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
+do, because it will
00:11:23.440 --> 00:11:26.240
-basically break a lot of our features
+basically break a lot of our features,
00:11:26.240 --> 00:11:28.480
-because a lot of the browser browser
+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
+must be implemented using JavaScript,
00:11:33.760 --> 00:11:35.440
-but yeah you can do it if you really
+but yeah, you can do it if you really
00:11:35.440 --> 00:11:37.920
-want to and there also some
+want to. And there's also some
00:11:37.920 --> 00:11:41.519
-customization on ef camera
+customization on EAF Camera
00:11:41.519 --> 00:11:47.760
-you can do as well yeah
+you can do as well.
00:11:47.760 --> 00:11:52.399
-so uh let's move on to efpd viewer
+Let's move on to EAF PDF Viewer.
00:11:52.399 --> 00:11:56.079
-so now now let's open
+Now, let's open
00:11:56.079 --> 00:11:59.440
-the pdf file using af
+the PDF file using EAF.
00:11:59.440 --> 00:12:01.519
-so that's one something already here but
+So, that's one something already here, but
00:12:01.519 --> 00:12:02.720
-let's open it here
+let's open it here.
00:12:02.720 --> 00:12:06.079
-so yes open and
+So, eaf-open, and
00:12:06.079 --> 00:12:08.160
-select introduction to programming in
+select "Introduction to Programming in
00:12:08.160 --> 00:12:11.440
-e-max list
+Emacs Lisp".
00:12:11.440 --> 00:12:13.760
-uh I have it already open but it's okay
+I have it already open, but it's okay.
00:12:13.760 --> 00:12:17.040
-so you have the file
+So, you have the file,
00:12:17.040 --> 00:12:20.160
-you have other files displayed
+you have other files displayed…
00:12:20.160 --> 00:12:22.800
-you have all the pages display story yes
-
-00:12:22.800 --> 00:12:23.200
-and
+you have all the pages display, sorry.
00:12:23.200 --> 00:12:27.040
-there are 273 pages in total but notice
+There are 273 pages in total, but notice
00:12:27.040 --> 00:12:29.279
-like how fast it is to browse
+how fast it is to browse
00:12:29.279 --> 00:12:31.440
-all the pages it is blazingly fast
+all the pages, it is blazingly fast,
00:12:31.440 --> 00:12:33.519
-that's all thanks to python and
+that's all thanks to Python and
00:12:33.519 --> 00:12:37.040
-mupdf which you don't really get from
+MuPDF which you don't really get from
00:12:37.040 --> 00:12:40.880
-Emacs list
+Emacs Lisp.
00:12:40.880 --> 00:12:43.600
-so let's say if I want to jump to page
+So, let's say if I want to jump to page
-00:12:43.600 --> 00:12:44.079
-50
-
-00:12:44.079 --> 00:12:48.639
-we press p and enter 50.
+00:12:43.600 --> 00:12:48.639
+50. We press p and Enter 50.
00:12:48.639 --> 00:12:53.279
-50 and here we are we are at page 50.
+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
+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:02.079
-and you can you can
+verify the page you're on.
-00:13:02.079 --> 00:13:05.120
-use I to toggle dark mode
+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 and let's say you want to
+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 ctrl s
+table of contents, so use Control s —
00:13:11.519 --> 00:13:15.680
-the image default binding for I search
+the Emacs default binding for I-search,
00:13:15.680 --> 00:13:19.360
-and search for a table of contents
+and search for a "table of contents",
00:13:19.360 --> 00:13:21.680
-here we are it is highlighted for you
+here we are, it is highlighted for you,
00:13:21.680 --> 00:13:23.120
-and you can control s for more but
+and you can Control s for more but
-00:13:23.120 --> 00:13:24.240
-there's only one or
+00:13:23.120 --> 00:13:26.006
+there's only one match,
-00:13:24.240 --> 00:13:27.200
-one match one other one you ctrl g to
+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
+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
+go.
00:13:32.320 --> 00:13:35.040
-okay let's say if you want to go to the
+Okay. Let's say, if you want to go to the
00:13:35.040 --> 00:13:36.240
-preface
+preface.
00:13:36.240 --> 00:13:39.519
-so that is you press f which which is
+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
-eef browser you press f for vimeo
+EAF browser, you press f for Vimium,
00:13:44.240 --> 00:13:47.760
-and you see the marker now change to w
+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
+press wn, and then you can go to the
00:13:50.160 --> 00:13:51.279
-prefix
+preface.
00:13:51.279 --> 00:13:54.320
-now we'll add a prefix
+Now, we are at the preface.
00:13:54.320 --> 00:13:56.480
-so now you finish reading you want to
+So, now you finish reading, you want to
00:13:56.480 --> 00:13:57.600
-save your progress
+save your progress?
00:13:57.600 --> 00:13:59.440
-no worries it is already saved for you
+No worries, it is already saved for you
00:13:59.440 --> 00:14:01.199
-by ef you can safely
+by EAF. You can safely
00:14:01.199 --> 00:14:04.240
-close the document using x
+close the document using x,
00:14:04.240 --> 00:14:07.519
-and opening again af
+and opening again, eaf-open,
00:14:07.519 --> 00:14:10.560
-open and the file see your I
+and the file…, see you are at
00:14:10.560 --> 00:14:14.000
-preface again so you're right at where
+preface again. You're right at where
00:14:14.000 --> 00:14:16.560
-you let up left up
+you left of.
00:14:16.560 --> 00:14:19.440
-you can also use mx org store link or
+You can also use M-x org-store-link, or
00:14:19.440 --> 00:14:20.480
-ctrl cl
+Control c l (C-c l) —
00:14:20.480 --> 00:14:23.279
-which I prefer to if you want to save a
+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 orgmo file so now
+a Org mode file. Now,
00:14:28.240 --> 00:14:30.320
-I go back to my presentation now I don't
+I go back to my presentation doc, I don't
00:14:30.320 --> 00:14:31.760
-need this anymore
+need this anymore.
00:14:31.760 --> 00:14:35.600
-uh so you just control c control l
+So, you just (press) Control c Control l (C-c C-l),
00:14:35.600 --> 00:14:39.120
-or I think mx or insert link
+or I think M-x org-insert-link.
00:14:39.120 --> 00:14:41.040
-so you can find the file right here and
+You can find the file right here, and
00:14:41.040 --> 00:14:42.399
-you press enter
+you press Enter (RET),
00:14:42.399 --> 00:14:44.320
-and you press enter for the description
+and you press Enter (RET) for the description
00:14:44.320 --> 00:14:46.480
-again and now it's right here
+again, and now it's right here,
00:14:46.480 --> 00:14:50.720
-and ctrl c ctrl o to open it voila
+and Control c Control o (C-c C-o) to open it. Voilà!
00:14:50.720 --> 00:14:54.000
-you're back right so
+You're back.
00:14:54.000 --> 00:14:57.120
-let's now demonstrate the ef video
+Let's now demonstrate the EAF Video
00:14:57.120 --> 00:14:58.880
-player
+Player.
00:14:58.880 --> 00:15:02.639
-so mxef open if you use ef open whenever
+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 yet open browser
+open some file. You use eaf-open-browser
00:15:06.079 --> 00:15:07.279
if you want to use some
@@ -1153,100 +1126,100 @@ if you want to use some
actual application that's not really
00:15:09.920 --> 00:15:11.199
-related to a file
+related to a file.
00:15:11.199 --> 00:15:14.800
-so you have open and select the video
+So, eaf-open, and select the video
00:15:14.800 --> 00:15:15.600
-you want so
+you want, so,
00:15:15.600 --> 00:15:18.320
-video demo so I already have a video
+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 so because I recorded a video of
+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 ef camera have a look so
+of the EAF Camera, have a look.
00:15:26.000 --> 00:15:28.079
-let's move to the beginning hello people
+Let's move to the beginning, "Hello people
00:15:28.079 --> 00:15:29.279
-from the future
+from the future!
00:15:29.279 --> 00:15:32.399
-this is a demo of the ef video player
+This is a demo of the EAF Video Player
00:15:32.399 --> 00:15:35.199
-that demos the ef camera feature
+that demos the EAF Camera feature,
00:15:35.199 --> 00:15:37.440
-so as you can see on the screen of me
+so, as you can see on the screen of me
00:15:37.440 --> 00:15:38.639
-inside my camera
+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
+within Emacs.
+
+00:15:42.880 --> 00:15:45.273
+(Right, the video itself is as well, haha.)
-00:15:42.880 --> 00:15:46.079
-right so and you can open this
+00:15:45.273 --> 00:15:46.079
+You can open this
00:15:46.079 --> 00:15:49.839
-using here open camera
+using eaf-open-camera
00:15:49.839 --> 00:15:53.040
-and which I'm already into and you can
+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
+p to capture a photo,
00:15:56.720 --> 00:15:59.680
-so the photo is by default stored at
+so, the photo is by default stored at
-00:15:59.680 --> 00:16:00.880
-your home slash
+00:15:59.680 --> 00:16:02.773
+your $HOME/Downloads directory,
-00:16:00.880 --> 00:16:03.920
-downloads directory and you can modify
-
-00:16:03.920 --> 00:16:04.320
-it
+00:16:02.773 --> 00:16:04.320
+and you can modify it
00:16:04.320 --> 00:16:07.839
-freely so if you go here and you can see
+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 so why what I used here
+right here."
00:16:13.759 --> 00:16:16.240
-so you press space to pause what I used
+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 year so ef open this entire so
+the eaf-open-this-from-dired.
00:16:20.320 --> 00:16:22.959
-basically so in direct you you go to you
+Basically, in dired
00:16:22.959 --> 00:16:23.839
you select
@@ -1255,109 +1228,103 @@ you select
the file that should be opened by
00:16:26.959 --> 00:16:30.320
-eaf and I use that so it it detects that
+EAF, and I used that. It detects that
00:16:30.320 --> 00:16:32.720
-it wants to use the ef image viewer so
+it wants to use the EAF Image Viewer, so
00:16:32.720 --> 00:16:35.839
-I accidentally tested if image viewer
-
-00:16:35.839 --> 00:16:39.759
-before I noticed so that that that gives
+I accidentally tested EAF Image Viewer
-00:16:39.759 --> 00:16:40.240
-the
+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 ef camera and as you can see you
+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
-I can use hl the bim button to navigate
+use hl — the Vim binding to navigate
-00:16:50.720 --> 00:16:51.600
-in the time
+00:16:50.720 --> 00:16:53.256
+in the timestamp in the video,
-00:16:51.600 --> 00:16:55.920
-timestamp in the video and I can use
+00:16:53.256 --> 00:16:55.920
+and I can use
00:16:55.920 --> 00:17:02.320
-jk to to change the volumes of the video
+jk to change the volumes of the video.
00:17:02.320 --> 00:17:05.520
-alright so now you've seen all the basic
+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 ef project it comes the question
+of the EAF project, it comes the question
00:17:08.720 --> 00:17:11.600
-of what is the magic behind it
+of what is the magic behind it.
00:17:11.600 --> 00:17:14.559
-all right let's open the hacking page in
+All right. Let's open the hacking page in
00:17:14.559 --> 00:17:15.919
-the wiki
+the wiki,
00:17:15.919 --> 00:17:20.400
-the design is laid out in a diagram here
+the design is laid out in a diagram here.
00:17:20.400 --> 00:17:25.120
-so and let's put it
+Let's put it
00:17:25.120 --> 00:17:27.839
-side by side along with my text so you
+side by side along with my text, so
-00:17:27.839 --> 00:17:28.160
-can
-
-00:17:28.160 --> 00:17:32.320
-go we can follow through
+00:17:27.839 --> 00:17:32.320
+we can follow through.
00:17:32.320 --> 00:17:36.080
-right okay let me
+Right, okay. Let me…,
00:17:36.080 --> 00:17:42.320
-sorry let me drink some water
+sorry, let me drink some water.
00:17:42.320 --> 00:17:46.000
-so this page in the wiki went into a lot
+This page in the wiki went into a lot
00:17:46.000 --> 00:17:48.160
-of detail
+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
+rephrase some of the ideas here, so for
00:17:51.679 --> 00:17:53.520
-anyone interested please have a look at
+anyone interested, please have a look at
00:17:53.520 --> 00:17:55.600
-the wiki yourself
+the wiki yourself.
00:17:55.600 --> 00:17:58.160
-the easiest way to think about eaf is
+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
+the actual GUI application is started in
00:18:01.679 --> 00:18:02.960
-the background
+the background,
00:18:02.960 --> 00:18:04.960
then the frame of the application is
@@ -1369,37 +1336,37 @@ attached to the appropriate location on
the
00:18:07.679 --> 00:18:10.720
-Emacs window so
+Emacs window. So,
00:18:10.720 --> 00:18:13.440
-you have linked qt5 with Emacs using
+EAF linked Qt5 with Emacs using
00:18:13.440 --> 00:18:14.960
-list and python
+Elisp and Python.
00:18:14.960 --> 00:18:17.120
-of the python site which is colored
+On the Python side which is colored
00:18:17.120 --> 00:18:18.640
-yellow in the image
+yellow in the image,
-00:18:18.640 --> 00:18:20.559
-you have two graphics view and queue
+00:18:18.640 --> 00:18:20.439
+we have QGraphicsView and
-00:18:20.559 --> 00:18:22.960
-graphics scene objects
+00:18:20.439 --> 00:18:22.960
+QGraphicsScene objects.
00:18:22.960 --> 00:18:25.039
-these are used to simulate the e-max
+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 q graphics scene is similar to
+where QGraphicsScene is similar to
00:18:28.640 --> 00:18:29.840
-buffers in Emacs
+buffers in Emacs,
00:18:29.840 --> 00:18:31.840
it controls the state and the content
@@ -1407,119 +1374,116 @@ 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:39.039
-well q graphics view is similar to
-
-00:18:39.039 --> 00:18:41.200
-geographic view is similar to imax
+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
+window. It populates the buffer
00:18:43.200 --> 00:18:45.919
-to graphics scene to the full program at
+(QGraphicsScene) to the foreground at
00:18:45.919 --> 00:18:46.960
the appropriate
-00:18:46.960 --> 00:18:50.320
-position whenever an ef mode buffer
+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
+brings to a background….
00:18:57.679 --> 00:18:59.679
-whenever an ef mode buffer brings to the
+Whenever an EAF mode buffer brings to the
00:18:59.679 --> 00:19:00.880
-foreground sorry
+foreground, sorry,
00:19:00.880 --> 00:19:02.559
-a queue graphics view instance is
+a QGraphicsView instance is
00:19:02.559 --> 00:19:05.120
-created and whenever the buffer goes to
+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 q graphics view instance is then
+the QGraphicsView instance is then
00:19:08.000 --> 00:19:09.120
-deleted
+deleted,
00:19:09.120 --> 00:19:10.960
-while q graphics scene the actual
+while QGraphicsScene — the actual
00:19:10.960 --> 00:19:12.480
-process remains running in the
+process — remains running in the
00:19:12.480 --> 00:19:14.480
-background until the ef mode buffer is
+background until the EAF mode buffer is
00:19:14.480 --> 00:19:16.000
-killed
+killed.
00:19:16.000 --> 00:19:18.320
-gpa compositing is used to ensure that q
+GPU compositing is used to ensure that
00:19:18.320 --> 00:19:19.440
-graphics view and
+QGraphicsView and
00:19:19.440 --> 00:19:21.840
-graphics sync is synchronized real time
+QGraphicsScene is synchronized real time.
00:19:21.840 --> 00:19:24.000
-using q windows set parent function
+Using QWindow::setParent function
00:19:24.000 --> 00:19:25.679
-the queue graphics view is attached to
+the QGraphicsView is attached to the
00:19:25.679 --> 00:19:27.840
-appropriate location on the e-max frame
+appropriate location on the Emacs frame,
00:19:27.840 --> 00:19:30.640
-so that although great applications are
+so that although GUI applications are
00:19:30.640 --> 00:19:32.400
-not running within e-max
+not running within Emacs,
00:19:32.400 --> 00:19:36.160
-they look as if they were
+they look as if they were.
00:19:36.160 --> 00:19:39.039
-so when user types on the keyboard it is
+When user types on the keyboard it is
00:19:39.039 --> 00:19:41.039
-first received by the Emacs ef
+first received by the Emacs
00:19:41.039 --> 00:19:43.520
-ef mode buffer and then it lifts sends
+EAF mode buffer, and then Elisp sends
00:19:43.520 --> 00:19:45.360
-the event to google graphics sync using
+the event to QGraphicsScene using
00:19:45.360 --> 00:19:46.240
-dbus
+D-Bus.
00:19:46.240 --> 00:19:48.720
-when user clicks on the gui application
-
-00:19:48.720 --> 00:19:50.400
-it is received by the queue graphics
+When user clicks on the GUI application
-00:19:50.400 --> 00:19:50.799
-view
+00:19:48.720 --> 00:19:50.799
+it is received by the QGraphicsView
00:19:50.799 --> 00:19:53.280
-and process in python ellipse can
+and processed in Python. Elisp can
00:19:53.280 --> 00:19:55.200
-communicate with python through dbus
+communicate with Python through D-Bus,
00:19:55.200 --> 00:19:59.200
-in other words in other words you can
+in other words you can
00:19:59.200 --> 00:20:01.360
customize and extend Emacs not just
@@ -1528,187 +1492,184 @@ customize and extend Emacs not just
using
00:20:01.760 --> 00:20:04.480
-lisp and now you can use python this way
+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
+all the Python properties like
00:20:07.039 --> 00:20:09.600
-multi-threading or some other stuff
+multi-threading or some other stuff,
00:20:09.600 --> 00:20:11.679
-the entire python ecosystem can be
+the entire Python ecosystem can be
00:20:11.679 --> 00:20:13.520
-utilized as well
+utilized as well,
00:20:13.520 --> 00:20:16.159
-such as the qt web engine that is the
+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 eef browser and pi mu pdf is the
+our EAF Browser, and PyMuPDF is the
00:20:20.640 --> 00:20:23.360
-basis for the ef pdf viewer
+basis for the EAF PDF Viewer.
00:20:23.360 --> 00:20:25.840
-so this really opens the window to many
+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
+using EAF.
00:20:32.720 --> 00:20:36.080
-all right back here we are always
+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
+development, there are many many
00:20:39.679 --> 00:20:42.720
-more work that needs to be done like
+more work that needs to be done,
00:20:42.720 --> 00:20:44.640
-such as testing and debug if there are
+such as testing and debug EAF on
00:20:44.640 --> 00:20:46.640
-more linux distros and window managers
+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 I mean you can also add new ef
+and stuff, you can also add new EAF
00:20:51.200 --> 00:20:52.080
-applications
+applications,
00:20:52.080 --> 00:20:54.240
-or debug and enhance existing af
+or debug and enhance existing EAF
00:20:54.240 --> 00:20:55.440
-applications
+applications,
00:20:55.440 --> 00:20:58.000
-or you can port ef to native wayland
+or you can port EAF to native Wayland
00:20:58.000 --> 00:21:00.240
-which I just discussed with the
+which I just discussed with
00:21:00.240 --> 00:21:03.840
-the ems whip kit author uh a kill
+the emacs-webkit author
00:21:03.840 --> 00:21:07.919
-akira tile and she he told me that like
-
-00:21:07.919 --> 00:21:10.159
-really like it must really yeah it
+Akira Kyle, and he told me that
-00:21:10.159 --> 00:21:11.200
-doesn't really work
+00:21:07.919 --> 00:21:11.200
+EAF doesn't really work on
00:21:11.200 --> 00:21:14.320
-um native villain because it uses
+native Wayland, because it uses
00:21:14.320 --> 00:21:16.799
-x valence so it doesn't work on the pgdk
+XWayland, so it doesn't work on the pgtk
00:21:16.799 --> 00:21:18.159
-port of Emacs
+port of Emacs.
00:21:18.159 --> 00:21:20.559
-so and we also need people to pour ef to
+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 mac os
+including Windows and macOS,
00:21:25.600 --> 00:21:28.480
-and that's because like debug is a linux
+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
+specific feature, so it doesn't really
00:21:30.080 --> 00:21:31.360
-work on other platform
+work on other platform.
00:21:31.360 --> 00:21:33.039
-we need to change replace it with some
+We need to check, replace it with some
00:21:33.039 --> 00:21:34.640
-alternative and
+alternative, and
00:21:34.640 --> 00:21:36.720
-geographic scene somehow doesn't really
+QGraphicsScene somehow doesn't really
00:21:36.720 --> 00:21:38.640
-work on mac os
+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
+available, so please have a look
00:21:42.880 --> 00:21:45.039
-if and see it's anything you want to
+and see if there is anything you want to
00:21:45.039 --> 00:21:46.640
-work on
+work on.
00:21:46.640 --> 00:21:49.039
-all right so since this is a
+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
+the Q & A real time in the video.
00:21:53.520 --> 00:21:56.080
-however I will be around on the
+However, I will be around on the
00:21:56.080 --> 00:21:57.200
-collaborate pad
+collaborative pad
-00:21:57.200 --> 00:22:00.559
-and the irc imax con you must come
+00:21:57.200 --> 00:22:00.239
+and the IRC #emacsconf,
-00:22:00.559 --> 00:22:01.360
-questions
+00:22:00.239 --> 00:22:01.360
+#emacsconf-questions
-00:22:01.360 --> 00:22:04.240
-to answer any questions it pops up and
+00:22:01.360 --> 00:22:04.139
+to answer any questions when it pops up,
-00:22:04.240 --> 00:22:05.760
-you can also submit an issue
+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
+on the repo, and you can check the wiki
00:22:09.120 --> 00:22:12.640
-for some other guides and tricks
+for some other guides and tricks.
00:22:12.640 --> 00:22:15.039
-all right thank you guys and hopefully
+All right. Thank you guys, and hopefully
00:22:15.039 --> 00:22:16.000
-you find the
+you find
00:22:16.000 --> 00:22:18.320
-this year project very interesting and
+this EAF project very interesting, and
00:22:18.320 --> 00:22:24.320
-enjoy the rest of Emacs com 2020
+enjoy the rest of EmacsConf 2020.
diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt
index 3c8dd20c..c60bd115 100644
--- a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt
+++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt
@@ -1,286 +1,274 @@
WEBVTT
00:00:02.800 --> 00:00:09.200
-I can yes
+I can, yes.
00:00:09.200 --> 00:00:13.120
-okay um yeah so I'm uh zachary canfer
+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 uh the first question uh why
+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
+progression,
00:00:19.840 --> 00:00:23.920
-uh and left to right uh for low to high
+and left to right for low to high?"
00:00:23.920 --> 00:00:27.279
-interesting I think uh so the initial
+Interesting, I think…, so the initial
00:00:27.279 --> 00:00:30.000
-uh thing I was copying that initial app
+thing I was copying, that initial app
-00:00:30.000 --> 00:00:31.599
-work this way
-
-00:00:31.599 --> 00:00:35.280
-um and
+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
+yeah, I mean, certainly traditional music,
00:00:36.960 --> 00:00:38.960
-you know on a staff uh
+you know, on a staff
00:00:38.960 --> 00:00:43.040
-does go left to right uh like this
+does go left to right like this.
00:00:43.040 --> 00:00:46.000
-um I mean going top to bottom does make
+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
+having to wrap, but certainly that could
00:00:48.960 --> 00:00:49.920
-be managed
+be managed.
00:00:49.920 --> 00:00:52.239
-um yeah I I had not really thought about
+Yeah, I had not really thought about
00:00:52.239 --> 00:00:53.760
-it but it is definitely something worth
+it, but it is definitely something worth
00:00:53.760 --> 00:00:55.199
-looking into
+looking into.
00:00:55.199 --> 00:01:02.480
-uh yeah you are now unmuted
+Yeah.
00:01:02.480 --> 00:01:05.680
-ah good point thank you let me go ahead
+Ah, good point, thank you. Let me go ahead
00:01:05.680 --> 00:01:06.960
-and do that
+and do that.
00:01:06.960 --> 00:01:14.240
-uh the entire screen
+The entire screen…
00:01:14.240 --> 00:01:16.880
-okay so the screen share should be
+Okay, so the screen share should be
00:01:16.880 --> 00:01:18.320
-starting
+starting,
00:01:18.320 --> 00:01:21.439
-there we go cool all right uh
+there we go. Cool, all right.
00:01:21.439 --> 00:01:24.880
-two will be placed on the song um not
+Two, "Will you play us another song?" Not
00:01:24.880 --> 00:01:26.640
-now I can I can make some recordings of
+now, I can make some recordings of
00:01:26.640 --> 00:01:28.080
-it or certainly you can try it
+it, or certainly you can try it.
00:01:28.080 --> 00:01:30.720
-um I couldn't quite get the the
+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 um so
+to work with the sound playing now. So,
00:01:37.040 --> 00:01:40.079
-uh I can record some also please uh
+I can record some. Also, please…
00:01:40.079 --> 00:01:43.520
-I put a link at the uh here in the uh
+I have put a link at the… here in the
00:01:43.520 --> 00:01:46.640
-etherpad https://zck.me/emacsconf2020
+Etherpad, zck.org/emacsconf2020 [updated],
00:01:46.640 --> 00:01:48.479
-where you can go and get the source
+where you can go and get the source,
00:01:48.479 --> 00:01:49.920
-and you can try it yourself uh there's
+and you can try it yourself. There's
00:01:49.920 --> 00:01:51.920
-no dependencies needed so it's just all
+no dependencies needed, so it's just all
00:01:51.920 --> 00:01:54.560
-in Emacs um so please you know try it
+in Emacs. So, please, you know, try it
00:01:54.560 --> 00:01:57.040
-yourself
+yourself.
00:01:57.040 --> 00:02:00.079
-any chance for an Emacs tracker or mod
+"Any chance for an Emacs tracker or mod
00:02:00.079 --> 00:02:01.040
-player
+player?"
00:02:01.040 --> 00:02:03.680
-um I don't really know what a mod player
+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
+are, but I mean, I'm sure
00:02:08.000 --> 00:02:09.679
-that would be cool uh maybe there's one
+that would be cool, maybe there's one
00:02:09.679 --> 00:02:11.599
-on now but I don't know uh
+on now, but I don't know.
00:02:11.599 --> 00:02:13.920
-my musical background so I've played
+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
+third grade.
00:02:15.840 --> 00:02:18.160
-uh started recorder uh play cello I play
+Started recorder, play cello, I play
00:02:18.160 --> 00:02:19.520
-guitar now
+guitar now.
00:02:19.520 --> 00:02:22.560
-um but yeah so just kind of random
+But yeah, so just kind of random
00:02:22.560 --> 00:02:23.680
-instruments and
+instruments, and
00:02:23.680 --> 00:02:26.959
-uh yeah I guess kind of some of those
+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 um
-
-00:02:30.480 --> 00:02:33.519
-uh yeah um
+influence how I think about music.
00:02:33.519 --> 00:02:35.360
-are there any open source musical
+"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
+be used?"
00:02:37.840 --> 00:02:41.200
-um good question I'm sure there are um I
+Good question, I'm sure there are, I
00:02:41.200 --> 00:02:42.400
-don't know any that integrate really
+don't know any of that integrate really
00:02:42.400 --> 00:02:43.360
-well with Emacs
+well with Emacs.
00:02:43.360 --> 00:02:44.560
-one of the cool things that I liked
+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
+dependencies,
00:02:47.440 --> 00:02:49.360
-you know you don't need any external
+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
-uh generate the music I mean it it does
+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 um but that
+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
+operating system, as always, you have
00:02:59.840 --> 00:03:03.519
-something that can play wav files
+something that can play WAVE files,
00:03:03.519 --> 00:03:05.599
-um but yeah it is interesting to kind of
-
-00:03:05.599 --> 00:03:06.879
-try the different
+but yeah, it is interesting to kind of
-00:03:06.879 --> 00:03:10.000
-uh different sounds and different
+00:03:05.599 --> 00:03:10.000
+try the different sounds and different
00:03:10.000 --> 00:03:12.239
-tones uh that you could get with
+tones that you could get with
00:03:12.239 --> 00:03:14.400
-different instruments
+different instruments.
00:03:14.400 --> 00:03:16.959
-have I written any actual songs um
+Have I written any actual songs?
-00:03:16.959 --> 00:03:17.599
-nothing
-
-00:03:17.599 --> 00:03:21.040
-super uh
+00:03:16.959 --> 00:03:21.040
+Nothing super
00:03:21.040 --> 00:03:23.680
-uh well put together just I kind of just
+well put together, I kind of just
00:03:23.680 --> 00:03:25.519
-been playing around with this
+been playing around with this.
00:03:25.519 --> 00:03:27.440
-it's kind of I making this was one of
+It's kind of… making this was one of
00:03:27.440 --> 00:03:29.040
-those things where like once I made it I
+those things where once I made it, I
00:03:29.040 --> 00:03:30.080
-was like okay
+was like, okay,
00:03:30.080 --> 00:03:31.280
-now I can play with it and I did a
+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
+little bit, and was like, I don't know if
00:03:32.720 --> 00:03:33.920
-I feel like it right now
+I feel like it right now.
00:03:33.920 --> 00:03:37.280
-you know which I've I've found that to
+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
@@ -289,7 +277,7 @@ be the case with some things that I've
implemented
00:03:39.599 --> 00:03:41.360
-in Emacs where it's I make it and then
+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
@@ -298,7 +286,7 @@ it's the kind of some of the desire to
use it all the time
00:03:44.480 --> 00:03:46.879
-goes away but I'm sure I'll circle back
+goes away, but I'm sure I'll circle back
00:03:46.879 --> 00:03:47.760
around
@@ -310,121 +298,118 @@ at some point especially kind of maybe
once I add in different tones or
00:03:52.400 --> 00:03:54.640
-something
+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
+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
+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
+WAVE generation library, so, if you kind
00:04:04.720 --> 00:04:06.720
-of have the data
+of have the data,
00:04:06.720 --> 00:04:08.400
-you could use those and like chop them
+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 wav file so it's not plug and
+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
+play right now, but you could certainly
00:04:14.959 --> 00:04:19.120
-add those notes uh to do it
-
-00:04:19.120 --> 00:04:21.040
-um any knitting midi mapping
+add those notes to do it.
-00:04:21.040 --> 00:04:22.720
-possibilities um
+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
+I haven't looked into it, but I'm sure
00:04:24.560 --> 00:04:26.160
-you definitely could output to midi
+you definitely could output to MIDI
00:04:26.160 --> 00:04:28.800
-um which is another benefit of having
+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 like
+is just,
00:04:31.520 --> 00:04:33.360
-um you know if the root note is this
+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
+semitones up or whatever it is.
00:04:36.560 --> 00:04:38.160
-uh it should be relatively simple to
+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
-uh from wave to midi or other things
+from WAVE to MIDI or other things.
00:04:44.479 --> 00:04:45.759
-what were some of the challenges with
+"What were some of the challenges with
00:04:45.759 --> 00:04:47.520
-writing a special mode for Emacs
+writing a special mode for Emacs?"
00:04:47.520 --> 00:04:49.759
-uh interested in getting into this not
+Interested in getting into this, not
00:04:49.759 --> 00:04:51.040
-sure where to start
+sure where to start.
00:04:51.040 --> 00:04:54.960
-um there uh yeah it so
+There… yeah, it so…
00:04:54.960 --> 00:04:57.120
-this isn't the first mode I've written
+this isn't the first mode I've written,
00:04:57.120 --> 00:04:58.320
-um so that's right
+so that's right…,
00:04:58.320 --> 00:05:01.759
-certainly that helps um I actually
+certainly that helps. I actually…
00:05:01.759 --> 00:05:05.600
-um I have a video that we recorded it
+I have a video that we recorded it
00:05:05.600 --> 00:05:08.240
-as part of Emacs nyc on making a major
+as part of EmacsNYC on making a major
00:05:08.240 --> 00:05:09.039
-mode
+mode.
00:05:09.039 --> 00:05:10.720
-that's basically like starts from
+That's basically starts from
00:05:10.720 --> 00:05:12.639
-nothing and kind of builds up to
+nothing, and kind of builds up to
00:05:12.639 --> 00:05:15.680
-an implementation of tic-tac-toe um
+an implementation of tic-tac-toe,
00:05:15.680 --> 00:05:17.039
but so it kind of goes into printing
@@ -433,76 +418,73 @@ but so it kind of goes into printing
things out and buttons and making the
00:05:19.600 --> 00:05:21.280
-mode
+mode.
00:05:21.280 --> 00:05:22.800
-I mean one of the best parts about Emacs
+I mean, one of the best parts about Emacs
00:05:22.800 --> 00:05:24.560
-is because it's so
+is, because it's so
00:05:24.560 --> 00:05:26.479
-uh configurable and so introspectible
+configurable and so introspectible,
00:05:26.479 --> 00:05:28.479
-you can start pretty simply
+you can start pretty simply,
00:05:28.479 --> 00:05:30.320
-and just kind of asking max about things
+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 um it's really it's not that bad
-
-00:05:34.960 --> 00:05:36.479
-so uh
+change. It's really… it's not that bad,
-00:05:36.479 --> 00:05:39.039
-I'll try to throw a link up on that uh
+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
-on on that page I put up or
+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 uh to get a link to that video
+question to get a link to that video,
00:05:44.479 --> 00:05:46.240
-um or just look at look at the source
+or just look at the source
00:05:46.240 --> 00:05:47.919
-code of this or any other major mode
+code of this or any other major mode.
00:05:47.919 --> 00:05:50.479
-um it it's pretty ems breaks it makes it
+Emacs makes it
00:05:50.479 --> 00:05:52.880
-pretty easy to extend uh
+pretty easy to extend
00:05:52.880 --> 00:05:56.479
-major modes and I think that's that's
+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 ether pad so uh thanks so much
+in the Etherpad, so, thanks so much
00:06:00.240 --> 00:06:02.479
-everybody for coming
+everybody for coming.
-00:06:02.479 --> 00:06:06.720
-you are now unmuted uh thank you so much
+00:06:04.033 --> 00:06:06.720
+(Amin: Thank you so much
00:06:06.720 --> 00:06:09.039
-to curry for your awesome talk
+to Zachary for your awesome talk,
00:06:09.039 --> 00:06:12.960
-and for doing live questions
+and for doing live questions.
00:06:12.960 --> 00:06:19.840
-thank you thank you cheers
+Thank you.) Thank you. (Amin: Cheers.)
diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt
index 8fce6e98..57837210 100644
--- a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt
+++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt
@@ -1,106 +1,109 @@
WEBVTT
00:00:04.080 --> 00:00:04.960
-hi
+Hi.
00:00:04.960 --> 00:00:08.559
-i'm zachary canfer and this is waving
+I'm Zachary Kanfer, and this is waving
00:00:08.559 --> 00:00:11.679
-and repetitive repetitive repetitive
+at repetitive repetitive repetitive
00:00:11.679 --> 00:00:15.759
-music over quarantine i've been bored
+music. Over quarantine, I've been bored,
00:00:15.759 --> 00:00:18.400
-and i found this android app that has a
+and I found this Android app that has a
00:00:18.400 --> 00:00:19.680
-bunch of mini games
+bunch of mini-games,
00:00:19.680 --> 00:00:23.519
-one of which lets you compose music
+one of which lets you compose music.
00:00:23.519 --> 00:00:26.640
-and it works but i
+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
+than it offers, it's not very flexible.
00:00:30.720 --> 00:00:33.760
-so i thought what if i made this
+So, I thought what if I made this,
00:00:33.760 --> 00:00:35.360
-what and what programs could i make this
+and what programs could I make this
00:00:35.360 --> 00:00:37.760
-in that are really flexible are really
+in that are really flexible, are really
00:00:37.760 --> 00:00:40.320
-customizable
+customizable.
00:00:40.320 --> 00:00:44.239
-emacs so i looked into it and
+Emacs. So, I looked into it, and
00:00:44.239 --> 00:00:46.320
-emacs can play sounds right if you hit
+Emacs can play sounds, right? If you hit
00:00:46.320 --> 00:00:47.840
-control g a couple times you'll hear
+control g a couple of times, you'll hear
00:00:47.840 --> 00:00:49.760
-like an error tone
+like an error tone,
00:00:49.760 --> 00:00:51.360
-and it turns out that that is actually
+and it turns out that, that is actually
00:00:51.360 --> 00:00:54.559
-playing a wave file
+playing a WAVE file,
00:00:54.559 --> 00:00:58.960
-but what's a wave file
+but what's a WAVE file?
00:00:58.960 --> 00:01:01.920
-well it turns out that wave is a musical
+Well, it turns out that WAVE is a musical
00:01:01.920 --> 00:01:03.440
-file format
+file format,
00:01:03.440 --> 00:01:07.840
-or really an annoying file format
+or really an annoying file format.
00:01:07.840 --> 00:01:12.080
-so data in it can be an unsigned integer
+So, data in it can be an unsigned integer
00:01:12.080 --> 00:01:15.360
-or a science integer it's not consistent
+or a signed integer, it's not consistent,
00:01:15.360 --> 00:01:17.920
-and it's little ending by default which
+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
+is not the way I like to think about it.
-00:01:20.320 --> 00:01:23.200
-now you can set a wav file to be big
+00:01:20.320 --> 00:01:21.600
+Now, you can
-00:01:23.200 --> 00:01:25.200
-endian but if you do that
+00:01:21.600 --> 00:01:23.733
+set a WAVE file to be big-endian,
-00:01:25.200 --> 00:01:28.640
-emacs can't play it so little ending it
+00:01:23.733 --> 00:01:25.200
+but if you do that,
-00:01:28.640 --> 00:01:30.479
-is
+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
+There's also duplicate data fields.
00:01:33.520 --> 00:01:35.360
-here are some fields that are fine but
+Here are some fields that are fine, but
00:01:35.360 --> 00:01:36.960
then there's a fourth field that's
@@ -109,46 +112,46 @@ then there's a fourth field that's
calculated based on multiplying two of
00:01:38.960 --> 00:01:40.799
-the other ones together
+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
+that's… you multiply those three ones
00:01:44.880 --> 00:01:48.479
-together so it's just repetitive and
+together. So, it's just repetitive and
00:01:48.479 --> 00:01:50.479
-unnecessary but you have to do it or
+unnecessary, but you have to do it, or
00:01:50.479 --> 00:01:54.159
-it's not a valid wave file
+it's not a valid WAVE file.
00:01:54.159 --> 00:01:56.479
-also the last part of the file is
+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
+or as one website I found said,
00:02:01.759 --> 00:02:05.200
-the actual sound data now
+the actual sound data. Now,
00:02:05.200 --> 00:02:06.960
-i don't know about you but when i see
+I don't know about you but when I see
00:02:06.960 --> 00:02:09.039
-that i think
+that, I think,
00:02:09.039 --> 00:02:12.080
-what is a data it turns out
+what is data? It turns out
00:02:12.080 --> 00:02:15.120
-that sound is just a wave and
+that sound is just a wave, and
00:02:15.120 --> 00:02:17.760
the data is just a bunch of measurements
@@ -157,43 +160,43 @@ the data is just a bunch of measurements
of the height of that wave forming each
00:02:19.120 --> 00:02:20.400
-sample
+sample.
00:02:20.400 --> 00:02:24.480
-so this wave starts at 8 goes 9 11 13
+So, this wave starts at 8 goes 9, 11, 13,
00:02:24.480 --> 00:02:27.840
-14 15 and then back down and if you just
+14, 15, and then back down. If you just
00:02:27.840 --> 00:02:29.520
-take those measurements those numbers
+take those measurements, those numbers,
-00:02:29.520 --> 00:02:32.080
-put them in a file that's all your data
+00:02:29.520 --> 00:02:30.700
+put them in a file,
-00:02:32.080 --> 00:02:35.200
-is
+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
+All right. Let's go to a demo of my
00:02:36.560 --> 00:02:38.959
-program
+program.
00:02:38.959 --> 00:02:41.920
-so this is what z music looks like the
+So, this is what zmusic looks like. The
00:02:41.920 --> 00:02:44.080
-blue highlighted row is a single beat
+blue highlighted row is a single beat,
00:02:44.080 --> 00:02:48.319
-there's 16 of them in this z music file
+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
+is a single note increasing…, starting
00:02:55.040 --> 00:02:57.920
really low all the way on the left and
@@ -202,109 +205,112 @@ really low all the way on the left and
going up
00:02:58.959 --> 00:03:01.680
-as we go to the right so if we started
+as we go to the right. So, if we started
00:03:01.680 --> 00:03:02.400
-playing
+playing,
00:03:02.400 --> 00:03:05.040
-we won't hear anything but we'll see the
+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
+playing one,
+
+00:03:07.680 --> 00:03:09.833
+and we see that it loops.
-00:03:07.680 --> 00:03:11.120
-and we see that it loops so we can stop
+00:03:09.833 --> 00:03:12.720
+So, we can stop it,
-00:03:11.120 --> 00:03:12.720
-it
+00:03:12.720 --> 00:03:20.633
+and now we can click to add some notes.
-00:03:12.720 --> 00:03:30.879
-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
+Even more than one note at the same time
-00:03:33.120 --> 00:03:43.920
-works
+00:03:33.120 --> 00:03:37.333
+works.
-00:03:43.920 --> 00:03:56.160
-and we can even add notes while it's
+00:03:37.333 --> 00:03:43.920
+[Music]
-00:03:56.160 --> 00:03:58.840
-[Applause]
+00:03:43.920 --> 00:03:45.567
+And we can even add notes
-00:03:58.840 --> 00:04:00.150
-playing
+00:03:45.567 --> 00:03:56.160
+while it's playing.
-00:04:00.150 --> 00:04:08.239
-[Applause]
+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
+Okay, here are some other features that I
00:04:10.480 --> 00:04:12.959
-didn't have time to demo
+didn't have time to demo.
00:04:12.959 --> 00:04:16.000
-so you can save the music to a file and
+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
+if there's no note in a beat, we just
00:04:20.880 --> 00:04:22.800
-don't play that beat
+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
+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
+make a sound there.
-00:04:31.360 --> 00:04:34.479
-we can also use different scales we're
+00:04:31.360 --> 00:04:33.800
+We can also use different scales.
-00:04:34.479 --> 00:04:36.240
-using the minor pentatonic
+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
+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:42.400
-or anything else and there's also
+00:04:39.680 --> 00:04:40.967
+or anything else.
-00:04:42.400 --> 00:04:44.400
-keyboard support but it sounds really
+00:04:40.967 --> 00:04:43.367
+And there's also keyboard support,
-00:04:44.400 --> 00:04:45.199
-bad
+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
+and I'll explain why later.
00:04:48.240 --> 00:04:50.800
-here are some things i learned while
+Here are some things I learned while
00:04:50.800 --> 00:04:53.520
-writing z music
+writing zmusic.
00:04:53.520 --> 00:04:56.479
-emacs has buttons which are great as
+Emacs has buttons which are great as
00:04:56.479 --> 00:04:58.240
long
@@ -313,412 +319,412 @@ long
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
+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
+of them.
00:05:06.160 --> 00:05:07.919
-now that's because a button is really
+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
+property to highlight them.
00:05:11.680 --> 00:05:15.120
-so the fix is you put another character
+So, the fix is, you put another character
00:05:15.120 --> 00:05:16.479
-between the two buttons
+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
+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 z music
+for zmusic,
00:05:22.800 --> 00:05:25.440
-because the music has a lot of very
+because zmusic has a lot of very
00:05:25.440 --> 00:05:27.120
-small buttons in a row
+small buttons in a row.
00:05:27.120 --> 00:05:29.840
-so it's really easy to accidentally put
+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
+and click on that instead of the button.
00:05:34.639 --> 00:05:37.120
-so i looked into unicode and i found
+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
+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
+able to accidentally click on it.
00:05:45.120 --> 00:05:46.960
-unfortunately a zeroth space isn't
+Unfortunately, a zero-width space isn't
00:05:46.960 --> 00:05:50.080
-actually zero width
+actually zero width.
00:05:50.080 --> 00:05:51.680
-if we put a hundred of them between two
+If we put a hundred of them between two
00:05:51.680 --> 00:05:53.759
-other characters you can see there's
+other characters, you can see there's
00:05:53.759 --> 00:05:54.880
-space there
+space there,
00:05:54.880 --> 00:05:56.240
-and i think what's happening is the
+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 emax put uses one pixel between
+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
+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
+Some ways to play sound that don't quite
00:06:09.919 --> 00:06:12.960
-work play sound plays music
+work! `play-sound` plays music,
00:06:12.960 --> 00:06:14.800
-but it blocks you can't do things like
+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
+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
+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
+silent, and I don't know why.
00:06:21.600 --> 00:06:24.479
-so the solution i went with is taking
+So, the solution I went with is taking
00:06:24.479 --> 00:06:25.440
-that wav file
+that WAVE file,
00:06:25.440 --> 00:06:27.039
-ran into the file system and then
+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
+play the sound.
00:06:30.639 --> 00:06:32.880
-and that works fine as long as you only
+And that works fine as long as you only
00:06:32.880 --> 00:06:34.240
-do it once
+do it once,
00:06:34.240 --> 00:06:36.080
-because if you do it a couple times at
+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
+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
+simultaneously,
00:06:40.000 --> 00:06:42.319
-you get this weird interference and
+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
+before didn't work.
00:06:46.319 --> 00:06:49.199
-also side effects have this unexpected
+Also, side effects have this unexpected
00:06:49.199 --> 00:06:50.240
-impact
+impact,
00:06:50.240 --> 00:06:53.039
-uh when you saw the demo it was running
+when you saw the demo it was running
00:06:53.039 --> 00:06:55.120
-pretty smoothly
+pretty smoothly,
00:06:55.120 --> 00:06:57.680
-but if i just add one message statement
+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
+debugging purposes, I was getting lag and
00:07:00.960 --> 00:07:03.759
-jitter
+jitter.
00:07:03.759 --> 00:07:05.440
-here's the one thing i learned about
+Here's the one thing I learned about
00:07:05.440 --> 00:07:08.319
-music theory music theory
+music theory, music theory
00:07:08.319 --> 00:07:11.599
-is not easy to program
+is not easy to program.
00:07:11.599 --> 00:07:12.880
-i was looking around to see what
+I was looking around to see what
00:07:12.880 --> 00:07:15.440
-concepts we can use to code the scales
+concepts we can use to code the scales,
-00:07:15.440 --> 00:07:16.080
-to code the
+00:07:15.440 --> 00:07:16.933
+to code the notes,
-00:07:16.080 --> 00:07:18.160
-notes the first thing that i saw is
+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
+scale degrees,
00:07:20.240 --> 00:07:23.360
-and this when i looked into it you don't
+and this when I looked into it, you don't
00:07:23.360 --> 00:07:26.319
-want to program in scale degrees
+want to program in scale degrees.
00:07:26.319 --> 00:07:28.240
-so you see we have the first second
+So, you see we have the first, second,
00:07:28.240 --> 00:07:29.759
-third fourth fifth sixth seventh but
+third, fourth, fifth, sixth, seventh but
00:07:29.759 --> 00:07:32.080
-then it wraps around that octave up
+then it wraps around. That octave up
00:07:32.080 --> 00:07:33.919
-is also a first and that's because both
+is also a first, and that's because both
00:07:33.919 --> 00:07:36.000
-of those notes are c
+of those notes are C,
00:07:36.000 --> 00:07:38.479
-uh so that didn't work and also you
+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
+specify a flat or sharp. You could say
00:07:43.599 --> 00:07:47.680
-a sharp third uh or
+a sharp third or
00:07:47.680 --> 00:07:50.879
-you know a flat seventh or whatever but
+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
+of data that indicate the note, and I
00:07:53.759 --> 00:07:55.840
-didn't i didn't love that
+didn't love that.
00:07:55.840 --> 00:07:57.440
-so i looked a little looked again and i
+So, I looked again, and I
00:07:57.440 --> 00:07:59.280
-found intervals
+found intervals,
00:07:59.280 --> 00:08:01.120
-and then i thought about it and you
+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
+intervals either.
00:08:03.440 --> 00:08:05.520
-it fixes some of the problems with scale
+It fixes some of the problems with scale
00:08:05.520 --> 00:08:07.039
-degrees you see
+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
+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
+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
+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
+third, so you saw that problem of having
00:08:18.080 --> 00:08:20.160
-two pieces of information
+two pieces of information.
00:08:20.160 --> 00:08:23.360
-uh so i thought about it music's really
+So, I thought about it. Music is really
00:08:23.360 --> 00:08:27.120
-frequencies like an a is 440 hertz
+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
+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
+going to do, we're just going to use
00:08:29.360 --> 00:08:30.560
-frequencies
+frequencies.
00:08:30.560 --> 00:08:32.800
-and then at the one level above that uh
+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
+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
+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
+as one more, we're going to say how many
00:08:42.880 --> 00:08:44.560
-semitones up it is
+semitones up it is.
00:08:44.560 --> 00:08:47.200
-so if there's a sharp between two notes
+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
+of just one.
00:08:50.000 --> 00:08:51.279
-and then we translate those two
+And then we translate those two
00:08:51.279 --> 00:08:54.160
-frequencies so your a is 440 hertz
+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
+613.5,
00:08:58.480 --> 00:09:00.720
-or whatever and we that's we use the low
+or whatever, and that's we use the low
00:09:00.720 --> 00:09:02.959
-level to play
+level to play.
00:09:02.959 --> 00:09:05.200
-some future work i have i want to add
+Some future work I have, I want to add
00:09:05.200 --> 00:09:06.480
-some drums
+some drums.
00:09:06.480 --> 00:09:08.240
-i want to make that keyboard actually
+I want to make that keyboard actually
00:09:08.240 --> 00:09:09.680
-work uh
+work,
00:09:09.680 --> 00:09:12.399
-and uh computers and synthesizers are
+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
+like the one we have here,
00:09:16.000 --> 00:09:17.680
-so i want to add overtones or other
+so I want to add overtones or other
00:09:17.680 --> 00:09:19.440
-octaves above it uh just to make it
+octaves above it just to make it
00:09:19.440 --> 00:09:23.120
-sound a little bit more realistic
+sound a little bit more realistic.
00:09:23.120 --> 00:09:25.360
-i've put notes references in the source
+I've put notes references and the source
-00:09:25.360 --> 00:09:28.480
-code up at zck dot me slash emacs conf
+00:09:25.360 --> 00:09:26.000
+code up
-00:09:28.480 --> 00:09:31.839
-2020 i'm one of the organizers of emacs
+00:09:26.000 --> 00:09:30.067
+at zck.org/emacsconf2020 [updated].
-00:09:31.839 --> 00:09:33.040
-nyc
+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
+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
+or have any thoughts, I'd love to hear
00:09:38.240 --> 00:09:39.839
-them and
+them, and
00:09:39.839 --> 00:09:46.160
-thanks so much for coming to my talk
+thanks so much for coming to my talk.
diff --git a/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt
index fd313f52..89dc142e 100644
--- a/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt
+++ b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt
@@ -3,17 +3,17 @@ WEBVTT
00:00:00.320 --> 00:00:03.280
Hello, I'm Richard Stallman,
-00:00:03.280 --> 00:00:08.080
-founder of the GNU project. In 1976, I
+00:00:03.280 --> 00:00:07.816
+founder of the GNU project.
-00:00:08.080 --> 00:00:09.200
-developed the first
+00:00:07.816 --> 00:00:09.200
+In 1976, I developed the first
-00:00:09.200 --> 00:00:12.000
-Emacs editor with some help from Guy
+00:00:09.200 --> 00:00:12.320
+Emacs editor with some help
-00:00:12.000 --> 00:00:13.440
-Steele.
+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
@@ -24,14 +24,9 @@ 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:24.640
+00:00:22.240 --> 00:00:29.519
So I started writing GNU Emacs in
-
-00:00:24.640 --> 00:00:25.560
-September
-
-00:00:25.560 --> 00:00:29.519
-1984.
+September 1984.
00:00:29.519 --> 00:00:32.640
Several years ago we decided to move
@@ -39,47 +34,38 @@ 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:36.559
-the core
-
-00:00:36.559 --> 00:00:39.760
-Emacs distribution into a separate
-
-00:00:39.760 --> 00:00:42.960
-package archive that we call the Emacs
+00:00:35.920 --> 00:00:39.866
+the core Emacs distribution into
-00:00:42.960 --> 00:00:43.280
-Lisp
+00:00:39.866 --> 00:00:46.480
+a separate package archive that we call
+the Emacs Lisp package archive ELPA.
-00:00:43.280 --> 00:00:46.480
-package archive ELPA.
+00:00:46.480 --> 00:00:49.555
+There were two main reasons for this.
-00:00:46.480 --> 00:00:48.719
-There were two main reasons for this. One
+00:00:49.555 --> 00:00:51.520
+One is to make the Emacs
+distribution smaller
-00:00:48.719 --> 00:00:51.520
-is to make the Emacs distribution smaller
+00:00:51.520 --> 00:00:54.870
+so every user wouldn't have to
-00:00:51.520 --> 00:00:54.320
-so every user wouldn't have to get all
+00:00:54.870 --> 00:00:55.680
+get all the packages
-00:00:54.320 --> 00:00:55.680
-the packages
+00:00:55.680 --> 00:00:58.820
+and install all the packages.
-00:00:55.680 --> 00:00:58.320
-and install all the packages. And the
+00:00:58.820 --> 00:01:00.480
+And the other reason was to make it
+possible to
-00:00:58.320 --> 00:01:00.480
-other reason was to make it possible to
+00:01:00.480 --> 00:01:03.485
+release individual packages
-00:01:00.480 --> 00:01:01.520
-release
-
-00:01:01.520 --> 00:01:04.559
-individual packages separately
-
-00:01:04.559 --> 00:01:08.880
-from Emacs releases.
+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
@@ -87,10 +73,8 @@ 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:19.520
+00:01:17.040 --> 00:01:21.119
a variety of different Emacs Lisp
-
-00:01:19.520 --> 00:01:21.119
package archives
00:01:21.119 --> 00:01:25.520
@@ -99,56 +83,52 @@ 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.079
-Now, I think that naming was a mistake. We
-
-00:01:32.079 --> 00:01:32.799
-should have
+00:01:29.280 --> 00:01:32.945
+Now, I think that naming was a mistake.
-00:01:32.799 --> 00:01:35.119
-meant, we should have decided that ELPA
+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.759
-and any other package archive should be
+00:01:37.759 --> 00:01:39.297
+and any other package archive
-00:01:39.759 --> 00:01:42.479
-called some other name.
+00:01:39.297 --> 00:01:42.479
+should be called some other name.
-00:01:42.479 --> 00:01:46.079
-Oh, well! Uh this
+00:01:42.479 --> 00:01:46.128
+Oh, well! Uh this is a mistake,
-00:01:46.079 --> 00:01:48.320
-is a mistake I believe, because it leads
+00:01:46.128 --> 00:01:48.320
+I believe, because it leads
-00:01:48.320 --> 00:01:50.240
-to a lot of confusion it would have been
+00:01:48.320 --> 00:01:49.397
+to a lot of confusion.
-00:01:50.240 --> 00:01:51.119
-clearer
+00:01:49.397 --> 00:01:51.119
+It would have been clearer
00:01:51.119 --> 00:01:55.759
-if we had uh used the other naming.
+if we had used the other naming.
-00:01:55.759 --> 00:01:59.600
-Because the difference between having a
+00:01:55.759 --> 00:01:59.812
+Because the difference between
-00:01:59.600 --> 00:02:00.399
-package in
-
-00:02:00.399 --> 00:02:04.159
-core Emacs and having it in GNU ELPA,
+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:09.679
-Convenience of distribution and
+00:02:07.840 --> 00:02:10.501
+Convenience of distribution
-00:02:09.679 --> 00:02:12.000
-convenience of maintenance.
+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
@@ -156,11 +136,11 @@ 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:20.160
-whenever that was convenient. So, to make
+00:02:16.800 --> 00:02:19.258
+whenever that was convenient.
-00:02:20.160 --> 00:02:21.200
-that possible
+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
@@ -168,10 +148,8 @@ 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:28.800
+00:02:26.319 --> 00:02:31.360
just the same way we do for packages in
-
-00:02:28.800 --> 00:02:31.360
core Emacs.
00:02:31.360 --> 00:02:33.760
@@ -192,28 +170,22 @@ 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:49.120
+00:02:46.560 --> 00:02:50.000
For the most part, the developers of
-
-00:02:49.120 --> 00:02:50.000
these packages
-00:02:50.000 --> 00:02:52.480
-wouldn't even tell us about them. They
-
-00:02:52.480 --> 00:02:53.599
-posted them
+00:02:50.000 --> 00:02:52.218
+wouldn't even tell us about them.
-00:02:53.599 --> 00:02:56.720
-in another package archive where we
+00:02:52.218 --> 00:02:56.027
+They posted them in another package
+archive
-00:02:56.720 --> 00:02:58.480
-didn't know about them
+00:02:56.027 --> 00:02:58.480
+where we didn't know about them
-00:02:58.480 --> 00:03:02.000
-and (where they) no attempt was made to
-
-00:03:02.000 --> 00:03:03.120
+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
@@ -225,41 +197,40 @@ 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.959
-packages that depended on non-free
+00:03:14.480 --> 00:03:16.375
+(packages that depended on
-00:03:16.959 --> 00:03:19.599
-software in order to be usable
+00:03:16.375 --> 00:03:19.599
+non-free software in order to be usable)
-00:03:19.599 --> 00:03:22.159
-and technical problems because the
+00:03:19.599 --> 00:03:21.354
+and technical problems,
-00:03:22.159 --> 00:03:24.319
-developers of those packages didn't
+00:03:21.354 --> 00:03:24.877
+because the developers of those packages
-00:03:24.319 --> 00:03:26.159
-coordinate with us
+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:33.040
-convenient and clean to have them
-
-00:03:33.040 --> 00:03:36.560
-in Emacs.
+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:44.840
-is an effort to smooth these things
+00:03:41.120 --> 00:03:45.337
+is an effort to smooth these
+things out.
-00:03:44.840 --> 00:03:48.319
-out. The fundamental plan of
+00:03:45.337 --> 00:03:48.319
+The fundamental plan of
00:03:48.319 --> 00:03:51.680
-NonGNU ELPA is that,
+NonGNU ELPA is that
00:03:51.680 --> 00:03:54.480
we won't ask for copyright assignments
@@ -267,134 +238,101 @@ we won't ask for copyright assignments
00:03:54.480 --> 00:03:56.159
for those packages.
-00:03:56.159 --> 00:03:58.560
+00:03:56.159 --> 00:04:00.000
So, we won't be able to put them into
-
-00:03:58.560 --> 00:04:00.000
core Emacs;
-00:04:00.000 --> 00:04:04.080
-at least not easily, but we will
-
-00:04:04.080 --> 00:04:06.959
-have some control over how we distribute
+00:04:00.000 --> 00:04:03.550
+at least not easily,
-00:04:06.959 --> 00:04:09.519
-them.
+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:12.640
-We can put any package into
+00:04:09.519 --> 00:04:14.691
+We can put any package into NonGNU ELPA
-00:04:12.640 --> 00:04:15.439
-NonGNU ELPA as long as it's free
+00:04:14.691 --> 00:04:16.320
+as long as it's free software.
-00:04:15.439 --> 00:04:16.320
-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:16.320 --> 00:04:19.440
-If we like it we can
-
-00:04:19.440 --> 00:04:23.360
-set up that way for users to get it.
-
-00:04:23.360 --> 00:04:25.919
-We could put the package in exactly as
-
-00:04:25.919 --> 00:04:26.720
-it is
+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.160
-We can make an arrangement with the
+00:04:29.919 --> 00:04:32.647
+We can make an arrangement
-00:04:32.160 --> 00:04:34.160
-package's developers
+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:40.880
-directly for distribution by NonGNU
-
-00:04:40.880 --> 00:04:42.560
-ELPA
-
-00:04:42.560 --> 00:04:45.280
-but if they are not interested we can
-
-00:04:45.280 --> 00:04:46.080
-put it in
-
-00:04:46.080 --> 00:04:49.680
-ourselves and if we need to make any
-
-00:04:49.680 --> 00:04:52.000
-changes we can do so.
+00:04:38.000 --> 00:04:42.560
+directly for distribution by NonGNU ELPA,
-00:04:52.000 --> 00:04:55.120
-So, NonGNU ELPA
+00:04:42.560 --> 00:04:45.778
+but if they are not interested,
-00:04:55.120 --> 00:04:59.040
-is not meant to be just a way
+00:04:45.778 --> 00:04:48.729
+we can put it in ourselves,
-00:04:59.040 --> 00:05:01.360
-that others can distribute their
+00:04:48.729 --> 00:04:50.453
+and if we need to make any changes,
-00:05:01.360 --> 00:05:02.720
-packages.
+00:04:50.453 --> 00:04:52.000
+we can do so.
-00:05:02.720 --> 00:05:05.039
-It's meant at least in a minimal
+00:04:52.000 --> 00:04:58.688
+So, NonGNU ELPA is not meant to be
-00:05:05.039 --> 00:05:06.000
-technical
+00:04:58.688 --> 00:05:02.720
+just a way that others can distribute
+their packages.
-00:05:06.000 --> 00:05:10.479
-sense to work with GNU Emacs, and we'll
+00:05:02.720 --> 00:05:04.336
+It's meant, at least in
-00:05:10.479 --> 00:05:12.800
-make changes if necessary so that it
+00:05:04.336 --> 00:05:07.574
+a minimal technical sense,
-00:05:12.800 --> 00:05:14.240
-works smoothly with
+00:05:07.574 --> 00:05:10.686
+to work with GNU Emacs,
-00:05:14.240 --> 00:05:18.720
-Emacs. And
+00:05:10.686 --> 00:05:12.305
+and we'll make changes if necessary,
-00:05:18.720 --> 00:05:22.160
-this means that we're going to maintain
+00:05:12.305 --> 00:05:17.928
+so that it works smoothly with Emacs.
-00:05:22.160 --> 00:05:23.280
-it differently
+00:05:17.928 --> 00:05:25.365
+And this means that we're going to
+maintain it differently from GNU ELPA.
-00:05:23.280 --> 00:05:27.600
-from GNU ELPA. Well, GNU ELPA
-
-00:05:27.600 --> 00:05:29.759
-is hosted in a way that is actually
-
-00:05:29.759 --> 00:05:31.520
-rather inconvenient.
+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:38.639
-And so anybody that has access to write
-
-00:05:38.639 --> 00:05:39.039
-it
-
-00:05:39.039 --> 00:05:42.560
-can write any part of it. There are many
+00:05:35.600 --> 00:05:39.039
+And so anybody that has access
+to write it
-00:05:42.560 --> 00:05:44.639
-different packages in there maintained
+00:05:39.039 --> 00:05:41.239
+can write any part of it.
-00:05:44.639 --> 00:05:46.080
-by different people,
+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
@@ -402,47 +340,40 @@ 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:54.720
-and not to the others. Well, with NonGNU
+00:05:50.960 --> 00:05:53.122
+and not to the others.
-00:05:54.720 --> 00:05:58.400
-ELPA we plan to fix that. The idea is to
+00:05:53.122 --> 00:05:57.035
+Well, with NonGNU ELPA,
+we plan to fix that.
-00:05:58.400 --> 00:05:59.440
-have
+00:05:57.035 --> 00:06:01.411
+The idea is to have
+a single Git repository
-00:05:59.440 --> 00:06:02.479
-a single Git repository where you can
+00:06:01.411 --> 00:06:05.600
+where you can download various packages from.
-00:06:02.479 --> 00:06:05.600
-download various packages from.
+00:06:05.600 --> 00:06:08.400
+But they won't be maintained there.
-00:06:05.600 --> 00:06:08.800
-But, they won't be maintained there. Each
+00:06:08.400 --> 00:06:10.800
+Each of those packages will be
-00:06:08.800 --> 00:06:10.800
-of those packages will be
+00:06:10.800 --> 00:06:15.280
+copied automatically from some other place.
-00:06:10.800 --> 00:06:14.080
-copied automatically from some other
+00:06:15.280 --> 00:06:18.311
+Probably some other repository
-00:06:14.080 --> 00:06:15.280
-place.
+00:06:18.311 --> 00:06:22.960
+where the right people have access to work on it.
-00:06:15.280 --> 00:06:18.800
-Probably some other repository where
+00:06:22.960 --> 00:06:26.375
+And this way we can avoid giving
-00:06:18.800 --> 00:06:21.759
-the right people have access to work on
-
-00:06:21.759 --> 00:06:22.960
-it.
-
-00:06:22.960 --> 00:06:26.479
-And this way we can avoid giving a
-
-00:06:26.479 --> 00:06:28.160
-gigantic number of people
+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.
@@ -453,20 +384,17 @@ 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.280
-So, if you would like to help please
-
-00:06:43.280 --> 00:06:45.120
-write to me.
+00:06:40.479 --> 00:06:43.825
+So, if you would like to help,
-00:06:45.120 --> 00:06:47.759
-I think this is a very important step
+00:06:43.825 --> 00:06:45.120
+please write to me.
-00:06:47.759 --> 00:06:49.520
-for progress
+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! \ No newline at end of file
+Thanks and happy hacking!
diff --git a/2020/talks/16.md b/2020/talks/16.md
index 66f4a5eb..13f67e26 100644
--- a/2020/talks/16.md
+++ b/2020/talks/16.md
@@ -3,11 +3,11 @@
<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
-
Back to the [[schedule]]
Previous: <a href="/2020/talks/15">Moving from Jekyll to OrgMode, an experience report</a>
Next: <a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a>
+[[!taglink CategoryOrgRoam]]
[[!inline pages="internal(2020/info/16)" raw="yes"]]
diff --git a/2020/talks/17.md b/2020/talks/17.md
index 2e234180..cb6be4f5 100644
--- a/2020/talks/17.md
+++ b/2020/talks/17.md
@@ -8,6 +8,7 @@ Back to the [[schedule]]
Previous: <a href="/2020/talks/16">Org-roam: Presentation, Demonstration, and What's on the Horizon</a>
Next: <a href="/2020/talks/18">Org-roam: Technical Presentation</a>
+[[!taglink CategoryOrgRoam]]
[[!inline pages="internal(2020/info/17)" raw="yes"]]
diff --git a/2020/talks/18.md b/2020/talks/18.md
index 460e0c63..2623a4cb 100644
--- a/2020/talks/18.md
+++ b/2020/talks/18.md
@@ -3,11 +3,11 @@
<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
-
Back to the [[schedule]]
Previous: <a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a>
Next: <a href="/2020/talks/19">Sharing blogs (and more) with org-webring</a>
+[[!taglink CategoryOrgRoam]]
[[!inline pages="internal(2020/info/18)" raw="yes"]]
diff --git a/2020/talks/28.md b/2020/talks/28.md
index 3dae6103..bae5f837 100644
--- a/2020/talks/28.md
+++ b/2020/talks/28.md
@@ -8,6 +8,11 @@ Back to the [[schedule]]
Previous: <a href="/2020/talks/27">State of Retro Gaming in Emacs</a>
Next: <a href="/2020/talks/29">Pathing of Least Resistance</a>
+[[!template id="help" tags="help_with_main_captions"
+summary="main talk does not have captions"
+volunteer=""
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/help_with_main_captions)? You may be able to start with these
+[autogenerated captions](/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt)."""]]
[[!inline pages="internal(2020/info/28)" raw="yes"]]
diff --git a/2020/talks/30.md b/2020/talks/30.md
index 249e3ca2..1b6c41f4 100644
--- a/2020/talks/30.md
+++ b/2020/talks/30.md
@@ -8,7 +8,6 @@ Back to the [[schedule]]
Previous: <a href="/2020/talks/29">Pathing of Least Resistance</a>
Next: <a href="/2020/talks/31">Lakota Language and Emacs</a>
-
[[!inline pages="internal(2020/info/30)" raw="yes"]]
Sunday, Nov 29 2020, ~ 2:45 PM - 2:55 PM EST
diff --git a/2020/talks/31.md b/2020/talks/31.md
index 0c5bfb79..4d6b308f 100644
--- a/2020/talks/31.md
+++ b/2020/talks/31.md
@@ -8,6 +8,11 @@ Back to the [[schedule]]
Previous: <a href="/2020/talks/30">A tour of vterm</a>
Next: <a href="/2020/talks/32">Object Oriented Code in the Gnus Newsreader</a>
+[[!template id="help" tags="help_with_main_captions"
+summary="main talk does not have captions"
+volunteer=""
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/help_with_main_captions)? You may be able to start with these
+[autogenerated captions](/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt)."""]]
[[!inline pages="internal(2020/info/31)" raw="yes"]]
diff --git a/2020/talks/32.md b/2020/talks/32.md
index 29254e52..ed6eaa81 100644
--- a/2020/talks/32.md
+++ b/2020/talks/32.md
@@ -3,11 +3,16 @@
<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
-
Back to the [[schedule]]
Previous: <a href="/2020/talks/31">Lakota Language and Emacs</a>
Next: <a href="/2020/talks/33">Maxima a computer algebra system in Emacs</a>
+[[!template id="help" tags="help_with_main_captions"
+summary="main talk does not have captions"
+volunteer="sachac"
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/help_with_main_captions)? You may be able to start with these
+[autogenerated captions](/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt)."""]]
+
[[!inline pages="internal(2020/info/32)" raw="yes"]]