summaryrefslogtreecommitdiffstats
path: root/2020/info
diff options
context:
space:
mode:
Diffstat (limited to '2020/info')
-rw-r--r--2020/info/00.md22
-rw-r--r--2020/info/01.md45
-rw-r--r--2020/info/02.md615
-rw-r--r--2020/info/03.md252
-rw-r--r--2020/info/03/screenplay.fountain41
-rw-r--r--2020/info/04.md239
-rw-r--r--2020/info/05.md660
-rw-r--r--2020/info/06-transcription.md183
-rw-r--r--2020/info/06.md295
-rw-r--r--2020/info/07.md521
-rw-r--r--2020/info/08.md435
-rw-r--r--2020/info/09.md286
-rw-r--r--2020/info/10.md140
-rw-r--r--2020/info/11.md457
-rw-r--r--2020/info/12.md594
-rw-r--r--2020/info/13.md432
-rw-r--r--2020/info/14.md541
-rw-r--r--2020/info/15.md1038
-rw-r--r--2020/info/16.md400
-rw-r--r--2020/info/17.md397
-rw-r--r--2020/info/18.md80
-rw-r--r--2020/info/19.md43
-rw-r--r--2020/info/20.md534
-rw-r--r--2020/info/21.md92
-rw-r--r--2020/info/22.md676
-rw-r--r--2020/info/23.md553
-rw-r--r--2020/info/24.md88
-rw-r--r--2020/info/25.md249
-rw-r--r--2020/info/26.md239
-rw-r--r--2020/info/27.md288
-rw-r--r--2020/info/28.md60
-rw-r--r--2020/info/29.md75
-rw-r--r--2020/info/30.md231
-rw-r--r--2020/info/31.md82
-rw-r--r--2020/info/32.md48
-rw-r--r--2020/info/33.md63
-rw-r--r--2020/info/34.md668
-rw-r--r--2020/info/35.md311
-rw-r--r--2020/info/38.md115
-rw-r--r--2020/info/39.md809
-rw-r--r--2020/info/40.md20
-rw-r--r--2020/info/41.md27
-rw-r--r--2020/info/42.md25
-rw-r--r--2020/info/dm-notes.md13
44 files changed, 12982 insertions, 0 deletions
diff --git a/2020/info/00.md b/2020/info/00.md
new file mode 100644
index 00000000..c1a98d06
--- /dev/null
+++ b/2020/info/00.md
@@ -0,0 +1,22 @@
+# Opening remarks
+Amin Bandali and Sacha Chua
+
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--00-opening-remarks.webm" duration="7:04" size="109MB"]]
+[Download compressed .webm video, 8MB](https://media.emacsconf.org/2020/emacsconf-2020--00-opening-remarks-vp9-q56-original-audio.webm)
+
+- Hello and welcome to EmacsConf 2020!
+- Thanks to:
+ - the Free Software Foundation, especially the tech team, for support and sharing their BigBlueButton host
+ - Volunteers: bandali, bhavin192, bremner, dto, mplsCorwin, publicvoit, sachac, zaeph
+ - Speakers and participants
+- Schedule overview: <https://emacsconf.org/2020/schedule>
+- How to participate
+ - Watch: <https://live.emacsconf.org>
+ - Ask questions / take notes: <https://etherpad.wikimedia.org/p/emacsconf-2020>
+ - Chat: <https://chat.emacsconf.org> (or `chat.freenode.net` in your favorite IRC client)
+ - `#emacsconf` - General discussion
+ - `#emacsconf-accessible` - Community-provided descriptions of what's happening
+ - `#emacsconf-org` - Low-traffic for speaker checkins, anything that organizers need to know about
+ - Want to organize a hallway track/unconference session? Start a room on <https://meet.jit.si> and invite people through `#emacsconf`
+- Mailing list: <https://lists.gnu.org/mailman/listinfo/emacsconf-discuss>
+- Conduct guidelines: <https://emacsconf.org/conduct/>
diff --git a/2020/info/01.md b/2020/info/01.md
new file mode 100644
index 00000000..70db1190
--- /dev/null
+++ b/2020/info/01.md
@@ -0,0 +1,45 @@
+# Emacs News Highlights
+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 (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
+
+# Links
+
+- <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
+interesting things to <https://reddit.com/r/emacs> or
+<https://reddit.com/r/orgmode>, depending on the topic. I include
+selected links from there in my Emacs News. Alternatively, you can
+e-mail me at <sacha@sachachua.com>. I tend to reply pretty slowly, but
+I'm happy to hear from you.
+
+<!-- from the pad --->
+
+# Questions
+
+## Any news about guile-on-emacs? Is it a dead project?
+
+- [Sacha]: Haven't been linking to things about it lately. Last major news was <https://emacsninja.com/posts/state-of-emacs-lisp-on-guile.html> (May), I think
+
+- The only contributor to it occasionally shows up on #emacs, they revealed they've been busy programming for a living to improve browser JS engines and would need funding to do further Guile Emacs work (like, 10$ monthly from a few dozen people on Patreon or so)
+
+## Is there some kind of online summary page of Emacs community meetups and events?
+
+- [Sacha]: Not yet, although <https://www.emacswiki.org/emacs/Usergroups> is a start. We should figure out how to make a webpage and a calendar feed!
+
+# Notes
+
+- Additional online meetup (French): <https://www.emacs-doctor.com/emacs-paris-user-group/>
+- Please make your big blue button full screen. +1
+- Super happy with emacs!
+- 🤞 maybe next time we'll be taking notes with crdt.el (<https://code.librehq.com/qhong/crdt.el>) +1
+- super solid video, loved the baked captions +1+1
+- <https://github.com/sachac/emacsconf-2020-emacs-news-highlights> <- The talk
diff --git a/2020/info/02.md b/2020/info/02.md
new file mode 100644
index 00000000..fab7aa9d
--- /dev/null
+++ b/2020/info/02.md
@@ -0,0 +1,615 @@
+# An Emacs Developer Story: From User to Package Maintainer
+Leo Vivier
+
+[[!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
+becoming a maintainer for a big package in 2020. The goal is to show
+the logical progression between interest, gaining skills, becoming an
+expert, authoring, contributing and maintaining, in hope that it would
+bolster people to do the same.
+
+As someone who majored in a non CS-related degree, I feel that my
+story has a potential to grasp the attention of many attendees, since
+I basically started from the bottom of the ladder. Most people should
+be able to relate to one step on that ladder, which should hopefully
+encourage them to reach for the next step.
+
+My init files, which show the organic growth of my configuration:
+<https://github.com/zaeph/.emacs.d>
+
+Org-roam, the package which I am maintaining
+<https://github.com/org-roam/org-roam>
+
+<!-- from the pad --->
+
+# Questions
+
+## how did the freedom of Emacs help you on your way?
+
+(was missed and unanswered) no, he said he got into free software
+development via emacs
+
+## What's the most recent Emacs package or tool you've discovered that you've added to your repertoire?
+
+ Beacon <https://github.com/Malabarba/beacon>
+
+## Please show off your three-piece suit before you end your talk. (Requires fixing your frozen camera. If this is not possible, please post suit selfies at an easily accessible location.)
+
+## Have you read "Dirk Gently's Holistic Detective Agency"? (Recommended!)
+
+## What is your advice to start learning elisp language ? Any particular good ressource or any other tip ?
+
+- `(info "An Introduction to Programming in Emacs Lisp")` correction:
+ `(info "(eintr)")`
+- Read code, write code, read documentation, repeat. Eventually you'll
+ go from customizing Emacs to writing your own packages. Emacs
+ makes it easy to learn about the bits you're interested in, you can
+ get far with taking small steps.
+- Mastering Emacs <https://www.masteringemacs.org/>
+
+## Any recommendation for good packaging guides or places to start? I get a bit overwhelmed by some things e.g. the choice of different test frameworks
+
+- See <https://github.com/alphapapa/emacs-package-dev-handbook>
+- Old but still relevant: <https://www.youtube.com/watch?v=QRBcm6jFJ3Q>
+- Things that a new major mode could hook into:
+
+# Notes
+
+- English Major from France and freelance software engineer
+- zaeph is my new role-model for speaking the English language as a
+ second language
+- Maintainer of org-roam: <https://github.com/org-roam/org-roam>
+- Became interested in using plaintext for organisation after reading:
+ <http://doc.norang.ca/org-mode.html>
+ - accompanying video
+ <https://toobnix.org/videos/watch/1f997b3c-00dc-4f7d-b2ce-74538c194fa7>
+- <http://doc.norang.ca/org-mode.html> Organize your life in plain
+ text
+- Supercategory --- yeah I've had that use case :-)
+- I really much like this format: insight on personal development
+ without screensharing but in person
+- <https://www.gnu.org/software/emacs/manual/eintr.html> Beginner
+ guide to elisp
+- edebug → awesome `(info "(elisp) Edebug")`
+- I really like this pad. +1+1+1+1
+- Guaranteed best dressed speaker, even before knowing what all the
+ others look like ;-)
+ - 3-piece suit color-coded to emacs and org-mode
+- To newcomers: in my case emacs-devel and emacs-sources were amazing
+ resources for learning; the people were SO generous with their time,
+ to share comments and ideas to improve code.
+
+<a name="transcript"></a>
+# 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
new file mode 100644
index 00000000..db3be888
--- /dev/null
+++ b/2020/info/03.md
@@ -0,0 +1,252 @@
+# Idea to Novel Superstructure: Emacs for Writing
+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 (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 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
+it into a complete story. You have many ideas for a novel, and you
+are wondering how to proceed. You started writing your heart out, and
+you now feel the need to create a framework for a novel.
+
+Worry not, Emacs is here to the rescue.
+
+Listen to this talk to find out how to develop your story idea into a
+framework for a novel, all within your favourite text editor, Emacs.
+
+What you will learn during the session:
+
+- How to write a single-line plot for a novel
+- How to write the backbone of the novel, the main character arc
+- How to create characters and write their arcs
+- How to create a story design
+- How to create the scenes design
+- How to plan your novel writing project
+- How to track your project
+
+The modified Emacs template has all the ingredients and flow to start
+from a basic idea to a full fledged thrashed out novel superstructure.
+
+Once you are done with the superstructure, you can use the planning
+and clocking infrastructure to finish scene after scene, thus
+finishing your masterpiece.
+
+We will use:
+
+- The snowflake method - <https://www.advancedfictionwriting.com/articles/snowflake-method/>
+- The seven-point story structure - <https://invidious.snopyta.org/watch?v=KcmiqQ9NpPE&list=PLL7D_RCJrhcLzLiO17m7KcnG5WrjcUxGz>
+- The original emacs writing template - <https://tonyballantyne.com/EmacsWritingTips.html>
+- Some spices from the speaker's kitchen
+
+# Links
+
+- Screenplay in Fountain format -
+ <https://emacsconf.org/2020/info/03/screenplay.fountain>
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): 9:40-9:58
+
+# Questions
+
+## Do you have occasions to use Emacs for multilingual text composition? How do you deal with spell-checking etc?
+- Wrote in English with spell-check but wasn't able to find anything for the local script
+ - ^ thank you. I find using multiple languages in one document is a hard problem, not made easier in Emacs
+
+## Is it possible to align the columns in headings and subheading?
+- Thanks for the beautiful demo.
+
+## Maybe there should be an emacs-for-writing mailing list and online Writers Workshop (?)
+- This is a good idea, perhaps an online Writers Workshop indeed makes a lot of sense.
+- Has conducted online WW in India, used Notion (Emacs Org Mode was scary for other attendees)
+
+## How do you share drafts of your novel? If you use pandoc to export to word (etc), how do you incorporate feedback on the document back into org? (Thank you for the talk)
+- Exported to Word (via pandoc). There were some inconvenient parts for the editor, and Ramadurai copied and pasted the feedback/changes from Word into Emacs.
+- For collaborators: paste it into Google Docs. See the question below.
+- Not an answer by the speaker, but here's the workflow of Mickey Petersen: <https://masteringemacs.org/article/how-to-write-a-book-in-emacs> (Mastering Emacs)
+- From my bookmarks: <https://www.wisdomandwonder.com/link/9922/how-to-reintegrate-changes-for-word-back-into-org-mode>
+
+## Can you show exported pdf of any of your novel?
+- Will make a "demo" and have a link somewhere accessible to the community (probably on talk page at <https://emacsconf.org/2020/schedule/03/> )
+
+## How do you collaborate with others while writing your Novel ? Like sharing your file and getting feedbacks.
+- working on ebook sustainability, long org mode file, pasted into google docs so collaborator and editor can see it
+- like to see python
+- paste to google docs
+
+## Can you text-wrap in the columns?
+- Community: possibly ftable.el
+- you specify column mode in org mode in prsentation
+ - THANKS
+
+## How to enable column mode in org mode
+- M-x org-columns (C-c C-x C-c)
+- Or use speed selection in Org-mode.
+ - Thanks
+
+# Notes
+
+- Write a novel about a Scrabble-obsessed grandmother
+ - Novel is still not published
+- Snowflake method + Tony Ballantyne (sp?) — <https://tonyballantyne.com/EmacsWritingTips.html>
+- The talk was made by org-re-reveal
+- Column-view and plotpoints per story arc, 2ndary characters augment the main character
+- <https://www.advancedfictionwriting.com/articles/snowflake-method/>
+- 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/03/screenplay.fountain b/2020/info/03/screenplay.fountain
new file mode 100644
index 00000000..c483360f
--- /dev/null
+++ b/2020/info/03/screenplay.fountain
@@ -0,0 +1,41 @@
+title: Idea to Novel Superstructure: Emacs for Writing
+version: 1.0
+credit: Screenplay by
+author: Dr. Bala Ramadurai
+format: screenplay
+date: 2020-08-31
+source: Story by Dr. Bala Ramadurai
+Story Consultant:
+contact: bala@balaramadurai.net
+
+EXT. TERRACE WESTERN VIEW - DAY
+We see an upside down view of the world outside with Bala smiling and waving at us.
+
+BALA
+No, there is nothing wrong with your mobile device or your computer. This was how my world was when my kid was born 11 years ago.
+
+The world becomes upright.
+
+BALA
+Hello, I am Bala Ramadurai, author, professor and consultant. 11 years ago in Bangalore, my son was born. My wife and I had hardly slept through those days. That's when my grandma visited us to take a look at her great grandson. As joyous as that sounded, it came with a peril. My grandma was a Scrabble addict. She hardly spent any time at all with her great grandson, but she spent most of her time playing Scrabble. She insisted that my wife and I join her. That's when an idea dawned on me to write about my Scrabble obsessed grandma. What if I could make it into a novel. Not many people have Scrabble obsessed grandmothers, after all.
+
+EXT. TERRACE GARDEN VIEW - DAY
+
+BALA
+I wanted to expand this to a novel, but did not know how. I bumped into Dan Wells' video on 7-point story structure. I was now convinced that a seed idea could indeed be converted into a novel, so I tried out many tools at the time - million dollar tools like MS Word, Excel, Scrivener and the lot. In my research of tools, I found that George RR Martin famously had used Wordstar for typing out Game of Thrones. At that point, I remembered about an old editor - Emacs. I knew about Emacs from my undergrad days and my earlier software days. Thanks to the emacs community and particularly the orgmode community, I had what I wanted.
+
+EXT. TERRACE GARDEN - ON THE EXERCISE CYCLE - DAY
+
+BALA
+Now, it was time to put the idea into action. I used another method called snowflake and also Tony Ballantyne's emacs writing template. The main features from org-mode that I used - fold, unfold, columnview, tags, distraction-free writing experience, clocking, project tracking and export.
+
+INT. BALA'S LAPTOP
+
+BALA
+Now, the demo. We start with the plotline (a one line summary of the story). Then we write out the characters, describing them in detail. Write the main story arc, followed by the secondary character story arcs. Here is where org-mode really scores. Move the points in the story structure to form a coherent story. We get into location research. Write them all out in the columns. Once you are satisfied, now scene design. Each point in the story requires at least one scene. In columnview, you can see many things - Act, scene, story point, location, POV or point of view. Make sure you finish this and read the whole story if it makes sense. Now, create a project file to track your project and clock your project to see how long it takes. I used a similar structure for my non-fiction book, which I published recently, all written and edited in emacs-org-mode.
+
+INT. BALA'S STUDIO
+Bala holds Karmic Design Thinking book in his hand.
+
+BALA
+Thanks to you guys at the community, I am now a published author and I plan to publish and help other authors publish using this wonderful tool called emacs-org-mode. Thank You.
diff --git a/2020/info/04.md b/2020/info/04.md
new file mode 100644
index 00000000..40ad0ec9
--- /dev/null
+++ b/2020/info/04.md
@@ -0,0 +1,239 @@
+# Music in Plain Text
+Jonathan Gregory
+
+[[!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
+music engraved with traditional layout rules. Similar to LaTeX and
+other typesetting programs, its input format describes the visual
+layout of the score using commands to define musical expressions. This
+makes collaboration easier, prevents users from having to adjust
+layout settings manually, and facilitates digital archiving and
+distribution of musical scores. In this talk, I begin with an overview
+of the LilyPond syntax and move on to showcase ways for producing
+algorithmic compositions and music books using Make, Org and
+LilyPond-mode.
+
+Source files and other materials can be found at
+<https://gitlab.com/jagrg/emacsconf-2020> and
+<https://gitlab.com/drumbook>.
+
+<!-- from the pad --->
+
+# Questions
+
+## Do you have any thoughts on generating scores in chant notation (neumes)?
+I'm not familiar with typesetting chant notation, so I suggest reading
+this specific section of the manual for information.
+
+## Do you use this to compose or to write up compositions&#x2026;?
+No and yes. I use pencil and paper to compose the first draft. Then I
+move to Emacs to input the notes. Either way it's certainly possible
+to compose from Emacs directly, especially if you're doing this
+programatically, so I guess it depends on what you're trying to do.
+
+## Can one use MIDI/USB instruments (like keyboards) to input LilyPond? For example for note heights?
+
+[Don't know about Emacs, but Frescobaldi supports MIDI input.]
+
+There is a package called `midi-kbd` which creates keyboard events
+from MIDI input, so I believe the answer is yes, but I don't own a
+MIDI device, so I haven't tried it.
+
+## Did you ever write huge scores (BigBand/Orchestra) in Emacs?
+Never, but that's certainly possible.
+
+## Is there a decent OCR for handwritten music→LilyPond?
+I'm not sure, but if the OCR works with MusicXML, then you can use the
+`musicxml2ly` command to convert the XML file to a LilyPond file.
+
+## What shell are you using with the fancy autocomplete?
+Zsh with fzf.
+
+## Do you use any kind of Emacs to MIDI interface besides exporting MIDI from LilyPond?
+No.
+
+# Notes
+- Emacs + LilyPond.
+- Similar to LaTeX — has its own file format and syntax, can also export to MIDI.
+- `(info "(lilypond-learning) Top")`
+- The contrast between background and foreground is a little too weak.
+- Uses LilyPond-mode, flycheck.
+- <https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-lilypond.html>
+
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt -->
+<a name="transcript"></a>
+# 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
new file mode 100644
index 00000000..c892d04f
--- /dev/null
+++ b/2020/info/05.md
@@ -0,0 +1,660 @@
+# 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"
+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 (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
+yet to happen, I've recorded a fair share of unreleased music over the
+years. I decided it was time to share some of it with the world
+through the power of Emacs!
+
+Rather than using the available non-free (or even free?) platforms out
+there, I decided to build a Bandcamp-like page from scratch. While I
+could have chosen many of the static-site building tools, I decided to
+use the tool closest to my heart and automate the process of building
+a web page from a directory of audio files with Emacs Lisp.
+
+I will share with you how I managed to create a personal workflow for
+releasing an album without leaving the One True Editor that includes
+editing audio metadata with EMMS and generating HTML while cobbling
+together yasnippet and the format macro.
+
+<https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.tar>
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start of Q&A: 2020-11-28T10.28.47
+ EST; End: 2020-11-28T10.43.49
+
+# Questions
+
+## What does "Bard Bivoumacs" mean?
+Bad pun on "Bandcamp" — a bivouac is an improvised campsite and bard = band.
+
+## Does this meta-data workflow also support unsynchronized lyrics within ID3-tags (multi-line meta-data)?
+- The UI for EMMS is complex, a gazillion of functions in that
+ namespace.
+- Check EMMS info manual `(require 'emms-lyrics)` this uses lyrics
+ files outside of ID3-tags.
+- multi-line metadata may depend on the audio format?
+
+
+## Is it possible to import batch meta-data?
+Not sure, guesses yes. It can connect to metadata services. Backend
+calls to shell programs for various purposes.
+
+## My current workflow for tagging music is to first apply ReplayGain in foobar2000, fix egregious mistakes there (like funny directory structure, lack of album artist, &#x2026;), then use beets to apply metadata from Musicbrainz/Discogs and go over the remaining albums with foobar2000 again. I wondered whether there's a chance textual tagging could allow doing it all in one program, have you experimented with mass tag updates/queries?
+No experience with that, but it could be possible if someone™ made the
+right textual interface and would be very powerful (for example wdired
+could be an interesting inspiration).
+
+## Is there a link to some info expanding your philosophy of how to compensate musicians, I was interested to learn more about that.
+No; universal (basic?) income would solve a lot of problems.
+
+## What Emacs theme are you using?
+kaolin theme, maybe aurora or bubblegum.
+
+## Are you using Doom Emacs, per chance?
+- Answered in chat, vanilla Emacs with doom-modeline.
+- OK, thanks.
+
+## Is SVG support built in to Emacs?
+It's builtin in Emacs 27 (and earlier:
+<https://www.emacswiki.org/emacs/EmacsSvg>). You can even take
+screenshots from within Emacs as SVG (if compiled `--with-cairo`).
+
+## How do you take SVG screenshots within Emacs?
+<https://www.reddit.com/r/emacs/comments/idz35e/emacs_27_can_take_svg_screenshots_of_itself/>
+
+## It seems Mac does not have support for Cairo?
+- Might need to manually compile Emacs with support for Cairo
+ <https://www.reddit.com/r/emacs/comments/7ewewl/compiling_emacs_26090_with_cairo/>
+- Download source code then take a look at the `--help` flag when
+ running `./configure`. Cairo support is experimental and can be
+ enabled with `./configure --with-cairo`.
+ - I see. Thanks again.
+
+# Notes
+- Musician.
+- Org document presented with org-tree-slide:
+ <https://github.com/takaxp/org-tree-slide>
+- EMMS (<https://www.gnu.org/software/emms/>) for metadata authoring
+ and organising playlists.
+ - Creates HTML from EMMS metadata.
+- <https://github.com/jagrg/org-emms>
+- Publish music by Emacs.
+- I liked the example for beginners!
+- Uses literate programming style to be able to resume work without
+ much time available for programming.
+ - See `(info "(org) Working with Source Code")` for single blocks
+ <https://github.com/casouri/ftable/blob/master/ftable.elhat> can
+ be executed in Emacs with C-c C-c.
+ - Several languages combined with noweb `(info "(org) Noweb
+ Reference Syntax")`.
+- SVG support used for buttons.
+- <http://churls.world> °°°
+- Meta: "You can even take screenshots from within Emacs as SVG" —
+ would it be possible to set up an SVG livestream&#x2026;?
+ - I doubt it would be practical to do it at a high framerate, but
+ it's worth trying out. The other disadvantage of the approach is
+ that there's few vector animation formats (Flash, HTML5), so
+ saving it losslessly to disk will be tricky.
+
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt -->
+
+<a name="transcript"></a>
+# 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 (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-transcription.md b/2020/info/06-transcription.md
new file mode 100644
index 00000000..edd9f912
--- /dev/null
+++ b/2020/info/06-transcription.md
@@ -0,0 +1,183 @@
+# Transcription
+
+Following is a somewhat hasty self-transcription of my talk. Please
+don't hesitate to [mailto:corwin@bru.st](ask for clarification) or to
+add any clarifications you feel helpful back into the EmacsConf wiki.
+
+ 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.
+
+My name is Corwin Brust and I will be talking about getting started
+with Emacs Today. I have been an Emacs user for a long time-
+
+First of all thanks and a huge welcome to the conference..(_15s_)
+
+On behalf of and back to the other organizers. It has been cool to
+have a peek backstage.
+
+So. I've used a lot of different editors in my time. That's about 25
+years as a professional software engineer. And most of that
+time I've been using Emacs. (~54s_)
+
+I'll talk a little bit in a minute (if I can ever find my slides)
+about how I got into Emacs, but if you've used Emacs and a lot of
+other editors for a long time, something that you notice right away is
+that you get good with it in a way that stays meaningful. You learn
+new things, those things stick with you. You learn how to- how to
+make it do new tricks and then keep doing those tricks. (~1m26s_)
+
+I want to mention this conference isn't about (whoops: "this talk")
+how to adjust your configuration specifically. I don't have a bunch
+of good code samples in here. There are a bunch of other great talks,
+especially Andrew's that I think may be aimed more at that "hey, I'm
+just getting started with Emacs what are some things to try to make it
+more comfortable for me starting?" [subject/audience? cezb]. (~2m07s_)
+
+This is about how to think about the problem space more. (_2m10s_)
+
+Hopefully a good way to warm up as we start thinking about some of the
+lightning talks later on. (I'm going to bring up my IRC buffer
+[offscreen] in case I run into time- I didn't get my stopwatch started
+for this one.) (_2m25s_)
+
+So, alright: let's dive in. (_2m30s_)
+
+We assume that we want to install packages, and maybe configure some
+features. This is particularly from the perspective of where we're
+working with a bunch of others on a team and we want to get something
+done. (_2m42s_)
+
+Some of us probably have mature Emacs workflows, others may be
+installing it for the first time. (_2m50s_)
+
+So the first questions is, you know- in that context: what's the value
+proposition? Why should I mess with my machine, my mature Emacs
+configuration, impose my way of thinking and ideas over the way
+somebody else is learning Emacs? (_3m09m_)
+
+It can be [laugh] I'm off my slides here a little bit.. (_3m13s_)
+
+It can be a little tricky to learn Emacs. One thing that helps us a
+lot is if people that we are working with can tell us, kinda,
+keystroke-for-keystroke at times what to do and explain what
+everything is doing. (_3m30s_)
+
+And using the same packages as others can really help us working
+together on a project. (_3m36s_)
+
+Speaking from my personal experience, it took me decades to get to the
+point where I was excited to program in Emacs Lisp. (_3m26s_)
+
+I've programed in a lot of programming languages, but Lisp wasn't on
+my list. I looked at my config, that I was copy-pasting around from
+generation after generation of .emacs file or re-crafting it by hand
+and from Internet searches, to get things that I needed when I would
+quickly go install Emacs to start some new job or contract, and
+quickly get though that work-flow that caused me to go install the
+program. (_4m15s_)
+
+You know, just simple little one-liners that got committed to memory
+over decades eventually just lead [me] to a sort of "hey, what's going
+on here". (_4m27s_)
+
+And I credit my good friend Jeff Goff who died earlier in 2020 for my
+lifelong love of Emacs. Perhaps Erik and I will talk a little more
+about that at another talk we have scheduled but Jeff was a huge
+influence on us in a number of ways and a huge contributer to the Raku
+programming language which is very cool. (_4m52s_)
+
+So, understanding how to make a good decision about splitting up
+configuration in a way to share it with people with really different
+uses of Emacs. That's actually a complicated topic, and I want to off
+and stare at it for a second: (_5m11s_)
+
+I think Emacs is about people, so that means it is about community.
+And community means we're going to invite disagreement. In fact that
+disagreement isn't necessarily a road-block to our project, in fact
+that some of the work our project can invite us to do is to get closer
+to each other by inviting those disagreements, by learning from people
+of different styles, and from how they argue, and thinking about why
+they have that perspective and what technical benefits that perhaps
+radical point of view might carry away. Some people are really
+aggressive arguers others are very passive and really couch their
+ideas in distancing terms, "well probably this is a good idea" or
+"please double check me". Those don't always indicate how certain a
+person is. Because we're different. We have different ways of
+communicating ideas such as certainty or excitement. (_6m23s_)
+
+When we thinking about a bunch of really diverse programmers
+approaching Emacs probably one of our first really big challenges is
+just to pick what we're going to go after. There are a number of
+existing kit installs and things like this. My argument is that you
+can get pretty far just trading files around. And maybe the more
+value conversation to have is making the hard decisions, e.g. "should
+we have vertical completion", should that be out of the box and those
+that want the traditional splayed-out over a sing line such as the
+mode line will have to add a line to their configuration. (_7m26s)
+
+The way to get there?
+
+How do we find out what works?
+
+We don't want to slow down the people who are super productive with
+Emacs, and ask them to completely break their workflows to make it
+easier for new folks, at the same time we do want to make sure those
+new people. (_7m42s_)
+
+At the same time, we do want to make sure those new people arre
+excited by Emacs and not turned off by having to learn the entire
+jungle of Emacs history in the form of it's unique technical stylings
+in terms of frames, buffers, and other unique Emacs viewpoints on
+interface concepts, especially. (_8m15s_)
+
+The encouragement here is to keep using the project team as a
+crucible. Rather than following the defaults of, um, finding the
+simplest customizations that generally work, what if we tried to look
+for fairly specific configuration that we'll expect basically all of
+our developers to be using, at least when the submit bug
+reports. (_8m48s_)
+
+In particular with this, I think that degree of experimentation can
+drive back into the Emacs development process. In the development
+mailing list.. [] In the context of Emacs development as a greater
+entity, we see this struggle. We have the sense that some things can
+"never" be change. I think one thing that can help us get there is
+evidence that says "hey, my 30-40 person team is using this set of
+bindings and here is what we learned about new Emacs users coming in
+and trying that". (10m)
+
+So let's just recap real quick: in theory Emacs works out of the
+box. That means we are free to throw it all away and start over.
+[trouble with slides, again]
+
+Our goal is to enable users- to unlock our computers, to do as much
+with them as possible. My work of encouragement is experiment with it.
+And think really specifically about how the development users may be
+different from each other, as you are configuring the development
+environment of emacs for developing on a project.
+
+That's my talk, etc, answer any questions.(_12m09s_)
+
+Do you use Emacs as a Community Building Tool? (_13m15s_)
+
+Do /i/ use Emacs a community building tool? Or *how* do I use Emacs as a
+community building tool. [amin: "it doesn't say"]
+
+Yes, absolutely. I think Emacs is an ambassador to the gnu
+tool-chain. in the fullness of time we will see an Emacs that will
+make others, Android and iOS, dream. That's why that mock us and say
+that Emacs is an operating system. It's because it could be, if cared
+for it to be. It's quite a threatening product in terms of the number
+of problem spaces it can address, how many types of users it can
+satisfy. (_13m01s_)
+
+And the things that we can do to make it robust in those environments.
+We're always thinking about the weak points but is Emacs a community
+building tool? Heck yeah. (_13m13s_)
+
+[we agree that I'll write my answers to the remaining questions, I say
+thanks more, and we're done. ps, I'll get to your question or
+comments I can find a response to within the next week, I expect]
diff --git a/2020/info/06.md b/2020/info/06.md
new file mode 100644
index 00000000..2eae273f
--- /dev/null
+++ b/2020/info/06.md
@@ -0,0 +1,295 @@
+# Trivial Emacs Kits
+Corwin Brust
+
+[[!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"]]
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T10.45.48; Q&A
+ 2020-11-28T10.57.38; End: 2020-11-28T10.59.48
+
+# Questions
+
+## What makes the Emacs community unique (special/different?) from other communities (if anything)? And/or, are there other communities that are similar in your view?
+
+## Do you use Emacs as a community building tool?
+- Yes, Corwin uses Emacs as a community building tool.
+- Corwin: "Heck yeah, Emacs is a community building tool"
+
+## Are you suggesting there is value in "Emacs for scientists", "Emacs for programmers", "Emacs for writers" etc. &#x2013; i.e. different defaults for different groups?
+[Corwin] Implicitly, yes. My argument is that we should rethink the
+problem of building and maintaining Emacs configuration sets each
+time we assemble a team to work on something. That gives us a new
+chance, each time, to maybe produce new data that helps us make more
+informed decisions about how to make our own personal approaches more
+robust (and easier to read), but also to help "chip away" at the huge
+work of making Emacs more easily configurable for new users.
+
+## What is the background you are using? What is the tool you are using to present?
+[Corwin] Wallpaper Engine on Steam is probably the thing that's
+grabbing attention. I haven't tried it under GNU/Linux. My family
+are (mostly) Windows users right now ****heavy sigh**** I don't want
+to get into my tool chain a huge amount, but I will talk about it some
+as/during the Welcome to the Dungeon talk tomorrow. For now I will
+say I'm using a mix of free (free and not-free but too easy to avoid
+tools on my one pretty good computer). I would love to have the time
+to invest to use more (only) free stuff but sometimes we can't afford
+the freedom, in terms of the learning curve. I think this is the most
+important problem space in free software, FWIW.
+
+# Notes
+- <https://github.com/dungeon-mode/game> co-founder
+- Initial "trolling" by showing presentation notes in different
+ editors: vim, Notepad++, VS Code, Sublime Text.
+- 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
new file mode 100644
index 00000000..2fd5352f
--- /dev/null
+++ b/2020/info/07.md
@@ -0,0 +1,521 @@
+# Beyond Vim and Emacs: A Scalable UI Paradigm
+Sid Kasivajhula
+
+[[!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 (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,
+and if you tried to explain what you were doing there, nobody would
+understand, least of all those Vim users who would say that the whole
+enterprise was foolhardy to begin with. They don't get it, those fools. Let
+them flounder about in their "normal mode." Normal isn't good enough for
+me! I want exceptional, IDEAL, I want&#x2026; glorious mode, that's what I want.
+And the only thing that'll cut it is if I do it &#x2026; my way. Why, with my
+precious emacs.d, I'm invincible! Well&#x2026; just between you and me, there
+are times when learning new keybindings every time someone makes a new toy
+gets to be a bit of a drag, and some days I can't keep my C-c's and my C-c
+C-c's straight if I'm being honest with you, but you'll never catch me
+admitting it! I do wonder if there's a better way to get to glorious mode,
+even though my .emacs.d is already perfect (of course).
+
+If this secretly sounds like you, then rejoice, there just might be a new
+way, a better way! And you could potentially get there in days instead of
+years, so that even your script kiddie coworker with their "VSCode" (groan)
+may at last come around to your way of looking at things, and, maybe, just
+maybe, even those Vim users (hiss!)!
+
+"Epistemic" Emacs is a user interface paradigm based on treating aspects of
+the user interface as conceptual entities that can be reasoned about in
+terms of a standard language. Essentially, instead of learning keybindings
+for each specific action, you learn keybindings for general, conceptual
+habits, kind of like Vim, except that instead of reasoning only about text,
+you reason about any aspect of your interaction with the machine, whether
+it's windows or buffers or even those interactions themselves. The promise
+of this approach is that you just learn a simple language once, and you can
+then apply it to vastly different aspects of your user interface, with the
+same keybindings doing different things in different contexts, in sensible
+and predictable ways. And in principle, whenever that new toy technology
+comes around, anyone could extend the UI language to apply to it in a
+matter of minutes, and you'd already know how to use it.
+
+<!-- from the pad --->
+
+### Actual start and end time (EST)
+- Start: 2020-11-28T11.00.47
+- Q&A: 2020-11-28T11.18.12
+- End: 2020-11-28T11.24.51
+
+# Questions
+
+## Can minor-modes in Emacs be integrated via chimera as a "mode"?
+Good question. If it is already a "modal"-like minor mode, then we
+ocould potentially do it this way. But in general, it could make sense
+to couple minor modes to rigpa "modes", towers (sets of modes), or
+complexes (sets of towers), so that entering those modes/towers would
+enable those minor modes, and likewise disable the minor modes upon
+exiting. E.g. for Lisp editing, we might want to enable the symex /
+paredit minor mode in Lisp tower, and disable it upon swapping to
+Vim / Emacs tower.
+
+## Do you think it would be hard for people to remember all the modes and bindings?
+- Bindings, no - it would be easier than currently because the
+ bindings generally stay the same across modes (e.g. hjkl always
+ means left down up right, and there are other conventions).
+- Modes, if the tower is 2-3 tall, then it's not a problem at
+ all. Totally intuitive. For > 3 it might be hard, so I think in
+ practice you would alternate across more small towers rather than
+ have fewer big towers.
+- Also, most modes are always available via "direct access" keybinding
+ (eg. s-w = window mode), so you can jump to one at any time, and
+ it'll return you to your original position in the tower when you
+ exit. Modes don't need to be in the current tower in order for you
+ to use them. But if you're using them frequently you might want to
+ add them or temporarily switch to a tower that has them &#x2013;
+ whatever feels the most natural for the specific case.
+
+## Are you familiar with <http://emacs-versor.sourceforge.net> ? And other earlier implementations. A short comparison would be nice.
+
+Not familiar with this, but it looks very interesting. From a quick look, I can say that versors is partially related to rigpa, in that its "cursors" roughly correspond to noun modes. Rigpa isn't limited to noun modes, though. For instance Vim's normal mode contains many nouns and a special command language. On the other hand, Emacs's usual editing behavior doesn't think in terms of nouns at all and has a myriad of ad hoc keybindings. Yet, both are rigpa modes, along with modes like window-mode and buffer-mode which each correspond to individual nouns (like versor). Rigpa is less about the nature of the modes (about which it is relatively unopinionated, although noun-specific modes may be a common choice) than it is about the relationship between modes, the ability to structure them and interrelate them and configure them on the fly.
+
+## What package is used?
+- Probably Symex mode! → <https://github.com/countvajhula/symex.el>.
+- The package isn't yet published to MELPA →
+ <https://github.com/countvajhula/rigpa> (was called indra.el).
+- The mode is called 'epistemic-mode' (final name is not decided on
+ yet).
+
+## Why is the package called rigpa?
+A reference: <https://en.wikipedia.org/wiki/Rigpa> (knowledge of the
+ground).
+
+## How to deal with Dvorak (et al.) layouts? This has always bugged me. Is there a "XModmap Mode"&#x2026;?
+- Vim users don't remap their keys. The homerow is not a big deal,
+ actually.
+- Hm&#x2026; I've always found it a bit of an obstacle but haven't
+ tried hard! hjkl → jk makes sense but hl, not so much.
+ - The day you want to do this, you'll absolutely be able to do it
+ and have it become natural. Just gotta want it :)
+
+## I mostly use default model provided by vanilla Emacs and work in Org mode for text editing. Can you give some examples, e.g. how can the user can use the concept of "mode of mode" to do some interesting editing?
+- The more modes you have, the shorter the individual keystrokes
+ become.
+ - ^ Not to be a pain but my comment about Dvorak is related :-)
+- There are many bindings in Org mode (e.g. agenda manipulation,
+ manipulating headings and subheadings, promoting/demoting) that
+ would be a natural fit for a dedicated modal interface. At the
+ moment you probably use only a subset of all of the available
+ options because of the constraints of conveniently (1) knowing
+ about, (2) remembering and (3) using the bindings. With a dedicated
+ mode, you could edit Org buffers using a Vim-like modal interface
+ where all of the options are easy to remember and use.
+- Mode mode / tower mode could be useful if you are doing literate
+ programming or "multi-modal" Org buffers where you have many
+ different languages embedded within the Org file. In this case, you
+ could modify your tower using mode mode, or swap between different
+ towers, to quickly have the right modes for different parts of the
+ file.
+
+## How do new modes come into existence?
+- Modes from any modal interface provider are supported via a modal
+ interface abstraction layer ("chimera").
+- You can define new modes as a hydra or as an evil state, and then
+ they just need to be "registered" with the framework via a function
+ call for them to be incorporated.
+
+## Is this built on top of Hydra?
+- Any modal interface provider is in principle supported. There is an
+ abstraction layer called "chimera" that allows any provider to be
+ used as long as it implements an interface (e.g. including
+ indicating entry and exit hooks for each mode).
+- Some of the modes are evil modes (e.g. normal, insert).
+- While others are hydras (window, buffer, etc) (including Symex? yes,
+ Symex too).
+
+## Which retro theme are you using?
+green phosphor.
+
+## Will this involve defining more epistemic-modes for non-editable buffers like Dired? How do you deal with the explosion of the number of modes?
+- This is a great question, so here is a long answer:
+ - I am keen to keep this extension lightweight so that it plays well
+ with existing Emacs tools without needing a custom ecosystem. The
+ modal interface abstraction layer "chimera" would be a big part of
+ this, enabling existing modal-like interfaces to be recognized in
+ the framework out of the box, meaning that they would be
+ automatically "wired into" the broader framework via the standard
+ exits (e.g. Escape and Enter).
+ - I'm not sure what the best way to handle dired would be, but if it
+ could be handled in this way, then that would be the way to do it.
+ - The "complex" of towers initially available is tied to major mode,
+ that takes away some of the complexity right off the
+ bat. E.g. when you open a Lisp file it gives you a Lisp-related +
+ general-purpose complex of towers.
+ - The idea is to support the "explosion" of modes, but make it scale
+ well by (1) having them be structured, and (2) the structure being
+ the same at every level
+
+## How do you deal with the mental overhead of keeping a stack of modes and your position in it? While this simplifies the actual editing process by defining them as a single set of keybindings, the complexity is transferred to navigating modes.
+- While the complexity is transferred, the nature of that complexity
+ is different. In the case of keybindings, the complexity is
+ unstructured and ad hoc, whereas in the case of mode navigation,
+ it's a matter of "going to the right place" for your keys to have
+ the right meaning.
+- In practice you would only have towers of size 2-3 I would guess,
+ with every other mode jump always being available via an ad hoc jump
+ (e.g. even in Vim tower, you can always jump to Window mode and it
+ would return you to the original mode you were in upon exit).
+- And the main paradigm would be swapping between small towers.
+
+# Notes
+- Indra's Net: <https://en.wikipedia.org/wiki/Indra%27s_net>.
+- "We are at a higher level looking down at the text, we can describe
+ this text&#x2026;".
+- "There is a way to go down to ground level, and a way to escape from
+ that to the referential level".
+- "All of the nouns of the world of text are available".
+- &#x2026;. Or you could have a dedicated mode for every noun — Nouns
+ as modes.
+- Character, Word, Line mode; Window mode! All with the same basic keystrokes.
+- "Rumpelstiltskin Principle" from CS — if you can name something you
+ have power over it.
+- modes of modes → "Mode mode" (the modes that are present in the buffer).
+ - Such a refreshing point of view.
+- Tower mode → ?? "There are many towers available for use in
+ different buffers".
+ - Cf. <https://www.press.umich.edu/19900/tower_of_myriad_mirrors>.
+ - Not a real mode, but a "referential plane".
+- Demos "Strange Loop".
+- Two directions: sideways changes perspective (normal, word, line)
+ all different perspectives; up or down (takes you through meta
+ levels).
+- Unknown meta level → same basic interactions.
+- <https://github.com/countvajhula/indra.el> formerly called
+ 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
new file mode 100644
index 00000000..da17faf5
--- /dev/null
+++ b/2020/info/08.md
@@ -0,0 +1,435 @@
+# 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" 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
+installation or hardware. Not sure that this snippet is enough to
+make package work? Forgot to install ripgrep in your system for
+rg.el? Got a broken version of package on package-install?
+
+There is a way to make an Emacs configuration reliable, composable and
+self-contained. It's possible to freeze package versions, create
+systemd unit for emacs daemon, maintain system dependencies and
+package subconfigurations in one place with one tool.
+
+The talk explains how to leverage the power of nix package manager and
+use-package to make pretty good emacs configuration.
+
+There is a stream record on the same topic:
+<https://youtu.be/2_e3kPJQ93s>. It lacks few interesting points about
+composability of such configuration approach, but already have enough
+interesting information. The talk will be a little more structured
+and more Emacs-users oriented.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T11.26.34; Q&A:
+ 2020-11-28T11.40.48; End 2020-11-28T11.43.33
+
+# Questions
+
+## Do you deal with config files such as emacs-custom.el, some which have sensitive data?
+Sensitive data is in other directories that aren't shared, and
+emacs-custom.el is completely avoided, as it prevents
+reproducible/system independent behaviour.
+
+## How did you learn Nix language basics? Just from the the manual?
+He referred to the Nix IRC channel.
+
+## What are the main advantages besides switching computers (which most people rarely do)?
+Make parts of config available for projects - sharing with other
+people.
+
+## Have you tried Guix in place of Nix? (more parens! :) :)
+Currently trying it, and also in-process of switching from Nix to Guix.
+
+# Notes
+- Emacs configuration is entangled with the system configuration
+ (dired uses ls, grep.el uses grep).
+ - Reproducible behaviour is therefore not only dependent of Emacs
+ compilation/configuration, but also system configuration.
+ - "config.el" files configure Emacs, and accompanying "default.nix"
+ files make sure that the correct packages/fonts/libraries/etc are
+ installed.
+- 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
new file mode 100644
index 00000000..6c3f6a45
--- /dev/null
+++ b/2020/info/09.md
@@ -0,0 +1,286 @@
+# 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/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 (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
+the tasks, doing all and then archiving the finished tasks.
+
+To stay on focus, every morning I build a plan for the day
+with the 3 most important tasks first and then some other
+stuff that should be done. In this way I avoid getting
+pulled down by an endless agenda view that I can't finish on
+that day anyway.
+
+Background info: I'm using Orgmode for many years now, and I'm not
+exaggerating if I tell you that it saved me from a nervous breakdown
+when my wife got diagonosed with severe illness and I was suddenly in
+charge of everything. Orgmode was there and reminded me of the
+important things so nothing was forgotten and I could focus on what
+really matters.
+
+In 2016 I recorded a <a
+href="https://www.youtube.com/playlist?list=PLVtKhBrRV_ZkPnBtt_TD1Cs9PJlU0IIdE">
+set of tutorial videos </a> which are available
+on my YouTube channel which gained more than 3600 subcribers because
+of those tutorials.
+
+In Summer 2020 I recorded the tutorials again for
+a <a
+href="https://www.udemy.com/course/getting-yourself-organized-with-org-mode/?referralCode=D0CB0D077ED5EC0788F7">
+course at Udemy </a> which went online in October 2020 and is
+supplemented by a 100+ pages course book.
+
+For the Emacs Conference 2020 I created a coupon code EMACSCONF which is valid until December 2, 2020 11:58 AM PST, so you can get the course for the price of €9.99. You can use this code with <a href="https://www.udemy.com/course/getting-yourself-organized-with-org-mode/?couponCode=EMACSCONF">this link</a>.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): End: 2020-11-28T13.16.44
+
+# Questions
+
+## What's the advantage of copying tasks from the agenda to a separate daily plan, rather than just managing them directly within the agenda?
+- [Karl Voit]: I asked Rainer the very same question and his answer
+ was that his agenda is full with tasks. Copying them (via keyboard
+ shortcuts) to a manually curated daily list provides a condensed
+ daily agenda showing only the tasks he is going to do (when the day
+ goes as planned).
+- I feel it can reduce some mental stress.
+- Yes, this is it, I want to decide in the morning (I can never do all
+ what is in the agenda) and then I'm no longer overwhelmed by that
+ long agenda.
+ - This may also be relevant: <https://github.com/alphapapa/org-now>.
+- OK thanks - but then why not just create custom agenda views for a)
+ building the daily list and then b) just viewing the daily list
+ without distractions? e.g. via org-super-agenda or org-ql?
+ - Sometimes I also want to review my previous tasks I've done.
+ - There is build-in org-agenda-log-mode (v l) to do this. One just
+ need to make sure that the task state changes are actually
+ logged (see `(apropos "org-log-*")`).
+ - I suspect that could also be achieved via org-ql or similar but
+ admit it's probably a more complex solution. Just naturally
+ averse to anything which duplicates data and could lead to
+ inconsistencies :)
+ - Exactly. It is just very easy to do it in such a format, but
+ it can definitely be achieved by super-agenda/org-ql
+
+## How long does it usually take you to manage/maintain your agenda on a daily basis?
+- Five minutes a day.
+- Extensively uses org-capture to get thoughts down and schedule
+ things for later — gets things out of head and saves the task for
+ later.
+- Weekly review to go through checklists — usually takes about half an
+ hour.
+
+## What version of Emacs and of Org do you currently use?
+- Emacs: 25.3.1
+- Orgmode version: 9.1.5
+
+## Do you keep Emacs open with you all day, or just when you need to add tasks or reference todos?
+It's open all the day. Two monitor setup, Emacs is always opened on
+one (usually the non-main one, apparently, but moved back to the main
+one if necessary).
+
+## Where do your notes/tasks end up after you complete them (lurst asked that first on IRC)?
+In archives (missed some details here, sorry).
+
+## Do you use Org mode on a mobile device as well? If so how do you do it?
+On the road I have a real old fashioned paper notebook with a
+ballpoint pen ;-)
+
+## How did you add the super fast typing?
+- A) I learned touch typing at school around 45 years ago.
+- B) Kdenlive can accelerate video material. You need to mark it (cut
+ it left and right) and then press Shift-Ctrl and the mouse to drag
+ it, that adds the time lapse effect.
+
+## Do you export your Org files or Agenda files for others?
+I once tried it at work, but it didn't work out. For me Org is a
+**personal** prodcutivity system and not a sort of
+groupware. Nevertheless, I have a ToDo keyword "DELEGATED" to monitor
+e.g. errands that I give to my kids.
+
+## Do you use Emacs for everything or just a few things like time management, programming, etc.?
+Emacs is my primary editor for shell scripts, LaTeX files, even
+LilyPond (remember that talk in the morning). I wrote all the LaTeX
+files for the book I prepared for my course in Emacs.
+
+## Do you keep your project notes and backup information with the to do items in your agenda or in separate files?
+The notes are all in the :LOGBOOK: drawer of each task. So I have a
+sort of "micro blog" there that clearly shows what happened with that
+task so far. I even see all the "RESCHEDULED on&#x2026;" timestamps
+which helps me to identify the tasks I procrastinate. ;-)
+
+## Not a question but thank you so much for your videos Rainer
+- You're welcome. What started as a "I need to show Org to a few
+ people" turned out helpful to a lot more than I ever expected. ;-)
+ - These videos helped me so much! Thank you!
+
+# Notes
+- Showcases org-capture, org-agenda, rescheduling from the agenda.
+- The idea of "The 3 most important tasks" is important to make a
+ clear target on day to day basis.
+- Just in case Rainer is not checking the IRC: lots of compliments!
+ Also for your courses (on YouTube)!!
+- How Org Mode Saved My Life - Programmer Interview With Rainer König
+ On Emacs Org Mode
+ - <https://www.youtube.com/watch?v=L_DYO0_eJ6A>
+ - <https://www.youtube.com/watch?v=kPKhS-QDn7c&t=1332s>
+- Udemy Course URL:
+ <https://www.udemy.com/course/getting-yourself-organized-with-org-mode/?referralCode=D0CB0D077ED5EC0788F7>
+- Very interesting thing to know: Rainer is not using a substantial
+ 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
new file mode 100644
index 00000000..9d0cb53d
--- /dev/null
+++ b/2020/info/10.md
@@ -0,0 +1,140 @@
+# Lead your future with Org
+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 (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.
+
+In this short talk I want to share how Org mode empowers me into
+organizing and monitoring my tasks to make sure I am working towards
+achieving my vision.
+
+The emphasis of the talk is on defining a direction, monitoring the
+progress towards your planned destination, and keeping a trail of your
+actions to review and set up a healthy feedback loop.
+
+Tools for the job that I will (at least) mention: Org files, Org
+agenda, Org archive, org-ql, and Org-roam.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start 2020-11-28T13.17.07; End:
+ 2020-11-28T13.25.25
+
+# Questions
+
+## For how many years have you used Org?
+7ish. I started during my PhD because it was the easiest to fit
+in. And programming in OCaml was so nice in there :)
+
+# Notes
+- Andrea: I will reply questions inline, and you can reach me on IRC
+ (username: \`andrea)
+- Tagging tasks with tags like 10yr, 5yr (how many days that task will
+ have impact on life / future).
+- The table-like weekly reviews may also be produced with org-ql
+ dynamic blocks: <https://github.com/alphapapa/org-ql#dynamic-block>
+- 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!
diff --git a/2020/info/11.md b/2020/info/11.md
new file mode 100644
index 00000000..709efcf7
--- /dev/null
+++ b/2020/info/11.md
@@ -0,0 +1,457 @@
+# the org-gtd package: opinions about Getting Things Done
+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)
+[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
+connected by the package and how you can leverage them for yourself.
+Bonus: there's even a few tests written for the package! We'll go
+over those too.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start 2020-11-28T13.26.16; End:
+ 2020-11-28T13.41.53
+
+# Questions
+
+## For how many years have you used Org?
+At least five years, I don't know exactly how long.
+
+
+## What about delegated actions of a project? Do they get moved to the delegated heading and moved back to the project when finished?
+They stay where they are, because they belong to the project. Org-edna
+will automatically mark it as NEXT when its time comes. The user can
+mark it as WAIT easily through the agenda. I would like an org-gtd
+command to queue up "mark as WAIT", "add the DELEGATED\_TO property",
+and "schedule a check-in time", but I haven't yet done the research to
+figure out a clean integration of such a custom action with the agenda
+view.
+
+## Are you only using linear next-task-method or do you use org-edna to mark tasks even in other projects as NEXT?
+Currently I only use linear next-task-method, for two reasons. One is
+a technical reason, another one is part of my current approach to GTD:
+
+- I haven't yet had a reason to consider that, say, a project might
+ block another project, or that an action might block a project -
+ possibly I haven't tried to do complex enough things in my life yet,
+ and so I've always been able to simplify what I had to do into
+ linear projects, even if it was a simple linear project with a last
+ task of "create a new project based on what I've learned".
+- I have zero idea of how I would intelligently display this, yet, so
+ I've stayed away from this. Contrary to most personal projects I've
+ worked on, this one has "ease of use" front and center, so before
+ implementing something like this, I'd need to know how to properly
+ represent this: if possible, in the agenda view, and if not, I guess
+ it would be in a HUD I would create for the package.
+ - <https://orgmode.org/list/87pn6zzoj7.fsf@localhost/> might be
+ relevant. The feature request suggest a way to show notes
+ dynamically in headlines.
+
+## How do you make use of incubated items? Do they show up in the agenda for the whole day? That would be distracting, I guess.
+I have a block of time, every morning, dedicated to processing the
+inbox and seeing what's on my plate for the day. I would use this time
+to decide what to do with the incubated item: incubate it again, make
+it into a project, discard it, etc. My "incubate" file has a bunch of
+top-level headlines like "To Read", "To Watch", "To Eat", "To Visit",
+etc.
+
+- That sounds similar to SOMEDAY-list, but processed on per-item
+ basis. If you decide to re-incubate an item, how to you chose the
+ new time?
+
+# Notes
+- [speaker] I forgot to mention this in my talk because it's fairly
+ recent: someone pointed me to screens that David Allen designed for
+ "the ideal GTD app", which means I've got some path forward for
+ making emacs the ideal GTD app (see
+ <https://github.com/Trevoke/org-gtd.el/issues/21> )
+- Showcases org-gtd: <https://github.com/Trevoke/org-gtd.el>
+ - Custom org-gtd-capture, but reusing parts of org-mode.
+ - org-edna (state trigger) for automatically changing TODO to NEXT
+ after the previous task has been finished:
+ <https://www.nongnu.org/org-edna-el/>.
+ - Idea of having an actionable file.
+ - Maybe org-edna will automatically change TODO to NEXT in that
+ file(?)
+ - [speaker]: indeed :D Well, in projects, yes, it doesn't make
+ sense in other categories.
+- Testing via buttercup
+ (<https://github.com/jorgenschaefer/emacs-buttercup>).
+- 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
new file mode 100644
index 00000000..32ed9f83
--- /dev/null
+++ b/2020/info/12.md
@@ -0,0 +1,594 @@
+# One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!
+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 (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
+not, those discussions devolve in a collection of anecdotes with
+barely any science to them.
+
+Once and for all (or, at least until org-element.el get overhauled), I
+would like to settle the debate by explaining why the way we parse
+Org-mode files becomes slower as our files grow in size or numbers,
+and how that affects their browsing and the building of custom-agenda
+views.
+
+I feel qualified to talk about this topic for two reasons:
+
+- I went through the trouble of optimising my agenda-views by
+ implementing clever regex-based skips, so I know the ceiling that
+ can be reached with the current tech.
+- My work on Org-roam has led me to consider the use of an external
+ parser for Org-mode files, and whilst we are only at the prototyping
+ stage, we know what is at stake.
+
+I intend the talk to be fairly light-hearted and humorous, which is the
+only way we can do true justice to the topic.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start 2020-11-28T13.43.24; Q&A
+ 2020-11-28T13.51; End: 2020-11-28T14.00.07
+
+# Questions
+
+## What's better: one big file or many small ones? :>
+For knowledge management: many files (see also org-roam).
+
+Otherwise: one big file to have everything (todos, projects, notes,
+etc&#x2026;) in one single place.
+
+- Possible walk around by some hacks?
+
+## Do you switch between British and French accents?
+
+## What's the Emacs icon in the firefox address bar?
+Browser extension for org-protocol made by vifon: <https://github.com/vifon/org-protocol-for-firefox>
+
+
+## How do you feel about archive files in org mode, how can that work in?
+
+## Could you post links?
+
+## How big are your org files?
+Main file: 38000 lines for all GTD-tasks and he does archive.
+
+Karl does use archiving although Karl does use Org tasks even in
+knowledge management and those don't get archived most of the time.
+
+## Does it not consume more resources and time to load multiple files than a large file of the same contents?
+Dealing with hiding contents is computationally expensive.
+
+- I doubt it is correct. Emacs display engine is quite effective
+ dealing with invisible text. Moving cursor around is affected, but I
+ never heard (and never experienced) issues with scrolling on large
+ (2Mb) org files.
+ - Actually, Org currently uses overlays to hide text, and the
+ overhead of the overlays does eventually add up. There's a
+ working branch that uses text-properties instead, and it may be
+ merged to Org someday.
+ - It is on the way ;) I need more feedback (see help request in
+ <https://updates.orgmode.org/>).
+ - If I ever have time to even get my Org upgraded to the latest
+ version, maybe I can think about trying to test that ;)
+ - Would it help to share the branch on GitHub?
+ - It would probably make it easier to use and more visible,
+ so&#x2026;maybe? :)
+ - Noted (or rather captured) (using org-mode right? :)
+ Indeed.
+ - Karl: whenever I had severe performance issues and somebody was
+ nice and helped to analyze the issue, "overlays" were the root
+ cause in probably 90% of the cases. However, an average user
+ (including me) does not know if a specific feature is implemented
+ using overlays or not. My Org life is basically try and error ;-)
+ - alphapapa: FYI, if you use org-indent-mode (or whatever the name
+ is of the mode that uses overlays to indent contents), you could
+ disable that to reduce the number of overlays in a
+ buffer.
+ - Karl: thanks a bunch. However, some features are delivering
+ important features to me so that I do have to accept the
+ performance overhead to a certain level. That's a difficult
+ trade-off I do have to make from time to time ;-)
+
+## Doesn't using many small org file clutter up your buffer list when generating agenda etc?
+Personally, I limit org agenda to just a few files while keeping notes
+in many more.
+
+# Notes
+- Speaker's emacs.d: <https://github.com/zaeph/.emacs.d>
+- Mentioned: <https://karl-voit.at/2020/05/03/current-org-files/> ->
+ Karl's big Org files.
+- org-element.el: <https://orgmode.org/worg/dev/org-element-api.html>.
+ - single-threaded lisp function that parses the whole file.
+- "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
new file mode 100644
index 00000000..346d1d40
--- /dev/null
+++ b/2020/info/13.md
@@ -0,0 +1,432 @@
+# Experience Report: Steps to "Emacs Hyper Notebooks"
+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 (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
+relate, broadly, to reproducibility of research in science. We
+reflect on our experiences with off-the-self solutions available
+through the Emacs package manager, and describe some of our custom
+extensions.
+
+When working on a scientific research project, one typically has
+multiple different computer programs running at the same time. For
+example, we may use a computer algebra system such as Maxima for
+calculations, an interactive language such as Julia for numerical
+computations, TeX for writing up results, a reference manger such as
+Zotero for the bibliography, Roam for note-taking, and Jekyll for
+blogging. Switching and moving content among these programs can be
+distracting, time-consuming, and prone to error. These issues are
+compounded when there are several collaborators involved.
+
+We explore a solution that looks toward building better "computational
+notebooks" using Emacs. We take Org mode as our foundation. As many
+in this audience will know, Org mode integrates features such as
+writing, task management, program evaluation, typesetting,
+presentation, and navigation. Tightly integrated add-on packages
+round out the picture either by directly replacing the functionality
+of the other programs mentioned above or automatically dispatching
+commands to them. We outline both the pleasure and pain involved in
+this experience.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start 2020-11-28T14.01.42; Q&A
+ 2020-11-28T14.11.44; End 2020-11-28T14.13.50
+
+# Questions
+
+## Have you looked into trying SageMath? I've long wanted to use SageMath in Org files.
+[RSP]: If you can use it from the command line, you could use it in org mode using what we are working on.
+
+## I can use SageMath from the command line, but not using one of the Emacs shells.
+As Joe is now explaining, our ob-servant code should then make it
+accessible from within Org mode.
+
+## Let's not forget about Embedded Calc in Emacs!
+
+## Which package have you used to prepare the slides which are visually appealing?
+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
new file mode 100644
index 00000000..dfb65c43
--- /dev/null
+++ b/2020/info/14.md
@@ -0,0 +1,541 @@
+# README-Driven Design
+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 (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
+programming to generate all of your source code directly from the
+documentation. This strategy is a great way to keep your documentation
+from getting outdated, and it allows you to use all the other
+wonderful features of org-mode. Watch "README-Driven Design" to see
+exactly how to make your README file a powerful literate document.
+
+- [Companion Blog Post](http://adamard.com/literate_programming.html)
+- [Extended Version of Demo File](https://github.com/adam-ard/literate-demo)
+- [Literate Static Website](https://github.com/adam-ard/static-website-literate-demo)
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T14.15.00; End:
+ 2020-11-28T14.34.46
+
+# Questions
+
+## If you put all your code in an Org file (in addition to prose), doesn't that make the file very large for medium/large projects? (Since all the code across all files is tangled from a single README.org)
+You are right it would get pretty large. I haven't hit that point yet,
+but plan to experiment with separate Org files that are imported into
+a master file.
+
+## If a collaborator edits the tangled file(s), is reverse-tangling in Org reliable? How do you integrate the reverse in a safe way?
+So, I actually think this is the big unsolved problem right now. How
+to do reverse tangling. As far as I know, Emacs doesn't do that. But
+it would really cool. I think it is probably a hard problem.
+
+- Actually it does! You have to enable comments that mark the
+ boundaries of the code blocks. (org-babel-detangle) ->
+ org-babel-detangle is pretty fragile right now.
+- Oh wonderful! I will have to check that out. There is always more to
+ discover in Emacs. Thanks!
+
+
+## Would this approach make it harder to collaborate with contributors who don't use Org? / How to rectify these difficulties? (Thank you!)
+I have had some sucess at work by managing an Org file myself, then I
+commit the tangled code and a README.md. I have to manually update my
+Org file though when someone makes a change to the raw source
+files. That process can be a pain. It would be awesome to find a way
+to make this easier. So that non Emacs users can collaborate and be
+unaware of the source Org file. To have an annotation free reverse
+tangling process would be the holy grail of literate
+programming. Would be a great thesis project for someone.
+
+## Interesting. Did you ever use this approach on a large project? Could one incorporate also TDD into this workflow?
+I have only really hit the medium size. But would love to try a larger
+one. I have seen people write whole books in literate progamming
+though. (Not sure if they were using Emacs) (one example:
+<http://www.pbr-book.org/> ). Here is a pretty large one I found on
+GitHub: <https://github.com/nakkaya/ferret>.
+
+TDD is an interesting idea. I haven't tried doing that, but Org seems
+flexible enough to build a workflow around that.
+
+## Could you share the snippet for adding these source code blocks, it seems much better than the one I am using currently. Thanks!
+Sure, it is documented in the literate programming demo here
+(<https://github.com/adam-ard/literate-demo>).
+
+
+## In Python, indentation is part of the syntax. How is this handled when <<foo>>-syntax is used for functions or even a few lines of codes that are get re-used in multiple functions? Does the user have to define different <<foo>> snippets for different indentations but otherwise identical code?
+Not the speaker, but `:noweb` will add the prefix characters to all
+lines, see
+<https://orgmode.org/manual/Noweb-Reference-Syntax.html>. Python
+identation is fine (and used as an example in the manual :))
+
+- Exactly, I have done a lot of Python this way, it works great!
+
+## Could this structure be used with a SQL query with the output being an Org table?
+Yep, I have done that before too. Org will send the query to a
+database and insert the results. It is super nice. You can add block
+properties to set the hostname of the database too, so it isn't
+limited to just databases running on your local machine.
+
+
+## Why do you export to Markdown when GitHub and others are supporting rendering Org directly?
+Good question. I do this because I usually work with people that don't
+use Emacs :( so I usually take the source files and the Markdown and
+commit them to Git. I keep the Org file to myself. If everyone used
+Emacs, I wouldn't bother with that step.
+
+## This file would be very useful to have for us for reference, could you also share it please?
+Yep! See the links below for a couple template files. An extended one
+from the talk is at: <https://github.com/adam-ard/literate-demo>
+
+# Notes
+- Adam Ard: I'll be answering questions here in the pad or in
+ #emacsconf (aard3).
+- Companion Blog Post: <http://adamard.com/literate_programming.html>.
+- Extended Version of Demo File:
+ <https://github.com/adam-ard/literate-demo>.
+- Literate Static Website:
+ <https://github.com/adam-ard/static-website-literate-demo>.
+- If you want to learn what GitHub is able to render in Org syntax:
+ <https://github.com/novoid/github-orgmode-tests>.
+- <https://en.wikipedia.org/wiki/Literate_programming>.
+- 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
new file mode 100644
index 00000000..d559901d
--- /dev/null
+++ b/2020/info/15.md
@@ -0,0 +1,1038 @@
+# Moving from Jekyll to OrgMode, an experience report
+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 (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.
+
+I recently discovered Org Mode's publishing features and started
+appreciating flexibility and capabilities, especially when literate
+programming comes into play to generate "dynamic" content.
+
+In this talk/tutorial I will present the challenges I faced and how I
+finally moved my homepage and the University of Trento's Computational
+Logic website to Org Mode.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T14.36.18; Q&A:
+ 2020-11-28T14.51.48; End: 2020-11-28T14.53.03
+
+# Questions
+
+## Opinion on Firn (<https://github.com/theiceshelf/firn>)?
+
+## Do you discuss this in a blog as well? Where could I find more about it?
+Talk and content will be published later after the conference. Will be
+available on the talk page.
+
+## Could you please paste your URLs in the notes below? (link to your site etc).
+The source repository of the first website (my homepage) lives here:
+<https://www.ict4g.net/gitea/adolfo/home> and the output is:
+<https://www.ict4g.net/adolfo/>.
+
+The source repository of the second website (Computational Logic)
+lives here: <https://www.ict4g.net/gitea/adolfo/cl-2020> and the
+output is: <http://datascientia.education/cl-2020>.
+
+The talk, code and links are now availble here:
+<https://www.ict4g.net/adolfo/notes/emacsconf-2020/index.html>.
+
+<https://www.ict4g.net/gitea/adolfo/home> has the source code for the
+website.
+
+# Notes
+- Main reason: Org has better support for literate programming.
+- 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/16.md b/2020/info/16.md
new file mode 100644
index 00000000..dfb3ddda
--- /dev/null
+++ b/2020/info/16.md
@@ -0,0 +1,400 @@
+# Org-roam: Presentation, Demonstration, and What's on the Horizon
+Leo Vivier
+
+[[!template id=vid src="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.webm" subtitles="/2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt"]]
+[Download .webm video, 720p, 263MB](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.webm)
+[View transcript](#transcript)
+
+Org-roam is a Roam replica built on top of the all-powerful Org-mode.
+
+Org-roam is a solution for effortless non-hierarchical note-taking with
+Org-mode. With Org-roam, notes flow naturally, making note-taking fun
+and easy. Org-roam should also work as a plug-and-play solution for
+anyone already using Org-mode for their personal wiki.
+
+Org-roam aims to implement the core features of Roam, leveraging the
+mature ecosystem around Org-mode where possible. Eventually, we hope to
+further introduce features enabled by the Emacs ecosystem.
+
+The purpose of the talk is to introduce people to Org-roam, whether
+they be Org-mode connoisseurs or newcomers. A lot of people have
+found value in adopting Org-roam and the Zettelkasten method in their
+workflows, and the goal is to demonstrate how they achieved it. The
+last part will present the future milestones that are in store for
+Org-roam.
+
+Examples of short-presentations I've recorded in the past:
+
+- [Org-Roam v1.2.0: Headlines & Unlinked References - YouTube](https://www.youtube.com/watch?v=oyEMlIxIHXs)
+- [Org-roam-bibtex - Quick Presentation - YouTube](https://www.youtube.com/watch?v=Wy9WvF5gWYg)
+- [Org-roam-dailies: Demonstration - YouTube](https://www.youtube.com/watch?v=1q9x2aZCJJ4)
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T14.54.36; Q&A:
+ 2020-11-28T15.12.44; End: 2020-11-28T15.15.51
+
+# Questions
+
+## What is the functionality of `org-roam-unlinked-references`?
+Let's say we have Emacs in another note&#x2026; for every mention of
+Emacs that is not linked, it prints all the results in the buffer.
+
+## How would org-roam files which would be very numerous integrate with todo's and org-agenda
+
+## Is it possible to use the backlinks feature in regular Org buffers?
+We have a very controlled environment and this is where we keep all
+the notes.
+
+## Do you make your org-roam database accessible accross computers? Via putting the SQLite file in Dropbox or serving the DB in the cloud or something.
+- Answer: no. Only on one computer personally.
+- But plenty of people have done so. Section in the manual dedicated
+ to this.
+- Pretty sure best results occur when the DB is generated seperately
+ for each machine.
+
+## How do you discover tags/links to add to a new org-roam note?
+&#x2026; go to org-roam.com, on GitHub we show everything.
+
+## Do you share your org-roam knowledgebase in a public location?
+
+## Is it possible/easy to have a knowledgebase which is a mix of public/private data?
+
+## Is it possible to seamlessly link to other notes with syntax instead of a keybinding? How do you avoid ending up with duplicate links like `tag1`, `tag_1` and `tag-1`? Since notes are created at different times it's difficult to be consistent.
+
+## What is the best way to keep a separate org-roam (dir) for work and home/personal?
+
+## Are the timestamp prefixes in the filenames optional?
+Yes, you can modify the prefixe.
+
+## Just want to say good on you Leo! Perserverence!
+
+## Is there an easy way to export several selected notes, to say, a LaTeX file?
+At the very core it is Org Mode.
+
+<https://org-roam.discourse.group/t/interoperability-between-org-roam-and-regular-org/715/8>
+has some notes about exporting from Org Roam to regular Org
+- Yes, sorry, I meant to put together several "atoms" for export.
+- Try org-transclusion to make new notes and export to LaTeX file.
+
+## How do tags fit into org-roam workflow?
+
+## You mentioned you have a YouTube channel. Could you give us the link to it. I would definitely be interested in watching your videos. Yeah, I didnt see it. Thanks :D
+<https://www.youtube.com/user/Zaeph> (Check the notes below).
+
+# Notes
+- Maintainer of <https://www.orgroam.com/>
+- "Org Roam is a way for you to manage backlinks inside of Emacs"
+ links - backlinks
+- I see logseq ( <https://logseq.com> ) as a bridge to link non Emacs
+ users to Emacs world.
+- Org-roam is awesome. As a friendly challenge, Karl wrote
+ <https://karl-voit.at/2020/06/14/Zettelkasten-concerns/>.
+ - You should check out the cool discussions on <https://www.reddit.com/r/emacs/comments/hg2m5s/zettelkastenorgroamorgbrain_is_crap/> which mentiones tons of advantages of org-roam/Zettelkasten
+ - If you checked out Zettelkasten and you're looking for a simpler
+ alternative for just bi-directional linking headings (but none of
+ the other great features of Zettelkasten):
+ <https://karl-voit.at/2020/07/22/org-super-links/>.
+- "The point is to make consistency of your notes."
+- YouTube channel: <https://www.youtube.com/user/Zaeph>.
+
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt -->
+
+<a name="transcript"></a>
+# Transcript
+
+Leo Vivier: I'm hoping to keep this talk in 15 minutes. I'll take five
+minutes of questions at the end. So, hello again! I suppose you're
+starting to get pretty familiar with me and my start(?) right now.
+We're getting into the nitty gritty. We started today, I told you
+about how I'd ventured from being a user to being a maintainer, and
+right now I'm going to get the chance to actually tell you more about
+the project that I'm maintaining, which is called org-roam. So even if
+I... It would have had a better impact if I didn't scroll the page,
+but you know, sadly, I'm out of tea, it's getting late in Europe and
+I'm starting to get tired.
+
+What I'm gonna do during this talk is just to do, really, a survey for
+people who do not know what org-roam is about. Some of you might have,
+whilst browsing Reddit, found a topic about org-roam and thought to
+yourself, "Oh, that looks interesting, but you know, I have my own
+workflow and I kinda don't need to change anything about it. I'm
+completely fine using my very very large file. Or I'm completely fine
+having my database of notes which I've been accruing for 10, 20, 30
+years or so." What I want to do during this talk is both to present to
+you what org-roam is about, if you are in this group of people who do
+not know what org-roam is about but would like to know more, but also
+for people who have close to no experience with Emacs and Org Mode and
+who have just found their way. They wanted to find the system to write
+their notes, basically, and they discovered this little tool which is
+called org-roam, and they'd like to know more about this.
+
+I've got 13 minutes to convince you to use org-roam. If we go in a
+very broad strokes, what is org-roam? org-roam is a way for you to
+manage backlinks inside Org Mode. The keyword in what I've just said
+is links. Now there is a principle behind org-roam which is called the
+Zettelkasten method, which you can see written right there. It's a
+German word which means a slip box. If you remember in old libraries,
+you had--actually, I believe if I scroll, I should have an example of
+this. Yes. So this is a slip box. Basically, in all libraries, you
+used to have all the references to the books that the library used to
+have inside those boxes. They're called slip boxes because you can
+insert stuff into the boxes and you can remove stuff out of the boxes.
+Now if I try to summarize as simply as I may what the Zettelkasten
+method is about, it's about having a way to work with your notes which
+considers elements of knowledge as atoms, as something that is
+individual, like a single file. You consider that in order to build
+knowledge, you have to combine atoms together, so that when you have
+one atom, another atom, if you link them together, you have a complex
+thought or a complex molecule. Don't quote me on the chemistry, by the
+way. I shall remind you I'm an English major I have no idea what I'm
+talking about.
+
+How does it work as far as a note-taking system is concerned? To do
+so, I'm just going to switch really quickly to my Emacs, if I may. So
+I'm just going to screenshare onto my Emacs. Just give me a second to
+get the windows all right. Okay, it's loading up. Oh no, I think
+Firefox has crashed again. Okay, so you're gonna have to give me a
+second. I need to figure this out. Okay. So everything is frozen right
+now. Just to tell you, so you're gonna have to deal with my lovely
+voice. Amin, can you confirm that if I switch to a new (tty?), you can
+still hear me? So can you still hear me now? Okay. So I'm gonna have
+probably to kill firefox and log in again. I'm sorry. It's gonna cost
+us two minutes, but I'm gonna try to be as fast as I can. Okay (Amin:
+Okay. No problem, thanks. All right. I guess no event is a good one
+without one or two technical difficulties. I guess this is our share
+of technical difficulties this year. No problem.) Leo: All right.
+Guess who's back? It's not Britney. It's just me, sadly, so you're
+gonna have to make do with me. (Amin: Welcome back.) Leo: Well, thank
+you. I'm just gonna turn back on the camera, if I may. All righty. I'm
+going to make myself a presenter. I'm going to share my screen with
+you. So, if my calculations are correct, you should be able to see my
+monitor right now. (Amin: Yep, but not your webcam feed.) Not my
+webcam feed. Okay. So I'm going to stop it. Sorry for the little
+delay, folks. You know, it's... The show must go on. Can you see it
+now? (Amin: Not yet.) Leo: Still not? Damn it. Can I stop it? Okay, so
+I'm gonna... (Amin: yeah, maybe try like sharing a webcam first.) Leo:
+All right, I'm back now. So I'm going to share my webcam first. (Amin:
+Okay.) Leo: All righty. So can you confirm whenever you've got my
+webcam working? (Amin: Let's see. I don't see it yet, unfortunately.)
+Leo: Is it loading up? (Amin: yeah, it's coming up. Yep, I can see
+it.) Leo: Awesome. All right. Okay, we're back on track. I've got
+still eight minutes left to do, so I might have to have a couple of
+minutes to my talk, if you don't mind and shave off some questions.
+(Amin: Okay, do you want to share your screen?) Leo: Okay, yeah, I'm
+on my way to. All right. So please forget whatever, whichever
+technical difficulties we might have had for the last three, four
+minutes, but we're back on track now.
+
+So org-roam: what is it and how does it work? I was telling you all
+about atoms and I was telling you about links, but how does it work
+concretely? Right now what you're seeing on your screens is a slip
+box, which is what we... the fancy word that we use to designate your
+folder where all your notes are going to be living. So you have here
+(and I hope you can see my cursor; yes you can)... So we have a file
+which is called index.org and the good thing is, as you might have
+garnered by the fact that it finishes by .org is that it is just an
+Org Mode file. I can create a heading. I can create another heading.
+everything works as you would expect it to. It is completely... It's
+just an Org Mode file at the end of the day. Now, what can we do with
+this? I've told you about links. You do know that Org Mode has links.
+What we're going to do is that we're going to create a new file. We're
+going to go back to our directory. What I'm going to do is that we
+have a special command... Actually, let me just show you my command.
+It might help you a little bit see what I'm doing. Wait, which is the
+buffer... Uh... log mode? Yes. exlog. So now on the right side of the
+monitor, you'll be able to see the command that I'm using. If you
+don't mind, in order to have as much realistic as possible, I'm going
+to make it a little bit shorter. Smaller, I should say. Is it not too
+small? Yeah, I believe it's good.
+
+So what I'm going to do is I'm going to run a command in org-roam
+which allows me to create a new note. I'm going to use my keybinding,
+which is not this one, definitely, and I'm going to create a new file
+which is, in a great tradition of examples in programming, I'm going
+to call "foo." Right. So at the bottom--in the bottom buffer, I
+should say, you are seeing the file "foo," which is, as you can see
+here, a capture buffer just like you would have in Org Mode. Now what
+I'm going to do is that I'm going to validate this file and now you
+see that we are in the file "foo." The good thing is that I can start
+writing without having to worry about anything else. I was going to
+say that I'm showing off about my typing skills, but I did make
+mistakes, so well, nobody's perfect, right? So now we do have this
+"foo" file. We're going to go back to the index. Let's go back to the directory.
+We're going to refresh the file. As you can see, we have a file which
+is called "foo," and we have the index. So now what I'm going to do is
+that I'm going to insert a link to this file. So we're going to run
+another org-roam command which you can see here, org-roam-insert, and
+I'm going to insert a link to the file "foo." As you can see, it has
+now appeared. Now what I'm going to do, I'm going to save the file,
+and now I'm going to show you the little thing I told you about--
+backlinks--before. I'm afraid I'm going to have to hide the commands
+for now, but don't worry they'll be back. I'm going to show you the
+side buffer. It is the buffer that you see on the right side of your
+screen. Right now, it's telling you that index does not have any
+backlinks, which is normal. But if we follow the link "foo," now you
+see something different on the right side. As you can see on the left
+side, we're back inside the file "foo," but on the right side, we have
+something showing up: one backlink in the file "index." And under the
+heading, you have the file-- sorry, the link "foo." You can just open
+the link, and you will be brought exactly where it is. So that was one
+thing.
+
+Now just to make sure that you've understood properly, I'm going to go
+back to the index. I'm going to create a second file. Now I'm going to
+use a command that is slightly different. Let me just show you the
+commands on the right. I'm going to run the command org-roam-insert
+and I'm going to enter a file which is called "bar." Again, at the
+bottom, you can see that I have a new file "bar." I'm going to
+validate this file. I'm going to save index.org. Now, if we go in bar,
+and if I show you the links on the side, you can see that exactly the
+same, we have a link. Now just to make the pictures complete, inside
+the file "bar," I'm going to insert a link to "foo." I'm going to
+save. I'm going to go to the file "foo." Now on the right side, you
+can see that we have two backlinks. Now you're gonna tell me, yeah,
+thank you, Leo, but what's the point? Well the thing is it might
+sound... it might seem very simple, what I've just shown you, but
+programmatically, it's a little hard to do. We have to look into your
+files to make sure that every time you link your file somewhere else,
+we need to track everything down.
+
+Now as simple as org-roam might be looking to you, thee thing is what
+we try to do with org-roam is to make sure that your collection of
+notes remains consistent whatever we do. An example, for instance,
+right now I've told you about a file named "foo" and the file named
+"bar." Let's say that for whatever reason, you decide to rename your
+file "foo" to something very original. Let's just say "bar." So we
+actually have a way in Emacs--in org-roam, I should say--when you
+modify the title at the top of the file... So we get "foo..." I've
+modified it with "baz." You can see at the bottom that right now we
+haven't saved and we are still in the file "foo.org." I'm going to
+save. Now what you see is a new name for the file. But you may ask,
+"Wait a second, in the other file, we had a link to this file. Does it
+mean that it's broken? Does it mean that we cannot access the file
+anymore?" But when we go there, beginning to go in the index, so
+obviously the actual description of the link hasn't been updated, but
+if I show you what goes on under the hood by showing you what is
+fontified, what is behind the content of the link... Actually, it
+didn't work! that's why you never present live, folks, because
+otherwise you're just going to show problems with the software and
+that's not good. Something must have gone on, obviously. But generally
+speaking, the file should have been updated. Damn. I'm showing you
+bugging my software. That's not very professional, now is it?
+Basically, to come back to the main idea, what we try to do with
+org-roam is to make sure that everything remains consistent. We really
+much love the system of organization that is behind the Zettelkasten
+method.
+
+Now I was going, at this point of the presentation, basically, I
+wanted to go back to Firefox and show you more stuff, but it's likely
+that it's going to crash again. I'm not going to tempt the devil. I'm
+just going to continue talking to you like that. So the Zettelkasten
+method is a very organic way to write notes. If you think... I believe
+as Org Mode users, we share quite a lot of features. I'm out of time.
+I'm just going to take one more minute to answer this question that
+I'm asking myself anyway. But if you're anything like me, you've been
+through many iterations of your workflow inside Org Mode. Do I keep
+all my professional stuff under one heading, or do I create a separate
+file for this? You know, those types of questions on which you could
+ponder for many, many hours at night, generally when you have a tight
+deadline to be following. But what I've discovered by using org-roam
+for taking notes about my academic projects or by taking notes on
+anything worth writing about is that not having to worry about the
+structure of you files, just having to worry about atoms and links, it
+does wonders for the way you think about problems. It does wonders
+about your creativity. And it does wonders about your ability to take
+your thoughts, put them on a paper, and generally, during this process
+you realize, "Oh, maybe I do not know this concept as well as I
+should." But I've never had a system which brought me as much
+serendipity as this system. And for those who don't know, serendipity
+the ability to come up with novel ideas on the spot, contextually. So
+this was just a little primer on what org-roam and the Zettelkasten is
+about.
+
+In about 20 minutes, I'll be giving you a talk about the technical
+aspects of org-roam, which I'm certain some of you will be very
+interested in. Otherwise, I do have a YouTube channel where I try to
+record videos where I explain to you what org-roam is about, what the
+method is about. I'll just finish on this. I'm two minutes extra time,
+sorry. We do know that a lot of people are interested into org-roam. I
+mentioned at the very beginning of the presentation that a lot of
+people discovered Emacs and org-roam and Org Mode even through
+org-roam. We feel that we have a duty to introduce those people, this
+new pool of people, most of whom are academic,s into the world of
+Emacs and into the world of free software. Right now the thing is
+we're not doing a particularly good job at writing manuals. I'm just
+going to try to stop sharing my screen, because I'm nearly to the end,
+and just try sharing my Firefox windows if it allows me. No, it
+doesn't allow me, which is very good. That's why I won't have to to
+screw things up. We know that our manual is not fully up to date, but
+believe me, one of the key focus right now is making sure that within
+two to three months, we have a good tutorial for people to join, and
+we have good videos for people to get introduced to the topics we're
+covering. And that's me done. So, thank you so much for listening and
+now I'll be taking some questions. (Amin: Thank you very much, Leo.
+Cheers! We have, I think, about two minutes four questions, I see a
+lot of them on the pad. Would you take them?) Leo: Sure. So... Yep I'm
+scrolling, I'm scrolling... Getting Things Done, that's Aldric. Still
+scrolling. Okay. org-roam. Oh, wow. Okay. So we do have quite a lot of
+questions. Please excuse me if I'm answering your questions really
+fast, but I just want to make sure that I cover as much ground as
+possible.
+
+"What is the functionality of org-roam-unlinked-references?"
+So basically when you have a file that is not linked anywhere, this
+function allows you to see... Let's say we have a file "Emacs" and
+we've talked about "Emacs" in another note, but we haven't created a
+link. What this command do is that it looks into your folder for every
+mention of "Emacs" that is not linked to the note "Emacs," and it
+prints all the results in the buffer so that you know, "okay, I've
+talked about Emacs here, but I didn't create a link. Do I want to
+create a link?" That's it.
+
+"Is it possible to use the backlinks features in regular Org buffers?"
+Right now, no. It is not possible. We are having a very controlled
+environment which is... I told you about this slip box folder before.
+This is where we keep all the notes. The reason why we do this will be
+more evident when I go through the technical presentation, but it's
+because of optimization. I'll get back to you on that afterwards.
+
+"Do you make org-roam database accessible across computers?" No, I do
+not, because I'm only using my laptop, but plenty of people have had a
+lot of success doing so either by sharing the files via syncthing or
+by any other method. We have a section in a manual specifying how to
+do this. "How do you discover tags' links to add to your new org-roam
+note?" There is something that I didn't tell you about which is called
+org-roam server, which is a magnificent way to access visually the
+notes that you have in your in your system. You'll have to go to the
+orgroam.com website. Please go on our Github page. We show everything.
+I hope what I've told you has excited you, so please go. Maybe one
+more question, two more questions, just to make sure?
+
+"Is it possible to seamlessly link to other notes with syntax instead
+of a keybinding?" Yes, we are working on this. This is a huge project
+that we're doing with org-roam which is called link-ux. We're trying
+to do something which is very close to Roam Research, which is the
+software we're using for inspiration for org-roam. Yes, there are
+going to be ways to do this in the future. I'm going to give you a
+window of maybe three to four months. One last question. Uh, good on
+you, thank you, well, thank you for this.
+
+"Is there an easy way to export several selected nodes to, say, a
+LaTeX file?" LaTeX. Yes. I mean, it's Org Mode. At the very core, it
+is Org Mode, so you know you don't... If you want to export to a LaTeX
+file, you can... you just use the ox-latex library, which you can
+access by pressing C-c C-e for export.
+
+All right. Is it... I believe I'm... It's all the time I had. Amin,
+can you confirm this? Okay. So if you have more questions, don't
+worry, I'll be in chat. I'll be answering them. I'm also on on all the
+platforms we advertise on org-roam. If you want to reach me, I'm
+really easy to reach. Our Github page is always open. So thank you all
+for all your questions and all your energy about org-roam. It is very
+exciting for me to see all this. but right now, I'll be handing off
+the microphone, I should say, to Noorah, who is going to talk to you
+about the academic way to use org-roam. I'll be back afterwards with
+the technical talk. Thank you. (Amin: Thank you very much, Leo) Leo:
+See you later, guys.
+
+<!-- /transcript -->
diff --git a/2020/info/17.md b/2020/info/17.md
new file mode 100644
index 00000000..83675788
--- /dev/null
+++ b/2020/info/17.md
@@ -0,0 +1,397 @@
+# Org-mode and Org-Roam for Scholars and Researchers
+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 (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
+vast and highly technical. There is something for everyone in org-mode, and
+it's important to sift through all of these features and figure out what's
+best for a given situation or specific users. Therefore, I will be
+targeting academics and scholars that are engaging with literature in the
+early stages of a project or their academic careers.
+
+Academics and scholars engage with complex ideas and unstructured research
+workflows. I believe that org-mode can add more structure to the madness,
+and I will use this talk to clarify a possible solution to reduce such
+complexity. I propose a research workflow framework that utilizes
+org-mode, its raw form, and its many associated packages. However, the main
+package I will be mostly talking about is Org-Roam, and the way its
+underlying principles will revolutionize the research workflow.
+
+This presentation will help researchers organize and build their knowledge
+database in a streamlined and effective way. The research workflow is
+presented in three phases: planning, note-taking, and reference management.
+I will talk briefly about the packages and special-use cases for each stage
+and learned lessons along the way. Finally, the presentation concludes with
+future considerations and possible org-mode features.
+
+- Slides/presentation: <https://github.com/nalhasan/emacsconf2020>
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T15.17.33; Q&A:
+ 2020-11-28T15.32.18; End: 2020-11-28T15.39.00
+
+# Questions
+
+## I use org-roam-bibtex to take notes on particular academic papers in conjuction with org-noter. This means all notes for a given paper are in one Org file. However while it is possible to link to headings within a file, there is no functionality to easily search through and link to these subheadings. What do you do to overcome this? I've only superficially looked at org-rifle as a possible method.
+
+## Whats this presentation software? Looks really cool.
+beamer (LaTeX)
+
+<https://github.com/nalhasan/emacsconf2020> for the
+slides/presentation.
+
+## How does the view for time blocking works?
+
+## have you seen the project Papis? <https://github.com/papis/papis> I think the author is working on an Emacs package, what would be your thoughts? (it's a Zotero alternative)
+"Powerful and highly extensible command-line based document and
+bibliography manager."
+
+## Did you try using ebib instead of Zotero? If so, is Zotero better in some way?
+Zotero has a lot of plugins you can play with and so far it's been
+great.
+
+Some people have been using a connector between Emacs & Zotero&#x2026;.
+
+You can create groups for collaborative projects in Zotero and this is
+a plus. (thanks for the answers! I'll give it a try!).
+- <https://github.com/papis/papis-zotero> maybe useful ^^
+
+## Do you have any suggestions on what subjects/things should be tags/separate org-roam files for cross-linking? I've been struggling with whether making almost every term be a link or only using links for broader subjects.
+"Should I be combining ideas together into one&#x2026;?" So far I've
+been using the Org Roam default way.
+
+## Meta question: is there a place where people are collaborating on research "about" Emacs?
+Definitely interested, but there is no place (yet!).
+
+# Notes
+- org-inlinetasks.
+- If you're working on a big Org file that you keep coming back to,
+ it's better to keep track of todo's related to that file within that
+ file (e.g. a paper that you're writing).
+- <https://github.com/alphapapa/org-sidebar> to keep track of todo's
+ within a large file.
+- Using org-gcal to sync gmail calendar with org-file
+ <https://github.com/kidd/org-gcal.el/>.
+- org-transclusion <https://github.com/nobiot/org-transclusion> to
+ show (parts of) other files inline and allow editing in a separate
+ mini-buffer.
+- There is a Slack channel for org-roam link/backlink pls?
+
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt -->
+
+<a name="transcript"></a>
+# Transcript
+
+Good afternoon or good evening, everyone. Today, my talk is going to
+be on Org Mode and org-roam for scholars and researchers. Leo has
+talked about the overall picture of org-roam and org-roam-bibtex. I
+will be talking more about the research process itself using these
+tools.
+
+(00:00:20) All right. So, just to introduce that the research process
+is really messy. You're always working in piecemeal tasks and things
+move around all the time. There needs to be a system where you can
+organize all these tasks, all these ideas in a way that is flexible
+and effective. So my motivation is that research is hard and writing
+about it is even more difficult. My goal is to add some structure to
+this whole madness.
+
+(00:00:51) Here's a list of some of the stuff that I've been using
+since I first learned about Emacs in 2019 and what I've found useful
+within my research process. I've organized Org Mode for Researchers
+and Scholars Within the Writing Process into three modules. First,
+there's the planning aspect of it, then you've got the writing and the
+reference management, which I will join together by looking at the
+example of doing your literature review.
+
+(00:01:21) When we're talking about planning, we're talking about
+either task management or time management with task management. You've
+got Org Mode's TODOs, tags, and categories. These are really powerful
+tools that you could use in your Org files to organize your tasks and
+your appointments. There are different types of TODOs that you can
+either set globally in your init file or they can be
+file-/buffer-specific. That means, based on context, based on the type
+of manuscript you're working on, whether it's a literate programming
+report or your actual thesis/dissertation.
+
+(00:02:03) Also, these TODOs are either created as a subtree, like
+think of them as headings and sections if you use LaTeX, or inline
+tasks, which are like Org inline tasks. I like Org inline tasks
+because I can add TODOs between two paragraphs. That way, it doesn't
+show up in the table of contents when I export into PDF, HTML, or
+anything else. So this is an example of buffer-specific TODOs, and
+this is an example of a little programming report that I was working
+on where I was dealing with data and analysis and all of that stuff. I
+needed context-specific TODOs to use them within this buffer. That's
+how I would organize it. There's also another example of an Org inline
+task where you could see it in the middle between the two headings.
+That way, it wouldn't show up in the table of contents, and it would
+look neater within the text when you export it. I also added a tag of
+:noexport: so it won't show up at all when I export it into either
+PDF, which I use all the time.
+
+(00:03:19) Another useful tool for the research and just general
+planning is the org-capture. When I first started with Emacs,
+actually, it was for org-agenda. I went crazy with my capture
+template. I created a template for everything because I was just so
+excited. But with time, I was using less and less of them, so I kept
+taking them out. Now this is my simplified capture templates that I
+use, either for a general TODO, for a regular appointment, a fleeting
+note, research tasks (because those are what I focus on, like my bread
+and butter), and then finally with meetings, which I find sometimes I
+don't use it as much because I would just have the Org file ready
+instead of needing to capture, you know, open a capture template.
+
+(00:04:07) Right. Org Agenda. That's how I got into Emacs. I needed to
+organize my life. I found Emacs and it's been great ever since. It
+populates all your TODOs and appointments into a singular view. So the
+default view, I think, is a week view. However, I use
+org-super-agenda. Love this package. I set up my agenda as a daily
+view with appointments, deadlines, and a habit tracker. A side note,
+you guys: I'm still struggling with organizing the perfect agenda, so
+it's a process. Take it easy, all right? So this is just an overview
+of my daily agenda. As you can see they're just appointments that I
+import from Gmail using org-gcal; a simple habit tracker of daily free
+writing-- as you can see, there are a lot of times where I'm skipping,
+and the asterisk is the one where I've completed that day, so, you
+know, it's a process--and then regular deadlines. So what happens is
+that I have other TODOs that I have not scheduled or not added a
+deadline but they're just tasks that keep piling up.
+
+(00:05:19) When I first started with Emacs and org-agenda, I had
+everything in there, and it got overwhelming. Then I decided, no, I'm
+not gonna even let them show up. So what I would do at the beginning
+of each week or the night before, I would sit down, look at all my
+TODOs that I have not assigned yet to a deadline or a schedule or just
+a simple timestamp, and I would organize them throughout the week. So,
+here's an example of what I did. On that Wednesday, from my Gmail, I
+had all these appointments, but one of them is I have a writing group
+session. So I looked at my tasks and I thought, okay, then I will just
+assign, for example, my Emacs slides or the framework diagram into
+that writing session. All I did was just add an active timestamp. That
+is all I needed to do, and it went straight into my appointment. Now,
+if I miss that, it won't show up on the next day. So if you put in a
+deadline, it will show up as an overdue, but if you have no deadline
+or schedule, it will not show up in your daily org agenda. So, just a
+star.
+
+(00:06:32) All right. Another way of accessing your TODOs is that if
+it's Org file-specific, buffer-specific, and so... Like when we talked
+about like whether to have a big-ass Org file or like tiny files, it
+all depends. This isn't the... you know, the way this depends, because
+if you're working on a dissertation, it's a huge manuscript. You need
+to work on that Org file all the time. Then yes, my TODOs should be in
+that file specifically, because every time, if I'm visiting this Org
+file all the time, I should be able to just look at my tasks from
+within that buffer. And so I use org-sidebar to keep all these
+specific TODOs within that Org file. I find it helpful. Okay.
+
+(00:07:26) Now that we're going into the writing and reference
+management... We'll call it a literature review. This is something
+I've built as a schema. I think that it works for now. It requires one
+outside software, which is Zotero, what I use. It's an open source
+reference management software. It's great. But the thing to keep in
+mind is that I use two plugins that are really needed for when we work
+with org-roam-bibtex, org-roam, Org Mode, and the ZotFile. Better
+BibTeX organizes your reference keys in a way, in a fashion that works
+for you. For me, all my reference keys are last author and year. With
+ZotFile, I let it rename all the PDF files the same way that I have
+for my Bib keys, which is last name of author and year. All right.
+Once you export your entire library as a Bib file, then you can work
+on it within Org Mode and Emacs using the following packages. So with
+org-roam-bibtex, it creates an Org file for each Bib entry. You have
+the option of templating and doing other stuff with it.
+
+(00:08:52) Then finally, there's this orb-pdf-scrapper. I've used it
+briefly but I think the potential with orb-pdf-scrapper is if you're
+going to do a bibliometric study or a systematic literature review,
+there's something there, but I have to look through it. Anyway, so
+once you create your reference file of reference X and you're writing
+your notes, you can either go... Like, with going through Org Mode,
+you're writing your ideas, you're writing your notes, you're assigning
+tasks, and then there's org-transclusion, which I will mention briefly
+at the end, and ways to extract. If you're going to go through the
+org-roam... Things that you're going to use within org-roam... It's a
+great way to build your database. You start making the connections.
+You can visualize your notes and how these references are linked to
+each other through the org-roam server or org-roam graph. All right.
+This is just notes for later.
+
+(00:09:53) So this is an example of an org-roam file that I have. For
+example, if I'm working on adaptation policy, I have these hyperlinks
+that are linked to other concepts and ideas such as either climate
+security, changing global environment, so on and so forth. The
+backlinks are other references that talk about this specific concept.
+This is really helpful. Then, when you visualize it, the picture on
+the left (which I'm sure looks really small), you can see the
+connections that it's making with other references. Of course, this is
+just like a buffer network. When you look at the entire database
+network... It's growing. Okay.
+
+(00:10:38) So going into org-roam-bibtex... It utilizes a combination
+of the org-ref package, helm-bibtex, bibtex-completion. It works with
+org-roam functionalities and other good stuff. This is an example of
+my org-roam-bibtex file. All right. So I've created the template which
+I pretty much use, what Leo has produced in his tutorial. I think it's
+great. It works well for me. What it does is that it works with your
+bib file. So if you're in your bib file, you have a sub entry that's
+called keywords, and usually that's within a journal article. The
+author would specify these keywords. When it gets imported into
+Zotero, it extracts those keywords and then it gets populated as an
+Org file with org-roam-bibtex. I always start with the meta
+information first, and then I would write my notes after that. This is
+an example, though, for reference of a physical book, so I don't have
+a pdf file for it. So when I've figured out a new idea for it, if I'm
+writing notes on it, I would create a property that says pages. That
+way, it's easier for you when you go back to citing certain ideas or
+something, that you have the pages prepared there. It's easier that
+way. Okay.
+
+(00:12:07) org-noter which is something I use a lot, especially with
+journal articles that have PDFs and stuff like that. They're really
+helpful if you are going to... If you've just started using Emacs and
+org-roam, and you have all these PDFs that have all the annotations
+and highlighting and all that stuff, with org-noter you can just use
+the org-noter-create-skeleton command and it will populate all your
+notes that have already been entered within the PDF file if you're
+using an outside software, and creates them as a neat Org file. I
+highly recommend.
+
+(00:12:52) Finally, org-transclusion. I think this is still in its
+beta phase, but I've been enjoying it so far. I'm guessing people know
+what transclusion means, which is like copy-pasting text from one Org
+file to another. This is helpful. I think I peeked at a question that
+was talking about linking to other Org files. I think org-transclusion
+could really work. It's equivalent to the include function within Org
+Mode, but I think... So if you have other files that you know which
+region that you need in another file, you could use the #+INCLUDE, but
+with org-transclusion... It's great. I mean you just have... you're
+just linking one part to the other. Sort of... Like, not refiling, but
+you know hyperlinking. So this is an example of what org-transclusion
+looks like. The highlighted problem statement is from another Org
+file. Then what I would do is just link it to there, and there was a
+transclusion command. I wish I made another screenshot of it. When you
+invoke org-transclusion-mode, it turns... It prints it out like that.
+It's in view mode. Then when you want to edit, it will take you back
+to that buffer and you can edit the text however you want. All right.
+So, thank you so much.
+
+(00:14:22) I wanted to leave room for questions, but special thanks to
+all the folks that work on org-roam, org-roam-bibtex, org-roam-server,
+org-transclusion, and of course alphapapa on org-super-agenda and
+org-sidebar. That's how I got into Emacs. Thank you.
+
+(00:14:43) (Leo: All right. Well, thank you. So yeah, this time I'll
+be the one asking the question and not Amin. I'm filling big shoes
+right now, so you'll have to bear with me folks. So thank you so much,
+Noorah, for your presentation that is incredibly interesting. Would
+you mind if I fed you questions from the charts?)
+
+(00:15:00) Noorah: Go ahead. (Leo: Okay. so the first one I've picked
+on my end was "Did you try using ebib instead of Zotero, and if so, is
+it better than Zotero in some ways?) Noorah: No, I have not used Ebib.
+I've only used Mendeley and then they got bought by Elsevier, and so I
+was, like, okay I'm done, I'm going to Zotero. There are a lot of
+plugins with Zotero that you can play around with. I can't speak for
+Ebib, but definitely Zotero has been a good experience so far. (Leo:
+Yes, same. I also do research on the side; as I told you, English
+major, and yeah I also do Zotero. Some people have been using uh a
+connector between Zotero and Emacs which has... they've had great
+success with them but personally I haven't touched it already, so
+yeah. Oh, go ahead. Sorry.) Noorah: All right. So far, I don't have
+any problems with Zotero, but maybe if I run into something, I might
+check out Ebib in the future. (Leo: yeah, definitely. I think zotero
+is a very solid project. You know, the fact that it's being used by
+people outside of Emacs also ensures that there's quite a lot of
+backing behind the software, which is reassuring when your livelihood
+depends on your research.) Noorah: Right. And then I think one more
+thing with Zotero is that you can create groups, so if you're in a
+collaborative project, you can create a reference, a library just for
+your group, and I think that could help. I'm going to be in a project
+next semester that requires that.
+
+(00:16:27) (Leo: Yeah, definitely. I believe the ability to have
+folders inside Zotero makes it incredibly useful to manage your
+different projects, concurrent projects. So moving on to other
+questions, do you have any suggestion on what subjects or things
+should be tags or separate org-roam files for cross-linking?)
+
+(00:16:46) Right. So far, now, I'm having trouble with "should I be
+combining certain concepts together as one?" This is where the thought
+process starts coming to fruit, is that when you start combining ideas
+together so you won't need a specific tag and another one that are
+like similar in ideas... I'm not sure if that answers the question,
+but so far I've been using the org-roam the default way, which is many
+small files and then just linking them to my... Like, either if I have
+a report to write, or if I have an essay to write... I think you're
+muted.
+
+(00:17:35) (Leo: I did two stupid things. The first one was spilling
+out my water. The second one was speaking without actually turning on
+my microphone. Let's just hope that nothing is going to fry in the
+near vicinity of me right now. But yeah, I believe you've answered the
+question, so don't worry about it. I'm slightly wet right now, which
+is not a very agreeable feeling, but we'll have to carry on, I
+suppose. Another question: "is there a place where people are
+collaborating on research about Emacs?" So do you want to try to take
+this one?)
+
+(00:18:06) Noorah: I don't know, but I'm definitely interested in the
+user experience of Emacs, so if anyone wants to work on that, I'm
+happy.
+
+(00:18:16) (Leo: Well you do have a a pretty good candidate in front
+of you, if I should say so myself. I'm incredibly interested about the
+ability to do research in Emacs and about the ability to preach the
+FLOSS way to academia and to the academe, especially because I believe
+there's really something great to be done. Sorry, I'm just looking at
+the puddle of water on the side which is slightly oozing my way, which
+is not a very good feeling, really. I believe some work could be done,
+and if people are interested in the chat right now, do get in touch
+with us. Both Noorah and I are on our Slack channel. Yes, I know,
+Slack, the corporate hive mind that is Slack. But we've decided with
+org-roam to use Slack. You can find us very easily. If you want to
+talk about these topics, by all means, do, and we'll be very
+interested to answer your questions.)
+
+(00:19:10) Noorah: I have a question here that says, "How does the
+view for time blocking works?"
+
+(00:19:15) I use org-super-agenda, so what happens is that my active
+timestamps are only in my Gmail Org file. If you use org-gcal, you
+have to specify a certain Org file. When it imports them, it imports
+them as active timestamps. I make sure whenever I create a TODO or
+even a research task that it doesn't have a timestamp on it, because
+what I want to do is go back and then move around these tasks
+according to my either weekly schedule, or monthly, or however long
+you want to do it. So yeah, only active timestamps or deadline um
+appear in your time grid. So that could work. (Leo: That's very good.
+Just to interject for a second about this, you know with org-roam
+right now, we're mostly focused on optimization, but we're hoping to
+move on to UX very soon. So all those matters about having TODOs in
+your files, it is something that we've been thinking about with Jethro
+Kuan, who is my main co-maintainer for org-roam. We'll be working on
+this in the coming months, so don't worry too much about it and stay
+tuned.)
+
+(00:20:26) Noorah: Yeah. So I've got the ebib and what else... What
+subjects... I think... Okay! What is this question? "Have you seen the
+project Papis?"
+
+(00:20:37) I'm not sure what... oh it's a Zotero alternative. Okay.
+I'll look into it. Thank you. (Leo: I don't know about it either, so
+please look into it and let me know.) Have we covered all the
+questions?
+
+(00:20:53) (Leo: I believe we have. We have about two-minute leeway
+for me to move into the next talk, so we're right on time.) All right.
+Thank you so much. Really appreciate it. Good luck everyone! (Leo:
+well thank you, and thank you so much for coming, and allowing me not
+to be the only one talking about org-roam today.) Noorah: Sounds good.
+All right. (Amin: Thank you both very much.)
diff --git a/2020/info/18.md b/2020/info/18.md
new file mode 100644
index 00000000..80390a73
--- /dev/null
+++ b/2020/info/18.md
@@ -0,0 +1,80 @@
+# Org-roam: Technical Presentation
+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 (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.
+
+Org-roam is a solution for effortless non-hierarchical note-taking
+with Org-mode. With Org-roam, notes flow naturally, making
+note-taking fun and easy. Org-roam should also work as a
+plug-and-play solution for anyone already using Org-mode for their
+personal wiki.
+
+Org-roam aims to implement the core features of Roam, leveraging the
+mature ecosystem around Org-mode where possible. Eventually, we hope
+to further introduce features enabled by the Emacs ecosystem.
+
+The purpose of the talk is to present some technical aspects of
+Org-roam. From the very beginning, we wanted Org-roam to scale with
+your notes, and this meant that we had to keep a close eye on our
+performances. As we iterated, optimisation remained a top-priority,
+leading us to constantly peek under Org-mode's hood. Not only has
+this made us better developers, but it has also uncovered paths of
+optimisation for Org-mode itself.
+
+The talk is targeted at software engineers willing to peek under
+Org-mode's hood. A rudimentary understanding of Elisp will be
+required.
+
+Points to be covered
+
+- SQL database via emacsql
+- Elisp libraries
+- Parsing of Org-mode files
+- org-elements.e
+- Parsing with a background-process
+- Ensuring consistency via hooks
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T15.39.41; Q&A:
+ 2020-11-28T15.56.29; End: 2020-11-28T16.01.03
+
+# Questions
+
+## Why not to run a background Emacs for parsing instead of implement a new parser?
+Running a background Emacs progress sounds great, but is still
+limited. Forwarding all queries to a background Emacs (like org-mode's
+exporter does) is only feasible with a (??? zaeph can probably fix the
+answer).
+
+## How often does the DB index get updated in order to contain changes within Org files?
+Either on save, or on idle-timer.
+
+## Did you ever think of opening up (or designing) the SQL DB as a general Org speedup-tool outside of org-roam so that other libraries that do execute complex queries are able to re-use the summarized data?
+FYI, see John Kitchin's work, he uses a SQLite database to index his
+Org
+files. <https://kitchingroup.cheme.cmu.edu/blog/2017/01/03/Find-stuff-in-org-mode-anywhere/>.
+
+- John's DB approach is great. However, we should not end up using
+ several DB-index in parallel. ;-)+1
+
+## Obviously with the 'global backlinks' agenda, it would be interesting to combine with the eev stuff from before :-) (<https://github.com/edrx/eev>)
+
+## About the external program, you could just talk to the PANDOC guys (or Firn [Parses org-files into data structures with Orgize <https://github.com/PoiScript/orgize>], Logseq [OCaml & Angstrom, for the document parser <https://github.com/mldoc/mldoc>]), they're very helpful and have already a good org-mode parser
+
+## Is it feasible to have this process of parsing org-roam following the LSP protocol? that would allow to be editor agnostic, and it would save the work to define the communication protocol and any other technical details.
+
+# Notes
+- "org-roam just wants to create backlinks".
+- org-mode has many many files (377 lines in dired&#x2026; including
+ .elc files).
+- If you want to create an index of all the org files using the native
+ format, it would be very slow. So org-roam uses a sqlite database.
+- ripgrep (written in Rust) is more capable than grep; used by some
+ Zettelkasten implementations.
+- "Is there something we could do to import backlinks into Org mode?"
+- "We've always tried to have an experimental ground where we can track backlinks"
diff --git a/2020/info/19.md b/2020/info/19.md
new file mode 100644
index 00000000..98d78add
--- /dev/null
+++ b/2020/info/19.md
@@ -0,0 +1,43 @@
+# Sharing blogs (and more) with org-webring
+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.vtt"]]
+[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
+only how to use org-webring (including how accessible and low-friction
+it is), but also how you may customize it, utilize it in different
+contexts unrelated to blogging (tracking project commits), and even as
+a way to respond to other blogs in a cogent and manner.
+
+Additionally, I will go into slight detail as to the history of this
+project, why it was made, what we are working on, and what we
+remaining we need to do before we can submit it to GNU Emacs /
+Org-mode.
+
+I think, in all, this can quite easily cover a 10 minute window.
+
+- <https://sr.ht/~brettgilio/org-webring>
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T16.02.37; End:
+ 2020-11-28T16.10.30;
+
+# Questions
+
+## How do you keep doc/README.org in-sync with org-webring.el?
+I use an exporter in the .org file that outputs the MD file on save
+automatically. The relevant parts are at the bottom of the .org file.
+
+- I saw that :). I was wondering about the synchronisation between the
+ .org file and the .el file.
+ - &#x2013; that is done manually Currently. I wish there was an
+ Easier way. There should be a way to export public definition
+ DocStrings.
+
+# Notes
+- <https://en.wikipedia.org/wiki/Webring>
+- Any more questions on org-webring, email <brettg@gnu.org>.
diff --git a/2020/info/20.md b/2020/info/20.md
new file mode 100644
index 00000000..a8af5e35
--- /dev/null
+++ b/2020/info/20.md
@@ -0,0 +1,534 @@
+# OMG Macros
+Corwin Brust
+
+[[!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.
+Join the dungeon-mode project as we trip over our own macros, so to
+speak, in the context of building a GPLv3+ turn-based role-playing
+game engine and game design features for Emacs.
+
+In this 20m talk I'll briefly introduce some rationales leading to
+storing all game source and play state information within org-mode
+documents (spoiler: it's about freedom), then go into some detail
+around the "ETL" process design that currently accomplishes this.
+Finally, we'll look closely at one especially problematic macro deep
+within this solution, and invite people to throw fruit^11^dhelp draw
+conclusions, ask questions, and discuss.
+
+[[!inline pages="internal(2020/info/dm-notes)" raw="yes"]]
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T16.17.32; Q&A:
+ 2020-11-28T16.34; End: 2020-11-28T16.38.32
+
+# Questions
+
+## How is your background work?
+See 06: Trivial Emacs Kits's Q&A: Corwin uses Wallpaper Engine.
+
+- [Corwin] Wallpaper Engine on Steam is probably the thing that's
+ grabbing attention. I haven't tried it under GNU/Linux. My family
+ are (mostly) Windows users right now ****heavy sigh**** I don't want
+ to get into my tool chain a huge amount, but I will talk about it
+ some as/durning the Welcome to the Dungeon talk tomorrow. For now I
+ will say I'm using a mix of free (free and not-free but too easy to
+ avoid tools on my one pretty good computer). I would love to have
+ the time to invest to use more (only) free stuff but sometimes we we
+ can't afford the freedom, in terms of the learning curve. I think
+ this is the most important problem space in free software, FWIW.
+
+## What was the key message you wanted to share with your talk?
+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
new file mode 100644
index 00000000..96165e9e
--- /dev/null
+++ b/2020/info/21.md
@@ -0,0 +1,92 @@
+# 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" 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
+Emacs", "How to make Emacs popular again", and "Interactive guide for
+new users". On the one hand I am absolutely sure that eev is very
+good answer to all these themes; on the other hand I know that eev is
+based on some design decisions that offend most people used to modern,
+"user-friendly" interfaces - and I feel that at this moment mentions
+to eev in those discussions in emacs-devel would not be welcome.
+
+In this talk I will start by presenting very quickly the main "killer
+features" of eev - namely:
+
+1. Elisp hyperlinks,
+
+2. interactive tutorials that can be navigated with just three keys,
+
+3. non-invasiveness - people can easily turn eev on for only five
+ minutes each week, play with it a bit, and then turn it off,
+
+4. high discoverability factor,
+
+5. a way to create "hyperlinks to here",
+
+6. hyperlinks to specific points in PDF documents and video files -
+ i.e., to specific pages, strings, and timemarks,
+
+7. a way to control shell-like programs ("eepitch"), and
+
+8. an Elisp tutorial,
+
+and after that I will present the design decisions behind eev, in two
+parts:
+
+1. eev is a very thin layer above Emacs-the-Lisp-environment; it is
+ as simple as possible, but in the sense of "simple" that was used
+ in Forth, and that is not very familiar today.
+
+2. Very often when I am using Emacs - which is my main interface
+ with the system - I realize that I can automate some task that I
+ just did by hand twice of thrice; and that I should do that,
+ because automating that would be both easy and fun. Over the
+ years I experimented with several ways of automating tasks,
+ refined some of these ways a lot, and found a certain "best"
+ style that, again, usually offends people who are accustomed with
+ the modern ideas of user-friendliness. In this style, used in
+ most template-based functions in eev, both textual documentation
+ and error-handling are kept to a minimum. I will show how, and
+ why, eev makes this style works so well, and how users can create
+ their own templated functions very quickly - as "5-minute hacks".
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-28T11.45.20; End:
+ 2020-11-28T12.26.00
+
+# Questions
+
+## Is eev like GNU hyperbole? (from karthink in #emacsconf)
+[rswgnu] I know Eduardo is exploring using Hyperbole with eev and we
+will work with him to help him integrate its features.
+
+## Are there variants of pos-spec-list that aren't search based? E.g., find buffer + run some other command + copy results?
+I guess this is partly answered, with Xpdf example.
+
+Take a look here: <http://www.youtube.com/watch?v=hOAqBc42Gg8#t=32m05s>
+
+## I didn't quite follow the find-here-links demo, can you describe that once more slowly?
+I just added links to the tutorials about find-here-links and refining
+hyperlinks to the bottom of this page:
+<http://angg.twu.net/emacsconf2020.html> - hope that helps!
+
+## What are the books/readings that inspired you about usability again?
+Here are some: "Software Tools" by Kernighan and Plauger, the article
+about "Little Languages" in Jon Bentley's "More Programming Pearls", a
+commercial Forth called HS-Forth, and "Exploring Expect" by Don Libes.
+
+# Notes
+- eev homepage: <https://www.emacswiki.org/emacs/EevMode> |
+ <http://angg.twu.net/#eev>.
+- find-video open a video with a time stamp as an input argument.
+- How to record executable notes with eev - and how to play them back
+ <https://emacsconf.org/2019/talks/27/>.
+- Anchors (not explained in the talk)
+ <http://angg.twu.net/eev-intros/find-eev-quick-intro.html#8>.
+- <http://angg.twu.net/emacsconf2020.html>
diff --git a/2020/info/22.md b/2020/info/22.md
new file mode 100644
index 00000000..638a2d2f
--- /dev/null
+++ b/2020/info/22.md
@@ -0,0 +1,676 @@
+# Powering-up Special Blocks
+Musa Al-hassy
+
+[[!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
+the effort required to make new ones. When new encapsulating notions
+are required, users will either fallback on HTML or LaTeX specific
+solutions, usually littered with \`#+ATTR' clauses to pass around
+configurations or parameters.
+
+Efforts have been exerted to mitigate the trouble of producing new
+special blocks. However, the issue of passing parameters is still
+handled in a clumsy fashion; e.g., by having parameters be expressed
+in a special block's content using specific keywords.
+
+We present a novel approach to making special blocks in a familiar
+fashion and their use also in a familiar fashion. We achieve the
+former by presenting \`\`defblock'', an anaphoric macro exceedingly
+similar to \`\`defun'', and for the latter we mimic the usual
+\`\`src''-block syntax for argument passing to support special blocks.
+
+For instance, here is a sample declaration.
+
+ (defblock stutter () (reps 2)
+ "Output the CONTENTS of the block REPS many times"
+ (org-parse (s-repeat reps contents)))
+
+Here is an invocation that passes an *optional* argument; which
+defaults to 2 when not given.
+
+<div class="stutter">
+<p>
+Emacs for the win ⌣̈
+</p>
+
+</div>
+
+Upon export, to HTML or LaTeX for instance, the contents of this block
+are repeated (\`stuttered') 5 times. The use of \`\`src''-like
+invocation may lead to a decrease in \`#+ATTR' clauses.
+
+In the presentation, we aim to show a few \`practical' special blocks
+that users may want: A block that &#x2026;
+
+- translates *some selected* text &#x2014;useful for multilingual blogs
+- hides *some selected* text &#x2014;useful for learning, quizzes
+- folds/boxes text &#x2014;useful in blogs for folding away details
+
+In particular, all of these examples will be around ~5 lines long!
+
+We also have a larger collection of more useful block types, already
+implemented.
+
+The notable features of the system are as follows.
+
+- Familiar \`\`defun'' syntax for making block &#x2014;\`\`defblock''
+- Familiar \`\`src'' syntax for passing arguments &#x2014;e.g., \`\`:key
+ value''
+- Fine-grained control over export translation phases &#x2014;c.f.,
+ \`\`org-parse'' above
+- **Modular**: New blocks can be made out of existing blocks really
+ quickly using \`\`blockcall'' &#x2014;similar to Lisp's \`\`funcall''. We
+ will show how to fuse two blocks to make a new one, also within ~5
+ lines.
+
+It is hoped that the ease of creating custom special blocks will be a
+gateway for many Emacs users to start using Lisp.
+
+## Resources
+
+<https://alhassy.github.io/org-special-block-extras/emacs-conf-2020>
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-29T09.19.39; Q&A:
+ 2020-11-29T09.36.14; End: 2020-11-29T09.48.34
+
+# Questions
+
+## Should packages implement the interface to one specific format, or attempt to be conclusive to all the potential output targets?
+
+## How to share "recipes"? Will this become a "large" project, or minimal that requires you to write most customizations yourself?
+
+## Could you make slides that show the source form on the left and the output on the right? That would make understanding each capability much simpler.
+
+## Does typing in a block mess up the syntax highlighting? Usually themes use a single color inside an example block, for example.
+"You found my crutch!". Colors in source code blocks within blocks are
+hard. Didn't have time yet to implement it. Any help is appreciated!
+:)
+
+- That's where you can get help from org-mode core developers ;)
+
+## If you export to LaTeX->PDF does that work well with beamer as well? To create slides with columns for example?
+You have to format the LaTeX appropriately for the backend "beamer".
+
+## How does this relate to pandoc, which is used for converting between markup formats?
+
+## Side question about org-reveal: How do you get bespoke/multiple-column layouts without using #+HTML (and <div>) everywhere in the Org file?
+It's a custom `#begin_parallel` block! See the main article linked
+below.
+
+Parallel section:
+<https://alhassy.github.io/org-special-block-extras/#Parallel>
+
+## What is used to produce colorful boxes around the cursor in your browser?
+Commercial software called ScreenBrush.
+
+## Why did you put optional arguments in a separate list rather than using cl-style argument lists? e.g. (defblock feedback (who &optional (color "red")) &#x2026;)
+The first argument may take some meta-information when you define it,
+which is easier to handle with two arguments.
+
+## Do you intend to try to upstream this amazing work into Org? :)
+No prior experience on how to upstream; suggestions and help
+appreciated.
+
+- <https://orgmode.org/contribute.html>.
+- Yes, I would suggest simply posting a short proposal for an
+ org-defblock macro on the orgmode mailing list, and hopefully
+ Bastien and other maintainers like Nicolas will discuss it with you.
+ I think they would be excited to have this feature standardized in
+ Org. +1+1+1+1 I am excited+1+1
+
+Add a little beginner-focused documentation and this becomes another
+great reason to use Org over Markdown, I imagine the maintainers would
+love to have it.
+
+# Notes
+- Main article: <https://alhassy.github.io/org-special-block-extras/>
+ (HTML or 48 page PDF).
+- Slides for this talk:
+ <https://alhassy.github.io/org-special-block-extras/emacs-conf-2020>.
+- [Reddit
+ discussion](https://www.reddit.com/r/emacs/comments/k2whsy/declaring_new_special_blocks_with_arguments/).
+- Elisp Reference Sheet:
+ <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
new file mode 100644
index 00000000..e00d3c28
--- /dev/null
+++ b/2020/info/23.md
@@ -0,0 +1,553 @@
+# Incremental Parsing with emacs-tree-sitter
+Tuấn-Anh Nguyễn
+
+[[!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 (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
+the foundation of Emacs packages that understand source code's
+structure. Examples include better code highlighting, folding,
+indexing, structural navigation.
+
+In this talk, I will describe the current state of emacs-tree-sitter's
+APIs and functionalities. I will also discuss areas that need
+improvements and contribution from the community.
+
+- Slides: <https://ubolonton.org/slides/emacs-tree-sitter-emacsconf2020.pdf>
+
+<!-- from the pad --->
+- Actual start and end time (EST): Start: 2020-11-29T09.49.24; Q&A:
+ 2020-11-29T10.13.56; End: 2020-11-29T10.31.44
+
+# Questions
+
+## Q20: can we integrate it with Spacemacs Python layer
+
+## Q19: The Python mode example was pretty good. Is that something that one can use already?
+Yes, already using it at work right now.
+
+## Q18: Regarding Emacs integration, will it always need to be a foreign library or can it be included / linked directly in compilation?
+Building a parser from source needs Node.js
+<https://tree-sitter.github.io/tree-sitter/creating-parsers#dependencies>
+so I don't know if it'll be in-tree and included at compile time.
+
+Core library dynamic module, would be better to be included in core
+Emacs eventually. Language definitions might be better distributed
+separately.
+
+## Q17: Is there a link to the slides?
+Yes, will post in IRC later.
+
+Slides: <https://ubolonton.org/slides/emacs-tree-sitter-emacsconf2020.pdf>
+
+## Q16: Are there any language major modes that have integrated already?
+Not yet (answered during talk).
+
+Typescript: discussing integration, not integrated yet.
+
+## Q15: Is it possible to use tree-sitter for structural editing?
+Covered by Q4 / Q8 / Q11.
+
+## Q14: Is there a folding mode for tree-sitter?
+Not yet. There are multiple code folding frameworks inside Emacs, and
+it's better to integrate with these modes rather than writing
+something new entirely.
+
++1 Would be nice if it worked with outshine mode or similar.
+
+## Q13: MaxCity on IRC asks: "That pop up M-x window. How do you get that?"
+ivy-posframe most likely
+<https://github.com/tumashu/ivy-posframe/>. Or not. Cool!
+
+Custom helm code.
+
+## Q12: I'm new to the tree-sitter world. Is it easy to install/use it also on Windows? (I have to use winbloat at work)
+The usual approach is hoping someone else made a precompiled version
+for you and download it. Otherwise you'll have to set up a development
+environment with mingw-msys or whatever.
+
+- No, both tree-sitter and tree-sitter-langs provide pre-compiled
+ binaries for macOS, Linux, and Windows.
+
+Yes, it should work out-of-the-box on Windows, provided that Emacs was
+compiled with module support turned on.
+
+## Q11: Is it possible to use this for refactoring too?
+For the kind of refactoring inside a buffer, it's very doable right
+now with some glue code. For more extensive refactoring where you want
+to touch all files in a project, there needs to be some kind of
+understanding of the language model system, how they are laid out in
+the filesystem&#x2026; even files that are not yet loaded into
+Emacs. That sounds like something a lot more extensive. Sounds like an
+IDE in Emacs.
+
+## Q10: Can language major-mode authors start taking advantage of this now? Or is it intended to be used as a minor-mode?
+Minor mode depended on by the major modes.
+
+## Q9: I'm completely new to tree-sitter, how do I use it as an end user? Is there an easy example config out there by the organizer or otherwise that shows standard usage with whatever programming language? Or are we not there yet?
+Answering own question: Sounds like major mode maintainers need to
+integrate.
+
+Syntax highlighting is pretty easy to activate
+<https://ubolonton.github.io/emacs-tree-sitter/getting-started/> -
+nice, tree-sitter-hl-mode looks easy
+
+Need to add more examples to the documentation.
+
+## Q8: (Following on from Q4) Could there be a standardised approach to coding automatic refactorings in the future? e.g. so that whichever language mode you are using, you could see a menu of available refactoring operations?
+Not sure about this. Most refactoring operations are highly specific
+to a class of languages. Not one single approach for all the
+languages, but maybe one for object-oriented languages, one for
+Lisp-type languages, one for Javascript and Typescript&#x2026;
+
+I meant the lisp and user interfaces being unified, not the
+implementations of the refactorings. But maybe it belongs in a
+separate mode on top. So you could have a defrefactor macro or
+similar.
+
+## Q7: How extensive will the compatibility be between highlighting grammars for Emacs and those for Vim/Neovim with Tree-sitter?
+For the time being it looks like nvim-treesitter also uses the S-exp
+syntax for queries so it shouldn't be too hard. See
+<https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/rust/highlights.scm>.
+
+- No effort has been spent on compatibility yet. Each editor has its
+ own existing conventions for highlighting. Having a common set of
+ basic "capture names" is possible, and will require efforts from
+ multiple editor communities. (Emacs and NeoVim for now. The editor
+ that introduced Tree-sitter, Atom, hasn't used these queries for
+ highlighting.)
+
+## Q6: Will it ever be possible to write Tree-sitter grammars in a Lisp, or will JS be required?
+The grammar part is written in JSON, you don't need to actually
+understand JS to write it. Using Lisp would merely give you a
+s-expression version, that wouldn't buy you much.
+
+- Ah, so all that is needed is `(json-encode '(grammar …))`? Great!
+
+## Q5: Could you show the source that was matched by the parser in the debug view in addition to the grammar part matched?
+
+## Q4: Could this be used with packages like `smartparens` that aim to bring structrual editing to non-s-expression based languages? AST-based refactoring?
+It is one of the goals, but not yet achieved.
+
+## Q3: Do you think Tree-sitter would be useful for Org buffers? I can imagine it being used to keep a parsed AST of an Org buffer (e.g. like org-element's output) updated in real time.
+
+An obstacle here is Org not having anything anywhere close to a formal
+grammar, so that would need to be corrected first.
+
+- <https://orgmode.org/worg/dev/org-element-api.html>.
+- <https://orgmode.org/worg/dev/org-syntax.html>.
+ - This is an informal description of it, not an actual
+ grammar. Nevertheless, there's a few projects trying to codify a
+ grammar. I'll dig up some links soonish.
+ - The element API is the formal grammar - canonic
+ implementation. Org-syntax document is a draft of the text
+ descrption of the grammar.
+ - Note: relevant mailing list discussion
+ <https://orgmode.org/list/68dc1ea1-52e8-7d9e-fb2d-bcf08c111eca@intrepidus.pl/>.
+
+~~FIXME:~~ Add link to a emacs-tree-sitter project/snippet for org-mode.
+
+- Not sure if it is what you have in mind, but there is <https://github.com/gagbo/tree-sitter-org>
+ - Yes, this is it.
+
+## Q2: Will Elisp performance be more competitive with GCCEmacs enough to make Tree-sitter in Elisp more attractive?
+
+~~The point of this project is to reuse other people's efforts, not
+rewriting them.~~
+
+It's a possibility. In terms of probability, probably not. It's a huge
+amount of work. The GC latency is also a fundamental issue.
+
+## Q1: Do you think that his package can be included into Emacs/GNU ELPA?
+Yes, it is just matter of paperwork.
+
+# Notes
+- Project description: emacs-tree-sitter is an Emacs Lisp binding for
+ tree-sitter, an incremental parsing library.
+ - <https://github.com/ubolonton/emacs-tree-sitter> (<- bindings).
+ - <https://ubolonton.github.io/emacs-tree-sitter/> (<- documentation).
+ - <https://tree-sitter.github.io/tree-sitter/> (<- parser).
+- Regular expressions are not powerful enough.
+- 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
new file mode 100644
index 00000000..af8e503f
--- /dev/null
+++ b/2020/info/24.md
@@ -0,0 +1,88 @@
+# Analyze code quality through Emacs: a smart forensics approach and the story of a hack
+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 (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/)
+
+Emacs, show me how much technical debt and where it is in this
+software repository!
+
+Also how complex is this module?
+
+And who is the main developer of this component?
+
+Mmm, if I change this file, do I need to change something else, Emacs?
+
+Ah, I need help of somebody to change this code! Emacs can you tell me
+who knows something about this file?
+
+The above are some questions my Emacs can answer (an M-x away).
+
+It all started with "Your Code as a Crime Scene", an insightful book
+by Adam Tornhill, and it continued with a big useful hack.
+
+In this talk I want to show the analyses I can produce on software
+repositories with my Emacs, explain how they help me in my daily work,
+give a bit of context of how Adam came up with them, and show the
+dirty code that makes this wonderful functionality work.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-29T10.34.52; End:
+ 2020-11-29T10.55.39
+
+# Questions
+
+## Q3: How large of a codebase could this be used to analyze? Are there known limits in size?
+Nope, so far I could create a microservice picture at work that has a
+few million of lines. I did not do stress test, but I am confident
+that (at least the hotspots analysis) does not break.
+
+## Q2: Have you uploaded this file somewhere (or plan to do so)? This seems very useful so I would love to have these code snippets.
+It's totally my plan to make this accessible to everyone: we need more
+code quality for our feature (software is everywhere)! The plan was a
+series of blog and learn how to publish in MELPA later.
+
+That's great, make sure to announce it somewhere so we know when it
+comes out :D. Or maybe link the Git repo that you are using for this.
+
+## Q1: What is used to measure the complexity of a LISP file, from your point of view? The nesting level per chance?
+Indentation is good enough to apply in general. Even Lisp gets
+formatted in a standard way. Probably you can come up with a more
+specific and precise way, but indentation is a really rough metrics to
+give you a general idea. So take with a pinch of salt, but exploit to
+find weird things.
+
+- OK, thanks for the response.
+
+## How did you summon, resize and dismiss that window so seamlessly?
+org-roam and C-x 0
+
+- How did you resize it from 2/3 to 1/3 of the frame?
+ - golden-ratio-mode from golden-ratio.
+
+## Have you considered doing this analysis by function instead than by file?
+I did not have chance yet to integrate that, but the theory is
+described in Adam's 2nd book: Software Design -Rays
+
+# Notes
+- Book by Adam Tornhill "Your Code as a Crime Scene":
+ <https://www.adamtornhillem.com/articles/crimescene/codeascrimescene.htm>.
+- <https://github.com/adamtornhill/code-maat>.
+- Beautiful circles diagram.
+- Especially for big projects with many collaborators the codebase may
+ become less transparent
+- hotspots: files that have had many changes based on git history;
+ likely sources of bugs.
+- Complexities of a file are measured in terms of the indentation, at
+ least in the case of Java.
+- "If a lot of lines are deleted, that's usually a good sign. If a lot
+ of lines are added, it's a sign of technological debt".
+- Another beautiful diagram (big circle with files on periphery,
+ linked together with curved lines) showing associations between
+ changes in files: when this file gets changed, it usually means that
+ this other file is also changed.
+- <https://ag91.github.io/blog/>.
diff --git a/2020/info/25.md b/2020/info/25.md
new file mode 100644
index 00000000..506f3de5
--- /dev/null
+++ b/2020/info/25.md
@@ -0,0 +1,249 @@
+# Traverse complex JSON structures with live feedback
+Zen Monk Alain M. Lafon
+
+[[!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
+what it does. However, being a command-line tool like sed, the
+feedback for writing queries and seeing their results is a discrete
+process and not live.
+
+When working with Emacs, we are used to good auto-completion and live
+feedback. Formerly, this was mostly done with static input, but with
+modern completion frameworks like Ivy and Counsel, this can be done
+with dynamic inputs, as well.
+
+counsel-jq is a package with which you can quickly test queries and
+traverse a complex JSON structure whilst having live feedback. Just
+call `M-x counsel-jq` in a buffer containing JSON, then start writing
+your `jq` query string and see the output appear live in the message
+area. Whenever you're happy, hit `RET` and the results will be
+displayed to you in the buffer `*jq-json*`.
+
+In this lightning talk, I'll give a quick overview on how to use
+counsel-jq and how to build similar completion functionality.
+
+## Resources
+
+<https://200ok.ch/posts/2020-11-30_emacsconf_traverse_complex_json_structures_with_live_feedback_with_counseljq.html>
+
+# Questions
+
+## Q4: Any plans for counsel-yq and/or -xq? ;-)
+counsel-jq currently just shells out to jq. Adding tools build on top
+of jq (at least yq is afaik) would be very easy. We could employ a
+strategy pattern to find the right tool based on the current
+major-mode with a configurable fallback. Here's the place where the
+shellout happens:
+<https://github.com/200ok-ch/counsel-jq/blob/master/counsel-jq.el#L23>
+
+Would you be interested in making a PR for that? (;
+
+## Q3: Why repository_url did not autocomplete in addition to the result (I know that it is ivy thing but possible to configure?)
+There's no autocompletion for the search query, but that would be a
+great addition. That would theoretically be possibe by employing jq to
+look ahead in the current tree and providing options for
+autocomplete. I'm not certain if Ivy does have autocomplete for search
+queries, though.
+
+If somebody has more knowledge on that and would like to ping me up or
+provide a (draft) PR, I'd be happy to help out in that endeavour!
+
+## Q2: Is it difficult to provide autocompletion for the JSON query in the minibuffer?
+Good question. I'd be curious, too. It's the same question as Q2 where
+I went into a possibe scenario.
+
+## Q1: Is it possible to search in arbitrary deep objects? E.g., an AST represented in JSON.
+counsel-jq uses jq under the hood, so all queries that are valid
+queries in jq should be valid in jq. Hence, I'm inclined to say
+'yes' (;
+
+# Notes
+- 200ok GmbH (<https://200ok.ch>).
+- Play Emacs like an instrument:
+ <https://www.youtube.com/watch?v=gfZDwYeBlO4>.
+- jq: <https://stedolan.github.io/jq/>.
+- ivy supports dynamic sources. So does helm I guess.
+- 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
new file mode 100644
index 00000000..50463949
--- /dev/null
+++ b/2020/info/26.md
@@ -0,0 +1,239 @@
+# Emacs as a Highschooler: How It Changed My Life
+Pierce Wang
+
+[[!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 (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
+approach everything at the age of 15. In the two years since
+discovering Emacs in my sophomore year of high school, I have been
+constantly amazed at what Emacs is capable of. In this talk, I would
+like to share this journey of discovery and what I've learned along
+the way, beginning with what led me to Emacs. I will reflect on my
+experience of the Emacs learning curve and then also talk about the
+many ways that Emacs has shaped my life as a student, programmer,
+violinist, and a productive and happy adolescent. In each case, I
+have thoroughly enjoyed figuring out the best way to make Emacs work
+for me. Finally, I will reflect on my journey thus far and briefly
+talk about my plans for the future.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-29T13.06.20; Q&A:
+ 2020-11-29T13.16.52; End: 2020-11-29T13.21.51
+
+# Questions
+
+## Q6: How would you introduce other classmates to Emacs? Meaning what's the "gateway" drug to Emacs?
+Would probably start with doom or Spacemacs.
+
+Try to find their reason for using Emacs.
+
+## Q5: What made you use Vim in the first place? Were you looking for a note-taking system in plain text (such as Markdown), or were you using it for programming?
+Used vim first time mainly for programming not for Markdown.
+
+## Q4: I tend to think that life in school-age is somehow simple to organize since categories are easy to distinguish (years/classes, hobbies, &#x2026;) in contrast to business life (many projects in parallel with many touch-points in-between them). From your point of view: do I have wrong memories on my time in school or did school change that much?
+School makes it easier to have a structured system.
+
+## Q3: Assuming you keep real time notes during your lessons how do you manage to keep up with the lecturer's speed. I can write LaTeX fragments pretty fast but I am not yet at the point that I can keep up with them. What are the tricks/snippets you use? Oh and do you have a git repo with your Emacs dots that we can see?
+Types pretty fast (~110 wpm); for math/science uses CDLaTeX, YASnippet
+expansion, and LaTeX fragments.
+
+Emacs config! <https://piercegwang.github.io/emacsd/init>
+
+## Q2: What do your friends think :) ? (Do you collaborate with your friends?)
+Overwhelmed them by the positive experience at first :). Now that the
+configuration is somewhat stable Emacs doesn't come up as often in
+discussions, though. [someone can probably come up with a better
+summary of this answer]
+
+The general concensus is that it's an amazing piece of software, but
+they think it's too complicated for them to use. I think they also
+still have PTSD from the initial days when I was talking about Emacs
+**all** the time (whooops).
+
+## Q1: Do you use Emacs for school assignments?
+Answered in talk: yes, Org mode, export to LaTeX -> PDF.
+
+One Org mode template file with latex-fragments that is used for
+exporting.
+
+# Notes
+- Discovered Emacs from:
+ <https://www.youtube.com/watch?v=JWD1Fpdd4Pc>.
+- 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
new file mode 100644
index 00000000..d7a5c1b5
--- /dev/null
+++ b/2020/info/27.md
@@ -0,0 +1,288 @@
+# State of Retro Gaming in Emacs
+Vasilij "wasamasa" Schneidermann
+
+[[!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)
+- [chip8 demo - car, .webm, 720p, 1M](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-car--vasilij-wasamasa-schneidermann.webm)
+- [chip8 demo - joust, .webm video, 720p, 2M](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-joust--vasilij-wasamasa-schneidermann.webm)
+- [chip8 demo - kaleidoscope, video, 720p, 2M](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-kaleidoscope--vasilij-wasamasa-schneidermann.webm)
+- [chip8 demo - sierpinski, video, 720p, 357K](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-sierpinski--vasilij-wasamasa-schneidermann.webm)
+- [chip8 demo - tetris, video, 720p, 843K](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-tetris--vasilij-wasamasa-schneidermann.webm)
+
+Many jokes have been made about the true nature of Emacs, such as it
+being a fully-fledged operating system. This talk will demonstrate
+its suitability for playing retro games, then explore the inner
+workings of a [CHIP-8](https://en.wikipedia.org/wiki/CHIP-8) emulator capable of smooth video game emulation.
+
+[1]: <https://depp.brause.cc/talks/chicken-saar/>
+[2]: <https://depp.brause.cc/talks/openchaos-2019-11/>
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-29T13.23.01; End:
+ 2020-11-29T13.33.00
+- Alternative stream for extended talk:
+ <http://live.emacsconf.org/alt.html> or
+ <http://live0.emacsconf.org/alt.webm>.
+
+# Questions
+
+## Q5: Do you think would be possible to write some compiler in order to write chip-8 games on elisp?
+It could be possible if you restrict yourself to some very limited
+Elisp subset or lispy assembler. For the latter, here's some projects
+to draw inspiration from:
+
+- <https://ahefner.livejournal.com/20528.html>.
+- <http://www.dustmop.io/blog/2019/09/10/what-remains-technical-breakdown/>
+ ->
+ <http://www.pawfal.org/dave/blog/2016/05/a-6502-lisp-compiler-sprite-animation-and-the-nesfamicom/>.
+- <https://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp> ->
+ <https://blog.jakspeedruns.com/opengoal-project-update-september-2020/>.
+
+## Q4: What's the biggest perf bottleneck for your emulator? does it spend time executing your Lisp or something else in the Emacs infrastructure (eg redisplay)?
+Redisplay was super slow, it's like 3-4x as slow as executing the CPU
+cycles.
+
+- Okay that's the reason why GCCEmacs does not help :)
+
+## Q3: Do you think that you make our tiny console based in the chip ATMega like Arduboy?
+I'm sorry, I didn't quite understand the question, could you please
+clarify it? I'm not exactly a hardware person, might have to defer it
+to someone else.
+
+I've looked at Arduboy and I believe the DEFCON CHIP-8 Badge is the
+closest to this:
+<https://hackaday.io/project/19121-andxor-dc25-badge/log/53223-chip8-schip-game-emulation>
+
+## Q2: Any tutorial to start? I want to make my game now, no, for chip8
+I'm not aware of tutorials, but there's CHIP-8 resources online. You
+can of course study the assembly of existing games, that's how I
+figured out the tricks that broke my emulator :>
+
+## Q1: How did you manage to present a game engine without showing any game? :-) Show us!!
+See the alt stream, it has several demos not shown due to time
+constraints.
+
+# Notes
+- Slides available at <https://depp.brause.cc/talks/emacsconf-2020/>.
+- 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
new file mode 100644
index 00000000..5ea02d1c
--- /dev/null
+++ b/2020/info/28.md
@@ -0,0 +1,60 @@
+# Welcome To The Dungeon
+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 (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
+war-gaming communities in and around the University of Minnesota, Twin
+Cities in the 1950s and 60s.
+
+Dungeon is inherently free (or nearly free, you do need paper and
+dice), both to play and to create your own games. Moreover, as a
+generality among practices, as Dungeon authors, we dislike impositions
+on our creative freedoms beyond those of our own imagination and
+tastes, especially those such as of a "brand" or "system", or e.g.
+copyright holder.
+
+In December of 2019 some friends who grew up creating and playing in
+each others' Dungeons decided to try making an engine for these types
+of games using Emacs and Emacs Lisp, org-mode, and maybe some
+duct-tape if needed. In this 50 minute talk Corwin and Erik introduce
+dungeon-mode, and explain why we decided to do that. We'll sketch out
+the project in both lay and technical terms, provide a tactical update
+with respect to completing our initial concept, describe how things
+are going in human terms, and share some things we've learned so far
+from and about Emacs and the free software community working on this
+project, while leaving 10-15m for questions and discussion.
+
+[[!inline pages="internal(2020/info/dm-notes)" raw="yes"]]
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start: 2020-11-29T13.34.52
+
+# Questions
+
+## Q5: Which software did you use for your presentation?
+[Corwin] Everything you saw was OBS, Emacs or the desktop wallpaper
+engine from Steam.
+
+## Q4: Have you played around with generating SVGs programatically in Elisp? Sorry if I missed that! missed the intro
+Yes, we started with hand coding the SVGs and later switched to doing
+it programatically.
+
+## Q3: could you talk about getting the project into savannah/gnu?
+Not sure whether this is still canonical:
+<https://git.savannah.nongnu.org/cgit/dungeon.git/>
+
+## Q2: Could you explain more of what the game is. It would help us comprehend this better. +1 Could you link the handbook. Would be interested in giving a read, I love RPGs.
+If you send me your thoughts on the most important bits to finish I
+will :)
+
+Like RPG's but without the role-playing. Always 8 characters that can
+be divided between the players.
+
+## Q1: I'd like to see a demo as well! :) What does it look like, what can it do?
+
+# Notes
+<https://github.com/dungeon-mode/game>
diff --git a/2020/info/29.md b/2020/info/29.md
new file mode 100644
index 00000000..42430ce0
--- /dev/null
+++ b/2020/info/29.md
@@ -0,0 +1,75 @@
+# Pathing of Least Resistance
+Erik Elmshauser and Corwin Brust
+
+*This time slot was combined with the previous.* See [[28: Welcome to the Dungeon|/2020/talks/28]] for the video and notes from the pad.
+
+We hope the dungeon-mode project will eventually support three primary
+use-cases related to editing/designing, playing and running/hosting
+RPG games. In a "vanilla" game, characters descend from the "General
+Store" (the one safe haven available) into the dungeon, a (nominally)
+underground labyrinth of unknown dimensions with generally asocial
+occupants and occasional bits of treasure.
+
+Players can track (as long as the "lights" stay on) the location of
+their party of characters via a process we usually call "mapping".
+This has usually involved the dungeon master "calling out" the shape
+of the map level as the party, in turn, calls out their route or
+"pathing" decisions.
+
+ DUNGEON-MASTER
+ "Corridor East-West"
+ PARTY-LEADER
+ "West"
+ DUNGEON-MASTER
+ "Ten feet, corridor ends goes South"
+ PARTY-LEADER
+ "South"
+ DUNGEON-MASTER
+ "Step into an area. It's a
+ twenty-by-twenty area extending
+ West, with exits in the Western
+ part of the southern wall and the
+ Southern part of the eastern wall."
+ **rolls dice**
+ "Nothing waiting in the area"
+
+Mapping quickly emerged as a focal point for development. Especially,
+we were to excited to try creating an 'on-the-fly' graphical
+representation of the map that could respond to changing in-game
+circumstances. (Oops, all your Elves are dead. Where'd the secret
+doors go?)
+
+During this 20m talk I'll provide a couple of reference points on
+Emacs's image and especially SVG rendering capabilities, then
+introduce a series of proofs-of-concept focusing on our experience
+using core libraries such as \`svg.el' to make them.
+
+As of submitting abstracts, these include
+
+- "DM map view" - select and render a complete game map,
+- "play mode map" - progressively render maps based on game action,
+- "battle-board" - track damage taken by player characters, and
+- "character-sheet" - a graphical character sheet
+- "previews" - view map tiles when hovering their draw code in org
+- "sketch" - a "click-to-draw" experiment
+
+For an advanced peek please see our git repository (but note we're
+moving to Savannah soon). We'll be talking first about [map.el](https://github.com/dungeon-mode/game/blob/master/src/dm-map.el),
+especially \`dm-map-draw' and helpers. A few sample game maps this can
+render are available as org-mode documents in the [Docs/Maps](https://github.com/dungeon-mode/game/blob/master/Docs/Maps) folder.
+
+Those interested could compare functions between dm-map.el and
+[dm-draw.el](https://github.com/dungeon-mode/game/blob/master/src/dm-draw.el), which is an incomplete rewrite of the "SVG rendering"
+functions used only by [dm-sketch.el](https://github.com/dungeon-mode/game/blob/master/src/dm-sketch.el) (so far). Hopefully, it will be
+writing our "sketches" back out to org docs in time for the
+conference.
+
+Note on github:
+The project is transitioning to Savannah. Please watch for
+redirects/moved notices when using these links.
+
+[[!inline pages="internal(2020/info/dm-notes)" raw="yes"]]
+<!-- from the pad --->
+
+*This time slot was combined with the previous.* See [[28: Welcome to the Dungeon|/2020/talks/28]] for the video and notes from the pad.
+
diff --git a/2020/info/30.md b/2020/info/30.md
new file mode 100644
index 00000000..c1ccb761
--- /dev/null
+++ b/2020/info/30.md
@@ -0,0 +1,231 @@
+# 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" 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 (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
+overview of the package. I will discuss the installation and common
+customizations. I will go into details on some of the most important
+features, such as directory tracking or message passing. Finally, I
+will touch upon known incompatibilities and the future directions of
+the project.
+
+URL: <https://github.com/akermu/emacs-libvterm>
+
+<!-- from the pad --->
+
+# Questions
+
+## Q5: Does/will this work with 'emacs -nw'?
+Yes, it does.
+
+## Q4: Thats a nice looking prompt, do you have it on a Git repo we could see, or something of that manner? Thanks, I use Bash right now so I didn't know it was the default on the others.
+It is not the default, but it is available easily with oh-my-zsh or
+similar on fish. I think the prompt is this:
+<https://github.com/sindresorhus/pure>
+
+## Q3: Is there a plan to avoid the initial compilation step?
+Not any time soon. You will have to compile vterm the first time you
+start it.
+
+## Q2: What are differences between Eshell and vterm?
+Performance. vterm is like xterm but in Emacs, Eshell is like Bash but
+in Emacs.
+
+<https://github.com/akermu/emacs-libvterm#given-that-eshell-shell-and-ansi-term-are-emacs-built-in-why-should-i-use-vterm>
+
+## Q1: Could you put your testing scripts up somewhere?
+- 256colors: <https://pastebin.com/j6HF5q8T>
+- title: <https://pastebin.com/SByKdJM2>
+- I cannot pastebin the 1MB of data, I pasted a sample of it:
+ <https://pastebin.com/n1T3aUff>
+
+# 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
new file mode 100644
index 00000000..b5c5c661
--- /dev/null
+++ b/2020/info/31.md
@@ -0,0 +1,82 @@
+# Lakota Language and Emacs
+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 (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 (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>
+
+When I began learning Lakota, the language of my ancestors, there was
+no way for me to type it on a computer without using non-free
+software. Additionally, the only software I could find supported just
+one of the proposed orthographies for the language.
+
+As an Emacs user, I knew that free software offered the ability for
+many types of languages to co-exist in the same program and went
+looking for how to enable an input mode for Lakota in Emacs. This
+talk will discuss how Emacs enabled me to define input modes for
+multiple Lakota orthographies using the Quail multilingual input
+package.
+
+I will also discuss some of the ethical and cultural considerations I
+went through when publishing the package. Lakota and many other
+indigenous languages were actively suppressed for many years, and are
+in danger of extinction. The language is being recovered now, but
+much of the available educational material comes from non-indian
+people. Before publishing an input mode for Emacs, I wanted to ensure
+that I included an orthography developed by Lakota people, not only
+the suggested orthography present in most of my educational material.
+Additionally, the choice of where to publish the source as an Emacs
+package was important, since some corporations have been known to
+support ongoing oppression against indigenous descended peoples.
+
+<!-- from the pad --->
+
+# Questions
+
+## Q4: Did you write the company backend to complete on Lakota words?
+With a Lakota dictionary file, one could probably leverage other
+company methods for completion.
+
+Seems to be company-dabbrev, it happens automatically when typing in
+Org mode at least. Unfortunately the only digital Lakota dictionary
+I'm aware of is non-free, so I'm not sure what to do about that.
+
+- Yeah, I'm not sure, but the dictionary files needed would really
+ just be word-lists, so maybe there is a way to find or produce
+ something of this sort.
+
+## Q3: Why did you decide on e.g. a' for á? In my country's input method (which is Dutch, and in French, German, etc.) the default is to put the accent first, so 'e -> é.
+For me, this was my first experience with it and it made more sense in
+my head to have the modifier come after. Its possible I read about
+postfix notation in a tutorial I found (and lost) that demonstrated
+Quail input modes. The X11 input has it as a prefix, so I may change
+it in the future. I'd like to consult with other Lakota speakers and
+tribal members, however, as it seems worthwhile trying to get
+consensus from native speakers on usage.
+
+## Q2:Can you give us a demo of you typing in either Lakota input method?
+The demo starts at 02:06 in the Q&A video.
+
+## Q1: Advantages of using Emacs Input Methods over something like xcompose?
+→ Compose <https://wiki.archlinux.org/index.php/Xorg/Keyboard_configuration#Configuring_compose_key>
+
+Ah yes, I found something about this when making the X layout, but it
+was not immediately apparent. Emacs was easier for me to inspect and
+learn about than X, easier to iterate on as I was learning how it all
+worked. Emacs can re-eval the layout definition and give live
+feedback, while X required a restart to try different things. Emacs is
+also cross platform, so anyone can easily install this. also, sharing
+an X config seemed more difficult to me, I don't know how to tell
+someone to install it properly :(
+
+# Notes
+- <https://www.gnu.org/software/emacs/manual/html_node/emacs/Input-Methods.html>
+- Quail:
+ [lisp/international/quail.el](https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/international/quail.el?h=emacs-27.1)
+- <https://git.sr.ht/~shoshin/lakota-input.git>
diff --git a/2020/info/32.md b/2020/info/32.md
new file mode 100644
index 00000000..ad063ad9
--- /dev/null
+++ b/2020/info/32.md
@@ -0,0 +1,48 @@
+# Object Oriented Code in the Gnus Newsreader
+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 (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,
+presenting all of them using a unified interface. This sort of
+software often calls for an object-oriented architecture, at least as
+regards polymorphism, yet Gnus was written well before Emacs lisp
+acquired the object-oriented tools and libraries &#x2013; largely borrowed
+from Common Lisp &#x2013; that it boasts today.
+
+Yet Gnus needed something "object-oriented-like", and so nnoo.el was
+born: a rather amazing (and frankly terrifying) implementation of
+object-oriented behavior using functional code.
+
+This talk will be a brief introduction to how this existing system
+works, and to the ongoing, incremental effort to port it over to newer
+Elisp tools like generic functions, structs, and objects.
+
+<!-- from the pad --->
+
+# Questions
+
+## Q3: Have you done any other projects using EIEIO and/or defstruct?
+Right, EBDB is super deep into EIEIO, and was kind of written as a
+project for learning it, and the new gnus-search library is a more
+restrained usage. The search engines are defclasses, and much of the
+code is shared, which works quite well.
+
+
+## Q2: Is there may activity on maintenance of Gnus today? (and is Lars involved/aware of this work?)
+Yes, there's still development going on. I don't think Lars is very
+focused on Gnus right now, but I run all changes by him first. He
+fixes bugs, but as far as I know, I'm the only one adding features
+right now, which is a terrifying thought.
+
+## Q1: How much of this 90's funny code :) can be replaced and how much will have to stay forever?
+Eventually I think we can get most of it out of there. I was happy to
+be able to replace obarrays-as-hashtables with real hashtables, though
+that was a very painful process
+
+# Notes
+Famous last words: "Sometimes the only thing that's worse than not
+knowing why something doesn't work is not knowing why it does work."
diff --git a/2020/info/33.md b/2020/info/33.md
new file mode 100644
index 00000000..69920002
--- /dev/null
+++ b/2020/info/33.md
@@ -0,0 +1,63 @@
+# Maxima a computer algebra system in Emacs
+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 (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)
+
+Maxima is a great tool for symbolic mathematics, it has some support
+for Emacs in the main repository, but is quite outdated and doesn't
+receive the love I think it should, so a couple of months ago I decide
+to improve and "modernize" the maxima-mode.el code base. So, I want
+to talk about the integration with Emacs, the maxima REPL, how some of
+the main tool for Emacs integrate in maxima-mode and in general show
+how to start using maxima within Emacs.
+
+<!-- from the pad --->
+
+# Questions
+
+## Q9 Is it is possible to include Maxima in org files similar to jupyter notebooks? (Does ob-maxima have support for the :results graphics header argument of org-src blocks?)
+[Fermin] Right now its not possible to include images in the files,
+but is a feature that I would love to implement in the future. About
+the ob-maxima support I'm not so sure.
+
+## Q8 Are you planning to upstream your package into Maxima? (would be nice :)
+[Fermin] I would love to add the package to the maxima official
+repository, but I don't know if I can use the GitLab CI/CD from the
+main repository, if the answer is yes, then It shouldn't be too much
+trouble.
+
+## Q7 In which University do you start to use Maxima?
+[Fermin] I started using maxima in the University of Zaragoza
+(Spain) - <https://en.wikipedia.org/wiki/University_of_Zaragoza>.
+
+## Q6. Is there support for images in maxima-mode?
+[Fermin] Not yet (as of November 2020).
+
+## Q5: Is Maxima's syntax a strict infix Lisp syntax or are there exceptions and special cases? Yes I mean Maxima itself.
+[Fermin] I don't know enough about the maxima implementation to answer
+the question, sorry.
+
+## Q4. Is Maxima easy to get into in your opinion? (has its quirks though!, mailing list is usually helpful)
+[Fermin] It is! I think that the learning curve is quite easy, and
+that the manual and documentation are great!
+
+## Q3: Do you plan to amend ob-maxima to support named session for Maxima code blocks in org mode (e.g. begin_src maxima :session **my-maxima**)? (the current implementation supports exactly onesession named **maxima**)
+[Fermin] Yes, I want to improve in the future the maxima
+implementation for org-mode.
+
+## Q2: How does Maxima compare to SageMath in Emacs? does Maxima have more support because it is written in common Lisp whereas SageMath is written in Python?
+[Fermin] I don't know about sagemath sorry, but I know that the lispy
+thing about maxima make it interesting from a hacker stand point,
+mostly because all the tools that Emacs have for editing Common Lisp.
+
+## Q1: So I am an avid Octave user right now (had a MATLAB lesson in uni and so I knew the basics and it was easy to get into), what would you say are the advantages of Maxima over Octave as from my understanding they are pretty similar. I would be interested in trying it out but I am not sure if its worth it compared to Octave. (Octave is a MATLAB "clone", not meant for analytic calculations, more matrix multiplications etc.)
+[Fermin] They can be use for similar purposes, but I don't know enough
+about Octave to recommend maxima first, so I think the best thing to
+do is to try and see what system fit more in your needs.
+
+# Notes
+<http://maxima.sourceforge.net/>
diff --git a/2020/info/34.md b/2020/info/34.md
new file mode 100644
index 00000000..7c73b7ce
--- /dev/null
+++ b/2020/info/34.md
@@ -0,0 +1,668 @@
+# 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" 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
+PyQt5. This talk will cover the architecture design of the EAF
+project, and demonstrate some of its most useful applications: modern
+browser, PDF viewer, video player, etc.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start 2020-11-29T16:05; Stop 2020-11-29T16:28
+
+# Questions
+
+## Q9: Do you think that this tecnology could to be on core of Emacs any time? or fork of Emacs?
+Not yet and I don't know if it ever will, since EAF uses many other
+dependencies that one needs to install themselves (see README); and I
+don't think all of them is GPL (though using open source licenses).
+
+## Q8: I use PDF-Tools currently for my PDFs inside Emacs, would you consider this a better alternative to that and if so why? Although I am definitely trying it because the browser looks incredible, possibly the best implementation of an Emacs browser I have seen, I would love to hear your opinion on the PDFs compared to something like PDF-Tools.
+PDF-Tools is great, it would be an awesome option if you can't run EAF
+on your machine. However EAF PDF Viewer is just **a lot faster and
+smoother** as it uses PyMuPDF as its backend.
+
+- Oh, thats great actually, I have noticed it being a little choppy at
+ times, I am excited to try EAF in general because it looks awesome
+ and if its faster than pdf-tools I will probably also switch to it
+ for my PDFs. Thanks a lot for the talk, one of my favourites in this
+ EmacsConf, it gave me a lot of great tools to try inside Emacs!!
+- Thank you!!!
+
+Also because PDF-Tools is much older than EAF, it had more attention
+and more people working on it, so there are definitely more features
+than the current EAF.
+
+## Q7: Can you use the PDF viewer as a viewer for LaTeX files, with reverse search support with e.g. AucTeX?
+You could do that with some simple Elisp functions, and EAF PDF Viewer
+now updates itself automatically whenever there is a change to the
+file.
+
+Reverse search is currently not available, we need more people to help
+us work on it! :-)
+
+## Q6: What JavaScript engine is the web browser in EAF using? Also, what web browser engine is it using?
+QtWebEngine,. (from the Qt Wiki: )
+
+- Qt WebEngine uses code from the Chromium project. However, it is not
+ containing all of Chrome/Chromium;
+- Auxiliary services that talk to Google platforms are stripped out
+ (nice).
+- The codebase is modularized to allow use of system libraries like
+ OpenSSL.
+- Binary files are stripped out.
+
+## Q5: Does the web rendering happen in a subprocess, or can loading a big page cause Emacs to lag?
+Not at all! And that's one of the biggest advantage of the EAF
+project, it utilizes all the powerful Python features, like
+multithreading.
+
+## Q4: Do you have control over the JavaScript that runs on these pages? Also is there a blocklist feature? (True ad blocking might be impossible, I understand)
+As my talk just (or will be shortly) mentioned, you can disable
+JavaScript altogether. So far there isn't a blocklist implemented, but
+I don't see a reason not to be able to implement this feature in the
+near future. EAF itself uses JavaScript (free code) to implement some
+browser features (like the Vimium binding), so turning off JavaScript
+will make the feature stop working as well.
+
+## Q3: (Feel free to ignore this one if it is off-topic) How big is free software movement in China? Is there any organisation like FSF there?
+Very recent years there are A LOT of open source movement in China,
+however not free software strictly speaking;
+
+There are a lot of open source clubs in the chinese unversities now
+that people actually starting to get interested about open source in
+general, that's a huge improvement than decades ago I'd say. There are
+still many places to improve.
+
+Although not Free Software Foundation, literally this year the first
+ever open source foundation is established in China, called OpenAtom
+Foundation: <https://www.openatom.org/#/> (in chinese).
+
+## Q2: Is there anyway to implement EAF without the reparenting behavior from X11?
+That's one of the challenges right now to get EAF working on other
+platforms. We're always looking for people to help out.
+
+- Are there any ideas on this at all? I can try to help out but don't
+ know what's even been tried (and perhaps has already been ruled out).
+ - So EAF is currently using `QWindow::setParent`, not Xreparent, so
+ it in theory should be able to support at least Windows (IIRC it
+ provided API for setParent function to interact with).
+ - However `QWindow::setParent` doesn't work on native Wayland, you
+ can get more context in here:
+ <https://github.com/manateelazycat/emacs-application-framework/issues/449>.
+
+## Q1: Have you experimented with using Hy (aka Hylang, a Lisp that compiles to/runs in Python) for EAF, to avoid having to write "real Python"?
+Not yet! Will have a look into it later :-)
+
+# Notes
+- 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
new file mode 100644
index 00000000..d0dd67c2
--- /dev/null
+++ b/2020/info/35.md
@@ -0,0 +1,311 @@
+# 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" 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" 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
+endlessly. As with many things, I wondered how much better this tool
+would be, if only it was inside Emacs.
+
+This talk will explain how I made this tool inside Emacs, with detours
+through Emacs text properties, font rendering, the .WAVE file format,
+and music theory. And hopefully at the end, we'll have something
+worth listening to.
+
+There are extended notes, references, and links at
+<https://zck.org/emacsconf2020>.
+
+The source can be found at <https://hg.sr.ht/~zck/zmusic/>.
+
+<!-- from the pad --->
+
+- Actual start and end time (EST): Start 2020-11-29T16:29; Stop 2020-11-29T16:46
+
+# Questions
+
+## Q9: What were some of the challenges with writing a special-mode for Emacs? I'm interested in getting into this in the future, but I'm not really sure where to start.
+I used define-derived-mode
+(<https://www.gnu.org/software/emacs/manual/html_node/elisp/Derived-Modes.html>)
+to make this mode. It's really useful! For more information, I
+recorded a talk about making major modes
+(<https://www.youtube.com/watch?v=gk39mp8Vy4M>) a few years ago, at an
+EmacsNYC (<https://emacsnyc.org/>) meeting.
+
+- That'd be awesome, thanks! Will do.
+
+## Q8: Any MIDI mapping possibilities?
+Should be! Would just need to change the low-level.
+
+## Q7: Do you think would be possible to add a set of recorded sounds in order to use those?
+Yes! Part of zmusic is tooling to make wave files, so it should be
+possible to slice-and-dice input data, and output valid wave files.
+
+## Q6: Have you written any actual songs (in RRRM/WAVEing)? Can you play one?
+Nothing super or well put together as of now.
+
+## Q5: Are there any open source musical instrument sample libraries that could be used? E.g. "play A 440 on Piano sample 1" to provide better quality notes than built-in tones
+Experimentation would be fun. However, the nice part about Emacs is
+that it doesn't have any external dependencies, you only need a way to
+play WAVes.
+
+## Q4: What is your musical background? Do you play any instruments?
+Random instruments, started with recorder, played cello for a long
+time, now playing guitar.
+
+## Q3: Any chance for an Emacs tracker/mod player? (plays several samples arranged in the same top-down fashion with effects applied to them for chiptune and keygen music)
+I don't really know what a tracker/mod player is.
+
+## Q2: Will you play us another song? (RIP ears — who needs 'em, this is awesome! it is!)
+UPDATE: can confirm, it was easy to play a song myself :-) Very nice!
+
+However git clone <https://hg.sr.ht/~zck/zmusic> didn't work, I wonder if I'm doing it wrong
+
+- Had to browse to <https://hg.sr.ht/~zck/zmusic/browse/zmusic.el> and copy/paste.
+- It's mercurial! (I have Opinions about version control systems). Try
+ `hg clone` instead, or copy/paste from the link directly.
+- BAM! hg clone works fine.
+ - Hooray!
+
+## Q1: Why do you go top-to-bottom for time progression and left-to-right for low-to-high in stead of doing it pivoted? (e.g. higher is higher tone, left-to-right is time progression). This is awesome by the way!
+The initial app (the inspiration) worked this way. It is definitely
+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
new file mode 100644
index 00000000..af52e80e
--- /dev/null
+++ b/2020/info/38.md
@@ -0,0 +1,115 @@
+# Emacs development update
+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 (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:
+ 2020-11-29T09.17.51
+
+# Questions
+
+## There is xwidget webkit based browser built in Emacs but this is not trivial to install it, it is slow and many pages do not work at all. On the other hand, there are standalone Emacs like browsers e.g. "Nyxt" and "Qutebrowser" (This one I use and love, in theory this is Vim like browser but can be configured to be Emacs like). Having built in high performance browser (not dependent on EXWM) would be game changing feature for Emacs. Are there any plans to make such browser within the roadmap of Emacs development or maybe that would make sense to work together with either Nyxt or Qutebrowser communities to integrate their browsers natively in Emacs?
+
+## (karthink on IRC): Can't native compilation happen asynchronously after installing Emacs? (Including for files in site-lisp)
+
+# Notes
+- Cairo enabled by default in Emacs 28.
+ - Cairo-URL: <https://www.cairographics.org/>
+- Native compilation will land soon (currently in another branch,
+ needs libgccjit). About 2.5 times faster(?)
+ - Downtime of native compilation: long time to compile Emacs.
+ - Native compilation products specific to the machines.
+- Emacs 27.2 will be released soon.
+- Emacs 28 will have better emoji support 🎉 (within C code). No
+ timeline for 28 currently.
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt -->
+
+<a name="transcript"></a>
+# Transcript
+
+Hello EmacsConf! This is John Wiegley, I'm one of the co-maintainers
+of Emacs along with Eli Zaretskii and Lars Ingebrigtsen, and I wanted
+to give you a technical update on what has been happening with the
+Emacs in the last year. So, specifically we have a few notes that
+I've gotten from a call with Eli, he's been in charge of directing
+most of the technical contributions on the mailing list and monitoring
+all the patches. So, I'm more here just as a messenger.
+
+(00:33) He says that we have good progress and support for Cairo, this
+is going to be enabled by default in Emacs 28, and Cairo plus HarfBuzz
+is going to be the preferred rendering combination. So, Cairo support
+is not new, but in the past there were a lot of bugs in the code, and
+so it was made experimental. Most of those bugs have been fixed
+recently, and now it becomes the default in the next major version,
+which will enable several good features such as color emojis, if
+you're looking forward to those. Xft, as a result is deprecated. There
+are bugs not getting fixed in that code, it doesn't appear to be very
+well maintained. It was the most advanced font backend in Emacs before
+Cairo became dependable. So, now that we have a more a better
+maintained and available solution in Cairo, we're going to go from
+that, go from Xft to that.
+
+(01:21) Native compilation in Lisp will also be landing soon. It's
+currently on a branch, but there are several people using it, they
+say, they're very impressed. It does require live GCC JIT to be
+installed for it to work, and this means you have to have GCC 10
+installed. Execution of Emacs Lisp with native compilation on is about
+2.5 times faster than the bytecode interpreter, we don't yet have any
+measurements on memory or how it affects resources besides CPU, so, we
+do look forward to having more numbers and analysis to see what the
+real impact of that is going to be, also, it may vary in compute
+advantage based on the type of workload that you're performing. A
+downside to the native compilation at the moment is that, it takes a
+long time to compile even when you're doing a 16 core build of Emacs,
+it can still take 15 minutes to compile Emacs and all of its Lisp code
+with this enabled. Also, this is going to have to happen on every
+user's machine because we cannot distribute the native compilation
+products, they are specific to the processor that you might be running
+on. So, the Emacs distribution will remain much as it is now, but if
+you want to have the benefits of natively compiled core Lisp files,
+you're going to have to spend that time and have GCC 10 available to
+get that compilation support.
+
+(02:45) The GTK only build is being prepared for merging. What this
+does is, it throws away most of the other tool kits that Emacs was
+using and relies only on GTK, making Emacs much more of a GTK
+application than it has been. The main issue here is that we were
+abusing GTK in some ways that weren't really meant, and now we're
+going to be more of a first club…, GTK will be more of a first class
+citizen in the approach and the ways that we use it, and be using it
+in the ways that the GTK developers intended.
+
+(03:21) There is going to be much more support for xt-mouse. So,
+xt-mouse allows you to use your mouse inside of a terminal window,
+which you could do before, but there were certain aspects such as
+menus that weren't supported. So, instead of having kind of partial
+support for mouse inside of an XTerm, with xt-mouse, you get full
+support. This is going to allow changes in the way that things can be
+bound, the ways that key bindings can…, the mouse events can be mapped
+to key bindings while in XTerms, and yeah, little by little this
+support is being extended even further, so we look forward to seeing
+that develop in the near term. Once this is merged by the way, also
+then Emacs will have mouse support in every one of its available
+configurations, which has not been true until now.
+
+(04:12) Emacs 27 will be soon releasing 27.2, and the pretest for that
+should begin sometime soon after EmacsConf is done.
+
+(04:20) And finally Emacs 28 is going to get better emoji support,
+right now emojis are registered internally within Emacs as symbols
+which works in some ways but does not support some of the special
+features of emojis such as different skin tones for the hand emoji or
+face emojis. In Emacs 28, emojis are going to have their own support
+within the C code, and then this is going to allow those types of
+variations and other emoji specific font setups.
+
+(04:51) So, that is everything for Emacs in the future, I don't have a
+timeline for you on when 28 will be available, but 27 is going to keep
+improving until we're ready to get there. So, have fun with the rest
+of EmacsConf, and I hope to see you there, Bye.
+
+<!-- /transcript -->
diff --git a/2020/info/39.md b/2020/info/39.md
new file mode 100644
index 00000000..32b06cb7
--- /dev/null
+++ b/2020/info/39.md
@@ -0,0 +1,809 @@
+# NonGNU ELPA
+Richard Stallman
+
+[[!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 (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 --->
+
+- Actual start and end time (EST): Start: 2020-11-29T11.09.04; Q&A:
+ 2020-11-29T11.15.59; End: 2020-11-29T12.04.31
+
+# Questions
+(speaker can answer in any order or choose which ones to respond to).
+
+## Q30: Would you mind sharing your Emacs configuration files?
+[RMS] Configuration files are personal and will not be shared.
+
+## Q29: Have you ever looked into Magit?
+[RMS] No, but I might when it gets merged into Emacs.
+
+RMS mentioned he heard it's being worked on and it indeed is, tarsius
+wrote about the progress on that on emacs-devel some time ago.
+
+## Q28: Are there any more interesting projects you have in mind over and above NonGNU ELPA and look for people to contribute?
+
+
+## Q27: Is interfacing with non-free hardware enablement libraries like OpenGL or Vulkan with free code considered a "big compromise" ? (those libraries are for hardware accelerated graphics, if you aren't familiar)
+
+
+## Q26: How often do you personally use Emacs?
+Most of the day. Occasionally uses LibreOffice and media
+players. Occasionally even SSH into a machine that runs Emacs on it.
+
+Read PDF files a lot. Would be nice to read and edit them in Emacs.
+
+(ann: pdf-tools might help.)
+
+Uses [Xournal](http://xournal.sourceforge.net/) to annotate PDFs.
+
+## Q25: What is your opinion on higher education, especially given the current situation with COVID-19 where students are required to use non-free software to comply with their courses?
+He'd resist. However, he admits that he is in a position where he can
+resist, especially as a Free Software advocator.
+
+<https://www.gnu.org/philosophy/saying-no-even-once.html>
+
+However, there are a lot of points in-between saying "no" all the time
+and never saying "no" at all. You can still advocate Free Software and
+state your reluctance.
+
+Exactly as a student that is tho only one in the department that uses
+GNU/Linux, if something doesn't work its my fault for using Fedora
+(even when Windows install doesnt work either) and I am on my own.
+
+## Q24: Is there any plan to moving more packages from core emacs into ELPA? Would you be opposed to it? For example: newsticker, libraries with niche appeal.
+
+## Q23: How do you see the future of GNU Emacs ? (btw, thank you !)
+[RMS] I don't see the future.
+
+"From past experiences, there will be challenges."
+
+## Q22: If you knew that you would get hit by a bus tomorrow, say because of a fortune-teller, what would you leave behind in terms of advice for stewardship of Emacs and its future?
+Focus on keeping the community strong in defending freedom.
+
+If given the choice to have more people developing the software or
+defending the software, choose the latter.
+
+Guard your soul carefully. :P
+
+(The question could be rephrased with, say a brain tumor or
+something. Not to be morbid! just wondering if you had such
+thoughts. about guidance or even just "what do you want your legacy to
+be defined as?")
+
+## Q21: Which are your preferred packages that you usually use?
+
+## Q20: What tools from pre-UNIX days do you miss?
+
+DDT as login shell (!) (<- didn't he say GDB? don't think so. gdb is
+not pre-UNIX as it's GNU) NO. DDT was (I think) a TOPS20 thing.
+
+- What is DDT? Dynamic Debugging
+ Tool. <https://en.wikipedia.org/wiki/Dynamic_debugging_technique> (I
+ guess)
+ <https://www.livingcomputers.org/UI/UserDocs/TOPS-20-v7-1/3_TOPS-20_DDT_(Debugger)_Manual.pdf>
+
+## Q19: Magic wand time: what would you change about free-software? (aside "yay, we won") [ETA: magic wand="make a wish about what you want to see happen, have happended differently, etc."]
+- Don't give up! 20yrs is nothing! We'll get 'em yet.💪
+- What is Magic wand time? Nah, if you can use the magic to change
+ anything.
+- Show everyone why most software needs to be copylefted, so that our
+ community does not need to use software produced by proprietary
+ software developers.
+
+## Q18: What do you recommend to a recent graduate who wants to get his first job but can't find one that deals with free-software and every job or interview he gets it's non-free software related?
+Very sad thing. I would get a different kind of job. I would live
+cheaply (more flexibility).
+
+## Q17: You've been a very important part of the Free Software movement, some argue the most important part. I very much appreciate that! Thank you. I think it's necessary to encourage more diversity within Emacs, however, that's difficult to do with the instances of sexual harassment that have come out. Are you or do you plan to work on addressing those situations and preventing further situations going forward?
+[Not going to be answered. (Everyone, please also remember CoC)].
+
+I will forgive them if they stop bullying.
+
+Emacs is being extended in Emacs Lisp, and implementing something else
+will be hard to nearly impossible, though nice.
+
+- Note from RMS: "If someone who has condemned me unjustly takes it
+ back, that will make it safe for me to empathize with any feelings
+ of hurt that pers might have felt as a result of the
+ misunderstanding and I will be very glad to show compassion."
+
+## Q16: How is the current state of the work in progress Pagure Git repository? Is it going to have the main Emacs repository on it?
+That's more of an FSF project (the FSF forge project). There is
+ongoing work on it by the FSF tech team. Also agreement to possibly
+run another VM of the forge software for the GNU project.
+
+## Q14: Which is your favorite programming language ? if Lisp, which variant?
+Don't exactly have a favourite variant.
+
+Emacs-Lisp was originally used in an environment with only a .5MB user
+memory environment. That also contributed to the design of Elisp.
+
+## Q13: Is it ok to use the AGPL for Emacs packages?
+Yes.
+
+## Q12: Won't the NonGNU ELPA link to non-free sites like GitHub? This does: <https://elpa.gnu.org/nongnu/caml.html>
+- Same for GNU ELPA <https://elpa.gnu.org/packages/company.html>
+
+Mistake to talk about a non-free site. A site is not a program. It
+also depends on whether the JavaScript is non-free. See
+<https://www.gnu.org/philosophy/free-sw.en.html> for a description of
+what Free Software is.
+
+## Q11: Who gets to make the final decision regarding NonGNU ELPA? Is this a community decision or something that you get the last word on?
+The Emacs maintainers will be in charge of this.
+
+## Q10: Which distro of GNU/Linux do you use? Guix? or something else?
+Trisquel <https://trisquel.info/> <https://en.wikipedia.org/wiki/Trisquel>
+
+## Q9: Are there any plans to implement security considerations in NonGNU Elpa? Required code signing or other?
+Probably should. Emacs maintainers verifying can take care of the
+security. With automatic copying, we'll need to make sure we're
+fetching the packages securely
+
+## Q8: Do you / have you used Vi(m) or evil mode?
+No.
+
+## Q7: When you wrote that you could add a package to NonGNU ELPA, are you implying that you would add packages with or without package maintainers knowledge?
+Yes. Of course! The packages are free software. Everyone is entitled
+to redistribute them. That's the idea behind free software.
+
+The idea, that packages in a package archives must only be mirrors
+contradicts(?) the idea of free software.
+
+If a package is being maintained by developers cooperating with NonGNU
+ELPA, then they're (the NonELPA maintainers) are fine with it, as
+there is enough to do.
+
+## Q6: Why do you insist on using 'per' and 'pers' when it's clear the LBGTQIA+ community is generally not happy with that language?
+Not happy with using "they" as singular, causes gratuitous
+confusion. Do not accept the demands of other people re: changing my
+country grammar.
+<https://stallman.org/articles/genderless-pronouns.html> - not a GNU
+Project policy, personal ideas on the subject.
+
+If you feel offended: contact RMS privately and explain your reasons.
+
+## Q5: Any thoughts of packages being added as <https://en.wikipedia.org/wiki/Post_open_source> (a school of thought discarding licenses altogether) into ELPA ?
+
+Not familiar with the URL, unlikely to have much in
+common. Disregarding licenses - basically asking to lose. Not going to
+disregard the question of whether the software we recommend to people
+is free software or not. That's basically blindfolding yourself to the
+legal issues. If you want to contribute to the free world, put free
+licenses on your code
+
+- <https://gnu.org/licenses>
+- <https://www.gnu.org/licenses/license-recommendations.html>
+- <https://www.gnu.org/licenses/license-list.en.html>
+
+## Q4: Is it possible to work with the MELPA team to integrate that into Emacs in a better way?
+No. The goal doesn't make sense. MELPA, the way it's done, doesn't
+belong within Emacs. (Copyright assignments unfeasible). Could MELPA
+be merged with NonGNU ELPA? MELPA doesn't modify packages, puts
+packages in with only a little bit of checking. There are a lot of
+packages in MELPA that we'd like to get into NonGNU ELPA. They've got
+to be looked at one by one. If MELPA contributors want to get
+involved, that would be great. Haven't tried asking them, still
+getting things set up.
+
+## Q3: I don't quite get the benefits of a NonGNU ELPA with respect to other archives such as MELPA. Can you please give use some more details on what you have in mind? Are you seeking for control?
+I hope that people now see the benefits.
+
+## Q2: Does NonGNU ELPA already exist? Or is this a sort of "plan" for the future?
+In between. The creation of it has started. There's an archive and you
+can download packages. There's a repository to put it in. It's not
+supposed to be like ELPA where there's one repo for everything. Some
+packages will make an arrangement with the developers who will do
+things as things should be done, and their code will be copied over
+automatically (or manually with verification). In other cases, we'll
+need to have our own repo for particular packages. Still working out
+the procedures, how to make the arrangements with developers, etc.
+
+
+## Q1: What is an example of a package currently in a non-ELPA repo that does not work well with Emacs? Since integration with Emacs is described as a problem.
+s.el - that made me aware that there's an issue here. Beautifully
+written package, very useful for people. There's just one thing wrong
+with it - it gobbled up the namespace of symbols starting with s-. I
+was shocked to discover that someone had used such a short prefix
+without coordinating. Any attempt to use s- for anything else =
+problem. New symbol renaming feature - the idea is that you rename
+that file to something else, and then you define symbol renaming to
+run the same code without interfering with global namespace. &#x2026;
+We can put packages in NonGNU ELPA and make changes to them to help
+them fit in.
+
+# Notes
+- ELPA was created to make it possible to release Emacs packages
+ independently of Emacs releases.
+- Package archives in general lead to a boost of package
+ development/generation. However, those packages were created without
+ notifying the GNU Emacs team/GNU ELPA managers.
+- NonGNU ELPA will not require copyright assignments, but must be free
+ (as in freedom) software.
+- GNU ELPA is one big Git repository, and giving someone access grants
+ them access to everything.
+- Note from RMS: "If someone who has condemned me unjustly takes it
+ back, that will make it safe for me to empathize with any feelings
+ of hurt that pers might have felt as a result of the
+ misunderstanding and I will be very glad to show compassion."
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt -->
+
+<a name="transcript"></a>
+# Transcript
+
+[[!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 -->
+
+
+<!-- transcript: 2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt -->
+
+<a name="transcript-questions"></a>
+# Transcript: Q&A
+
+Okay. So, the first question is, "What is an example of a package
+currently in a non-ELPA repo that does not work well with Emacs?"
+Well, one of them is s.el, and this is what made me aware that there
+was an issue here that caused problems. Well, s.el is a beautifully
+written package that appears to be very useful for people. And there's
+just one thing wrong with it. It gobbled up the name space of symbols
+starting with s dash. And I was shocked to discover that somebody who
+had not coordinated with the Emacs developers at all, had implemented
+a package using such a short prefix, which isn't the right way to do
+things. Oh, by the way, the questions have moved off the screen, this
+is no good. I can continue answering this one, but I'll be stuck when
+this one is over. Anyway, so… I was told that there was nothing I
+could do about it, that so many users, packages were using s.el and
+thus essentially using that definition of the s-* symbols, that any
+attempt to use them publicly or privately for anything else would lead
+to horrible problems. And I don't like that. I decided, I wanted to
+do something a) so that wouldn't happen again and b) to make it
+unhappen in that case. Well, the way to make it unhappen in that case
+is with a new symbol renaming feature. The idea is, you rename that
+file to something else, and then you define an s.el that sets up
+symbol renaming and then loads the something else. So, it actually
+runs the same code, it just doesn't globally define the symbols s dash
+whatever, but they appear to work for the programs that explicitly
+require s.el or the s package. So, this gets the same behavior for all
+the programs that are using that library and doesn't interfere with
+the global name space at all. However, to do that we need to have a
+package s.el, that isn't the same totally. A short one file that's
+totally different. Plus, we've got to have the file that normally is
+called s.el available, but under another name. Well, how are we going
+to do that? We can't put this into Emacs in a nice way that won't make
+the maintainer angry. (or the developer of that package.) But we can
+do it with NonGNU ELPA. We can put those two things into NonGNU ELPA
+without any difficulty. And this shows one of the advantages. We can
+put files, we can put packages into NonGNU ELPA and make changes in
+them. Now, in general we wouldn't go to the effort of making big
+changes. That's just too much to do unless something's really
+important. But small changes that help things fit in are easy to
+do. Okay, oh, so basically the recording didn't get anything until
+now. I just saw a note pop up, "this session is now being recorded". I
+hope it's been recorded all along. It would be a shame to spoil… Oh,
+good okay. So, that's one of the issues.
+
+(04:27) "Does NonGNU ELPA already exist or is this a sort of "plan"?"
+I don't know why you have to put scare quotes around the word plan.
+It's sort of in between. The creation of it is started. You will find
+that there is an archive that it's possible to download packages from,
+and there is a repository to put them in, but that's not the way it's
+really supposed to work. This is not supposed to be like the GNU ELPA,
+where there's one repo for all the packages and thus anyone who wants
+to edit any of them, anyone that we want to have edit any of them, has
+got to have access to the whole thing for one thing. Some packages
+will make an arrangement with the developers, and they'll assure us
+that they will do things as things should be done, and then we'll have
+their repo copied automatically or in other cases, say, copied
+manually with a little checking every so often. In other cases we'll
+need to have our own repo for a particular package. But we shouldn't
+have a single repo for all the packages. We should have a repo for
+each package, so that the people working on that can get access to
+modify it. This has to be finished setting up, and we're still working
+out the procedures. For instance, for making the arrangements with the
+developers of a package so that we can, we hope, entrust its
+development to them and rely on them directly. And there may be more
+that needs to be worked on. Oh! There's so many questions.
+
+(06:36) Well, I hope you… The third question is, what are the
+benefits? I hope that people now see the benefits. I've described
+them.
+
+(06:46) Next question, "Is it possible to work with the MELPA team to
+integrate that into Emacs?" No, because the goal doesn't make sense.
+MELPA the way it's done, does not belong inside Emacs in any
+sense. Well, first of all, it can't literally be inside Emacs. We
+don't have copyright assignments for that code and to get it would be
+unfeasible, but we're not asking for copyright assignments for NonGNU
+ELPA so that's you might wonder could MELPA be merged with NonGNU
+ELPA? The problem is, MELPA doesn't modify the packages. It's just a
+place to find releases of packages wherever they happen to be, and
+they put packages in with only a little bit of checking. So, no. There
+are a lot of packages that are in MELPA that we'd like to get into
+NonGNU ELPA. I don't know the names of most of them, but I expect most
+of them would be fine to have. But they've got to be looked at one by
+one. There are some rules for NonGNU ELPA, and the only way to check
+them is to check them on one package at a time, and that's going to
+take effort. Now, with the people who work on MELPA want to get
+involved of this, that would be great. I haven't tried asking
+them. First we've got to get this thing set up. I doubt they would
+want to, but if they said yes, that would be wonderful.
+
+(08:44) "Any thoughts of packages being added…" I'm afraid. Any
+thoughts of packages being added as some URL I don't know anything
+about, but it talks about open source, which means I'm very unlikely
+to have much in common with whatever they say about either licensing
+or what's right and wrong. But this seems to be something about
+disregarding licenses altogether. Well, that is basically asking to
+lose. There are reasons why we developed GNU licenses to release
+software, why we have criteria for which licenses make a program free
+software. If the program doesn't carry a license or if it carries a
+non-free license, that program is not free software. Now, you can
+maybe get away with disregarding that fact unless somebody, an author
+or publisher stops you. But we're not going to take… we're not
+basically going to disregard the question of whether the software we
+recommend to people, really is free software or not. That's basically
+blindfolding yourself to the legal situation of the software you're
+distributing, it's a terrible idea. If they disregard our licenses
+they will hear from us about it. And if you want to contribute to the
+free world put free licenses on your code and choose good ones. To get
+this information, look at gnu.org/licenses, and one page that's
+important is license-recommendations.html, that's where we advise you
+on what license we would recommend you use depending on the
+circumstances. There's also license-list.html which describes a lot of
+licenses and says which ones are free, which ones are compatible with
+the GNU GPL. It's really important to use only GPL compatible licenses
+so that the various programs can be combined together or linked. You
+can also get other information about GNU licenses and the reasons why
+they are written the way they are. Oh sorry, I don't see the next
+question.
+
+(12:03) "Why do I insist on using per and pers?" I'm not happy with
+using they, which is a plural pronoun with a singular antecedent.
+It's bad because it causes confusion that is completely gratuitous.
+Many sentences become a lot of work to parse and understand if you add
+that ambiguity, that source of regular ambiguity. Now, I do not accept
+the demands of other people in regard to changing my grammar. You can
+try to convince me, but no one is entitled to give me orders about
+that or state their desires and expect obedience, not for me and not
+from you or anyone. We are all equally entitled to decide how we will
+speak and how we won't speak. I've spelled out all of these points in
+a file called stallman.org/articles/genderless-pronouns.html
+(corrected), of course, this is not a GNU project policy, it's my own
+personal ideas on the subject. If any of you feels offended by my
+referring to you with a singular gender-neutral pronoun, feel free to
+contact me privately and explain to me your reasons. I will pay
+attention to them, I'll think about them assuming that they're not
+something I've already considered and decided to dismiss before. But
+you must not speak to me as if I had no business not obeying you
+because that's rude, and it is not likely to convince me to change my
+mind. I believe it is not actually of stating offense to anyone, and
+the fact that somebody disagrees with me does not mean I'm wrong, but
+I always can be wrong.
+
+(15:00) "When you wrote that you could add a package to NonGNU ELPA,
+are you implying that you would add packages with or without package
+maintainer's knowledge?" Of course, the packages we would distribute
+in this way are free software. Everyone is entitled to redistribute
+them and everyone is also entitled to modify them and redistribute
+them, that's part of the meaning of free software. I have been unable
+to understand how there came to be an idea that those who redistribute
+packages have some obligation to be mere mirrors and not modify things
+themselves. Well, if a package is being maintained by developers who
+are cooperating with us, we'll normally just leave it to them. After
+all, we have lots of other work to do. They are clearly experts on the
+packages they've developed, let's leave it to them if they make that
+sort of arrangement with us. But that's up to them, we can't insist
+that anyone make an arrangement with us, but since those programs are
+free software, anyone is free to redistribute them, and we will do
+that.
+
+(16:41) "Have you ever used vi or vim or evil mode?" No.
+
+(16:52) "Are there any plans to implement security considerations in
+NonGNU ELPA?" We probably should, and this will have to be
+implemented, but at the moment developer Emacs maintainers will copy
+packages into it, and so as long as they are verifying the packages
+and getting the packages from the right place that will take care of
+the security. Once there is… When with automatic copying in, will have
+to do something to make sure that we're fetching the packages
+securely. Some of you might be interested in helping to design and
+implement this system. "What distro do I use?"
+
+(17:52) Well, which distro of GNU/Linux do I use? I use Trisquel, I
+haven't tried most of the free distros and the reason is, it's not
+crucial that I do so, we don't need me to rate the various free
+distros on practical questions because anyone can do that as well as I
+can. And so you can tell people what you think of using them. For me,
+what's important to me is to inform people of the difference between
+the free distros and the non-free distros, making sure people are
+aware that if you install a non-free GNU/Linux distro, you'll get a
+free operating system with non-free stuff in various quantities added,
+thus you will not reach freedom, although you'll make a lot of
+progress compared with using for instance, Windows or macOS or
+whatever vicious thing it might be. I'd like people to be aware of
+this next step towards getting freedom for yourself and your own
+computing, so that you can do that if you want to.
+
+(19:29) "Who gets to make the final decision regarding NonGNU ELPA?"
+The Emacs maintainers are going to be in charge of this, because it's
+not just a technical decision it has with only technical consequences
+but in general unless there's some severe problem with the package we
+will want to put it in, and I expect most packages won't have a
+problem, and we can just put them in when we get to them.
+
+(20:11) "Won't the ELPA link to non-free sites like GitHub?" It's a
+mistake to talk about a non-free site, because a site is not a
+program. A program is either free or non-free, and we have clearly
+stated criteria for that in gnu.org/philosophy/free-sw.html we have
+the free software definition, but a site, well, there're programs on
+it, but it doesn't make sense to ask whether the site is free or not,
+it's too simplistic a question to have a meaningful answer. Now, one
+thing you can ask about is, does the site send JavaScript to the
+user's machine, to the user's browser and if so, is that JavaScript
+non-free. Well, GitHub does send non-free JavaScript for some
+operations, so we consider it unsatisfactory as a repository, but that
+doesn't mean linking to it is a bad thing to do regardless of what the
+purpose is. For instance, if the purpose is to refer to some things
+that you can access without running the non-free JavaScript, then it's
+okay for that purpose. So, if now that you understand the details of
+this issue, you think that there is a problem with the link to caml…,
+there's, sorry, a link in caml.html, well, report it to bug-gnu-emacs,
+report it as an Emacs bug, but do think about the criteria I've just
+said because maybe it's not a problem.
+
+(22:18) "Is it okay to use the GNU Affero GPL for Emacs packages?"
+Yes it is.
+
+(22:28) "Which is your favorite programming language? If Lisp, which
+variant?" Well, I don't exactly have a favorite variant, but when I
+designed Emacs Lisp, I did the best thing I could think of at the
+time, subject to the need to keep it small. For the first few years it
+was important for GNU Emacs to run in a machine which could only give
+it half a meg of user space. So, there are a lot of constructs that
+clearly were desirable to include that I left out because we could
+make it work without them and then a lot of those have been added
+since because it's been a long time since we needed to keep Emacs so
+rigorously small.
+
+(23:40) Someone is asking about the FSF's repository project. Well, we
+agreed that there would be another virtual machine running one of
+those for the GNU project, but that's as far as the discussion went.
+
+(24:15) Question 17 is extremely insulting! I have not engaged in
+sexual harassment, don't expect me to plead guilty to such a nasty
+claim. People have been accusing me of many things, some of which are
+basically mole hills and some of which are false. So, I'm not going to
+give them anything, I have been bullied in a horrible way, that was
+wrong. I would like the bullies to apologize to me, and when I see
+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
+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
+might be a good thing, that would be a small amount of diversity, but
+it's not that important. What I think is really important for
+developing Emacs is to make it do word processing. I sometimes use
+LibreOffice, and yeah I can make it do things. It has features for
+WYSIWYG which are very nice, but it's in other regards, it's not
+Emacs, and it doesn't have the abilities of Emacs, and it should. So,
+I urge people to work on extending Emacs in that direction adding the
+features that a word processor has to have.
+
+(27:13) The last question I can answer is 18. Yes, it's a very sad
+thing how many companies insist on using non-free software. Well, I
+would get a different kind of job, that's a decision I made many years
+ago early in the GNU project, I decided, I would not… first I would
+not get a job developing non-free software. And later on I decided,
+once I could stop using non-free software, that is once we had a
+GNU/Linux system that we could switch over to and… Oh, wait. I thought
+magic wand time meant it was time to stop, but now I rather ask the
+question. So, what do you do, well, if I were you, I'd probably not
+work for any of those companies. If I needed to make money, I'd get a
+job, but I get some other kind of job that didn't involve using
+software or that let me choose the software I would use. But I would
+live cheaply, you know, the less you spend, the less you need to make
+and the more time you can take away from your paid work and the more
+flexibility you have in which paid work you can do. Being in a
+position to say no to avoid being desperate to say yes strengthens
+your position, and you need that. One way you can help do that is by
+not having children. Now, that is a tangent, but it can't be denied
+that raising children is very expensive, I have heard many people say
+that they are uncomfortable with their jobs, but they have to do those
+jobs to make enough money to support their children. Well, think
+about that, be aware that's likely to happen to you, before you make
+that decision.
+
+(30:06) "What would I change about free software?" Well, since this is
+magic, I would magically find a way of showing everyone why most free
+software needs to be copy lefted, so that our community would not
+basically submit to abuse by proprietary software developers. Of
+course, I could go further if I could magically recruit a hundred
+thousand good programmers to do lots of work improving free software.
+We might… Well, if we could do this 20 years ago, we might have wiped
+out non-free systems, and then we wouldn't have had horrible things
+like World Wide Web DRM, that no one has the courage to resist if
+they're desperately trying to get money for anything, and if they need
+approval of companies, of the big companies that push for DRM, then
+they don't dare even resist as much as they can resist. And look what
+happened to the World Wide Web consortium, they surrendered blatantly
+and ignominiously by endorsing the DRM system. So what can you do? I
+don't have a magic wand, I'm a human being with the capabilities I
+have, but the advantage of great firmness in campaigning for free
+software, and this enables me to do things that no one else will do.
+
+(32:27) "What tools from pre-UNIX days do you miss?" Well, I don't. I
+don't think about them with missing them actually. It was sort of nice
+to have ddt as your login shell. So, in using modern terminology,
+because that meant at any time you could stop a program, load its
+debugging symbols, and start examining the data in the
+instructions. You could debug it that way, and then you could even
+patch in instructions to continue running that job with the bug fixed,
+in fact, you could even do this with the system kernel, so that your
+jobs wouldn't get lost. I did that quite a few times, of course,
+sometimes I saw what was wrong, and I just had to fix a piece of data,
+but sometimes it took me a long time to figure out how to get the
+system to keep on going. But with the work I had done, I didn't want
+to lose that work, and, so one of the first features I put into GNU
+Emacs was auto save.
+
+(33:47) I'm not going to try to figure out which packages I actually
+used.
+
+(33:54) "If I knew, I would get hit by a bus tomorrow, say because of
+a fortune-teller." No, a fortune-teller doesn't give you any
+knowledge, it's just superstitious hand waving. So, assuming that I
+talked… that I got a reading from a fortune-teller, which is
+implausible enough to begin with, that wouldn't give me any knowledge
+about what was going to happen to me. Oh, by the way fortune-tellers
+generally play back to you facts that they've discovered about you
+together with cold reading, which means, they say things calculated to
+make it appear that they know more than they do or things that sound
+wise to anyone, so you can say the same thing to, say, 100 people and
+80 or 90 of them will say, "boy that was really accurate". But what if
+for some reason… "What advice would I give for stewardship of Emacs?"
+Well, basically focus on keeping the community strong in defending
+freedom, if you have a choice between keeping the community strong in
+defending freedom and getting more people to participate in the
+development, you've got to choose the freedom. It is very easy for
+free software projects to subordinate freedom to other criteria, and
+once that happens, it's easy for those who don't care much about
+freedom, such as, sometimes companies that might offer you some money
+to purchase your soul, not that there are really things that exist
+called souls, it's a metaphor, but it's an important metaphor for
+something important. People in the community have to be thinking about
+freedom when they make decisions about what is wise to do. The
+decision to set up NonGNU ELPA has a drawback, it was a compromise.
+Now, a lot of people will tell you that I am uncompromising and say
+that, that's a flaw. Well, they're wrong. I make little compromises
+very often, and occasionally I make a medium-sized compromise. The
+compromise is, in the past we wanted to get copyright assignments for
+the packages in GNU ELPA, so that we could move them into core Emacs,
+and of course, sometimes we move packages in the other direction, that
+way where we distribute a given package, is something we can decide
+purely technically. And however make insisting on getting copyright
+assignments for all the packages in GNU ELPA meant that we had to say
+"sorry, no, we will not install that package in GNU ELPA, unless the
+authors sign copyright assignments". And sometimes that's a lot of
+trouble. Well, NonGNU ELPA won't require copyright assignments. If
+there's a free package, we can make whatever changes, presumably
+small, otherwise, we would probably say we don't have time, and then
+put it in. But it does have the drawback that, in general we won't be
+able to move those packages into core Emacs without getting the legal
+papers then that we didn't get before.
+
+(38:20) "How do you see the future of GNU Emacs?" I don't see the
+future. I used to say that my crystal ball is cloudy today,
+unfortunately, that has another meaning which is quite ironic. We
+certainly don't want our lives to be somewhere in a cloud, because
+that clouds remind, and then people start cheating you and taking
+advantage of you, and it's horrible. But I don't see the future, I
+just can be sure from the past that there will be challenges where
+some of the people involved want to make a big compromise that isn't
+worth it, and they may even get the impression that it's up to
+them. Well, actually Emacs has appointed maintainers just as every GNU
+package does, and they are the ones in charge of developing that
+package, and this is for a good reason because the appointed
+maintainers take responsibility to carry out the GNU project policies,
+and most important of all are the ones that make the whole system work
+together, and the ethical standards to respect freedom and defend
+freedom.
+
+(39:59) "Is there any plan to move more packages from core Emacs into
+ELPA?" I don't know whether there is a plan, I suppose if there's a
+plan, we probably would have done it. If there had been a plan, some
+have been moved. I don't see this as a fundamentally important issue,
+it's a matter of what's convenient for the users, and their advantages
+and disadvantages to each choice.
+
+(40:29) "What is your opinion on higher education requiring non-free
+software, for instance…" Well, I wouldn't matriculate in a school
+which did that, unless I saw a way I could refuse. Now, of course, I
+do this because I can get away with it, and therefore my doing it is
+extremely important to show somebody does resist. I don't expect most
+people who support free school, who advocate free software to go that
+far. I published an article in the spring entitled saying no even once
+is helping, saying no to non-free software even once, because the more
+you do it, the more you help, but even doing it a little in a way that
+other people notice, is starting to help. So, please don't think that
+your choices are either be as firm and stubborn as I am or just give
+up and let yourself drift helplessly as if you had no volition. There
+are a lot of points in between there, and you can surely manage to say
+no some of the time and show people an example of saying no some of
+the time, for instance, you could say to people, "You know I hate the
+fact that my school makes me use Zoom, so whenever I'm not being
+forced, I'm not going to use it". Or "I hate the fact that the only
+way I can talk to that group of people is with Zoom, but for anything
+else I will feel better about myself if I don't". See, lots of ways to
+say no some of the time, and yield some of the time, and when you try
+saying no occasionally, you may just develop the ability to say no
+more often. Now, whether you would ever get to be as stubborn as I am?
+I don't know, but what I find is that I like the fact that I've never
+made this kind of compromise. I feel I have a reputation to maintain,
+nobody's forcing me, but I get satisfaction out of maintaining…, out
+of being able to continue to say I will not. And that also can happen
+at various different levels, so, you can get that satisfaction of
+fully maintaining a refusal that applies only to certain areas. (Amin:
+since it's noon already, let's maybe take one or two more questions
+and then break for the lunch break) Okay. (Amin: Thank you).
+
+(44:03) "How often do you personally use Emacs?" is the lowest
+question now. Well, I use it most of the day. I occasionally do use
+other things, in fact, I occasionally edit with LibreOffice, I
+occasionally use media players, I occasionally ssh to a machine and
+type some commands on it, which occasionally includes running Emacs on
+it. I read PDF files a lot, would be nice if you could get those into
+Emacs, so that I could read them with Emacs commands, and I maybe even
+edit them with the Emacs commands when they can be edited. I use
+Xournal sometimes to write on a PDF file. "Are there any more
+interesting projects you have in mind over and above NonGNU ELPA?" I
+can't think of one right now, well, there are things that the GNU
+project needs doing, there are packages that don't have maintainers or
+could use more maintainers. Talk with maintainers@gnu.org, and the
+assistant GNUisances will help you find a package where you can do
+good. Not for beginners though, you got to learn a substantive
+substantial level of capacity to develop and debug programs before you
+can be a maintainer.
+
+(46:00) "Have I ever looked at Magit?" No, I haven't, but I believe
+work is being done to get it put into Emacs, and at that point I'll
+give it a try. I do not want to share my configuration files they're
+personal. How about if we end this now? (Amin: sounds good to me,
+thank you very much Richard for joining in for live questions.) Okay.
+
+<!-- /transcript -->
diff --git a/2020/info/40.md b/2020/info/40.md
new file mode 100644
index 00000000..eaf409ed
--- /dev/null
+++ b/2020/info/40.md
@@ -0,0 +1,20 @@
+# 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 (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 (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)
+ - Peak of 391 viewers of /main.webm and 26 viewers of /main-480p.webm (last year: ~270, so 50% more!)
+ - Etherpad Peak ~130 (110 at 2020-11-28T16.42.14)
+- Videos and other resources will be posted some time over the next few weeks. Mailing list: <https://lists.gnu.org/mailman/listinfo/emacsconf-discuss>
+- Thanks again
+ - the Free Software Foundation, especially the tech team, for support and sharing their BigBlueButton host
+ - Volunteers: bandali, bhavin192, bremner, dto, mplsCorwin, publicvoit, sachac, zaeph
+ - Speakers and participants
+- See you tomorrow!
diff --git a/2020/info/41.md b/2020/info/41.md
new file mode 100644
index 00000000..272be760
--- /dev/null
+++ b/2020/info/41.md
@@ -0,0 +1,27 @@
+# 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 (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!
+- Thanks to:
+ - the Free Software Foundation, especially the tech team, for support and sharing their BigBlueButton host
+ - Volunteers: bandali, bhavin192, bremner, dto, mplsCorwin, publicvoit, sachac, zaeph
+ - Speakers and participants
+- Schedule overview: <https://emacsconf.org/2020/schedule>
+- How to participate
+ - Watch: <https://live.emacsconf.org>
+ - Ask questions / take notes: <https://etherpad.wikimedia.org/p/emacsconf-2020>
+ - Chat: <https://chat.emacsconf.org> (or `chat.freenode.net` in your favorite IRC client)
+ - `#emacsconf` - General discussion
+ - `#emacsconf-accessible` - Community-provided descriptions of what's happening
+ - `#emacsconf-org` - Low-traffic for speaker checkins, anything that organizers need to know about
+ - Want to organize a hallway track/unconference session? Start a room on <https://meet.jit.si> and invite people through `#emacsconf`
+- Mailing list: <https://lists.gnu.org/mailman/listinfo/emacsconf-discuss>
+- Conduct guidelines: <https://emacsconf.org/conduct/>
+
+# Notes from the pad
+
+"We recommend using Jitsi Meet for those 'unconference' talks: https://meet.jit.si/ ". (E.g. if you want to talk to the speaker after their talk).
diff --git a/2020/info/42.md b/2020/info/42.md
new file mode 100644
index 00000000..de11079c
--- /dev/null
+++ b/2020/info/42.md
@@ -0,0 +1,25 @@
+# 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 (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
+ - Peak of TODO viewers of /main.webm and TODO viewers of /main-480p.webm (last year: ~270)
+ - TODO people on the Etherpad
+- Next steps:
+ - Collaborative pad: https://etherpad.wikimedia.org/p/emacsconf-2020
+ - Meta-discussion at the end - add things that worked well, things
+ that can be even better
+ - We'll make a copy and post it to <https://emacsconf.org/2020>
+ - We'll be posting videos and other resources to <https://emacsconf.org/2020> over the next few weeks.
+ - Follow-up questions
+ - If you spoke at the conference, please feel free to add
+ follow-up information to your talk's page or contact an
+ organizer to add things for you
+ - Mailing list for updates: <https://lists.gnu.org/mailman/listinfo/emacsconf-discuss>
+- Thanks again
+ - the Free Software Foundation, especially the tech team, for support and sharing their BigBlueButton host
+ - Volunteers: bandali, bhavin192, bremner, dto, jcorneli, mplsCorwin, publicvoit, sachac, seabass, zaeph
+ - Thank you to everyone!
diff --git a/2020/info/dm-notes.md b/2020/info/dm-notes.md
new file mode 100644
index 00000000..260ceb18
--- /dev/null
+++ b/2020/info/dm-notes.md
@@ -0,0 +1,13 @@
+# Additional Materials
+<!-- additional materials added 20121206 -->
+<table width="100%">
+<tr><td width=63>Kind</td><td width=63>Target</td><td width=63>Size</td><td><i>Description</i></td></tr>
+<tr><td width=63>org, svg</td><td width=63>tar.gz</td><td width=63>25k</td><td><a href="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--notes--erik-elmshauser-corwin-brust.tar.gz">Notes for all talks</a></td></tr>
+<tr><td width=63>demo</td><td width=63>webm</td><td width=63>26m</td><td><a href="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--character--erik-elmshauser-corwin-brust.webm">Character Sheet</a></td></tr>
+<tr><td width=63>demo</td><td width=63>webm</td><td width=63>19m</td><td><a href="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--sketch--erik-elmshauser-corwin-brust.webm">"Sketch" Map and Tile editor</a></td></tr>
+<tr><td width=63>demo</td><td width=63>webm</td><td width=63>16m</td><td><a href="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--battleboard--erik-elmshauser-corwin-brust.webm">Battleboard, damage tracking</a></td></tr>
+<tr><td width=63>demo</td><td width=63>webm</td><td width=63>9m</td><td><a href="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--map--erik-elmshauser-corwin-brust.webm">Game Maps, controlling fog-of-war</a></td></tr>
+<tr><td width=63>demo</td><td width=63>gif</td><td width=63>724m</td><td><a href="https://cdn.dungeon-mode.net/emacsconf/emacsconf-2020-one-big.gif">All demos, no overlays</a></td></tr>
+<tr><td width=63>demo</td><td width=63>json</td><td width=63>274K</td><td><a href="https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--obs-scenes--erik-elmshauser-corwin-brust.json">OBS scenes</a></td></tr>
+<tr><td width=63>elisp</td><td width=63>www</td><td width=63>&nbsp;</td><td><a href="https://gitlab.com/mplscorwin/dotfiles">Corwin's init files</a></td></tr>
+</table>