summaryrefslogtreecommitdiffstats
path: root/2020
diff options
context:
space:
mode:
Diffstat (limited to '2020')
-rw-r--r--2020/Makefile2
-rw-r--r--2020/cfp.md171
-rw-r--r--2020/emacsconf-2020-cfp.org185
-rw-r--r--2020/emacsconf-2020.m3u122
-rw-r--r--2020/ideas.md29
-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
-rw-r--r--2020/organizers-notebook.md914
-rw-r--r--2020/organizers-notebook.org910
-rw-r--r--2020/pad.md2606
-rw-r--r--2020/pad.org2667
-rw-r--r--2020/planning.md21
-rw-r--r--2020/poster.md28
-rw-r--r--2020/prepare.md181
-rw-r--r--2020/present.md187
-rw-r--r--2020/schedule-details.md52
-rw-r--r--2020/schedule-details.txt52
-rw-r--r--2020/schedule.md10
-rw-r--r--2020/schedule.org13
-rw-r--r--2020/schedule/00.md1
-rw-r--r--2020/schedule/01.md1
-rw-r--r--2020/schedule/02.md1
-rw-r--r--2020/schedule/03.md1
-rw-r--r--2020/schedule/04.md1
-rw-r--r--2020/schedule/05.md1
-rw-r--r--2020/schedule/06.md1
-rw-r--r--2020/schedule/07.md1
-rw-r--r--2020/schedule/08.md1
-rw-r--r--2020/schedule/09.md1
-rw-r--r--2020/schedule/10.md1
-rw-r--r--2020/schedule/11.md1
-rw-r--r--2020/schedule/12.md1
-rw-r--r--2020/schedule/13.md1
-rw-r--r--2020/schedule/14.md1
-rw-r--r--2020/schedule/15.md1
-rw-r--r--2020/schedule/16.md1
-rw-r--r--2020/schedule/17.md1
-rw-r--r--2020/schedule/18.md1
-rw-r--r--2020/schedule/19.md1
-rw-r--r--2020/schedule/20.md1
-rw-r--r--2020/schedule/21.md1
-rw-r--r--2020/schedule/22.md1
-rw-r--r--2020/schedule/23.md1
-rw-r--r--2020/schedule/24.md1
-rw-r--r--2020/schedule/25.md1
-rw-r--r--2020/schedule/26.md1
-rw-r--r--2020/schedule/27.md1
-rw-r--r--2020/schedule/28.md1
-rw-r--r--2020/schedule/29.md1
-rw-r--r--2020/schedule/30.md1
-rw-r--r--2020/schedule/31.md1
-rw-r--r--2020/schedule/32.md1
-rw-r--r--2020/schedule/33.md1
-rw-r--r--2020/schedule/34.md1
-rw-r--r--2020/schedule/35.md1
-rw-r--r--2020/schedule/38.md1
-rw-r--r--2020/schedule/39.md1
-rw-r--r--2020/schedule/40.md1
-rw-r--r--2020/schedule/41.md1
-rw-r--r--2020/schedule/42.md1
-rw-r--r--2020/sidebar.md8
-rw-r--r--2020/submissions.md3926
-rw-r--r--2020/submissions.org3255
-rw-r--r--2020/submit.md99
-rw-r--r--2020/subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt604
-rw-r--r--2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.srt503
-rw-r--r--2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt304
-rw-r--r--2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt1758
-rw-r--r--2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt124
-rw-r--r--2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt470
-rw-r--r--2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt559
-rw-r--r--2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt1062
-rw-r--r--2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt719
-rw-r--r--2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt792
-rw-r--r--2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt353
-rw-r--r--2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt1067
-rw-r--r--2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt839
-rw-r--r--2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt385
-rw-r--r--2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt349
-rw-r--r--2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt1066
-rw-r--r--2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt1342
-rw-r--r--2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt968
-rw-r--r--2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt1250
-rw-r--r--2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt1057
-rw-r--r--2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt1674
-rw-r--r--2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt1631
-rw-r--r--2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt1640
-rw-r--r--2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt664
-rw-r--r--2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt1446
-rw-r--r--2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt2848
-rw-r--r--2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt1723
-rw-r--r--2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt1087
-rw-r--r--2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt1235
-rw-r--r--2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt553
-rw-r--r--2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt490
-rw-r--r--2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt769
-rw-r--r--2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt630
-rw-r--r--2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt3187
-rw-r--r--2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt526
-rw-r--r--2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt385
-rw-r--r--2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt859
-rw-r--r--2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt412
-rw-r--r--2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt2164
-rw-r--r--2020/subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt1708
-rw-r--r--2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt1675
-rw-r--r--2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt490
-rw-r--r--2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt730
-rw-r--r--2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt454
-rw-r--r--2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt2707
-rw-r--r--2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt400
-rw-r--r--2020/subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt205
-rw-r--r--2020/subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt1000
-rw-r--r--2020/subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt1036
-rw-r--r--2020/subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt2905
-rw-r--r--2020/subtitles/fix.py9
-rw-r--r--2020/talk-details.md44
-rw-r--r--2020/talks.md10
-rw-r--r--2020/talks/00.md22
-rw-r--r--2020/talks/01.md24
-rw-r--r--2020/talks/02.md24
-rw-r--r--2020/talks/03.md24
-rw-r--r--2020/talks/04.md24
-rw-r--r--2020/talks/05.md24
-rw-r--r--2020/talks/06.md24
-rw-r--r--2020/talks/07.md24
-rw-r--r--2020/talks/08.md24
-rw-r--r--2020/talks/09.md24
-rw-r--r--2020/talks/10.md24
-rw-r--r--2020/talks/11.md24
-rw-r--r--2020/talks/12.md24
-rw-r--r--2020/talks/13.md24
-rw-r--r--2020/talks/14.md24
-rw-r--r--2020/talks/15.md24
-rw-r--r--2020/talks/16.md24
-rw-r--r--2020/talks/17.md25
-rw-r--r--2020/talks/18.md24
-rw-r--r--2020/talks/19.md24
-rw-r--r--2020/talks/20.md24
-rw-r--r--2020/talks/21.md24
-rw-r--r--2020/talks/22.md24
-rw-r--r--2020/talks/23.md24
-rw-r--r--2020/talks/24.md24
-rw-r--r--2020/talks/25.md24
-rw-r--r--2020/talks/26.md24
-rw-r--r--2020/talks/27.md24
-rw-r--r--2020/talks/28.md29
-rw-r--r--2020/talks/29.md24
-rw-r--r--2020/talks/30.md23
-rw-r--r--2020/talks/31.md29
-rw-r--r--2020/talks/32.md29
-rw-r--r--2020/talks/33.md24
-rw-r--r--2020/talks/34.md24
-rw-r--r--2020/talks/35.md24
-rw-r--r--2020/talks/38.md24
-rw-r--r--2020/talks/39.md24
-rw-r--r--2020/talks/40.md24
-rw-r--r--2020/talks/41.md24
-rw-r--r--2020/talks/42.md22
200 files changed, 82323 insertions, 0 deletions
diff --git a/2020/Makefile b/2020/Makefile
new file mode 100644
index 00000000..1a42e852
--- /dev/null
+++ b/2020/Makefile
@@ -0,0 +1,2 @@
+schedule-files:
+ emacsclient --eval '(progn (with-current-buffer (find-file "submissions.org") (org-babel-execute-buffer) (conf/generate-schedule-files)))'
diff --git a/2020/cfp.md b/2020/cfp.md
new file mode 100644
index 00000000..e27f7e2c
--- /dev/null
+++ b/2020/cfp.md
@@ -0,0 +1,171 @@
+[[!meta title="Call for Proposals"]]
+[[!meta copyright="Copyright © 2020 Amin Bandali, Sacha Chua, David Bremner"]]
+
+Update 2020-09-14: Added timezone information (9am to 5pm
+Toronto/EST). Moved CFP end date to October 7, 2020.
+
+**EmacsConf 2020 | November 28 and 29, 2020 | Online Conference**
+
+The Call for Proposals for EmacsConf 2020 is now open, until
+**October 7, 2020**.
+
+After a successful [[EmacsConf 2019|2019]], we are back again this
+year and are once again calling for your participation!
+
+EmacsConf is the conference about the joy of [Emacs][emacs], Emacs
+Lisp, and memorizing key sequences.
+
+We are holding EmacsConf 2020 as a virtual (online) conference again
+this year, especially now, given the current state of the world with
+the ongoing global pandemic. We remain fully committed to freedom,
+and we will continue using our infrastructure and streaming setup
+consisting entirely of [free software][freesw], much like the last
+EmacsConf.
+
+We welcome speakers of **all backgrounds** and **all levels of
+experience**, including newcomers submitting a proposal to give their
+first talk!
+
+### Important dates
+
+Mark your calendars: EmacsConf 2020 will take place on November 28-29!
+We're planning for 9am to 5pm Toronto/EST (2pm-10pm UTC, 3pm-11pm
+Zurich/CET). Depending on people's availability, it might be two
+half-days.
+
+<table>
+<tbody>
+<tr>
+<td colspan="2" align="left">CFP opens</td>
+<td colspan="2" align="right">August 24, 2020</td>
+</tr>
+<tr>
+<td colspan="2" align="left">CFP closes</td>
+<td colspan="2" align="right">October 7, 2020 (new date)</td>
+</tr>
+<tr>
+<td colspan="2" align="left">Speaker notifications</td>
+<td colspan="2" align="right">October 14, 2020</td>
+</tr>
+<tr>
+<td colspan="2" align="left">Schedule published</td>
+<td colspan="2" align="right">November 7, 2020</td>
+</tr>
+<tr>
+<td colspan="2" align="left">EmacsConf 2020!</td>
+<td colspan="2" align="right">November 28 and 29, 2020</td>
+</tr>
+</tbody>
+</table>
+
+Please note that although we will try our best to stick to the above
+dates in the coming months, given the current state of the world, we
+may have to move things around a bit in case of unforeseen events.
+Thank you for bearing with us as we all navigate these trying times.
+
+<a name="formats"></a>
+### Talk formats
+
+The following are the main formats for EmacsConf 2020 talks:
+
+- **10 minutes** (Lightning talk): Quickly present a cool project,
+ concept, or trick in 10 minutes or less!
+
+- **20 minutes** (Standard talk): Introduce the audience to a new
+ Emacs mode, concept, or just talk about something not necessarily
+ shiny and new but that you find really neat nonetheless.
+
+- **50 minutes** (Extended talk): Take your time going more in depth,
+ and/or do a demo! Extended talks are a great way of really
+ educating the audience about something you enjoy.
+
+We hope to have lots of great submissions this year, just like last
+year. In order that as many people as possible can present, it helps
+if presenters can be flexible about their time slots. So, for
+non-lightning talk submissions, please let us know besides your main
+preferred format if a shorter format would also work for your talk.
+
+Q&A time is **included** in the Standard and Extended time slots;
+please time your presentation accordingly. If you would like to take
+questions live, we recommend aiming for a 15-minute presentation for
+the Standard time slot, and for 40-45 minutes for the Extended time
+slot. However, as the speaker, the exact allocation of your time is
+up to you, so long as it does not exceed the allocated time slot.
+
+Other session formats such as tutorials, workshops, and hangouts are
+welcome as well, especially considering all that is going on around
+the world, in case you would find those other formats preferable to a
+traditional talk format. If you are interested in these or other
+session types, please get in touch with us publicly or privately; we
+will be happy to work something out with you.
+
+To help minimize disruptions in case of potential technical issues
+that may arise during the conference, we ask that our speakers either
+schedule a short tech-check with us, or submit a prerecording of their
+talk (especially for lightning talks, where the allotted time slot is
+rather small and any issues that cannot be resolved quickly will
+greatly detract from the presentation). We will send an email about
+this with more details further down the line.
+
+Keynote speaker(s) for EmacsConf 2020 will be introduced in a future
+announcement.
+
+### Topic ideas
+
+Not sure what to talk about? You might find some neat ideas on the
+[[ideas]] page. Feel free to add yours there too! If you're still
+not sure, come by our IRC channel `#emacsconf` on `chat.freenode.net`
+and say hi. You can join the chat using
+[your favourite IRC client][freenode-emacsconf], or by pointing your
+web browser to [chat.emacsconf.org][chat] which runs our self-hosted
+instance of [The Lounge][thelounge] free software web IRC client.
+
+A great way to get started with writing a proposal is to start by
+exploring the programs from previous years: [[2019|2019/schedule]],
+[[2015|2015/schedule]], [[2013|2013#program]].
+
+### Submission
+
+Once you're ready to submit your proposal, the [[submit]] page has the
+instructions on how to submit your talk.
+
+All kinds of people use Emacs for all kinds of things. We would love
+it if EmacsConf 2020 could highlight interesting perspectives and
+reflect the diversity of our community. If you know someone who might
+have a good idea for a talk, please reach out to them and encourage
+them to submit a proposal. Many people (especially from
+underrepresented groups such as women, people of colour, and
+non-developers) might not consider themselves expert enough to share
+their thoughts. If you let them know that you value their knowledge
+and maybe even suggest something that you think others would like to
+hear more about, they may realize that they have something worth
+sharing and that we would love to hear from them.
+
+This year, we are experimenting with an anonymized submission process.
+Identifying information will be removed from submissions by a
+conference organizer who will not participate in talk selection. The
+anonymized submissions will then be reviewed by a selection committee.
+We hope this will help reduce bias and encourage contribution. We
+look forward to hearing from you (and the people you want to nudge to
+speak)!
+
+### Getting involved
+
+If you would like to get involved with the various aspects of
+organizing the conference, such as planning the sessions and helping
+with the infrastructure, see our [[planning]] page and come say hi to
+us at `#emacsconf` on `chat.freenode.net`.
+
+Don't forget to subscribe to our mailing list,
+[emacsconf-discuss][emacsconf-discuss], for discussion and
+announcements about the EmacsConf conference.
+
+We look forward to your ideas and submissions!
+
+
+[emacs]: //www.gnu.org/software/emacs/emacs.html
+[freesw]: //www.gnu.org/philosophy/free-sw.html
+[chat]: //chat.emacsconf.org
+[thelounge]: //thelounge.chat
+[freenode-emacsconf]: ircs://chat.freenode.net:6697/emacsconf
+[emacsconf-discuss]: //lists.gnu.org/mailman/listinfo/emacsconf-discuss
diff --git a/2020/emacsconf-2020-cfp.org b/2020/emacsconf-2020-cfp.org
new file mode 100644
index 00000000..f6f55e9f
--- /dev/null
+++ b/2020/emacsconf-2020-cfp.org
@@ -0,0 +1,185 @@
+#+title: EmacsConf 2020
+#+subtitle: Online Conference
+#+date: November 28 and 29, 2020
+#+options: author:nil
+
+# Copyright (C) 2020 Amin Bandali, Sacha Chua, David Bremner
+
+Update 2020-09-14: Added timezone information (9am to 5pm
+Toronto/EST). Moved CFP end date to October 7, 2020.
+
+The [[https://emacsconf.org/2020/cfp/][Call for Proposals]] for [[https://emacsconf.org/2020/][EmacsConf 2020]] is now open, until
+*October 7, 2020*.
+
+After a successful EmacsConf 2019, we are back again this year and are
+once again calling for your participation!
+
+EmacsConf is the conference about the joy of [[https://www.gnu.org/software/emacs/emacs.html][Emacs]], Emacs Lisp, and
+memorizing key sequences.
+
+We are holding EmacsConf 2020 as a virtual (online) conference again
+this year, especially now, given the current state of the world with
+the ongoing global pandemic. We remain fully committed to freedom,
+and we will continue using our infrastructure and streaming setup
+consisting entirely of [[https://www.gnu.org/philosophy/free-sw.html][free software]], much like the last EmacsConf.
+
+We welcome speakers of *all backgrounds* and *all levels of
+experience*, including newcomers submitting a proposal to give their
+first talk!
+
+* Important dates
+
+Mark your calendars: EmacsConf 2020 will take place on November 28-29!
+We're planning for 9am to 5pm Toronto/EST (2pm-10pm UTC, 3pm-11pm
+Zurich/CET). Depending on people's availability, it might be two
+half-days.
+
+| CFP opens | August 24, 2020 |
+| CFP closes | October 7, 2020 (new date) |
+| Speaker notifications | October 14, 2020 |
+| Schedule published | November 7, 2020 |
+| EmacsConf 2020! | November 28 and 29, 2020 |
+
+Please note that although we will try our best to stick to the above
+dates in the coming months, given the current state of the world, we
+may have to move things around a bit in case of unforeseen events.
+Thank you for bearing with us as we all navigate these trying times.
+
+* Talk formats
+
+The following are the main formats for EmacsConf 2020 talks:
+
+- *10 minutes* (Lightning talk): Quickly present a cool project,
+ concept, or trick in 10 minutes or less!
+
+- *20 minutes* (Standard talk): Introduce the audience to a new Emacs
+ mode, concept, or just talk about something not necessarily shiny
+ and new but that you find really neat nonetheless.
+
+- *50 minutes* (Extended talk): Take your time going more in depth,
+ and/or do a demo! Extended talks are a great way of really
+ educating the audience about something you enjoy.
+
+We hope to have lots of great submissions this year, just like last
+year. In order that as many people as possible can present, it helps
+if presenters can be flexible about their time slots. So, for
+non-lightning talk submissions, please let us know besides your main
+preferred format if a shorter format would also work for your talk.
+
+Q&A time is *included* in the Standard and Extended time slots; please
+time your presentation accordingly. If you would like to take
+questions live, we recommend aiming for a 15-minute presentation for
+the Standard time slot, and for 40-45 minutes for the Extended time
+slot. However, as the speaker, the exact allocation of your time is
+up to you, so long as it does not exceed the allocated time slot.
+
+Other session formats such as tutorials, workshops, and hangouts are
+welcome as well, especially considering all that is going on around
+the world, in case you would find those other formats preferable to a
+traditional talk format. If you are interested in these or other
+session types, please get in touch with us publicly or privately; we
+will be happy to work something out with you.
+
+To help minimize disruptions in case of potential technical issues
+that may arise during the conference, we ask that our speakers either
+schedule a short tech-check with us, or submit a prerecording of their
+talk (especially for lightning talks, where the allotted time slot is
+rather small and any issues that cannot be resolved quickly will
+greatly detract from the presentation). We will send an email about
+this with more details further down the line.
+
+Keynote speaker(s) for EmacsConf 2020 will be introduced in a future
+announcement.
+
+* Topic ideas
+
+Not sure what to talk about? You might find some neat ideas on the
+[[https://emacsconf.org/2020/ideas/][ideas]] page. Feel free to add yours there too! If you're still not
+sure, come by our IRC channel =#emacsconf= on =chat.freenode.net= and
+say hi. You can join the chat using [[ircs://chat.freenode.net:6697/emacsconf][your favourite IRC client]], or by
+pointing your web browser to [[https://chat.emacsconf.org][chat.emacsconf.org]] which runs our
+self-hosted instance of [[https://thelounge.chat][The Lounge]] free software web IRC client.
+
+A great way to get started with writing a proposal is to start by
+exploring the programs from previous years: [[https://emacsconf.org/2019/schedule/][2019]], [[https://emacsconf.org/2015/schedule/][2015]], [[https://emacsconf.org/2013/#program][2013]].
+
+* Submission
+
+Once you're ready to submit your proposal, the [[https://emacsconf.org/2020/submit/][submit]] page has the
+instructions on how to submit your talk.
+
+All kinds of people use Emacs for all kinds of things. We would love
+it if EmacsConf 2020 could highlight interesting perspectives and
+reflect the diversity of our community. If you know someone who might
+have a good idea for a talk, please reach out to them and encourage
+them to submit a proposal. Many people (especially from
+underrepresented groups such as women, people of colour, and
+non-developers) might not consider themselves expert enough to share
+their thoughts. If you let them know that you value their knowledge
+and maybe even suggest something that you think others would like to
+hear more about, they may realize that they have something worth
+sharing and that we would love to hear from them.
+
+This year, we are experimenting with an anonymized submission process.
+Identifying information will be removed from submissions by a
+conference organizer who will not participate in talk selection. The
+anonymized submissions will then be reviewed by a selection committee.
+We hope this will help reduce bias and encourage contribution. We
+look forward to hearing from you (and the people you want to nudge to
+speak)!
+
+* Getting involved
+
+If you would like to get involved with the various aspects of
+organizing the conference, such as planning the sessions and helping
+with the infrastructure, see our [[https://emacsconf.org/2020/planning/][planning]] page and come say hi to
+us at =#emacsconf= on =chat.freenode.net=.
+
+Don't forget to subscribe to our mailing list, [[https://lists.gnu.org/mailman/listinfo/emacsconf-discuss][emacsconf-discuss]], for
+discussion and announcements about the EmacsConf conference.
+
+We look forward to your ideas and submissions!
+
+
+* COMMENT Copyright & License
+
+Copyright (C) 2020 Amin Bandali, Sacha Chua, David Bremner
+
+The EmacsConf 2020 Call for Proposals is part of the EmacsConf wiki,
+and is dual-licensed under the terms of the Creative Commons
+Attribution-ShareAlike 4.0 International Public License; and the GNU
+General Public License as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later
+version.
+
+A copy of these two licenses is available on the EmacsConf wiki, in
+the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
+
+* COMMENT How to export this file
+
+As of the time of writing this document (Org mode version 9.3.7), the
+Org links library (=ol.el=) does not yet recognize =ircs= link types,
+and will throw an error if you try to export a file containing them,
+such as this file.
+
+To work around that, you can use something along the lines of the
+Emacs Lisp code below, by either adding it to your init file, or by
+putting the point in the code block and hitting =C-c C-v e= (that is,
+hold Ctrl, then hit c followed by v, then release Ctrl, and hit e) to
+evaluate the code, working around the issue only for the current
+session.
+
+#+begin_src emacs-lisp :results silent
+(org-link-set-parameters
+ "ircs"
+ :export
+ (lambda (link description format)
+ "Export an ircs link.
+See `org-link-parameters' for details about LINK, DESCRIPTION and
+FORMAT."
+ (let ((desc (or description link)))
+ (pcase format
+ (`html (format "<a href=\"ircs:%s\">%s</a>" link desc))
+ (`md (format "[%s](ircs:%s)" desc link))
+ (_ nil)))))
+#+end_src
diff --git a/2020/emacsconf-2020.m3u b/2020/emacsconf-2020.m3u
new file mode 100644
index 00000000..1e6e5490
--- /dev/null
+++ b/2020/emacsconf-2020.m3u
@@ -0,0 +1,122 @@
+#EXTM3U
+#PLAYLIST: EmacsConf 2020
+#EXTALB: EmacsConf 2020
+#EXTGENRE: Speech
+#EXTINF:-1,Nov 28 Opening Remarks
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--00-opening-remarks.webm
+#EXTINF:-1,Emacs News Highlights - Sacha Chua
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--01-emacs-news-highlights--sacha-chua.webm
+#EXTINF:-1,An Emacs Developer Story: From User to Package Maintainer - Leo Vivier
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.webm
+#EXTINF:-1,Idea to Novel Superstructure: Emacs for Writing - Bala Ramadurai
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure--bala-ramadurai.webm
+#EXTINF:-1,Idea to Novel Superstructure: Emacs for Writing - Questions - Bala Ramadurai
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm
+#EXTINF:-1,Music in Plain Text - Jonathan Gregory
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.webm
+#EXTINF:-1,Bard Bivou(m)acs - Building a bandcamp-like page for an album of music - Grant Shangreaux
+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
+#EXTINF:-1,Bard Bivou(m)acs - Building a bandcamp-like page for an album of music - Questions - Grant Shangreaux
+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
+#EXTINF:-1,Trivial Emacs Kits - Corwin Brust
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.webm
+#EXTINF:-1,Beyond Vim and Emacs: A Scalable UI Paradigm - Sid Kasivajhula
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.webm
+#EXTINF:-1,Beyond Vim and Emacs: A Scalable UI Paradigm - Questions - Sid Kasivajhula
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.webm
+#EXTINF:-1,Building reproducible Emacs - Andrew Tropin (abcdw)
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.webm
+#EXTINF:-1,On why most of the best features in eev look like 5-minute hacks - Eduardo Ochs
+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
+#EXTINF:-1,Orgmode - your life in plain text - Rainer König
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.webm
+#EXTINF:-1,Orgmode - your life in plain text - Questions - Rainer König
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--09-orgmode-your-life-in-plain-text--questions--rainer-konig.webm
+#EXTINF:-1,Lead your future with Org - Andrea
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--10-lead-your-future-with-org--andrea.webm
+#EXTINF:-1,the org-gtd package: opinions about Getting Things Done - Aldric
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.webm
+#EXTINF:-1,One Big-ass Org File or multiple tiny ones? Finally, the End of the debate! - Leo Vivier
+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
+#EXTINF:-1,Experience Report: Steps to "Emacs Hyper Notebooks" - Joseph Corneli, Raymond Puzio, and Cameron Ray Smith
+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
+#EXTINF:-1,README-Driven Design - Adam Ard
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--14-readme-driven-design--adam-ard.webm
+#EXTINF:-1,Moving from Jekyll to OrgMode, an experience report - Adolfo Villafiorita
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.webm
+#EXTINF:-1,Moving from Jekyll to OrgMode, an experience report - Adolfo Villafiorita
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--prerec--adolfo-villafiorita.webm
+#EXTINF:-1,Org-roam: Presentation, Demonstration, and What's on the Horizon - Leo Vivier
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.webm
+#EXTINF:-1,Org-mode and Org-Roam for Scholars and Researchers - Noorah Alhasan
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.webm
+#EXTINF:-1,Org-roam: Technical Presentation - Leo Vivier
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.webm
+#EXTINF:-1,Sharing blogs (and more) with org-webring - Brett Gilio
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.webm
+#EXTINF:-1,OMG Macros - Corwin Brust
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--20-omg-macros--corwin-brust.webm
+#EXTINF:-1,Nov 28 - Closing remarks (part 1)
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--40-closing-remarks-part-1.webm
+#EXTINF:-1,Nov 28 - Closing remarks (part 2)
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--40-closing-remarks-part-2.webm
+#EXTINF:-1,Nov 29 - Opening remarks
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--41-opening-remarks.webm
+#EXTINF:-1,Powering-up Special Blocks - Musa Al-hassy
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.webm
+#EXTINF:-1,Incremental Parsing with emacs-tree-sitter - Tuấn-Anh Nguyễn
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.webm
+#EXTINF:-1,Incremental Parsing with emacs-tree-sitter - Questions - Tuấn-Anh Nguyễn
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen.webm
+#EXTINF:-1,Analyze code quality through Emacs: a smart forensics approach and the story of a hack - Andrea
+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
+#EXTINF:-1,Traverse complex JSON structures with live feedback - Zen Monk Alain M. Lafon
+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
+#EXTINF:-1,Emacs as a Highschooler: How It Changed My Life - Pierce Wang
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.webm
+#EXTINF:-1,Emacs as a Highschooler: How It Changed My Life - Questions - Pierce Wang
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang.webm
+#EXTINF:-1,State of Retro Gaming in Emacs - Vasilij "wasamasa" Schneidermann
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.webm
+#EXTINF:-1,Demo: Alien - Vasilij "wasamasa" Schneidermann
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-alien--vasilij-wasamasa-schneidermann.webm
+#EXTINF:-1,Demo: Brix - Vasilij "wasamasa" Schneidermann
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-brix--vasilij-wasamasa-schneidermann.webm
+#EXTINF:-1,Demo: Car - Vasilij "wasamasa" Schneidermann
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-car--vasilij-wasamasa-schneidermann.webm
+#EXTINF:-1,Demo: Joust - Vasilij "wasamasa" Schneidermann
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-joust--vasilij-wasamasa-schneidermann.webm
+#EXTINF:-1,Demo: Kaleidoscope - Vasilij "wasamasa" Schneidermann
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-kaleidoscope--vasilij-wasamasa-schneidermann.webm
+#EXTINF:-1,Demo: Sierpinski - Vasilij "wasamasa" Schneidermann
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-sierpinski--vasilij-wasamasa-schneidermann.webm
+#EXTINF:-1,Demo: Tetris - Vasilij "wasamasa" Schneidermann
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8-demo-tetris--vasilij-wasamasa-schneidermann.webm
+#EXTINF:-1,Welcome To The Dungeon - Erik Elmshauser and Corwin Brust
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust.webm
+#EXTINF:-1,A tour of vterm - Gabriele Bozzola
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.webm
+#EXTINF:-1,A tour of vterm - Questions - Gabriele Bozzola
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo.webm
+#EXTINF:-1,Lakota Language and Emacs - Grant Shangreaux
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux.webm
+#EXTINF:-1,Lakota Language and Emacs - Questions - Grant Shangreaux
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux.webm
+#EXTINF:-1,Object Oriented Code in the Gnus Newsreader - Eric Abrahamsen
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen.webm
+#EXTINF:-1,Maxima a computer algebra system in Emacs - Fermin MF
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.webm
+#EXTINF:-1,Extend Emacs to Modern GUI Applications with EAF - Matthew Zeng
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.webm
+#EXTINF:-1,WAVEing at Repetitive Repetitive Repetitive Music - Zachary Kanfer
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.webm
+#EXTINF:-1,WAVEing at Repetitive Repetitive Repetitive Music - Questions - Zachary Kanfer
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm
+#EXTINF:-1,Emacs development update - John Wiegley
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--38-emacs-development-update--john-wiegley.webm
+#EXTINF:-1,NonGNU ELPA - Richard Stallman
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--39-nongnu-elpa--richard-stallman.webm
+#EXTINF:-1,NonGNU ELPA - Questions - Richard Stallman
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.webm
+#EXTINF:-1,Nov 29, Closing remarks
+https://mirror.csclub.uwaterloo.ca/emacsconf/2020/emacsconf-2020--42-closing-remarks.webm
diff --git a/2020/ideas.md b/2020/ideas.md
new file mode 100644
index 00000000..8a5f4c9e
--- /dev/null
+++ b/2020/ideas.md
@@ -0,0 +1,29 @@
+[[!meta title="Ideas"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali"]]
+
+This is _the_ place to collect ideas for talks and other sessions for
+EmacsConf 2020. :-)
+
+Be sure to check out the ideas from previous years as well:
+[[2019|2019/ideas]], [[2015|2015/ideas]].
+
+## Ideas
+
+### _Add your idea here!_
+
+### Organize panel discussions between Emacs users and contributors
+
+- How to improve Emacs UI?
+- How to make using Emacs easier for beginners?
+- How to make contributing to Emacs easier for everyone?
+
+### Ask Emacs users to send short videos testimonies
+
+- What's your most funny story with Emacs ?
+- What is your favorite package?
+- What's your "ahah" moment in your Emacs history?
+- How would you convince others to use Emacs?
+
+### Overview of gccemacs
+
+What is the status of gccemacs, and what can package maintainers do to make their code native-compilation-friendly?
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..4dc84a04
--- /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-autogen.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>
diff --git a/2020/organizers-notebook.md b/2020/organizers-notebook.md
new file mode 100644
index 00000000..e2847847
--- /dev/null
+++ b/2020/organizers-notebook.md
@@ -0,0 +1,914 @@
+<!-- automatically generated from organizers-notebook.org. Please edit that file instead. -->
+[[!toc levels=4]]
+
+- [Export and tangle]((progn (org-md-export-to-markdown) (org-babel-tangle)))
+- [Execute buffer]((org-babel-execute-buffer))
+
+
+# Tasks
+
+
+## Manually transcribe
+
+Either subtitles (with timestamps) or a text transcript (no timestamps) is perfectly okay.
+
+- [ ] mplsCorwin: emacsconf-2020&#x2013;03-idea-to-novel-superstructure-emacs-for-writing&#x2013;questions&#x2013;bala-ramadurai.webm
+- [ ] mplsCorwin: emacsconf-2020&#x2013;08-building-reproducible-emacs&#x2013;andrew-tropin.webm
+- [X] sachac: emacsconf-2020&#x2013;10-lead-your-future-with-org&#x2013;andrea.webm
+ Added transcript to info/10.md, seeing if YouTube can automatically
+ assign timing. Took about 24 minutes to transcribe 8 minute talk. If
+ it doesn't work out, I might manually time it. &#x2026; It worked!
+- [ ] zaeph: emacsconf-2020&#x2013;24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack&#x2013;andrea.webm
+
+
+## Edit automatic subtitles
+
+To reduce duplication of work, make sure you have the latest copy of organizers-notebook.org. Mark the one you
+want to do by prepending your name to the TODO title, and commit
+organizers-notebook.org back to the repo.
+
+I modified the `subed` package to work with VTT files. The modified version is at <https://github.com/sachac/subed/tree/subed-vtt> , and I've submitted a pull request. It's pretty cool! If you copy the webm to the same directory and name it with the same filename (except ending in .webm instead of .vtt, of course), subed will automatically synchronize as you move through the subtitles. [Demo](https://sachachua.com/blog/2020/12/editing-subtitles-in-emacs-with-subed-with-synchronized-video-playback-through-mpv/)
+
+- [ ] <./subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai-autogen.vtt>
+ See <info/03/screenplay.fountain>
+- [X] sachac <./subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier-autogen.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith-autogen.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--14-readme-driven-design--adam-ard-autogen.vtt>
+- [X] sachac <./subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita-autogen.vtt>
+- [X] sachac <./info/16.md> <./subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt>
+- [X] sachac <./info/17.md> <./subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt>
+- [X] sachac <./info/18.md> <./subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt>
+- [X] sachac <./info/19.md> <./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio-autogen.vtt>
+- [X] sachac <./info/20.md> <./subtitles/emacsconf-2020--20-omg-macros--corwin-brust-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs-autogen.vtt>
+- [ ] sachac <./subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt>
+- [ ] bhavin192 <./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt>
+- [ ] bhavin192 <./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt>
+- [ ] bhavin192 <./subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt>
+- [X] bhavin192 <./info/35.md> <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt>
+- [X] bhavin192 <./info/35.md> <./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt>
+- [X] bhavin192 <./info/38.md> <./subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt>
+- [X] bhavin192 <./info/39.md> <./subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt>
+- [X] bhavin192 <./info/39.md> <./subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt>
+- [ ] <./subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt>
+- [ ] <./subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt>
+
+
+# Assumptions and settings
+
+Note that re-evaluating a defvar won't change the value, so if you want to change the value after this is already loaded, use `(setq ...)`.
+
+ (defvar conf/year 2020 "Year of conference.")
+ (defvar conf/buffer-minutes 3 "Number of minutes to use as a buffer between talks.")
+ (defvar conf/timezones '("EST" "America/Los_Angeles" "UTC" "CET" "Asia/Singapore") "List of timezones")
+ (defvar conf/autogenerate-talk-pages nil "Set this to t at the beginning of the conference, when we're still autogenerating individual talk pages.
+ Otherwise you might overwrite hand-edited talk pages.")
+ (defvar conf/collaborative-pad "https://etherpad.wikimedia.org/p/emacsconf-2020" "URL of collaborative pad.")
+ (defvar conf/streaming-nick "bandali" "IRC nick of main organizer in charge of streaming.")
+ (defvar conf/topic-templates nil "List of (channel topic-template) entries for mass-setting channel topics.")
+ (defvar conf/rooms '(("A" "http://example.org?room=a")
+ ("B" "http://example.org?room=b")
+ ("C" "http://example.org?room=c"))
+ "List of (code join-url) entries. Room codes should be uppercase.") ; actually set this in organizers' wiki index.org
+ (setq conf/topic-templates
+ '(("#emacsconf" "EmacsConf 2020 is over, thanks for joining! | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates")
+ ("#emacsconf-accessible" "EmacsConf 2020 is over. Thanks for making it more accessible! | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates")
+ ("#emacsconf-org" "EmacsConf2020 is over, thanks for joining! | Dedicated channel for EmacsConf organizers and speakers | this is intended as an internal, low-traffic channel; for main discussion around EmacsConf, please join #emacsconf | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates")))
+
+
+# Workflows
+
+STREAM - main organizer, CHECK - secondary organizer or volunteer, PAD - organizer focusing on pad
+
+
+## Planning
+
+- Collect e-mail addresses of accepted speakers into a list for easy pasting into Bcc (organizers' private wiki)
+- See submissions.org for Org scheduling code; 3 minutes of buffer was okay last time, but more would be better for Q&A; opening remarks time could be trimmed
+
+
+### Code for scheduling
+
+ (defun conf/get-talk-info ()
+ (let (talk results)
+ (org-map-entries (lambda ()
+ (let ((heading (org-heading-components)))
+ (cond
+ ((and (elt heading 2) (or (null talk)
+ (<= (car heading)
+ (plist-get talk :level)))) ;; has a todo, therefore is a talk
+ (when talk (setq results (cons talk results)))
+ (setq talk (list
+ :type 'talk
+ :title (elt heading 4)
+ :talk-id (org-entry-get (point) "TALK_ID")
+ :status (elt heading 2)
+ :level (car heading)
+ :scheduled (org-entry-get (point) "SCHEDULED")
+ :duration (org-entry-get (point) "DURATION")
+ :time (org-entry-get (point) "MIN_TIME")
+ :speakers (org-entry-get (point) "NAME"))))
+ ((string-match "^ *Talk information *$" (elt heading 4))
+ (plist-put talk :info
+ (org-export-as 'md t nil t)))
+ ((or (null talk) (< (car heading) (plist-get talk :level))) ;; heading above
+ (when talk
+ (setq results (cons talk results))
+ (setq talk nil))
+ (setq results (cons
+ (list :type 'headline
+ :level (car heading)
+ :speakers (org-entry-get (point) "NAME")
+ :duration (org-entry-get (point) "DURATION")
+ :talk-id (org-entry-get (point) "TALK_ID")
+ :title (elt heading 4)
+ :scheduled (org-entry-get (point) "SCHEDULED"))
+ results))))))
+ nil 'tree)
+ (when talk (setq results (cons talk results)))
+ (reverse results)))
+
+ (defun conf/filter-talks (list)
+ "Return only talk info in LIST."
+ (seq-filter
+ (lambda (talk) (eq (plist-get talk :type) 'talk))
+ list))
+
+ (defun conf/get-talk-info-from-file (&optional filename)
+ (with-temp-buffer
+ (insert-file-contents (or filename "submissions.org"))
+ (org-mode)
+ (org-show-all)
+ (goto-char (point-min))
+ (goto-char (org-find-property "ID" "talks"))
+ (conf/get-talk-info)))
+
+
+ (defun conf/find-talk (filter &optional info)
+ (setq info (or info (conf/filter-talks conf/info)))
+ (when (stringp filter) (setq filter (list filter)))
+ (or (seq-find (lambda (o) (string= (plist-get o :talk-id) (car filter))) info)
+ (seq-find (lambda (o)
+ (let ((case-fold-search t)
+ (all (mapconcat (lambda (f) (plist-get o f)) '(:title :speakers :talk-id) " ")))
+ (null (seq-contains-p
+ (mapcar (lambda (condition) (string-match condition all)) filter)
+ nil))))
+ info)))
+
+ (defun conf/goto-talk-id (id)
+ (goto-char (org-find-property "TALK_ID" id)))
+
+ (defun conf/assign-ids ()
+ "Assign numeric talk IDs."
+ (interactive)
+ (goto-char (point-min))
+ ;; Determine the maximum ID assigned so far
+ (let ((id
+ (1+
+ (apply 'max
+ (or (mapcar
+ 'string-to-number
+ (org-map-entries
+ (lambda ()
+ (let ((org-trust-scanner-tags t))
+ (org-entry-get (point) "TALK_ID"))) "TALK_ID>0" 'file))
+ '(0))))))
+ (goto-char (point-min))
+ (while (re-search-forward "^ *:NAME: " nil t)
+ (unless (org-entry-get (point) "TALK_ID")
+ (org-set-property "TALK_ID" (format "%02d" id))
+ (org-set-property "CUSTOM_ID" (format "talk%02d" id))
+ (setq id (1+ id))))))
+
+ (defun conf/update-talks ()
+ "Update times, tables, and schedules."
+ (interactive)
+ (save-excursion
+ (conf/update-times)
+ (conf/update-tables)
+ (conf/update-schedules)))
+
+ (defun conf/update-times ()
+ "Check whether we need more time or less time based on TARGET_TIME and MIN_TIME_SUM."
+ (goto-char (point-min))
+ (org-map-entries
+ (lambda ()
+ (when (org-entry-get (point) "TARGET_TIME")
+ (conf/org-sum-min-time-in-subtree)
+ (org-entry-put
+ (point)
+ "DIFFERENCE"
+ (let ((diff
+ (-
+ (string-to-number (org-entry-get (point) "TARGET_TIME"))
+ (string-to-number (org-entry-get (point) "MIN_TIME_SUM")))))
+ (cond
+ ((> diff 0) (format "Extra: %d" diff))
+ ((< diff 0) (format "Needs: %d" (- diff)))
+ (t "")))))) nil 'file))
+
+ (defun conf/update-tables ()
+ "Update the time checks and table reports."
+ (goto-char (point-min))
+ (while (re-search-forward "#\\+CALL: check_time()" nil t)
+ (org-ctrl-c-ctrl-c))
+ (goto-char (point-min))
+ (while (re-search-forward "#\\+BEGIN: columnview" nil t)
+ (org-ctrl-c-ctrl-c)))
+
+ (defun conf/update-schedules ()
+ "Schedule the talks based on the MIN_TIME and 3 minutes of buffer.
+ Talks with a FIXED_TIME property are not moved."
+ (interactive)
+ (goto-char (org-find-exact-headline-in-buffer "Talks"))
+ (let (current-time scheduled end-time duration (buffer (seconds-to-time (* conf/buffer-minutes 60)))) ;; assumption: 3 minutes between talks
+ (org-map-entries (lambda ()
+ (if (org-entry-get (point) "FIXED_TIME")
+ (setq current-time (org-get-scheduled-time (point))))
+ (when (org-entry-get (point) "MIN_TIME")
+ (setq duration (* (string-to-number (org-entry-get (point) "MIN_TIME")) 60)
+ end-time (time-add current-time (seconds-to-time duration)))
+ (org-set-property "SCHEDULED" (format "%s-%s" (org-format-time-string "%Y-%m-%d %H:%M" current-time)
+ (org-format-time-string "%H:%M" end-time)))
+ (setq current-time (time-add end-time buffer))))
+ nil 'tree)))
+
+ (defun conf/org-sum-min-time-in-subtree ()
+ "Add up all the MIN_TIME properties of headings underneath the current one
+ The total is written to the MIN_TIME_SUM property of this heading"
+ (interactive)
+ (org-entry-put
+ (point)
+ "MIN_TIME_SUM"
+ (save-excursion
+ (format "%d"
+ (apply
+ '+
+ (mapcar 'string-to-number
+ (delq nil
+ (org-map-entries
+ (lambda () (org-entry-get (point) "MIN_TIME")) nil 'tree))))))))
+
+
+### Generate schedule file
+
+ (defun conf/format-talk-link (talk)
+ (and talk (if (plist-get talk :talk-id)
+ (format "<a href=\"/%d/talks/%s\">%s</a>"
+ year
+ (plist-get talk :talk-id)
+ (plist-get talk :title))
+ (plist-get talk :title))))
+
+ (defun conf/format-talk-info-as-schedule (info)
+ (format "<table width=\"100%%\">%s</table>"
+ (mapconcat
+ (lambda (o)
+ (let* ((time-fmt "%l:%M %p")
+ (timestamp (org-timestamp-from-string (plist-get o :scheduled)))
+ (start (if timestamp (format-time-string time-fmt (org-timestamp-to-time (org-timestamp-split-range timestamp))) ""))
+ (end (if timestamp (format-time-string time-fmt (org-timestamp-to-time (org-timestamp-split-range timestamp t))) ""))
+ (title (plist-get o :title))
+ (speakers (plist-get o :speakers)))
+ (if (eq (plist-get o :type) 'headline)
+ (format "<tr><td colspan=\"4\"><strong>%s<strong></td></tr>"
+ (if (plist-get o :talk-id)
+ (conf/format-talk-link o)
+ title))
+ (format "<tr><td width=100>~%s</td><td width=100>~%s</td><td>%s</td><td>%s</td></tr>"
+ start end (conf/format-talk-link o) speakers))))
+ (cdr info) "\n")))
+
+ (defun conf/filter-talks (info)
+ (seq-filter (lambda (o) (plist-get o :talk-id)) info))
+
+ (defun conf/split-out-talk-information ()
+ (interactive)
+ (let ((talks (conf/filter-talks conf/info)))
+ (mapc (lambda (o)
+ (with-temp-buffer
+ (insert
+ (format "# %s\n%s\n\n%s"
+ (plist-get o :title)
+ (plist-get o :speakers)
+ (plist-get o :info)))
+ (write-file (expand-file-name (format "%s.md" (plist-get o :talk-id)) "info"))))
+ talks)))
+
+ (defun conf/format-talk-pages (info)
+ (let* ((talks (conf/filter-talks info))
+ (next-talks (cdr talks))
+ (prev-talks (cons nil talks)))
+ (mapc (lambda (o)
+ (with-temp-buffer
+ (let* ((timestamp (org-timestamp-from-string (plist-get o :scheduled)))
+ (next-talk (conf/format-talk-link (pop next-talks)))
+ (prev-talk (conf/format-talk-link (pop prev-talks)))
+ (schedule (mapconcat
+ (lambda (tz)
+ (format "%s - %s"
+ (format-time-string "%A, %b %e %Y, ~%l:%M %p"
+ (org-timestamp-to-time (org-timestamp-split-range timestamp)) tz)
+ (format-time-string "%l:%M %p %Z"
+ (org-timestamp-to-time (org-timestamp-split-range timestamp t)) tz)))
+ conf/timezones
+ " \n"))
+ (nav-links (format "Back to the [[schedule]] \n%s%s"
+ (if prev-talk (format "Previous: %s \n" prev-talk) "")
+ (if next-talk (format "Next: %s \n" next-talk) ""))))
+ (insert (format "[[%s title=\"%s\"]]
+ [[%s copyright=\"Copyright &copy; %s %s\"]]
+
+ <!-- To edit the talk information, change info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->\n
+
+ %s
+
+ [[!inline pages=\"internal(%s/info/%s)\" raw=\"yes\"]]
+
+ %s
+
+ %s
+
+ "
+ "!meta"
+ (replace-regexp-in-string "\"" "\\\\\"" (plist-get o :title))
+ "!meta"
+ conf/year
+ (plist-get o :speakers)
+ nav-links
+ conf/year
+ (plist-get o :talk-id)
+ schedule
+ nav-links)))
+ (write-file (format "talks/%s.md" (plist-get o :talk-id)))))
+ talks)))
+
+ (defun conf/generate-pad-template ()
+ "Generate a template for copying and pasting into the pad.
+ Writes it to pad-template.html."
+ (interactive "p")
+ (let* ((talks (conf/filter-talks conf/info))
+ (text (concat
+ "<p>Conference info, how to watch/participate: https://emacsconf.org/2020/<br />
+ Guidelines for conduct: https://emacsconf.org/conduct/</p>
+
+ <p>Except where otherwise noted, the material on the EmacsConf pad are dual-licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International Public License; and the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) an later version.
+ Copies of these two licenses are included in the EmacsConf wiki repository, in the COPYING.GPL and COPYING.CC-BY-SA files (https://emacsconf.org/COPYING/).</p>
+
+ <p>By contributing to this pad, you agree to make your contributions available under the above licenses. You are also promising that you are the author of your changes, or that you copied them from a work in the public domain or a work released under a free license that is compatible with the above two licenses. DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION.</p>
+
+ <p>
+ This pad is here to be curated by everybody and its rough structure is like this:
+ <ol><li>General info and license
+ <li>A section for each talk -> please do add questions and notes
+ <li>A general feedback section
+ </ol>
+ </p>
+ "
+ (mapconcat
+ (lambda (o)
+ (let ((url (format "https://emacsconf.org/%s/schedule/%s" conf/year (plist-get o :talk-id))))
+ (format "-------------------------------------------------------------------------------------------------<br/><strong>Talk%s: %s</strong><br />
+ Speaker(s): %s<br />
+ Talk page: <a href=\"%s\">%s</a><br />
+ Actual start of talk EST: &nbsp;&nbsp;&nbsp; Start of Q&A: &nbsp;&nbsp; End of Q&A: &nbsp;&nbsp;<br />
+ <strong>Questions:</strong>
+ Speakers may answer in any order or skip questions. As much as possible, put your questions at the top level instead of under another question. If adding an answer, please indicate [speaker] or your nick accordingly. Volunteers, please add new slots as ones get filled.<br />
+ <ul>
+ <li>Q1:&nbsp;<ul><li>A:&nbsp;</li></ul></li>
+ <li>Q2:&nbsp;<ul><li>A:&nbsp;</li></ul></li>
+ <li>Q3:&nbsp;<ul><li>A:&nbsp;</li></ul></li>
+ <li>Q4:&nbsp;<ul><li>A:&nbsp;</li></ul></li>
+ </ul>
+
+ <strong>Links and other notes:</strong>
+ <ul>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ </ul>
+ " (plist-get o :talk-id) (plist-get o :title) (plist-get o :speakers) url url))) talks "<br/><br/>\n")
+ "<br/><br/>-------------------------------------------------------------------------------------------------<br/>
+ <strong>General Feedback: What went well?</strong><br/><br/>
+ <ul>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ </ul>
+ <br /><br />
+ -------------------------------------------------------------------------------------------------<br/>
+ <strong>General Feedback: What to improve?</strong><br/><br/>
+ <ul>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ </ul>
+ <br/><br/>
+ -------------------------------------------------------------------------------------------------<br/>
+ <strong>Colophon:</strong>
+ <ul></ul>")))
+ (with-current-buffer (find-file "pad-template.html")
+ (erase-buffer)
+ (insert text)
+ (save-buffer)))
+ (browse-url-of-file "pad-template.html"))
+
+ (defun conf/generate-talks-page ()
+ (let ((info conf/info))
+ (with-temp-buffer
+ (find-file "talk-details.md")
+ (erase-buffer)
+ (insert (format "<table><thead><th>Duration</th><th>Title</th><th>Speakers</th></thead><tbody>%s</tbody></table>"
+ (mapconcat
+ (lambda (o)
+ (let* ((title (plist-get o :title))
+ (speakers (plist-get o :speakers)))
+ (if (null (plist-get o :talk-id))
+ (format "<tr><td colspan=\"3\">%s</td></tr>" (conf/format-talk-link o))
+ (format "<tr><td>%s</td><td>%s</td><td>%s</td><tr>"
+ (plist-get o :duration)
+ (conf/format-talk-link o)
+ (plist-get o :speakers)))))
+ info "\n")))
+ (save-buffer))))
+
+ (defun conf/generate-schedule-files (&optional filename)
+ (interactive)
+ (with-temp-buffer
+ (insert (conf/format-talk-info-as-schedule conf/info))
+ (write-file "schedule-details.md"))
+ (when conf/autogenerate-talk-pages (conf/format-talk-pages conf/info)))
+
+Set the info based on submissions.org.
+
+ (setq conf/info (conf/get-talk-info-from-file "submissions.org"))
+
+
+## Before the conference
+
+- Do tech checks and get alternative ways to contact speakers (phone number? IRC nick? Something that goes ding?)
+- Install Mute Tab extension if desired
+- Send encoding tips for prerecs
+- Normalize audio for prerecs
+- Ask speakers for prerecs, links, slides, other resources
+- Put prerecs in `orga@front0:~/prerecs` so that people can use mediainfo to check duration
+- Plan volunteer availability
+- Set up local icecast server and have live0 relay
+- Create individual talk pages and schedule.
+- Set up pad with Q1: Q2: Q3: Q4: slots: `conf/generate-pad-template`
+
+
+### Tech check
+
+- Explain process
+- Test audio, webcam, screensharing, collaborative pad
+ - Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
+ - Multi-monitor setups might not be handled well by BBB; share window instead of desktop
+- Check if comfortable checking into IRC: #emacsconf-org
+- Ask about Q&A preference; OR:
+ - live Q&A
+ - Q&A over pad or IRC
+ - no Q&A
+- Get IRC nick and phone number for emergency contact, store in private wiki
+- Try to record name pronunciation
+- Encourage webcam for Q&A, although make it clear that it's totally optional
+- Possible picture-in-picture approach to maximize screen real estate
+ - Linux: share desktop, run cheese, set Always on Top
+
+
+## During the conference
+
+
+### Start of streaming
+
+- STREAM starts streaming and has live0 relay
+- STREAM displays time on screen: `watch TZ=America/New_York date` ?
+- CHECK confirms stream and starts low-resolution mirror
+
+
+#### ffmpeg: mirror main stream to low-resolution stream
+
+Needs the `$main480p` environment variable set to somethnig of the form `icecast://username:password@site:port/mount-point.webm`. Icecast configuration can be found on `live0` at `/etc/icecast2/icecast.xml`. It was okay to run this command directly on `live0` in 2020, since that kept the speed at roughly 1x.
+
+ while true; do ffmpeg -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx $main480p done
+
+
+### Shortly before the presentation
+
+- Speaker checks in via IRC ~30m before
+- CHECK directs speaker to available room
+- Speaker joins talk room
+- CHECK makes speaker presenter and moderator, does last-minute tech check
+ - Hello, thanks
+ - Speaker tries screen sharing and webcam
+ - check screen readability
+ - CHECK briefs speaker on process, including:
+ - confirming preferences:
+ - prerec / live talk
+ - live Q&A / IRC / no Q&A
+ - live Q&A: reading questions themselves (can do in any order, can skip) or asking STREAM to read questions to them
+ - encouragement of webcam, although it's optional
+ - how STREAM will join and then give them the go-ahead
+ - closing any tabs watching the stream as their talk starts (otherwise the audio is confusing)
+ - starting with saying their name clearly and doing a quick intro to their talk
+- CHECK notifies STREAM with link to the talk room and preferences for prerec or live talk, live Q&A / IRC / no Q&A
+- STREAM joins meeting and gives go-ahead
+- CHECK starts recording in BBB
+- CHECK announces on IRC
+- PAD clears the pad colours and updates timestamp
+
+
+### During the presentation
+
+- OR:
+ - Live presentation?
+ - Speaker presents, keeping an eye on the collaborative pad for questions
+ - STREAM stays with speaker to stream and to help with questions and timing
+ - Prerecorded? STREAM plays prerecorded video on computer
+ - Streamed live from somewhere else?
+ - Make sure to have a separate way to communicate (ex: IRC)
+- OTHER keeps an eye on audio levels and tells STREAM if adjustments are needed
+- If there is another speaker, CHECK moves to next room for setup
+- OTHER moves past prerecs to public directory (maybe even current?)
+ - (It would be pretty cool if we can figure out how to make the previous talks available for watching)
+
+
+### Q&A
+
+- STREAM joins speaker's room if not already there
+- STREAM gives go-ahead to start Q&A
+- Speaker reads questions off the pad or gets questions from STREAM
+- Time is indicated by having an organizer type into the Etherpad, or speaking up if needed
+- If moderation is needed, organizers add a reminder that speakers can choose to skip questions or answer in any order
+- STREAM goes to next talk when ready
+
+
+### Lunch break
+
+- STREAM plays music
+- STREAM quickly highlights `#emacsconf-accessible`, Etherpad, notes
+
+
+### Scenarios
+
+
+#### Prerecorded presentations
+
+- STREAM will play it on the computer and stream from there (or ideally, send it directly to the stream)
+
+
+#### Tech issues
+
+- If can't be easily resolved, play pre-recorded talk early and try again later (or follow up)
+- Stream a technical issues slide to the end point
+
+
+### Code for ERC
+
+
+#### Load data
+
+ (defvar conf/info nil "List of plists with the following keys: `:talk-id', `:name', `:speakers', and other info.") ; Set from submissions.org
+
+
+#### Announce topics
+
+ (defmacro conf/erc-with-channels (channel-list &rest forms)
+ (declare (indent 1) (debug (form form body)))
+ `(mapcar (lambda (channel)
+ (with-current-buffer (erc-get-buffer channel)
+ ,@forms))
+ ,channel-list))
+
+ (defun conf/get-room (room)
+ (cadr (assoc (upcase room) conf/rooms)))
+
+ (defun erc-cmd-CONFTOPIC (&rest message)
+ "Set the topic to MESSAGE | template in the conference channels.
+ If MESSAGE is not specified, reset the topic to the template."
+ (mapc (lambda (template)
+ (with-current-buffer (erc-get-buffer (car template))
+ (erc-cmd-TOPIC (if message (concat (if (stringp message) message (s-join " " message)) " | " (cadr template))
+ (cadr template)))))
+ conf/topic-templates))
+
+ (defun erc-cmd-CHECKIN (room nick)
+ "Send instructions for ROOM and `conf/collaborative-pad' to NICK."
+ (let ((room-url (conf/get-room room)))
+ (unless room-url (error "Please specify nick and room name"))
+ (erc-send-message (format "%s: Thanks for checking in! I'll send you some private messages with the instructions for room %s, so please check there. (Let me know if you don't get them!)" nick
+ (upcase room)))
+ (erc-message "PRIVMSG" (format "%s You can use this BBB room for your presentation: %s . I'll join you there shortly to set up the room and do the last-minute tech check." nick room-url))
+ (erc-message "PRIVMSG" (format "%s The collaborative pad we'll be using for questions is at %s . We'll collect questions from #emacsconf and put them there. If you'd like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you." nick conf/collaborative-pad))
+ (erc-message "PRIVMSG" (format "%s Amin will join when it's time for your presentation, and he will give you the go-ahead when it's time to present. See you in the BBB room!" nick))))
+
+ (defun erc-cmd-READY (code &rest filter)
+ "Notify #emacsconf-org and `conf/streaming-nick' that CODE is ready for the talk specified by FILTER.
+ FILTER can be the talk ID or strings to match against the title or speaker names."
+ (let ((room-url (conf/get-room code))
+ (talk (conf/find-talk filter)))
+ (unless room-url (error "Could not find room"))
+ (unless talk (error "Could not find talk"))
+ (with-current-buffer (erc-get-buffer "#emacsconf-org")
+ (erc-send-message (format "Ready in Room %s: %s (%s)"
+ (upcase code)
+ (plist-get talk :title)
+ (plist-get talk :speakers))))
+ (erc-message "PRIVMSG"
+ (format "%s Ready in Room %s ( %s ): %s (%s)"
+ conf/streaming-nick
+ (upcase code)
+ room-url
+ (plist-get talk :title)
+ (plist-get talk :speakers)))))
+
+ (defun erc-cmd-ANNOUNCE (&rest filter)
+ "Set the channel topics to announce the talk specified by FILTER.
+ FILTER can be the talk ID or strings to match against the title or speaker names."
+ (let ((info (conf/find-talk filter)) message)
+ (unless info (error "Could not find talk."))
+ (erc-cmd-CONFTOPIC (format "talk%s: %s (%s)"
+ (plist-get info :talk-id)
+ (plist-get info :title)
+ (plist-get info :speakers)))))
+
+ (defun erc-cmd-BROADCAST (&rest message)
+ "Say MESSAGE in all the conference channels."
+ (conf/erc-with-channels (mapcar 'car conf/topic-templates)
+ (erc-send-message (s-join " " message))))
+
+
+## After the conference
+
+
+### Convert pad, copy sections to individual pages
+
+This makes the links available right away
+
+
+### Split individual files
+
+Post to individual pages, and make a talks page with durations. Change individual schedule pages to redirect to talks (or start there in the first place).
+
+Announcement example: <https://lists.gnu.org/r/emacsconf-discuss/2020-12/msg00000.html>
+
+
+#### Splitting up the stream recording into individual files
+
+NOTE: ffmpeg has a hard time splitting with -c:v copy unless it's on a
+keyframe boundary. If it isn't on a keyframe, then you'll have a few
+seconds of black video until the next keyframe kicks in.
+
+Here's an example of what we had for splitting.
+
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 13:04 -to 20:08 -c:a copy -c:v copy emacsconf-2020--00-opening-remarks.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 27:24 -to 51:39 -c:a copy -c:v copy emacsconf-2020--03-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 1:00:08 -to 1:09:22 -c:a copy -c:v copy emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 1:41:28 -to 1:55:13 -c:a copy -c:v copy emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 1:57:24 -to 2:11:05 -c:a copy -c:v copy emacsconf-2020--06-trivial-emacs-kits--corwin-brust.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 2:32:00 -to 2:36:35 -c:a copy -c:v copy emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 4:55:00 -to 5:11:38 -c:a copy -c:v copy emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 5:47:44 -to 6:04:17 -c:a copy -c:v copy emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 6:06:00 -to 6:27:56 -c:a copy -c:v copy emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 7:24:00 -to 7:27:09.50 -c:a copy -c:v copy emacsconf-2020--40-closing-remarks-part-1.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 7:28:00 -to 7:50:50 -c:a copy -c:v copy emacsconf-2020--20-omg-macros--corwin-brust.webm
+
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 15:40 -to 27:27 -c:a copy -c:v copy emacsconf-2020--41-opening-remarks.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 34:48 -to 1:03:54.75 -c:a copy -c:v copy emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 1:30:40 -to 1:49:18 -c:a copy -c:v copy emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 4:33:04 -to 4:37:30 -c:a copy -c:v copy emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 4:50:00 -to 5:59:30 -c:a copy -c:v copy emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 6:08:20 -to 6:12:42.40 -c:a copy -c:v copy emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 6:25:18 -to 6:31:04.90 -c:a copy -c:v copy emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 6:58:20 -to 7:20:38 -c:a copy -c:v copy emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 6:58:20 -to 7:20:38 -c:a copy -c:v copy emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 7:55:44 -to 8:02:02 -c:a copy -c:v copy emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 8:03:32 -to 8:40:01.10 -c:a copy -c:v copy emacsconf-2020--42-closing-remarks.webm
+
+This fiddles with the `-ss` to make it divisible by 4. Run this code before a copy of the ffmpeg scripts (adjusting the value of adjust as needed) and it will show only the lines that need tweaking.
+
+ (save-excursion
+ (while (re-search-forward "^ffmpeg.*?-ss +\\([^ ]++?\\) +.*$" nil t)
+ (let* ((adjust 4)
+ (from (save-match-data
+ (let ((s (match-string 1)) num)
+ (if (string-match "\\(\\([0-9]+\\):\\)?\\([0-9]+\\):\\([0-9]+\\)\\(.[0-9]+\\)?" s)
+ (progn
+ (setq num
+ (+ (* 3600 (string-to-number (or (match-string 2 s) "0")))
+ (* 60 (string-to-number (or (match-string 3 s) "0")))
+ (string-to-number (or (match-string 4 s) "0"))
+ (string-to-number (concat "0" (or (match-string 5 s) "")))))
+ (if (> (% num adjust) 0)
+ (number-to-string (- num (% num adjust)))
+ nil))
+ s)))))
+ (if from
+ (replace-match from nil nil nil 1)
+ (replace-match "")))))
+
+Thanks to SirVolta and bandali for figuring out keyframe issue!
+
+Further reading:
+
+(all links work with LibreJS enabled)
+<https://blog.video.ibm.com/streaming-video-tips/keyframes-interframe-video-compression/>
+<https://blog.streamspot.com/blog/compression-codecs-keyframes-and-the-basics-of-stream-quality>
+<https://blog.superuser.com/2012/02/24/ffmpeg-the-ultimate-video-and-audio-manipulation-tool/>
+<https://superuser.com/questions/138331/using-ffmpeg-to-cut-up-video>
+<http://blog.webmproject.org/2010/05/inside-webm-technology-vp8-alternate.html>
+
+
+### Collect speaker feedback
+
+Another collaborative pad
+
+
+### Encode highly-compressed versions
+
+Thanks to ArneBab for this ffmpeg script which is now documented in [Extreme compression of Video with VP9 (webm) using ffmpeg](https://www.draketo.de/software/ffmpeg-compression-vp9-av1). We modified it to keep the original audio.
+
+Usage: compress-video.sh input-filename.webm output-filename.webm
+
+ Q=56
+ nice ffmpeg -y -i $1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ nice ffmpeg -y -i $1 -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 $2
+
+Here's the original version which compresses audio too. Usage: compress-video-compressed-audio.sh input-filename.webm output-filename.webm
+
+ Q=56
+ nice ffmpeg -y -i $1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 999 -pass 1 -f webm -threads 8 /dev/null &&
+ nice ffmpeg -y -i $1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -c:a libopus -b:a 12k -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 999 -threads 8 $2
+
+
+### Upload to alternative video hosting platforms once main announcement has been out for a few days
+
+- Create playlist, too
+- Try to do Peertube via Toobnix first (bandali's in charge)
+
+
+### Add subtitles
+
+Take advantage of provided scripts or autogenerated files
+
+
+#### Code sachac used to move sbv files from the Downloads directory
+
+Autogenerated captions can save a bit of time when setting up
+captions. This code renames a downloaded file to match the current
+file's naming scheme and moves it to the right directory.
+
+ (defvar conf/subtitle-directory (expand-file-name "subtitles" default-directory) "Directory where subtitles will be kept.")
+ (defvar conf/download-directory "~/Downloads" "Directory where downloaded files are saved.")
+
+ (defun my/latest-file (path &optional filter)
+ "Returns the newest file in PATH.
+ If FILTER is specified, files should match this regex."
+ (car (sort (seq-remove #'file-directory-p (directory-files path 'full filter t)) #'file-newer-than-file-p)))
+ (defun my/rename-latest-download-as-subtitle-file ()
+ "Rename the most recent downloaded file to match the current file and move it to `conf/subtitle-directory'.
+ To use this, open a Dired buffer with a list of the correctly-named
+ videos. Move your cursor to the line for the video that you have just
+ downloaded captions for, then call `my/rename-latest-download-as-subtitle-file.'"
+ (interactive)
+ (let* ((file (my/latest-file conf/download-directory))
+ (new-file (expand-file-name (concat (file-name-base (dired-get-filename)) "-autogen." (file-name-extension file)) conf/subtitle-directory)))
+ (rename-file file new-file t)
+ (message "%s" new-file)))
+ ;; Ex: (local-set-key [f5] 'my/rename-latest-download)
+
+To convert from SBV to VTT (used for the HTML5 video player) and fix
+timestamps so that they're not overlapping, install `python3-webtt`
+and run <subtitles/fix.py> like this: `fix.py
+ emacsconf-2020--04-music-in-plain-text--jonathan-gregory.sbv`.
+
+
+### Add transcript sections
+
+ (defvar conf/wiki-directory "~/vendor/emacsconf-wiki" "Directory that has the public conference wiki.")
+
+ (defmacro conf/with-talk-info-file (talk &rest body)
+ "Evaluate BODY in the info file for TALK.
+ If TALK is not specified, do it in the current buffer."
+ (declare (indent 1))
+ `(if ,talk
+ (with-current-buffer
+ (find-file-noselect
+ (expand-file-name (format "%d/info/%s.md" conf/year
+ (plist-get talk :talk-id))
+ conf/wiki-directory))
+ ,@body)
+ ,@body))
+
+ (defun conf/add-transcript (&optional talk)
+ "Try to add transcript for the current talk."
+ (interactive)
+ (conf/with-talk-info-file talk
+ (goto-char (point-min))
+ (let (subtitles subed-auto-find-video all)
+ (while (re-search-forward "subtitles=\"/\\(.+?\\)\"" nil t)
+ (setq subtitles (cons (match-string 1) subtitles))
+ (when (re-search-forward "^$\\|\\[View transcript" nil t)
+ (unless (string= (match-string 0) "[View transcript")
+ (insert
+ (if (string-match "questions" (car subtitles))
+ "[View transcript for Q&A](#transcript-questions)\n"
+ "[View transcript](#transcript)\n")))))
+ (when subtitles
+ (mapc
+ (lambda (subtitle-file)
+ (with-current-buffer (find-file-noselect (expand-file-name subtitle-file conf/wiki-directory))
+ (goto-char (point-min))
+ (subed-mode)
+ (let (text)
+ (while (subed-forward-subtitle-text)
+ (setq text (cons (subed-subtitle-text) text)))
+ (setq all (mapconcat 'identity (reverse text) "\n"))))
+ (if (re-search-forward (format "<!-- transcript: %s -->[ \t]*\n\\([.\r\n]*?\\)<!-- /transcript -->" (regexp-quote subtitle-file)) nil t)
+ (progn
+ (goto-char (match-beginning 1))
+ (delete-region (match-beginning 1) (match-end 1)))
+ (goto-char (point-max))
+ (insert (format "\n\n<!-- transcript: %s -->\n\n" subtitle-file))
+ (insert (if (string-match "questions" subtitle-file)
+ "<a name=\"transcript-questions\"></a>\n# Transcript: Q&A\n\n"
+ "<a name=\"transcript\"></a>\n# Transcript\n\n"))
+ (save-excursion (insert "\n\n<!-- /transcript -->\n")))
+ (save-excursion (insert all)))
+ (reverse subtitles))))))
+
+ ;; (conf/add-transcript (conf/find-talk "03")), or call from a talk info page
+
+
+# Other useful tidbits
+
+
+## Translating timezones
+
+ (setq my/timezones '("America/Toronto" "America/Los_Angeles" "UTC" "Europe/Berlin" "Asia/Kolkata" "Asia/Shanghai" "Asia/Singapore"))
+ (defun my/summarize-times (time timezones)
+ (let (prev-day)
+ (mapconcat
+ (lambda (tz)
+ (let ((cur-day (format-time-string "%a %b %-e" time tz))
+ (cur-time (format-time-string "%H%MH %Z" time tz)))
+ (if (equal prev-day cur-day)
+ cur-time
+ (setq prev-day cur-day)
+ (concat cur-day " " cur-time))))
+ (sort timezones (lambda (a b) (< (car (current-time-zone nil a)) (car (current-time-zone nil b)))))
+ " / ")))
+ (defun my/org-summarize-event-in-timezones ()
+ (interactive)
+ (save-window-excursion
+ (save-excursion
+ (when (derived-mode-p 'org-agenda-mode) (org-agenda-goto))
+ (when (re-search-forward org-element--timestamp-regexp nil (save-excursion (org-end-of-subtree) (point)))
+ (goto-char (match-beginning 0))
+ (let* ((times (org-element-timestamp-parser))
+ (start-time (org-timestamp-to-time (org-timestamp-split-range times)))
+ (msg (format "%s - %s - %s"
+ (org-get-heading t t t t)
+ (my/summarize-times start-time my/timezones)
+ ;; (cond
+ ;; ((time-less-p (org-timestamp-to-time (org-timestamp-split-range times t)) (current-time))
+ ;; "(past)")
+ ;; ((time-less-p (current-time) start-time)
+ ;; (concat "in " (format-seconds "%D %H %M%Z" (time-subtract start-time (current-time)))))
+ ;; (t "(ongoing)"))
+ (org-entry-get (point) "LOCATION"))))
+ (message "%s" msg)
+ (kill-new msg))))))
+
+
+## Restarting ikiwiki manually
+
+This is needed when you change the template or if the ikiwiki process gets stuck on something.
+
+ ssh front 'sudo -iu ikiwiki ikiwiki --setup ~ikiwiki/emacsconf.setup'
+
diff --git a/2020/organizers-notebook.org b/2020/organizers-notebook.org
new file mode 100644
index 00000000..b2a2f355
--- /dev/null
+++ b/2020/organizers-notebook.org
@@ -0,0 +1,910 @@
+#+todo: TODO(t) INPROGRESS(i) | DONE(d) CANCELLED(c)
+#+OPTIONS: h:6 toc:nil
+#+PROPERTY: header-args :results silent :exports code :tangle yes
+
+#+begin_export md
+<!-- automatically generated from organizers-notebook.org. Please edit that file instead. -->
+[[!toc levels=4]]
+#+end_export
+
+- [[elisp:(progn (org-md-export-to-markdown) (org-babel-tangle))][Export and tangle]]
+- [[elisp:(org-babel-execute-buffer)][Execute buffer]]
+
+* Tasks
+** Manually transcribe
+Either subtitles (with timestamps) or a text transcript (no timestamps) is perfectly okay.
+- [ ] sachac: emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm
+- [X] sachac: emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.webm
+- [X] sachac: emacsconf-2020--10-lead-your-future-with-org--andrea.webm
+ Added transcript to info/10.md, seeing if YouTube can automatically
+ assign timing. Took about 24 minutes to transcribe 8 minute talk. If
+ it doesn't work out, I might manually time it. ... It worked!
+- [ ] zaeph: emacsconf-2020--24-analyze-code-quality-through-emacs-a-smart-forensics-approach-and-the-story-of-a-hack--andrea.webm
+
+** Edit automatic subtitles
+
+To reduce duplication of work, make sure you have the latest copy of organizers-notebook.org. Mark the one you
+want to do by prepending your name to the TODO title, and commit
+organizers-notebook.org back to the repo.
+
+I modified the =subed= package to work with VTT files. The modified version is at https://github.com/sachac/subed/tree/subed-vtt , and I've submitted a pull request. It's pretty cool! If you copy the webm to the same directory and name it with the same filename (except ending in .webm instead of .vtt, of course), subed will automatically synchronize as you move through the subtitles. [[https://sachachua.com/blog/2020/12/editing-subtitles-in-emacs-with-subed-with-synchronized-video-playback-through-mpv/][Demo]]
+
+- [ ] [[./subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai-autogen.vtt]]
+ See [[file:info/03/screenplay.fountain]]
+- [X] sachac [[./subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--14-readme-driven-design--adam-ard-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita-autogen.vtt]]
+- [X] sachac [[./info/16.md]] [[./subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt]]
+- [X] sachac [[./info/17.md]] [[./subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt]]
+- [X] sachac [[./info/18.md]] [[./subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt]]
+- [X] sachac [[./info/19.md]] [[./subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt]]
+- [X] sachac [[./info/20.md]] [[./subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt]]
+- [X] sachac [[./info/21.md]] [[./subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy-autogen.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang-autogen.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt]]
+- [X] sachac [[./subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann-autogen.vtt]]
+- [ ] sachac [[./subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo-autogen.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt]]
+- [ ] bhavin192 [[./subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt]]
+- [ ] bhavin192 [[./subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt]]
+- [ ] bhavin192 [[./subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng-autogen.vtt]]
+- [X] bhavin192 [[./info/35.md]] [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer-autogen.vtt]]
+- [X] bhavin192 [[./info/35.md]] [[./subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer-autogen.vtt]]
+- [X] bhavin192 [[./info/38.md]] [[./subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt]]
+- [X] bhavin192 [[./info/39.md]] [[./subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt]]
+- [X] bhavin192 [[./info/39.md]] [[./subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt]]
+- [ ] [[./subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt]]
+
+* Assumptions and settings
+
+Note that re-evaluating a defvar won't change the value, so if you want to change the value after this is already loaded, use =(setq ...)=.
+
+#+begin_src emacs-lisp
+(defvar conf/year 2020 "Year of conference.")
+(defvar conf/buffer-minutes 3 "Number of minutes to use as a buffer between talks.")
+(defvar conf/timezones '("EST" "America/Los_Angeles" "UTC" "CET" "Asia/Singapore") "List of timezones")
+(defvar conf/autogenerate-talk-pages nil "Set this to t at the beginning of the conference, when we're still autogenerating individual talk pages.
+Otherwise you might overwrite hand-edited talk pages.")
+(defvar conf/collaborative-pad "https://etherpad.wikimedia.org/p/emacsconf-2020" "URL of collaborative pad.")
+(defvar conf/streaming-nick "bandali" "IRC nick of main organizer in charge of streaming.")
+(defvar conf/topic-templates nil "List of (channel topic-template) entries for mass-setting channel topics.")
+(defvar conf/rooms '(("A" "http://example.org?room=a")
+ ("B" "http://example.org?room=b")
+ ("C" "http://example.org?room=c"))
+ "List of (code join-url) entries. Room codes should be uppercase.") ; actually set this in organizers' wiki index.org
+(setq conf/topic-templates
+ '(("#emacsconf" "EmacsConf 2020 is over, thanks for joining! | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates")
+ ("#emacsconf-accessible" "EmacsConf 2020 is over. Thanks for making it more accessible! | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates")
+ ("#emacsconf-org" "EmacsConf2020 is over, thanks for joining! | Dedicated channel for EmacsConf organizers and speakers | this is intended as an internal, low-traffic channel; for main discussion around EmacsConf, please join #emacsconf | Subscribe to https://lists.gnu.org/mailman/listinfo/emacsconf-discuss for updates")))
+#+end_src
+
+* Workflows
+
+STREAM - main organizer, CHECK - secondary organizer or volunteer, PAD - organizer focusing on pad
+
+** Planning
+
+- Collect e-mail addresses of accepted speakers into a list for easy pasting into Bcc (organizers' private wiki)
+- See submissions.org for Org scheduling code; 3 minutes of buffer was okay last time, but more would be better for Q&A; opening remarks time could be trimmed
+
+*** Code for scheduling
+#+begin_src emacs-lisp :exports code :results none
+(defun conf/get-talk-info ()
+ (let (talk results)
+ (org-map-entries (lambda ()
+ (let ((heading (org-heading-components)))
+ (cond
+ ((and (elt heading 2) (or (null talk)
+ (<= (car heading)
+ (plist-get talk :level)))) ;; has a todo, therefore is a talk
+ (when talk (setq results (cons talk results)))
+ (setq talk (list
+ :type 'talk
+ :title (elt heading 4)
+ :talk-id (org-entry-get (point) "TALK_ID")
+ :status (elt heading 2)
+ :level (car heading)
+ :scheduled (org-entry-get (point) "SCHEDULED")
+ :duration (org-entry-get (point) "DURATION")
+ :time (org-entry-get (point) "MIN_TIME")
+ :speakers (org-entry-get (point) "NAME"))))
+ ((string-match "^ *Talk information *$" (elt heading 4))
+ (plist-put talk :info
+ (org-export-as 'md t nil t)))
+ ((or (null talk) (< (car heading) (plist-get talk :level))) ;; heading above
+ (when talk
+ (setq results (cons talk results))
+ (setq talk nil))
+ (setq results (cons
+ (list :type 'headline
+ :level (car heading)
+ :speakers (org-entry-get (point) "NAME")
+ :duration (org-entry-get (point) "DURATION")
+ :talk-id (org-entry-get (point) "TALK_ID")
+ :title (elt heading 4)
+ :scheduled (org-entry-get (point) "SCHEDULED"))
+ results))))))
+ nil 'tree)
+ (when talk (setq results (cons talk results)))
+ (reverse results)))
+
+(defun conf/filter-talks (list)
+ "Return only talk info in LIST."
+ (seq-filter
+ (lambda (talk) (eq (plist-get talk :type) 'talk))
+ list))
+
+(defun conf/get-talk-info-from-file (&optional filename)
+ (with-temp-buffer
+ (insert-file-contents (or filename "submissions.org"))
+ (org-mode)
+ (org-show-all)
+ (goto-char (point-min))
+ (goto-char (org-find-property "ID" "talks"))
+ (conf/get-talk-info)))
+
+
+(defun conf/find-talk (filter &optional info)
+ (setq info (or info (conf/filter-talks conf/info)))
+ (when (stringp filter) (setq filter (list filter)))
+ (or (seq-find (lambda (o) (string= (plist-get o :talk-id) (car filter))) info)
+ (seq-find (lambda (o)
+ (let ((case-fold-search t)
+ (all (mapconcat (lambda (f) (plist-get o f)) '(:title :speakers :talk-id) " ")))
+ (null (seq-contains-p
+ (mapcar (lambda (condition) (string-match condition all)) filter)
+ nil))))
+ info)))
+
+(defun conf/goto-talk-id (id)
+ (goto-char (org-find-property "TALK_ID" id)))
+
+(defun conf/assign-ids ()
+ "Assign numeric talk IDs."
+ (interactive)
+ (goto-char (point-min))
+ ;; Determine the maximum ID assigned so far
+ (let ((id
+ (1+
+ (apply 'max
+ (or (mapcar
+ 'string-to-number
+ (org-map-entries
+ (lambda ()
+ (let ((org-trust-scanner-tags t))
+ (org-entry-get (point) "TALK_ID"))) "TALK_ID>0" 'file))
+ '(0))))))
+ (goto-char (point-min))
+ (while (re-search-forward "^ *:NAME: " nil t)
+ (unless (org-entry-get (point) "TALK_ID")
+ (org-set-property "TALK_ID" (format "%02d" id))
+ (org-set-property "CUSTOM_ID" (format "talk%02d" id))
+ (setq id (1+ id))))))
+
+(defun conf/update-talks ()
+ "Update times, tables, and schedules."
+ (interactive)
+ (save-excursion
+ (conf/update-times)
+ (conf/update-tables)
+ (conf/update-schedules)))
+
+(defun conf/update-times ()
+ "Check whether we need more time or less time based on TARGET_TIME and MIN_TIME_SUM."
+ (goto-char (point-min))
+ (org-map-entries
+ (lambda ()
+ (when (org-entry-get (point) "TARGET_TIME")
+ (conf/org-sum-min-time-in-subtree)
+ (org-entry-put
+ (point)
+ "DIFFERENCE"
+ (let ((diff
+ (-
+ (string-to-number (org-entry-get (point) "TARGET_TIME"))
+ (string-to-number (org-entry-get (point) "MIN_TIME_SUM")))))
+ (cond
+ ((> diff 0) (format "Extra: %d" diff))
+ ((< diff 0) (format "Needs: %d" (- diff)))
+ (t "")))))) nil 'file))
+
+(defun conf/update-tables ()
+ "Update the time checks and table reports."
+ (goto-char (point-min))
+ (while (re-search-forward "#\\+CALL: check_time()" nil t)
+ (org-ctrl-c-ctrl-c))
+ (goto-char (point-min))
+ (while (re-search-forward "#\\+BEGIN: columnview" nil t)
+ (org-ctrl-c-ctrl-c)))
+
+(defun conf/update-schedules ()
+ "Schedule the talks based on the MIN_TIME and 3 minutes of buffer.
+Talks with a FIXED_TIME property are not moved."
+ (interactive)
+ (goto-char (org-find-exact-headline-in-buffer "Talks"))
+ (let (current-time scheduled end-time duration (buffer (seconds-to-time (* conf/buffer-minutes 60)))) ;; assumption: 3 minutes between talks
+ (org-map-entries (lambda ()
+ (if (org-entry-get (point) "FIXED_TIME")
+ (setq current-time (org-get-scheduled-time (point))))
+ (when (org-entry-get (point) "MIN_TIME")
+ (setq duration (* (string-to-number (org-entry-get (point) "MIN_TIME")) 60)
+ end-time (time-add current-time (seconds-to-time duration)))
+ (org-set-property "SCHEDULED" (format "%s-%s" (org-format-time-string "%Y-%m-%d %H:%M" current-time)
+ (org-format-time-string "%H:%M" end-time)))
+ (setq current-time (time-add end-time buffer))))
+ nil 'tree)))
+
+(defun conf/org-sum-min-time-in-subtree ()
+ "Add up all the MIN_TIME properties of headings underneath the current one
+The total is written to the MIN_TIME_SUM property of this heading"
+ (interactive)
+ (org-entry-put
+ (point)
+ "MIN_TIME_SUM"
+ (save-excursion
+ (format "%d"
+ (apply
+ '+
+ (mapcar 'string-to-number
+ (delq nil
+ (org-map-entries
+ (lambda () (org-entry-get (point) "MIN_TIME")) nil 'tree))))))))
+
+#+end_src
+
+*** Generate schedule file
+
+ #+begin_src emacs-lisp :results none :eval yes :exports code :tangle "conf.el"
+ (defun conf/format-talk-link (talk)
+ (and talk (if (plist-get talk :talk-id)
+ (format "<a href=\"/%d/talks/%s\">%s</a>"
+ year
+ (plist-get talk :talk-id)
+ (plist-get talk :title))
+ (plist-get talk :title))))
+
+ (defun conf/format-talk-info-as-schedule (info)
+ (format "<table width=\"100%%\">%s</table>"
+ (mapconcat
+ (lambda (o)
+ (let* ((time-fmt "%l:%M %p")
+ (timestamp (org-timestamp-from-string (plist-get o :scheduled)))
+ (start (if timestamp (format-time-string time-fmt (org-timestamp-to-time (org-timestamp-split-range timestamp))) ""))
+ (end (if timestamp (format-time-string time-fmt (org-timestamp-to-time (org-timestamp-split-range timestamp t))) ""))
+ (title (plist-get o :title))
+ (speakers (plist-get o :speakers)))
+ (if (eq (plist-get o :type) 'headline)
+ (format "<tr><td colspan=\"4\"><strong>%s<strong></td></tr>"
+ (if (plist-get o :talk-id)
+ (conf/format-talk-link o)
+ title))
+ (format "<tr><td width=100>~%s</td><td width=100>~%s</td><td>%s</td><td>%s</td></tr>"
+ start end (conf/format-talk-link o) speakers))))
+ (cdr info) "\n")))
+
+ (defun conf/filter-talks (info)
+ (seq-filter (lambda (o) (plist-get o :talk-id)) info))
+
+ (defun conf/split-out-talk-information ()
+ (interactive)
+ (let ((talks (conf/filter-talks conf/info)))
+ (mapc (lambda (o)
+ (with-temp-buffer
+ (insert
+ (format "# %s\n%s\n\n%s"
+ (plist-get o :title)
+ (plist-get o :speakers)
+ (plist-get o :info)))
+ (write-file (expand-file-name (format "%s.md" (plist-get o :talk-id)) "info"))))
+ talks)))
+
+ (defun conf/format-talk-pages (info)
+ (let* ((talks (conf/filter-talks info))
+ (next-talks (cdr talks))
+ (prev-talks (cons nil talks)))
+ (mapc (lambda (o)
+ (with-temp-buffer
+ (let* ((timestamp (org-timestamp-from-string (plist-get o :scheduled)))
+ (next-talk (conf/format-talk-link (pop next-talks)))
+ (prev-talk (conf/format-talk-link (pop prev-talks)))
+ (schedule (mapconcat
+ (lambda (tz)
+ (format "%s - %s"
+ (format-time-string "%A, %b %e %Y, ~%l:%M %p"
+ (org-timestamp-to-time (org-timestamp-split-range timestamp)) tz)
+ (format-time-string "%l:%M %p %Z"
+ (org-timestamp-to-time (org-timestamp-split-range timestamp t)) tz)))
+ conf/timezones
+ " \n"))
+ (nav-links (format "Back to the [[schedule]] \n%s%s"
+ (if prev-talk (format "Previous: %s \n" prev-talk) "")
+ (if next-talk (format "Next: %s \n" next-talk) ""))))
+ (insert (format "[[%s title=\"%s\"]]
+ [[%s copyright=\"Copyright &copy; %s %s\"]]
+
+ <!-- To edit the talk information, change info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->\n
+
+ %s
+
+ [[!inline pages=\"internal(%s/info/%s)\" raw=\"yes\"]]
+
+ %s
+
+ %s
+
+ "
+ "!meta"
+ (replace-regexp-in-string "\"" "\\\\\"" (plist-get o :title))
+ "!meta"
+ conf/year
+ (plist-get o :speakers)
+ nav-links
+ conf/year
+ (plist-get o :talk-id)
+ schedule
+ nav-links)))
+ (write-file (format "talks/%s.md" (plist-get o :talk-id)))))
+ talks)))
+
+ (defun conf/generate-pad-template ()
+ "Generate a template for copying and pasting into the pad.
+ Writes it to pad-template.html."
+ (interactive "p")
+ (let* ((talks (conf/filter-talks conf/info))
+ (text (concat
+ "<p>Conference info, how to watch/participate: https://emacsconf.org/2020/<br />
+ Guidelines for conduct: https://emacsconf.org/conduct/</p>
+
+ <p>Except where otherwise noted, the material on the EmacsConf pad are dual-licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International Public License; and the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) an later version.
+ Copies of these two licenses are included in the EmacsConf wiki repository, in the COPYING.GPL and COPYING.CC-BY-SA files (https://emacsconf.org/COPYING/).</p>
+
+ <p>By contributing to this pad, you agree to make your contributions available under the above licenses. You are also promising that you are the author of your changes, or that you copied them from a work in the public domain or a work released under a free license that is compatible with the above two licenses. DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION.</p>
+
+ <p>
+ This pad is here to be curated by everybody and its rough structure is like this:
+ <ol><li>General info and license
+ <li>A section for each talk -> please do add questions and notes
+ <li>A general feedback section
+ </ol>
+ </p>
+ "
+ (mapconcat
+ (lambda (o)
+ (let ((url (format "https://emacsconf.org/%s/schedule/%s" conf/year (plist-get o :talk-id))))
+ (format "-------------------------------------------------------------------------------------------------<br/><strong>Talk%s: %s</strong><br />
+ Speaker(s): %s<br />
+ Talk page: <a href=\"%s\">%s</a><br />
+ Actual start of talk EST: &nbsp;&nbsp;&nbsp; Start of Q&A: &nbsp;&nbsp; End of Q&A: &nbsp;&nbsp;<br />
+ <strong>Questions:</strong>
+ Speakers may answer in any order or skip questions. As much as possible, put your questions at the top level instead of under another question. If adding an answer, please indicate [speaker] or your nick accordingly. Volunteers, please add new slots as ones get filled.<br />
+ <ul>
+ <li>Q1:&nbsp;<ul><li>A:&nbsp;</li></ul></li>
+ <li>Q2:&nbsp;<ul><li>A:&nbsp;</li></ul></li>
+ <li>Q3:&nbsp;<ul><li>A:&nbsp;</li></ul></li>
+ <li>Q4:&nbsp;<ul><li>A:&nbsp;</li></ul></li>
+ </ul>
+
+ <strong>Links and other notes:</strong>
+ <ul>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ </ul>
+ " (plist-get o :talk-id) (plist-get o :title) (plist-get o :speakers) url url))) talks "<br/><br/>\n")
+ "<br/><br/>-------------------------------------------------------------------------------------------------<br/>
+ <strong>General Feedback: What went well?</strong><br/><br/>
+ <ul>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ </ul>
+ <br /><br />
+ -------------------------------------------------------------------------------------------------<br/>
+ <strong>General Feedback: What to improve?</strong><br/><br/>
+ <ul>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ <li>sample text</li>
+ </ul>
+ <br/><br/>
+ -------------------------------------------------------------------------------------------------<br/>
+ <strong>Colophon:</strong>
+ <ul></ul>")))
+ (with-current-buffer (find-file "pad-template.html")
+ (erase-buffer)
+ (insert text)
+ (save-buffer)))
+ (browse-url-of-file "pad-template.html"))
+
+ (defun conf/generate-talks-page ()
+ (let ((info conf/info))
+ (with-temp-buffer
+ (find-file "talk-details.md")
+ (erase-buffer)
+ (insert (format "<table><thead><th>Duration</th><th>Title</th><th>Speakers</th></thead><tbody>%s</tbody></table>"
+ (mapconcat
+ (lambda (o)
+ (let* ((title (plist-get o :title))
+ (speakers (plist-get o :speakers)))
+ (if (null (plist-get o :talk-id))
+ (format "<tr><td colspan=\"3\">%s</td></tr>" (conf/format-talk-link o))
+ (format "<tr><td>%s</td><td>%s</td><td>%s</td><tr>"
+ (plist-get o :duration)
+ (conf/format-talk-link o)
+ (plist-get o :speakers)))))
+ info "\n")))
+ (save-buffer))))
+
+ (defun conf/generate-schedule-files (&optional filename)
+ (interactive)
+ (with-temp-buffer
+ (insert (conf/format-talk-info-as-schedule conf/info))
+ (write-file "schedule-details.md"))
+ (when conf/autogenerate-talk-pages (conf/format-talk-pages conf/info)))
+ #+end_src
+
+Set the info based on submissions.org.
+
+#+begin_src emacs-lisp
+(setq conf/info (conf/get-talk-info-from-file "submissions.org"))
+#+end_src
+
+ #+RESULTS:
+
+** Before the conference
+
+- Do tech checks and get alternative ways to contact speakers (phone number? IRC nick? Something that goes ding?)
+- Install Mute Tab extension if desired
+- Send encoding tips for prerecs
+- Normalize audio for prerecs
+- Ask speakers for prerecs, links, slides, other resources
+- Put prerecs in =orga@front0:~/prerecs= so that people can use mediainfo to check duration
+- Plan volunteer availability
+- Set up local icecast server and have live0 relay
+- Create individual talk pages and schedule.
+- Set up pad with Q1: Q2: Q3: Q4: slots: =conf/generate-pad-template=
+
+*** Tech check
+
+- Explain process
+- Test audio, webcam, screensharing, collaborative pad
+ - Music demos and other things that use system audio will need to be prerecorded (or done through virtual loopback device, maybe? Technical risk.)
+ - Multi-monitor setups might not be handled well by BBB; share window instead of desktop
+- Check if comfortable checking into IRC: #emacsconf-org
+- Get IRC nick, phone number for emergency contact, store in private wiki
+- Try to record name pronunciation
+- Encourage webcam for Q&A, although make it clear that it's totally optional
+- Possible picture-in-picture approach to maximize screen real estate
+ - Linux: share desktop, run cheese, set Always on Top
+
+** During the conference
+
+*** Start of streaming
+
+- STREAM starts streaming and has live0 relay
+- STREAM displays time on screen: =watch TZ=America/New_York date= ?
+- CHECK confirms stream and starts low-resolution mirror
+
+**** ffmpeg: mirror main stream to low-resolution stream
+
+ Needs the =$main480p= environment variable set to somethnig of the form =icecast://username:password@site:port/mount-point.webm=. Icecast configuration can be found on =live0= at =/etc/icecast2/icecast.xml=. It was okay to run this command directly on =live0= in 2020, since that kept the speed at roughly 1x.
+
+ #+begin_src sh :eval no
+ while true; do ffmpeg -f webm -reconnect_at_eof 1 -reconnect_streamed 1 -re -i http://localhost:8000/main.webm -vf scale=854:480 -f webm -c:a copy -b:v 500k -maxrate 1M -bufsize 1M -content_type video/webm -c:v libvpx $main480p done
+ #+end_src
+
+*** Shortly before the presentation
+
+- Speaker checks in via IRC ~30m before
+- CHECK directs speaker to available room
+- Speaker joins talk room
+- CHECK makes speaker presenter and moderator, does last-minute tech check
+ - Hello, thanks
+ - Speaker tries screen sharing and webcam
+ - check screen readability
+ - CHECK briefs speaker on process, including:
+ - confirming preferences:
+ - prerec / live talk
+ - live Q&A / IRC / no Q&A
+ - live Q&A: reading questions themselves (can do in any order, can skip) or asking STREAM to read questions to them
+ - encouragement of webcam, although it's optional
+ - how STREAM will join and then give them the go-ahead
+ - closing any tabs watching the stream as their talk starts (otherwise the audio is confusing)
+ - starting with saying their name clearly and doing a quick intro to their talk
+- CHECK notifies STREAM with link to the talk room and preferences for prerec or live talk, live Q&A / IRC / no Q&A
+- STREAM joins meeting and gives go-ahead
+- CHECK starts recording in BBB
+- CHECK announces on IRC
+- PAD clears the pad colours and updates timestamp
+
+*** During the presentation
+
+- OR:
+ - Live presentation?
+ - Speaker presents, keeping an eye on the collaborative pad for questions
+ - STREAM stays with speaker to stream and to help with questions and timing
+ - Prerecorded? STREAM plays prerecorded video on computer
+ - Streamed live from somewhere else?
+ - Make sure to have a separate way to communicate (ex: IRC)
+- OTHER keeps an eye on audio levels and tells STREAM if adjustments are needed
+- If there is another speaker, CHECK moves to next room for setup
+- OTHER moves past prerecs to public directory (maybe even current?)
+ - (It would be pretty cool if we can figure out how to make the previous talks available for watching)
+
+*** Q&A
+
+- STREAM joins speaker's room if not already there
+- STREAM gives go-ahead to start Q&A
+- Speaker reads questions off the pad or gets questions from STREAM
+- Time is indicated by having an organizer type into the Etherpad, or speaking up if needed
+- If moderation is needed, organizers add a reminder that speakers can choose to skip questions or answer in any order
+- STREAM goes to next talk when ready
+
+*** Lunch break
+
+- STREAM plays music
+- STREAM quickly highlights =#emacsconf-accessible=, Etherpad, notes
+
+*** Scenarios
+
+**** Prerecorded presentations
+
+- STREAM will play it on the computer and stream from there (or ideally, send it directly to the stream)
+
+**** Tech issues
+
+- If can't be easily resolved, play pre-recorded talk early and try again later (or follow up)
+- Stream a technical issues slide to the end point
+
+*** Code for ERC
+
+**** Load data
+
+ #+begin_src emacs-lisp :results silent
+ (defvar conf/info nil "List of plists with the following keys: `:talk-id', `:name', `:speakers', and other info.") ; Set from submissions.org
+ #+end_src
+
+**** Announce topics
+
+ #+begin_src emacs-lisp
+ (defmacro conf/erc-with-channels (channel-list &rest forms)
+ (declare (indent 1) (debug (form form body)))
+ `(mapcar (lambda (channel)
+ (with-current-buffer (erc-get-buffer channel)
+ ,@forms))
+ ,channel-list))
+
+ (defun conf/get-room (room)
+ (cadr (assoc (upcase room) conf/rooms)))
+
+ (defun erc-cmd-CONFTOPIC (&rest message)
+ "Set the topic to MESSAGE | template in the conference channels.
+ If MESSAGE is not specified, reset the topic to the template."
+ (mapc (lambda (template)
+ (with-current-buffer (erc-get-buffer (car template))
+ (erc-cmd-TOPIC (if message (concat (if (stringp message) message (s-join " " message)) " | " (cadr template))
+ (cadr template)))))
+ conf/topic-templates))
+
+ (defun erc-cmd-CHECKIN (room nick)
+ "Send instructions for ROOM and `conf/collaborative-pad' to NICK."
+ (let ((room-url (conf/get-room room)))
+ (unless room-url (error "Please specify nick and room name"))
+ (erc-send-message (format "%s: Thanks for checking in! I'll send you some private messages with the instructions for room %s, so please check there. (Let me know if you don't get them!)" nick
+ (upcase room)))
+ (erc-message "PRIVMSG" (format "%s You can use this BBB room for your presentation: %s . I'll join you there shortly to set up the room and do the last-minute tech check." nick room-url))
+ (erc-message "PRIVMSG" (format "%s The collaborative pad we'll be using for questions is at %s . We'll collect questions from #emacsconf and put them there. If you'd like to jump to your part of the document, you might be able to keep an eye on questions. Alternatively, we can read questions to you." nick conf/collaborative-pad))
+ (erc-message "PRIVMSG" (format "%s Amin will join when it's time for your presentation, and he will give you the go-ahead when it's time to present. See you in the BBB room!" nick))))
+
+ (defun erc-cmd-READY (code &rest filter)
+ "Notify #emacsconf-org and `conf/streaming-nick' that CODE is ready for the talk specified by FILTER.
+ FILTER can be the talk ID or strings to match against the title or speaker names."
+ (let ((room-url (conf/get-room code))
+ (talk (conf/find-talk filter)))
+ (unless room-url (error "Could not find room"))
+ (unless talk (error "Could not find talk"))
+ (with-current-buffer (erc-get-buffer "#emacsconf-org")
+ (erc-send-message (format "Ready in Room %s: %s (%s)"
+ (upcase code)
+ (plist-get talk :title)
+ (plist-get talk :speakers))))
+ (erc-message "PRIVMSG"
+ (format "%s Ready in Room %s ( %s ): %s (%s)"
+ conf/streaming-nick
+ (upcase code)
+ room-url
+ (plist-get talk :title)
+ (plist-get talk :speakers)))))
+
+ (defun erc-cmd-ANNOUNCE (&rest filter)
+ "Set the channel topics to announce the talk specified by FILTER.
+ FILTER can be the talk ID or strings to match against the title or speaker names."
+ (let ((info (conf/find-talk filter)) message)
+ (unless info (error "Could not find talk."))
+ (erc-cmd-CONFTOPIC (format "talk%s: %s (%s)"
+ (plist-get info :talk-id)
+ (plist-get info :title)
+ (plist-get info :speakers)))))
+
+ (defun erc-cmd-BROADCAST (&rest message)
+ "Say MESSAGE in all the conference channels."
+ (conf/erc-with-channels (mapcar 'car conf/topic-templates)
+ (erc-send-message (s-join " " message))))
+ #+end_src
+
+** After the conference
+
+*** Convert pad, copy sections to individual pages
+
+This makes the links available right away
+
+*** Split individual files
+
+Post to individual pages, and make a talks page with durations. Change individual schedule pages to redirect to talks (or start there in the first place).
+
+Announcement example: https://lists.gnu.org/r/emacsconf-discuss/2020-12/msg00000.html
+
+
+**** Splitting up the stream recording into individual files
+
+ NOTE: ffmpeg has a hard time splitting with -c:v copy unless it's on a
+ keyframe boundary. If it isn't on a keyframe, then you'll have a few
+ seconds of black video until the next keyframe kicks in.
+
+ Here's an example of what we had for splitting.
+
+ #+begin_src sh :eval no
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 13:04 -to 20:08 -c:a copy -c:v copy emacsconf-2020--00-opening-remarks.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 27:24 -to 51:39 -c:a copy -c:v copy emacsconf-2020--03-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 1:00:08 -to 1:09:22 -c:a copy -c:v copy emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 1:41:28 -to 1:55:13 -c:a copy -c:v copy emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 1:57:24 -to 2:11:05 -c:a copy -c:v copy emacsconf-2020--06-trivial-emacs-kits--corwin-brust.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 2:32:00 -to 2:36:35 -c:a copy -c:v copy emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 4:55:00 -to 5:11:38 -c:a copy -c:v copy emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 5:47:44 -to 6:04:17 -c:a copy -c:v copy emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 6:06:00 -to 6:27:56 -c:a copy -c:v copy emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 7:24:00 -to 7:27:09.50 -c:a copy -c:v copy emacsconf-2020--40-closing-remarks-part-1.webm
+ ffmpeg -y -i main.webm-2020-11-28--08-48.webm -ss 7:28:00 -to 7:50:50 -c:a copy -c:v copy emacsconf-2020--20-omg-macros--corwin-brust.webm
+
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 15:40 -to 27:27 -c:a copy -c:v copy emacsconf-2020--41-opening-remarks.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 34:48 -to 1:03:54.75 -c:a copy -c:v copy emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 1:30:40 -to 1:49:18 -c:a copy -c:v copy emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 4:33:04 -to 4:37:30 -c:a copy -c:v copy emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 4:50:00 -to 5:59:30 -c:a copy -c:v copy emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 6:08:20 -to 6:12:42.40 -c:a copy -c:v copy emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 6:25:18 -to 6:31:04.90 -c:a copy -c:v copy emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 6:58:20 -to 7:20:38 -c:a copy -c:v copy emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 6:58:20 -to 7:20:38 -c:a copy -c:v copy emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 7:55:44 -to 8:02:02 -c:a copy -c:v copy emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.webm
+ ffmpeg -y -i main.webm-2020-11-29--08-44.webm -ss 8:03:32 -to 8:40:01.10 -c:a copy -c:v copy emacsconf-2020--42-closing-remarks.webm
+ #+end_src
+
+ This fiddles with the =-ss= to make it divisible by 4. Run this code before a copy of the ffmpeg scripts (adjusting the value of adjust as needed) and it will show only the lines that need tweaking.
+
+ #+begin_src emacs-lisp :eval no
+ (save-excursion
+ (while (re-search-forward "^ffmpeg.*?-ss +\\([^ ]++?\\) +.*$" nil t)
+ (let* ((adjust 4)
+ (from (save-match-data
+ (let ((s (match-string 1)) num)
+ (if (string-match "\\(\\([0-9]+\\):\\)?\\([0-9]+\\):\\([0-9]+\\)\\(.[0-9]+\\)?" s)
+ (progn
+ (setq num
+ (+ (* 3600 (string-to-number (or (match-string 2 s) "0")))
+ (* 60 (string-to-number (or (match-string 3 s) "0")))
+ (string-to-number (or (match-string 4 s) "0"))
+ (string-to-number (concat "0" (or (match-string 5 s) "")))))
+ (if (> (% num adjust) 0)
+ (number-to-string (- num (% num adjust)))
+ nil))
+ s)))))
+ (if from
+ (replace-match from nil nil nil 1)
+ (replace-match "")))))
+ #+end_src
+
+ Thanks to SirVolta and bandali for figuring out keyframe issue!
+
+ Further reading:
+
+ (all links work with LibreJS enabled)
+ https://blog.video.ibm.com/streaming-video-tips/keyframes-interframe-video-compression/
+ https://blog.streamspot.com/blog/compression-codecs-keyframes-and-the-basics-of-stream-quality
+ https://blog.superuser.com/2012/02/24/ffmpeg-the-ultimate-video-and-audio-manipulation-tool/
+ https://superuser.com/questions/138331/using-ffmpeg-to-cut-up-video
+ http://blog.webmproject.org/2010/05/inside-webm-technology-vp8-alternate.html
+
+*** Collect speaker feedback
+
+Another collaborative pad
+
+*** Encode highly-compressed versions
+
+ Thanks to ArneBab for this ffmpeg script which is now documented in [[https://www.draketo.de/software/ffmpeg-compression-vp9-av1][Extreme compression of Video with VP9 (webm) using ffmpeg]]. We modified it to keep the original audio.
+
+ Usage: compress-video.sh input-filename.webm output-filename.webm
+
+ #+begin_src sh :eval no :tangle compress-video.sh :shebang "#!/bin/bash"
+ Q=56
+ nice ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 240 -pass 1 -f webm -threads 8 /dev/null &&
+ nice ffmpeg -y -i "$1" -c:v libvpx-vp9 -b:v 0 -crf $Q -c:a copy -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 240 -threads 8 "$2"
+ #+end_src
+
+ Here's the original version which compresses audio too. Usage: compress-video-compressed-audio.sh input-filename.webm output-filename.webm
+
+ #+begin_src sh :eval no :tangle compress-video-compressed-audio.sh
+ Q=56
+ nice ffmpeg -y -i $1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -an -tile-columns 0 -tile-rows 0 -frame-parallel 0 -cpu-used 8 -auto-alt-ref 1 -lag-in-frames 25 -g 999 -pass 1 -f webm -threads 8 /dev/null &&
+ nice ffmpeg -y -i $1 -c:v libvpx-vp9 -b:v 0 -crf $Q -aq-mode 2 -c:a libopus -b:a 12k -tile-columns 2 -tile-rows 2 -frame-parallel 0 -cpu-used -5 -auto-alt-ref 1 -lag-in-frames 25 -pass 2 -g 999 -threads 8 $2
+ #+end_src
+
+*** Upload to alternative video hosting platforms once main announcement has been out for a few days
+
+- Create playlist, too
+- Try to do Peertube via Toobnix first (bandali's in charge)
+
+*** Add subtitles
+
+Take advantage of provided scripts or autogenerated files
+
+**** Code sachac used to move sbv files from the Downloads directory
+
+ Autogenerated captions can save a bit of time when setting up
+ captions. This code renames a downloaded file to match the current
+ file's naming scheme and moves it to the right directory.
+
+ #+begin_src emacs-lisp
+ (defvar conf/subtitle-directory (expand-file-name "subtitles" default-directory) "Directory where subtitles will be kept.")
+ (defvar conf/download-directory "~/Downloads" "Directory where downloaded files are saved.")
+
+ (defun my/latest-file (path &optional filter)
+ "Returns the newest file in PATH.
+ If FILTER is specified, files should match this regex."
+ (car (sort (seq-remove #'file-directory-p (directory-files path 'full filter t)) #'file-newer-than-file-p)))
+ (defun my/rename-latest-download-as-subtitle-file ()
+ "Rename the most recent downloaded file to match the current file and move it to `conf/subtitle-directory'.
+ To use this, open a Dired buffer with a list of the correctly-named
+ videos. Move your cursor to the line for the video that you have just
+ downloaded captions for, then call `my/rename-latest-download-as-subtitle-file.'"
+ (interactive)
+ (let* ((file (my/latest-file conf/download-directory))
+ (new-file (expand-file-name (concat (file-name-base (dired-get-filename)) "-autogen." (file-name-extension file)) conf/subtitle-directory)))
+ (rename-file file new-file t)
+ (message "%s" new-file)))
+ ;; Ex: (local-set-key [f5] 'my/rename-latest-download)
+ #+end_src
+
+ To convert from SBV to VTT (used for the HTML5 video player) and fix
+ timestamps so that they're not overlapping, install =python3-webtt=
+ and run [[file:subtitles/fix.py]] like this: =fix.py
+ emacsconf-2020--04-music-in-plain-text--jonathan-gregory.sbv=.
+
+*** Add transcript sections
+
+#+begin_src emacs-lisp
+(defvar conf/wiki-directory "~/vendor/emacsconf-wiki" "Directory that has the public conference wiki.")
+
+(defmacro conf/with-talk-info-file (talk &rest body)
+ "Evaluate BODY in the info file for TALK.
+If TALK is not specified, do it in the current buffer."
+ (declare (indent 1))
+ `(if ,talk
+ (with-current-buffer
+ (find-file-noselect
+ (expand-file-name (format "%d/info/%s.md" conf/year
+ (plist-get talk :talk-id))
+ conf/wiki-directory))
+ ,@body)
+ ,@body))
+
+(defun my/convert-transcript-to-directives (id)
+ (interactive "MID: ")
+ (goto-char (point-min))
+ (kill-new
+ (concat
+ "<a name=\"transcript\"></a>\n# Transcript\n\n"
+ (cl-loop while (subed-forward-subtitle-text)
+ concat (format "[[!template text=\"%s\" start=\"%s\" video=\"%s\" id=subtitle]]\n"
+ (replace-regexp-in-string
+ "\n" " "
+ (replace-regexp-in-string
+ "\"" "&quot;"
+ (replace-regexp-in-string "[][]" "" (subed-subtitle-text))))
+ (subed-vtt--msecs-to-timestamp (subed-subtitle-msecs-start))
+ id)))))
+#+end_src
+
+* Other useful tidbits
+** Translating timezones
+
+#+begin_src emacs-lisp
+ (setq my/timezones '("America/Toronto" "America/Los_Angeles" "UTC" "Europe/Berlin" "Asia/Kolkata" "Asia/Shanghai" "Asia/Singapore"))
+ (defun my/summarize-times (time timezones)
+ (let (prev-day)
+ (mapconcat
+ (lambda (tz)
+ (let ((cur-day (format-time-string "%a %b %-e" time tz))
+ (cur-time (format-time-string "%H%MH %Z" time tz)))
+ (if (equal prev-day cur-day)
+ cur-time
+ (setq prev-day cur-day)
+ (concat cur-day " " cur-time))))
+ (sort timezones (lambda (a b) (< (car (current-time-zone nil a)) (car (current-time-zone nil b)))))
+ " / ")))
+ (defun my/org-summarize-event-in-timezones ()
+ (interactive)
+ (save-window-excursion
+ (save-excursion
+ (when (derived-mode-p 'org-agenda-mode) (org-agenda-goto))
+ (when (re-search-forward org-element--timestamp-regexp nil (save-excursion (org-end-of-subtree) (point)))
+ (goto-char (match-beginning 0))
+ (let* ((times (org-element-timestamp-parser))
+ (start-time (org-timestamp-to-time (org-timestamp-split-range times)))
+ (msg (format "%s - %s - %s"
+ (org-get-heading t t t t)
+ (my/summarize-times start-time my/timezones)
+ ;; (cond
+ ;; ((time-less-p (org-timestamp-to-time (org-timestamp-split-range times t)) (current-time))
+ ;; "(past)")
+ ;; ((time-less-p (current-time) start-time)
+ ;; (concat "in " (format-seconds "%D %H %M%Z" (time-subtract start-time (current-time)))))
+ ;; (t "(ongoing)"))
+ (org-entry-get (point) "LOCATION"))))
+ (message "%s" msg)
+ (kill-new msg))))))
+#+end_src
+
+** Restarting ikiwiki manually
+
+ This is needed when you change the template or if the ikiwiki process gets stuck on something.
+
+ #+begin_src sh :eval no
+ ssh front 'sudo -iu ikiwiki ikiwiki --setup ~ikiwiki/emacsconf.setup'
+ #+end_src
+
+
+** COMMENT Copyright & License
+
+ Copyright (C) 2020 Sacha Chua
+
+ The EmacsConf 2020 organizers' notebook is part of the EmacsConf
+ wiki, and is dual-licensed under the terms of the Creative Commons
+ Attribution-ShareAlike 4.0 International Public License; and the GNU
+ General Public License as published by the Free Software Foundation,
+ either version 3 of the License, or (at your option) any later
+ version.
+
+ A copy of these two licenses is available on the EmacsConf wiki, in
+ the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
+
+** COMMENT Local variables
+
+# Local Variables:
+# org-indent-mode: t
+# org-indent-indentation-per-level: 2
+# org-pretty-entities: nil
+# org-edit-src-content-indentation: 0
+# org-src-preserve-indentation: t
+# End:
diff --git a/2020/pad.md b/2020/pad.md
new file mode 100644
index 00000000..893cc4eb
--- /dev/null
+++ b/2020/pad.md
@@ -0,0 +1,2606 @@
+
+# Table of Contents
+
+- [License and contribution agreement](#pad-license)
+- [Contribution guidelines](#pad-contrib)
+- [01: Sacha Chua (sachac): Emacs News Highlights](#pad01)
+- [02: Leo Vivier (zaeph): An Emacs Developer Story: From User to Maintainer](#pad02)
+- [03: Bala Ramadurai: Idea to Novel Superstructure: Emacs for Writing](#pad03)
+- [04: Jonathan Gregory: Music in Plain Text](#pad04)
+- [05: Grant Shangreaux (shoshin): Bard Bivou(m)acs - Building a bandcamp-like page for an album of music](#pad05)
+- [06: Corwin Brust (mplscorwin): Trivial Emacs Kits](#pad06)
+- [07: Sid Kasivajhula: Beyond Vim and Emacs: A Scalable UI Paradigm](#pad07)
+- [08: Andrew Tropin: Building reproducible Emacs](#pad08)
+- [21: Eduardo Ochs: On why most of the best features in eev look like 5-minute hacks](#pad21)
+- [09: Rainer König: Orgmode - your life in plain text](#pad09)
+- [10: Andrea: Lead your future with Org](#pad10)
+- [11: the org-gtd package: opinions about Getting Things Done -Speaker(s): Aldric](#pad11)
+- [12: Leo Vivier: One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!](#pad12)
+- [13: Joseph Corneli, Raymond Stanley Puzio, and Cameron Ray Smith: Experience Report: Steps to "Emacs Hyper Notebooks"](#pad13)
+- [14: Adam Ard: README-Driven Design](#pad14)
+- [15: Adolfo Villafiorita: Moving from Jekyll to OrgMode, an experience report](#pad15)
+- [16: Leo Vivier: Org-roam: Presentation, Demonstration, and What's on the Horizon](#pad16)
+- [17: Noorah Alhasan: Org-mode and Org-Roam for Scholars and Researchers](#pad17)
+- [18: Leo Vivier (zaeph): Org-roam: Technical Presentation](#pad18)
+- [19: Brett Gilio: Sharing blogs (and more) with org-webring](#pad19)
+- [20: Corwin Brust (mplsCorwin): OMG Macros](#pad20)
+- [Day 1 Closing remarks by Sacha](#pad40)
+- [Day 2: Opening remarks](#pad41)
+- [38: John Wiegley: Emacs development update](#pad38)
+- [22: Musa Al-hassy: Powering-up Special Blocks](#pad22)
+- [23: Tuấn-Anh Nguyễn: Incremental Parsing with emacs-tree-sitter](#pad23)
+- [24: Andrea: Analyze code quality through Emacs: a smart forensics approach and the story of a hack](#pad24)
+- [25: Zen Monk Alain M. Lafon: Traverse complex JSON structures with live feedback](#pad25)
+- [39: Richard Stallman: NonGNU ELPA](#pad39)
+- [Lunch break](#org70adcc6)
+- [26: Pierce Wang: Emacs as a Highschooler: How It Changed My Life](#pad26)
+- [27: Vasilij "wasamasa" Schneidermann: State of Retro Gaming in Emacs](#pad27)
+- [28: Erik Elmshauser and Corwin Brust: Welcome To The Dungeon](#pad28)
+- [29: Erik Elmshauser and Corwin Brust: Pathing of Least Resistance](#pad29)
+- [30: Gabriele Bozzola (@sbozzolo) : A tour of vterm](#pad30)
+- [31: Grant Shangreaux: Lakota Language and Emacs](#pad31)
+- [32: Eric Abrahamsen: Object Oriented Code in the Gnus Newsreader](#pad32)
+- [33: Fermin MF: Maxima a computer algebra system in Emacs](#pad33)
+- [34: Matthew Zeng: Extend Emacs to Modern GUI Applications with EAF](#pad34)
+- [35: Zachary Kanfer: WAVEing at Repetitive Repetitive Repetitive Music](#pad35)
+- [Closing remarks (Sunday)](#pad42)
+- [General Feedback: What went well?](#pad-well)
+- [General Feedback: What to improve?](#pad-improve)
+- [Colophon](#pad-colophon)
+
+Thanks to alphapapa for helping archive this pad!
+
+- [Conference info, how to watch/participate](https://emacsconf.org/2020/schedule/35)
+- [Guidelines for conduct](https://emacsconf.org/conduct/)
+
+
+<a id="pad-license"></a>
+
+# License and contribution agreement
+
+Except where otherwise noted, the material on the EmacsConf pad are dual-licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International Public License; and the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) an later version.
+
+Copies of these two licenses are included in the EmacsConf wiki repository, in the COPYING.GPL and COPYING.CC-BY-SA files: <https://emacsconf.org/COPYING/>.
+
+By contributing to this pad, you agree to make your contributions available under the above licenses. You are also promising that you are the author of your changes, or that you copied them from a work in the public domain or a work released under a free license that is compatible with the above two licenses. DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION.
+
+
+<a id="pad-contrib"></a>
+
+# Contribution guidelines
+
+This pad is here to be curated by everybody and its rough structure is like that:
+
+1. General info and license
+2. A section for each talk -> please do add questions and notes
+3. A general feedback section
+
+
+<a id="pad01"></a>
+
+# [01: Sacha Chua (sachac): Emacs News Highlights](https://emacsconf.org/2020/schedule/01)
+
+
+## Questions
+
+- Any news about guile-on-emacs? Is it a dead project?
+
+ - 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?
+
+ - Not yet, although <https://www.emacswiki.org/emacs/Usergroups> is a start
+
+
+## Notes
+
+- 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
+
+
+<a id="pad02"></a>
+
+# [02: Leo Vivier (zaeph): An Emacs Developer Story: From User to Maintainer](https://emacsconf.org/2020/schedule/02)
+
+
+## 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 id="pad03"></a>
+
+# [03: Bala Ramadurai: Idea to Novel Superstructure: Emacs for Writing](https://emacsconf.org/2020/schedule/03)
+
+- 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-colums (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 id="pad04"></a>
+
+# [04: Jonathan Gregory: Music in Plain Text](https://emacsconf.org/2020/schedule/04)
+
+
+## Questions
+
+- Do you have any thoughts on generating scores in chant notation (neumes)?
+
+ - I'm not familiar with chant notation, but I know there's information on the manual.
+
+- 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 heighs?
+
+ - [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 controller, so I haven't tried it.
+
+- Did you ever write hughe scores (BigBand/Orchestra) in Emacs?
+
+ - Never, but that's certainly possible.
+
+- Is there 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>
+
+
+<a id="pad05"></a>
+
+# [05: Grant Shangreaux (shoshin): Bard Bivou(m)acs - Building a bandcamp-like page for an album of music](https://emacsconf.org/2020/schedule/05)
+
+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 is 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 &#x2013;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 &#x2013;help flag when running ./configure. Cairo support is experimental and can be enabled with ./configure &#x2013;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 w/o 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.
+
+
+<a id="pad06"></a>
+
+# [06: Corwin Brust (mplscorwin): Trivial Emacs Kits](https://emacsconf.org/2020/schedule/06)
+
+- 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 confirguration 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 personall 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 think that's grabbing attention. I haven't tried it under GNU/Linux. My familyare (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 cure. I think this is the most important problem space in freesoftware, FWIW.
+
+
+## Notes
+
+- <https://github.com/dungeon-mode/game> co-founder
+- Initial "trolling" by showing presentation notes in different editors: vim, Notepad++, VSCode, sublime
+- LISP wasn't on the list.
+- Disagreement is not the barrier.
+- Emacs is threatening as something that addresses many different needs/use-cases.
+
+
+<a id="pad07"></a>
+
+# [07: Sid Kasivajhula: Beyond Vim and Emacs: A Scalable UI Paradigm](https://emacsconf.org/2020/schedule/07)
+
+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. More likely, minor modes could be coupled 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
+
+- 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 interace 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 id="pad08"></a>
+
+# [08: Andrew Tropin: Building reproducible Emacs](https://emacsconf.org/2020/schedule/08)
+
+- 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(?)
+
+
+<a id="pad21"></a>
+
+# [21: Eduardo Ochs: On why most of the best features in eev look like 5-minute hacks](https://emacsconf.org/2020/schedule/21/)
+
+- Actual start and end time (EST): Start 2020-11-28T11.45.20 (~45min talk); 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>
+
+
+<a id="pad09"></a>
+
+# [09: Rainer König: Orgmode - your life in plain text](https://emacsconf.org/2020/schedule/09/)
+
+- (End 2020-11-28T13.16.44)
+
+
+## Questions: - Put your questions below, most recent on top:
+
+- 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 here: 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?+2
+
+ - 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 orgmode 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 +1+1+1
+
+ - 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 id="pad10"></a>
+
+# [10: Andrea: Lead your future with Org](https://emacsconf.org/2020/schedule/10)
+
+- 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 id="pad11"></a>
+
+# [11: the org-gtd package: opinions about Getting Things Done -Speaker(s): Aldric](https://emacsconf.org/2020/schedule/11)
+
+- 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 id="pad12"></a>
+
+# [12: Leo Vivier: One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!](https://emacsconf.org/2020/schedule/12)
+
+- 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
+
+ - Browser extension for org-protocol (anyone got the link / name?) is this <https://addons.mozilla.org/en-US/firefox/addon/org-capture/> or this <https://addons.mozilla.org/en-US/firefox/addon/edit-with-emacs1/>
+
+- 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 ;-)
+
+ - 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. &#x2013;alphapapa
+
+ - 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 agend 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 id="pad13"></a>
+
+# [13: Joseph Corneli, Raymond Stanley Puzio, and Cameron Ray Smith: Experience Report: Steps to "Emacs Hyper Notebooks"](https://emacsconf.org/2020/schedule/13)
+
+- 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.
+
+ - If you can use it from the command line, you could use it in org mode using what we are working on. -RSP
+
+- 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!
+
+- Could you post some links?+1
+
+ - see Notes below
+
+- 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 id="pad14"></a>
+
+# [14: Adam Ard: README-Driven Design](https://emacsconf.org/2020/schedule/14)
+
+- 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 <a id="orgfbe6db7"></a>-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 <a id="orgc330801"></a> 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 id="pad15"></a>
+
+# [15: Adolfo Villafiorita: Moving from Jekyll to OrgMode, an experience report](https://emacsconf.org/2020/schedule/15)
+
+- 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.
+
+- Not a question, but thanks for the talk!
+
+
+## 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-thml)
+
+- Other static webpage generators: <https://github.com/novoid/lazyblorg/wiki/Similar-Projects>
+
+
+<a id="pad16"></a>
+
+# [16: Leo Vivier: Org-roam: Presentation, Demonstration, and What's on the Horizon](https://emacsconf.org/2020/schedule/16)
+
+- 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>
+
+
+<a id="pad17"></a>
+
+# [17: Noorah Alhasan: Org-mode and Org-Roam for Scholars and Researchers](https://emacsconf.org/2020/schedule/17)
+
+- 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
+- Slides/presentation: <https://github.com/nalhasan/emacsconf2020>
+
+
+## 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!)
+
+ undefined.1. <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?
+
+
+<a id="pad18"></a>
+
+# [18: Leo Vivier (zaeph): Org-roam: Technical Presentation](https://emacsconf.org/2020/schedule/18)
+
+- 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
+
+- "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"
+
+
+<a id="pad19"></a>
+
+# [19: Brett Gilio: Sharing blogs (and more) with org-webring](https://emacsconf.org/2020/schedule/19)
+
+- Actual start and end time (EST): Start 2020-11-28T16.02.37; End 2020-11-28T16.10.30;
+- <https://sr.ht/~brettgilio/org-webring>
+
+
+## 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
+
+- Any More questions on org-webring, email brettg@gnu.org
+
+
+<a id="pad20"></a>
+
+# [20: Corwin Brust (mplsCorwin): OMG Macros](https://emacsconf.org/2020/schedule/20)
+
+- 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 think that's grabbing attention. I haven't tried it under GNU/Linux. My familyare (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 cure. I think this is the most important problem space in freesoftware, 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; lmk if you have any trouble finding fruit to throw
+
+
+## Notes
+
+
+<a id="pad40"></a>
+
+# Day 1 Closing remarks by Sacha
+
+- (2020-11-28T16.14.07-2020-11-28T16.16.06 + 2020-11-28T16.40.39-2020-11-28T16.52.55)
+
+
+## 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, jcorneli, mplsCorwin, publicvoit, sachac, seabass, zaeph
+
+- Speakers and participants
+
+
+## See you tomorrow!
+
+
+<a id="pad41"></a>
+
+# Day 2: Opening remarks
+
+- 2020-11-29T09.00.35-2020-11-29T09.12.05
+
+
+## Notes
+
+- "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).
+
+
+<a id="pad38"></a>
+
+# [38: John Wiegley: Emacs development update](https://emacsconf.org/2020/schedule/38)
+
+- 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.
+
+
+<a id="pad22"></a>
+
+# [22: Musa Al-hassy: Powering-up Special Blocks](https://emacsconf.org/2020/schedule/22)
+
+- 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;) +1
+
+ - 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? :)+1
+
+ - 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 id="pad23"></a>
+
+# [23: Tuấn-Anh Nguyễn: Incremental Parsing with emacs-tree-sitter](https://emacsconf.org/2020/schedule/23)
+
+- 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. (FIXME: add link here).
+
+ - 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.
+
+- 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? +1
+
+ - 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>
+
+- 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 &#x2026;))? 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.+1+1
+
+ - 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>
+
+- Q2: Will elisp performance be more competitive with gccemacs enough to make tree-sitter in elisp more attractive? (+1)+1
+
+ - The point of this project is to reuse other people's efforts, not rewriting them.
+
+ - The garbage collection may still pose some problems and introduce GC latency.
+
+- 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://tree-sitter.github.io/tree-sitter/> (<- parser)
+
+- Regular expressions are not powerful enough.
+
+- LSP has high latency and is resource intensive, oft.
+
+- Extended video version will get uploaded eventually after the event. (FIXME: add link)
+
+
+<a id="pad24"></a>
+
+# [24: Andrea: Analyze code quality through Emacs: a smart forensics approach and the story of a hack](https://emacsconf.org/2020/schedule/24)
+
+- 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.
+
+- Copied Q&A from IRC:
+
+ - How did you summon, resize and dismiss that window so seamlessly?
+
+ - org-roam and C-x0
+
+ - 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/>
+
+
+<a id="pad25"></a>
+
+# [25: Zen Monk Alain M. Lafon: Traverse complex JSON structures with live feedback](https://emacsconf.org/2020/schedule/25)
+
+- Actual start and end time (EST): Start: 2020-11-29T10.57.19; End: 2020-11-29T11.07.08
+
+
+## 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?+1
+
+ - 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 id="pad39"></a>
+
+# [39: Richard Stallman: NonGNU ELPA](https://emacsconf.org/2020/schedule/39)
+
+- 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)
+
+- Lunch break is coming up - it's okay to continue this conversation in the pad or IRC if you like (or continue, if you like)
+
+ - Okay! Wrapping up, thank you so much for live questions and answers
+
+- 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 libre office 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 non-GNU ELPA link to non-free sites like GitHub? This does: <https://elpa.gnu.org/nongnu/caml.html>
+
+ - Mistake to talk about a non-free site. A site is not a program. Programs
+
+ - 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.
+
+ - Same for GNU ELPA <https://elpa.gnu.org/packages/company.html>
+
+- 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 non-GNU 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
+
+ - stallman.org/articles/genderneutrality.html - not a GNU Project policy, personal ideas on the subject
+
+ - <https://stallman.org/articles/genderless-pronouns.html> seems to be the correct link
+
+ - 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 non-GNU 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 non-GNU 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 non-GNU 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 non-GNU 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."
+
+
+<a id="org70adcc6"></a>
+
+# Lunch break
+
+- 2020-11-29T12.06.04 2020-11-29T13.05.00
+
+
+<a id="pad26"></a>
+
+# [26: Pierce Wang: Emacs as a Highschooler: How It Changed My Life](https://emacsconf.org/2020/schedule/26)
+
+- 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?+1+1+1
+
+ - 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?+1+1
+
+ - 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 id="pad27"></a>
+
+# [27: Vasilij "wasamasa" Schneidermann: State of Retro Gaming in Emacs](https://emacsconf.org/2020/schedule/27)
+
+- 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/>
+
+- More on the alt-stream: <https://live.emacsconf.org/alt.html>
+
+
+<a id="pad28"></a>
+
+# [28: Erik Elmshauser and Corwin Brust: Welcome To The Dungeon](https://emacscon.org/2020/schedule/28)
+
+- 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
+
+- 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?
+
+- (please add your question on the top of the list)
+
+
+## Notes
+
+- <https://github.com/dungeon-mode/game>
+
+
+<a id="pad29"></a>
+
+# [29: Erik Elmshauser and Corwin Brust: Pathing of Least Resistance](https://emacsconf.org/2020/schedule/29)
+
+*This time slot was combined with the previous.*
+
+
+<a id="pad30"></a>
+
+# [30: Gabriele Bozzola (@sbozzolo) : A tour of vterm](https://emacsconf.org/2020/schedule/30)
+
+
+## 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 id="pad31"></a>
+
+# [31: Grant Shangreaux: Lakota Language and Emacs](https://emacsconf.org/2020/schedule/31)
+
+
+## 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?+1+1
+
+- 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
+
+- Quail
+
+- <https://git.sr.ht/~shoshin/lakota-input.git>
+
+
+<a id="pad32"></a>
+
+# [32: Eric Abrahamsen: Object Oriented Code in the Gnus Newsreader](https://emacsconf.org/2020/schedule/32)
+
+
+## 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."
+
+
+<a id="pad33"></a>
+
+# [33: Fermin MF: Maxima a computer algebra system in Emacs](https://emacsconf.org/2020/schedule/33)
+
+
+## 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?)
+
+- Q8 Are you planning to upstream your package into Maxima? (would be nice :)
+
+- Q7 In which University do you start to use Maxima?
+
+- Q6. Is there support for images in maxima-mode?
+
+- Q5: Is Maxima's syntax a strict infix lisp syntax or are there exceptions and special cases? Yes I mean Maxima itself.
+
+- Q4. Is maxima easy to get into in your opinion? (has its quirks though!, mailing list is usually helpful)
+
+- 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**)
+
+- Q2: how does maxima compare to sagemath in emacs? does maxima have more support because it is written in common lisp whereas sage math is written in python?
+
+- 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.)
+
+
+<a id="pad34"></a>
+
+# [34: Matthew Zeng: Extend Emacs to Modern GUI Applications with EAF](https://emacsconf.org/2020/schedule/34)
+
+- 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
+
+- <https://github.com/manateelazycat/emacs-application-framework>
+
+
+<a id="pad35"></a>
+
+# [35: Zachary Kanfer: WAVEing at Repetitive Repetitive Repetitive Music](https://emacsconf.org/2020/schedule/35)
+
+- Actual start and end time (EST): Start 2020-11-29T16:29; Stop 2020-11-29T16:46
+
+
+## Questions (note that we don't have audio out from Zachary's computer in BigBlueButton, so any music demos will need to wait for a recorded video)
+
+- Q9 : Any MIDI mapping possibilities? (Sorry Q8)
+
+- Q8: 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.
+
+ - That'd be awesome, thanks! Will do
+
+ - 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.
+
+- Q6: 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.
+
+- Q7: have you written any actual songs (in RRRM/WAVEing)? Can you play one ?
+
+- 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)
+
+- 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!(+1)
+
+ - The initial app (the inspiration) worked this way. It is definitely something worth looking into.
+
+
+## Notes
+
+- notes, references, and links at <https://zck.me/emacsconf2020>
+
+
+<a id="pad42"></a>
+
+# Closing remarks (Sunday)
+
+- Start: 2020-11-29T16:48; Q&A: ~2020-11-29T17:05; Stop: 2020-11-29T17:24.
+
+> Emacs is very, very complicated. And using computers is hard. With Emacs we have an ideal opportunity to learn from our errors. To take on hard work with diverse groups. And to effect lasting solutions. To make Emacs, and thereby any word-or-software-thing, in practically any human and spoken language, easier to learn and to use. Forever. Life doesn't come with warning labels or margin notes. We have a blank map and an uncertain number of batteries for the torch. But there's a light in the darkness. It's freedom. It's the idea of giving to people something that cannot be taken away.
+
+&#x2013;Corwin Brust, as read by Leo Vivier
+
+
+## Stats:
+
+- 16 talks today, 37 total
+
+- Peak of 320 viewers of /main.webm and 15 viewers of /main-480p.webm (last year: ~270)
+
+- 126 people on the Etherpad
+
+
+## Next steps:
+
+- Emacs meetups - there are a few linked to in the Emacs News Highlights talk <https://github.com/sachac/emacsconf-2020-emacs-news-highlights>
+
+- 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
+
+ - If you have questions, check the individual talk page for follow-up info or search for the speaker elsewhere
+
+- 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
+
+ - #emacsconf-accessible - thanks to jcorneli, seabass, dto
+
+- Thank you to everyone!
+
+
+## Oops! The stream will be quickly restored so that we can play wasamasa's demo
+
+
+## Questions
+
+- Q16: Will you publish the Etherpad as-is, or will you clean it up a little bit, e.g. fix spelling miztekes, grammar bad, identifiy answers to the questions and similar? (That might be time consuming)
+
+- Q15: Will the Etherpad be archived somewhere on emacsconf.org?
+
+ - Yes, we'll link to it from emacsconf.org/2020 like last year, and we can copy the sections to the individual talk pages as well
+
+- Q14: Also, it's bandali's birthday tomorrow! =) - sachac
+
+ - Happy birthday bandali!! Its not early, for me its already after 12 :D
+
+ - Happy birthday!!
+
+- Q13: wasamasa's demos will be played after the closing remarks
+
+- Q12: Congratulations on another emacsconf everybody! - <3 brett
+
+- Q11: Many people seem to be interested in the video's that will be available later. I've got recordings of the entire conference and the ability to share them now. Do I have permission to do so? Is this OK copyright wise?
+
+ - The videos are CC By ShareAlike, although it might be nice to have people linking to the emacsconf.org site and video archive so that they can discover the other talks from the previous years, so it might be nice to wait
+
+ - So if I share a folder with the video's including a readme with the licence and a link to emacsconf.org its ok?
+
+ - let's check with bandali, it would be nice to have help getting stuff out =)
+
+ - @OP: The team would welcome help very much. Feel free to contact Amin on bandali@gnu.org
+
+ - I'll do the upload and will post the link in #emacsconf-org so you can see if its to everyone's liking. Also i'm happy to help with the cutting process.
+
+ - Most of last year's conference is also there
+
+- Q10: Favorite moments/talks from this the past two days?
+
+ - Aside from all the awesomeness of the talks, I really appreciated how y'all kept things pretty friendly and respectful and kind. =) - sachac
+
+- Q9: It's not a question but Sacha Chua, I am one of the people that created Emacs Planet in Spanish. Could you visit it and include in your news? :-)
+
+ - oh, <http://planet.emacs-es.org/> is down right now, do I have the right URL? it's only temporally -
+
+ - Sure, I can pull in the RSS . Thanks, the next week will works.
+
+- Q8: Thanks a lot for eveything these last two days!! This conference was so epic, I loved it. <del>+</del>
+
+- Q7: Sacha, have you thought of organizing the whole library of Emacs News, so people could find things by category/topic (other than searching across all the web pages)?
+
+ - <http://github.com/sachac/emacs-news> - happy parsing
+
+- Q6: Great conference thank you very much. The schedule of the emacsconf this year is not so APAC-friendly. I wonder whether there is any plan to accommodate the APAC timezone in some way?
+
+ - Sure, want to organize one? =) - sachac
+
+ - I'll help (orgg) (thanks I'll get in touch - dragestil)
+
+- Q5: Why Corwin Brust use Windows?
+
+ - It's currently a necessity.
+
+- Q4: Are there any tools that you wish existed in Emacs that would help with organizing these confs?
+
+ - dungeon-mode as colaboration space? meet there and build groups? let emacs be THE GAME?+1 +1
+
+ - answer from random user: etherpad org-mode! Live-editing an org-file together!+1 (please somebody work on this project so that we get a good solution here!)
+
+ - Well, yeah, but that's pie-in-the-sky&#x2026; Maybe next decade? haha :)
+
+ - There's already a project that has started some work on etherpad+Emacs: <https://github.com/zzkt/ethermacs>, but it's currently on hiatus and doesn't support collaborative editing. Maybe a challenge for someone who wants to tinker with Emacs Lisp? :)
+
+ - Wow, that's great!
+
+ - Look at crdt.el — it is very close to ready. Ray (RSP) and I were using it for some of our work together on ob-servant. Qiantan is responsive to bug reports, and has support for Org mode as a priority
+
+ - We weren't quite sure how it might deal with 100+ people, but maybe! (also, ob-servant is a great name =) )
+
+ - Only 100 choose 100 ways to find out :-)&#x2026;
+
+ - But yeah to be clear it definitely wasn't ready for this year. Maybe next year!
+
+ - On ob-servant, all credit to Ray for the clever name (and 99% of the programming as well!)
+
+ - [Also looking forward to seeing crdt.el connect with emacs-tree-sitter — sync the tree!&#x2026;]
+
+- Q3: Amin, are you wearing a suit too next year?
+
+- Q2: Where do y'all see Emacs going in the next year?
+
+ - More awesomeness!
+
+- Q1: Why is Leo so sexy? Too Sexy even? I want a Leo Twitch Channel to can see he all days! Bandali isn't bad either!!!!
+
+ - <https://www.youtube.com/watch?v=P5mtclwloEQ>
+
+
+<a id="pad-well"></a>
+
+# General Feedback: What went well?
+
+
+## Pre-recording the talks was a win &#x2026; less chance of failure live.
+
+
+## I really liked how questions where approached with this Etherpad. I think it is a very smart idea and better than most things I have seen in other kind of conferences. This is very nice and organized. Really excited for tommorow, could only watch the second half of the stream today (looking forward to see the rest when uploaded) but the talks where awesome. Thanks for everything. +1
+
+
+## "here is a link for mpv" approach to livestreaming is much appreciated +1+1+1+1
+
+
+## bandali super helpful and responsive with AV issues +1
+
+
+## the timestamps on all talks in etherpad are very welcome!
+
+- Sorry, I missed the first few talks to time-stamp :-(
+
+ - Ah, don't worry. How did you even do that? I saw some $&#x2026; magic?
+
+ - $$tt is mapped to the current second like 2020-11-28T22.43.55 via autokey (Linux)
+
+ - See <https://karl-voit.at/apps-I-am-using/> for "Snippets"
+
+ - Got it👍
+
+
+## I love having the Etherpad available immediately during and after talks. I know recordings and more are coming out later, but having access to notes, questions, answers and links is amazing!
+
+
+## The streaming setup is probably the best result I've seen when doing it with free software. Is the source/config available somewhere? Particularly curious about usage of gstreamer/icecast. Would love to see an organizer post-mortem talk/post so others can reproduce and improve on.
+
+- (See colophon below)
+
+
+## Karl's Etherpad maintenance tasks during the event (for reference)
+
+- when a new talk starts:
+
+ - clear authorship colors by clicking the "strikethrough-eye" in the icon bar
+
+ - add current line number (approx) at the very top of the Pad to ease navigation
+
+ - cut title of upcoming talk and paste it in order to colorize the heading to ease navigation
+
+ - log starting time
+
+ - Karl was using an adapted ISO format like "2020-11-29T20.06.49" and manually corrected it from CET to EST (EST = CET-6hrs)
+
+- log Q&A start time (if any Q&A)
+
+- log end time
+
+
+## We managed to get the alternate stream up and running! I just need to remember that my laptop has a mute microphone shortcut instead of fussing around with muting in both OBS and BigBlueButton&#x2026; - sachac
+
+
+## Low-resolution stream was appreciated, and running it on live0 worked fine.
+
+
+## Super-nice to have so many people helping out. zaeph was monitoring audio, calling up speakers (yay emergency contact info), keeping track of the time, checking in people&#x2026; jcorneli, dto, and seabass were describing things in #emacsconf-accessible. - sachac
+
+
+## HUGE improvements / gains since 2013 :-) Which was awesome too — the first Emacs Conf! — but WOW this is a truly international event w/ 100+ participants at any given time. Amazing work. -Jcorneli
+
+
+<a id="pad-improve"></a>
+
+# General Feedback: What to improve?
+
+
+## A few speakers jumped right into their talks without providing enough context. +1+1+1Perhaps the organizers can introduce the topic with a summary?
+
+- +1: A short introduction on the topic might be helpful. "Hi, I'm <XYZ> and I'm going to talk about <ABC>, a <TYU>".
+
+ - Added to pre-talk tech check
+
+
+## why are talks starting ahead of the schedule? what if i want to skip some and come back later? can i count on the schedule being follwed?
+
+- From conference experience I recommend showing up a talk earlier than planned :>
+
+- Maybe add "roughly" infront of the very specific time-stamps of the schedule to emphasize its character of not being exactly planned?
+
+ - Sure, I'll add bold to "Please note that the times on this schedule are a rough approximation, and that the talks might be rearranged or dropped depending on speaker availability.", and move the disclaimer from the bottom of the individual talk pages further up.
+
+ - Since we've had the disclaimer and from my personal experience I know that people likely miss such disclaimers, I do think that "2:18 PM" -> "~2:18 PM" would be more visible.
+
+ - Added ~ =)
+
+
+## Maybe provide the talk list as an org-file with timestamps? That way we can add it to our agenda :)
+
+- Sure, you can look at 2020/submissions.org in the git repository you can check out via the instructions at <https://emacsconf.org/edit/>
+
+ - Oh, wow. Thansk! Completely missed <https://git.emacsconf.org/emacsconf-wiki/tree/2020/submissions.org> . Now I only need to come up with some elisp to change all timestamps into my timezone. :)
+
+ - See above discussion about the approximateness of the times. =) Just tune in when you want, and then check the schedule to see roughly where we are in terms of talk order, maybe? - SC
+
+ - Good point, thanks :)
+
+
+## Etherpad
+
+- "Put your questions below, most recent on top" did not work as expected because when a user is pressing RET on the line before the first itemize item, you end up without an itemize line. Speakers were not picking the questions from the bottom.
+
+ - Speakers probably don't have time to answer everything live, but they can review the pad for unanswered questions after the conference.
+
+ - Example:
+
+ - \*\* Questions
+
+ - Q2: sample text <&#x2013; people started the first question here despite of three indicators right below, above and in-line
+
+ - Q1: sample text
+
+ - (please add your question on the top of the list)
+
+ - It turned out to work better with the following template - very nice!
+
+ - \*\* Questions
+
+ - Q4:
+
+ - Q3:
+
+ - Q2: sample text
+
+ - Q1: sample text
+
+ - (please add your question on the top of the list)
+
+- Some questions were missed as subquestions were added with the same format as answers. Maybe we should prefix questions with "Q: " for better identification of questions? +1+1
+
+- I guess that changes in Etherpad before the current viewport will shift the view slightly. E.g. add 10 lines at the top, and those who view lines ~100 will still look at line ~100, but at the contents of line 90. This probably confuses both moderators and speakers slightly and thus leads to a "small" re-synchronization issue for readers. If we reuse Etherpad next year, it would be great if a) there was an auto-scroll functionality (so that you always stay on the same content) and b) a way to create sections (and fold them in your personal view). It's also easier to jump to the current talk if the sections were indexed.
+
+- Maybe have an etherpad per talk. That way, colors don't need to get deleted inbetween talks. A "meta" etherpad could contain meta information (like this general feedback) and also a link to the current etherpad. That way, one doesn't need the sections I mentioned above.
+
+- Unmoderated etherpad worked great until bad faith questions started with RMS. This could have used a moderation process.
+
+ - I think it generally went well, and I'm glad that speakers and participants were pretty good at being civil and respectful. I think it's okay that people ask off-topic questions, like the way sometimes people were curious about what people used to draw boxes or highlight things on their screen. Even the tougher questions for rms were phrased more politely than they could have otherwise been, so I appreciate the thoughtfulness people put in. We'll make it clear that speakers can answer questions in any order and focus on any questions they like. I'm glad so many people wanted to talk to the speakers, and that the speakers were able to answer so many questions. We can also respectfully ask speakers if they want to be open to all questions, or to focus on just a few. - sachac
+
+
+## It is a little difficult to keep up with the talks, IRC, and the Etherpad especially with just one monito. Love the Etherpad though.
+
+- Karl thinks that chatting needs to have a separate place from the Etherpad. So I'd pleadge to keep it that way.
+
+- Don't disagree, but too many questions were asked on IRC instead of the Etherpad.
+
+ - IRC can be too hard for speakers to monitor, so maybe we can ask more volunteers to copy questions to the Etherpad. What's a good way to manage this?
+
+ - Maybe use a template like "Q: (from IRC's <username>): &#x2026;.."? That could prevent duplicate questions.
+
+ - I'm convinced that this would help a lot but I don't think that we can "enforce" people to stick to that pattern. Too many people are joining throughout the day and therefore we'd have to remind people all the time (in case the other Q:-examples do not provide enough clues).
+
+- I gave up trying to monitor all three areas and decided to watch the chat as well as the presentations.
+
+
+## Diversity
+
+- What does it mean to be an Emacs user? What do others think about Emacs users? Do they think we're all men and free software zealots? I think it's very important to figure out why more women are not wanting to present at this conference. What is it about our community that's blocking women from presenting at EmacsConf? Let's try to work on that over the year so we can be better prepared for next year's conference.
+
+ - How many women submitted proposals that were turned down? — this would be an interesting question for a "community" discussion (as below&#x2026;)
+
+ - We managed to not turn down **any** proposals! We squeezed all of them in! Mwahahaha! - sachac
+
+ - Also, the question above should probably be generalized to cover "who participates in discussions about Emacs&#x2026; in any venue?"
+
+ - The initial question was definitely incomplete as any numbers are by themselves useless. Absolute counts and relative percentages would be more educational.
+
+ - Is something blocking women from presenting?
+
+ - Well, there are probably all sorts of structural issues: disproprotionate effects of COVID-related changes (ex: I'm not going to get a babysitter so that I can work on Emacs things), general life/culture things (ex: I'm the primary caregiver of a young child), so even if the Emacs community is super nice (or at least the parts of it I focus on), it's just tough to make time! =) Anyway, if you know more women who might have something interesting to share, maybe you can keep an eye out for the next call for proposals, encourage them to submit something, and help figure out how to make time for them to be able to do so? - sachac
+
+- I was uncomfortable to see people hijacking RMS's talk to ask questions of a personal nature. This doesn't mean questions and concerns about diversity (or sexual harrassment allegations, etc.) shouldn't be addressed! However, a Paparazzi-style confrontation in a Q&A section isn't very professional (unless you're a professional Paparazzi) and I think "call out culture" doesn't actually match the ethos of Emacs. +1+1
+
+ - The action item that I'd suggest would be to have a "community discussion" section that is done in the form of a round table (maybe before the main conference starts for next time — this time it could be an optional "announced" unconference/breakout session). It might be enough for the organizers to have a public Jitsi call advertised, and invite people to join a conversation they were going to have anyway. This way, anyone with an interest in "community stuff" will have a chance to make themselves heard (by someone): and the code of conduct could also be discussed or clarified at that time.
+
+ - Disclosure: I am personally VERY interested in "community stuff", and would be happy to contribute to helping such an event! Or if someone wants to follow up with me about this 1-to-1, please feel free! — Joe / jcorneli / joseph.corneli@hyperreal.enterprises
+
+ - Let's start a public video chat conversation around this! (How to have more on-going user engagement, keep it fun, diverse, etc.)[corwin]. +1
+
+ - Sounds like fun. =) Feel free to put together something like this next time! - sachac
+
+ - Will do! -J
+
+
+## Music
+
+- bandali could add the URLs to the pieces of music he was using which was appreciated very much
+
+- <http://churls.world/casiopeia%20-%20basement%20days/basement-days.html> Casiopeia web interface and metadata created with Emacs
+
+
+## Maybe <https://github.com/wwmm/pulseeffects> auto gain and compressor can help with the different audio levels of speakers and pre-recorded videos
+
+
+## Maybe some question moderation since some did not seem to be related to the prior talk.
+
+
+## I would have liked some structured breaks. I wanted to see as many talks as possible, however I didn't have as much time between talks as I would have liked to take care of my body.
+
+- We actually had a lunch break this time, yay! =) And most of the talks were prerecorded (usually with a heads-up), so if there's a talk you're less interested in, that's a perfect time to step away. - sachac
+
+
+<a id="pad-colophon"></a>
+
+# Colophon
+
+
+## BigBlueButton (thanks to Free Software Foundation)
+
+
+## gstreamer for streaming
+
+
+## Icecast for broadcast
+
+
+## Etherpad for collaborative pad from <https://etherpad.wikimedia.org/>
+
+
+## Ikiwiki for wiki
+
diff --git a/2020/pad.org b/2020/pad.org
new file mode 100644
index 00000000..765e99f4
--- /dev/null
+++ b/2020/pad.org
@@ -0,0 +1,2667 @@
+#+TITLE: EmacsConf 2020 Etherpad
+#+OPTIONS: broken-links:t h:2 toc:1
+
+Thanks to alphapapa for helping archive this pad!
+
+- [[https://emacsconf.org/2020/schedule/35][Conference info, how to watch/participate]]
+- [[https://emacsconf.org/conduct/][Guidelines for conduct]]
+
+#+BEGIN: columnview :id global :format "%CUSTOM_ID%START_TIME%QA_START%END_TIME" :maxlevel 1
+| CUSTOM_ID | START_TIME | QA_START | END_TIME |
+|--------------+------------+----------+----------|
+| pad-license | | | |
+| pad-contrib | | | |
+| pad01 | | | |
+| pad02 | | | |
+| pad03 | 9:40 | | 9:58 |
+| pad04 | | | |
+| pad05 | | 10:28:47 | 10:43:49 |
+| pad06 | 10:45:48 | 10:57:38 | 10:59:48 |
+| pad07 | 11:00:47 | | 11:24:51 |
+| pad08 | 11:26:34 | | 11:43:33 |
+| pad21 | 11:45:20 | | 12:26:00 |
+| pad09 | | | |
+| pad10 | 13:17:07 | | 13:25:25 |
+| pad11 | 13:26:16 | | 13:41:53 |
+| pad12 | 13:43:24 | | 14:00:07 |
+| pad13 | 14:01:42 | | 14:13:50 |
+| pad14 | 14:15:00 | | 14:34:46 |
+| pad15 | 14:36:18 | | 14:53:03 |
+| pad16 | 14:54:36 | | 15:15:51 |
+| pad17 | 15:17:33 | | 15:39:00 |
+| pad18 | 15:39:41 | | 16:01:03 |
+| pad19 | 16:02:37 | | 16:10:30 |
+| pad20 | 16:17:32 | | 16:38:32 |
+| pad40 | | | |
+| pad41 | | | |
+| pad38 | 09:12:40 | | 09:17:51 |
+| pad22 | 09:19:39 | | 09:48:34 |
+| pad23 | 09:49:24 | | 10:31:44 |
+| pad24 | 10:34:52 | | 10:55:39 |
+| pad25 | 10:57:19 | | 11:07:08 |
+| pad39 | 11:09:04 | | 12:04:31 |
+| | | | |
+| pad26 | 13:06:20 | | 13:21:51 |
+| pad27 | 13:23:01 | | 13:33:00 |
+| pad28 | 13:34:52 | | |
+| pad29 | | | |
+| pad30 | | | |
+| pad31 | | | |
+| pad32 | | | |
+| pad33 | | | |
+| pad34 | 16:05 | | 16:28 |
+| pad35 | 16:29 | | 16:46 |
+| pad42 | | | |
+| pad-well | | | |
+| pad-improve | | | |
+| pad-colophon | | | |
+#+END:
+
+
+* License and contribution agreement
+ :PROPERTIES:
+ :CUSTOM_ID: pad-license
+ :END:
+
+
+Except where otherwise noted, the material on the EmacsConf pad are dual-licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 International Public License; and the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) an later version.
+
+Copies of these two licenses are included in the EmacsConf wiki repository, in the COPYING.GPL and COPYING.CC-BY-SA files: https://emacsconf.org/COPYING/.
+
+By contributing to this pad, you agree to make your contributions available under the above licenses. You are also promising that you are the author of your changes, or that you copied them from a work in the public domain or a work released under a free license that is compatible with the above two licenses. DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION.
+
+
+* Contribution guidelines
+ :PROPERTIES:
+ :CUSTOM_ID: pad-contrib
+ :END:
+
+This pad is here to be curated by everybody and its rough structure is like that:
+
+1. General info and license
+2. A section for each talk -> please do add questions and notes
+3. A general feedback section
+
+
+* [[https://emacsconf.org/2020/schedule/01][01: Sacha Chua (sachac): Emacs News Highlights]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad01
+ :END:
+
+** Questions
+
+*** Any news about guile-on-emacs? Is it a dead project?
+
+- 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?
+
+- Not yet, although https://www.emacswiki.org/emacs/Usergroups is a start
+
+** Notes
+
+- 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
+
+
+* [[https://emacsconf.org/2020/schedule/02][02: Leo Vivier (zaeph): An Emacs Developer Story: From User to Maintainer]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad02
+ :END:
+
+
+** 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.
+
+
+* [[https://emacsconf.org/2020/schedule/03][03: Bala Ramadurai: Idea to Novel Superstructure: Emacs for Writing]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad03
+ :START_TIME: 9:40
+ :END_TIME: 9:58
+ :END:
+
++ 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-colums (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
+
+
+* [[https://emacsconf.org/2020/schedule/04][04: Jonathan Gregory: Music in Plain Text]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad04
+ :END:
+
+** Questions
+
+
+
+*** Do you have any thoughts on generating scores in chant notation (neumes)?
+
+**** I'm not familiar with chant notation, but I know there's information on the manual.
+
+*** Do you use this to compose or to write up compositions...?
+
+**** 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 heighs?
+
+**** [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 controller, so I haven't tried it.
+
+*** Did you ever write hughe scores (BigBand/Orchestra) in Emacs?
+
+**** Never, but that's certainly possible.
+
+*** Is there 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
+
+
+* [[https://emacsconf.org/2020/schedule/05][05: Grant Shangreaux (shoshin): Bard Bivou(m)acs - Building a bandcamp-like page for an album of music]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad05
+ :QA_START: 10:28:47
+ :END_TIME: 10:43:49
+ :END:
+
+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 is 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, ...), 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 w/o 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...?
+ - 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.
+
+
+* [[https://emacsconf.org/2020/schedule/06][06: Corwin Brust (mplscorwin): Trivial Emacs Kits]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad06
+ :START_TIME: 10:45:48
+ :QA_START: 10:57:38
+ :END_TIME: 10:59:48
+ :END:
+
++ 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. -- i.e. different defaults for different groups?
+
+- [Corwin] Implicitly, yes. My argument is that we should rethink the problem of building and maintaining Emacs confirguration 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 personall 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 think that's grabbing attention. I haven't tried it under GNU/Linux. My familyare (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 cure. I think this is the most important problem space in freesoftware, FWIW.
+
+** Notes
+
+- https://github.com/dungeon-mode/game co-founder
+- Initial "trolling" by showing presentation notes in different editors: vim, Notepad++, VSCode, sublime
+- LISP wasn't on the list.
+- Disagreement is not the barrier.
+- Emacs is threatening as something that addresses many different needs/use-cases.
+
+
+* [[https://emacsconf.org/2020/schedule/07][07: Sid Kasivajhula: Beyond Vim and Emacs: A Scalable UI Paradigm]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad07
+ :START_TIME: 11:00:47
+ :END_TIME: 11:24:51
+ :END:
+
+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. More likely, minor modes could be coupled 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 -- 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
+
+*** 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"...?
+
+**** Vim users don't remap their keys. The homerow is not a big deal, actually.
+
+***** Hm... 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 interace 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..."
+ * "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"
+ * .... 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
+
+
+* [[https://emacsconf.org/2020/schedule/08][08: Andrew Tropin: Building reproducible Emacs]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad08
+ :START_TIME: 11:26:34
+ :END_TIME: 11:43:33
+ :END:
+
++ 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(?)
+
+* [[https://emacsconf.org/2020/schedule/21/][21: Eduardo Ochs: On why most of the best features in eev look like 5-minute hacks]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad21
+ :START_TIME: 11:45:20
+ :END_TIME: 12:26:00
+ :END:
+
++ Actual start and end time (EST): Start 2020-11-28T11.45.20 (~45min talk); 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
+
+
+
+* [[https://emacsconf.org/2020/schedule/09/][09: Rainer König: Orgmode - your life in plain text]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad09
+ :END:
+
++ (End 2020-11-28T13.16.44)
+
+** Questions: - Put your questions below, most recent on top:
+
+*** 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 here: 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?+2
+
+**** 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 orgmode 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..." timestamps which helps me to identify the tasks I procrastinate. ;-)
+
+**** Not a question but thank you so much for your videos Rainer +1+1+1
+
+***** 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
+
+
+
+* [[https://emacsconf.org/2020/schedule/10][10: Andrea: Lead your future with Org]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad10
+ :START_TIME: 13:17:07
+ :END_TIME: 13:25:25
+ :END:
+
++ 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/
+
+
+
+* [[https://emacsconf.org/2020/schedule/11][11: the org-gtd package: opinions about Getting Things Done -Speaker(s): Aldric]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad11
+ :START_TIME: 13:26:16
+ :END_TIME: 13:41:53
+ :END:
+
++ 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.
+
+
+
+* [[https://emacsconf.org/2020/schedule/12][12: Leo Vivier: One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad12
+ :START_TIME: 13:43:24
+ :END_TIME: 14:00:07
+ :END:
+
++ 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...) in one single place.
+
+***** possible walk around by some hacks?
+
+*** Do you switch between British and French accents?
+
+*** What's the Emacs icon
+
+**** Browser extension for org-protocol (anyone got the link / name?) is this https://addons.mozilla.org/en-US/firefox/addon/org-capture/ or this https://addons.mozilla.org/en-US/firefox/addon/edit-with-emacs1/
+
+*** 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...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 ;-)
+
+******* 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. --alphapapa
+
+******** 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 agend 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 (?) ... "
+
+
+
+* [[https://emacsconf.org/2020/schedule/13][13: Joseph Corneli, Raymond Stanley Puzio, and Cameron Ray Smith: Experience Report: Steps to "Emacs Hyper Notebooks"]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad13
+ :START_TIME: 14:01:42
+ :END_TIME: 14:13:50
+ :END:
+
++ 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.
+
+**** If you can use it from the command line, you could use it in org mode using what we are working on. -RSP
+
+*** 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!
+
+*** Could you post some links?+1
+
+**** see Notes below
+
+*** 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
+
+* [[https://emacsconf.org/2020/schedule/14][14: Adam Ard: README-Driven Design]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad14
+ :START_TIME: 14:15:00
+ :END_TIME: 14:34:46
+ :END:
+
++ 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
+
+* [[https://emacsconf.org/2020/schedule/15][15: Adolfo Villafiorita: Moving from Jekyll to OrgMode, an experience report]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad15
+ :START_TIME: 14:36:18
+ :END_TIME: 14:53:03
+ :END:
+
++ 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.
+
+*** Not a question, but thanks for the talk!
+
+** 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-thml)
+
+*** Other static webpage generators: https://github.com/novoid/lazyblorg/wiki/Similar-Projects
+
+
+
+* [[https://emacsconf.org/2020/schedule/16][16: Leo Vivier: Org-roam: Presentation, Demonstration, and What's on the Horizon]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad16
+ :START_TIME: 14:54:36
+ :END_TIME: 15:15:51
+ :END:
+
+- 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... 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?
+
+**** ... 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
+
+
+
+* [[https://emacsconf.org/2020/schedule/17][17: Noorah Alhasan: Org-mode and Org-Roam for Scholars and Researchers]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad17
+ :START_TIME: 15:17:33
+ :END_TIME: 15:39:00
+ :END:
+
++ 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
++ Slides/presentation: https://github.com/nalhasan/emacsconf2020
+
+** 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...
+
+**** You can create groups for collaborative projects in Zotero and this is a plus. (thanks for the answers! I'll give it a try!)
+
+undefined.1. 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...?" 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?
+
+
+
+* [[https://emacsconf.org/2020/schedule/18][18: Leo Vivier (zaeph): Org-roam: Technical Presentation]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad18
+ :START_TIME: 15:39:41
+ :END_TIME: 16:01:03
+ :END:
+
+ + 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... 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
+
+*** "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"
+
+
+
+* [[https://emacsconf.org/2020/schedule/19][19: Brett Gilio: Sharing blogs (and more) with org-webring]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad19
+ :START_TIME: 16:02:37
+ :END_TIME: 16:10:30
+ :END:
+
++ Actual start and end time (EST): Start 2020-11-28T16.02.37; End 2020-11-28T16.10.30;
++ https://sr.ht/~brettgilio/org-webring
+
+** 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
+
+****** -- that is done manually Currently. I wish there was an Easier way. There should be a way to export public definition DocStrings.
+
+** Notes
+
+*** Any More questions on org-webring, email brettg@gnu.org
+
+* [[https://emacsconf.org/2020/schedule/20][20: Corwin Brust (mplsCorwin): OMG Macros]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad20
+ :START_TIME: 16:17:32
+ :END_TIME: 16:38:32
+ :END:
+
++ 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 think that's grabbing attention. I haven't tried it under GNU/Linux. My familyare (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 cure. I think this is the most important problem space in freesoftware, 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; lmk if you have any trouble finding fruit to throw
+
+** Notes
+
+* Day 1 Closing remarks by Sacha
+ :PROPERTIES:
+ :CUSTOM_ID: pad40
+ :END:
+
++ (2020-11-28T16.14.07-2020-11-28T16.16.06 + 2020-11-28T16.40.39-2020-11-28T16.52.55)
+
+** 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, jcorneli, mplsCorwin, publicvoit, sachac, seabass, zaeph
+
+*** Speakers and participants
+
+** See you tomorrow!
+
+* Day 2: Opening remarks
+ :PROPERTIES:
+ :CUSTOM_ID: pad41
+ :END:
+
++ 2020-11-29T09.00.35-2020-11-29T09.12.05
+
+** Notes
+
+*** "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).
+
+* [[https://emacsconf.org/2020/schedule/38][38: John Wiegley: Emacs development update]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad38
+ :START_TIME: 09:12:40
+ :END_TIME: 09:17:51
+ :END:
+
++ 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.
+
+
+
+* [[https://emacsconf.org/2020/schedule/22][22: Musa Al-hassy: Powering-up Special Blocks]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad22
+ :START_TIME: 09:19:39
+ :END_TIME: 09:48:34
+ :END:
+
++ 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")) ...) +1
+
+**** 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? :)+1
+
+**** 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
+
+*** [[https://www.reddit.com/r/emacs/comments/k2whsy/declaring_new_special_blocks_with_arguments/][Reddit discussion]]
+
+*** Elisp Reference Sheet: https://alhassy.github.io/ElispCheatSheet/CheatSheet.pdf
+
+*** My Emacs init: https://github.com/alhassy/emacs.d#a-life-configuring-emacs
+
+
+* [[https://emacsconf.org/2020/schedule/23][23: Tuấn-Anh Nguyễn: Incremental Parsing with emacs-tree-sitter]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad23
+ :START_TIME: 09:49:24
+ :END_TIME: 10:31:44
+ :END:
+
++ 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. (FIXME: add link here).
+
+**** 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.
+
+*** 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... 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? +1
+
+**** 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...
+
+**** 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
+
+*** 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.+1+1
+
+**** 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
+
+*** Q2: Will elisp performance be more competitive with gccemacs enough to make tree-sitter in elisp more attractive? (+1)+1
+
+**** The point of this project is to reuse other people's efforts, not rewriting them.
+
+**** The garbage collection may still pose some problems and introduce GC latency.
+
+*** 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://tree-sitter.github.io/tree-sitter/ (<- parser)
+
+*** Regular expressions are not powerful enough.
+
+*** LSP has high latency and is resource intensive, oft.
+
+*** Extended video version will get uploaded eventually after the event. (FIXME: add link)
+
+
+
+* [[https://emacsconf.org/2020/schedule/24][24: Andrea: Analyze code quality through Emacs: a smart forensics approach and the story of a hack]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad24
+ :START_TIME: 10:34:52
+ :END_TIME: 10:55:39
+ :END:
+
++ 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.
+
+*** Copied Q&A from IRC:
+
+**** How did you summon, resize and dismiss that window so seamlessly?
+
+***** org-roam and C-x0
+
+****** 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/
+
+
+
+* [[https://emacsconf.org/2020/schedule/25][25: Zen Monk Alain M. Lafon: Traverse complex JSON structures with live feedback]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad25
+ :START_TIME: 10:57:19
+ :END_TIME: 11:07:08
+ :END:
+
++ Actual start and end time (EST): Start: 2020-11-29T10.57.19; End: 2020-11-29T11.07.08
+
+** 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?+1
+
+**** 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.
+
+
+
+* [[https://emacsconf.org/2020/schedule/39][39: Richard Stallman: NonGNU ELPA]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad39
+ :START_TIME: 11:09:04
+ :END_TIME: 12:04:31
+ :END:
+
++ 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)
+
+*** Lunch break is coming up - it's okay to continue this conversation in the pad or IRC if you like (or continue, if you like)
+
+**** Okay! Wrapping up, thank you so much for live questions and answers
+
+*** 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 libre office 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 non-GNU ELPA link to non-free sites like GitHub? This does: https://elpa.gnu.org/nongnu/caml.html
+
+**** Mistake to talk about a non-free site. A site is not a program. Programs
+
+**** 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.
+
+**** Same for GNU ELPA https://elpa.gnu.org/packages/company.html
+
+*** 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 non-GNU 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
+
+**** stallman.org/articles/genderneutrality.html - not a GNU Project policy, personal ideas on the subject
+
+**** https://stallman.org/articles/genderless-pronouns.html seems to be the correct link
+
+**** 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 non-GNU 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 non-GNU 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 non-GNU 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. ... We can put packages in non-GNU 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."
+
+* Lunch break
+
++ 2020-11-29T12.06.04 2020-11-29T13.05.00
+
+
+* [[https://emacsconf.org/2020/schedule/26][26: Pierce Wang: Emacs as a Highschooler: How It Changed My Life]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad26
+ :START_TIME: 13:06:20
+ :END_TIME: 13:21:51
+ :END:
+
++ 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?+1+1+1
+
+**** 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?+1+1
+
+**** 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, ...) 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
+
+
+
+* [[https://emacsconf.org/2020/schedule/27][27: Vasilij "wasamasa" Schneidermann: State of Retro Gaming in Emacs]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad27
+ :START_TIME: 13:23:01
+ :END_TIME: 13:33:00
+ :END:
+
++ 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/
+
+*** More on the alt-stream: https://live.emacsconf.org/alt.html
+
+
+
+* [[https://emacscon.org/2020/schedule/28][28: Erik Elmshauser and Corwin Brust: Welcome To The Dungeon]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad28
+ :START_TIME: 13:34:52
+ :END:
+
++ 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
+
+*** 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?
+
+*** (please add your question on the top of the list)
+
+
+
+** Notes
+
+*** https://github.com/dungeon-mode/game
+
+
+
+* [[https://emacsconf.org/2020/schedule/29][29: Erik Elmshauser and Corwin Brust: Pathing of Least Resistance]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad29
+ :END:
+
+/This time slot was combined with the previous./
+
+* [[https://emacsconf.org/2020/schedule/30][30: Gabriele Bozzola (@sbozzolo) : A tour of vterm]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad30
+ :END:
+
+
+** 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
+
+
+
+* [[https://emacsconf.org/2020/schedule/31][31: Grant Shangreaux: Lakota Language and Emacs]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad31
+ :END:
+
+
+** 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?+1+1
+
+*** 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
+
+*** Quail
+
+*** https://git.sr.ht/~shoshin/lakota-input.git
+
+* [[https://emacsconf.org/2020/schedule/32][32: Eric Abrahamsen: Object Oriented Code in the Gnus Newsreader]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad32
+ :END:
+
+
+** 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."
+
+
+
+* [[https://emacsconf.org/2020/schedule/33][33: Fermin MF: Maxima a computer algebra system in Emacs]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad33
+ :END:
+
+
+** 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?)
+
+*** Q8 Are you planning to upstream your package into Maxima? (would be nice :)
+
+*** Q7 In which University do you start to use Maxima?
+
+*** Q6. Is there support for images in maxima-mode?
+
+*** Q5: Is Maxima's syntax a strict infix lisp syntax or are there exceptions and special cases? Yes I mean Maxima itself.
+
+*** Q4. Is maxima easy to get into in your opinion? (has its quirks though!, mailing list is usually helpful)
+
+*** 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*)
+
+*** Q2: how does maxima compare to sagemath in emacs? does maxima have more support because it is written in common lisp whereas sage math is written in python?
+
+*** 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.)
+
+
+
+* [[https://emacsconf.org/2020/schedule/34][34: Matthew Zeng: Extend Emacs to Modern GUI Applications with EAF]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad34
+ :START_TIME: 16:05
+ :END_TIME: 16:28
+ :END:
+
++ 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
+
+ * https://github.com/manateelazycat/emacs-application-framework
+
+
+* [[https://emacsconf.org/2020/schedule/35][35: Zachary Kanfer: WAVEing at Repetitive Repetitive Repetitive Music]]
+ :PROPERTIES:
+ :CUSTOM_ID: pad35
+ :START_TIME: 16:29
+ :END_TIME: 16:46
+ :END:
+
++ Actual start and end time (EST): Start 2020-11-29T16:29; Stop 2020-11-29T16:46
+
+** Questions (note that we don't have audio out from Zachary's computer in BigBlueButton, so any music demos will need to wait for a recorded video)
+
+*** Q9 : Any MIDI mapping possibilities? (Sorry Q8)
+
+*** Q8: 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.
+
+**** That'd be awesome, thanks! Will do
+
+**** 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.
+
+*** Q6: 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.
+
+*** Q7: have you written any actual songs (in RRRM/WAVEing)? Can you play one ?
+
+*** 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)
+
+*** 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!(+1)
+
+**** The initial app (the inspiration) worked this way. It is definitely something worth looking into.
+
+
+
+** Notes
+
+*** notes, references, and links at https://zck.me/emacsconf2020
+
+* Closing remarks (Sunday)
+ :PROPERTIES:
+ :CUSTOM_ID: pad42
+ :END:
+
++ Start: 2020-11-29T16:48; Q&A: ~2020-11-29T17:05; Stop: 2020-11-29T17:24.
+
+#+BEGIN_QUOTE
+Emacs is very, very complicated. And using computers is hard. With Emacs we have an ideal opportunity to learn from our errors. To take on hard work with diverse groups. And to effect lasting solutions. To make Emacs, and thereby any word-or-software-thing, in practically any human and spoken language, easier to learn and to use. Forever. Life doesn't come with warning labels or margin notes. We have a blank map and an uncertain number of batteries for the torch. But there's a light in the darkness. It's freedom. It's the idea of giving to people something that cannot be taken away.
+#+END_QUOTE
+
+--Corwin Brust, as read by Leo Vivier
+
+** Stats:
+
+*** 16 talks today, 37 total
+
+*** Peak of 320 viewers of /main.webm and 15 viewers of /main-480p.webm (last year: ~270)
+
+*** 126 people on the Etherpad
+
+** Next steps:
+
+*** Emacs meetups - there are a few linked to in the Emacs News Highlights talk https://github.com/sachac/emacsconf-2020-emacs-news-highlights
+
+*** 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
+
+**** If you have questions, check the individual talk page for follow-up info or search for the speaker elsewhere
+
+*** 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
+
+**** #emacsconf-accessible - thanks to jcorneli, seabass, dto
+
+*** Thank you to everyone!
+
+** Oops! The stream will be quickly restored so that we can play wasamasa's demo
+
+** Questions
+
+*** Q16: Will you publish the Etherpad as-is, or will you clean it up a little bit, e.g. fix spelling miztekes, grammar bad, identifiy answers to the questions and similar? (That might be time consuming)
+
+*** Q15: Will the Etherpad be archived somewhere on emacsconf.org?
+
+**** Yes, we'll link to it from emacsconf.org/2020 like last year, and we can copy the sections to the individual talk pages as well
+
+*** Q14: Also, it's bandali's birthday tomorrow! =) - sachac
+
+**** Happy birthday bandali!! Its not early, for me its already after 12 :D
+
+**** Happy birthday!!
+
+*** Q13: wasamasa's demos will be played after the closing remarks
+
+*** Q12: Congratulations on another emacsconf everybody! - <3 brett
+
+*** Q11: Many people seem to be interested in the video's that will be available later. I've got recordings of the entire conference and the ability to share them now. Do I have permission to do so? Is this OK copyright wise?
+
+**** The videos are CC By ShareAlike, although it might be nice to have people linking to the emacsconf.org site and video archive so that they can discover the other talks from the previous years, so it might be nice to wait
+
+**** So if I share a folder with the video's including a readme with the licence and a link to emacsconf.org its ok?
+
+***** let's check with bandali, it would be nice to have help getting stuff out =)
+
+***** @OP: The team would welcome help very much. Feel free to contact Amin on bandali@gnu.org
+
+***** I'll do the upload and will post the link in #emacsconf-org so you can see if its to everyone's liking. Also i'm happy to help with the cutting process.
+
+**** Most of last year's conference is also there
+
+*** Q10: Favorite moments/talks from this the past two days?
+
+**** Aside from all the awesomeness of the talks, I really appreciated how y'all kept things pretty friendly and respectful and kind. =) - sachac
+
+*** Q9: It's not a question but Sacha Chua, I am one of the people that created Emacs Planet in Spanish. Could you visit it and include in your news? :-)
+
+**** oh, http://planet.emacs-es.org/ is down right now, do I have the right URL? it's only temporally -
+
+**** Sure, I can pull in the RSS . Thanks, the next week will works.
+
+*** Q8: Thanks a lot for eveything these last two days!! This conference was so epic, I loved it. +++
+
+*** Q7: Sacha, have you thought of organizing the whole library of Emacs News, so people could find things by category/topic (other than searching across all the web pages)?
+
+**** http://github.com/sachac/emacs-news - happy parsing
+
+*** Q6: Great conference thank you very much. The schedule of the emacsconf this year is not so APAC-friendly. I wonder whether there is any plan to accommodate the APAC timezone in some way?
+
+**** Sure, want to organize one? =) - sachac
+
+***** I'll help (orgg) (thanks I'll get in touch - dragestil)
+
+*** Q5: Why Corwin Brust use Windows?
+
+**** It's currently a necessity.
+
+*** Q4: Are there any tools that you wish existed in Emacs that would help with organizing these confs?
+
+**** dungeon-mode as colaboration space? meet there and build groups? let emacs be THE GAME?+1 +1
+
+**** answer from random user: etherpad org-mode! Live-editing an org-file together!+1 (please somebody work on this project so that we get a good solution here!)
+
+***** Well, yeah, but that's pie-in-the-sky... Maybe next decade? haha :)
+
+****** There's already a project that has started some work on etherpad+Emacs: https://github.com/zzkt/ethermacs, but it's currently on hiatus and doesn't support collaborative editing. Maybe a challenge for someone who wants to tinker with Emacs Lisp? :)
+
+******* Wow, that's great!
+
+***** Look at crdt.el — it is very close to ready. Ray (RSP) and I were using it for some of our work together on ob-servant. Qiantan is responsive to bug reports, and has support for Org mode as a priority
+
+****** We weren't quite sure how it might deal with 100+ people, but maybe! (also, ob-servant is a great name =) )
+
+******* Only 100 choose 100 ways to find out :-)...
+
+******* But yeah to be clear it definitely wasn't ready for this year. Maybe next year!
+
+******** On ob-servant, all credit to Ray for the clever name (and 99% of the programming as well!)
+
+********* [Also looking forward to seeing crdt.el connect with emacs-tree-sitter — sync the tree!...]
+
+*** Q3: Amin, are you wearing a suit too next year?
+
+*** Q2: Where do y'all see Emacs going in the next year?
+
+**** More awesomeness!
+
+*** Q1: Why is Leo so sexy? Too Sexy even? I want a Leo Twitch Channel to can see he all days! Bandali isn't bad either!!!!
+
+**** https://www.youtube.com/watch?v=P5mtclwloEQ
+
+
+
+
+
+* General Feedback: What went well?
+ :PROPERTIES:
+ :CUSTOM_ID: pad-well
+ :END:
+
+
+
+** Pre-recording the talks was a win ... less chance of failure live.
+
+** I really liked how questions where approached with this Etherpad. I think it is a very smart idea and better than most things I have seen in other kind of conferences. This is very nice and organized. Really excited for tommorow, could only watch the second half of the stream today (looking forward to see the rest when uploaded) but the talks where awesome. Thanks for everything. +1
+
+** "here is a link for mpv" approach to livestreaming is much appreciated +1+1+1+1
+
+** bandali super helpful and responsive with AV issues +1
+
+** the timestamps on all talks in etherpad are very welcome!
+
+*** Sorry, I missed the first few talks to time-stamp :-(
+
+**** Ah, don't worry. How did you even do that? I saw some $... magic?
+
+***** $$tt is mapped to the current second like 2020-11-28T22.43.55 via autokey (Linux)
+
+****** See https://karl-voit.at/apps-I-am-using/ for "Snippets"
+
+****** Got it👍
+
+** I love having the Etherpad available immediately during and after talks. I know recordings and more are coming out later, but having access to notes, questions, answers and links is amazing!
+
+** The streaming setup is probably the best result I've seen when doing it with free software. Is the source/config available somewhere? Particularly curious about usage of gstreamer/icecast. Would love to see an organizer post-mortem talk/post so others can reproduce and improve on.
+
+*** (See colophon below)
+
+** Karl's Etherpad maintenance tasks during the event (for reference)
+
+*** when a new talk starts:
+
+**** clear authorship colors by clicking the "strikethrough-eye" in the icon bar
+
+**** add current line number (approx) at the very top of the Pad to ease navigation
+
+**** cut title of upcoming talk and paste it in order to colorize the heading to ease navigation
+
+**** log starting time
+
+***** Karl was using an adapted ISO format like "2020-11-29T20.06.49" and manually corrected it from CET to EST (EST = CET-6hrs)
+
+*** log Q&A start time (if any Q&A)
+
+*** log end time
+
+** We managed to get the alternate stream up and running! I just need to remember that my laptop has a mute microphone shortcut instead of fussing around with muting in both OBS and BigBlueButton... - sachac
+
+** Low-resolution stream was appreciated, and running it on live0 worked fine.
+
+** Super-nice to have so many people helping out. zaeph was monitoring audio, calling up speakers (yay emergency contact info), keeping track of the time, checking in people... jcorneli, dto, and seabass were describing things in #emacsconf-accessible. - sachac
+
+** HUGE improvements / gains since 2013 :-) Which was awesome too — the first Emacs Conf! — but WOW this is a truly international event w/ 100+ participants at any given time. Amazing work. -Jcorneli
+
+
+
+* General Feedback: What to improve?
+ :PROPERTIES:
+ :CUSTOM_ID: pad-improve
+ :END:
+
+
+
+** A few speakers jumped right into their talks without providing enough context. +1+1+1Perhaps the organizers can introduce the topic with a summary?
+
+*** +1: A short introduction on the topic might be helpful. "Hi, I'm <XYZ> and I'm going to talk about <ABC>, a <TYU>".
+
+**** Added to pre-talk tech check
+
+** why are talks starting ahead of the schedule? what if i want to skip some and come back later? can i count on the schedule being follwed?
+
+*** From conference experience I recommend showing up a talk earlier than planned :>
+
+*** Maybe add "roughly" infront of the very specific time-stamps of the schedule to emphasize its character of not being exactly planned?
+
+**** Sure, I'll add bold to "Please note that the times on this schedule are a rough approximation, and that the talks might be rearranged or dropped depending on speaker availability.", and move the disclaimer from the bottom of the individual talk pages further up.
+
+***** Since we've had the disclaimer and from my personal experience I know that people likely miss such disclaimers, I do think that "2:18 PM" -> "~2:18 PM" would be more visible.
+
+****** Added ~ =)
+
+** Maybe provide the talk list as an org-file with timestamps? That way we can add it to our agenda :)
+
+*** Sure, you can look at 2020/submissions.org in the git repository you can check out via the instructions at https://emacsconf.org/edit/
+
+**** Oh, wow. Thansk! Completely missed https://git.emacsconf.org/emacsconf-wiki/tree/2020/submissions.org . Now I only need to come up with some elisp to change all timestamps into my timezone. :)
+
+***** See above discussion about the approximateness of the times. =) Just tune in when you want, and then check the schedule to see roughly where we are in terms of talk order, maybe? - SC
+
+****** Good point, thanks :)
+
+** Etherpad
+
+*** "Put your questions below, most recent on top" did not work as expected because when a user is pressing RET on the line before the first itemize item, you end up without an itemize line. Speakers were not picking the questions from the bottom.
+
+**** Speakers probably don't have time to answer everything live, but they can review the pad for unanswered questions after the conference.
+
+**** Example:
+
+***** ** Questions
+
+****** Q2: sample text <-- people started the first question here despite of three indicators right below, above and in-line
+
+****** Q1: sample text
+
+****** (please add your question on the top of the list)
+
+**** It turned out to work better with the following template - very nice!
+
+***** ** Questions
+
+****** Q4:
+
+****** Q3:
+
+****** Q2: sample text
+
+****** Q1: sample text
+
+****** (please add your question on the top of the list)
+
+*** Some questions were missed as subquestions were added with the same format as answers. Maybe we should prefix questions with "Q: " for better identification of questions? +1+1
+
+*** I guess that changes in Etherpad before the current viewport will shift the view slightly. E.g. add 10 lines at the top, and those who view lines ~100 will still look at line ~100, but at the contents of line 90. This probably confuses both moderators and speakers slightly and thus leads to a "small" re-synchronization issue for readers. If we reuse Etherpad next year, it would be great if a) there was an auto-scroll functionality (so that you always stay on the same content) and b) a way to create sections (and fold them in your personal view). It's also easier to jump to the current talk if the sections were indexed.
+
+*** Maybe have an etherpad per talk. That way, colors don't need to get deleted inbetween talks. A "meta" etherpad could contain meta information (like this general feedback) and also a link to the current etherpad. That way, one doesn't need the sections I mentioned above.
+
+*** Unmoderated etherpad worked great until bad faith questions started with RMS. This could have used a moderation process.
+
+**** I think it generally went well, and I'm glad that speakers and participants were pretty good at being civil and respectful. I think it's okay that people ask off-topic questions, like the way sometimes people were curious about what people used to draw boxes or highlight things on their screen. Even the tougher questions for rms were phrased more politely than they could have otherwise been, so I appreciate the thoughtfulness people put in. We'll make it clear that speakers can answer questions in any order and focus on any questions they like. I'm glad so many people wanted to talk to the speakers, and that the speakers were able to answer so many questions. We can also respectfully ask speakers if they want to be open to all questions, or to focus on just a few. - sachac
+
+** It is a little difficult to keep up with the talks, IRC, and the Etherpad especially with just one monito. Love the Etherpad though.
+
+*** Karl thinks that chatting needs to have a separate place from the Etherpad. So I'd pleadge to keep it that way.
+
+*** Don't disagree, but too many questions were asked on IRC instead of the Etherpad.
+
+**** IRC can be too hard for speakers to monitor, so maybe we can ask more volunteers to copy questions to the Etherpad. What's a good way to manage this?
+
+***** Maybe use a template like "Q: (from IRC's <username>): ....."? That could prevent duplicate questions.
+
+****** I'm convinced that this would help a lot but I don't think that we can "enforce" people to stick to that pattern. Too many people are joining throughout the day and therefore we'd have to remind people all the time (in case the other Q:-examples do not provide enough clues).
+
+*** I gave up trying to monitor all three areas and decided to watch the chat as well as the presentations.
+
+** Diversity
+
+*** What does it mean to be an Emacs user? What do others think about Emacs users? Do they think we're all men and free software zealots? I think it's very important to figure out why more women are not wanting to present at this conference. What is it about our community that's blocking women from presenting at EmacsConf? Let's try to work on that over the year so we can be better prepared for next year's conference.
+
+**** How many women submitted proposals that were turned down? — this would be an interesting question for a "community" discussion (as below...)
+
+***** We managed to not turn down *any* proposals! We squeezed all of them in! Mwahahaha! - sachac
+
+**** Also, the question above should probably be generalized to cover "who participates in discussions about Emacs... in any venue?"
+
+**** The initial question was definitely incomplete as any numbers are by themselves useless. Absolute counts and relative percentages would be more educational.
+
+**** Is something blocking women from presenting?
+
+***** Well, there are probably all sorts of structural issues: disproprotionate effects of COVID-related changes (ex: I'm not going to get a babysitter so that I can work on Emacs things), general life/culture things (ex: I'm the primary caregiver of a young child), so even if the Emacs community is super nice (or at least the parts of it I focus on), it's just tough to make time! =) Anyway, if you know more women who might have something interesting to share, maybe you can keep an eye out for the next call for proposals, encourage them to submit something, and help figure out how to make time for them to be able to do so? - sachac
+
+*** I was uncomfortable to see people hijacking RMS's talk to ask questions of a personal nature. This doesn't mean questions and concerns about diversity (or sexual harrassment allegations, etc.) shouldn't be addressed! However, a Paparazzi-style confrontation in a Q&A section isn't very professional (unless you're a professional Paparazzi) and I think "call out culture" doesn't actually match the ethos of Emacs. +1+1
+
+**** The action item that I'd suggest would be to have a "community discussion" section that is done in the form of a round table (maybe before the main conference starts for next time — this time it could be an optional "announced" unconference/breakout session). It might be enough for the organizers to have a public Jitsi call advertised, and invite people to join a conversation they were going to have anyway. This way, anyone with an interest in "community stuff" will have a chance to make themselves heard (by someone): and the code of conduct could also be discussed or clarified at that time.
+
+**** Disclosure: I am personally VERY interested in "community stuff", and would be happy to contribute to helping such an event! Or if someone wants to follow up with me about this 1-to-1, please feel free! — Joe / jcorneli / joseph.corneli@hyperreal.enterprises
+
+***** Let's start a public video chat conversation around this! (How to have more on-going user engagement, keep it fun, diverse, etc.)[corwin]. +1
+
+**** Sounds like fun. =) Feel free to put together something like this next time! - sachac
+
+***** Will do! -J
+
+** Music
+
+*** bandali could add the URLs to the pieces of music he was using which was appreciated very much
+
+*** http://churls.world/casiopeia%20-%20basement%20days/basement-days.html Casiopeia web interface and metadata created with Emacs
+
+** Maybe https://github.com/wwmm/pulseeffects auto gain and compressor can help with the different audio levels of speakers and pre-recorded videos
+
+** Maybe some question moderation since some did not seem to be related to the prior talk.
+
+** I would have liked some structured breaks. I wanted to see as many talks as possible, however I didn't have as much time between talks as I would have liked to take care of my body.
+
+*** We actually had a lunch break this time, yay! =) And most of the talks were prerecorded (usually with a heads-up), so if there's a talk you're less interested in, that's a perfect time to step away. - sachac
+
+
+* Colophon
+ :PROPERTIES:
+ :CUSTOM_ID: pad-colophon
+ :END:
+
+** BigBlueButton (thanks to Free Software Foundation)
+
+** gstreamer for streaming
+
+** Icecast for broadcast
+
+** Etherpad for collaborative pad from https://etherpad.wikimedia.org/
+
+** Ikiwiki for wiki
+
+* COMMENT Org config
+
+
diff --git a/2020/planning.md b/2020/planning.md
new file mode 100644
index 00000000..0ee3233c
--- /dev/null
+++ b/2020/planning.md
@@ -0,0 +1,21 @@
+[[!meta title="Planning"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali"]]
+
+Most of the EmacsConf organizers and other volunteers hang out in the
+`#emacsconf` IRC channel on `chat.freenode.net`. If you would like to
+get involved, come by our `#emacsconf` channel and say hi!
+
+Besides IRC, the [emacsconf-org][emacsconf-org] public mailing list is
+the main medium of communication for the EmacsConf organizers.
+
+The organizers will use this page as a collection of various notes,
+ideas, and plans for organizing the conference, and may add excerpts
+from the channel logs for `#emacsconf` and `#emacsconf-org` to this
+page.
+
+You might find it useful to also look at the plans and notes from
+previous years, such as 2019's [[planning|2019/planning]] and
+[[organizers' notebook|2019/organizers-notebook]] pages.
+
+
+[emacsconf-org]: //lists.gnu.org/mailman/listinfo/emacsconf-org
diff --git a/2020/poster.md b/2020/poster.md
new file mode 100644
index 00000000..7793e300
--- /dev/null
+++ b/2020/poster.md
@@ -0,0 +1,28 @@
+[[!meta title="EmacsConf 2020 poster"]]
+[[!meta copyright="Copyright &copy; 2020 Paul Sutton, Amin Bandali"]]
+
+Paul Sutton created an awesome poster for EmacsConf 2020 for folks to
+share with others to help spread the word about the conference!
+
+The poster and its accompanying sources are available from Paul's
+repository on Debian Salsa, at
+<https://salsa.debian.org/zleap-guest/emacsconf>.
+
+The poster is available in the PDF and PNG formats, along with the
+original ODG source file for it. Direct download links:
+
+- <https://salsa.debian.org/zleap-guest/emacsconf/-/raw/master/emacsconf.pdf>
+- <https://salsa.debian.org/zleap-guest/emacsconf/-/raw/master/emacsconf.png>
+- <https://salsa.debian.org/zleap-guest/emacsconf/-/raw/master/emacsconf.odg>
+
+Paul has kindly licensed this poster under the terms of the Creative
+Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
+license, and you are more than welcome to modify/change it or even use
+it under the terms of the CC BY-SA 4.0 free culture license as a basis
+for a poster for your own event.
+
+Thanks for the cool poster, Paul!
+
+[[!img /i/emacsconf-2020-poster.png
+ size=600x
+ alt="EmacsConf 2020 poster" class="center"]]
diff --git a/2020/prepare.md b/2020/prepare.md
new file mode 100644
index 00000000..17a3e308
--- /dev/null
+++ b/2020/prepare.md
@@ -0,0 +1,181 @@
+[[!meta title="Notes and tips on preparing your talk"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali"]]
+
+This page contains notes and tips for our speakers on preparing their
+talks and presentations. Please read through the list and consider it
+while preparing your talk. If you have any questions, concerns, or
+suggestions please feel free to write to one of the organizers
+directly (e.g. <bandali@gnu.org>), or write to one our organizational
+mailing lists: the public <emacsconf-org@gnu.org> list, or the private
+<emacsconf-org-private@gnu.org> list, depending on the nature of the
+matter you would like to discuss.
+
+Note: being part of a wiki, this page is subject to change (including
+by you!); so please check back every now and again for any changes and
+updates.
+
+[[!toc levels=4]]
+
+### Guidelines for conduct
+
+First and foremost, we ask that you review our [[guidelines for
+conduct|conduct]] when preparing your talk, to make sure we're all on
+the same page and strive to make the event a great experience for all.
+We would be happy to chat with you if you are unsure whether your talk
+or presentation style meets the guidelines laid out in the guidelines
+for conduct. You can email Sacha Chua at <sacha@sachachua.com> to
+chat more about this.
+
+### Before the conference
+
+#### Prerecording talks
+
+For EmacsConf 2020, much like the last EmacsConf, we highly encourage
+and ask you to please consider prerecording your talk(s), *especially*
+for lightning talks, where the allotted time is quite limited and any
+potential technical issues that cannot be resolved quickly will
+greatly detract from the presentation.
+
+Please send us your prerecording(s) preferably by **November 14** (two
+weeks before the conference), or by **November 21** (one week before
+the conference) *the latest*, to allow us enough time to do any needed
+processing (e.g. format or codec conversion) in preparation for the
+event.
+
+Please **send your prerecording(s) via email to <bandali@gnu.org>**,
+either in form of attachments (if reasonably small), or direct link(s)
+to download from elsewhere. If you need assistance with this, please
+write to <bandali@gnu.org> about it.
+
+To make prerecordings, you could use any of the following pieces of
+free software, depending on your needs:
+
+- [OBS](//obsproject.com)
+- [SimpleScreenRecorder](//www.maartenbaert.be/simplescreenrecorder/)
+- [vokoscreenNG](//linuxecke.volkoh.de/vokoscreen/vokoscreen.html)
+- [peek](//github.com/phw/peek)
+- [ffmpeg](//trac.ffmpeg.org/wiki/Capture/Desktop)
+
+You might find the following free software programs useful for editing
+your video recordings:
+
+- [Kdenlive](//kdenlive.org/en/)
+- [Blender](//www.blender.org)
+- [Pitivi](http://www.pitivi.org)
+
+You can see more related tips from last year's [[**tips**|2019/tips]]
+page.
+
+Per GNU Project's [Guide to
+Formats](//audio-video.gnu.org/docs/formatguide.html), we prefer to
+receive prerecorded videos in formats unencumbered by software
+patents, such as `video/webm` (WebM-encoded video files, with `.webm`
+file extension) and `video/ogg` (video files encoded with the Theora
+video codec, encapsulated in an Ogg transport layer, with `.ogg` or
+`.ogv` file extension). However, if for one reason or another you are
+unable to send us your prerecorded video in one of the above formats,
+you may submit them in other common formats, like MPEG-4 (`.mp4`), and
+we will try to convert them to our preferred formats on your behalf.
+
+*Prepare recorded video in 720p; WebM formatted if possible.*
+
+> The conference broadcast will be in
+> [720p](https://en.wikipedia.org/wiki/720p) (1280px x 720px,
+> progressive) using the [Webm](https://www.webmproject.org/) video
+> format. The closer to this format submitted video files arrives in,
+> the less work for volunteers.
+
+#### Office hours for video call tech-checks
+
+For EmacsConf 2020 live talks/sessions, we have been evaluating a
+number of free software video-calling/conferencing tools, namely
+BigBlueButton, Jitsi Meet, and GNU Jami for the video calls with
+speakers delivering live presentations. At this point, BigBlueButton
+seems to be our most likely choice for this year, and we would like to
+do tech-checks with speakers to make sure they are able to use it to
+deliver their live presentation(s) and/or live Q&A.
+
+We ask that speakers who plan to participate in Q&A sessions and/or
+plan to present live schedule a short tech-check with us in the weeks
+leading to the conference, in order to quickly check their ability for
+joining video calls and performing common tasks such as sharing their
+screen. The office hours will likely be on Saturdays or Sundays, but
+we would be happy to try and work out another time if that doesn’t
+work for a speaker.
+
+To schedule a short tech-check, email one of the people listed below
+or visit with us on [#emacsconf-org on Freenode
+IRC](irc://chat.freenode.net/#emacsconf-org).
+
+<table>
+<thead>
+<tr>
+<td>Volunteer</td>
+<td>Email</td>
+<td>IRC Nick</td>
+<td>Timezone</td>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>Corwin Brust</td>
+<td>&lt;<a href="mailto:corwin@bru.st">corwin@bru.st</a>&gt;</td>
+<td>mplsCorwin</td>
+<td>US/Central (UTC-6)</td>
+</tr>
+<tr>
+<td>Leo Vivier</td>
+<td>&lt;<a href="mailto:zaeph@zaeph.net">zaeph@zaeph.net</a>&gt;</td>
+<td>zaeph</td>
+<td>CET (UTC+1)</td>
+</tr>
+<tr>
+<td>Bhavin Gandhi</td>
+<td>&lt;<a href="mailto:bhavin192@geeksocket.in">bhavin192@geeksocket.in</a>&gt;</td>
+<td>bhavin192</td>
+<td>Asia/Kolkata (UTC+05:30)</td>
+</tr>
+<tr>
+<td>Karl Voit</td>
+<td>&lt;<a href="mailto:EmacsConf@Karl-Voit.at">EmacsConf@Karl-Voit.at</a>&gt;</td>
+<td>publicvoit</td>
+<td>CET (UTC+1)</td>
+</tr>
+<tr>
+<tr>
+<td><strong>Your Name</strong></td>
+<td>&lt;your@email&gt;</td>
+<td>&nbsp;</td>
+<td>&nbsp;</td>
+</tr>
+<tr>
+<td><strong>David O'Toole</strong></td>
+<td>&lt;deeteeoh1138@gmail.com&gt;</td>
+<td>dto</td>
+<td>US/Eastern (UTC-5)</td>
+</tr>
+<tr>
+<td>Amin Bandali</td>
+<td>&lt;<a href="mailto:bandali@gnu.org">bandali@gnu.org</a>&gt;</td>
+<td>bandali</td>
+<td>US/Eastern (UTC-5)</td>
+</tr>
+</tbody>
+</table>
+
+If you'd like to help out with the tech-checks, feel free to add your
+name and email to the above list and email <bandali@gnu.org> to plan
+the logistics.
+
+
+<a name="tech-checklist"></a>
+#### Tech checklist
+
+- Can you speak and be heard? Is there echo?
+- Can you hear the organizer?
+- Can you share your screen? Is the screen readable?
+- If you plan to show your keystrokes, is that display visible?
+- If you want to share your webcam (optional), can you enable it? Is it visible? Will there likely be distractions in the background?
+- Can you view the collaborative pad? Will you be comfortable reviewing questions on your own (perhaps by keeping it open beside your shared window), or will you need a volunteer to relay questions to you?
+- Can you share contact information (ex: phone number) so that we can get in touch with you in case of technical issues or scheduling changes?
+- Do you need help finding your way around IRC so that you can check into `#emacsconf-org`? What is your IRC nickname?
diff --git a/2020/present.md b/2020/present.md
new file mode 100644
index 00000000..4b86b3c5
--- /dev/null
+++ b/2020/present.md
@@ -0,0 +1,187 @@
+[[!meta title="Instructions for presenting"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali and Sacha Chua"]]
+
+Hello there!
+
+Please see below for important details, instructions, and tips about
+your presentation for EmacsConf 2020 and the logistics of how the
+event will unfold on Saturday November 28th and Sunday November 29th.
+
+[[!toc]]
+
+## Summary of action items if you will be doing live presentations or Q&A
+
+- Send emergency contact info and complete a tech check by November 22
+- Update your talk information page (optional)
+- Review the schedule close to the time of your presentation
+- Check into `#emacsconf-org` at least 15 minutes before your
+ presentation
+
+## Send emergency contact info and complete a tech check by November 22
+
+If you are delivering a live presentation or will be taking live
+questions via video, please email one of the people listed on the
+table on the <https://emacsconf.org/2020/prepare/> page with a few
+possible times and dates for a short tech-check to make sure you are
+able to connect and use the BigBlueButton instance we will be using
+for video calls. Because you might not notice technical issues while
+presenting, please consider emailing <bandali@gnu.org> your emergency
+contact information (e.g. phone number) so that we can get in touch
+with you if there's a problem.
+
+Please complete your tech check by November 22.
+
+## Update your talk information page (optional)
+
+If you would like to update your talk description, add links, or
+indicate your preferred way of hearing from interested people, feel
+free to edit the individual page for your talk. You can find your
+talk ID by going to the [[schedule]] page, following the link to your
+talk, and noting the two-digit number at the end of the URL. To edit
+the talk information, follow the instructions at
+<https://emacsconf.org/edit/> to check out a copy of the repository,
+edit `2020/info/YOURTALKID.md`, commit, and push your changes. See
+`2020/info/01` or <https://emacsconf.org/2020/schedule/01/> for an
+example.
+
+Alternatively, you can email one of the organizers
+(e.g. <sacha@sachachua.com> or <bandali@gnu.org>) and we would be
+happy to make the change(s) for you.
+
+## Review the schedule close to your presentation time
+
+The schedule for EmacsConf 2020 is available at
+<https://emacsconf.org/2020/schedule/>, with rough approximations for
+session times. We will update this as prerecorded talks are submitted
+and throughout the conference as things come up. In case of technical
+issues, we might play prerecorded lightning talks while sorting things
+out. If you check in early or send us your emergency contact
+information, we can let you know if there are significant changes to
+the time of your presentation.
+
+## Check into #emacsconf-org at least 15 minutes before your presentation
+
+If you will be presenting or answering questions live via video,
+please check in with us at `#emacsconf-org` (a low-traffic channel for
+coordination between organizers and speakers) on freenode IRC maybe 15
+minutes before the approximate time of your talk (or earlier if you're
+available then) and say hi. You can connect to freenode using your
+favourite IRC client and pointing at `chat.freenode.net` (e.g. see our
+[[quick ERC setup|2019/tips#erc]] tip), or by using the EmacsConf web
+IRC client at <https://chat.emacsconf.org>. To help us recognize you,
+please include your name (or pseudonym you submitted the talk under)
+and talk title in your check-in message. One of the organizers will
+then tell you which BigBlueButton room to join and confirm your
+audio/video/screen-sharing setup. If something comes up and you
+cannot check in via IRC, please contact us using the emergency contact
+information in the email sent to you.
+
+We will likely collect questions in a collaborative pad (URL to be
+announced on <https://emacsconf.org/2020/> later). If you have space
+on your screen, you may want to have the pad open on the side so that
+you can keep an eye on the section for your talk, either throughout
+your presentation or during the portion of your talk that you dedicate
+questions and answers. That said, some of the audience members might
+still choose to post questions in the `#emacsconf` and/or
+`#emacsconf-questions` IRC channels. We will try to copy over those
+questions into the collaborative pad so you wouldn't have to monitor
+several places (but if you'd like to, you're more than welcome to!).
+For more information about IRC and the collaborative pad, check out
+<https://emacsconf.org/2020/> closer to the conference date. If you
+do not have the collaborative pad open or find it difficult to
+monitor, you can also ask the organizer in the BigBlueButton room with
+you if there are any questions.
+
+When it is time for your talk, Amin (bandali) will join your
+BigBlueButton room and give you the go-ahead to begin. If you have
+prerecorded your talk and choose to use the prerecording, he will
+stream it and then give you the go-ahead when you are live.
+
+During the presentation:
+
+- **Use a headset or earphones to minimize echo**. To help reduce
+echo, if possible, please use a headset or earphones instead of
+external speakers during live presentations including during Q&A.
+Headset microphones tend to have some form of noise-cancelling built
+into them, which might be helpful for decreasing the ambient noise
+captured by the microphone. If you have one, it might be worth trying
+using it instead of a laptop's built-in microphone.
+
+- **Describe what's going on**. To help the visually impaired members
+of our audience, it would be great if you could try to verbally
+describe what you're showing on the screen. We are also asking
+volunteers to describe what's going on in each talk in the
+`#emacsconf-accessible` channel. Additionally, we would be very
+grateful if you could add transcription(s) or subtitle(s) for your
+talk(s) to your talk page(s) for EmacsConf 2020.
+
+- Lastly, please consider our [[guidelines for conduct|conduct]] while
+presenting your talk(s) and in discussions in our communication
+channels. Thank you in advance!
+
+## Going over time
+
+Please keep an eye on time and on your presentation's length. The
+organizer in the BigBlueButton room with you will try to signal you
+(e.g. politely clear their throat) or mention to you if you're going
+over time.
+
+If you still have a lot of things to cover or there are lots of
+questions you want to explore, you have a few options:
+
+- *You can stay in the BigBlueButton room and keep presenting.* You
+ may continue even after the organizer leaves for another
+ BigBlueButton room. The extension will not be streamed on the main
+ conference track, but it will be included in the recording that will
+ be posted on the individual talk page after the conference. You can
+ continue to monitor the collaborative pad and/or the IRC channel for
+ additional questions. When you are all done, please check back into
+ `#emacsconf-org` on IRC and let us know so that we can stop the
+ recording and prepare the room for the next speaker.
+
+- *You can switch to Jitsi for the "hallway track."* That way, you can
+ talk with anyone who's interested in learning more. (This is to
+ avoid overwhelming the BigBlueButton server with lots of guests.)
+ We'll give you the Jitsi URL to go to and make you the moderator
+ there. We'll also announce it via the stream, and we'll post the
+ URL in the collaborative pad and in IRC. If you want, you can wait
+ in the Jitsi room for 5-10 minutes in case anyone joins in order to
+ continue the conversation. Please consider recording the meeting
+ and sharing the video with us.
+
+- *You can take a break, enjoy the next talk, and follow up whenever
+ you like.* At the end of your presentation, you can let people know
+ how you want them to follow up with you and where to look for any
+ updates. We will also put that information in the collaborative
+ pad and on the individual talk page. For example, you may want to
+ record a video following up on the questions. We can link to and
+ include it in the updates sent to
+ [emacsconf-discuss](https://lists.gnu.org/mailman/listinfo/emacsconf-discuss).
+
+As you wrap up the scheduled part of your presentation, please let us
+know what you want to do.
+
+## After the presentation
+
+Hooray! Feel free to enjoy the rest of the conference sessions.
+Thanks for sharing your Emacs story with us!
+
+Once the recordings have been processed, we will post the recording of
+your talk and any questions, answers, or additional resources to the
+individual talk page. If you would like to include additional
+information, please feel free to update the page, or email us and we'd
+be happy to update it for you.
+
+If there are unanswered questions that you would like to respond to,
+you can answer via the collaborative pad, updating the wiki page, or
+emailing us after the conference.
+
+## In case of technical issues
+
+We have set up a status page at <https://status.emacsconf.org> where
+you can monitor the status of various parts of our infrastructure for
+any disruptions. If you notice a problem or experience disruption
+that's not acknowledged on the above page, please check `#emacsconf`
+and/or `#emacsconf-org` and notify the organizers as they may not be
+aware of the issue. If you cannot connect to IRC, please use the
+emergency contact information in the e-mail that was sent to you.
diff --git a/2020/schedule-details.md b/2020/schedule-details.md
new file mode 100644
index 00000000..b5f01a3b
--- /dev/null
+++ b/2020/schedule-details.md
@@ -0,0 +1,52 @@
+<table width="100%"><tr><td colspan="4"><strong>NOVEMBER 28 (Saturday)<strong></td></tr>
+<tr><td colspan="4"><strong><a href="/2020/talks/00">Day 1 opening remarks</a><strong></td></tr>
+<tr><td colspan="4"><strong>9:30 - 12:00 User talks<strong></td></tr>
+<tr><td colspan="4"><strong>User stories<strong></td></tr>
+<tr><td width=100>~ 9:33 AM</td><td width=100>~ 9:37 AM</td><td><a href="/2020/talks/01">Emacs News Highlights</a></td><td>Sacha Chua</td></tr>
+<tr><td width=100>~ 9:40 AM</td><td width=100>~10:00 AM</td><td><a href="/2020/talks/02">An Emacs Developer Story: From User to Package Maintainer</a></td><td>Leo Vivier</td></tr>
+<tr><td colspan="4"><strong>Exploring Emacs's flexibility<strong></td></tr>
+<tr><td width=100>~10:03 AM</td><td width=100>~10:13 AM</td><td><a href="/2020/talks/03">Idea to Novel Superstructure: Emacs for Writing</a></td><td>Bala Ramadurai</td></tr>
+<tr><td width=100>~10:16 AM</td><td width=100>~10:26 AM</td><td><a href="/2020/talks/04">Music in Plain Text</a></td><td>Jonathan Gregory</td></tr>
+<tr><td width=100>~10:29 AM</td><td width=100>~10:45 AM</td><td><a href="/2020/talks/05">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</a></td><td>Grant Shangreaux</td></tr>
+<tr><td colspan="4"><strong>Emacs configuration<strong></td></tr>
+<tr><td width=100>~10:48 AM</td><td width=100>~10:58 AM</td><td><a href="/2020/talks/06">Trivial Emacs Kits</a></td><td>Corwin Brust (mplsCorwin)</td></tr>
+<tr><td width=100>~11:01 AM</td><td width=100>~11:21 AM</td><td><a href="/2020/talks/07">Beyond Vim and Emacs: A Scalable UI Paradigm</a></td><td>Sid Kasivajhula (countvajhula)</td></tr>
+<tr><td width=100>~11:24 AM</td><td width=100>~11:44 AM</td><td><a href="/2020/talks/08">Building reproducible Emacs</a></td><td>Andrew Tropin (abcdw)</td></tr>
+<tr><td width=100>~11:47 AM</td><td width=100>~12:27 PM</td><td><a href="/2020/talks/21">On why most of the best features in eev look like 5-minute hacks</a></td><td>Eduardo Ochs (edrx)</td></tr>
+<tr><td colspan="4"><strong>12:00 - 13:00 Lunch<strong></td></tr>
+<tr><td colspan="4"><strong>13:00 - 16:30 Afternoon talks<strong></td></tr>
+<tr><td width=100>~ 1:03 PM</td><td width=100>~ 1:13 PM</td><td><a href="/2020/talks/09">Orgmode - your life in plain text</a></td><td>Rainer König</td></tr>
+<tr><td width=100>~ 1:16 PM</td><td width=100>~ 1:26 PM</td><td><a href="/2020/talks/10">Lead your future with Org</a></td><td>Andrea</td></tr>
+<tr><td width=100>~ 1:29 PM</td><td width=100>~ 1:49 PM</td><td><a href="/2020/talks/11">the org-gtd package: opinions about Getting Things Done</a></td><td>Aldric</td></tr>
+<tr><td width=100>~ 1:52 PM</td><td width=100>~ 2:02 PM</td><td><a href="/2020/talks/12">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</a></td><td>Leo Vivier</td></tr>
+<tr><td width=100>~ 2:05 PM</td><td width=100>~ 2:15 PM</td><td><a href="/2020/talks/13">Experience Report: Steps to "Emacs Hyper Notebooks"</a></td><td>Joseph Corneli, Raymond Puzio, and Cameron Ray Smith</td></tr>
+<tr><td width=100>~ 2:18 PM</td><td width=100>~ 2:38 PM</td><td><a href="/2020/talks/14">README-Driven Design</a></td><td>Adam Ard</td></tr>
+<tr><td width=100>~ 2:41 PM</td><td width=100>~ 2:51 PM</td><td><a href="/2020/talks/15">Moving from Jekyll to OrgMode, an experience report</a></td><td>Adolfo Villafiorita</td></tr>
+<tr><td width=100>~ 2:54 PM</td><td width=100>~ 3:14 PM</td><td><a href="/2020/talks/16">Org-roam: Presentation, Demonstration, and What's on the Horizon</a></td><td>Leo Vivier</td></tr>
+<tr><td width=100>~ 3:17 PM</td><td width=100>~ 3:37 PM</td><td><a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a></td><td>Noorah Alhasan</td></tr>
+<tr><td width=100>~ 3:40 PM</td><td width=100>~ 4:00 PM</td><td><a href="/2020/talks/18">Org-roam: Technical Presentation</a></td><td>Leo Vivier</td></tr>
+<tr><td width=100>~ 4:03 PM</td><td width=100>~ 4:13 PM</td><td><a href="/2020/talks/19">Sharing blogs (and more) with org-webring</a></td><td>Brett Gilio</td></tr>
+<tr><td width=100>~ 4:16 PM</td><td width=100>~ 4:36 PM</td><td><a href="/2020/talks/20">OMG Macros</a></td><td>Corwin Brust (mplsCorwin)</td></tr>
+<tr><td colspan="4"><strong><a href="/2020/talks/40">Day 1 closing remarks</a><strong></td></tr>
+<tr><td colspan="4"><strong>NOVEMBER 29 (Sunday)<strong></td></tr>
+<tr><td colspan="4"><strong><a href="/2020/talks/41">Day 2 opening remarks</a><strong></td></tr>
+<tr><td colspan="4"><strong>9:10 - 12:00 Morning talks<strong></td></tr>
+<tr><td width=100>~ 9:13 AM</td><td width=100>~ 9:30 AM</td><td><a href="/2020/talks/38">Emacs development update</a></td><td>John Wiegley</td></tr>
+<tr><td width=100>~ 9:33 AM</td><td width=100>~ 9:53 AM</td><td><a href="/2020/talks/22">Powering-up Special Blocks</a></td><td>Musa Al-hassy</td></tr>
+<tr><td width=100>~ 9:56 AM</td><td width=100>~10:46 AM</td><td><a href="/2020/talks/23">Incremental Parsing with emacs-tree-sitter</a></td><td>Tuấn-Anh Nguyễn</td></tr>
+<tr><td width=100>~10:49 AM</td><td width=100>~11:09 AM</td><td><a href="/2020/talks/24">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</a></td><td>Andrea</td></tr>
+<tr><td width=100>~11:12 AM</td><td width=100>~11:22 AM</td><td><a href="/2020/talks/25">Traverse complex JSON structures with live feedback</a></td><td>Zen Monk Alain M. Lafon</td></tr>
+<tr><td width=100>~11:25 AM</td><td width=100>~11:45 AM</td><td><a href="/2020/talks/39">NonGNU ELPA</a></td><td>Richard Stallman</td></tr>
+<tr><td colspan="4"><strong>12:00 - 13:00 Lunch<strong></td></tr>
+<tr><td colspan="4"><strong>13:00 - 16:30 Afternoon talks<strong></td></tr>
+<tr><td width=100>~ 1:03 PM</td><td width=100>~ 1:13 PM</td><td><a href="/2020/talks/26">Emacs as a Highschooler: How It Changed My Life</a></td><td>Pierce Wang</td></tr>
+<tr><td width=100>~ 1:16 PM</td><td width=100>~ 1:26 PM</td><td><a href="/2020/talks/27">State of Retro Gaming in Emacs</a></td><td>Vasilij "wasamasa" Schneidermann</td></tr>
+<tr><td width=100>~ 1:29 PM</td><td width=100>~ 2:19 PM</td><td><a href="/2020/talks/28">Welcome To The Dungeon</a></td><td>Erik Elmshauser and Corwin Brust</td></tr>
+<tr><td width=100>~ 2:22 PM</td><td width=100>~ 2:42 PM</td><td><a href="/2020/talks/29">Pathing of Least Resistance</a></td><td>Erik Elmshauser and Corwin Brust (mplsCorwin)</td></tr>
+<tr><td width=100>~ 2:45 PM</td><td width=100>~ 2:55 PM</td><td><a href="/2020/talks/30">A tour of vterm</a></td><td>Gabriele Bozzola (@sbozzolo)</td></tr>
+<tr><td width=100>~ 2:58 PM</td><td width=100>~ 3:14 PM</td><td><a href="/2020/talks/31">Lakota Language and Emacs</a></td><td>Grant Shangreaux</td></tr>
+<tr><td width=100>~ 3:17 PM</td><td width=100>~ 3:41 PM</td><td><a href="/2020/talks/32">Object Oriented Code in the Gnus Newsreader</a></td><td>Eric Abrahamsen</td></tr>
+<tr><td width=100>~ 3:44 PM</td><td width=100>~ 4:04 PM</td><td><a href="/2020/talks/33">Maxima a computer algebra system in Emacs</a></td><td>Fermin MF</td></tr>
+<tr><td width=100>~ 4:07 PM</td><td width=100>~ 4:30 PM</td><td><a href="/2020/talks/34">Extend Emacs to Modern GUI Applications with EAF</a></td><td>Matthew Zeng</td></tr>
+<tr><td width=100>~ 4:33 PM</td><td width=100>~ 4:43 PM</td><td><a href="/2020/talks/35">WAVEing at Repetitive Repetitive Repetitive Music</a></td><td>Zachary Kanfer</td></tr>
+<tr><td colspan="4"><strong><a href="/2020/talks/42">Day 2 closing remarks</a><strong></td></tr></table>
diff --git a/2020/schedule-details.txt b/2020/schedule-details.txt
new file mode 100644
index 00000000..3f439265
--- /dev/null
+++ b/2020/schedule-details.txt
@@ -0,0 +1,52 @@
+<table width="100%"><tr><td colspan="4"><strong>NOVEMBER 28 (Saturday)<strong></td></tr>
+<tr><td colspan="4"><strong><a href="/2020/talks/00">9:00 - 9:30 Opening remarks</a><strong></td></tr>
+<tr><td colspan="4"><strong>9:30 - 12:00 User talks<strong></td></tr>
+<tr><td colspan="4"><strong>User stories<strong></td></tr>
+<tr><td width=100>~ 9:33 AM</td><td width=100>~ 9:37 AM</td><td><a href="/2020/talks/01">Emacs News Highlights</a></td><td>Sacha Chua</td></tr>
+<tr><td width=100>~ 9:40 AM</td><td width=100>~10:00 AM</td><td><a href="/2020/talks/02">An Emacs Developer Story: From User to Package Maintainer</a></td><td>Leo Vivier</td></tr>
+<tr><td colspan="4"><strong>Exploring Emacs's flexibility<strong></td></tr>
+<tr><td width=100>~10:03 AM</td><td width=100>~10:13 AM</td><td><a href="/2020/talks/03">Idea to Novel Superstructure: Emacs for Writing</a></td><td>Bala Ramadurai</td></tr>
+<tr><td width=100>~10:16 AM</td><td width=100>~10:26 AM</td><td><a href="/2020/talks/04">Music in Plain Text</a></td><td>Jonathan Gregory</td></tr>
+<tr><td width=100>~10:29 AM</td><td width=100>~10:45 AM</td><td><a href="/2020/talks/05">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</a></td><td>Grant Shangreaux</td></tr>
+<tr><td colspan="4"><strong>Emacs configuration<strong></td></tr>
+<tr><td width=100>~10:48 AM</td><td width=100>~10:58 AM</td><td><a href="/2020/talks/06">Trivial Emacs Kits</a></td><td>Corwin Brust</td></tr>
+<tr><td width=100>~11:01 AM</td><td width=100>~11:21 AM</td><td><a href="/2020/talks/07">Beyond Vim and Emacs: A Scalable UI Paradigm</a></td><td>Sid Kasivajhula (countvaj`)</td></tr>
+<tr><td width=100>~11:24 AM</td><td width=100>~11:44 AM</td><td><a href="/2020/talks/08">Building reproducible Emacs</a></td><td>Andrew Tropin (abcdw)</td></tr>
+<tr><td width=100>~11:47 AM</td><td width=100>~12:27 PM</td><td><a href="/2020/talks/21">On why most of the best features in eev look like 5-minute hacks</a></td><td>Eduardo Ochs (edrx)</td></tr>
+<tr><td colspan="4"><strong>12:00 - 13:00 Lunch<strong></td></tr>
+<tr><td colspan="4"><strong>13:00 - 16:30 Afternoon talks<strong></td></tr>
+<tr><td width=100>~ 1:03 PM</td><td width=100>~ 1:13 PM</td><td><a href="/2020/talks/09">Orgmode - your life in plain text</a></td><td>Rainer König</td></tr>
+<tr><td width=100>~ 1:16 PM</td><td width=100>~ 1:26 PM</td><td><a href="/2020/talks/10">Lead your future with Org</a></td><td>Andrea</td></tr>
+<tr><td width=100>~ 1:29 PM</td><td width=100>~ 1:49 PM</td><td><a href="/2020/talks/11">the org-gtd package: opinions about Getting Things Done</a></td><td>Aldric</td></tr>
+<tr><td width=100>~ 1:52 PM</td><td width=100>~ 2:02 PM</td><td><a href="/2020/talks/12">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</a></td><td>Leo Vivier</td></tr>
+<tr><td width=100>~ 2:05 PM</td><td width=100>~ 2:15 PM</td><td><a href="/2020/talks/13">Experience Report: Steps to "Emacs Hyper Notebooks"</a></td><td>Joseph Corneli, Raymond Puzio, and Cameron Ray Smith</td></tr>
+<tr><td width=100>~ 2:18 PM</td><td width=100>~ 2:38 PM</td><td><a href="/2020/talks/14">README-Driven Design</a></td><td>Adam Ard</td></tr>
+<tr><td width=100>~ 2:41 PM</td><td width=100>~ 2:51 PM</td><td><a href="/2020/talks/15">Moving from Jekyll to OrgMode, an experience report</a></td><td>Adolfo Villafiorita</td></tr>
+<tr><td width=100>~ 2:54 PM</td><td width=100>~ 3:14 PM</td><td><a href="/2020/talks/16">Org-roam: Presentation, Demonstration, and What's on the Horizon</a></td><td>Leo Vivier</td></tr>
+<tr><td width=100>~ 3:17 PM</td><td width=100>~ 3:37 PM</td><td><a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a></td><td>Noorah Alhasan</td></tr>
+<tr><td width=100>~ 3:40 PM</td><td width=100>~ 4:00 PM</td><td><a href="/2020/talks/18">Org-roam: Technical Presentation</a></td><td>Leo Vivier</td></tr>
+<tr><td width=100>~ 4:03 PM</td><td width=100>~ 4:13 PM</td><td><a href="/2020/talks/19">Sharing blogs (and more) with org-webring</a></td><td>Brett Gilio</td></tr>
+<tr><td width=100>~ 4:16 PM</td><td width=100>~ 4:36 PM</td><td><a href="/2020/talks/20">OMG Macros</a></td><td>Corwin Brust</td></tr>
+<tr><td colspan="4"><strong><a href="/2020/talks/40">16:30 - 17:00 Closing remarks</a><strong></td></tr>
+<tr><td colspan="4"><strong>NOVEMBER 29 (Sunday)<strong></td></tr>
+<tr><td colspan="4"><strong><a href="/2020/talks/41">9:00 - 9:10 Opening remarks</a><strong></td></tr>
+<tr><td colspan="4"><strong>9:10 - 12:00 Morning talks<strong></td></tr>
+<tr><td width=100>~ 9:13 AM</td><td width=100>~ 9:30 AM</td><td><a href="/2020/talks/38">Emacs development update</a></td><td>John Wiegley</td></tr>
+<tr><td width=100>~ 9:33 AM</td><td width=100>~ 9:53 AM</td><td><a href="/2020/talks/22">Powering-up Special Blocks</a></td><td>Musa Al-hassy</td></tr>
+<tr><td width=100>~ 9:56 AM</td><td width=100>~10:46 AM</td><td><a href="/2020/talks/23">Incremental Parsing with emacs-tree-sitter</a></td><td>Tuấn-Anh Nguyễn</td></tr>
+<tr><td width=100>~10:49 AM</td><td width=100>~11:09 AM</td><td><a href="/2020/talks/24">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</a></td><td>Andrea</td></tr>
+<tr><td width=100>~11:12 AM</td><td width=100>~11:22 AM</td><td><a href="/2020/talks/25">Traverse complex JSON structures with live feedback</a></td><td>Zen Monk Alain M. Lafon</td></tr>
+<tr><td width=100>~11:25 AM</td><td width=100>~11:45 AM</td><td><a href="/2020/talks/39">NonGNU ELPA</a></td><td>Richard Stallman</td></tr>
+<tr><td colspan="4"><strong>12:00 - 13:00 Lunch<strong></td></tr>
+<tr><td colspan="4"><strong>13:00 - 16:30 Afternoon talks<strong></td></tr>
+<tr><td width=100>~ 1:03 PM</td><td width=100>~ 1:13 PM</td><td><a href="/2020/talks/26">Emacs as a Highschooler: How It Changed My Life</a></td><td>Pierce Wang</td></tr>
+<tr><td width=100>~ 1:16 PM</td><td width=100>~ 1:26 PM</td><td><a href="/2020/talks/27">State of Retro Gaming in Emacs</a></td><td>Vasilij "wasamasa" Schneidermann</td></tr>
+<tr><td width=100>~ 1:29 PM</td><td width=100>~ 2:19 PM</td><td><a href="/2020/talks/28">Welcome To The Dungeon</a></td><td>Erik Elmshauser and Corwin Brust</td></tr>
+<tr><td width=100>~ 2:22 PM</td><td width=100>~ 2:42 PM</td><td><a href="/2020/talks/29">Pathing of Least Resistance</a></td><td>Erik Elmshauser and Corwin Brust</td></tr>
+<tr><td width=100>~ 2:45 PM</td><td width=100>~ 2:55 PM</td><td><a href="/2020/talks/30">A tour of vterm</a></td><td>Gabriele Bozzola (@sbozzolo)</td></tr>
+<tr><td width=100>~ 2:58 PM</td><td width=100>~ 3:14 PM</td><td><a href="/2020/talks/31">Lakota Language and Emacs</a></td><td>Grant Shangreaux</td></tr>
+<tr><td width=100>~ 3:17 PM</td><td width=100>~ 3:41 PM</td><td><a href="/2020/talks/32">Object Oriented Code in the Gnus Newsreader</a></td><td>Eric Abrahamsen</td></tr>
+<tr><td width=100>~ 3:44 PM</td><td width=100>~ 4:04 PM</td><td><a href="/2020/talks/33">Maxima a computer algebra system in Emacs</a></td><td>Fermin MF</td></tr>
+<tr><td width=100>~ 4:07 PM</td><td width=100>~ 4:30 PM</td><td><a href="/2020/talks/34">Extend Emacs to Modern GUI Applications with EAF</a></td><td>Matthew Zeng</td></tr>
+<tr><td width=100>~ 4:33 PM</td><td width=100>~ 4:43 PM</td><td><a href="/2020/talks/35">WAVEing at Repetitive Repetitive Repetitive Music</a></td><td>Zachary Kanfer</td></tr>
+<tr><td colspan="4"><strong><a href="/2020/talks/42">16:30 - 17:00 Closing remarks</a><strong></td></tr></table>
diff --git a/2020/schedule.md b/2020/schedule.md
new file mode 100644
index 00000000..873ec058
--- /dev/null
+++ b/2020/schedule.md
@@ -0,0 +1,10 @@
+[[!meta title="Schedule"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali and Sacha Chua"]]
+
+EmacsConf 2020 was on November 28 (Sat) and November 29 (Sun), 2020 from 9am-5pm Toronto/EST time; equivalently, 6am-2pm PST, 2pm-10pm UTC, 3pm-11pm Zurich/CET.
+
+*Please note that the times on this schedule were a rough approximation.* A number of talks were presented pre-recorded to reduce technical risks, usually followed by live Q&A over web conference, collaborative pad (https://etherpad.wikimedia.org/p/emacsconf-2020) or the IRC backchannel (=#emacsconf= on =chat.freenode.net=).
+
+All the times below were given in EST.
+
+[[!inline pages="internal(2020/schedule-details)" raw="yes"]]
diff --git a/2020/schedule.org b/2020/schedule.org
new file mode 100644
index 00000000..2f87848e
--- /dev/null
+++ b/2020/schedule.org
@@ -0,0 +1,13 @@
+#+begin_export md
+[[!meta title="Schedule"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali and Sacha Chua"]]
+<!--- schedule.md is automatically exported from schedule.org. Please do not edit schedule.md directly. --->
+#+end_export
+
+EmacsConf 2020 was on November 28 (Sat) and November 29 (Sun), 2020 from 9am-5pm Toronto/EST time; equivalently, 6am-2pm PST, 2pm-10pm UTC, 3pm-11pm Zurich/CET.
+
+*Please note that the times on this schedule were a rough approximation.* A number of talks were presented pre-recorded to reduce technical risks, usually followed by live Q&A over web conference, collaborative pad (https://etherpad.wikimedia.org/p/emacsconf-2020) or the IRC backchannel (=#emacsconf= on =chat.freenode.net=).
+
+All the times below were given in EST.
+
+#+INCLUDE: "schedule-details.txt" export EXPORT md
diff --git a/2020/schedule/00.md b/2020/schedule/00.md
new file mode 100644
index 00000000..a58a1d21
--- /dev/null
+++ b/2020/schedule/00.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/00]]
diff --git a/2020/schedule/01.md b/2020/schedule/01.md
new file mode 100644
index 00000000..42527e47
--- /dev/null
+++ b/2020/schedule/01.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/01]]
diff --git a/2020/schedule/02.md b/2020/schedule/02.md
new file mode 100644
index 00000000..9d3436a4
--- /dev/null
+++ b/2020/schedule/02.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/02]]
diff --git a/2020/schedule/03.md b/2020/schedule/03.md
new file mode 100644
index 00000000..eb1337d2
--- /dev/null
+++ b/2020/schedule/03.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/03]]
diff --git a/2020/schedule/04.md b/2020/schedule/04.md
new file mode 100644
index 00000000..c2873ee2
--- /dev/null
+++ b/2020/schedule/04.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/04]]
diff --git a/2020/schedule/05.md b/2020/schedule/05.md
new file mode 100644
index 00000000..79e2a70b
--- /dev/null
+++ b/2020/schedule/05.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/05]]
diff --git a/2020/schedule/06.md b/2020/schedule/06.md
new file mode 100644
index 00000000..2b8bbf31
--- /dev/null
+++ b/2020/schedule/06.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/06]]
diff --git a/2020/schedule/07.md b/2020/schedule/07.md
new file mode 100644
index 00000000..706f9129
--- /dev/null
+++ b/2020/schedule/07.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/07]]
diff --git a/2020/schedule/08.md b/2020/schedule/08.md
new file mode 100644
index 00000000..77ea9e4d
--- /dev/null
+++ b/2020/schedule/08.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/08]]
diff --git a/2020/schedule/09.md b/2020/schedule/09.md
new file mode 100644
index 00000000..25550813
--- /dev/null
+++ b/2020/schedule/09.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/09]]
diff --git a/2020/schedule/10.md b/2020/schedule/10.md
new file mode 100644
index 00000000..c74a2ab8
--- /dev/null
+++ b/2020/schedule/10.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/10]]
diff --git a/2020/schedule/11.md b/2020/schedule/11.md
new file mode 100644
index 00000000..612ec54d
--- /dev/null
+++ b/2020/schedule/11.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/11]]
diff --git a/2020/schedule/12.md b/2020/schedule/12.md
new file mode 100644
index 00000000..afcc57e8
--- /dev/null
+++ b/2020/schedule/12.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/12]]
diff --git a/2020/schedule/13.md b/2020/schedule/13.md
new file mode 100644
index 00000000..9a239dab
--- /dev/null
+++ b/2020/schedule/13.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/13]]
diff --git a/2020/schedule/14.md b/2020/schedule/14.md
new file mode 100644
index 00000000..ac546033
--- /dev/null
+++ b/2020/schedule/14.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/14]]
diff --git a/2020/schedule/15.md b/2020/schedule/15.md
new file mode 100644
index 00000000..0d16289d
--- /dev/null
+++ b/2020/schedule/15.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/15]]
diff --git a/2020/schedule/16.md b/2020/schedule/16.md
new file mode 100644
index 00000000..02d6b986
--- /dev/null
+++ b/2020/schedule/16.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/16]]
diff --git a/2020/schedule/17.md b/2020/schedule/17.md
new file mode 100644
index 00000000..4c03edfa
--- /dev/null
+++ b/2020/schedule/17.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/17]]
diff --git a/2020/schedule/18.md b/2020/schedule/18.md
new file mode 100644
index 00000000..12660916
--- /dev/null
+++ b/2020/schedule/18.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/18]]
diff --git a/2020/schedule/19.md b/2020/schedule/19.md
new file mode 100644
index 00000000..0a115c93
--- /dev/null
+++ b/2020/schedule/19.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/19]]
diff --git a/2020/schedule/20.md b/2020/schedule/20.md
new file mode 100644
index 00000000..b0fefdba
--- /dev/null
+++ b/2020/schedule/20.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/20]]
diff --git a/2020/schedule/21.md b/2020/schedule/21.md
new file mode 100644
index 00000000..fefe9558
--- /dev/null
+++ b/2020/schedule/21.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/21]]
diff --git a/2020/schedule/22.md b/2020/schedule/22.md
new file mode 100644
index 00000000..287a6116
--- /dev/null
+++ b/2020/schedule/22.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/22]]
diff --git a/2020/schedule/23.md b/2020/schedule/23.md
new file mode 100644
index 00000000..295bb189
--- /dev/null
+++ b/2020/schedule/23.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/23]]
diff --git a/2020/schedule/24.md b/2020/schedule/24.md
new file mode 100644
index 00000000..d21ba2b1
--- /dev/null
+++ b/2020/schedule/24.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/24]]
diff --git a/2020/schedule/25.md b/2020/schedule/25.md
new file mode 100644
index 00000000..88d156f9
--- /dev/null
+++ b/2020/schedule/25.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/25]]
diff --git a/2020/schedule/26.md b/2020/schedule/26.md
new file mode 100644
index 00000000..02bf0c13
--- /dev/null
+++ b/2020/schedule/26.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/26]]
diff --git a/2020/schedule/27.md b/2020/schedule/27.md
new file mode 100644
index 00000000..177e3988
--- /dev/null
+++ b/2020/schedule/27.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/27]]
diff --git a/2020/schedule/28.md b/2020/schedule/28.md
new file mode 100644
index 00000000..7c2795d1
--- /dev/null
+++ b/2020/schedule/28.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/28]]
diff --git a/2020/schedule/29.md b/2020/schedule/29.md
new file mode 100644
index 00000000..2636675a
--- /dev/null
+++ b/2020/schedule/29.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/29]]
diff --git a/2020/schedule/30.md b/2020/schedule/30.md
new file mode 100644
index 00000000..3b86d12b
--- /dev/null
+++ b/2020/schedule/30.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/30]]
diff --git a/2020/schedule/31.md b/2020/schedule/31.md
new file mode 100644
index 00000000..5762b7c3
--- /dev/null
+++ b/2020/schedule/31.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/31]]
diff --git a/2020/schedule/32.md b/2020/schedule/32.md
new file mode 100644
index 00000000..c2fbf791
--- /dev/null
+++ b/2020/schedule/32.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/32]]
diff --git a/2020/schedule/33.md b/2020/schedule/33.md
new file mode 100644
index 00000000..91294f97
--- /dev/null
+++ b/2020/schedule/33.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/33]]
diff --git a/2020/schedule/34.md b/2020/schedule/34.md
new file mode 100644
index 00000000..1415684e
--- /dev/null
+++ b/2020/schedule/34.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/34]]
diff --git a/2020/schedule/35.md b/2020/schedule/35.md
new file mode 100644
index 00000000..2f57505f
--- /dev/null
+++ b/2020/schedule/35.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/35]]
diff --git a/2020/schedule/38.md b/2020/schedule/38.md
new file mode 100644
index 00000000..3ad317c9
--- /dev/null
+++ b/2020/schedule/38.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/38]]
diff --git a/2020/schedule/39.md b/2020/schedule/39.md
new file mode 100644
index 00000000..4ac6094f
--- /dev/null
+++ b/2020/schedule/39.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/39]]
diff --git a/2020/schedule/40.md b/2020/schedule/40.md
new file mode 100644
index 00000000..e37376c3
--- /dev/null
+++ b/2020/schedule/40.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/40]]
diff --git a/2020/schedule/41.md b/2020/schedule/41.md
new file mode 100644
index 00000000..70c0c3e6
--- /dev/null
+++ b/2020/schedule/41.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/41]]
diff --git a/2020/schedule/42.md b/2020/schedule/42.md
new file mode 100644
index 00000000..db075fe8
--- /dev/null
+++ b/2020/schedule/42.md
@@ -0,0 +1 @@
+[[!meta redir=/2020/talks/42]]
diff --git a/2020/sidebar.md b/2020/sidebar.md
new file mode 100644
index 00000000..f9c053fe
--- /dev/null
+++ b/2020/sidebar.md
@@ -0,0 +1,8 @@
+<p>Welcome to...</p>
+<p class="center">[[!img /i/emacsconf-logo1-256.png alt="EmacsConf logo" size="72x" link=2020]]</p>
+<p class="center"><strong>[[EmacsConf 2020|2020]]</strong></p>
+
+---
+
+* [[**Talks**|talks]]
+* [[Guidelines for Conduct|conduct]]
diff --git a/2020/submissions.md b/2020/submissions.md
new file mode 100644
index 00000000..64b197ab
--- /dev/null
+++ b/2020/submissions.md
@@ -0,0 +1,3926 @@
+[[!meta title="Submissions"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, and authors of talk submissions"]]
+<!-- This page was exported from submissions.org. Do not edit submissions.md by hand. -->
+
+You can check out the Org Mode source for this page by following the [editing instructions](https://emacsconf.org/edit/).
+
+
+# Table of Contents
+
+- [Actions](#org7281502)
+- [Tables](#org105055b)
+ - [Overall](#org5df6237)
+ - [By slot](#orge5ba5a0)
+ - [Saturday](#org1146dd9)
+ - [Sunday](#org052126b)
+ - [Table for all talks](#orge6d10a7)
+- [Talks](#orgd992caf)
+ - [NOVEMBER 28 (Saturday)](#org8b4b196):sat:
+ - [Day 1 opening remarks](#talk00)
+ - [9:30 - 12:00 User talks](#org3062065):morning:
+ - [12:00 - 13:00 Lunch](#orgbaf7821)
+ - [13:00 - 16:30 Afternoon talks](#org02ab8bc):afternoon:
+ - [Day 1 closing remarks](#talk40)
+ - [NOVEMBER 29 (Sunday)](#orgf96e9db):sun:
+ - [Day 2 opening remarks](#talk41)
+ - [9:10 - 12:00 Morning talks](#org634a83e):morning:
+ - [12:00 - 13:00 Lunch](#orgf86a59e)
+ - [13:00 - 16:30 Afternoon talks](#org048b0d0):afternoon:
+ - [Day 2 closing remarks](#talk42)
+- [Code](#orgd51f6e5)
+ - [Planning](#org6a3d245)
+ - [Yasnippet for adding video links to the individual talk page](#org3516f2d)
+
+
+<a id="org7281502"></a>
+
+# Actions
+
+You may want to `(setq org-confirm-babel-evaluate nil)`.
+
+- [Load code from organizers-notebook.org]((org-babel-load-file "organizers-notebook.org")) - run this to load function definitions or reset conf/info if the talk info changes
+- [Update talk info]((conf/update-talks)) - run this after changing talk time or order
+- [View as agenda]((let ((org-agenda-skip-function (lambda () (unless (elt (org-heading-components) 2) (org-entry-end-position)))) (org-agenda-files (list (buffer-file-name)))) (org-agenda-list nil (org-read-date nil nil "2020-11-28") 2)))
+- [Generate schedule files](conf/generate-schedule-files) - updates schedule-details.md; set conf/autogenerate-talk-pages to t if you want to overwrite individual talk pages too.
+- [Export this file to Markdown]((org-md-export-to-markdown))
+
+To update the information included in the individual talk page,
+execute the buffer, update the talk's info/TALKID.md file.
+
+
+<a id="org105055b"></a>
+
+# Tables
+
+
+<a id="org5df6237"></a>
+
+## Overall
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-right" />
+
+<col class="org-right" />
+
+<col class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">DIFFERENCE</th>
+<th scope="col" class="org-right">TARGET\_TIME</th>
+<th scope="col" class="org-right">MIN\_TIME\_SUM</th>
+<th scope="col" class="org-left">ITEM</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">Needs: 112</td>
+<td class="org-right">768</td>
+<td class="org-right">880</td>
+<td class="org-left">Talks</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-left">NOVEMBER 28 (Saturday)</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-left">Day 1 opening remarks</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Needs: 30</td>
+<td class="org-right">120</td>
+<td class="org-right">150</td>
+<td class="org-left">9:30 - 12:00 User talks</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-left">12:00 - 13:00 Lunch</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Needs: 12</td>
+<td class="org-right">168</td>
+<td class="org-right">180</td>
+<td class="org-left">13:00 - 16:30 Afternoon talks</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-left">Day 1 closing remarks</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-left">NOVEMBER 29 (Sunday)</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-left">Day 2 opening remarks</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Extra: 3</td>
+<td class="org-right">140</td>
+<td class="org-right">137</td>
+<td class="org-left">9:10 - 12:00 Morning talks</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-left">12:00 - 13:00 Lunch</td>
+</tr>
+
+
+<tr>
+<td class="org-left">Needs: 25</td>
+<td class="org-right">168</td>
+<td class="org-right">193</td>
+<td class="org-left">13:00 - 16:30 Afternoon talks</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-right">&#xa0;</td>
+<td class="org-left">Day 2 closing remarks</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="orge5ba5a0"></a>
+
+## By slot
+
+
+<a id="org1146dd9"></a>
+
+### Saturday
+
+- 9:30 - 12:00 User talks :morning:
+
+ <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+ <colgroup>
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col" class="org-left">SCHEDULED</th>
+ <th scope="col" class="org-left">ITEM</th>
+ <th scope="col" class="org-left">NAME</th>
+ <th scope="col" class="org-left">PREREC</th>
+ <th scope="col" class="org-left">AVAILABILITY</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 09:33&gt;&#x2013;&lt;2020-11-28 Sat 09:37&gt;</span></span></td>
+ <td class="org-left">Emacs News Highlights</td>
+ <td class="org-left">Sacha Chua</td>
+ <td class="org-left">ready</td>
+ <td class="org-left">prerec, maybe 9am-3pm EST</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 09:40&gt;&#x2013;&lt;2020-11-28 Sat 10:00&gt;</span></span></td>
+ <td class="org-left">An Emacs Developer Story: From User to Package Maintainer</td>
+ <td class="org-left">Leo Vivier</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">9am-12pm EST</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:03&gt;&#x2013;&lt;2020-11-28 Sat 10:13&gt;</span></span></td>
+ <td class="org-left">Idea to Novel Superstructure: Emacs for Writing</td>
+ <td class="org-left">Bala Ramadurai</td>
+ <td class="org-left">done, live Q&A</td>
+ <td class="org-left">8:30am EST-12pm EST</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:16&gt;&#x2013;&lt;2020-11-28 Sat 10:26&gt;</span></span></td>
+ <td class="org-left">Music in Plain Text</td>
+ <td class="org-left">Jonathan Gregory</td>
+ <td class="org-left">planned</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:29&gt;&#x2013;&lt;2020-11-28 Sat 10:45&gt;</span></span></td>
+ <td class="org-left">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</td>
+ <td class="org-left">Grant Shangreaux</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">10am-5pm EST, daylight Central US</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:48&gt;&#x2013;&lt;2020-11-28 Sat 10:58&gt;</span></span></td>
+ <td class="org-left">Trivial Emacs Kits</td>
+ <td class="org-left">Corwin Brust (mplsCorwin)</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 11:01&gt;&#x2013;&lt;2020-11-28 Sat 11:21&gt;</span></span></td>
+ <td class="org-left">Beyond Vim and Emacs: A Scalable UI Paradigm</td>
+ <td class="org-left">Sid Kasivajhula (countvajhula)</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">PST, so maybe 11 AM EST - 5 PM EST?</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 11:24&gt;&#x2013;&lt;2020-11-28 Sat 11:44&gt;</span></span></td>
+ <td class="org-left">Building reproducible Emacs</td>
+ <td class="org-left">Andrew Tropin (abcdw)</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">After 4pm UTC - 11am-5pm EST</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 11:47&gt;&#x2013;&lt;2020-11-28 Sat 12:27&gt;</span></span></td>
+ <td class="org-left">On why most of the best features in eev look like 5-minute hacks</td>
+ <td class="org-left">Eduardo Ochs (edrx)</td>
+ <td class="org-left">planned</td>
+ <td class="org-left">ok</td>
+ </tr>
+ </tbody>
+ </table>
+
+- 13:00 - 16:30 Afternoon talks :afternoon:
+
+ <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+ <colgroup>
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col" class="org-left">SCHEDULED</th>
+ <th scope="col" class="org-left">ITEM</th>
+ <th scope="col" class="org-left">NAME</th>
+ <th scope="col" class="org-left">PREREC</th>
+ <th scope="col" class="org-left">AVAILABILITY</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:03&gt;&#x2013;&lt;2020-11-28 Sat 13:13&gt;</span></span></td>
+ <td class="org-left">Orgmode - your life in plain text</td>
+ <td class="org-left">Rainer König</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">CET, so 9am-maybe 2pm EST (8pm CET)</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:16&gt;&#x2013;&lt;2020-11-28 Sat 13:26&gt;</span></span></td>
+ <td class="org-left">Lead your future with Org</td>
+ <td class="org-left">Andrea</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:29&gt;&#x2013;&lt;2020-11-28 Sat 13:49&gt;</span></span></td>
+ <td class="org-left">the org-gtd package: opinions about Getting Things Done</td>
+ <td class="org-left">Aldric</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">ok, confirmed</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:52&gt;&#x2013;&lt;2020-11-28 Sat 14:02&gt;</span></span></td>
+ <td class="org-left">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</td>
+ <td class="org-left">Leo Vivier</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">9am-12pm EST (in CET timezone)&#x2026; see if 1-3pm EST (7-9pm CET) is still doable?</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:05&gt;&#x2013;&lt;2020-11-28 Sat 14:15&gt;</span></span></td>
+ <td class="org-left">Experience Report: Steps to "Emacs Hyper Notebooks"</td>
+ <td class="org-left">Joseph Corneli, Raymond Puzio, and Cameron Ray Smith</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:18&gt;&#x2013;&lt;2020-11-28 Sat 14:38&gt;</span></span></td>
+ <td class="org-left">README-Driven Design</td>
+ <td class="org-left">Adam Ard</td>
+ <td class="org-left">done</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:41&gt;&#x2013;&lt;2020-11-28 Sat 14:51&gt;</span></span></td>
+ <td class="org-left">Moving from Jekyll to OrgMode, an experience report</td>
+ <td class="org-left">Adolfo Villafiorita</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">9am-5pm CET, so 9am-12pm EST; see if 7pm-9pm CET (1-3pm EST is available)</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:54&gt;&#x2013;&lt;2020-11-28 Sat 15:14&gt;</span></span></td>
+ <td class="org-left">Org-roam: Presentation, Demonstration, and What's on the Horizon</td>
+ <td class="org-left">Leo Vivier</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">2:30-ish EST ok with tea; in CET timezone</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 15:17&gt;&#x2013;&lt;2020-11-28 Sat 15:37&gt;</span></span></td>
+ <td class="org-left">Org-mode and Org-Roam for Scholars and Researchers</td>
+ <td class="org-left">Noorah Alhasan</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 15:40&gt;&#x2013;&lt;2020-11-28 Sat 16:00&gt;</span></span></td>
+ <td class="org-left">Org-roam: Technical Presentation</td>
+ <td class="org-left">Leo Vivier</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">2:30-ish EST ok with tea; in CET timezone</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 16:03&gt;&#x2013;&lt;2020-11-28 Sat 16:13&gt;</span></span></td>
+ <td class="org-left">Sharing blogs (and more) with org-webring</td>
+ <td class="org-left">Brett Gilio</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 16:16&gt;&#x2013;&lt;2020-11-28 Sat 16:36&gt;</span></span></td>
+ <td class="org-left">OMG Macros</td>
+ <td class="org-left">Corwin Brust (mplsCorwin)</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">ok</td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<a id="org052126b"></a>
+
+### Sunday
+
+- 9:30 - 12:00 Morning talks :morning:
+
+ <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+ <colgroup>
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col" class="org-left">SCHEDULED</th>
+ <th scope="col" class="org-left">ITEM</th>
+ <th scope="col" class="org-left">NAME</th>
+ <th scope="col" class="org-left">PREREC</th>
+ <th scope="col" class="org-left">AVAILABILITY</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 09:13&gt;&#x2013;&lt;2020-11-29 Sun 09:30&gt;</span></span></td>
+ <td class="org-left">Emacs development update</td>
+ <td class="org-left">John Wiegley</td>
+ <td class="org-left">done</td>
+ <td class="org-left">prerec</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 09:33&gt;&#x2013;&lt;2020-11-29 Sun 09:53&gt;</span></span></td>
+ <td class="org-left">Powering-up Special Blocks</td>
+ <td class="org-left">Musa Al-hassy</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">Unavailable 1pm-2pm EST both days</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 09:56&gt;&#x2013;&lt;2020-11-29 Sun 10:46&gt;</span></span></td>
+ <td class="org-left">Incremental Parsing with emacs-tree-sitter</td>
+ <td class="org-left">Tuấn-Anh Nguyễn</td>
+ <td class="org-left">24min</td>
+ <td class="org-left">GMT+7, so earlier is better (9:30 EST?). Can pre-record and answer questions.</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 10:49&gt;&#x2013;&lt;2020-11-29 Sun 11:09&gt;</span></span></td>
+ <td class="org-left">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</td>
+ <td class="org-left">Andrea</td>
+ <td class="org-left">done</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 11:12&gt;&#x2013;&lt;2020-11-29 Sun 11:22&gt;</span></span></td>
+ <td class="org-left">Traverse complex JSON structures with live feedback</td>
+ <td class="org-left">Zen Monk Alain M. Lafon</td>
+ <td class="org-left">done</td>
+ <td class="org-left">Available both days, birthday on the 28th</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 11:25&gt;&#x2013;&lt;2020-11-29 Sun 11:45&gt;</span></span></td>
+ <td class="org-left">NonGNU ELPA</td>
+ <td class="org-left">Richard Stallman</td>
+ <td class="org-left">done</td>
+ <td class="org-left">tbd</td>
+ </tr>
+ </tbody>
+ </table>
+
+- 13:00 - 16:30 Afternoon talks :afternoon:
+
+ <table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+ <colgroup>
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+
+ <col class="org-left" />
+ </colgroup>
+ <thead>
+ <tr>
+ <th scope="col" class="org-left">SCHEDULED</th>
+ <th scope="col" class="org-left">ITEM</th>
+ <th scope="col" class="org-left">NAME</th>
+ <th scope="col" class="org-left">PREREC</th>
+ <th scope="col" class="org-left">AVAILABILITY</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 13:03&gt;&#x2013;&lt;2020-11-29 Sun 13:13&gt;</span></span></td>
+ <td class="org-left">Emacs as a Highschooler: How It Changed My Life</td>
+ <td class="org-left">Pierce Wang</td>
+ <td class="org-left">done</td>
+ <td class="org-left">Sun 12pm EST onwards</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 13:16&gt;&#x2013;&lt;2020-11-29 Sun 13:26&gt;</span></span></td>
+ <td class="org-left">State of Retro Gaming in Emacs</td>
+ <td class="org-left">Vasilij "wasamasa" Schneidermann</td>
+ <td class="org-left">done</td>
+ <td class="org-left">8am-10pm CET, so 9am-3pm EST</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 13:29&gt;&#x2013;&lt;2020-11-29 Sun 14:19&gt;</span></span></td>
+ <td class="org-left">Welcome To The Dungeon</td>
+ <td class="org-left">Erik Elmshauser and Corwin Brust</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 14:22&gt;&#x2013;&lt;2020-11-29 Sun 14:42&gt;</span></span></td>
+ <td class="org-left">Pathing of Least Resistance</td>
+ <td class="org-left">Erik Elmshauser and Corwin Brust (mplsCorwin)</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 14:45&gt;&#x2013;&lt;2020-11-29 Sun 14:55&gt;</span></span></td>
+ <td class="org-left">A tour of vterm</td>
+ <td class="org-left">Gabriele Bozzola (@sbozzolo)</td>
+ <td class="org-left">done</td>
+ <td class="org-left">MST, so 11am-5pm EST</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 14:58&gt;&#x2013;&lt;2020-11-29 Sun 15:14&gt;</span></span></td>
+ <td class="org-left">Lakota Language and Emacs</td>
+ <td class="org-left">Grant Shangreaux</td>
+ <td class="org-left">done</td>
+ <td class="org-left">Central time, 10am EST-5pm EST</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 15:17&gt;&#x2013;&lt;2020-11-29 Sun 15:41&gt;</span></span></td>
+ <td class="org-left">Object Oriented Code in the Gnus Newsreader</td>
+ <td class="org-left">Eric Abrahamsen</td>
+ <td class="org-left">planned</td>
+ <td class="org-left">ok</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 15:44&gt;&#x2013;&lt;2020-11-29 Sun 16:04&gt;</span></span></td>
+ <td class="org-left">Maxima a computer algebra system in Emacs</td>
+ <td class="org-left">Fermin MF</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">afternoon if possible</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 16:07&gt;&#x2013;&lt;2020-11-29 Sun 16:30&gt;</span></span></td>
+ <td class="org-left">Extend Emacs to Modern GUI Applications with EAF</td>
+ <td class="org-left">Matthew Zeng</td>
+ <td class="org-left">&#xa0;</td>
+ <td class="org-left">after 12pm EST both days; confirmed available November 29, 1pm-4:30pm EST.</td>
+ </tr>
+
+
+ <tr>
+ <td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 16:33&gt;&#x2013;&lt;2020-11-29 Sun 16:43&gt;</span></span></td>
+ <td class="org-left">WAVEing at Repetitive Repetitive Repetitive Music</td>
+ <td class="org-left">Zachary Kanfer</td>
+ <td class="org-left">done</td>
+ <td class="org-left">ok</td>
+ </tr>
+ </tbody>
+ </table>
+
+
+<a id="orge6d10a7"></a>
+
+## Table for all talks
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">PREREC</th>
+<th scope="col" class="org-left">SCHEDULED</th>
+<th scope="col" class="org-left">ITEM</th>
+<th scope="col" class="org-left">NAME</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left">ready</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 09:33&gt;&#x2013;&lt;2020-11-28 Sat 09:37&gt;</span></span></td>
+<td class="org-left">Emacs News Highlights</td>
+<td class="org-left">Sacha Chua</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 09:40&gt;&#x2013;&lt;2020-11-28 Sat 10:00&gt;</span></span></td>
+<td class="org-left">An Emacs Developer Story: From User to Package Maintainer</td>
+<td class="org-left">Leo Vivier</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done, live Q&A</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:03&gt;&#x2013;&lt;2020-11-28 Sat 10:13&gt;</span></span></td>
+<td class="org-left">Idea to Novel Superstructure: Emacs for Writing</td>
+<td class="org-left">Bala Ramadurai</td>
+</tr>
+
+
+<tr>
+<td class="org-left">planned</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:16&gt;&#x2013;&lt;2020-11-28 Sat 10:26&gt;</span></span></td>
+<td class="org-left">Music in Plain Text</td>
+<td class="org-left">Jonathan Gregory</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:29&gt;&#x2013;&lt;2020-11-28 Sat 10:45&gt;</span></span></td>
+<td class="org-left">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</td>
+<td class="org-left">Grant Shangreaux</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:48&gt;&#x2013;&lt;2020-11-28 Sat 10:58&gt;</span></span></td>
+<td class="org-left">Trivial Emacs Kits</td>
+<td class="org-left">Corwin Brust (mplsCorwin)</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 11:01&gt;&#x2013;&lt;2020-11-28 Sat 11:21&gt;</span></span></td>
+<td class="org-left">Beyond Vim and Emacs: A Scalable UI Paradigm</td>
+<td class="org-left">Sid Kasivajhula (countvajhula)</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 11:24&gt;&#x2013;&lt;2020-11-28 Sat 11:44&gt;</span></span></td>
+<td class="org-left">Building reproducible Emacs</td>
+<td class="org-left">Andrew Tropin (abcdw)</td>
+</tr>
+
+
+<tr>
+<td class="org-left">planned</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 11:47&gt;&#x2013;&lt;2020-11-28 Sat 12:27&gt;</span></span></td>
+<td class="org-left">On why most of the best features in eev look like 5-minute hacks</td>
+<td class="org-left">Eduardo Ochs (edrx)</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:03&gt;&#x2013;&lt;2020-11-28 Sat 13:13&gt;</span></span></td>
+<td class="org-left">Orgmode - your life in plain text</td>
+<td class="org-left">Rainer König</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:16&gt;&#x2013;&lt;2020-11-28 Sat 13:26&gt;</span></span></td>
+<td class="org-left">Lead your future with Org</td>
+<td class="org-left">Andrea</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:29&gt;&#x2013;&lt;2020-11-28 Sat 13:49&gt;</span></span></td>
+<td class="org-left">the org-gtd package: opinions about Getting Things Done</td>
+<td class="org-left">Aldric</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:52&gt;&#x2013;&lt;2020-11-28 Sat 14:02&gt;</span></span></td>
+<td class="org-left">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</td>
+<td class="org-left">Leo Vivier</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:05&gt;&#x2013;&lt;2020-11-28 Sat 14:15&gt;</span></span></td>
+<td class="org-left">Experience Report: Steps to "Emacs Hyper Notebooks"</td>
+<td class="org-left">Joseph Corneli, Raymond Puzio, and Cameron Ray Smith</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:18&gt;&#x2013;&lt;2020-11-28 Sat 14:38&gt;</span></span></td>
+<td class="org-left">README-Driven Design</td>
+<td class="org-left">Adam Ard</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:41&gt;&#x2013;&lt;2020-11-28 Sat 14:51&gt;</span></span></td>
+<td class="org-left">Moving from Jekyll to OrgMode, an experience report</td>
+<td class="org-left">Adolfo Villafiorita</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:54&gt;&#x2013;&lt;2020-11-28 Sat 15:14&gt;</span></span></td>
+<td class="org-left">Org-roam: Presentation, Demonstration, and What's on the Horizon</td>
+<td class="org-left">Leo Vivier</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 15:17&gt;&#x2013;&lt;2020-11-28 Sat 15:37&gt;</span></span></td>
+<td class="org-left">Org-mode and Org-Roam for Scholars and Researchers</td>
+<td class="org-left">Noorah Alhasan</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 15:40&gt;&#x2013;&lt;2020-11-28 Sat 16:00&gt;</span></span></td>
+<td class="org-left">Org-roam: Technical Presentation</td>
+<td class="org-left">Leo Vivier</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 16:03&gt;&#x2013;&lt;2020-11-28 Sat 16:13&gt;</span></span></td>
+<td class="org-left">Sharing blogs (and more) with org-webring</td>
+<td class="org-left">Brett Gilio</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 16:16&gt;&#x2013;&lt;2020-11-28 Sat 16:36&gt;</span></span></td>
+<td class="org-left">OMG Macros</td>
+<td class="org-left">Corwin Brust (mplsCorwin)</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 09:13&gt;&#x2013;&lt;2020-11-29 Sun 09:30&gt;</span></span></td>
+<td class="org-left">Emacs development update</td>
+<td class="org-left">John Wiegley</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 09:33&gt;&#x2013;&lt;2020-11-29 Sun 09:53&gt;</span></span></td>
+<td class="org-left">Powering-up Special Blocks</td>
+<td class="org-left">Musa Al-hassy</td>
+</tr>
+
+
+<tr>
+<td class="org-left">24min</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 09:56&gt;&#x2013;&lt;2020-11-29 Sun 10:46&gt;</span></span></td>
+<td class="org-left">Incremental Parsing with emacs-tree-sitter</td>
+<td class="org-left">Tuấn-Anh Nguyễn</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 10:49&gt;&#x2013;&lt;2020-11-29 Sun 11:09&gt;</span></span></td>
+<td class="org-left">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</td>
+<td class="org-left">Andrea</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 11:12&gt;&#x2013;&lt;2020-11-29 Sun 11:22&gt;</span></span></td>
+<td class="org-left">Traverse complex JSON structures with live feedback</td>
+<td class="org-left">Zen Monk Alain M. Lafon</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 11:25&gt;&#x2013;&lt;2020-11-29 Sun 11:45&gt;</span></span></td>
+<td class="org-left">NonGNU ELPA</td>
+<td class="org-left">Richard Stallman</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 13:03&gt;&#x2013;&lt;2020-11-29 Sun 13:13&gt;</span></span></td>
+<td class="org-left">Emacs as a Highschooler: How It Changed My Life</td>
+<td class="org-left">Pierce Wang</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 13:16&gt;&#x2013;&lt;2020-11-29 Sun 13:26&gt;</span></span></td>
+<td class="org-left">State of Retro Gaming in Emacs</td>
+<td class="org-left">Vasilij "wasamasa" Schneidermann</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 13:29&gt;&#x2013;&lt;2020-11-29 Sun 14:19&gt;</span></span></td>
+<td class="org-left">Welcome To The Dungeon</td>
+<td class="org-left">Erik Elmshauser and Corwin Brust</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 14:22&gt;&#x2013;&lt;2020-11-29 Sun 14:42&gt;</span></span></td>
+<td class="org-left">Pathing of Least Resistance</td>
+<td class="org-left">Erik Elmshauser and Corwin Brust (mplsCorwin)</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 14:45&gt;&#x2013;&lt;2020-11-29 Sun 14:55&gt;</span></span></td>
+<td class="org-left">A tour of vterm</td>
+<td class="org-left">Gabriele Bozzola (@sbozzolo)</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 14:58&gt;&#x2013;&lt;2020-11-29 Sun 15:14&gt;</span></span></td>
+<td class="org-left">Lakota Language and Emacs</td>
+<td class="org-left">Grant Shangreaux</td>
+</tr>
+
+
+<tr>
+<td class="org-left">planned</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 15:17&gt;&#x2013;&lt;2020-11-29 Sun 15:41&gt;</span></span></td>
+<td class="org-left">Object Oriented Code in the Gnus Newsreader</td>
+<td class="org-left">Eric Abrahamsen</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 15:44&gt;&#x2013;&lt;2020-11-29 Sun 16:04&gt;</span></span></td>
+<td class="org-left">Maxima a computer algebra system in Emacs</td>
+<td class="org-left">Fermin MF</td>
+</tr>
+
+
+<tr>
+<td class="org-left">&#xa0;</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 16:07&gt;&#x2013;&lt;2020-11-29 Sun 16:30&gt;</span></span></td>
+<td class="org-left">Extend Emacs to Modern GUI Applications with EAF</td>
+<td class="org-left">Matthew Zeng</td>
+</tr>
+
+
+<tr>
+<td class="org-left">done</td>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 16:33&gt;&#x2013;&lt;2020-11-29 Sun 16:43&gt;</span></span></td>
+<td class="org-left">WAVEing at Repetitive Repetitive Repetitive Music</td>
+<td class="org-left">Zachary Kanfer</td>
+</tr>
+</tbody>
+</table>
+
+
+<a id="orgd992caf"></a>
+
+# Talks
+
+
+<a id="org8b4b196"></a>
+
+## NOVEMBER 28 (Saturday) :sat:
+
+
+<a id="talk00"></a>
+
+### Day 1 opening remarks
+
+
+<a id="org3062065"></a>
+
+### 9:30 - 12:00 User talks :morning:
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-right" />
+
+<col class="org-right" />
+
+<col class="org-right" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-right">Difference</td>
+<td class="org-right">Minimum time</td>
+<td class="org-right">Target time</td>
+</tr>
+
+
+<tr>
+<td class="org-right">-30</td>
+<td class="org-right">150</td>
+<td class="org-right">120</td>
+</tr>
+</tbody>
+</table>
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">SCHEDULED</th>
+<th scope="col" class="org-left">ITEM</th>
+<th scope="col" class="org-left">NAME</th>
+<th scope="col" class="org-left">PREREC</th>
+<th scope="col" class="org-left">AVAILABILITY</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 09:33&gt;&#x2013;&lt;2020-11-28 Sat 09:37&gt;</span></span></td>
+<td class="org-left">Emacs News Highlights</td>
+<td class="org-left">Sacha Chua</td>
+<td class="org-left">ready</td>
+<td class="org-left">prerec, maybe 9am-3pm EST</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 09:40&gt;&#x2013;&lt;2020-11-28 Sat 10:00&gt;</span></span></td>
+<td class="org-left">An Emacs Developer Story: From User to Package Maintainer</td>
+<td class="org-left">Leo Vivier</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">9am-12pm EST</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:03&gt;&#x2013;&lt;2020-11-28 Sat 10:13&gt;</span></span></td>
+<td class="org-left">Idea to Novel Superstructure: Emacs for Writing</td>
+<td class="org-left">Bala Ramadurai</td>
+<td class="org-left">done, live Q&A</td>
+<td class="org-left">8:30am EST-12pm EST</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:16&gt;&#x2013;&lt;2020-11-28 Sat 10:26&gt;</span></span></td>
+<td class="org-left">Music in Plain Text</td>
+<td class="org-left">Jonathan Gregory</td>
+<td class="org-left">planned</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:29&gt;&#x2013;&lt;2020-11-28 Sat 10:45&gt;</span></span></td>
+<td class="org-left">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</td>
+<td class="org-left">Grant Shangreaux</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">10am-5pm EST, daylight Central US</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 10:48&gt;&#x2013;&lt;2020-11-28 Sat 10:58&gt;</span></span></td>
+<td class="org-left">Trivial Emacs Kits</td>
+<td class="org-left">Corwin Brust (mplsCorwin)</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 11:01&gt;&#x2013;&lt;2020-11-28 Sat 11:21&gt;</span></span></td>
+<td class="org-left">Beyond Vim and Emacs: A Scalable UI Paradigm</td>
+<td class="org-left">Sid Kasivajhula (countvajhula)</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">PST, so maybe 11 AM EST - 5 PM EST?</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 11:24&gt;&#x2013;&lt;2020-11-28 Sat 11:44&gt;</span></span></td>
+<td class="org-left">Building reproducible Emacs</td>
+<td class="org-left">Andrew Tropin (abcdw)</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">After 4pm UTC - 11am-5pm EST</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 11:47&gt;&#x2013;&lt;2020-11-28 Sat 12:27&gt;</span></span></td>
+<td class="org-left">On why most of the best features in eev look like 5-minute hacks</td>
+<td class="org-left">Eduardo Ochs (edrx)</td>
+<td class="org-left">planned</td>
+<td class="org-left">ok</td>
+</tr>
+</tbody>
+</table>
+
+- User stories
+
+ - in-progress Emacs News Highlights :lightning:user:
+
+ Name: Sacha Chua
+
+ - Preferred format
+
+ 10 minutes
+
+ - (Un)availability
+
+ Available maybe 9am-3pm EST
+
+ - Talk information
+
+ Quick highlights from Emacs News since the last EmacsConf
+
+ - Links
+
+ This is a draft.
+
+ - [Mickey Petersen's notes on Emacs 27.1](https://www.masteringemacs.org/article/whats-new-in-emacs-27-1)
+ - [Bringing GNU Emacs to Native Code](https://www.reddit.com/r/emacs/comments/g9vdd0/bringing_gnu_emacs_to_native_code_at_the_european/)
+ - [Making Emacs popular again [LWN.net]​](https://lwn.net/Articles/819452/)
+ - [Org Mode and Zettelkasten](https://www.reddit.com/r/emacs/comments/hfamm7/those_who_have_tried_out_multiple_zettelkasten/)
+ - [EAF](https://www.reddit.com/r/emacs/comments/e48se1/eaf_extending_emacs_with_amazing_gui_support/)
+ - [Doom](https://www.reddit.com/r/emacs/comments/f2c99b/you_can_play_doom_inside_emacs_using_eaf/)
+ - Virtual meetups:
+ - [NYC](https://www.meetup.com/New-York-Emacs-Meetup/events/)
+ - [SF](https://www.meetup.com/Emacs-SF/)
+ - [Emacs ATX](https://www.meetup.com/EmacsATX/)
+ - [APAC](https://www.reddit.com/r/emacs/comments/izbdq9/announcing_call_for_speakers_for_emacs_apac/)
+ - [Berlin](https://www.reddit.com/r/planetemacs/comments/jokqa4/emacs_berlin_online_meetup_on_november_25th_2020/)
+ - [Emacs User Survey](https://emacssurvey.org/)
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+ - in-progress An Emacs Developer Story: From User to Package Maintainer :standard:user:community:
+
+ Name: Leo Vivier
+
+ - Preferred format
+
+ Standard Talk (20 min).
+
+ - Talk information
+
+ 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 project 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 software which I am maintaining
+ <https://github.com/org-roam/org-roam>
+
+ - (Un)availability
+
+ I am in CET, and I would rather have the presentation early in the day
+ (9am-12pm EST would be stellar). If need be, I could present later,
+ but I do not think I would be as effective.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- Exploring Emacs's flexibility
+
+ - ready Idea to Novel Superstructure: Emacs for Writing :standard:lightning:user:
+
+ Name: Bala Ramadurai
+
+ - Preferred format
+
+ Standard talk (I am ok to reduce this to a lightning talk as well)
+
+ - Talk information
+
+ 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
+
+ - (Un)availability
+
+ Available between 01:30pm and 06:30pm UTC on Nov 28, 2020. Also
+ available between 01:30pm and 05:00pm UTC.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+ - in-progress Music in Plain Text :music:user:lightning:
+
+ Name: Jonathan Gregory
+
+ - Preferred format
+
+ 10 minutes
+
+ - Talk information
+
+ 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 simply 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 faciliates digital
+ archiving and distribution of musical scores. In this talk, I begin
+ by showcasing LilyPond syntax and mode using literate programming
+ techniques as examples for building sheet music in Emacs, and proceed
+ with an overview of the setup I use for producing music books with GNU
+ Make, LilyPond, and LilyPond-mode.
+
+ - (Un)availability
+
+ Available both days
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+ - in-progress Bard Bivou(m)acs - Building a bandcamp-like page for an album of music :music:
+
+ Name: Grant Shangreaux
+
+ - Preferred format
+
+ 10 minute
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ Flexible, prefer daylight times for US Central time zone
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- Emacs configuration
+
+ - in-progress Trivial Emacs Kits :lightning:config:user:beginner:
+
+ Name: Corwin Brust
+
+ - Preferred format
+
+ Lightning talk (10m, probably without Q&A)
+
+ - Talk information
+
+ Techniques to help new users bootstrap a more gentle introduction to
+ Emacs, one (short) init.el file at a time.
+
+ - (Un)availability
+
+ None
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+ - in-progress Beyond Vim and Emacs: A Scalable UI Paradigm :nudge:
+
+ Name: Sid Kasivajhula
+
+ - Preferred format
+
+ Extended or Standard
+
+ - Comments
+
+ > I think this might be a better fit as a lightning talk or maybe a
+ > standard talk that demonstrates the concept with a few well-chosen
+ > examples. A possible goal might be to show people that they can
+ > develop a mental model and remap more keys to fit it.
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ No constraints at this time.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+ - in-progress Building reproducible Emacs :standard:extended:config:user:
+
+ Name: Andrew Tropin
+
+ - Preferred format
+
+ Extended preferred, standard possible
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ After 4pm UTC
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+ - in-progress On why most of the best features in eev look like 5-minute hacks :extended:user:nudge:prerec:
+
+ Name: Eduardo Ochs
+
+ - Preferred format
+
+ Extended talk
+
+ - Comments
+
+ > Will be pre-recorded, so we might be able to move it around in the schedule
+
+ - Talk information
+
+ 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".
+
+ - (Un)availability
+
+ I will be available the whole day.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+
+<a id="orgbaf7821"></a>
+
+### 12:00 - 13:00 Lunch
+
+
+<a id="org02ab8bc"></a>
+
+### 13:00 - 16:30 Afternoon talks :afternoon:
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-right" />
+
+<col class="org-right" />
+
+<col class="org-right" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-right">Difference</td>
+<td class="org-right">Minimum time</td>
+<td class="org-right">Target time</td>
+</tr>
+
+
+<tr>
+<td class="org-right">-12</td>
+<td class="org-right">180</td>
+<td class="org-right">168</td>
+</tr>
+</tbody>
+</table>
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">SCHEDULED</th>
+<th scope="col" class="org-left">ITEM</th>
+<th scope="col" class="org-left">NAME</th>
+<th scope="col" class="org-left">PREREC</th>
+<th scope="col" class="org-left">AVAILABILITY</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:03&gt;&#x2013;&lt;2020-11-28 Sat 13:13&gt;</span></span></td>
+<td class="org-left">Orgmode - your life in plain text</td>
+<td class="org-left">Rainer König</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">CET, so 9am-maybe 2pm EST (8pm CET)</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:16&gt;&#x2013;&lt;2020-11-28 Sat 13:26&gt;</span></span></td>
+<td class="org-left">Lead your future with Org</td>
+<td class="org-left">Andrea</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:29&gt;&#x2013;&lt;2020-11-28 Sat 13:49&gt;</span></span></td>
+<td class="org-left">the org-gtd package: opinions about Getting Things Done</td>
+<td class="org-left">Aldric</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ok, confirmed</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 13:52&gt;&#x2013;&lt;2020-11-28 Sat 14:02&gt;</span></span></td>
+<td class="org-left">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</td>
+<td class="org-left">Leo Vivier</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">9am-12pm EST (in CET timezone)&#x2026; see if 1-3pm EST (7-9pm CET) is still doable?</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:05&gt;&#x2013;&lt;2020-11-28 Sat 14:15&gt;</span></span></td>
+<td class="org-left">Experience Report: Steps to "Emacs Hyper Notebooks"</td>
+<td class="org-left">Joseph Corneli, Raymond Puzio, and Cameron Ray Smith</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:18&gt;&#x2013;&lt;2020-11-28 Sat 14:38&gt;</span></span></td>
+<td class="org-left">README-Driven Design</td>
+<td class="org-left">Adam Ard</td>
+<td class="org-left">done</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:41&gt;&#x2013;&lt;2020-11-28 Sat 14:51&gt;</span></span></td>
+<td class="org-left">Moving from Jekyll to OrgMode, an experience report</td>
+<td class="org-left">Adolfo Villafiorita</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">9am-5pm CET, so 9am-12pm EST; see if 7pm-9pm CET (1-3pm EST is available)</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 14:54&gt;&#x2013;&lt;2020-11-28 Sat 15:14&gt;</span></span></td>
+<td class="org-left">Org-roam: Presentation, Demonstration, and What's on the Horizon</td>
+<td class="org-left">Leo Vivier</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">2:30-ish EST ok with tea; in CET timezone</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 15:17&gt;&#x2013;&lt;2020-11-28 Sat 15:37&gt;</span></span></td>
+<td class="org-left">Org-mode and Org-Roam for Scholars and Researchers</td>
+<td class="org-left">Noorah Alhasan</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 15:40&gt;&#x2013;&lt;2020-11-28 Sat 16:00&gt;</span></span></td>
+<td class="org-left">Org-roam: Technical Presentation</td>
+<td class="org-left">Leo Vivier</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">2:30-ish EST ok with tea; in CET timezone</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 16:03&gt;&#x2013;&lt;2020-11-28 Sat 16:13&gt;</span></span></td>
+<td class="org-left">Sharing blogs (and more) with org-webring</td>
+<td class="org-left">Brett Gilio</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-28 Sat 16:16&gt;&#x2013;&lt;2020-11-28 Sat 16:36&gt;</span></span></td>
+<td class="org-left">OMG Macros</td>
+<td class="org-left">Corwin Brust (mplsCorwin)</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ok</td>
+</tr>
+</tbody>
+</table>
+
+- in-progress Orgmode - your life in plain text :standard:tutorial:org:nudge:
+
+ Name: Rainer König
+
+ - Preferred format
+
+ Talk
+
+ - Comments
+
+ > I'm also not sure we need a 20-minute tutorial on Org Mode, since it's
+ > a perennial topic for other videos. I suppose people unfamiliar with
+ > Org Mode will probably benefit from a quick pointer to beginner
+ > resources (maybe a 5-minute pointer). I'm always curious about Org
+ > workflows, though, so if this talk is rejigged as a workflow demo, it
+ > might be a good fit for 10-20 minutes.
+
+ - Talk information
+
+ This is a talk about Orgmode, my favorite Emacs application. The goal
+ is to show you the power of Emacs when you want to manage and organize
+ your life. Orgmode is your swiss army knife for that job, and so far
+ the only tool that you can customize for your needs and you need to
+ customize yourself to fit the restrictions of a "ToDo list tool".
+
+ 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.
+
+ This talk should introduce people to Orgmode, showing them what they
+ can do and how it makes your life easier, freeing time for the things
+ that matter to you.
+
+ I was holding a similar talk at the local Linux Day in our town in
+
+ 1. In 2016 I recorded a set of tutorial videos which are available
+
+ on my YouTube channel which gained more than 3500 subcribers because
+ of those tutorials. In Summer 2020 I recorded the tutorials again for
+ a course at Udemy which went online in October 2020 and is
+ supplemented by a 100+ pages course book.
+
+ - (Un)availability
+
+ Since its weekend on November 28/29 I think I can be flexible, but
+ keep in mind that I'm living in the Central European Time time zone.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Lead your future with Org :standard:lightning:org:workflow:user:
+
+ Name: Andrea
+
+ - Preferred format
+
+ Standard talk (or even Lighting talk by only giving references to the
+ modes I plan to show)
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ I am available :D
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress the org-gtd package: opinions about Getting Things Done
+
+ Name: Aldric
+
+ - Preferred format
+
+ 50 min - can also do 20 minutes
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ N/A
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress One Big-ass Org File or multiple tiny ones? Finally, the End of the debate! :standard:lightning:org:user:timing:
+
+ Name: Leo Vivier
+
+ - Preferred format
+
+ Standard Talk (20 min). Could be condensed into a Lightning Talk (10
+ min), but I fear it would not do it justice.
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ I am in CET, and I would rather have the presentation early in the day
+ (9am-12pm EST would be stellar). If need be, I could present later,
+ but I do not think I would be as effective.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Experience Report: Steps to "Emacs Hyper Notebooks"
+
+ Name: Joseph Corneli, Raymond Puzio, and Cameron Ray Smith
+
+ - Preferred format
+
+ 10 minute talk
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ N/A
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- ready README-Driven Design :extended:standard:org:tutorial:
+
+ Name: Adam Ard
+
+ - Preferred format
+
+ I think I have enough for a full 50 minutes. But I can do a shorter
+ version too if that will work better for the conference schedule.
+ My schedule is wide open too, so put me in at any time slot.
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ I am available for any time slot or length. Stick me in wherever!
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Moving from Jekyll to OrgMode, an experience report :timing:org:
+
+ Name: Adolfo Villafiorita
+
+ - Preferred format
+
+ standard talk or lightning talk
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ I work and live in Italy (CET) and I would prefer slots compatible
+ with the timezone. (I wouldn't recommend recording me early in the
+ morning, in any case!)
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Org-roam: Presentation, Demonstration, and What's on the Horizon :extended:standard:org:
+
+ Name: Leo Vivier
+
+ - Preferred format
+
+ Extended Talk (50 min). Parts can be pruned to fit in a Standard Talk
+ (20 min), but I'd strongly prefer the former.
+
+ - Talk information
+
+ 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=3DoyEMlIxIHXs)
+ - [Org-roam-bibtex - Quick Presentation - YouTube](https://www.youtube.com/watch?v=3DWy9WvF5gWYg)
+ - [Org-roam-dailies: Demonstration - YouTube](https://www.youtube.com/watch?v=3D1q9x2aZCJJ4)
+
+ - (Un)availability
+
+ I am in CET, and I would rather have the presentation early in the day
+ (9am-12pm EST would be stellar). If need be, I could present later,
+ but I do not think I would be as effective.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Org-mode and Org-Roam for Scholars and Researchers :standard:org:nudge:
+
+ Name: Noorah Alhasan
+
+ - Preferred format
+
+ 20 minutes
+
+ - Comments
+
+ > org-roam has a lot of talks in this agenda, but it (and other
+ > Zettelkasten-type things) have resulted in a lot of buzz in the Org
+ > community, so it's probably worth looking at it from the intro, user,
+ > and dev perspectives. It would be good to get the presenter
+ > coordinating with the one doing the org-roam overview in order to
+ > minimize overlap. This might even be doable in a lightning talk.
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ N/A
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Org-roam: Technical Presentation :standard:elisp:org:
+
+ Name: Leo Vivier
+
+ - Preferred format
+
+ Standard Talk (20 min).
+
+ - Talk information
+
+ 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
+
+ - (Un)availability
+
+ I am in CET, and I would rather have the presentation early in the day
+ (9am-12pm EST would be stellar). If need be, I could present later,
+ but I do not think I would be as effective.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Sharing blogs (and more) with org-webring :lightning:org:user:
+
+ Name: Brett Gilio
+
+ - Preferred format
+
+ Lightning
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ N/A
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress OMG Macros :org:
+
+ Name: Corwin Brust
+
+ - Preferred format
+
+ Standard talk (20m, including 5m Q&A)
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ None
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+
+<a id="talk40"></a>
+
+### Day 1 closing remarks
+
+
+<a id="orgf96e9db"></a>
+
+## NOVEMBER 29 (Sunday) :sun:
+
+
+<a id="talk41"></a>
+
+### Day 2 opening remarks
+
+
+<a id="org634a83e"></a>
+
+### 9:10 - 12:00 Morning talks :morning:
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-right" />
+
+<col class="org-right" />
+
+<col class="org-right" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-right">Difference</td>
+<td class="org-right">Minimum time</td>
+<td class="org-right">Target time</td>
+</tr>
+
+
+<tr>
+<td class="org-right">3</td>
+<td class="org-right">137</td>
+<td class="org-right">140</td>
+</tr>
+</tbody>
+</table>
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">SCHEDULED</th>
+<th scope="col" class="org-left">ITEM</th>
+<th scope="col" class="org-left">NAME</th>
+<th scope="col" class="org-left">PREREC</th>
+<th scope="col" class="org-left">AVAILABILITY</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 09:13&gt;&#x2013;&lt;2020-11-29 Sun 09:30&gt;</span></span></td>
+<td class="org-left">Emacs development update</td>
+<td class="org-left">John Wiegley</td>
+<td class="org-left">done</td>
+<td class="org-left">prerec</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 09:33&gt;&#x2013;&lt;2020-11-29 Sun 09:53&gt;</span></span></td>
+<td class="org-left">Powering-up Special Blocks</td>
+<td class="org-left">Musa Al-hassy</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">Unavailable 1pm-2pm EST both days</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 09:56&gt;&#x2013;&lt;2020-11-29 Sun 10:46&gt;</span></span></td>
+<td class="org-left">Incremental Parsing with emacs-tree-sitter</td>
+<td class="org-left">Tuấn-Anh Nguyễn</td>
+<td class="org-left">24min</td>
+<td class="org-left">GMT+7, so earlier is better (9:30 EST?). Can pre-record and answer questions.</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 10:49&gt;&#x2013;&lt;2020-11-29 Sun 11:09&gt;</span></span></td>
+<td class="org-left">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</td>
+<td class="org-left">Andrea</td>
+<td class="org-left">done</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 11:12&gt;&#x2013;&lt;2020-11-29 Sun 11:22&gt;</span></span></td>
+<td class="org-left">Traverse complex JSON structures with live feedback</td>
+<td class="org-left">Zen Monk Alain M. Lafon</td>
+<td class="org-left">done</td>
+<td class="org-left">Available both days, birthday on the 28th</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 11:25&gt;&#x2013;&lt;2020-11-29 Sun 11:45&gt;</span></span></td>
+<td class="org-left">NonGNU ELPA</td>
+<td class="org-left">Richard Stallman</td>
+<td class="org-left">done</td>
+<td class="org-left">tbd</td>
+</tr>
+</tbody>
+</table>
+
+- in-progress Emacs development update
+
+ - Talk information
+
+ TBD - possibly a quick overview of Emacs 27.1 and development priorities for Emacs 28
+
+- in-progress Powering-up Special Blocks :standard:org:elisp:
+
+ Name: Musa Al-hassy
+
+ - Preferred format
+
+ Standard talk
+
+ - Comments
+
+ > 2020-10-18: Moved back to Sunday, e-mailed.
+ > 2020-10-17: Possibly move to Saturday? E-mailed 2020-10-17. Might be good to put this before OMG Macros.
+
+ - Talk information
+
+ 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">
+ Emacs for the win ⌣̈
+
+ </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.
+
+ - (Un)availability
+
+ I would be unavailable Nov 28/29 from 1-2pm (Toronto time) on both
+ days; but otherwise I'm excited to attend the event :-)
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Incremental Parsing with emacs-tree-sitter :extended:elisp:timing:
+
+ Name: Tuấn-Anh Nguyễn
+
+ prerec and live Q&A
+
+ - Preferred format
+
+ 50 minutes (Extended talk)
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ The conference will start at 9PM in my timezone (GMT+7). I would
+ prefer the earlier time slots. If possible, I would also like to
+ pre-record my talk, and to be online just to answer questions during
+ my time slot.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Analyze code quality through Emacs: a smart forensics approach and the story of a hack :extended:standard:dev:
+
+ Name: Andrea
+
+ - Preferred format
+
+ Extended Talk (I can squeeze this to a Standard talk, by not going in
+ depth on the analyses I plan to demonstrate)
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ I am available :D
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Traverse complex JSON structures with live feedback :lightning:dev:
+
+ Name: Zen Monk Alain M. Lafon
+
+ - Preferred format
+
+ Lightning talk (pre-recorded video is possible)
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ Both dates are good, even though it's my birthday on the 28th. But
+ I'll happily make space for EmacsConf(;
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress NonGNU ELPA
+
+- Talk information
+
+ TBD - plans for a NonGNU ELPA that will be easy to enable and contribute to without signing copyright assignment papers
+
+
+<a id="orgf86a59e"></a>
+
+### 12:00 - 13:00 Lunch
+
+
+<a id="org048b0d0"></a>
+
+### 13:00 - 16:30 Afternoon talks :afternoon:
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-right" />
+
+<col class="org-right" />
+
+<col class="org-right" />
+</colgroup>
+<tbody>
+<tr>
+<td class="org-right">Difference</td>
+<td class="org-right">Minimum time</td>
+<td class="org-right">Target time</td>
+</tr>
+
+
+<tr>
+<td class="org-right">-25</td>
+<td class="org-right">193</td>
+<td class="org-right">168</td>
+</tr>
+</tbody>
+</table>
+
+<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
+
+
+<colgroup>
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+
+<col class="org-left" />
+</colgroup>
+<thead>
+<tr>
+<th scope="col" class="org-left">SCHEDULED</th>
+<th scope="col" class="org-left">ITEM</th>
+<th scope="col" class="org-left">NAME</th>
+<th scope="col" class="org-left">PREREC</th>
+<th scope="col" class="org-left">AVAILABILITY</th>
+</tr>
+</thead>
+
+<tbody>
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 13:03&gt;&#x2013;&lt;2020-11-29 Sun 13:13&gt;</span></span></td>
+<td class="org-left">Emacs as a Highschooler: How It Changed My Life</td>
+<td class="org-left">Pierce Wang</td>
+<td class="org-left">done</td>
+<td class="org-left">Sun 12pm EST onwards</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 13:16&gt;&#x2013;&lt;2020-11-29 Sun 13:26&gt;</span></span></td>
+<td class="org-left">State of Retro Gaming in Emacs</td>
+<td class="org-left">Vasilij "wasamasa" Schneidermann</td>
+<td class="org-left">done</td>
+<td class="org-left">8am-10pm CET, so 9am-3pm EST</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 13:29&gt;&#x2013;&lt;2020-11-29 Sun 14:19&gt;</span></span></td>
+<td class="org-left">Welcome To The Dungeon</td>
+<td class="org-left">Erik Elmshauser and Corwin Brust</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 14:22&gt;&#x2013;&lt;2020-11-29 Sun 14:42&gt;</span></span></td>
+<td class="org-left">Pathing of Least Resistance</td>
+<td class="org-left">Erik Elmshauser and Corwin Brust (mplsCorwin)</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 14:45&gt;&#x2013;&lt;2020-11-29 Sun 14:55&gt;</span></span></td>
+<td class="org-left">A tour of vterm</td>
+<td class="org-left">Gabriele Bozzola (@sbozzolo)</td>
+<td class="org-left">done</td>
+<td class="org-left">MST, so 11am-5pm EST</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 14:58&gt;&#x2013;&lt;2020-11-29 Sun 15:14&gt;</span></span></td>
+<td class="org-left">Lakota Language and Emacs</td>
+<td class="org-left">Grant Shangreaux</td>
+<td class="org-left">done</td>
+<td class="org-left">Central time, 10am EST-5pm EST</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 15:17&gt;&#x2013;&lt;2020-11-29 Sun 15:41&gt;</span></span></td>
+<td class="org-left">Object Oriented Code in the Gnus Newsreader</td>
+<td class="org-left">Eric Abrahamsen</td>
+<td class="org-left">planned</td>
+<td class="org-left">ok</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 15:44&gt;&#x2013;&lt;2020-11-29 Sun 16:04&gt;</span></span></td>
+<td class="org-left">Maxima a computer algebra system in Emacs</td>
+<td class="org-left">Fermin MF</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">afternoon if possible</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 16:07&gt;&#x2013;&lt;2020-11-29 Sun 16:30&gt;</span></span></td>
+<td class="org-left">Extend Emacs to Modern GUI Applications with EAF</td>
+<td class="org-left">Matthew Zeng</td>
+<td class="org-left">&#xa0;</td>
+<td class="org-left">after 12pm EST both days; confirmed available November 29, 1pm-4:30pm EST.</td>
+</tr>
+
+
+<tr>
+<td class="org-left"><span class="timestamp-wrapper"><span class="timestamp">&lt;2020-11-29 Sun 16:33&gt;&#x2013;&lt;2020-11-29 Sun 16:43&gt;</span></span></td>
+<td class="org-left">WAVEing at Repetitive Repetitive Repetitive Music</td>
+<td class="org-left">Zachary Kanfer</td>
+<td class="org-left">done</td>
+<td class="org-left">ok</td>
+</tr>
+</tbody>
+</table>
+
+- in-progress Emacs as a Highschooler: How It Changed My Life :standard:user:community:timing:nudge:
+
+ Name: Pierce Wang
+
+ - Preferred format
+
+ Standard Talk
+
+ - Comments
+
+ > Probably good idea to reach out to this speaker and check on the angle
+ > of this talk. It could be a good way to explore the question of how
+ > new people discover Emacs, get motivated to try Emacs, and get through
+ > the roadblocks, keeping in mind that it's from personal experience.
+
+ - Talk information
+
+ 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 describe the
+ many ways that Emacs has shaped my life as a student, a programmer, a
+ 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, and I'd like to share this with others. In addition, I'd like
+ to take this opportunity to address some roadblocks that I have
+ noticed having observed some of my peers' attempts at learning Emacs
+ and possible solutions for those barriers, taking inspiration from
+ various sources both from inside and outside the Emacs community.
+
+ - Availability
+
+ Saturday Nov. 28: 1pm to 10pm PDT
+ Sunday Nov. 29: 8am to 10pm PDT
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress State of Retro Gaming in Emacs :extended:lightning:elisp:nudge:
+
+ Hello,
+
+ I'd like to hand in a talk I've already presented at two different
+ conferences, you can find its slides online [1][2].
+
+ Name: Vasilij "wasamasa" Schneidermann
+
+ - Preferred format
+
+ 50 minutes (Extended talk)
+
+ - Comments
+
+ > It might be good to nudge this to be a lightning talk since it's been
+ > presented elsewhere.
+
+ - Talk information
+
+ 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/>
+
+ - (Un)availability
+
+ None I'm aware of yet, I'm available from 8AM to 10PM at local German
+ time.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Welcome To The Dungeon :extended:elisp:
+
+ Name: Erik Elmshauser and Corwin Brust
+
+ - Preferred format
+
+ Extended talk (50m, including 10-15m Q&A)
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ None
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Pathing of Least Resistance :standard:elisp:
+
+ Name: Erik Elmshauser and Corwin Brust (mplsCorwin)
+
+ - Preferred format
+
+ Standard talk (20m, including 5m Q&A)
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ None
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress A tour of vterm :dev:standard:lightning:timing:
+
+ Name: Gabriele Bozzola (@sbozzolo)
+
+ - Preferred format
+
+ 20 minutes, 10 would be fine, too.
+
+ - Talk information
+
+ 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>
+
+ - (Un)availability
+
+ My timezone is MST.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Lakota Language and Emacs :lightning:elisp:
+
+ Name: Grant Shangreaux
+
+ - Preferred format
+
+ 10 minutes - Lightning talk
+ I am flexible. I've done a 5 minute version as well.
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ I'm flexible, but on US Central time, so no extreme hours would be
+ best for me.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Object Oriented Code in the Gnus Newsreader :standard:elisp:
+
+ Name: Eric Abrahamsen
+
+ - Preferred format
+
+ 20 minutes should be fine (I'm happy to record in advance, as well).
+ It would be fun to have a Q&A, if that's an option.
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ No particular time restrictions I'm aware of.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Maxima a computer algebra system in Emacs :standard:dev:timing:
+
+ Name: Fermin MF
+
+ - Preferred format
+
+ 20 minutes (Standard talk)
+
+ - Comments
+
+ > This could be a coding-type talk (how to do something technical in
+ > Emacs) or an Emacs Lisp talk (how to modernize outdated code and
+ > integrate with external apps).
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ I prefer the talk to be in the afternoon if it's possible.
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress Extend Emacs to Modern GUI Applications with EAF :standard:elisp:
+
+ Name: Matthew Zeng
+
+ - Preferred format
+
+ Standard
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ Available after 12pm Toronto/EST on any day
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+- in-progress WAVEing at Repetitive Repetitive Repetitive Music :standard:lightning:music:elisp:
+
+ Name: Zachary Kanfer
+
+ - Preferred format
+
+ Standard or Lightning talk. With a Lightning talk, I'd go less into
+ detail on some of the odd corners of the project, like zero-width
+ spaces rendering with nonzero width. But it would still be a viable
+ talk.
+
+ - Talk information
+
+ 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.
+
+ - (Un)availability
+
+ n/a
+
+ - Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+
+<a id="talk42"></a>
+
+### Day 2 closing remarks
+
+
+# Withdrawn
+
+
+## cancelled So Easy My Manager Can Do It! :lightning:beginner:user:nudge:
+
+> 2020-10-17: Merged into "Trivial Emacs Kits"
+>
+> Emacs Lisp is a big topic, so it's hard to think about how it
+> can be squeezed into a lightning talk or a standard talk. Still,
+> If this talk can help interested people who haven't fiddled with
+> their Emacs configuration feel like they can understand the next
+> two talks and find resources to learn more, it could be a good transition.
+
+Name: Corwin Brust
+
+
+### Preferred format
+
+Lightning talk (10m, probably without Q&A)
+
+
+### Talk information
+
+A lightning-fast, yet gentle, introduction to Emacs Lisp.
+
+
+### (Un)availability
+
+None
+
+
+### Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+
+<a id="orgd51f6e5"></a>
+
+# Code
+
+
+<a id="org6a3d245"></a>
+
+## Planning
+
+This check\_time block can be called from different headings. It sums
+up the minimum time from the talks in the subtree and compares it with
+the target time.
+
+ (list (list "Difference" "Minimum time" "Target time")
+ (list
+ (- (string-to-number (org-entry-get (point) "TARGET_TIME"))
+ (string-to-number (org-entry-get (point) "MIN_TIME_SUM")))
+ (org-entry-get (point) "MIN_TIME_SUM")
+ (org-entry-get (point) "TARGET_TIME")))
+
+
+<a id="org3516f2d"></a>
+
+## Yasnippet for adding video links to the individual talk page
+
+ # -*- mode: snippet -*-
+ # name: vid
+ # key: vid
+ # --
+ [[!template id=vid src="`(current-kill 0)`"]]
+ [Download $2.webm video, 720p, $1](`(current-kill 0)`)
+
+or with the source code from the directory listing:
+
+ (while (re-search-forward "<a href=\"\\(.*\\)?\">.*?\\([0-9]+[MB]\\)" nil t)
+ (replace-match "[[!template id=vid src=\"https://mirror.csclub.uwaterloo.ca/emacsconf/2020/\\1\"]]
+ [Download .webm video, 720p, \\2B](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/\\1)
+ "))
+
diff --git a/2020/submissions.org b/2020/submissions.org
new file mode 100644
index 00000000..14aef5a1
--- /dev/null
+++ b/2020/submissions.org
@@ -0,0 +1,3255 @@
+#+title: EmacsConf 2020 submissions
+#+todo: todo(t) in-progress(i) ready(r) | done(d) cancelled(c)
+#+PROPERTY: header-args :eval yes
+#+options: toc:nil
+
+#+begin_export md
+[[!meta title="Submissions"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, and authors of talk submissions"]]
+<!-- This page was exported from submissions.org. Do not edit submissions.md by hand. -->
+#+end_export
+You can check out the Org Mode source for this page by following the [[https://emacsconf.org/edit/][editing instructions]].
+
+#+TOC: headlines 3
+
+* Actions
+
+You may want to =(setq org-confirm-babel-evaluate nil)=.
+
+- [[elisp:(org-babel-load-file "organizers-notebook.org")][Load code from organizers-notebook.org]] - run this to load function definitions or reset conf/info if the talk info changes
+- [[elisp:(conf/update-talks)][Update talk info]] - run this after changing talk time or order
+- [[elisp:(let ((org-agenda-skip-function (lambda () (unless (elt (org-heading-components) 2) (org-entry-end-position)))) (org-agenda-files (list (buffer-file-name)))) (org-agenda-list nil (org-read-date nil nil "2020-11-28") 2))][View as agenda]]
+- [[elisp:conf/generate-schedule-files][Generate schedule files]] - updates schedule-details.md; set conf/autogenerate-talk-pages to t if you want to overwrite individual talk pages too.
+- [[elisp:(org-md-export-to-markdown)][Export this file to Markdown]]
+
+To update the information included in the individual talk page,
+execute the buffer, update the talk's info/TALKID.md file.
+
+* Tables
+
+** Overall
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%DIFFERENCE%TARGET_TIME%MIN_TIME_SUM%ITEM" :maxlevel 3
+| DIFFERENCE | TARGET_TIME | MIN_TIME_SUM | ITEM |
+|------------+-------------+--------------+-------------------------------|
+| Needs: 112 | 768 | 880 | Talks |
+| | | | NOVEMBER 28 (Saturday) |
+| | | | Day 1 opening remarks |
+| Needs: 30 | 120 | 150 | 9:30 - 12:00 User talks |
+| | | | 12:00 - 13:00 Lunch |
+| Needs: 12 | 168 | 180 | 13:00 - 16:30 Afternoon talks |
+| | | | Day 1 closing remarks |
+| | | | NOVEMBER 29 (Sunday) |
+| | | | Day 2 opening remarks |
+| Extra: 3 | 140 | 137 | 9:10 - 12:00 Morning talks |
+| | | | 12:00 - 13:00 Lunch |
+| Needs: 25 | 168 | 193 | 13:00 - 16:30 Afternoon talks |
+| | | | Day 2 closing remarks |
+#+END:
+
+** By slot
+
+*** Saturday
+
+**** 9:30 - 12:00 User talks :morning:
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sat+morning/!"
+| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY |
+|------------------------------+------------------------------------------------------------------------+--------------------------------+----------------+-------------------------------------|
+| <2020-11-28 Sat 09:33-09:37> | Emacs News Highlights | Sacha Chua | ready | prerec, maybe 9am-3pm EST |
+| <2020-11-28 Sat 09:40-10:00> | An Emacs Developer Story: From User to Package Maintainer | Leo Vivier | | 9am-12pm EST |
+| <2020-11-28 Sat 10:03-10:13> | Idea to Novel Superstructure: Emacs for Writing | Bala Ramadurai | done, live Q&A | 8:30am EST-12pm EST |
+| <2020-11-28 Sat 10:16-10:26> | Music in Plain Text | Jonathan Gregory | planned | ok |
+| <2020-11-28 Sat 10:29-10:45> | Bard Bivou(m)acs - Building a bandcamp-like page for an album of music | Grant Shangreaux | | 10am-5pm EST, daylight Central US |
+| <2020-11-28 Sat 10:48-10:58> | Trivial Emacs Kits | Corwin Brust (mplsCorwin) | | ok |
+| <2020-11-28 Sat 11:01-11:21> | Beyond Vim and Emacs: A Scalable UI Paradigm | Sid Kasivajhula (countvajhula) | | PST, so maybe 11 AM EST - 5 PM EST? |
+| <2020-11-28 Sat 11:24-11:44> | Building reproducible Emacs | Andrew Tropin (abcdw) | | After 4pm UTC - 11am-5pm EST |
+| <2020-11-28 Sat 11:47-12:27> | On why most of the best features in eev look like 5-minute hacks | Eduardo Ochs (edrx) | planned | ok |
+#+END:
+
+**** 13:00 - 16:30 Afternoon talks :afternoon:
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sat+afternoon/!"
+| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY |
+|------------------------------+------------------------------------------------------------------------------+------------------------------------------------------+--------+---------------------------------------------------------------------------------|
+| <2020-11-28 Sat 13:03-13:13> | Orgmode - your life in plain text | Rainer König | | CET, so 9am-maybe 2pm EST (8pm CET) |
+| <2020-11-28 Sat 13:16-13:26> | Lead your future with Org | Andrea | | ok |
+| <2020-11-28 Sat 13:29-13:49> | the org-gtd package: opinions about Getting Things Done | Aldric | | ok, confirmed |
+| <2020-11-28 Sat 13:52-14:02> | One Big-ass Org File or multiple tiny ones? Finally, the End of the debate! | Leo Vivier | | 9am-12pm EST (in CET timezone)... see if 1-3pm EST (7-9pm CET) is still doable? |
+| <2020-11-28 Sat 14:05-14:15> | Experience Report: Steps to "Emacs Hyper Notebooks" | Joseph Corneli, Raymond Puzio, and Cameron Ray Smith | | ok |
+| <2020-11-28 Sat 14:18-14:38> | README-Driven Design | Adam Ard | done | ok |
+| <2020-11-28 Sat 14:41-14:51> | Moving from Jekyll to OrgMode, an experience report | Adolfo Villafiorita | | 9am-5pm CET, so 9am-12pm EST; see if 7pm-9pm CET (1-3pm EST is available) |
+| <2020-11-28 Sat 14:54-15:14> | Org-roam: Presentation, Demonstration, and What's on the Horizon | Leo Vivier | | 2:30-ish EST ok with tea; in CET timezone |
+| <2020-11-28 Sat 15:17-15:37> | Org-mode and Org-Roam for Scholars and Researchers | Noorah Alhasan | | ok |
+| <2020-11-28 Sat 15:40-16:00> | Org-roam: Technical Presentation | Leo Vivier | | 2:30-ish EST ok with tea; in CET timezone |
+| <2020-11-28 Sat 16:03-16:13> | Sharing blogs (and more) with org-webring | Brett Gilio | | ok |
+| <2020-11-28 Sat 16:16-16:36> | OMG Macros | Corwin Brust (mplsCorwin) | | ok |
+#+END:
+
+*** Sunday
+
+**** 9:30 - 12:00 Morning talks :morning:
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sun+morning/!"
+| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY |
+|------------------------------+----------------------------------------------------------------------------------------+-------------------------+--------+-------------------------------------------------------------------------------|
+| <2020-11-29 Sun 09:13-09:30> | Emacs development update | John Wiegley | done | prerec |
+| <2020-11-29 Sun 09:33-09:53> | Powering-up Special Blocks | Musa Al-hassy | | Unavailable 1pm-2pm EST both days |
+| <2020-11-29 Sun 09:56-10:46> | Incremental Parsing with emacs-tree-sitter | Tuấn-Anh Nguyễn | 24min | GMT+7, so earlier is better (9:30 EST?). Can pre-record and answer questions. |
+| <2020-11-29 Sun 10:49-11:09> | Analyze code quality through Emacs: a smart forensics approach and the story of a hack | Andrea | done | ok |
+| <2020-11-29 Sun 11:12-11:22> | Traverse complex JSON structures with live feedback | Zen Monk Alain M. Lafon | done | Available both days, birthday on the 28th |
+| <2020-11-29 Sun 11:25-11:45> | NonGNU ELPA | Richard Stallman | done | tbd |
+#+END:
+
+**** 13:00 - 16:30 Afternoon talks :afternoon:
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sun+afternoon/!"
+| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY |
+|------------------------------+---------------------------------------------------+-----------------------------------------------+---------+----------------------------------------------------------------------------|
+| <2020-11-29 Sun 13:03-13:13> | Emacs as a Highschooler: How It Changed My Life | Pierce Wang | done | Sun 12pm EST onwards |
+| <2020-11-29 Sun 13:16-13:26> | State of Retro Gaming in Emacs | Vasilij "wasamasa" Schneidermann | done | 8am-10pm CET, so 9am-3pm EST |
+| <2020-11-29 Sun 13:29-14:19> | Welcome To The Dungeon | Erik Elmshauser and Corwin Brust | | ok |
+| <2020-11-29 Sun 14:22-14:42> | Pathing of Least Resistance | Erik Elmshauser and Corwin Brust (mplsCorwin) | | ok |
+| <2020-11-29 Sun 14:45-14:55> | A tour of vterm | Gabriele Bozzola (@sbozzolo) | done | MST, so 11am-5pm EST |
+| <2020-11-29 Sun 14:58-15:14> | Lakota Language and Emacs | Grant Shangreaux | done | Central time, 10am EST-5pm EST |
+| <2020-11-29 Sun 15:17-15:41> | Object Oriented Code in the Gnus Newsreader | Eric Abrahamsen | planned | ok |
+| <2020-11-29 Sun 15:44-16:04> | Maxima a computer algebra system in Emacs | Fermin MF | | afternoon if possible |
+| <2020-11-29 Sun 16:07-16:30> | Extend Emacs to Modern GUI Applications with EAF | Matthew Zeng | | after 12pm EST both days; confirmed available November 29, 1pm-4:30pm EST. |
+| <2020-11-29 Sun 16:33-16:43> | WAVEing at Repetitive Repetitive Repetitive Music | Zachary Kanfer | done | ok |
+#+END:
+
+** Table for all talks
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%PREREC%SCHEDULED%ITEM%NAME" :match "/!"
+| PREREC | SCHEDULED | ITEM | NAME |
+|----------------+------------------------------+----------------------------------------------------------------------------------------+------------------------------------------------------|
+| ready | <2020-11-28 Sat 09:33-09:37> | Emacs News Highlights | Sacha Chua |
+| | <2020-11-28 Sat 09:40-10:00> | An Emacs Developer Story: From User to Package Maintainer | Leo Vivier |
+| done, live Q&A | <2020-11-28 Sat 10:03-10:13> | Idea to Novel Superstructure: Emacs for Writing | Bala Ramadurai |
+| planned | <2020-11-28 Sat 10:16-10:26> | Music in Plain Text | Jonathan Gregory |
+| | <2020-11-28 Sat 10:29-10:45> | Bard Bivou(m)acs - Building a bandcamp-like page for an album of music | Grant Shangreaux |
+| | <2020-11-28 Sat 10:48-10:58> | Trivial Emacs Kits | Corwin Brust (mplsCorwin) |
+| | <2020-11-28 Sat 11:01-11:21> | Beyond Vim and Emacs: A Scalable UI Paradigm | Sid Kasivajhula (countvajhula) |
+| | <2020-11-28 Sat 11:24-11:44> | Building reproducible Emacs | Andrew Tropin (abcdw) |
+| planned | <2020-11-28 Sat 11:47-12:27> | On why most of the best features in eev look like 5-minute hacks | Eduardo Ochs (edrx) |
+| | <2020-11-28 Sat 13:03-13:13> | Orgmode - your life in plain text | Rainer König |
+| | <2020-11-28 Sat 13:16-13:26> | Lead your future with Org | Andrea |
+| | <2020-11-28 Sat 13:29-13:49> | the org-gtd package: opinions about Getting Things Done | Aldric |
+| | <2020-11-28 Sat 13:52-14:02> | One Big-ass Org File or multiple tiny ones? Finally, the End of the debate! | Leo Vivier |
+| | <2020-11-28 Sat 14:05-14:15> | Experience Report: Steps to "Emacs Hyper Notebooks" | Joseph Corneli, Raymond Puzio, and Cameron Ray Smith |
+| done | <2020-11-28 Sat 14:18-14:38> | README-Driven Design | Adam Ard |
+| | <2020-11-28 Sat 14:41-14:51> | Moving from Jekyll to OrgMode, an experience report | Adolfo Villafiorita |
+| | <2020-11-28 Sat 14:54-15:14> | Org-roam: Presentation, Demonstration, and What's on the Horizon | Leo Vivier |
+| | <2020-11-28 Sat 15:17-15:37> | Org-mode and Org-Roam for Scholars and Researchers | Noorah Alhasan |
+| | <2020-11-28 Sat 15:40-16:00> | Org-roam: Technical Presentation | Leo Vivier |
+| | <2020-11-28 Sat 16:03-16:13> | Sharing blogs (and more) with org-webring | Brett Gilio |
+| | <2020-11-28 Sat 16:16-16:36> | OMG Macros | Corwin Brust (mplsCorwin) |
+| done | <2020-11-29 Sun 09:13-09:30> | Emacs development update | John Wiegley |
+| | <2020-11-29 Sun 09:33-09:53> | Powering-up Special Blocks | Musa Al-hassy |
+| 24min | <2020-11-29 Sun 09:56-10:46> | Incremental Parsing with emacs-tree-sitter | Tuấn-Anh Nguyễn |
+| done | <2020-11-29 Sun 10:49-11:09> | Analyze code quality through Emacs: a smart forensics approach and the story of a hack | Andrea |
+| done | <2020-11-29 Sun 11:12-11:22> | Traverse complex JSON structures with live feedback | Zen Monk Alain M. Lafon |
+| done | <2020-11-29 Sun 11:25-11:45> | NonGNU ELPA | Richard Stallman |
+| done | <2020-11-29 Sun 13:03-13:13> | Emacs as a Highschooler: How It Changed My Life | Pierce Wang |
+| done | <2020-11-29 Sun 13:16-13:26> | State of Retro Gaming in Emacs | Vasilij "wasamasa" Schneidermann |
+| | <2020-11-29 Sun 13:29-14:19> | Welcome To The Dungeon | Erik Elmshauser and Corwin Brust |
+| | <2020-11-29 Sun 14:22-14:42> | Pathing of Least Resistance | Erik Elmshauser and Corwin Brust (mplsCorwin) |
+| done | <2020-11-29 Sun 14:45-14:55> | A tour of vterm | Gabriele Bozzola (@sbozzolo) |
+| done | <2020-11-29 Sun 14:58-15:14> | Lakota Language and Emacs | Grant Shangreaux |
+| planned | <2020-11-29 Sun 15:17-15:41> | Object Oriented Code in the Gnus Newsreader | Eric Abrahamsen |
+| | <2020-11-29 Sun 15:44-16:04> | Maxima a computer algebra system in Emacs | Fermin MF |
+| | <2020-11-29 Sun 16:07-16:30> | Extend Emacs to Modern GUI Applications with EAF | Matthew Zeng |
+| done | <2020-11-29 Sun 16:33-16:43> | WAVEing at Repetitive Repetitive Repetitive Music | Zachary Kanfer |
+#+END:
+
+* Talks
+:PROPERTIES:
+:ID: talks
+:MIN_TIME_SUM: 880
+:TARGET_TIME: 768
+:DIFFERENCE: Needs: 112
+:CUSTOM_ID: submissions
+:END:
+
+** NOVEMBER 28 (Saturday) :sat:
+
+*** Day 1 opening remarks
+SCHEDULED: <2020-11-28 Sat 09:00-09:30>
+:PROPERTIES:
+:FIXED_TIME: t
+:MIN_TIME: 30
+:NAME: Amin Bandali, Sacha Chua, Leo Vivier
+:CUSTOM_ID: talk00
+:TALK_ID: 00
+:ROOM: A
+:DURATION: 7:04
+:SLUG: 00
+:TIME: 8
+:END:
+
+*** 9:30 - 12:00 User talks :morning:
+:PROPERTIES:
+:TARGET_TIME: 120
+:MIN_TIME_SUM: 150
+:DIFFERENCE: Needs: 30
+:END:
+
+#+CALL: check_time() :eval yes
+
+#+RESULTS:
+| Difference | Minimum time | Target time |
+| -30 | 150 | 120 |
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sat+morning/!"
+| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY |
+|------------------------------+------------------------------------------------------------------------+--------------------------------+----------------+-------------------------------------|
+| <2020-11-28 Sat 09:33-09:37> | Emacs News Highlights | Sacha Chua | ready | prerec, maybe 9am-3pm EST |
+| <2020-11-28 Sat 09:40-10:00> | An Emacs Developer Story: From User to Package Maintainer | Leo Vivier | | 9am-12pm EST |
+| <2020-11-28 Sat 10:03-10:13> | Idea to Novel Superstructure: Emacs for Writing | Bala Ramadurai | done, live Q&A | 8:30am EST-12pm EST |
+| <2020-11-28 Sat 10:16-10:26> | Music in Plain Text | Jonathan Gregory | planned | ok |
+| <2020-11-28 Sat 10:29-10:45> | Bard Bivou(m)acs - Building a bandcamp-like page for an album of music | Grant Shangreaux | | 10am-5pm EST, daylight Central US |
+| <2020-11-28 Sat 10:48-10:58> | Trivial Emacs Kits | Corwin Brust (mplsCorwin) | | ok |
+| <2020-11-28 Sat 11:01-11:21> | Beyond Vim and Emacs: A Scalable UI Paradigm | Sid Kasivajhula (countvajhula) | | PST, so maybe 11 AM EST - 5 PM EST? |
+| <2020-11-28 Sat 11:24-11:44> | Building reproducible Emacs | Andrew Tropin (abcdw) | | After 4pm UTC - 11am-5pm EST |
+| <2020-11-28 Sat 11:47-12:27> | On why most of the best features in eev look like 5-minute hacks | Eduardo Ochs (edrx) | planned | ok |
+#+END:
+
+**** User stories
+
+***** in-progress Emacs News Highlights :lightning:user:
+SCHEDULED: <2020-11-28 Sat 09:33-09:37>
+:PROPERTIES:
+:MAX_TIME: 4
+:MIN_TIME: 4
+:AVAILABILITY: prerec, maybe 9am-3pm EST
+:NAME: Sacha Chua
+:PREREC: ready
+:CUSTOM_ID: talk01
+:TALK_ID: 01
+:DURATION: 3:58
+:SLUG: 01
+:TIME: 4
+:DATE_SUBMITTED: 2020-10-05
+:END:
+
+Name: Sacha Chua
+
+****** Preferred format
+
+10 minutes
+
+****** (Un)availability
+
+Available maybe 9am-3pm EST
+
+****** Talk information
+
+Quick highlights from Emacs News since the last EmacsConf
+
+******* Links
+
+ This is a draft.
+
+ - [[https://www.masteringemacs.org/article/whats-new-in-emacs-27-1][Mickey Petersen's notes on Emacs 27.1]]
+ - [[https://www.reddit.com/r/emacs/comments/g9vdd0/bringing_gnu_emacs_to_native_code_at_the_european/][Bringing GNU Emacs to Native Code]]
+ - [[https://lwn.net/Articles/819452/][Making Emacs popular again [LWN.net]​]]
+ - [[https://www.reddit.com/r/emacs/comments/hfamm7/those_who_have_tried_out_multiple_zettelkasten/][Org Mode and Zettelkasten]]
+ - [[https://www.reddit.com/r/emacs/comments/e48se1/eaf_extending_emacs_with_amazing_gui_support/][EAF]]
+ - [[https://www.reddit.com/r/emacs/comments/f2c99b/you_can_play_doom_inside_emacs_using_eaf/][Doom]]
+ - Virtual meetups:
+ - [[https://www.meetup.com/New-York-Emacs-Meetup/events/][NYC]]
+ - [[https://www.meetup.com/Emacs-SF/][SF]]
+ - [[https://www.meetup.com/EmacsATX/][Emacs ATX]]
+ - [[https://www.reddit.com/r/emacs/comments/izbdq9/announcing_call_for_speakers_for_emacs_apac/][APAC]]
+ - [[https://www.reddit.com/r/planetemacs/comments/jokqa4/emacs_berlin_online_meetup_on_november_25th_2020/][Berlin]]
+ - [[https://emacssurvey.org/][Emacs User Survey]]
+
+****** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+***** in-progress An Emacs Developer Story: From User to Package Maintainer :standard:user:community:
+SCHEDULED: <2020-11-28 Sat 09:40-10:00>
+:PROPERTIES:
+:MAX_TIME: 20
+:MIN_TIME: 20
+:AVAILABILITY: 9am-12pm EST
+:NAME: Leo Vivier
+:CUSTOM_ID: talk02
+:TALK_ID: 02
+:DURATION: 24:15
+:SLUG: 02
+:TIME: 25
+:DATE_SUBMITTED: 2020-10-06
+:END:
+
+Name: Leo Vivier
+
+****** Preferred format
+
+Standard Talk (20 min).
+
+****** Talk information
+
+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 project 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 software which I am maintaining
+https://github.com/org-roam/org-roam
+
+****** (Un)availability
+
+I am in CET, and I would rather have the presentation early in the day
+(9am-12pm EST would be stellar). If need be, I could present later,
+but I do not think I would be as effective.
+
+****** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** Exploring Emacs's flexibility
+
+***** ready Idea to Novel Superstructure: Emacs for Writing :standard:lightning:user:
+SCHEDULED: <2020-11-28 Sat 10:03-10:13>
+:PROPERTIES:
+:MAX_TIME: 20
+:MIN_TIME: 10
+:AVAILABILITY: 8:30am EST-12pm EST
+:NAME: Bala Ramadurai
+:CUSTOM_ID: talk03
+:TALK_ID: 03
+:PREREC: done, live Q&A
+:DURATION: 14:50
+:SLUG: 03
+:TIME: 15
+:DATE_SUBMITTED: 2020-09-02
+:END:
+
+Name: Bala Ramadurai
+
+****** Preferred format
+
+Standard talk (I am ok to reduce this to a lightning talk as well)
+
+****** Talk information
+
+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
+
+****** (Un)availability
+
+Available between 01:30pm and 06:30pm UTC on Nov 28, 2020. Also
+available between 01:30pm and 05:00pm UTC.
+
+****** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+***** in-progress Music in Plain Text :music:user:lightning:
+SCHEDULED: <2020-11-28 Sat 10:16-10:26>
+:PROPERTIES:
+:MAX_TIME: 10
+:MIN_TIME: 10
+:AVAILABILITY: ok
+:NAME: Jonathan Gregory
+:PREREC: planned
+:CUSTOM_ID: talk04
+:TALK_ID: 04
+:DURATION: 8:26
+:SLUG: 04
+:TIME: 9
+:DATE_SUBMITTED: 2020-10-06
+:END:
+
+Name: Jonathan Gregory
+
+****** Preferred format
+
+10 minutes
+
+****** Talk information
+
+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 simply 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 faciliates digital
+archiving and distribution of musical scores. In this talk, I begin
+by showcasing LilyPond syntax and mode using literate programming
+techniques as examples for building sheet music in Emacs, and proceed
+with an overview of the setup I use for producing music books with GNU
+Make, LilyPond, and LilyPond-mode.
+
+****** (Un)availability
+
+Available both days
+
+****** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+***** in-progress Bard Bivou(m)acs - Building a bandcamp-like page for an album of music :music:
+SCHEDULED: <2020-11-28 Sat 10:29-10:45>
+:PROPERTIES:
+:MIN_TIME: 16
+:MAX_TIME: 16
+:AVAILABILITY: 10am-5pm EST, daylight Central US
+:NAME: Grant Shangreaux
+:CUSTOM_ID: talk05
+:TALK_ID: 05
+:DURATION: 29:50
+:SLUG: 05
+:TIME: 30
+:DATE_SUBMITTED: 2020-10-07
+:END:
+
+Name: Grant Shangreaux
+
+****** Preferred format
+
+10 minute
+
+****** Talk information
+
+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.
+
+****** (Un)availability
+
+Flexible, prefer daylight times for US Central time zone
+
+****** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** Emacs configuration
+
+***** in-progress Trivial Emacs Kits :lightning:config:user:beginner:
+SCHEDULED: <2020-11-28 Sat 10:48-10:58>
+:PROPERTIES:
+:FORMAT: Lightning talk
+:MAX_TIME: 10
+:MIN_TIME: 10
+:AVAILABILITY: ok
+:NAME: Corwin Brust (mplsCorwin)
+:CUSTOM_ID: talk06
+:TALK_ID: 06
+:DURATION: 13:41
+:SLUG: 06
+:TIME: 14
+:DATE_SUBMITTED: 2020-10-02
+:END:
+
+Name: Corwin Brust
+
+****** Preferred format
+
+Lightning talk (10m, probably without Q&A)
+
+****** Talk information
+
+Techniques to help new users bootstrap a more gentle introduction to
+Emacs, one (short) init.el file at a time.
+
+****** (Un)availability
+
+None
+
+****** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+***** in-progress Beyond Vim and Emacs: A Scalable UI Paradigm :nudge:
+SCHEDULED: <2020-11-28 Sat 11:01-11:21>
+:PROPERTIES:
+:MIN_TIME: 20
+:MAX_TIME: 50
+:AVAILABILITY: PST, so maybe 11 AM EST - 5 PM EST?
+:NAME: Sid Kasivajhula (countvajhula)
+:CUSTOM_ID: talk07
+:TALK_ID: 07
+:DURATION: 22:05
+:SLUG: 07
+:TIME: 23
+:DATE_SUBMITTED: 2020-10-10
+:END:
+
+Name: Sid Kasivajhula
+
+****** Preferred format
+
+Extended or Standard
+****** Comments
+
+#+begin_quote
+I think this might be a better fit as a lightning talk or maybe a
+standard talk that demonstrates the concept with a few well-chosen
+examples. A possible goal might be to show people that they can
+develop a mental model and remap more keys to fit it.
+#+end_quote
+
+****** Talk information
+
+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... glorious mode, that's what I want.
+And the only thing that'll cut it is if I do it ... my way. Why, with my
+precious emacs.d, I'm invincible! Well... 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.
+
+****** (Un)availability
+
+No constraints at this time.
+
+****** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+***** in-progress Building reproducible Emacs :standard:extended:config:user:
+SCHEDULED: <2020-11-28 Sat 11:24-11:44>
+:PROPERTIES:
+:FORMAT: Extended preferred, standard possible
+:MAX_TIME: 50
+:MIN_TIME: 20
+:AVAILABILITY: After 4pm UTC - 11am-5pm EST
+:NAME: Andrew Tropin (abcdw)
+:CUSTOM_ID: talk08
+:TALK_ID: 08
+:DURATION: 17:19
+:SLUG: 08
+:TIME: 18
+:DATE_SUBMITTED: 2020-09-25
+:END:
+
+Name: Andrew Tropin
+
+****** Preferred format
+
+Extended preferred, standard possible
+
+****** Talk information
+
+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.
+
+****** (Un)availability
+
+After 4pm UTC
+
+****** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+
+***** in-progress On why most of the best features in eev look like 5-minute hacks :extended:user:nudge:prerec:
+ SCHEDULED: <2020-11-28 Sat 11:47-12:27>
+ :PROPERTIES:
+ :MAX_TIME: 50
+ :MIN_TIME: 40
+ :AVAILABILITY: ok
+ :PREREC: planned
+ :NAME: Eduardo Ochs (edrx)
+ :CUSTOM_ID: talk21
+ :TALK_ID: 21
+ :DURATION: 47:08
+ :SLUG: 21
+ :TIME: 48
+ :DATE_SUBMITTED: 2020-10-05
+ :END:
+
+ Name: Eduardo Ochs
+
+****** Preferred format
+
+ Extended talk
+****** Comments
+
+ #+begin_quote
+ Will be pre-recorded, so we might be able to move it around in the schedule
+ #+end_quote
+
+****** Talk information
+
+ 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".
+
+****** (Un)availability
+
+ I will be available the whole day.
+
+****** Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+*** 12:00 - 13:00 Lunch
+SCHEDULED: <2020-11-28 Sat 12:00-13:00>
+:PROPERTIES:
+:FIXED_TIME: t
+:MIN_TIME: 60
+:END:
+
+*** 13:00 - 16:30 Afternoon talks :afternoon:
+:PROPERTIES:
+:MIN_TIME_SUM: 180
+:TARGET_TIME: 168
+:DIFFERENCE: Needs: 12
+:END:
+
+#+CALL: check_time() :eval yes
+
+#+RESULTS:
+| Difference | Minimum time | Target time |
+| -12 | 180 | 168 |
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sat+afternoon/!"
+| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY |
+|------------------------------+------------------------------------------------------------------------------+------------------------------------------------------+--------+---------------------------------------------------------------------------------|
+| <2020-11-28 Sat 13:03-13:13> | Orgmode - your life in plain text | Rainer König | | CET, so 9am-maybe 2pm EST (8pm CET) |
+| <2020-11-28 Sat 13:16-13:26> | Lead your future with Org | Andrea | | ok |
+| <2020-11-28 Sat 13:29-13:49> | the org-gtd package: opinions about Getting Things Done | Aldric | | ok, confirmed |
+| <2020-11-28 Sat 13:52-14:02> | One Big-ass Org File or multiple tiny ones? Finally, the End of the debate! | Leo Vivier | | 9am-12pm EST (in CET timezone)... see if 1-3pm EST (7-9pm CET) is still doable? |
+| <2020-11-28 Sat 14:05-14:15> | Experience Report: Steps to "Emacs Hyper Notebooks" | Joseph Corneli, Raymond Puzio, and Cameron Ray Smith | | ok |
+| <2020-11-28 Sat 14:18-14:38> | README-Driven Design | Adam Ard | done | ok |
+| <2020-11-28 Sat 14:41-14:51> | Moving from Jekyll to OrgMode, an experience report | Adolfo Villafiorita | | 9am-5pm CET, so 9am-12pm EST; see if 7pm-9pm CET (1-3pm EST is available) |
+| <2020-11-28 Sat 14:54-15:14> | Org-roam: Presentation, Demonstration, and What's on the Horizon | Leo Vivier | | 2:30-ish EST ok with tea; in CET timezone |
+| <2020-11-28 Sat 15:17-15:37> | Org-mode and Org-Roam for Scholars and Researchers | Noorah Alhasan | | ok |
+| <2020-11-28 Sat 15:40-16:00> | Org-roam: Technical Presentation | Leo Vivier | | 2:30-ish EST ok with tea; in CET timezone |
+| <2020-11-28 Sat 16:03-16:13> | Sharing blogs (and more) with org-webring | Brett Gilio | | ok |
+| <2020-11-28 Sat 16:16-16:36> | OMG Macros | Corwin Brust (mplsCorwin) | | ok |
+#+END:
+
+**** in-progress Orgmode - your life in plain text :standard:tutorial:org:nudge:
+ SCHEDULED: <2020-11-28 Sat 13:03-13:13>
+ :PROPERTIES:
+ :MAX_TIME: 20
+ :MIN_TIME: 10
+ :AVAILABILITY: CET, so 9am-maybe 2pm EST (8pm CET)
+ :NAME: Rainer König
+ :CUSTOM_ID: talk09
+ :TALK_ID: 09
+ :DURATION: 14:09
+ :SLUG: 09
+ :TIME: 15
+ :DATE_SUBMITTED: 2020-10-05
+ :END:
+
+Name: Rainer König
+
+***** Preferred format
+
+Talk
+***** Comments
+
+#+begin_quote
+I'm also not sure we need a 20-minute tutorial on Org Mode, since it's
+a perennial topic for other videos. I suppose people unfamiliar with
+Org Mode will probably benefit from a quick pointer to beginner
+resources (maybe a 5-minute pointer). I'm always curious about Org
+workflows, though, so if this talk is rejigged as a workflow demo, it
+might be a good fit for 10-20 minutes.
+#+end_quote
+
+***** Talk information
+
+This is a talk about Orgmode, my favorite Emacs application. The goal
+is to show you the power of Emacs when you want to manage and organize
+your life. Orgmode is your swiss army knife for that job, and so far
+the only tool that you can customize for your needs and you need to
+customize yourself to fit the restrictions of a "ToDo list tool".
+
+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.
+
+This talk should introduce people to Orgmode, showing them what they
+can do and how it makes your life easier, freeing time for the things
+that matter to you.
+
+I was holding a similar talk at the local Linux Day in our town in
+2017. In 2016 I recorded a set of tutorial videos which are available
+on my YouTube channel which gained more than 3500 subcribers because
+of those tutorials. In Summer 2020 I recorded the tutorials again for
+a course at Udemy which went online in October 2020 and is
+supplemented by a 100+ pages course book.
+
+***** (Un)availability
+
+Since its weekend on November 28/29 I think I can be flexible, but
+keep in mind that I'm living in the Central European Time time zone.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Lead your future with Org :standard:lightning:org:workflow:user:
+ SCHEDULED: <2020-11-28 Sat 13:16-13:26>
+ :PROPERTIES:
+ :MAX_TIME: 20
+ :MIN_TIME: 10
+ :AVAILABILITY: ok
+ :NAME: Andrea
+ :CUSTOM_ID: talk10
+ :TALK_ID: 10
+ :DURATION: 8:18
+ :SLUG: 10
+ :TIME: 9
+ :DATE_SUBMITTED: 2020-09-25
+ :END:
+
+Name: Andrea
+
+***** Preferred format
+
+Standard talk (or even Lighting talk by only giving references to the
+modes I plan to show)
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+I am available :D
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress the org-gtd package: opinions about Getting Things Done
+ SCHEDULED: <2020-11-28 Sat 13:29-13:49>
+ :PROPERTIES:
+ :MIN_TIME: 20
+ :MAX_TIME: 50
+ :AVAILABILITY: ok, confirmed
+ :NAME: Aldric
+ :CUSTOM_ID: talk11
+ :TALK_ID: 11
+ :DURATION: 15:18
+ :SLUG: 11
+ :TIME: 16
+ :DATE_SUBMITTED: 2020-10-07
+ :END:
+
+Name: Aldric
+
+***** Preferred format
+
+50 min - can also do 20 minutes
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+N/A
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress One Big-ass Org File or multiple tiny ones? Finally, the End of the debate! :standard:lightning:org:user:timing:
+ SCHEDULED: <2020-11-28 Sat 13:52-14:02>
+ :PROPERTIES:
+ :MAX_TIME: 20
+ :MIN_TIME: 10
+ :AVAILABILITY: 9am-12pm EST (in CET timezone)... see if 1-3pm EST (7-9pm CET) is still doable?
+ :NAME: Leo Vivier
+ :CUSTOM_ID: talk12
+ :TALK_ID: 12
+ :DURATION: 16:38
+ :SLUG: 12
+ :TIME: 17
+ :DATE_SUBMITTED: 2020-10-06
+ :END:
+
+Name: Leo Vivier
+
+***** Preferred format
+
+Standard Talk (20 min). Could be condensed into a Lightning Talk (10
+min), but I fear it would not do it justice.
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+I am in CET, and I would rather have the presentation early in the day
+(9am-12pm EST would be stellar). If need be, I could present later,
+but I do not think I would be as effective.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Experience Report: Steps to "Emacs Hyper Notebooks"
+SCHEDULED: <2020-11-28 Sat 14:05-14:15>
+:PROPERTIES:
+:MIN_TIME: 10
+:MAX_TIME: 10
+:AVAILABILITY: ok
+:NAME: Joseph Corneli, Raymond Puzio, and Cameron Ray Smith
+:CUSTOM_ID: talk13
+:TALK_ID: 13
+:DURATION: 12:05
+:SLUG: 13
+:TIME: 13
+:DATE_SUBMITTED: 2020-10-07
+:END:
+
+Name: Joseph Corneli, Raymond Puzio, and Cameron Ray Smith
+
+***** Preferred format
+
+10 minute talk
+
+***** [#B] Talk information
+
+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.
+
+***** (Un)availability
+
+N/A
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** ready README-Driven Design :extended:standard:org:tutorial:
+SCHEDULED: <2020-11-28 Sat 14:18-14:38>
+:PROPERTIES:
+:MAX_TIME: 50
+:MIN_TIME: 20
+:AVAILABILITY: ok
+:NAME: Adam Ard
+:CUSTOM_ID: talk14
+:TALK_ID: 14
+:PREREC: done
+:DURATION: 19:41
+:SLUG: 14
+:TIME: 20
+:DATE_SUBMITTED: 2020-09-23
+:END:
+
+Name: Adam Ard
+
+***** Preferred format
+
+I think I have enough for a full 50 minutes. But I can do a shorter
+version too if that will work better for the conference schedule.
+My schedule is wide open too, so put me in at any time slot.
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+I am available for any time slot or length. Stick me in wherever!
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Moving from Jekyll to OrgMode, an experience report :timing:org:
+SCHEDULED: <2020-11-28 Sat 14:41-14:51>
+:PROPERTIES:
+:MIN_TIME: 10
+:MAX_TIME: 20
+:AVAILABILITY: 9am-5pm CET, so 9am-12pm EST; see if 7pm-9pm CET (1-3pm EST is available)
+:NAME: Adolfo Villafiorita
+:CUSTOM_ID: talk15
+:TALK_ID: 15
+:DURATION: 25:00
+:SLUG: 15
+:TIME: 25
+:DATE_SUBMITTED: 2020-10-07
+:END:
+
+Name: Adolfo Villafiorita
+
+***** Preferred format
+
+standard talk or lightning talk
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+I work and live in Italy (CET) and I would prefer slots compatible
+with the timezone. (I wouldn't recommend recording me early in the
+morning, in any case!)
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Org-roam: Presentation, Demonstration, and What's on the Horizon :extended:standard:org:
+SCHEDULED: <2020-11-28 Sat 14:54-15:14>
+:PROPERTIES:
+:MAX_TIME: 50
+:MIN_TIME: 20
+:AVAILABILITY: 2:30-ish EST ok with tea; in CET timezone
+:NAME: Leo Vivier
+:CUSTOM_ID: talk16
+:TALK_ID: 16
+:DURATION: 21:56
+:SLUG: 16
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-06
+:END:
+
+Name: Leo Vivier
+
+***** Preferred format
+
+Extended Talk (50 min). Parts can be pruned to fit in a Standard Talk
+(20 min), but I'd strongly prefer the former.
+
+***** Talk information
+
+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.
+
+# ----------------------------------------------------------------------
+
+# I am one of the co-maintainers for Org-roam.
+
+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:
+- [[https://www.youtube.com/watch?v=3DoyEMlIxIHXs][Org-Roam v1.2.0: Headlines & Unlinked References - YouTube]]
+- [[https://www.youtube.com/watch?v=3DWy9WvF5gWYg][Org-roam-bibtex - Quick Presentation - YouTube]]
+- [[https://www.youtube.com/watch?v=3D1q9x2aZCJJ4][Org-roam-dailies: Demonstration - YouTube]]
+
+***** (Un)availability
+
+I am in CET, and I would rather have the presentation early in the day
+(9am-12pm EST would be stellar). If need be, I could present later,
+but I do not think I would be as effective.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Org-mode and Org-Roam for Scholars and Researchers :standard:org:nudge:
+SCHEDULED: <2020-11-28 Sat 15:17-15:37>
+:PROPERTIES:
+:MIN_TIME: 20
+:MAX_TIME: 20
+:AVAILABILITY: ok
+:NAME: Noorah Alhasan
+:CUSTOM_ID: talk17
+:TALK_ID: 17
+:DURATION: 21:15
+:SLUG: 17
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-10
+:END:
+
+Name: Noorah Alhasan
+
+***** Preferred format
+
+20 minutes
+***** Comments
+#+begin_quote
+org-roam has a lot of talks in this agenda, but it (and other
+Zettelkasten-type things) have resulted in a lot of buzz in the Org
+community, so it's probably worth looking at it from the intro, user,
+and dev perspectives. It would be good to get the presenter
+coordinating with the one doing the org-roam overview in order to
+minimize overlap. This might even be doable in a lightning talk.
+#+end_quote
+
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+N/A
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Org-roam: Technical Presentation :standard:elisp:org:
+SCHEDULED: <2020-11-28 Sat 15:40-16:00>
+:PROPERTIES:
+:MAX_TIME: 20
+:MIN_TIME: 20
+:AVAILABILITY: 2:30-ish EST ok with tea; in CET timezone
+:NAME: Leo Vivier
+:CUSTOM_ID: talk18
+:TALK_ID: 18
+:DURATION: 21:26
+:SLUG: 18
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-06
+:END:
+
+Name: Leo Vivier
+
+***** Preferred format
+
+Standard Talk (20 min).
+
+***** Talk information
+
+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
+
+***** (Un)availability
+
+I am in CET, and I would rather have the presentation early in the day
+(9am-12pm EST would be stellar). If need be, I could present later,
+but I do not think I would be as effective.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+**** in-progress Sharing blogs (and more) with org-webring :lightning:org:user:
+SCHEDULED: <2020-11-28 Sat 16:03-16:13>
+:PROPERTIES:
+:MAX_TIME: 10
+:MIN_TIME: 10
+:AVAILABILITY: ok
+:NAME: Brett Gilio
+:CUSTOM_ID: talk19
+:TALK_ID: 19
+:DURATION: 8:13
+:SLUG: 19
+:TIME: 9
+:DATE_SUBMITTED: 2020-10-02
+:END:
+
+Name: Brett Gilio
+
+***** Preferred format
+
+Lightning
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+N/A
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress OMG Macros :org:
+SCHEDULED: <2020-11-28 Sat 16:16-16:36>
+:PROPERTIES:
+:MIN_TIME: 20
+:MAX_TIME: 20
+:AVAILABILITY: ok
+:NAME: Corwin Brust (mplsCorwin)
+:CUSTOM_ID: talk20
+:TALK_ID: 20
+:DURATION: 22:50
+:SLUG: 20
+:TIME: 23
+:DATE_SUBMITTED: 2020-10-09
+:END:
+
+Name: Corwin Brust
+
+***** Preferred format
+
+Standard talk (20m, including 5m Q&A)
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+None
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+*** Day 1 closing remarks
+SCHEDULED: <2020-11-28 Sat 16:30-17:00>
+:PROPERTIES:
+:FIXED_TIME: t
+:MIN_TIME: 30
+:NAME: Amin Bandali, Sacha Chua, Leo Vivier, Corwin Brust
+:TALK_ID: 40
+:CUSTOM_ID: talk40
+:DURATION: 15:47
+:SLUG: 40
+:TIME: 16
+:END:
+
+** NOVEMBER 29 (Sunday) :sun:
+
+*** Day 2 opening remarks
+SCHEDULED: <2020-11-29 Sun 09:00-09:10>
+:PROPERTIES:
+:FIXED_TIME: t
+:MIN_TIME: 10
+:NAME: Amin Bandali, Sacha Chua, Leo Vivier
+:TALK_ID: 41
+:CUSTOM_ID: talk41
+:DURATION: 11:47
+:SLUG: 41
+:TIME: 12
+:END:
+
+*** 9:10 - 12:00 Morning talks :morning:
+:PROPERTIES:
+:MIN_TIME_SUM: 137
+:TARGET_TIME: 140
+:DIFFERENCE: Extra: 3
+:END:
+
+#+CALL: check_time()
+
+#+RESULTS:
+| Difference | Minimum time | Target time |
+| 3 | 137 | 140 |
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sun+morning/!"
+| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY |
+|------------------------------+----------------------------------------------------------------------------------------+-------------------------+--------+-------------------------------------------------------------------------------|
+| <2020-11-29 Sun 09:13-09:30> | Emacs development update | John Wiegley | done | prerec |
+| <2020-11-29 Sun 09:33-09:53> | Powering-up Special Blocks | Musa Al-hassy | | Unavailable 1pm-2pm EST both days |
+| <2020-11-29 Sun 09:56-10:46> | Incremental Parsing with emacs-tree-sitter | Tuấn-Anh Nguyễn | 24min | GMT+7, so earlier is better (9:30 EST?). Can pre-record and answer questions. |
+| <2020-11-29 Sun 10:49-11:09> | Analyze code quality through Emacs: a smart forensics approach and the story of a hack | Andrea | done | ok |
+| <2020-11-29 Sun 11:12-11:22> | Traverse complex JSON structures with live feedback | Zen Monk Alain M. Lafon | done | Available both days, birthday on the 28th |
+| <2020-11-29 Sun 11:25-11:45> | NonGNU ELPA | Richard Stallman | done | tbd |
+#+END:
+
+**** in-progress Emacs development update
+ SCHEDULED: <2020-11-29 Sun 09:13-09:30>
+ :PROPERTIES:
+ :MAX_TIME: 17
+ :MIN_TIME: 17
+ :AVAILABILITY: prerec
+ :NAME: John Wiegley
+ :TALK_ID: 38
+ :CUSTOM_ID: talk38
+ :PREREC: done
+ :DURATION: 5:07
+ :SLUG: 38
+ :TIME: 6
+ :END:
+
+***** Talk information
+
+ TBD - possibly a quick overview of Emacs 27.1 and development priorities for Emacs 28
+
+**** in-progress Powering-up Special Blocks :standard:org:elisp:
+SCHEDULED: <2020-11-29 Sun 09:33-09:53>
+:PROPERTIES:
+:MAX_TIME: 20
+:MIN_TIME: 20
+:AVAILABILITY: Unavailable 1pm-2pm EST both days
+:NAME: Musa Al-hassy
+:CUSTOM_ID: talk22
+:TALK_ID: 22
+:DURATION: 29:06
+:SLUG: 22
+:TIME: 30
+:DATE_SUBMITTED: 2020-09-22
+:END:
+
+Name: Musa Al-hassy
+
+***** Preferred format
+
+Standard talk
+
+***** Comments
+
+#+begin_quote
+2020-10-18: Moved back to Sunday, e-mailed.
+2020-10-17: Possibly move to Saturday? E-mailed 2020-10-17. Might be good to put this before OMG Macros.
+#+end_quote
+
+***** Talk information
+
+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.
+
+#+begin_example
+(defblock stutter () (reps 2)
+ "Output the CONTENTS of the block REPS many times"
+ (org-parse (s-repeat reps contents)))
+#+end_example
+
+Here is an invocation that passes an /optional/ argument; which
+defaults to 2 when not given.
+
+#+begin_stutter :reps 5
+Emacs for the win ⌣̈
+#+end_stutter
+
+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 ...
+ - translates /some selected/ text ---useful for multilingual blogs
+ - hides /some selected/ text ---useful for learning, quizzes
+ - folds/boxes text ---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 ---``defblock''
+ + Familiar ``src'' syntax for passing arguments ---e.g., ``:key
+ value''
+ + Fine-grained control over export translation phases ---c.f.,
+ ``org-parse'' above
+ + *Modular*: New blocks can be made out of existing blocks really
+ quickly using ``blockcall'' ---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.
+
+***** (Un)availability
+
+I would be unavailable Nov 28/29 from 1-2pm (Toronto time) on both
+days; but otherwise I'm excited to attend the event :-)
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Incremental Parsing with emacs-tree-sitter :extended:elisp:timing:
+SCHEDULED: <2020-11-29 Sun 09:56-10:46>
+:PROPERTIES:
+:MAX_TIME: 50
+:MIN_TIME: 50
+:AVAILABILITY: GMT+7, so earlier is better (9:30 EST?). Can pre-record and answer questions.
+:NAME: Tuấn-Anh Nguyễn
+:PREREC: 24min
+:CUSTOM_ID: talk23
+:TALK_ID: 23
+:DURATION: 43:54
+:SLUG: 23
+:TIME: 44
+:DATE_SUBMITTED: 2020-10-06
+:END:
+
+Name: Tuấn-Anh Nguyễn
+
+prerec and live Q&A
+
+***** Preferred format
+
+50 minutes (Extended talk)
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+The conference will start at 9PM in my timezone (GMT+7). I would
+prefer the earlier time slots. If possible, I would also like to
+pre-record my talk, and to be online just to answer questions during
+my time slot.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Analyze code quality through Emacs: a smart forensics approach and the story of a hack :extended:standard:dev:
+SCHEDULED: <2020-11-29 Sun 10:49-11:09>
+:PROPERTIES:
+:MAX_TIME: 50
+:MIN_TIME: 20
+:AVAILABILITY: ok
+:NAME: Andrea
+:CUSTOM_ID: talk24
+:QUESTIONS: pad and IRC, not BBB
+:TALK_ID: 24
+:PREREC: done
+:DURATION: 20:46
+:SLUG: 24
+:TIME: 21
+:DATE_SUBMITTED: 2020-09-25
+:END:
+
+Name: Andrea
+
+***** Preferred format
+
+Extended Talk (I can squeeze this to a Standard talk, by not going in
+depth on the analyses I plan to demonstrate)
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+I am available :D
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Traverse complex JSON structures with live feedback :lightning:dev:
+SCHEDULED: <2020-11-29 Sun 11:12-11:22>
+:PROPERTIES:
+:MAX_TIME: 10
+:MIN_TIME: 10
+:AVAILABILITY: Available both days, birthday on the 28th
+:NAME: Zen Monk Alain M. Lafon
+:CUSTOM_ID: talk25
+:QA: pad/IRC
+:TALK_ID: 25
+:PREREC: done
+:DURATION: 9:52
+:SLUG: 25
+:TIME: 10
+:DATE_SUBMITTED: 2020-08-30
+:END:
+
+Name: Zen Monk Alain M. Lafon
+
+***** Preferred format
+
+Lightning talk (pre-recorded video is possible)
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+Both dates are good, even though it's my birthday on the 28th. But
+I'll happily make space for EmacsConf(;
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress NonGNU ELPA
+ SCHEDULED: <2020-11-29 Sun 11:25-11:45>
+ :PROPERTIES:
+ :PREREC: done
+ :TALK_ID: 39
+ :CUSTOM_ID: talk39
+ :MAX_TIME: 20
+ :MIN_TIME: 20
+ :AVAILABILITY: tbd
+ :NAME: Richard Stallman
+ :DURATION: 53:38
+ :SLUG: 39
+ :TIME: 54
+ :END:
+
+***** Talk information
+
+TBD - plans for a NonGNU ELPA that will be easy to enable and contribute to without signing copyright assignment papers
+
+*** 12:00 - 13:00 Lunch
+SCHEDULED: <2020-11-29 Sun 12:00-13:00>
+:PROPERTIES:
+:FIXED_TIME: t
+:MIN_TIME: 60
+:END:
+
+*** 13:00 - 16:30 Afternoon talks :afternoon:
+:PROPERTIES:
+:MIN_TIME_SUM: 193
+:TARGET_TIME: 168
+:DIFFERENCE: Needs: 25
+:END:
+
+#+CALL: check_time()
+
+#+RESULTS:
+| Difference | Minimum time | Target time |
+| -25 | 193 | 168 |
+
+
+#+BEGIN: columnview :hlines 1 :id "talks" :format "%SCHEDULED%20ITEM%NAME%PREREC%AVAILABILITY" :match "sun+afternoon/!"
+| SCHEDULED | ITEM | NAME | PREREC | AVAILABILITY |
+|------------------------------+---------------------------------------------------+-----------------------------------------------+---------+----------------------------------------------------------------------------|
+| <2020-11-29 Sun 13:03-13:13> | Emacs as a Highschooler: How It Changed My Life | Pierce Wang | done | Sun 12pm EST onwards |
+| <2020-11-29 Sun 13:16-13:26> | State of Retro Gaming in Emacs | Vasilij "wasamasa" Schneidermann | done | 8am-10pm CET, so 9am-3pm EST |
+| <2020-11-29 Sun 13:29-14:19> | Welcome To The Dungeon | Erik Elmshauser and Corwin Brust | | ok |
+| <2020-11-29 Sun 14:22-14:42> | Pathing of Least Resistance | Erik Elmshauser and Corwin Brust (mplsCorwin) | | ok |
+| <2020-11-29 Sun 14:45-14:55> | A tour of vterm | Gabriele Bozzola (@sbozzolo) | done | MST, so 11am-5pm EST |
+| <2020-11-29 Sun 14:58-15:14> | Lakota Language and Emacs | Grant Shangreaux | done | Central time, 10am EST-5pm EST |
+| <2020-11-29 Sun 15:17-15:41> | Object Oriented Code in the Gnus Newsreader | Eric Abrahamsen | planned | ok |
+| <2020-11-29 Sun 15:44-16:04> | Maxima a computer algebra system in Emacs | Fermin MF | | afternoon if possible |
+| <2020-11-29 Sun 16:07-16:30> | Extend Emacs to Modern GUI Applications with EAF | Matthew Zeng | | after 12pm EST both days; confirmed available November 29, 1pm-4:30pm EST. |
+| <2020-11-29 Sun 16:33-16:43> | WAVEing at Repetitive Repetitive Repetitive Music | Zachary Kanfer | done | ok |
+#+END:
+
+**** in-progress Emacs as a Highschooler: How It Changed My Life :standard:user:community:timing:nudge:
+SCHEDULED: <2020-11-29 Sun 13:03-13:13>
+:PROPERTIES:
+:MAX_TIME: 20
+:MIN_TIME: 10
+:AVAILABILITY: Sun 12pm EST onwards
+:NAME: Pierce Wang
+:CUSTOM_ID: talk26
+:TALK_ID: 26
+:PREREC: done
+:DURATION: 14:57
+:SLUG: 26
+:TIME: 15
+:DATE_SUBMITTED: 2020-10-01
+:END:
+
+Name: Pierce Wang
+
+***** Preferred format
+
+Standard Talk
+
+***** Comments
+
+#+begin_quote
+Probably good idea to reach out to this speaker and check on the angle
+of this talk. It could be a good way to explore the question of how
+new people discover Emacs, get motivated to try Emacs, and get through
+the roadblocks, keeping in mind that it's from personal experience.
+#+end_quote
+
+***** Talk information
+
+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 describe the
+many ways that Emacs has shaped my life as a student, a programmer, a
+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, and I'd like to share this with others. In addition, I'd like
+to take this opportunity to address some roadblocks that I have
+noticed having observed some of my peers' attempts at learning Emacs
+and possible solutions for those barriers, taking inspiration from
+various sources both from inside and outside the Emacs community.
+
+***** Availability
+
+Saturday Nov. 28: 1pm to 10pm PDT
+Sunday Nov. 29: 8am to 10pm PDT
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress State of Retro Gaming in Emacs :extended:lightning:elisp:nudge:
+SCHEDULED: <2020-11-29 Sun 13:16-13:26>
+:PROPERTIES:
+:MAX_TIME: 50
+:MIN_TIME: 10
+:AVAILABILITY: 8am-10pm CET, so 9am-3pm EST
+:NAME: Vasilij "wasamasa" Schneidermann
+:CUSTOM_ID: talk27
+:PREREC: done
+:TALK_ID: 27
+:DURATION: 21:26
+:SLUG: 27
+:TIME: 22
+:DATE_SUBMITTED: 2020-10-05
+:END:
+
+Hello,
+
+I'd like to hand in a talk I've already presented at two different
+conferences, you can find its slides online [1][2].
+
+Name: Vasilij "wasamasa" Schneidermann
+
+***** Preferred format
+
+50 minutes (Extended talk)
+***** Comments
+
+#+begin_quote
+It might be good to nudge this to be a lightning talk since it's been
+presented elsewhere.
+#+end_quote
+
+***** Talk information
+
+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 [[https://en.wikipedia.org/wiki/CHIP-8][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/
+
+***** (Un)availability
+
+None I'm aware of yet, I'm available from 8AM to 10PM at local German
+time.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Welcome To The Dungeon :extended:elisp:
+SCHEDULED: <2020-11-29 Sun 13:29-14:19>
+:PROPERTIES:
+:MAX_TIME: 50
+:MIN_TIME: 50
+:AVAILABILITY: ok
+:NAME: Erik Elmshauser and Corwin Brust
+:CUSTOM_ID: talk28
+:QA: rtmp
+:TALK_ID: 28
+:DURATION: 9:00
+:SLUG: 28
+:TIME: 9
+:DATE_SUBMITTED: 2020-10-02
+:END:
+
+Name: Erik Elmshauser and Corwin Brust
+
+***** Preferred format
+
+Extended talk (50m, including 10-15m Q&A)
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+None
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Pathing of Least Resistance :standard:elisp:
+SCHEDULED: <2020-11-29 Sun 14:22-14:42>
+:PROPERTIES:
+:MAX_TIME: 20
+:MIN_TIME: 20
+:AVAILABILITY: ok
+:NAME: Erik Elmshauser and Corwin Brust (mplsCorwin)
+:CUSTOM_ID: talk29
+:QA: rtmp
+:TALK_ID: 29
+:SLUG: 29
+:DATE_SUBMITTED: 2020-10-02
+:TIME: 20
+:END:
+
+Name: Erik Elmshauser and Corwin Brust (mplsCorwin)
+
+***** Preferred format
+
+Standard talk (20m, including 5m Q&A)
+
+***** Talk information
+
+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.
+
+#+begin_example
+ 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"
+#+end_example
+
+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 [[https://github.com/dungeon-mode/game/blob/master/src/dm-map.el][map.el]],
+especially `dm-map-draw' and helpers. A few sample game maps this can
+render are available as org-mode documents in the [[https://github.com/dungeon-mode/game/blob/master/Docs/Maps][Docs/Maps]] folder.
+
+Those interested could compare functions between dm-map.el and
+[[https://github.com/dungeon-mode/game/blob/master/src/dm-draw.el][dm-draw.el]], which is an incomplete rewrite of the "SVG rendering"
+functions used only by [[https://github.com/dungeon-mode/game/blob/master/src/dm-sketch.el][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.
+
+***** (Un)availability
+
+None
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress A tour of vterm :dev:standard:lightning:timing:
+SCHEDULED: <2020-11-29 Sun 14:45-14:55>
+:PROPERTIES:
+:MAX_TIME: 20
+:MIN_TIME: 10
+:AVAILABILITY: MST, so 11am-5pm EST
+:NAME: Gabriele Bozzola (@sbozzolo)
+:CUSTOM_ID: talk30
+:TALK_ID: 30
+:PREREC: done
+:DURATION: 11:30
+:TIME: 10
+:SLUG: 30
+:DATE_SUBMITTED: 2020-10-06
+:END:
+
+Name: Gabriele Bozzola (@sbozzolo)
+
+***** Preferred format
+
+20 minutes, 10 would be fine, too.
+
+***** Talk information
+
+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
+
+***** (Un)availability
+
+My timezone is MST.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+**** in-progress Lakota Language and Emacs :lightning:elisp:
+SCHEDULED: <2020-11-29 Sun 14:58-15:14>
+:PROPERTIES:
+:MAX_TIME: 16
+:MIN_TIME: 16
+:DATE_SUBMITTED: 2020-10-06
+:AVAILABILITY: Central time, 10am EST-5pm EST
+:NAME: Grant Shangreaux
+:CUSTOM_ID: talk31
+:TALK_ID: 31
+:PREREC: done
+:DURATION: 16:50
+:SLUG: 31
+:TIME: 16
+:END:
+
+Name: Grant Shangreaux
+
+***** Preferred format
+
+10 minutes - Lightning talk
+I am flexible. I've done a 5 minute version as well.
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+I'm flexible, but on US Central time, so no extreme hours would be
+best for me.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Object Oriented Code in the Gnus Newsreader :standard:elisp:
+SCHEDULED: <2020-11-29 Sun 15:17-15:41>
+:PROPERTIES:
+:MAX_TIME: 24
+:MIN_TIME: 24
+:AVAILABILITY: ok
+:NAME: Eric Abrahamsen
+:CUSTOM_ID: talk32
+:TALK_ID: 32
+:PREREC: planned
+:DURATION: 23:57
+:SLUG: 32
+:DATE_SUBMITTED: 2020-10-02
+:TIME: 24
+:END:
+
+Name: Eric Abrahamsen
+
+***** Preferred format
+
+20 minutes should be fine (I'm happy to record in advance, as well).
+It would be fun to have a Q&A, if that's an option.
+
+***** Talk information
+
+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 -- largely borrowed
+from Common Lisp -- 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.
+
+***** (Un)availability
+
+No particular time restrictions I'm aware of.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Maxima a computer algebra system in Emacs :standard:dev:timing:
+SCHEDULED: <2020-11-29 Sun 15:44-16:04>
+:PROPERTIES:
+:MAX_TIME: 20
+:MIN_TIME: 20
+:AVAILABILITY: afternoon if possible
+:NAME: Fermin MF
+:CUSTOM_ID: talk33
+:TALK_ID: 33
+:DURATION: 39:16
+:SLUG: 33
+:DATE_SUBMITTED: 2020-10-05
+:TIME: 40
+:END:
+
+Name: Fermin MF
+
+***** Preferred format
+
+20 minutes (Standard talk)
+***** Comments
+#+begin_quote
+This could be a coding-type talk (how to do something technical in
+Emacs) or an Emacs Lisp talk (how to modernize outdated code and
+integrate with external apps).
+#+end_quote
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+I prefer the talk to be in the afternoon if it's possible.
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress Extend Emacs to Modern GUI Applications with EAF :standard:elisp:
+SCHEDULED: <2020-11-29 Sun 16:07-16:30>
+:PROPERTIES:
+:MAX_TIME: 23
+:MIN_TIME: 23
+:AVAILABILITY: after 12pm EST both days; confirmed available November 29, 1pm-4:30pm EST.
+:NAME: Matthew Zeng
+:CUSTOM_ID: talk34
+:TALK_ID: 34
+:QA: irc
+:DURATION: 22:22
+:SLUG: 34
+:DATE_SUBMITTED: 2020-10-02
+:TIME: 23
+:END:
+
+Name: Matthew Zeng
+
+***** Preferred format
+
+Standard
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+Available after 12pm Toronto/EST on any day
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+**** in-progress WAVEing at Repetitive Repetitive Repetitive Music :standard:lightning:music:elisp:
+SCHEDULED: <2020-11-29 Sun 16:33-16:43>
+:PROPERTIES:
+:MAX_TIME: 20
+:MIN_TIME: 10
+:AVAILABILITY: ok
+:NAME: Zachary Kanfer
+:CUSTOM_ID: talk35
+:TALK_ID: 35
+:PREREC: done
+:QA: live
+:DURATION: 16:02
+:SLUG: 35
+:DATE_SUBMITTED: 2020-10-06
+:TIME: 16
+:END:
+
+Name: Zachary Kanfer
+
+***** Preferred format
+
+Standard or Lightning talk. With a Lightning talk, I'd go less into
+detail on some of the odd corners of the project, like zero-width
+spaces rendering with nonzero width. But it would still be a viable
+talk.
+
+***** Talk information
+
+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.
+
+***** (Un)availability
+
+n/a
+
+***** Speaker release
+
+By submitting this proposal, I agree that my presentation at EmacsConf
+2020 is subject to the following terms and conditions:
+
+The EmacsConf organizers may capture audio and video (a "Recording")
+of my presentation and any associated materials, which may include
+slides, notes, transcripts, and prerecording(s) of my presentation
+that I provide to the EmacsConf organizers.
+
+I authorize the EmacsConf organizers to distribute, reproduce,
+publicly display, and prepare derivative works of the Recording and
+any derivative works of the Recording (the "Licensed Materials") under
+the terms of the Creative Commons Attribution-ShareAlike 4.0
+International (CC BY-SA 4.0) license.
+
+I grant to the EmacsConf organizers permission to use my name,
+likeness, and biographic information in association with their use of
+the Licensed Materials under the above license.
+
+I represent that I have the authority to grant the above license to
+the EmacsConf organizers. If my presentation incorporates any
+material owned by third parties, I represent that the material is
+sublicensable to the EmacsConf organizers or that my use of them is
+fair use.
+
+*** Day 2 closing remarks
+SCHEDULED: <2020-11-29 Sun 16:30-17:00>
+:PROPERTIES:
+:FIXED_TIME: t
+:MIN_TIME: 30
+:NAME: Amin Bandali, Sacha Chua, Leo Vivier, Corwin Brust
+:TALK_ID: 42
+:CUSTOM_ID: talk42
+:DURATION: 36:29
+:SLUG: 42
+:TIME: 36
+:END:
+
+* Withdrawn
+:PROPERTIES:
+:UNNUMBERED: notoc
+:END:
+
+** cancelled So Easy My Manager Can Do It! :lightning:beginner:user:nudge:
+ :PROPERTIES:
+ :MAX_TIME: 20
+ :MIN_TIME: 10
+ :AVAILABILITY: ok
+ :NAME: Corwin Brust
+ :CUSTOM_ID: talk36
+ :TALK_ID: 36
+ :SLUG: 36
+ :END:
+
+ #+begin_quote
+ 2020-10-17: Merged into "Trivial Emacs Kits"
+
+ Emacs Lisp is a big topic, so it's hard to think about how it
+ can be squeezed into a lightning talk or a standard talk. Still,
+ If this talk can help interested people who haven't fiddled with
+ their Emacs configuration feel like they can understand the next
+ two talks and find resources to learn more, it could be a good transition.
+ #+end_quote
+
+ Name: Corwin Brust
+
+*** Preferred format
+
+ Lightning talk (10m, probably without Q&A)
+
+*** Talk information
+
+ A lightning-fast, yet gentle, introduction to Emacs Lisp.
+
+*** (Un)availability
+
+ None
+
+*** Speaker release
+
+ By submitting this proposal, I agree that my presentation at EmacsConf
+ 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials") under
+ the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use of
+ the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+
+* Code
+** Planning
+
+This check_time block can be called from different headings. It sums
+up the minimum time from the talks in the subtree and compares it with
+the target time.
+
+#+NAME: check_time
+#+begin_src emacs-lisp :exports code :eval no
+(list (list "Difference" "Minimum time" "Target time")
+ (list
+ (- (string-to-number (org-entry-get (point) "TARGET_TIME"))
+ (string-to-number (org-entry-get (point) "MIN_TIME_SUM")))
+ (org-entry-get (point) "MIN_TIME_SUM")
+ (org-entry-get (point) "TARGET_TIME")))
+#+end_src
+
+** Yasnippet for adding video links to the individual talk page
+
+#+begin_example
+# -*- mode: snippet -*-
+# name: vid
+# key: vid
+# --
+[[!template id=vid src="`(current-kill 0)`"]]
+[Download $2.webm video, 720p, $1](`(current-kill 0)`)
+#+end_example
+
+or with the source code from the directory listing:
+
+#+begin_example
+(while (re-search-forward "<a href=\"\\(.*\\)?\">.*?\\([0-9]+[MB]\\)" nil t)
+ (replace-match "[[!template id=vid src=\"https://mirror.csclub.uwaterloo.ca/emacsconf/2020/\\1\"]]
+[Download .webm video, 720p, \\2B](https://mirror.csclub.uwaterloo.ca/emacsconf/2020/\\1)
+"))
+#+end_example
+
+* COMMENT Possible rough flow suggested by Sacha
+
+#+begin_src emacs-lisp :exports both
+(let* ((available-minutes (* 2 ; two days
+ (- 17 9) ; 9 to 5
+ 60 ; minutes
+ )))
+ `(("80% of capacity" ,(* .8 available-minutes))
+ ("90% of capacity" ,(* .9 available-minutes))))
+#+end_src
+
+#+RESULTS:
+| 80% of capacity | 768.0 |
+| 90% of capacity | 864.0 |
+
+* COMMENT Copyright & License
+
+Copyright (C) 2020 Sacha Chua, and authors of submitted proposals
+
+The EmacsConf 2020 submissions are part of the EmacsConf wiki, and is
+dual-licensed under the terms of the Creative Commons
+Attribution-ShareAlike 4.0 International Public License; and the GNU
+General Public License as published by the Free Software Foundation,
+either version 3 of the License, or (at your option) any later
+version.
+
+A copy of these two licenses is available on the EmacsConf wiki, in
+the [[https://emacsconf.org/COPYING.CC-BY-SA][COPYING.CC-BY-SA]] and [[https://emacsconf.org/COPYING.GPL][COPYING.GPL]] files.
+
+The submitted proposals are each copyright their respective author or
+creator, and the additional information/material added to the file by
+the EmacsConf organizers and others are copyright their respective
+authors.
+
+* COMMENT Local variables
+
+# Local Variables:
+# org-indent-mode: t
+# org-indent-indentation-per-level: 2
+# org-pretty-entities: nil
+# org-edit-src-content-indentation: 0
+# End:
diff --git a/2020/submit.md b/2020/submit.md
new file mode 100644
index 00000000..a02ccf24
--- /dev/null
+++ b/2020/submit.md
@@ -0,0 +1,99 @@
+[[!meta title="Submit"]]
+[[!meta copyright="Copyright &copy; 2019, 2020 Amin Bandali"]]
+
+When you are ready to submit your proposal, send your submission via
+email to <emacsconf-submit@gnu.org> by **October 7**, including at
+minimum these essential information:
+
+- Your (preferred) name;
+
+- the title of your talk/session;
+
+- your preferred talk/session [[format|cfp#formats]], and whether you
+ would be flexible about your allotted time slot (whether a shorter
+ format would also work for your talk, and if you would be okay with
+ presenting a shorter talk if necessary, to allow more people a
+ chance to present at EmacsConf 2020);
+
+- an abstract of your talk (500 words or less);
+
+- any potential times during the conference days in which you may be
+ unavailable and/or unable to present; and
+
+- your agreement with the speaker release for EmacsConf (see below).
+
+
+Please use the following template for your submission email,
+filling it out with information about you and your proposal:
+
+```
+Name:
+
+
+Title:
+
+
+Preferred format:
+
+
+Abstract:
+
+
+
+
+
+
+
+
+
+(Un)availability:
+
+
+
+Speaker release:
+
+ By submitting this proposal, I agree that my presentation at
+ EmacsConf 2020 is subject to the following terms and conditions:
+
+ The EmacsConf organizers may capture audio and video (a "Recording")
+ of my presentation and any associated materials, which may include
+ slides, notes, transcripts, and prerecording(s) of my presentation
+ that I provide to the EmacsConf organizers.
+
+ I authorize the EmacsConf organizers to distribute, reproduce,
+ publicly display, and prepare derivative works of the Recording and
+ any derivative works of the Recording (the "Licensed Materials")
+ under the terms of the Creative Commons Attribution-ShareAlike 4.0
+ International (CC BY-SA 4.0) license.
+
+ I grant to the EmacsConf organizers permission to use my name,
+ likeness, and biographic information in association with their use
+ of the Licensed Materials under the above license.
+
+ I represent that I have the authority to grant the above license to
+ the EmacsConf organizers. If my presentation incorporates any
+ material owned by third parties, I represent that the material is
+ sublicensable to the EmacsConf organizers or that my use of them is
+ fair use.
+```
+
+
+All kinds of people use Emacs for all kinds of things. We would love
+it if EmacsConf 2020 could highlight interesting perspectives and
+reflect the diversity of our community. If you know someone who might
+have a good idea for a talk, please reach out to them and encourage
+them to submit a proposal. Many people (especially from
+underrepresented groups such as women, people of colour, and
+non-developers) might not consider themselves expert enough to share
+their thoughts. If you let them know that you value their knowledge
+and maybe even suggest something that you think others would like to
+hear more about, they may realize that they have something worth
+sharing and that we would love to hear from them.
+
+This year, we are experimenting with an anonymized submission process.
+Identifying information will be removed from submissions by a
+conference organizer who will not participate in talk selection. The
+anonymized submissions will then be reviewed by a selection committee.
+We hope this will help reduce bias and encourage contribution. We
+look forward to hearing from you (and the people you want to nudge to
+speak)!
diff --git a/2020/subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt b/2020/subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt
new file mode 100644
index 00000000..3dfb9f5b
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--00-opening-remarks-autogen.vtt
@@ -0,0 +1,604 @@
+WEBVTT
+
+00:00:03.919 --> 00:00:05.279
+all right
+
+00:00:05.279 --> 00:00:08.400
+hello and uh welcome to EmacsConf
+
+00:00:08.400 --> 00:00:11.920
+2020. um I'm Amin Bandali
+
+00:00:11.920 --> 00:00:14.920
+and I have with me my fellow
+
+00:00:14.920 --> 00:00:16.560
+co-organizers uh
+
+00:00:16.560 --> 00:00:20.720
+Leo Vivier and Sacha Chua
+
+00:00:20.720 --> 00:00:24.160
+and we're very excited to be doing this
+
+00:00:24.160 --> 00:00:25.439
+conference again this year
+
+00:00:25.439 --> 00:00:28.240
+it's already been a year since the last
+
+00:00:28.240 --> 00:00:28.560
+one
+
+00:00:28.560 --> 00:00:32.079
+gosh the time flies by but
+
+00:00:32.079 --> 00:00:35.680
+um yeah so I guess
+
+00:00:35.680 --> 00:00:38.960
+without further ado let's get into
+
+00:00:38.960 --> 00:00:41.520
+the conference so hello again and
+
+00:00:41.520 --> 00:00:43.520
+welcome to EmacsConf 2020.
+
+00:00:43.520 --> 00:00:47.039
+we're very happy to have you here um
+
+00:00:47.039 --> 00:00:49.360
+so we're gonna start right off the bat
+
+00:00:49.360 --> 00:00:50.239
+with
+
+00:00:50.239 --> 00:00:53.600
+um a huge series of thank yous to um
+
+00:00:53.600 --> 00:00:56.000
+free software foundation especially the
+
+00:00:56.000 --> 00:00:57.120
+tech team
+
+00:00:57.120 --> 00:00:59.760
+for um you know their continued support
+
+00:00:59.760 --> 00:01:01.600
+and for letting us use
+
+00:01:01.600 --> 00:01:04.559
+um their big blue button instance uh for
+
+00:01:04.559 --> 00:01:05.360
+this very
+
+00:01:05.360 --> 00:01:07.840
+um presentation that you're watching um
+
+00:01:07.840 --> 00:01:09.680
+to for us to be able to deliver it using
+
+00:01:09.680 --> 00:01:10.720
+only free software
+
+00:01:10.720 --> 00:01:14.640
+um that's very generous of them
+
+00:01:14.640 --> 00:01:18.240
+thank you so much next up I want to
+
+00:01:18.240 --> 00:01:19.920
+thank all my co-organizers and
+
+00:01:19.920 --> 00:01:21.600
+volunteers um
+
+00:01:21.600 --> 00:01:24.640
+so this list is in alphabetical or order
+
+00:01:24.640 --> 00:01:26.880
+but um yeah so there's myself there's
+
+00:01:26.880 --> 00:01:28.479
+bobbin 192.
+
+00:01:28.479 --> 00:01:31.360
+there's david bremner um david o'toole
+
+00:01:31.360 --> 00:01:32.159
+um
+
+00:01:32.159 --> 00:01:35.360
+mpls corbin or corbin bruce public
+
+00:01:35.360 --> 00:01:38.560
+voigt which is carl boyd um
+
+00:01:38.560 --> 00:01:41.759
+sasha chu of course and zeph which is
+
+00:01:41.759 --> 00:01:44.799
+uh who is leo vva um thank you all so
+
+00:01:44.799 --> 00:01:45.520
+much
+
+00:01:45.520 --> 00:01:48.399
+so now I'll pass it on to sasha chua for
+
+00:01:48.399 --> 00:01:48.880
+a
+
+00:01:48.880 --> 00:01:52.000
+quick um overview of the schedule
+
+00:01:52.000 --> 00:01:54.640
+we have a lot of fun fun talks scheduled
+
+00:01:54.640 --> 00:01:56.640
+for today and tomorrow
+
+00:01:56.640 --> 00:01:59.280
+you can find it at the Emacs con
+
+00:01:59.280 --> 00:02:01.520
+schedule which I will open up in the tab
+
+00:02:01.520 --> 00:02:03.600
+and here we go so I'll give you a quick
+
+00:02:03.600 --> 00:02:04.880
+overview of the schedule
+
+00:02:04.880 --> 00:02:06.960
+you can drop in of course all the times
+
+00:02:06.960 --> 00:02:09.039
+are approximate despite the misleading
+
+00:02:09.039 --> 00:02:11.280
+these specific time stamps so please
+
+00:02:11.280 --> 00:02:13.760
+check back in on the Emacs comp channel
+
+00:02:13.760 --> 00:02:14.800
+or
+
+00:02:14.800 --> 00:02:16.160
+or keep checking the schedule throughout
+
+00:02:16.160 --> 00:02:18.400
+the day as things things get updated
+
+00:02:18.400 --> 00:02:20.400
+we'll start off with some user stories
+
+00:02:20.400 --> 00:02:22.000
+and uh and then we'll dive
+
+00:02:22.000 --> 00:02:24.400
+right into how Emacs can be used for
+
+00:02:24.400 --> 00:02:26.080
+lots of different things
+
+00:02:26.080 --> 00:02:28.000
+uh emax configuration of course is a
+
+00:02:28.000 --> 00:02:29.840
+huge part of using Emacs like a tinker
+
+00:02:29.840 --> 00:02:31.120
+with it and so we've got a couple of
+
+00:02:31.120 --> 00:02:31.760
+talks
+
+00:02:31.760 --> 00:02:35.040
+about that in the afternoon it's a lot
+
+00:02:35.040 --> 00:02:36.160
+of org talks
+
+00:02:36.160 --> 00:02:39.280
+so if if you're into org
+
+00:02:39.280 --> 00:02:40.879
+the whole afternoon you've got these
+
+00:02:40.879 --> 00:02:43.040
+things to play with next day
+
+00:02:43.040 --> 00:02:44.800
+so sunday we have a lot of development
+
+00:02:44.800 --> 00:02:46.239
+oriented talks we have
+
+00:02:46.239 --> 00:02:48.400
+a development update from john weekly
+
+00:02:48.400 --> 00:02:50.480
+and a number of talks about Emacs list
+
+00:02:50.480 --> 00:02:52.640
+or packages that that help you with
+
+00:02:52.640 --> 00:02:54.160
+working with code
+
+00:02:54.160 --> 00:02:56.239
+you also have some talks that need to be
+
+00:02:56.239 --> 00:02:57.920
+moved to the second day for
+
+00:02:57.920 --> 00:03:00.000
+uh for scheduling reasons but overall
+
+00:03:00.000 --> 00:03:01.680
+the second day is mostly about
+
+00:03:01.680 --> 00:03:03.040
+development
+
+00:03:03.040 --> 00:03:05.599
+no matter what uh what uh you're
+
+00:03:05.599 --> 00:03:06.879
+interested in I hope you'll find
+
+00:03:06.879 --> 00:03:07.360
+something
+
+00:03:07.360 --> 00:03:11.760
+in the schedule for you
+
+00:03:11.760 --> 00:03:13.760
+and then how do you actually participate
+
+00:03:13.760 --> 00:03:15.200
+how do you actually watch and
+
+00:03:15.200 --> 00:03:16.720
+ask questions and all of that let's turn
+
+00:03:16.720 --> 00:03:18.319
+it over to leo
+
+00:03:18.319 --> 00:03:19.920
+sure so hi there everyone it's a
+
+00:03:19.920 --> 00:03:21.280
+pleasure to meet you all I'm really
+
+00:03:21.280 --> 00:03:23.040
+happy to be part of the team this year
+
+00:03:23.040 --> 00:03:25.280
+so uh this year we've decided to change
+
+00:03:25.280 --> 00:03:26.159
+things a little
+
+00:03:26.159 --> 00:03:28.799
+uh compared to what we did last year so
+
+00:03:28.799 --> 00:03:29.440
+um
+
+00:03:29.440 --> 00:03:31.519
+everything is on the link that will
+
+00:03:31.519 --> 00:03:32.480
+pre-paste
+
+00:03:32.480 --> 00:03:34.400
+in the chat right now but to participate
+
+00:03:34.400 --> 00:03:36.560
+I suppose if you're hearing us right now
+
+00:03:36.560 --> 00:03:38.480
+you found the link to follow us which is
+
+00:03:38.480 --> 00:03:43.120
+very good so it's live.emacsconf.org
+
+00:03:43.120 --> 00:03:46.080
+for the questions uh we use a pad where
+
+00:03:46.080 --> 00:03:47.200
+you can both
+
+00:03:47.200 --> 00:03:48.959
+add your questions and if you feel like
+
+00:03:48.959 --> 00:03:50.480
+adding notes as well you know you are
+
+00:03:50.480 --> 00:03:51.920
+completely free to do so
+
+00:03:51.920 --> 00:03:54.480
+I believe you already have 42 people
+
+00:03:54.480 --> 00:03:56.319
+which are on there so
+
+00:03:56.319 --> 00:03:58.239
+if someone one of the other organizers
+
+00:03:58.239 --> 00:03:59.680
+could paste the link there that would be
+
+00:03:59.680 --> 00:04:00.799
+splendid
+
+00:04:00.799 --> 00:04:02.959
+uh for chatting with us or with the
+
+00:04:02.959 --> 00:04:04.640
+other people attending the conference
+
+00:04:04.640 --> 00:04:07.920
+we are using isc and there are three
+
+00:04:07.920 --> 00:04:09.599
+channels that you need to pay attention
+
+00:04:09.599 --> 00:04:10.959
+to the first one
+
+00:04:10.959 --> 00:04:13.120
+is #emacsconf where the general
+
+00:04:13.120 --> 00:04:14.239
+discussion will be
+
+00:04:14.239 --> 00:04:16.560
+happening so if you have any reactions
+
+00:04:16.560 --> 00:04:18.000
+to what you're hearing if you are
+
+00:04:18.000 --> 00:04:19.199
+excited about
+
+00:04:19.199 --> 00:04:20.400
+the new things you've discovered you
+
+00:04:20.400 --> 00:04:22.400
+know that's the channel to be using
+
+00:04:22.400 --> 00:04:25.440
+we also have #emacsconf-accessible
+
+00:04:25.440 --> 00:04:27.520
+which is community-run and it's for
+
+00:04:27.520 --> 00:04:28.960
+people who
+
+00:04:28.960 --> 00:04:30.320
+you know if you want to volunteer and
+
+00:04:30.320 --> 00:04:32.400
+describe to uh
+
+00:04:32.400 --> 00:04:33.680
+people what is going on during the
+
+00:04:33.680 --> 00:04:34.960
+conference either because they can't
+
+00:04:34.960 --> 00:04:36.479
+hear because they can't see you know
+
+00:04:36.479 --> 00:04:38.240
+feel free to do so that would be a nice
+
+00:04:38.240 --> 00:04:40.720
+help to us and for the speakers more
+
+00:04:40.720 --> 00:04:42.960
+specifically if you have
+
+00:04:42.960 --> 00:04:44.800
+any problem whatsoever or if you need to
+
+00:04:44.800 --> 00:04:46.320
+check something with us
+
+00:04:46.320 --> 00:04:49.680
+we will be in iEmacsConff.org and
+
+00:04:49.680 --> 00:04:51.759
+feel free to message us there and we'll
+
+00:04:51.759 --> 00:04:54.000
+try to take care of your problem as soon
+
+00:04:54.000 --> 00:04:55.360
+as possible
+
+00:04:55.360 --> 00:04:58.160
+we also have another thing this year so
+
+00:04:58.160 --> 00:04:59.120
+as we will be
+
+00:04:59.120 --> 00:05:02.160
+having talks one after the other if you
+
+00:05:02.160 --> 00:05:03.520
+happen to be
+
+00:05:03.520 --> 00:05:05.120
+if you want to continue the discussion
+
+00:05:05.120 --> 00:05:07.840
+basically we invite you to use
+
+00:05:07.840 --> 00:05:09.360
+jitsi to be able to continue the
+
+00:05:09.360 --> 00:05:11.280
+discussion either with the speaker if
+
+00:05:11.280 --> 00:05:12.720
+the speaker is willing to do so
+
+00:05:12.720 --> 00:05:14.400
+or just with the community of users and
+
+00:05:14.400 --> 00:05:15.759
+for that will leave you
+
+00:05:15.759 --> 00:05:18.880
+organize yourself on isc okay I believe
+
+00:05:18.880 --> 00:05:19.520
+that's me
+
+00:05:19.520 --> 00:05:23.360
+uh should I hand you back the
+
+00:05:23.360 --> 00:05:25.759
+uh speech I can't find a way to say this
+
+00:05:25.759 --> 00:05:26.960
+in english so
+
+00:05:26.960 --> 00:05:30.000
+just say yeah I mean go go take it away
+
+00:05:30.000 --> 00:05:33.120
+sure thank you okay sure
+
+00:05:33.120 --> 00:05:36.240
+thank you um so first off let me address
+
+00:05:36.240 --> 00:05:37.039
+this um
+
+00:05:37.039 --> 00:05:39.600
+the webcam placement on this laptop is
+
+00:05:39.600 --> 00:05:40.400
+very weird
+
+00:05:40.400 --> 00:05:43.039
+it's right at the bottom and if you see
+
+00:05:43.039 --> 00:05:44.800
+me looking up like this I'm actually
+
+00:05:44.800 --> 00:05:45.600
+looking at the
+
+00:05:45.600 --> 00:05:47.759
+um my second monitor which has the
+
+00:05:47.759 --> 00:05:48.720
+stream
+
+00:05:48.720 --> 00:05:52.800
+um so yeah sorry about that um
+
+00:05:52.800 --> 00:05:55.600
+but yeah so we have a mailing list um
+
+00:05:55.600 --> 00:05:56.720
+which of course
+
+00:05:56.720 --> 00:05:58.400
+isn't going to be super active at this
+
+00:05:58.400 --> 00:06:00.639
+very moment because everyone's watching
+
+00:06:00.639 --> 00:06:03.280
+but before and after the conference um
+
+00:06:03.280 --> 00:06:03.680
+you know
+
+00:06:03.680 --> 00:06:05.600
+please feel free to subscribe to uh
+
+00:06:05.600 --> 00:06:07.520
+emacsconf-discuss
+
+00:06:07.520 --> 00:06:10.240
+um for various updates and posts about
+
+00:06:10.240 --> 00:06:11.199
+the conference
+
+00:06:11.199 --> 00:06:14.240
+um follow-ups um like announcements for
+
+00:06:14.240 --> 00:06:15.280
+example when we
+
+00:06:15.280 --> 00:06:16.800
+put out the videos after the conference
+
+00:06:16.800 --> 00:06:18.160
+we will make an announcement on that
+
+00:06:18.160 --> 00:06:20.240
+list
+
+00:06:20.240 --> 00:06:24.560
+and next up we have conduct guidelines
+
+00:06:24.560 --> 00:06:28.240
+which are a series of
+
+00:06:28.240 --> 00:06:30.240
+basically guidelines that we would very
+
+00:06:30.240 --> 00:06:32.479
+much appreciate everyone
+
+00:06:32.479 --> 00:06:34.720
+participating in the conference abide by
+
+00:06:34.720 --> 00:06:36.240
+and um
+
+00:06:36.240 --> 00:06:38.240
+to to help make you know the event a
+
+00:06:38.240 --> 00:06:40.000
+great experience for everyone
+
+00:06:40.000 --> 00:06:43.120
+um yeah I think that's about it
+
+00:06:43.120 --> 00:06:48.000
+do you guys have anything else to add
+
+00:06:48.000 --> 00:06:51.440
+gonna get so good alrighty um
+
+00:06:51.440 --> 00:06:54.479
+so if you're just joining us once again
+
+00:06:54.479 --> 00:06:57.840
+hello and welcome to EmacsConf 2020.
+
+00:06:57.840 --> 00:07:00.960
+um I guess we'll go ahead and uh start
+
+00:07:00.960 --> 00:07:01.599
+with
+
+00:07:01.599 --> 00:07:05.840
+queueing up the talks
diff --git a/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.srt b/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.srt
new file mode 100644
index 00000000..9dd804ea
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.srt
@@ -0,0 +1,503 @@
+1
+0:00:00,000 --> 0:00:04,000
+I'm Sacha Chua, and welcome to EmacsConf 2020.
+
+
+2
+0:00:04,000 --> 0:00:07,000
+To kick things off, here are ten cool things
+
+
+3
+0:00:07,000 --> 0:00:08,000
+that people have been working on
+
+
+4
+0:00:08,000 --> 0:00:10,000
+since the conference last year.
+
+
+5
+0:00:10,000 --> 0:00:11,000
+If you want to follow the links
+
+
+6
+0:00:11,000 --> 0:00:14,000
+or if you'd like to add something I've missed,
+
+
+7
+0:00:14,000 --> 0:00:16,000
+add them to the collaborative pad
+
+
+8
+0:00:16,000 --> 0:00:17,000
+if you're watching this live
+
+
+9
+0:00:17,000 --> 0:00:20,000
+or check out the EmacsConf wiki page for this talk.
+
+
+10
+0:00:20,000 --> 0:00:24,000
+The big news this year was the release of Emacs 27.1,
+
+
+11
+0:00:24,000 --> 0:00:27,000
+a little over two years after Emacs 26.
+
+
+12
+0:00:27,000 --> 0:00:31,000
+Mickey Petersen's notes on the release are a great way
+
+
+13
+0:00:31,000 --> 0:00:32,000
+to find out what's new,
+
+
+14
+0:00:32,000 --> 0:00:34,000
+and John Wiegley's development update tomorrow
+
+
+15
+0:00:34,000 --> 0:00:36,000
+will probably give more details.
+
+
+16
+0:00:36,000 --> 0:00:39,000
+What's coming up for Emacs 28 and beyond?
+
+
+17
+0:00:39,000 --> 0:00:40,000
+One of the branches that people are
+
+
+18
+0:00:40,000 --> 0:00:44,000
+excited about is gccemacs, which compiles
+
+
+19
+0:00:44,000 --> 0:00:48,000
+Emacs Lisp to native code so that it runs faster.
+
+
+20
+0:00:48,000 --> 0:00:50,000
+To learn more, check out the Bringing GNU Emacs to Native Code
+
+
+21
+0:00:50,000 --> 0:00:55,000
+presentation from the European Lisp Symposium.
+
+
+22
+0:00:55,000 --> 0:00:56,000
+There was a huge conversation about
+
+
+23
+0:00:56,000 --> 0:00:59,000
+modernizing Emacs on emacs-devel and other places.
+
+
+24
+0:00:59,000 --> 0:01:02,000
+Linux Weekly News has a good summary.
+
+
+25
+0:01:02,000 --> 0:01:04,000
+One of the interesting sub-threads on emacs-devel
+
+
+26
+0:01:04,000 --> 0:01:06,000
+was about using more variable-width fonts,
+
+
+27
+0:01:06,000 --> 0:01:08,000
+which would probably go a long way to
+
+
+28
+0:01:08,000 --> 0:01:11,000
+making Emacs look pretty fancy once people
+
+
+29
+0:01:11,000 --> 0:01:13,000
+sort out the alignment issues.
+
+
+30
+0:01:13,000 --> 0:01:15,000
+It looks like core Emacs will probably
+
+
+31
+0:01:15,000 --> 0:01:18,000
+change slowly in terms of functionality and documentation,
+
+
+32
+0:01:18,000 --> 0:01:21,000
+but starter kits and configuration give people
+
+
+33
+0:01:21,000 --> 0:01:22,000
+a great way to experiment.
+
+
+34
+0:01:22,000 --> 0:01:24,000
+Speaking of starter kits,
+
+
+35
+0:01:24,000 --> 0:01:27,000
+Doom Emacs seems to be growing in popularity.
+
+
+36
+0:01:27,000 --> 0:01:28,000
+It got a big boost thanks to DoomCasts and
+
+
+37
+0:01:28,000 --> 0:01:32,000
+DistroTube videos. So if you're curious,
+
+
+38
+0:01:32,000 --> 0:01:35,000
+go ahead and check those out.
+
+
+39
+0:01:35,000 --> 0:01:37,000
+And for general Emacs topics,
+
+
+40
+0:01:37,000 --> 0:01:38,000
+there have been a ton of other great videos
+
+
+41
+0:01:38,000 --> 0:01:42,000
+from Protesilaos Stavrou, Mike Zamansky, System Crafters,
+
+
+42
+0:01:42,000 --> 0:01:45,000
+and other folks. Good stuff.
+
+
+43
+0:01:45,000 --> 0:01:46,000
+Org continues to be a big reason
+
+
+44
+0:01:46,000 --> 0:01:48,000
+for people to get into Emacs.
+
+
+45
+0:01:48,000 --> 0:01:50,000
+This year, Zettelkasten-based workflows
+
+
+46
+0:01:50,000 --> 0:01:52,000
+became popular as people played around
+
+
+47
+0:01:52,000 --> 0:01:55,000
+with organizing ideas into small chunks
+
+
+48
+0:01:55,000 --> 0:01:57,000
+that are linked to each other.
+
+
+49
+0:01:57,000 --> 0:01:59,000
+org-roam is one of the packages for doing that
+
+
+50
+0:01:59,000 --> 0:02:02,000
+and there are three presentations about it this year.
+
+
+51
+0:02:02,000 --> 0:02:04,000
+There are also non-Org ways to do it,
+
+
+52
+0:02:04,000 --> 0:02:07,000
+such as zetteldeft, neuron-mode, and more.
+
+
+53
+0:02:07,000 --> 0:02:08,000
+People have been experimenting
+
+
+54
+0:02:08,000 --> 0:02:09,000
+with Org's appearance.
+
+
+55
+0:02:09,000 --> 0:02:12,000
+Check these screenshots out for some ideas.
+
+
+56
+0:02:12,000 --> 0:02:14,000
+Coding: Faster JSON processing
+
+
+57
+0:02:14,000 --> 0:02:15,000
+is going to make working with
+
+
+58
+0:02:15,000 --> 0:02:17,000
+code analysis tools better.
+
+
+59
+0:02:17,000 --> 0:02:21,000
+LSP-mode released version 7 and gained more contributors, too,
+
+
+60
+0:02:21,000 --> 0:02:23,000
+so there are probably exciting times ahead
+
+
+61
+0:02:23,000 --> 0:02:24,000
+for making Emacs even more of an
+
+
+62
+0:02:24,000 --> 0:02:26,000
+integrated development environment.
+
+
+63
+0:02:26,000 --> 0:02:30,000
+EAF: The Emacs Application Framework
+
+
+64
+0:02:30,000 --> 0:02:32,000
+has some pretty interesting demos of
+
+
+65
+0:02:32,000 --> 0:02:34,000
+embedded Qt programs in Emacs on Linux.
+
+
+66
+0:02:34,000 --> 0:02:37,000
+Matthew Zeng will give a presentation
+
+
+67
+0:02:37,000 --> 0:02:39,000
+on its architecture and walk through some demos,
+
+
+68
+0:02:39,000 --> 0:02:41,000
+so check that one out too if you want.
+
+
+69
+0:02:41,000 --> 0:02:43,000
+The big real-world change this year
+
+
+70
+0:02:43,000 --> 0:02:47,000
+was COVID-19, of course. It sucks. A lot.
+
+
+71
+0:02:47,000 --> 0:02:49,000
+One good thing that's come out of it
+
+
+72
+0:02:49,000 --> 0:02:52,000
+is that many Emacs meetups have moved online,
+
+
+73
+0:02:52,000 --> 0:02:54,000
+so it's easier to connect with people
+
+
+74
+0:02:54,000 --> 0:02:56,000
+no matter where you are in the world.
+
+
+75
+0:02:56,000 --> 0:03:01,000
+There's one hosted by EmacsATX on December 2
+
+
+76
+0:03:01,000 --> 0:03:03,000
+and it's about re-builder, leaf, and feather.
+
+
+77
+0:03:03,000 --> 0:03:06,000
+EmacsNYC's next meetup is on December 7
+
+
+78
+0:03:06,000 --> 0:03:08,000
+and it's about literate programming with Org Mode.
+
+
+79
+0:03:08,000 --> 0:03:10,000
+The Berlin remote meetup was
+
+
+80
+0:03:10,000 --> 0:03:12,000
+just a few days ago on November 25,
+
+
+81
+0:03:12,000 --> 0:03:15,000
+and EmacsSF and Asia-Pacific
+
+
+82
+0:03:15,000 --> 0:03:17,000
+probably have some coming up, too.
+
+
+83
+0:03:17,000 --> 0:03:18,000
+People generally announce the meetups
+
+
+84
+0:03:18,000 --> 0:03:21,000
+on reddit.com/r/emacs, so you can
+
+
+85
+0:03:21,000 --> 0:03:23,000
+look there for updates.
+
+
+86
+0:03:23,000 --> 0:03:24,000
+If you organize one of these,
+
+
+87
+0:03:24,000 --> 0:03:25,000
+please let me know so that
+
+
+88
+0:03:25,000 --> 0:03:28,000
+I can include it in Emacs News.
+
+
+89
+0:03:28,000 --> 0:03:31,000
+Lastly, there's an unofficial survey of the Emacs community.
+
+
+90
+0:03:31,000 --> 0:03:33,000
+It closes on November 30,
+
+
+91
+0:03:33,000 --> 0:03:34,000
+so if you'd like to participate,
+
+
+92
+0:03:34,000 --> 0:03:37,000
+you can fill out the form at emacssurvey.org
+
+
+93
+0:03:37,000 --> 0:03:39,000
+or send it in via e-mail.
+
+
+94
+0:03:39,000 --> 0:03:42,000
+So those were 10 quick highlights from this year.
+
+
+95
+0:03:42,000 --> 0:03:46,000
+If you're curious, check out the EmacsConf 2020 wiki page
+
+
+96
+0:03:46,000 --> 0:03:47,000
+for this talk so that you can follow the links.
+
+
+97
+0:03:47,000 --> 0:03:49,000
+If you'd like to get updates every week,
+
+
+98
+0:03:49,000 --> 0:03:52,000
+you can check out the Emacs News I put together.
+
+
+99
+0:03:52,000 --> 0:03:55,000
+Feel free to send me cool stuff to include.
+
+
+100
+0:03:55,000 --> 0:03:57,000
+Now on to the rest of EmacsConf!
+
+101
+0:03:57,000 --> 0:03:58,000
+Have fun, and thanks for joining us!
+
diff --git a/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt b/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt
new file mode 100644
index 00000000..99ebf96c
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--01-emacs-news-highlights--sacha-chua.vtt
@@ -0,0 +1,304 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:04.000
+I'm Sacha Chua, and welcome to EmacsConf 2020.
+
+00:00:04.000 --> 00:00:07.000
+To kick things off, here are ten cool things
+
+00:00:07.000 --> 00:00:08.000
+that people have been working on
+
+00:00:08.000 --> 00:00:10.000
+since the conference last year.
+
+00:00:10.000 --> 00:00:11.000
+If you want to follow the links
+
+00:00:11.000 --> 00:00:14.000
+or if you'd like to add something I've missed,
+
+00:00:14.000 --> 00:00:16.000
+add them to the collaborative pad
+
+00:00:16.000 --> 00:00:17.000
+if you're watching this live
+
+00:00:17.000 --> 00:00:20.000
+or check out the EmacsConf wiki page for this talk.
+
+00:00:20.000 --> 00:00:24.000
+The big news this year was the release of Emacs 27.1,
+
+00:00:24.000 --> 00:00:27.000
+a little over two years after Emacs 26.
+
+00:00:27.000 --> 00:00:31.000
+Mickey Petersen's notes on the release are a great way
+
+00:00:31.000 --> 00:00:32.000
+to find out what's new,
+
+00:00:32.000 --> 00:00:34.000
+and John Wiegley's development update tomorrow
+
+00:00:34.000 --> 00:00:36.000
+will probably give more details.
+
+00:00:36.000 --> 00:00:39.000
+What's coming up for Emacs 28 and beyond?
+
+00:00:39.000 --> 00:00:40.000
+One of the branches that people are
+
+00:00:40.000 --> 00:00:44.000
+excited about is gccemacs, which compiles
+
+00:00:44.000 --> 00:00:48.000
+Emacs Lisp to native code so that it runs faster.
+
+00:00:48.000 --> 00:00:50.000
+To learn more, check out the Bringing GNU Emacs to Native Code
+
+00:00:50.000 --> 00:00:55.000
+presentation from the European Lisp Symposium.
+
+00:00:55.000 --> 00:00:56.000
+There was a huge conversation about
+
+00:00:56.000 --> 00:00:59.000
+modernizing Emacs on emacs-devel and other places.
+
+00:00:59.000 --> 00:01:02.000
+Linux Weekly News has a good summary.
+
+00:01:02.000 --> 00:01:04.000
+One of the interesting sub-threads on emacs-devel
+
+00:01:04.000 --> 00:01:06.000
+was about using more variable-width fonts,
+
+00:01:06.000 --> 00:01:08.000
+which would probably go a long way to
+
+00:01:08.000 --> 00:01:11.000
+making Emacs look pretty fancy once people
+
+00:01:11.000 --> 00:01:13.000
+sort out the alignment issues.
+
+00:01:13.000 --> 00:01:15.000
+It looks like core Emacs will probably
+
+00:01:15.000 --> 00:01:18.000
+change slowly in terms of functionality and documentation,
+
+00:01:18.000 --> 00:01:21.000
+but starter kits and configuration give people
+
+00:01:21.000 --> 00:01:22.000
+a great way to experiment.
+
+00:01:22.000 --> 00:01:24.000
+Speaking of starter kits,
+
+00:01:24.000 --> 00:01:27.000
+Doom Emacs seems to be growing in popularity.
+
+00:01:27.000 --> 00:01:28.000
+It got a big boost thanks to DoomCasts and
+
+00:01:28.000 --> 00:01:32.000
+DistroTube videos. So if you're curious,
+
+00:01:32.000 --> 00:01:35.000
+go ahead and check those out.
+
+00:01:35.000 --> 00:01:37.000
+And for general Emacs topics,
+
+00:01:37.000 --> 00:01:38.000
+there have been a ton of other great videos
+
+00:01:38.000 --> 00:01:42.000
+from Protesilaos Stavrou, Mike Zamansky, System Crafters,
+
+00:01:42.000 --> 00:01:45.000
+and other folks. Good stuff.
+
+00:01:45.000 --> 00:01:46.000
+Org continues to be a big reason
+
+00:01:46.000 --> 00:01:48.000
+for people to get into Emacs.
+
+00:01:48.000 --> 00:01:50.000
+This year, Zettelkasten-based workflows
+
+00:01:50.000 --> 00:01:52.000
+became popular as people played around
+
+00:01:52.000 --> 00:01:55.000
+with organizing ideas into small chunks
+
+00:01:55.000 --> 00:01:57.000
+that are linked to each other.
+
+00:01:57.000 --> 00:01:59.000
+org-roam is one of the packages for doing that
+
+00:01:59.000 --> 00:02:02.000
+and there are three presentations about it this year.
+
+00:02:02.000 --> 00:02:04.000
+There are also non-Org ways to do it,
+
+00:02:04.000 --> 00:02:07.000
+such as zetteldeft, neuron-mode, and more.
+
+00:02:07.000 --> 00:02:08.000
+People have been experimenting
+
+00:02:08.000 --> 00:02:09.000
+with Org's appearance.
+
+00:02:09.000 --> 00:02:12.000
+Check these screenshots out for some ideas.
+
+00:02:12.000 --> 00:02:14.000
+Coding: Faster JSON processing
+
+00:02:14.000 --> 00:02:15.000
+is going to make working with
+
+00:02:15.000 --> 00:02:17.000
+code analysis tools better.
+
+00:02:17.000 --> 00:02:21.000
+LSP-mode released version 7 and gained more contributors, too,
+
+00:02:21.000 --> 00:02:23.000
+so there are probably exciting times ahead
+
+00:02:23.000 --> 00:02:24.000
+for making Emacs even more of an
+
+00:02:24.000 --> 00:02:26.000
+integrated development environment.
+
+00:02:26.000 --> 00:02:30.000
+EAF: The Emacs Application Framework
+
+00:02:30.000 --> 00:02:32.000
+has some pretty interesting demos of
+
+00:02:32.000 --> 00:02:34.000
+embedded Qt programs in Emacs on Linux.
+
+00:02:34.000 --> 00:02:37.000
+Matthew Zeng will give a presentation
+
+00:02:37.000 --> 00:02:39.000
+on its architecture and walk through some demos,
+
+00:02:39.000 --> 00:02:41.000
+so check that one out too if you want.
+
+00:02:41.000 --> 00:02:43.000
+The big real-world change this year
+
+00:02:43.000 --> 00:02:47.000
+was COVID-19, of course. It sucks. A lot.
+
+00:02:47.000 --> 00:02:49.000
+One good thing that's come out of it
+
+00:02:49.000 --> 00:02:52.000
+is that many Emacs meetups have moved online,
+
+00:02:52.000 --> 00:02:54.000
+so it's easier to connect with people
+
+00:02:54.000 --> 00:02:56.000
+no matter where you are in the world.
+
+00:02:56.000 --> 00:03:01.000
+There's one hosted by EmacsATX on December 2
+
+00:03:01.000 --> 00:03:03.000
+and it's about re-builder, leaf, and feather.
+
+00:03:03.000 --> 00:03:06.000
+EmacsNYC's next meetup is on December 7
+
+00:03:06.000 --> 00:03:08.000
+and it's about literate programming with Org Mode.
+
+00:03:08.000 --> 00:03:10.000
+The Berlin remote meetup was
+
+00:03:10.000 --> 00:03:12.000
+just a few days ago on November 25,
+
+00:03:12.000 --> 00:03:15.000
+and EmacsSF and Asia-Pacific
+
+00:03:15.000 --> 00:03:17.000
+probably have some coming up, too.
+
+00:03:17.000 --> 00:03:18.000
+People generally announce the meetups
+
+00:03:18.000 --> 00:03:21.000
+on reddit.com/r/emacs, so you can
+
+00:03:21.000 --> 00:03:23.000
+look there for updates.
+
+00:03:23.000 --> 00:03:24.000
+If you organize one of these,
+
+00:03:24.000 --> 00:03:25.000
+please let me know so that
+
+00:03:25.000 --> 00:03:28.000
+I can include it in Emacs News.
+
+00:03:28.000 --> 00:03:31.000
+Lastly, there's an unofficial survey of the Emacs community.
+
+00:03:31.000 --> 00:03:33.000
+It closes on November 30,
+
+00:03:33.000 --> 00:03:34.000
+so if you'd like to participate,
+
+00:03:34.000 --> 00:03:37.000
+you can fill out the form at emacssurvey.org
+
+00:03:37.000 --> 00:03:39.000
+or send it in via e-mail.
+
+00:03:39.000 --> 00:03:42.000
+So those were 10 quick highlights from this year.
+
+00:03:42.000 --> 00:03:46.000
+If you're curious, check out the EmacsConf 2020 wiki page
+
+00:03:46.000 --> 00:03:47.000
+for this talk so that you can follow the links.
+
+00:03:47.000 --> 00:03:49.000
+If you'd like to get updates every week,
+
+00:03:49.000 --> 00:03:52.000
+you can check out the Emacs News I put together.
+
+00:03:52.000 --> 00:03:55.000
+Feel free to send me cool stuff to include.
+
+00:03:55.000 --> 00:03:57.000
+Now on to the rest of EmacsConf!
+
+00:03:57.000 --> 00:03:58.000
+Have fun, and thanks for joining us!
diff --git a/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt b/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt
new file mode 100644
index 00000000..37114bf0
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--02-an-emacs-developer-story-from-user-to-package-maintainer--leo-vivier.vtt
@@ -0,0 +1,1758 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.760
+(Amin: Alrighty, Leo Vivier, take it away.)
+
+00:00:03.760 --> 00:00:05.319
+Okay, well, thank you. I'm in.
+
+00:00:05.319 --> 00:00:08.393
+So you've just had a little roundup of
+the news,
+
+00:00:08.393 --> 00:00:11.120
+and we're going to get started now with
+some presentations.
+
+00:00:11.120 --> 00:00:15.920
+We're starting with user
+developer stories.
+
+00:00:15.920 --> 00:00:18.568
+I was extremely interested in
+this section
+
+00:00:18.568 --> 00:00:21.133
+because I wanted to get
+a chance, basically,
+
+00:00:21.133 --> 00:00:24.160
+to tell you a little more about
+who I am and
+
+00:00:24.160 --> 00:00:28.160
+how I got from basically being
+a user of Emacs
+
+00:00:28.160 --> 00:00:31.279
+to being nowadays a package maintainer,
+
+00:00:31.279 --> 00:00:34.156
+and maybe more in the future. I don't
+know.
+
+00:00:34.156 --> 00:00:36.954
+So, just for the organizers, I'm
+planning to speak for 15 minutes,
+
+00:00:36.954 --> 00:00:39.680
+and I'll have five more minutes of
+questions at the end.
+
+00:00:39.680 --> 00:00:41.880
+As I told you before, if you want to have
+questions,
+
+00:00:41.880 --> 00:00:43.440
+you know you can use the pad,
+
+00:00:43.440 --> 00:00:45.871
+and I'll be reading the questions from
+there.
+
+00:00:45.871 --> 00:00:49.600
+Okay. So hi there, as Amin introduced me
+before,
+
+00:00:49.600 --> 00:00:51.280
+my name is Leo Vivier.
+
+00:00:51.280 --> 00:00:55.662
+I'm a freelance software engineer
+in France,
+
+00:00:55.662 --> 00:00:59.359
+and I have been using Emacs now for
+
+00:00:59.359 --> 00:01:00.885
+I believe close to eight years.
+
+00:01:00.885 --> 00:01:03.039
+I can't believe it's been so long.
+
+00:01:03.039 --> 00:01:09.967
+But yes, it's been a journey because,
+in a way,
+
+00:01:09.967 --> 00:01:13.255
+nothing made me go for Emacs.
+
+00:01:13.255 --> 00:01:17.011
+You know I'm an-- sorry, I was about to
+say Emacs major,
+
+00:01:17.011 --> 00:01:18.638
+but no, I'm an English major.
+
+00:01:18.638 --> 00:01:23.990
+I went to university to study English
+literature and linguistics,
+
+00:01:23.990 --> 00:01:26.159
+and I just got started in Emacs
+
+00:01:26.159 --> 00:01:28.240
+because I was looking for ways to take
+
+00:01:28.240 --> 00:01:31.340
+better notes. I was looking for ways to
+
+00:01:32.640 --> 00:01:34.640
+structure the way I was learning,
+
+00:01:34.640 --> 00:01:38.084
+structure the way I was taking notes.
+
+00:01:38.084 --> 00:01:40.079
+I stumbled one day
+
+00:01:40.079 --> 00:01:42.032
+upon this weird piece of software
+
+00:01:42.032 --> 00:01:43.759
+which was called Emacs,
+
+00:01:43.759 --> 00:01:46.479
+and I've been trapped forever since,
+
+00:01:46.479 --> 00:01:48.328
+basically, because eight years ago,
+
+00:01:48.328 --> 00:01:49.515
+when I discovered Emacs,
+
+00:01:49.515 --> 00:01:50.632
+I just couldn't let go.
+
+00:01:50.632 --> 00:01:52.720
+There was just something very
+
+00:01:52.720 --> 00:01:54.487
+interesting about the way
+
+00:01:54.487 --> 00:01:56.320
+you configured your setup,
+
+00:01:56.320 --> 00:01:59.759
+and I just wanted to
+dive deeper and deeper.
+
+00:01:59.759 --> 00:02:04.320
+So the title is of this talk exactly is
+
+00:02:04.320 --> 00:02:07.637
+how I went from user to package
+maintainer,
+
+00:02:07.637 --> 00:02:09.686
+and the package now that I'm maintaining
+
+00:02:09.686 --> 00:02:12.080
+is called org-roam. I'm not the only one
+doing this.
+
+00:02:12.080 --> 00:02:18.720
+I'm helped with many lovely people
+working on org-roam.
+
+00:02:18.720 --> 00:02:22.149
+I got started as a maintainer
+only this year,
+
+00:02:22.149 --> 00:02:23.360
+so that means that for
+
+00:02:23.360 --> 00:02:24.720
+the eight years I've been
+
+00:02:24.720 --> 00:02:27.360
+an Emacs user, seven of those years were
+
+00:02:27.360 --> 00:02:29.200
+spent merely being a user
+
+00:02:29.200 --> 00:02:31.040
+trying to be a sponge for knowledge,
+
+00:02:31.040 --> 00:02:33.920
+trying to learn as much as I could.
+
+00:02:33.920 --> 00:02:36.800
+I believe it would be
+
+00:02:36.800 --> 00:02:39.040
+interesting for me to share my story
+
+00:02:39.040 --> 00:02:40.959
+because I believe that I'm far from
+
+00:02:40.959 --> 00:02:42.160
+being the only user
+
+00:02:42.160 --> 00:02:44.327
+who can make the jump to being a
+maintainer.
+
+00:02:44.327 --> 00:02:47.572
+A lot of you have a lot of knowledge
+when it comes to Emacs.
+
+00:02:47.572 --> 00:02:51.040
+Some of you are at different steps in
+your journey.
+
+00:02:51.040 --> 00:02:52.720
+Some of you, for instance, are just
+
+00:02:52.720 --> 00:02:55.680
+starting to copy stuff out of
+
+00:02:55.680 --> 00:02:59.058
+StackExchange into your Emacs
+configuration.
+
+00:02:59.058 --> 00:03:01.599
+Let's say you want to do something very
+particular
+
+00:03:01.599 --> 00:03:04.480
+and you haven't found a way to do so.
+
+00:03:04.480 --> 00:03:05.527
+You go on StackExchange.
+
+00:03:05.527 --> 00:03:07.930
+You find something that's interesting.
+
+00:03:07.930 --> 00:03:10.077
+You add it to your Emacs configuration.
+
+00:03:10.077 --> 00:03:11.680
+You barely understand anything that's
+going on.
+
+00:03:11.680 --> 00:03:14.800
+You know that it's supposed to be Emacs
+Lisp.
+
+00:03:14.800 --> 00:03:17.200
+"I hardly know Emacs and
+
+00:03:17.200 --> 00:03:19.440
+I know even less what is Lisp supposed
+to be."
+
+00:03:19.440 --> 00:03:22.172
+But you paste it in, and it does what
+you want it to do,
+
+00:03:22.172 --> 00:03:26.682
+and you say "Great, I'll move on to my
+work now."
+
+00:03:26.682 --> 00:03:28.821
+So that's how I got started.
+
+00:03:28.821 --> 00:03:33.888
+I had a very spartan setup for Emacs,
+which a lot of you must know...
+
+00:03:33.888 --> 00:03:36.000
+The first time you launch Emacs,
+
+00:03:36.000 --> 00:03:36.920
+you have this feeling
+
+00:03:36.920 --> 00:03:38.852
+that you're jumping 20 years
+back in time,
+
+00:03:38.852 --> 00:03:43.260
+as far as the user interface is
+concerned.
+
+00:03:43.260 --> 00:03:46.959
+But as you get to spend more time with
+Emacs...
+
+00:03:46.959 --> 00:03:49.120
+Some would call it Stockholm syndrome
+
+00:03:49.120 --> 00:03:50.959
+insofar as you can't see
+
+00:03:50.959 --> 00:03:52.929
+how spartan the entire thing is,
+
+00:03:52.929 --> 00:03:58.400
+but it actually is a lovely prison,
+so to speak.
+
+00:03:58.400 --> 00:04:00.400
+That's how I got started eight years ago.
+
+00:04:00.400 --> 00:04:04.319
+I just wanted to find a way to do my
+research properly.
+
+00:04:04.319 --> 00:04:05.699
+I wanted to have a tool
+
+00:04:05.699 --> 00:04:07.280
+that I could use to write my notes
+
+00:04:07.280 --> 00:04:08.959
+in plain text, because I was already
+
+00:04:08.959 --> 00:04:16.320
+fairly averse to Microsoft solutions
+when it came to taking notes.
+
+00:04:16.320 --> 00:04:19.180
+So yeah, I got started in Emacs.
+
+00:04:19.180 --> 00:04:21.651
+I read a little bit about what plain
+text was about.
+
+00:04:21.651 --> 00:04:24.364
+Just to be clear, at the time, yes,
+
+00:04:24.364 --> 00:04:27.120
+I was very good with computers,
+
+00:04:27.120 --> 00:04:30.160
+but I was not a computer science student.
+
+00:04:30.160 --> 00:04:34.302
+I had barely any experience with
+programming and coding,
+
+00:04:34.302 --> 00:04:39.919
+and I was even less of a hacker
+back then.
+
+00:04:39.919 --> 00:04:43.052
+It just goes to show you that
+at the beginning,
+
+00:04:43.052 --> 00:04:44.479
+I had close to no knowledge,
+
+00:04:44.479 --> 00:04:45.840
+whether it be about
+
+00:04:45.840 --> 00:04:47.457
+the free software world,
+
+00:04:47.457 --> 00:04:48.880
+whether it be about...
+
+00:04:48.880 --> 00:04:50.290
+Sacha, do you want to say something?
+
+00:04:50.290 --> 00:04:52.479
+(Sacha: just confirming, you're not
+sharing anything
+
+00:04:52.479 --> 00:04:54.080
+on the screen at the moment, right?)
+
+00:04:54.080 --> 00:04:55.204
+No, I'm not sharing anything,
+
+00:04:55.204 --> 00:04:59.040
+I'm just presenting.
+
+00:04:59.040 --> 00:05:01.173
+So when I started,
+
+00:05:01.173 --> 00:05:03.680
+I had no experience whatsoever.
+
+00:05:03.680 --> 00:05:07.199
+I was just a literature major
+
+00:05:07.199 --> 00:05:11.039
+trying to get better at taking notes.
+
+00:05:11.039 --> 00:05:12.466
+I stumbled upon LaTeX.
+
+00:05:12.466 --> 00:05:15.280
+As many people who stumble upon
+LaTeX know,
+
+00:05:15.280 --> 00:05:17.519
+you don't just stumble upon LaTeX,
+
+00:05:17.519 --> 00:05:21.950
+you embroil yourself in the turmoil of
+suffering,
+
+00:05:21.950 --> 00:05:24.560
+of late nights tweaking,
+
+00:05:24.560 --> 00:05:26.923
+so that your document is exactly
+
+00:05:26.923 --> 00:05:33.440
+in the perfect shape you want it to be.
+
+00:05:33.440 --> 00:05:36.639
+Soon after, when I got started with
+Emacs and LaTeX,
+
+00:05:36.639 --> 00:05:39.334
+I discovered something that truly
+changed my life,
+
+00:05:39.334 --> 00:05:40.560
+and it was Org Mode.
+
+00:05:40.560 --> 00:05:44.479
+As you'll get a lot of presentations
+
+00:05:44.479 --> 00:05:46.960
+this afternoon about Org Mode,
+
+00:05:46.960 --> 00:05:49.360
+I won't be spending too much time on it.
+
+00:05:49.360 --> 00:05:53.680
+But Org Mode, for me, was a
+revelation. It's...
+
+00:05:53.680 --> 00:05:55.869
+There was something that,
+
+00:05:55.869 --> 00:05:59.039
+upon reading articles on
+how to use Org Mode,
+
+00:05:59.039 --> 00:06:02.453
+especially one of the key
+articles
+
+00:06:02.453 --> 00:06:04.160
+that I'd read which really made
+
+00:06:04.160 --> 00:06:06.000
+a huge impact on me
+
+00:06:06.000 --> 00:06:09.199
+was the "Organize Your Life in Plain
+Text" one,
+
+00:06:09.199 --> 00:06:12.240
+which I'm sure many of you must have
+stumbled upon
+
+00:06:12.240 --> 00:06:15.919
+in your Emacs journey...
+
+00:06:15.919 --> 00:06:20.307
+For me, when I stumbled upon this
+document,
+
+00:06:20.307 --> 00:06:22.488
+I was starting to get interested
+
+00:06:22.488 --> 00:06:24.240
+in Getting Things Done and
+
+00:06:24.240 --> 00:06:26.560
+all the nitty-gritty stuff about
+
+00:06:26.560 --> 00:06:29.199
+organization and self-organization.
+
+00:06:29.199 --> 00:06:32.960
+It just felt like everything was under
+my fingertips
+
+00:06:32.960 --> 00:06:36.960
+to make the perfect workflow.
+
+00:06:36.960 --> 00:06:44.080
+There was something incredibly
+satisfying about
+
+00:06:44.080 --> 00:06:45.834
+having a system that gave you
+
+00:06:45.834 --> 00:06:48.319
+so many options to configure your
+experience
+
+00:06:48.319 --> 00:06:50.160
+exactly how you wanted.
+
+00:06:50.160 --> 00:06:54.479
+You had this feeling that
+
+00:06:54.479 --> 00:06:57.599
+the people behind Org Mode had thought
+of everything,
+
+00:06:57.599 --> 00:07:00.479
+whichever small adjustment
+
+00:07:00.479 --> 00:07:02.000
+that you needed in workflow
+
+00:07:02.000 --> 00:07:05.440
+whether it be more states for your
+TODOs,
+
+00:07:05.440 --> 00:07:07.520
+whether it be, oh, I want my weeks to
+
+00:07:07.520 --> 00:07:09.360
+start on Monday and not on Saturday,
+
+00:07:09.360 --> 00:07:13.520
+oh, it's half past one and I need to...
+
+00:07:13.520 --> 00:07:15.280
+in the morning, I mean, and I need to make
+
+00:07:15.280 --> 00:07:17.680
+sure that the item that I'm marking as done
+
+00:07:17.680 --> 00:07:18.759
+is done for the day before
+
+00:07:18.759 --> 00:07:20.233
+and not for the current day.
+
+00:07:20.233 --> 00:07:21.919
+You see what I'm talking about.
+
+00:07:21.919 --> 00:07:25.280
+So many details that were already
+
+00:07:25.280 --> 00:07:27.235
+present in Org Mode.
+
+00:07:27.235 --> 00:07:31.335
+At first you're really impressed,
+because you think, wow,
+
+00:07:31.335 --> 00:07:33.470
+they thought of everything,
+
+00:07:33.470 --> 00:07:36.378
+but then you realize that it's just a
+matter of experience,
+
+00:07:36.378 --> 00:07:39.712
+just a matter of people
+contributing code,
+
+00:07:39.712 --> 00:07:42.171
+because the development of Org Mode,
+Emacs,
+
+00:07:42.171 --> 00:07:44.455
+and everything is just
+open to the public.
+
+00:07:44.455 --> 00:07:45.440
+You know, it's like
+
+00:07:45.440 --> 00:07:47.685
+everything is being done
+with the garage door opened.
+
+00:07:47.685 --> 00:07:50.402
+You can just go on Org Mode on Savannah
+
+00:07:50.402 --> 00:07:54.800
+and see everything that is being
+developed.
+
+00:07:54.800 --> 00:08:01.586
+For me, the shift that occurred in my
+mind was
+
+00:08:01.586 --> 00:08:04.139
+when I was reading all the options,
+
+00:08:04.139 --> 00:08:05.881
+I was looking at all the variables
+
+00:08:05.881 --> 00:08:08.160
+that I could modify for Org Mode,
+
+00:08:08.160 --> 00:08:12.560
+and there came a time, maybe two to
+three years ago,
+
+00:08:12.560 --> 00:08:15.599
+where I thought, oh wow,
+
+00:08:15.599 --> 00:08:17.759
+maybe for the first time in a while,
+
+00:08:17.759 --> 00:08:19.260
+there is no option for me to do
+
+00:08:19.260 --> 00:08:21.440
+what I want to be doing with Org Mode.
+
+00:08:21.440 --> 00:08:23.668
+I believe at the time,
+
+00:08:23.668 --> 00:08:29.199
+the key issue that triggered
+this reflex for me was
+
+00:08:29.199 --> 00:08:31.039
+I wanted to do something with the agenda.
+
+00:08:31.039 --> 00:08:34.159
+I wanted to have a super category so,
+you know, in the...
+
+00:08:34.159 --> 00:08:36.606
+for those of you who know,
+in your agenda,
+
+00:08:36.606 --> 00:08:38.376
+you have the ability to
+have many files,
+
+00:08:38.376 --> 00:08:41.200
+and you have the ability to have
+categories.
+
+00:08:41.200 --> 00:08:47.920
+I wanted somehow to group my
+
+00:08:47.920 --> 00:08:51.680
+TODOs in smaller groups, or bigger
+
+00:08:51.680 --> 00:08:52.560
+groups, I should say,
+
+00:08:52.560 --> 00:08:53.780
+so that, for instance, I could have
+
+00:08:53.780 --> 00:08:55.131
+one group for my professional life,
+
+00:08:55.131 --> 00:08:57.462
+I could have a group for one work,
+
+00:08:57.462 --> 00:08:59.600
+the second work...
+
+00:08:59.600 --> 00:09:02.800
+I could have something for university
+and all this.
+
+00:09:02.800 --> 00:09:09.600
+I thought, yeah, I think I'd like this.
+
+00:09:09.600 --> 00:09:12.959
+After having spent so long working
+
+00:09:12.959 --> 00:09:15.519
+with Emacs and working with Org Mode,
+
+00:09:15.519 --> 00:09:16.766
+I had some ideas about
+
+00:09:16.766 --> 00:09:19.292
+what was within the realm of possibility
+and what wasn't.
+
+00:09:19.292 --> 00:09:21.120
+Here I thought to myself,
+
+00:09:21.120 --> 00:09:24.320
+this is definitely something that I can do.
+
+00:09:24.320 --> 00:09:27.839
+And so thus started my journey
+
+00:09:27.839 --> 00:09:31.360
+into the Org Mode libraries.
+
+00:09:31.360 --> 00:09:33.222
+I won't go too much into details
+right now,
+
+00:09:33.222 --> 00:09:34.959
+because right now, the main objective
+
+00:09:34.959 --> 00:09:37.040
+that I have is just to show you
+
+00:09:37.040 --> 00:09:40.240
+how simple it is to become a maintainer,
+
+00:09:40.240 --> 00:09:42.800
+how to become more involved with the
+development.
+
+00:09:42.800 --> 00:09:46.320
+The libraries in Org Mode,
+
+00:09:46.320 --> 00:09:50.320
+they're written in Elisp, which is a very...
+
+00:09:50.320 --> 00:09:52.080
+It might seem like an obscure language,
+
+00:09:52.080 --> 00:09:54.080
+and it certainly is,
+
+00:09:54.080 --> 00:09:57.279
+but as soon as you get the logic of the
+language--and
+
+00:09:57.279 --> 00:10:00.136
+what I'm telling you is coming from
+someone
+
+00:10:00.136 --> 00:10:01.760
+who's never studied programming--
+
+00:10:01.760 --> 00:10:04.399
+it made sense.
+
+00:10:04.399 --> 00:10:05.534
+Everything is so verbose
+
+00:10:05.534 --> 00:10:07.279
+when you get into the code.
+
+00:10:07.279 --> 00:10:11.065
+When you learn the rudiments
+of Elisp,
+
+00:10:11.065 --> 00:10:13.360
+you start getting to the code,
+
+00:10:13.360 --> 00:10:15.229
+and you start thinking, wow,
+
+00:10:15.229 --> 00:10:17.120
+okay that makes sense,
+
+00:10:17.120 --> 00:10:21.360
+and you start developing a logic
+for all this.
+
+00:10:21.360 --> 00:10:24.720
+So, equipped as I was with this
+
+00:10:24.720 --> 00:10:27.760
+new knowledge, I went on my project,
+
+00:10:27.760 --> 00:10:30.000
+I went into the Org agenda code,
+
+00:10:30.000 --> 00:10:30.880
+and I thought, okay,
+
+00:10:30.880 --> 00:10:34.640
+is there anything that I can use to do
+my bidding?
+
+00:10:34.640 --> 00:10:39.733
+Fast forward maybe two to three weeks of
+intense turmoil
+
+00:10:39.733 --> 00:10:46.079
+and many nights which were spent
+single-mindedly working on this project,
+
+00:10:46.079 --> 00:10:48.781
+two weeks after, I had something
+that was working,
+
+00:10:48.781 --> 00:10:51.680
+and I was pretty happy about it.
+
+00:10:51.680 --> 00:10:54.849
+That was a key landmark for me,
+
+00:10:54.849 --> 00:10:56.800
+because when that happened,
+
+00:10:56.800 --> 00:10:58.860
+it just felt like, okay,
+
+00:10:58.860 --> 00:11:01.335
+I can contribute something to Org Mode,
+
+00:11:01.335 --> 00:11:07.600
+and I can do something that would
+benefit as many people as possible.
+
+00:11:07.600 --> 00:11:08.970
+And to me, that was the click.
+
+00:11:08.970 --> 00:11:10.530
+That's when it occurred.
+
+00:11:10.530 --> 00:11:14.640
+That's when I went on my first project
+and I did something
+
+00:11:14.640 --> 00:11:18.079
+that felt useful to the community.
+
+00:11:18.079 --> 00:11:19.945
+And nowadays, as I told you,
+
+00:11:19.945 --> 00:11:22.640
+I maintain packages, but really, nothing
+has changed.
+
+00:11:22.640 --> 00:11:24.399
+The only thing, maybe, that has changed
+
+00:11:24.399 --> 00:11:28.320
+is that I've turned my mind onto other
+problems.
+
+00:11:28.320 --> 00:11:32.000
+Maybe I've got three more minutes,
+
+00:11:32.000 --> 00:11:35.279
+and I'd like to finish by
+
+00:11:35.279 --> 00:11:38.399
+maybe something a little different.
+
+00:11:38.399 --> 00:11:39.449
+I've told you my Emacs story
+
+00:11:39.449 --> 00:11:42.924
+and I hope I've stressed how little
+effort it took me
+
+00:11:42.924 --> 00:11:46.560
+to move from steps to steps on the
+ladder.
+
+00:11:46.560 --> 00:11:48.959
+The ladder implies a sense of hierarchy,
+but it really isn't.
+
+00:11:48.959 --> 00:11:53.920
+Whatever your step on the journey of
+Emacs is...
+
+00:11:53.920 --> 00:11:55.830
+Some of you might be at the step
+
+00:11:55.830 --> 00:11:57.440
+where you're really worried
+
+00:11:57.440 --> 00:11:59.360
+about learning Elisp because it feels
+
+00:11:59.360 --> 00:12:02.399
+like such a monumental task to be
+undertaking
+
+00:12:02.399 --> 00:12:04.720
+and you have no experience whatsoever,
+
+00:12:04.720 --> 00:12:06.079
+but the thing is,
+
+00:12:06.079 --> 00:12:07.839
+maybe you could try climbing this first
+
+00:12:07.839 --> 00:12:09.600
+step on the ladder. Maybe you could try,
+
+00:12:09.600 --> 00:12:11.200
+if you have any project,
+
+00:12:11.200 --> 00:12:13.120
+if you've been using Org Mode,
+
+00:12:13.120 --> 00:12:15.600
+maybe one day you thought, "oh, yes,
+
+00:12:15.600 --> 00:12:18.160
+I wish I could do this but I can't,"
+
+00:12:18.160 --> 00:12:19.920
+or maybe do try to do this,
+
+00:12:19.920 --> 00:12:21.442
+maybe do try to change something
+
+00:12:21.442 --> 00:12:23.279
+in a major mode that you're using
+
+00:12:23.279 --> 00:12:26.560
+and which you feel might be better.
+
+00:12:26.560 --> 00:12:28.722
+I think Emacs, Org Mode,
+
+00:12:28.722 --> 00:12:31.040
+and all free software in general
+
+00:12:31.040 --> 00:12:34.720
+has this tendency to give you this idea
+
+00:12:34.720 --> 00:12:38.720
+that I can be a hacker
+
+00:12:38.720 --> 00:12:41.360
+in the sense of the term
+
+00:12:41.360 --> 00:12:43.200
+that you're modifying things
+
+00:12:43.200 --> 00:12:46.320
+to do your bidding.
+
+00:12:46.320 --> 00:12:48.042
+For me, I believe this to be
+
+00:12:48.042 --> 00:12:50.320
+a very healthy attitude towards
+software.
+
+00:12:50.320 --> 00:12:54.079
+As Amin said in the very beginning,
+
+00:12:54.079 --> 00:12:57.279
+we are doing this entire presentation--
+
+00:12:57.279 --> 00:13:00.800
+sorry, this entire conference with
+free software.
+
+00:13:00.800 --> 00:13:01.686
+Just see all the things
+
+00:13:01.686 --> 00:13:03.920
+we've been able to do in free software.
+
+00:13:03.920 --> 00:13:10.399
+For me, Emacs was my gateway,
+so to speak,
+
+00:13:10.399 --> 00:13:14.399
+into how to contribute to free software,
+
+00:13:14.399 --> 00:13:18.639
+about the philosophy that surrounds it.
+
+00:13:18.639 --> 00:13:20.003
+What I would like to do...
+
+00:13:20.003 --> 00:13:21.375
+I'll finish on this note and then
+
+00:13:21.375 --> 00:13:23.360
+I'll be taking your questions.
+
+00:13:23.360 --> 00:13:26.480
+Just try.
+
+00:13:26.480 --> 00:13:28.592
+You've read on Reddit
+
+00:13:28.592 --> 00:13:31.807
+that you need to go through the Elisp
+manual in Emacs.
+
+00:13:31.807 --> 00:13:35.920
+You might be scared, but just do it.
+Just give it a shot.
+
+00:13:35.920 --> 00:13:38.560
+Just give it maybe one afternoon.
+
+00:13:38.560 --> 00:13:39.199
+Try to read it.
+
+00:13:39.199 --> 00:13:43.120
+Try to see if this appeals to your mind.
+
+00:13:43.120 --> 00:13:44.230
+If you've been interested enough
+
+00:13:44.230 --> 00:13:45.241
+in my presentation right now,
+
+00:13:45.241 --> 00:13:47.199
+and if you're interested enough in any
+of the talks
+
+00:13:47.199 --> 00:13:49.519
+you're going to have during the entire
+conference,
+
+00:13:49.519 --> 00:13:50.747
+do give it a shot.
+
+00:13:50.747 --> 00:13:52.959
+I'm pretty sure you will like
+the journey
+
+00:13:52.959 --> 00:13:55.418
+on which you will be embarking upon.
+
+00:13:55.418 --> 00:13:57.120
+So I believe I'm finishing
+one minute early,
+
+00:13:57.120 --> 00:14:01.040
+but I see quite a bit of questions already.
+
+00:14:01.040 --> 00:14:04.320
+I'm not sure. Sacha, should I
+
+00:14:04.320 --> 00:14:05.847
+just be reading the questions,
+
+00:14:05.847 --> 00:14:08.639
+or do you want to be feeding me the
+questions?
+
+00:14:08.639 --> 00:14:10.755
+(Amin: It's really up to you.
+
+00:14:10.755 --> 00:14:12.320
+It's completely up to you.
+
+00:14:12.320 --> 00:14:13.600
+If you've got the questions
+
+00:14:13.600 --> 00:14:15.839
+open and can take them or read them,
+
+00:14:15.839 --> 00:14:18.320
+by all means, please.)
+
+00:14:18.320 --> 00:14:19.420
+Okay, well, I'm going to read them
+
+00:14:19.420 --> 00:14:20.581
+because I've got them on the side.
+
+00:14:20.581 --> 00:14:22.800
+I'm going to start with the one at the
+bottom.
+
+00:14:22.800 --> 00:14:24.959
+"Do you feel that being a white male
+
+00:14:24.959 --> 00:14:26.959
+contributed to your experience?"
+
+00:14:26.959 --> 00:14:29.165
+Yeah. I mean, I do believe...
+
+00:14:29.165 --> 00:14:30.771
+There's an idea of privilege.
+
+00:14:30.771 --> 00:14:33.250
+I mean, I'm French. I live in...
+
+00:14:33.250 --> 00:14:36.959
+I'm lucky enough to be here at
+university, okay,
+
+00:14:36.959 --> 00:14:40.714
+and I'm fairly aware of the
+discrepancies that happen,
+
+00:14:40.714 --> 00:14:41.600
+even in France,
+
+00:14:41.600 --> 00:14:42.880
+according to this...
+
+00:14:42.880 --> 00:14:46.320
+So, yes, I believe my journey
+
+00:14:46.320 --> 00:14:51.199
+was heavily influenced by this.
+
+00:14:51.199 --> 00:14:53.547
+If you would like to specify the
+question, please do,
+
+00:14:53.547 --> 00:14:56.560
+but I don't have really all that much to
+ask on this.
+
+00:14:56.560 --> 00:14:59.839
+"What is your advice to start learning
+
+00:14:59.839 --> 00:15:01.279
+Elisp language? Any particularly good
+
+00:15:01.279 --> 00:15:03.421
+resource or any other tips?"
+
+00:15:03.421 --> 00:15:07.760
+I finished my presentation by telling
+you about
+
+00:15:07.760 --> 00:15:10.937
+the Elisp introduction which is built
+into Emacs.
+
+00:15:10.937 --> 00:15:13.936
+What I might do... I'm going to
+share my screen
+
+00:15:13.936 --> 00:15:17.819
+just to show you how this works.
+
+00:15:17.819 --> 00:15:22.880
+I will be sharing this window.
+
+00:15:22.880 --> 00:15:24.234
+I believe it's frozen on my end,
+
+00:15:24.234 --> 00:15:27.199
+so I can't see anything.
+
+00:15:27.199 --> 00:15:28.597
+I'm not sure if you can see me
+
+00:15:28.597 --> 00:15:32.560
+or if my camera is moving.
+
+00:15:32.560 --> 00:15:34.387
+Okay, so my Firefox is frozen.
+
+00:15:34.387 --> 00:15:35.361
+So I'll answer the question,
+
+00:15:35.361 --> 00:15:40.000
+but I won't be able to show you what I
+wanted to show you.
+
+00:15:40.000 --> 00:15:44.320
+There's a built-in guide inside Emacs to
+learn Elisp.
+
+00:15:44.320 --> 00:15:46.880
+Maybe the best chance that you have
+
+00:15:46.880 --> 00:15:49.040
+is just to go open these info pages.
+
+00:15:49.040 --> 00:15:50.959
+I'm sure someone will be kind enough to
+
+00:15:50.959 --> 00:15:54.880
+mention this to you in the #emacsconf
+channel on IRC
+
+00:15:54.880 --> 00:15:56.880
+but it's probably the best way
+
+00:15:56.880 --> 00:15:59.040
+to get started with Elisp.
+
+00:15:59.040 --> 00:16:00.991
+You know, we tend to get obsessed,
+
+00:16:00.991 --> 00:16:03.013
+with software and with programming,
+
+00:16:03.013 --> 00:16:04.880
+about what's the best way to get
+started.
+
+00:16:04.880 --> 00:16:08.399
+You see so many people who are heavily
+interested
+
+00:16:08.399 --> 00:16:10.409
+in getting started with programming
+
+00:16:10.409 --> 00:16:12.320
+but they never managed to get started
+
+00:16:12.320 --> 00:16:14.320
+because there's so much choice.
+
+00:16:14.320 --> 00:16:16.320
+My advice would be to just get started.
+
+00:16:16.320 --> 00:16:18.800
+Don't get so worried about the first step.
+
+00:16:18.800 --> 00:16:22.493
+Well, if I may still recommend
+the first step,
+
+00:16:22.493 --> 00:16:23.920
+even after saying this,
+
+00:16:23.920 --> 00:16:27.073
+do try to start with the built-in
+guides.
+
+00:16:27.073 --> 00:16:29.600
+I believe they're pretty, pretty good.
+
+00:16:29.600 --> 00:16:31.691
+There was another question.
+
+00:16:31.691 --> 00:16:33.055
+It's the last question that I can read
+
+00:16:33.055 --> 00:16:34.564
+and after that, you will have to
+
+00:16:34.564 --> 00:16:37.920
+read the questions for me because
+everything is frozen on my end.
+
+00:16:37.920 --> 00:16:43.935
+I hope I'm not frozen in a very bad
+position,
+
+00:16:43.935 --> 00:16:47.406
+so please excuse me if my mouth is open
+or anything.
+
+00:16:47.406 --> 00:16:51.120
+(Amin: no, we just completely lost the
+video feed, so no worries.)
+
+00:16:51.120 --> 00:16:54.800
+Oh, splendid, so I won't have to make a
+fool out of myself.
+
+00:16:54.800 --> 00:16:56.800
+So the last question I wanted to answer was
+
+00:16:56.800 --> 00:16:59.199
+"Have you read Dirk Gently's Holistic
+Detective Agency?"
+
+00:16:59.199 --> 00:17:05.741
+No, I haven't. I hope it's not a jab at
+the way I'm dressing for the conference,
+
+00:17:05.741 --> 00:17:10.559
+but yeah, I haven't read it. Was there
+any other question?
+
+00:17:10.559 --> 00:17:15.919
+(Amin: I see one other question.
+
+00:17:15.919 --> 00:17:19.679
+"Any recommendation for good packaging
+guides or places to start?
+
+00:17:19.679 --> 00:17:23.199
+I get a bit overwhelmed by some things.
+
+00:17:23.199 --> 00:17:26.799
+For example, the choice of different test
+frameworks.")
+
+00:17:26.799 --> 00:17:29.263
+Right. Okay. So that's a very good
+question.
+
+00:17:29.263 --> 00:17:33.840
+I believe alphapapa is in the chat right
+now.
+
+00:17:33.840 --> 00:17:36.314
+As myself a new Lisp developer for
+org-roam,
+
+00:17:36.314 --> 00:17:38.320
+I'd really recommend you to look into
+
+00:17:38.320 --> 00:17:40.032
+his package developers' guide,
+
+00:17:40.032 --> 00:17:42.507
+because you have a list of
+all the softwares
+
+00:17:42.507 --> 00:17:44.559
+that are extremely useful to
+be using when
+
+00:17:44.559 --> 00:17:45.760
+you're getting started.
+
+00:17:45.760 --> 00:17:48.347
+If you're looking into a first step
+
+00:17:48.347 --> 00:17:50.947
+for how to develop elisp packages,
+
+00:17:50.947 --> 00:17:52.640
+I'd really advise you to
+
+00:17:52.640 --> 00:17:53.520
+look into edebug.
+
+00:17:53.520 --> 00:17:56.559
+It's one word, edebug,
+
+00:17:56.559 --> 00:17:58.400
+and you have a section in the
+manual for this,
+
+00:17:58.400 --> 00:18:00.799
+because for me, it was the key step to
+
+00:18:00.799 --> 00:18:03.791
+getting to develop good packages.
+
+00:18:03.791 --> 00:18:06.160
+It was understanding basically
+what the code did
+
+00:18:06.160 --> 00:18:08.866
+and having us something like
+
+00:18:08.866 --> 00:18:09.919
+a REPL (read-evaluate-print-loop)
+
+00:18:09.919 --> 00:18:11.760
+that allows you to step through the code
+
+00:18:11.760 --> 00:18:13.210
+and see exactly which states
+
+00:18:13.210 --> 00:18:15.643
+the variables are at which at this point
+
+00:18:15.643 --> 00:18:20.080
+in the program. That's really my biggest
+advice to you.
+
+00:18:21.200 --> 00:18:26.160
+Any other question? Thanks. Yeah, I see
+one or two more.
+
+00:18:26.160 --> 00:18:33.120
+So there's one. They ask, "How did the
+freedom of Emacs help you on your way?"
+
+00:18:33.120 --> 00:18:35.507
+So the freedom of Emacs...
+
+00:18:35.507 --> 00:18:38.080
+I mentioned that Emacs, for me,
+was my gateway
+
+00:18:38.080 --> 00:18:39.216
+into free software
+
+00:18:39.216 --> 00:18:40.652
+and the freedom of Emacs
+
+00:18:40.652 --> 00:18:42.551
+was that you could maybe...
+
+00:18:42.551 --> 00:18:43.840
+First and foremost,
+
+00:18:43.840 --> 00:18:46.385
+compared to other software,
+
+00:18:46.385 --> 00:18:49.003
+was that you had behind Emacs, Elisp,
+
+00:18:49.003 --> 00:18:51.039
+which allows you to read the code,
+
+00:18:51.039 --> 00:18:53.039
+read whatever is going on in the
+background.
+
+00:18:53.039 --> 00:18:54.380
+Surely, if you go deep enough,
+
+00:18:54.380 --> 00:18:58.172
+you'll end up in C functions that you
+might not be able to read
+
+00:18:58.172 --> 00:18:59.679
+if you do not have the experience.
+
+00:18:59.679 --> 00:19:03.520
+But for Org Mode, which was my gateway
+into Emacs,
+
+00:19:03.520 --> 00:19:05.883
+most of it is written in Elisp,
+
+00:19:05.883 --> 00:19:08.546
+and all the commands have a
+very verbose name,
+
+00:19:08.546 --> 00:19:10.080
+like something simple as
+
+00:19:10.080 --> 00:19:13.440
+org go to next subtree or
+
+00:19:13.440 --> 00:19:16.880
+org go to a parent subtree. You know,
+things like this.
+
+00:19:16.880 --> 00:19:20.240
+It's so elegant. It's verbose.
+
+00:19:20.240 --> 00:19:22.799
+That's a sense of freedom
+
+00:19:22.799 --> 00:19:24.491
+insofar as you can go into
+the code and see,
+
+00:19:24.491 --> 00:19:26.160
+oh, okay, that's how it's implemented.
+
+00:19:26.160 --> 00:19:28.640
+I believe in a way that's the freedom
+
+00:19:28.640 --> 00:19:30.264
+and the liberty that is given to you
+
+00:19:30.264 --> 00:19:31.600
+to look into the code
+
+00:19:31.600 --> 00:19:32.670
+is something that invites you
+
+00:19:32.670 --> 00:19:34.460
+to do the same with your life.
+
+00:19:34.460 --> 00:19:36.776
+As someone who does a little bit of
+philosophy on the side,
+
+00:19:36.776 --> 00:19:38.799
+I believe it's a very healthy message
+
+00:19:38.799 --> 00:19:42.320
+to be gathering from a piece of software.
+
+00:19:42.320 --> 00:19:45.440
+(Amin: Awesome, thank you.
+
+00:19:45.440 --> 00:19:50.960
+Let's see... So we have...
+
+00:19:50.960 --> 00:19:57.200
+I think I saw another question pop up.)
+
+00:19:57.200 --> 00:19:58.559
+I'm not sure how we're doing as far
+
+00:19:58.559 --> 00:19:59.760
+as time is concerned... I believe we
+
+00:19:59.760 --> 00:20:02.080
+have like one or two minutes more.
+
+00:20:02.080 --> 00:20:04.240
+(Amin: Yeah, actually, we're quite a bit
+
+00:20:04.240 --> 00:20:05.679
+ahead of the schedule, so if we take a
+
+00:20:05.679 --> 00:20:07.840
+little bit longer, we're fine.
+
+00:20:07.840 --> 00:20:10.225
+If you do have more questions, please
+do.)
+
+00:20:10.225 --> 00:20:12.880
+I'm just sorry that my video is not
+working anymore.
+
+00:20:12.880 --> 00:20:17.120
+(Amin: No problem. Someone was actually
+saying...
+
+00:20:17.120 --> 00:20:24.159
+What's the most recent... Actually, yeah
+well before that.
+
+00:20:24.159 --> 00:20:27.440
+"Please show off your three-piece suit
+before you end your talk,
+
+00:20:27.440 --> 00:20:30.080
+which requires fixing your frozen camera.
+
+00:20:30.080 --> 00:20:31.306
+If this is not possible,
+
+00:20:31.306 --> 00:20:36.240
+please post suit selfies in an easily
+accessible location."
+
+00:20:36.240 --> 00:20:38.143
+Okay, I'll make sure to do this.
+
+00:20:38.143 --> 00:20:41.200
+But yes, I wanted to hype things up for
+the conference,
+
+00:20:41.200 --> 00:20:43.039
+so yes, I did get the three-piece suit out.
+
+00:20:43.039 --> 00:20:44.563
+I'm very glad you like it.
+
+00:20:44.563 --> 00:20:45.919
+By the way, when you get
+
+00:20:45.919 --> 00:20:47.760
+a chance to see me live again,
+
+00:20:47.760 --> 00:20:50.080
+do appreciate that my tie has both the
+
+00:20:50.080 --> 00:20:51.280
+colors of Emacs purple
+
+00:20:51.280 --> 00:20:53.679
+and also Org Mode green.
+
+00:20:53.679 --> 00:20:55.556
+It took me a while to find this one,
+
+00:20:55.556 --> 00:21:00.840
+so I hope you will appreciate this.
+
+00:21:00.840 --> 00:21:03.094
+(Amin: Awesome. Let's see.
+
+00:21:03.094 --> 00:21:06.880
+We have one other question. "What's the
+
+00:21:06.880 --> 00:21:08.960
+most recent Emacs package or tool that
+
+00:21:08.960 --> 00:21:14.480
+you've discovered that you've added to
+your repertoire?")
+
+00:21:14.480 --> 00:21:17.600
+Very interesting question.
+
+00:21:17.600 --> 00:21:22.614
+The thing is, when you've spent as long
+as I have on Emacs--
+
+00:21:22.614 --> 00:21:23.919
+and I know that I've only spent
+
+00:21:23.919 --> 00:21:25.120
+eight years and some of you
+
+00:21:25.120 --> 00:21:27.901
+might have spent maybe 10, 20,
+
+00:21:27.901 --> 00:21:30.000
+maybe even more years on Emacs--
+
+00:21:30.000 --> 00:21:34.926
+but for me, I believe the coolest neat
+trick that I found in Emacs
+
+00:21:34.926 --> 00:21:40.080
+was a mode which is called beacon-mode.
+
+00:21:40.080 --> 00:21:43.679
+It's something that allows you to show
+
+00:21:43.679 --> 00:21:45.006
+when you're jumping between buffers
+
+00:21:45.006 --> 00:21:46.960
+or when you're dropping between windows,
+
+00:21:46.960 --> 00:21:50.681
+it shows exactly where your point is in
+that buffer
+
+00:21:50.681 --> 00:21:55.440
+by making a slight ray of light which
+looks like a beacon, hence the name.
+
+00:21:55.440 --> 00:21:57.760
+It really helps you navigate buffers
+
+00:21:57.760 --> 00:21:58.986
+because it always shows
+
+00:21:58.986 --> 00:22:01.760
+in a very visual way
+where your point is.
+
+00:22:01.760 --> 00:22:04.640
+I'll get a chance to show this to you
+later today
+
+00:22:04.640 --> 00:22:10.159
+when I'll be presenting my other talks.
+
+00:22:10.159 --> 00:22:20.880
+(Amin: Awesome. We have one question
+from Jonas, the maintainer of Magit.
+
+00:22:20.880 --> 00:22:25.128
+He asks, "When you touched your webcam,
+
+00:22:25.128 --> 00:22:26.880
+that blew a fuse at my place.
+
+00:22:26.880 --> 00:22:29.760
+How did you do that?")
+
+00:22:29.760 --> 00:22:31.242
+Well, I'm very sorry, Jonas,
+
+00:22:31.242 --> 00:22:36.960
+that it happened to you, but I'll make
+sure not to touch my webcam again.
+
+00:22:36.960 --> 00:22:41.600
+(Amin: Do we have any other questions?)
+
+00:22:41.600 --> 00:22:43.919
+I have to trust you on this one.
+
+00:22:43.919 --> 00:22:46.960
+I'm really sorry. Everything is frozen
+on my end.
+
+00:22:46.960 --> 00:22:49.940
+(Amin: No problem.) Yeah I'm more
+talking to the audience, I guess.
+
+00:22:51.520 --> 00:22:56.018
+I hope my lack of slides didn't bother
+you.
+
+00:22:56.018 --> 00:23:00.481
+I really wanted to have this verbose
+time with people,
+
+00:23:00.481 --> 00:23:01.600
+to be able to...
+
+00:23:01.600 --> 00:23:04.880
+It's a message that I've been trying
+
+00:23:04.880 --> 00:23:08.640
+to share with as many people as possible.
+
+00:23:08.640 --> 00:23:11.760
+In France, we do have an Emacs workshop
+
+00:23:11.760 --> 00:23:14.159
+that we have on a monthly basis.
+
+00:23:14.159 --> 00:23:16.000
+I've been learning a lot
+
+00:23:16.000 --> 00:23:18.960
+with those people and I felt like
+
+00:23:18.960 --> 00:23:20.400
+doing the same with Emacs conference
+
+00:23:20.400 --> 00:23:22.713
+would be good. That's why I'm
+really happy,
+
+00:23:22.713 --> 00:23:24.000
+and I'm really lucky to have had
+
+00:23:24.000 --> 00:23:26.418
+the chance to do this today.
+
+00:23:26.418 --> 00:23:29.200
+I hope some of you, I've convinced you
+
+00:23:29.200 --> 00:23:31.472
+of climbing up a step on a ladder
+
+00:23:31.472 --> 00:23:34.480
+or making a step in a journey.
+
+00:23:34.480 --> 00:23:38.080
+(Amin: Absolutely. Thank you so much, Leo.
+
+00:23:38.080 --> 00:23:41.279
+I happen to completely agree
+
+00:23:41.279 --> 00:23:43.600
+with your not necessarily using a slide
+
+00:23:43.600 --> 00:23:45.600
+when it's not really needed
+
+00:23:45.600 --> 00:23:49.200
+and to help give some face-to-face time
+
+00:23:49.200 --> 00:23:50.685
+with the audience.
+
+00:23:50.685 --> 00:23:52.923
+Unfortunately, your webcam cut out,
+
+00:23:52.923 --> 00:23:55.200
+but I mean before that.)
+
+00:23:55.200 --> 00:23:57.914
+Yes, I'll make sure to fix
+the problems later on,
+
+00:23:57.914 --> 00:23:59.679
+so don't worry about it.
+
+00:23:59.679 --> 00:24:02.240
+(Amin: Awesome. Alrighty. I guess we're
+
+00:24:02.240 --> 00:24:08.000
+wrapping up for your talk and getting
+ready for the next talk.)
+
+00:24:08.000 --> 00:24:09.538
+Sure. Well, thank you so much.
+
+00:24:09.538 --> 00:24:11.760
+I'll see you all later, I suppose!
+
+00:24:11.760 --> 00:24:16.799
+(Amin: Sounds good. Thank you again, Leo. Bye-bye)
diff --git a/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt
new file mode 100644
index 00000000..d3c34a79
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--bala-ramadurai.vtt
@@ -0,0 +1,124 @@
+WEBVTT
+
+00:00:03.559 --> 00:00:09.200
+No, there is nothing wrong with your mobile 
+device or your computer. This was how my world  
+
+00:00:09.200 --> 00:00:15.040
+was when my kid was born 11 years ago.
+
+00:00:15.040 --> 00:00:29.280
+Hello, I am Bala Ramadurai, author, professor 
+and consultant. 11 years ago in Bangalore,  
+
+00:00:29.280 --> 00:00:41.120
+my son was born. My wife and I had hardly slept 
+through those days. That's when my grandma  
+
+00:00:41.120 --> 00:00:48.560
+visited us to take a look at her great grandson. 
+As joyous as that sounded, it came with a peril.  
+
+00:00:48.560 --> 00:00:55.840
+My grandma was a Scrabble addict. She hardly 
+spent any time at all with her great grandson,  
+
+00:00:55.840 --> 00:01:02.720
+but she spent most of her time playing Scrabble. 
+She insisted that my wife and I join her.  
+
+00:01:02.720 --> 00:01:07.840
+That's when an idea dawned on me to write about 
+my Scrabble obsessed grandma. What if I could  
+
+00:01:07.840 --> 00:01:13.760
+make it into a novel. Not many people have 
+Scrabble obsessed grandmothers, after all.
+
+00:01:13.760 --> 00:01:19.280
+I wanted to expand this to a novel, but did 
+not know how. I bumped into Dan Wells' video  
+
+00:01:19.280 --> 00:01:28.960
+on 7-point story structure. I was now convinced 
+that a seed idea could indeed be converted into  
+
+00:01:28.960 --> 00:01:34.480
+a novel, so I tried out many tools at the 
+time - million dollar tools like MS Word,  
+
+00:01:34.480 --> 00:01:37.991
+Excel, Scrivener and the lot. In my research of 
+tools, I found that George RR Martin famously  
+
+00:01:37.991 --> 00:01:40.320
+had used Wordstar for typing out Game of 
+Thrones. At that point, I remembered about  
+
+00:01:40.320 --> 00:01:43.840
+an old editor - Emacs. I knew about Emacs from 
+my undergrad days and my earlier software days.  
+
+00:01:43.840 --> 00:01:49.040
+Thanks to the emacs community and particularly 
+the orgmode community, I had what I wanted.
+
+00:01:49.040 --> 00:01:55.680
+Now, it was time to put the idea into action. 
+I used another method called snowflake and also  
+
+00:01:55.680 --> 00:02:05.360
+Tony Ballantyne's emacs writing template. The main 
+features from org-mode that I used - fold, unfold,  
+
+00:02:05.360 --> 00:02:17.920
+columnview, tags, distraction-free writing 
+experience, clocking, project tracking and export.
+
+00:02:17.920 --> 00:02:33.317
+Now, the demo. We start with the plotline (a one 
+line summary of the story). Then we write out the  
+
+00:02:33.317 --> 00:02:34.160
+characters, describing them in detail. Write 
+the main story arc, followed by the secondary  
+
+00:02:34.160 --> 00:02:35.920
+character story arcs. Here is where org-mode 
+really scores. Move the points in the story  
+
+00:02:35.920 --> 00:02:43.920
+structure to form a coherent story. We 
+get into location research. Write them  
+
+00:02:43.920 --> 00:02:56.800
+all out in the columns. Once you are satisfied, 
+now scene design. Each point in the story  
+
+00:02:56.800 --> 00:04:09.040
+requires at least one scene. In columnview, 
+you can see many things - Act, scene,  
+
+00:04:09.040 --> 00:05:09.680
+story point, location, POV or point of 
+view. Make sure you finish this and read  
+
+00:05:09.680 --> 00:05:10.896
+the whole story if it makes sense. Now, create 
+a project file to track your project and clock  
+
+00:05:10.896 --> 00:05:18.880
+your project to see how long it takes. I used 
+a similar structure for my non-fiction book,  
+
+00:05:18.880 --> 00:05:25.520
+which I published recently, all 
+written and edited in emacs-org-mode.
+
+00:05:25.520 --> 00:05:30.480
+Thanks to you guys at the community, I 
+am now a published author and I plan to  
+
+00:05:30.480 --> 00:05:36.560
+publish and help other authors publish using this 
+wonderful tool called emacs-org-mode. Thank You.
diff --git a/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt
new file mode 100644
index 00000000..6a8d12b2
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--03-idea-to-novel-superstructure-emacs-for-writing--questions--bala-ramadurai.vtt
@@ -0,0 +1,470 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:05.333
+I have the pad open. So, I can start.
+
+00:00:05.333 --> 00:00:11.333
+Do you have occasions to use Emacs for
+multilingual text composition?
+
+00:00:11.333 --> 00:00:15.333
+How do you deal with spell-checking?
+
+00:00:15.333 --> 00:00:15.333
+I have written only in English. For
+English, Emacs works great.
+
+00:00:15.333 --> 00:00:23.767
+Spell-check works great.
+
+00:00:23.767 --> 00:00:29.300
+I have not used it for any other languages.
+
+00:00:29.300 --> 00:00:40.333
+I have indeed tried local South Indian
+language, but only the script
+
+00:00:40.333 --> 00:00:47.567
+I could get, but not the spell-checker,
+really. I've not really figured it out.
+
+00:00:47.567 --> 00:00:51.067
+So that was my trial to answer
+the first question.
+
+00:00:51.067 --> 00:00:57.031
+The second question is: "is it possible
+to align the subcolumns
+
+00:00:57.031 --> 00:00:59.967
+and headings and subheadings?"
+
+00:00:59.967 --> 00:01:04.967
+Oh boy. That's a good one. I actually
+felt the lack of having the...
+
+00:01:04.967 --> 00:01:11.100
+The theme I had was great for... It
+looked like a novel
+
+00:01:11.100 --> 00:01:14.533
+when I'm typing on the novel itself,
+
+00:01:14.533 --> 00:01:19.800
+but when I expand into the subtrees,
+
+00:01:19.800 --> 00:01:22.233
+it sort of goes haywire. It's a bit hacky.
+
+00:01:22.233 --> 00:01:24.900
+You can probably switch to a monospace font,
+
+00:01:24.900 --> 00:01:27.133
+and that works better than
+
+00:01:27.133 --> 00:01:30.967
+the font that I have demoed it.
+
+00:01:30.967 --> 00:01:36.033
+You can perhaps try monospace font
+
+00:01:36.033 --> 00:01:37.700
+and it should work, I think,
+
+00:01:37.700 --> 00:01:39.600
+as far as I know.
+
+00:01:39.600 --> 00:01:42.667
+So, that's the second question.
+
+00:01:42.667 --> 00:01:47.600
+The third question is maybe there should
+be an Emacs for Writing
+
+00:01:47.600 --> 00:01:50.433
+mailing list, an online writer's workshop?
+
+00:01:50.433 --> 00:01:51.300
+This is a great one.
+
+00:01:51.300 --> 00:01:54.433
+I have conducted an online writer's workshop
+
+00:01:54.433 --> 00:01:58.000
+here in India. Of course, it wasn't
+
+00:01:58.000 --> 00:02:05.467
+an Emacs-focused workshop. We used
+Notion as the tool. It worked pretty good.
+
+00:02:05.467 --> 00:02:12.633
+for people who are not aware of Emacs
+and how to use Emacs, the keystrokes,
+
+00:02:12.633 --> 00:02:16.200
+the fact that I wasn't using the mouse
+unnerved them.
+
+00:02:16.200 --> 00:02:19.267
+It was a scary experience for most people.
+
+00:02:19.267 --> 00:02:22.333
+I had to switch to Notion.
+
+00:02:22.333 --> 00:02:23.567
+People used that as a template
+
+00:02:23.567 --> 00:02:28.233
+and then they could type it out.
+
+00:02:28.233 --> 00:02:33.633
+It wasn't my perfect experience. I liked
+the Emacs Org Mode experience much better.
+
+00:02:33.633 --> 00:02:41.300
+The next question is, "How do you share
+drafts of your novel?
+
+00:02:41.300 --> 00:02:44.867
+If you use pandoc to export to Word,
+etc., how do you incorporate feedback
+
+00:02:44.867 --> 00:02:46.867
+on the document back into Org?"
+
+00:02:46.867 --> 00:02:50.767
+Thank you for the kind words.
+
+00:02:50.767 --> 00:02:53.100
+Yes, it is a problem.
+
+00:02:53.100 --> 00:03:02.033
+This is my ??, and I have a dedication
+to Spacemacs also and the Emacs Org Mode
+
+00:03:02.033 --> 00:03:04.433
+community in there. I don't know if you
+can see it.
+
+00:03:04.433 --> 00:03:05.467
+Probably not.
+
+00:03:05.467 --> 00:03:10.600
+I did export it to Word.
+
+00:03:10.600 --> 00:03:13.333
+My editor did complain that there were a
+whole bunch of things,
+
+00:03:13.333 --> 00:03:16.633
+that it wasn't convenient for her.
+
+00:03:16.633 --> 00:03:20.933
+So I tried having the raw Org Mode
+itself in a DOC embedded,
+
+00:03:20.933 --> 00:03:26.067
+and I will do a copy and paste.
+
+00:03:26.067 --> 00:03:27.867
+Didn't work so well either.
+
+00:03:27.867 --> 00:03:31.267
+So I'm still on the edge on
+how do I do this.
+
+00:03:31.267 --> 00:03:34.933
+Should I train my editor
+to use Org Mode
+
+00:03:34.933 --> 00:03:37.167
+in Gitlab or one of those
+
+00:03:37.167 --> 00:03:39.833
+other tools, which is not a great
+experience?
+
+00:03:39.833 --> 00:03:47.633
+But... I don't know. It could be
+tricky for working with people
+
+00:03:47.633 --> 00:03:50.867
+who are not well-versed with Emacs.
+
+00:03:50.867 --> 00:04:02.000
+Pandoc is very, very useful in
+converting it to PDF
+
+00:04:02.000 --> 00:04:02.000
+and integrating it with LaTeX, the
+styling, formatting into e-reader,
+
+00:04:02.000 --> 00:04:13.133
+EPUB format. For all that, Pandoc works
+great. You can customize it
+
+00:04:13.133 --> 00:04:16.233
+and of course there's a lot of support
+in the community
+
+00:04:16.233 --> 00:04:20.133
+for any style changes that you want to
+make, any images that you want to add.
+
+00:04:20.133 --> 00:04:22.967
+It works great.
+
+00:04:22.967 --> 00:04:28.367
+That was my trial to answer the pandoc question.
+
+00:04:28.367 --> 00:04:35.100
+"Can you show exported PDF of
+any of your novels?"
+
+00:04:35.100 --> 00:04:38.600
+Unfortunately, it's still
+not published, so I'm...
+
+00:04:38.600 --> 00:04:42.067
+I will put it and
+share it on the community,
+
+00:04:42.067 --> 00:04:48.067
+or part of this in the schedule itself.
+Thank you for the question.
+
+00:04:48.067 --> 00:04:55.000
+Unfortunately, it's not yet published,
+so I'm unable to publish the exported PDF.
+
+00:04:55.000 --> 00:05:01.300
+But I'll make a test of an open-source
+novel that I'm working on
+
+00:05:01.300 --> 00:05:05.767
+I will definitely publish that so that
+you can see
+
+00:05:05.767 --> 00:05:10.433
+how it works also.
+
+00:05:10.433 --> 00:05:13.167
+Can you text-wrap in the columns?
+
+00:05:13.167 --> 00:05:19.667
+I have not found a way to do
+text-wrap in the columns.
+
+00:05:19.667 --> 00:05:23.633
+That only shows my limitation
+in config setup,
+
+00:05:23.633 --> 00:05:27.033
+but I'm sure people can figure this out
+
+00:05:27.033 --> 00:05:29.900
+That's a good one. I would have loved to
+have it.
+
+00:05:29.900 --> 00:05:34.000
+Every time I want to write more on the
+headline,
+
+00:05:34.000 --> 00:05:42.467
+I would get out of the column-view mode
+and I would do the typing and expand it,
+
+00:05:42.467 --> 00:05:46.700
+and then come back into the column view
+when I want to set the other meta parameters.
+
+00:05:46.700 --> 00:05:54.133
+So that's how I manage without the
+text-wrapping feature built into column.
+
+00:05:54.133 --> 00:05:58.000
+But I think it's a great idea to
+have text wrap.
+
+00:05:58.000 --> 00:06:05.333
+Did I leave out any questions?
+I don't think so.
+
+00:06:05.333 --> 00:06:10.600
+[Amin]: I think there's at least one
+question on IRC,
+
+00:06:10.600 --> 00:06:14.500
+which I shall read to you.
+
+00:06:14.500 --> 00:06:17.300
+[Bala]: Please, can you do that? Thank you.
+
+00:06:17.300 --> 00:06:21.278
+[Amin]: So they asked, "How do you collaborate
+with others while writing your novel?
+
+00:06:21.278 --> 00:06:28.100
+For example, sharing your file and
+getting feedback."
+
+00:06:28.100 --> 00:06:37.100
+Okay. Good question. So far, I have
+used... Let's see...
+
+00:06:37.100 --> 00:06:40.833
+What did I use...
+This is a crazy hack.
+
+00:06:40.833 --> 00:06:44.667
+But it's a long-winded way of...
+
+00:06:44.667 --> 00:06:50.300
+Right now we're working on an e-book for
+sustainability
+
+00:06:50.300 --> 00:06:57.767
+and kids contribute their stories into
+this long Org Mode file
+
+00:06:57.767 --> 00:07:00.233
+and I want my editors to see it
+
+00:07:00.233 --> 00:07:05.333
+so what we have done, actually, is with
+the tags and all that, I have actually
+
+00:07:05.333 --> 00:07:08.167
+pasted it into Google Docs
+
+00:07:08.167 --> 00:07:11.833
+so that my collaborators and
+
+00:07:11.833 --> 00:07:14.000
+editors can see it.
+
+00:07:14.000 --> 00:07:16.667
+That's my current solution.
+It's not elegant.
+
+00:07:16.667 --> 00:07:23.900
+I'm trying to see if I can use Python
+code to make the copy and paste work,
+
+00:07:23.900 --> 00:07:26.900
+but it's not so elegant for now.
+
+00:07:26.900 --> 00:07:28.933
+I don't know how to work this out,
+
+00:07:28.933 --> 00:07:31.100
+but this is my hack. That is,
+
+00:07:31.100 --> 00:07:34.300
+the entire Org Mode text, I would paste
+it into
+
+00:07:34.300 --> 00:07:35.433
+Google Docs
+
+00:07:35.433 --> 00:07:37.700
+so that my collaborators and editors
+
+00:07:37.700 --> 00:07:41.667
+can see it. Whenever they edit it, I ask
+them not to make any changes
+
+00:07:41.667 --> 00:07:43.500
+to the Org Mode tags.
+
+00:07:43.500 --> 00:07:45.633
+So just copy the entire text
+
+00:07:45.633 --> 00:07:51.167
+and put it back into my Org Mode file
+
+00:07:51.167 --> 00:07:53.300
+and export it using Pandoc into a PDF
+
+00:07:53.300 --> 00:07:56.000
+and since it's synced to Google Drive
+
+00:07:56.000 --> 00:07:58.600
+it shows up in the Google Drive
+
+00:07:58.600 --> 00:08:03.633
+and then the collaborators can see
+the PDF/EPUB
+
+00:08:03.633 --> 00:08:05.333
+if they want to open it up
+
+00:08:05.333 --> 00:08:06.200
+in their own space.
+
+00:08:06.200 --> 00:08:11.467
+It's very very hacky and I think
+primitive, Stone Age sort of solution.
+
+00:08:11.467 --> 00:08:15.567
+I did see a Python solution.
+
+00:08:15.567 --> 00:08:18.967
+to at least help me with
+the copying and paste.
+
+00:08:18.967 --> 00:08:21.574
+I'm still working on
+how do I convert this.
+
+00:08:21.574 --> 00:08:24.300
+Interconvertability is
+driving me nuts.
+
+00:08:24.300 --> 00:08:26.533
+I think most of the questions
+
+00:08:26.533 --> 00:08:29.333
+are around interconvertability.
+
+00:08:29.333 --> 00:08:34.767
+This is sort of what I have right now.
+
+00:08:34.767 --> 00:08:37.567
+Any other questions, Amin,
+
+00:08:37.567 --> 00:08:40.233
+on IRC or not?
+
+00:08:40.233 --> 00:08:46.433
+[Amin]: Let's see. I think that's about it.
+
+00:08:46.433 --> 00:08:50.033
+[Bala]: Okay. Cool. That was fun.
+
+00:08:50.033 --> 00:08:51.833
+Thank you so much to
+
+00:08:51.833 --> 00:08:54.577
+the organizers of Emacs conference,
+
+00:08:54.577 --> 00:08:57.100
+and the community at large,
+
+00:08:57.100 --> 00:09:01.303
+the Org Mode community and the Emacs
+community for helping me out.
+
+00:09:01.303 --> 00:09:02.900
+Thank you so much.
+
+00:09:02.900 --> 00:09:05.233
+Thanks for the opportunity
+as well.
+
+00:09:05.233 --> 00:09:07.300
+[Amin]: And thank you, Bala, for your
+awesome talk.
+
+00:09:07.300 --> 00:09:14.000
+[Bala]: Thanks. Thanks a lot, Amin.
diff --git a/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt b/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt
new file mode 100644
index 00000000..b2722c99
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--04-music-in-plain-text--jonathan-gregory.vtt
@@ -0,0 +1,559 @@
+WEBVTT
+
+00:00:02.000 --> 00:00:04.799
+Hello, everyone, and welcome to the EmacsConf.
+
+00:00:04.799 --> 00:00:06.631
+I am Jonathan. In this talk,
+
+00:00:06.631 --> 00:00:10.880
+I'm going to demonstrate ways of
+producing sheet music in Emacs
+
+00:00:10.880 --> 00:00:14.636
+using Lilypond, and maybe also
+convince you
+
+00:00:14.636 --> 00:00:18.640
+to use Emacs for writing your scores.
+
+00:00:18.640 --> 00:00:20.698
+I'll start with an overview
+of the syntax
+
+00:00:20.698 --> 00:00:22.240
+for those who are new to using
+
+00:00:22.240 --> 00:00:24.400
+text-based notation
+
+00:00:24.400 --> 00:00:26.615
+as a shallow dive into the deep pond
+
+00:00:26.615 --> 00:00:28.800
+of lilies and Lilypond,
+
+00:00:28.800 --> 00:00:30.171
+and move on to showcase
+
+00:00:30.171 --> 00:00:34.723
+some of its functionalities
+using Org Mode and lilypond-mode.
+
+00:00:34.723 --> 00:00:37.173
+One disclaimer, however:
+
+00:00:37.173 --> 00:00:40.480
+I am not a Lilypond developer.
+
+00:00:40.480 --> 00:00:42.841
+So what is Lilypond?
+
+00:00:42.841 --> 00:00:46.800
+Lilypond is a file format and music
+engraving system
+
+00:00:46.800 --> 00:00:50.000
+for producing high-quality sheet music.
+
+00:00:50.000 --> 00:00:52.442
+It translates textual representations
+
+00:00:52.442 --> 00:00:55.120
+of music to graphical objects.
+
+00:00:55.120 --> 00:00:57.520
+It's similar to LaTeX in that
+
+00:00:57.520 --> 00:00:59.329
+its input format describes
+
+00:00:59.329 --> 00:01:01.600
+the visual layouts of the score,
+
+00:01:01.600 --> 00:01:05.119
+using commands to define musical
+expressions.
+
+00:01:05.119 --> 00:01:07.760
+Commands begin with a backslash.
+
+00:01:07.760 --> 00:01:10.791
+For example, the formatter command,
+as shown on the left,
+
+00:01:10.791 --> 00:01:13.920
+yields its graphical equivalents
+on the right,
+
+00:01:13.920 --> 00:01:16.345
+the fermata symbol over the low B
+
+00:01:16.345 --> 00:01:19.119
+and so on and so forth.
+
+00:01:19.119 --> 00:01:21.600
+It's also fully extensible, like Emacs,
+
+00:01:21.600 --> 00:01:23.119
+allowing users to extend
+
+00:01:23.119 --> 00:01:25.600
+and override Lilypond's functionalities
+
+00:01:25.600 --> 00:01:28.452
+using the Scheme scripting language.
+
+00:01:28.452 --> 00:01:32.422
+It can be used for early and
+contemporary music tablature,
+
+00:01:32.422 --> 00:01:35.200
+vocal music lead sheets, and so on.
+
+00:01:35.200 --> 00:01:38.000
+Above all, it works with Emacs.
+
+00:01:38.000 --> 00:01:41.040
+In fact, Lilypond ships with
+Emacs Lisp libraries,
+
+00:01:41.040 --> 00:01:47.360
+including a major mode for editing
+Lilypond files.
+
+00:01:47.360 --> 00:01:50.560
+So the input files are similar to source
+files.
+
+00:01:50.560 --> 00:01:54.079
+They contain expressions formed with
+curly braces,
+
+00:01:54.079 --> 00:01:56.549
+comments that start with
+the percent sign,
+
+00:01:56.549 --> 00:02:00.240
+and the code is indented.
+
+00:02:00.240 --> 00:02:02.903
+Notes are entered using lowercase
+letters,
+
+00:02:02.903 --> 00:02:05.600
+and rests with the letter r.
+
+00:02:05.600 --> 00:02:08.800
+In this case, the lowercase r or r4
+
+00:02:08.800 --> 00:02:11.039
+is the equivalence of a crotchet or
+
+00:02:11.039 --> 00:02:14.000
+quarter note rest.
+
+00:02:14.000 --> 00:02:15.938
+Durations are entered using numbers
+
+00:02:15.938 --> 00:02:18.480
+and dots after the note name.
+
+00:02:18.480 --> 00:02:20.196
+If you do not specify one,
+
+00:02:20.196 --> 00:02:22.640
+the previous duration is used.
+
+00:02:22.640 --> 00:02:27.360
+You can also tie notes together using
+the tilde symbol (~).
+
+00:02:27.360 --> 00:02:30.000
+In fact, you can input chords, lyrics,
+
+00:02:30.000 --> 00:02:32.080
+embellishments, and a lot more.
+
+00:02:32.080 --> 00:02:36.160
+I encourage you to read the manual for
+more information.
+
+00:02:36.160 --> 00:02:39.680
+Now let's switch to a terminal window.
+
+00:02:39.680 --> 00:02:41.247
+With Lilypond installed,
+
+00:02:41.247 --> 00:02:50.560
+let's create a test file with the
+extension .ly and open it in Emacs.
+
+00:02:50.560 --> 00:02:53.048
+At the top of the file is
+the version statement,
+
+00:02:53.048 --> 00:02:54.395
+which tells Lilypond
+
+00:02:54.395 --> 00:02:57.440
+which version to use when
+compiling the file.
+
+00:02:57.440 --> 00:03:00.959
+Here I'm using version 2.20.0.
+
+00:03:00.959 --> 00:03:04.159
+I've added the clef and time signature.
+
+00:03:04.159 --> 00:03:09.280
+Let's add some notes.
+
+00:03:09.280 --> 00:03:12.098
+I'm going to close this now
+
+00:03:12.098 --> 00:03:13.765
+and compile the file
+
+00:03:13.765 --> 00:03:19.760
+by running lilypond followed
+by the file name.
+
+00:03:19.760 --> 00:03:27.360
+So now let's view the output.
+
+00:03:27.360 --> 00:03:29.760
+Okay. So here's a more complex example
+
+00:03:29.760 --> 00:03:32.239
+for randomizing note sequences.
+
+00:03:32.239 --> 00:03:33.410
+The idea is to create
+
+00:03:33.410 --> 00:03:37.760
+new reading materials each time the code
+blocks are evaluated.
+
+00:03:37.760 --> 00:03:40.640
+As usual, we begin with a header.
+
+00:03:40.640 --> 00:03:43.541
+I've added the title and composer.
+
+00:03:43.541 --> 00:03:47.920
+Then we add the note sequences to use in
+the composition.
+
+00:03:47.920 --> 00:03:51.200
+In this case, sn is a note name just like
+
+00:03:51.200 --> 00:03:54.959
+a b c d and so on, and stands for snare drum,
+
+00:03:54.959 --> 00:03:58.879
+the percussion instruments.
+
+00:03:58.879 --> 00:04:00.720
+Now here's a function that's going to
+
+00:04:00.720 --> 00:04:04.080
+shuffle the notes in the table.
+
+00:04:04.080 --> 00:04:06.560
+Finally, we expand the notes inside
+
+00:04:06.560 --> 00:04:08.799
+the Lilypond source block.
+
+00:04:08.799 --> 00:04:10.684
+So whatever the function returns
+
+00:04:10.684 --> 00:04:13.680
+is expanded inside the drums block.
+
+00:04:13.680 --> 00:04:20.079
+Now let's press C-c C-c to view the
+results.
+
+00:04:20.079 --> 00:04:26.840
+Okay. And if I run this again, it should
+create a new composition.
+
+00:04:26.840 --> 00:04:31.360
+Great. You can also audition a piece
+using the midi command,
+
+00:04:31.360 --> 00:04:34.320
+which creates a midi file of the score.
+
+00:04:34.320 --> 00:04:36.560
+Note also that the ob library--
+
+00:04:36.560 --> 00:04:39.040
+sorry, the ob-lilypond library comes
+
+00:04:39.040 --> 00:04:40.400
+with two modes.
+
+00:04:40.400 --> 00:04:43.440
+The one I'm using now is called
+arrange mode
+
+00:04:43.440 --> 00:04:47.120
+and is useful for assembling
+complete scores.
+
+00:04:47.120 --> 00:04:49.015
+The basic mode, on the other hand,
+
+00:04:49.015 --> 00:04:51.199
+allows you to mix text and music
+
+00:04:51.199 --> 00:04:53.360
+by embedding Lilypond snippets and
+
+00:04:53.360 --> 00:05:00.240
+export them using typical Org Mode
+commands.
+
+00:05:00.240 --> 00:05:02.661
+Now to demonstrate the basic mode in
+action.
+
+00:05:02.661 --> 00:05:04.320
+I'm going to export this document
+
+00:05:04.320 --> 00:05:05.120
+to a PDF file.
+
+00:05:05.120 --> 00:05:10.077
+In this case, the :file header argument
+is required,
+
+00:05:10.077 --> 00:05:11.919
+so you have to provide one
+
+00:05:11.919 --> 00:05:15.600
+and include the file name.
+
+00:05:15.600 --> 00:05:22.160
+Again, you can run the code and view the
+results.
+
+00:05:22.160 --> 00:05:33.680
+Here it is. So now let's export this to
+a PDF file.
+
+00:05:33.680 --> 00:05:39.680
+And here it is, what it generates.
+
+00:05:39.680 --> 00:05:41.716
+Now I'm going to show you
+the workflow I used
+
+00:05:41.716 --> 00:05:44.000
+to produce music books in Emacs,
+
+00:05:44.000 --> 00:05:46.160
+combining Lilypond and LaTeX for a
+
+00:05:46.160 --> 00:05:48.000
+perfect marriage.
+
+00:05:48.000 --> 00:05:49.858
+I begin by sketching the first draft
+
+00:05:49.858 --> 00:05:53.039
+of the manuscript using
+pencil and paper.
+
+00:05:53.039 --> 00:05:55.039
+Then I move to Emacs to input the notes
+
+00:05:55.039 --> 00:05:57.440
+in a git repository.
+
+00:05:57.440 --> 00:05:59.486
+This is a typical source file.
+
+00:05:59.486 --> 00:06:01.360
+It begins with a stylesheet
+
+00:06:01.360 --> 00:06:03.690
+where I set variables and layout settings,
+
+00:06:03.690 --> 00:06:04.875
+although in general,
+
+00:06:04.875 --> 00:06:07.039
+there's no need for tweaking the layout
+
+00:06:07.039 --> 00:06:11.199
+unless you have specific requirements to
+do so.
+
+00:06:11.199 --> 00:06:15.520
+The easiest way to compile the file
+from Emacs is by pressing C-c C-l,
+
+00:06:15.520 --> 00:06:19.280
+so let's do this now,
+
+00:06:19.280 --> 00:06:21.199
+and the compilation buffer will tell you
+
+00:06:21.199 --> 00:06:23.759
+if there were any errors in the file.
+
+00:06:23.759 --> 00:06:25.439
+Now to automate the process of
+
+00:06:25.439 --> 00:06:28.560
+compiling several files and
+building the PDF,
+
+00:06:28.560 --> 00:06:31.280
+I use GNU Make, so all I have to do is
+
+00:06:31.280 --> 00:06:36.000
+open the shell and run the make command.
+Don't worry,
+
+00:06:36.000 --> 00:06:37.840
+I'll provide a link to the source code
+
+00:06:37.840 --> 00:06:41.600
+on the last slide.
+
+00:06:41.600 --> 00:06:43.494
+As I moved forward with the project,
+
+00:06:43.494 --> 00:06:46.000
+I found at least two things missing.
+
+00:06:46.000 --> 00:06:48.720
+One, I had no access to a metronome,
+
+00:06:48.720 --> 00:06:50.479
+at least not from the editor,
+
+00:06:50.479 --> 00:06:52.437
+so I built one for casual use
+
+00:06:52.437 --> 00:06:55.919
+and made it available in the MELPA
+repository.
+
+00:06:55.919 --> 00:06:59.039
+I also missed bar numbers in the
+source file.
+
+00:06:59.039 --> 00:07:00.880
+This is useful when going back and forth
+
+00:07:00.880 --> 00:07:04.479
+between input and output files without
+getting lost.
+
+00:07:04.479 --> 00:07:07.290
+So I wrote a command for toggling bar
+numbers,
+
+00:07:07.290 --> 00:07:10.000
+which I hope you can see on the left.
+
+00:07:10.000 --> 00:07:12.080
+Also, some expressions are difficult or
+
+00:07:12.080 --> 00:07:14.160
+slow to write on the keyboard--
+
+00:07:14.160 --> 00:07:16.490
+accents and tuplets, for example--
+
+00:07:16.490 --> 00:07:20.160
+so I use template expansion extensively
+for this purpose,
+
+00:07:20.160 --> 00:07:23.440
+mainly yasnippet.
+
+00:07:23.440 --> 00:07:24.797
+So what do I think?
+
+00:07:24.797 --> 00:07:28.080
+Well, I think Lilypond can be a sharp
+paradigm shift
+
+00:07:28.080 --> 00:07:30.817
+for people used to GUI alternatives,
+
+00:07:30.817 --> 00:07:32.720
+but the results are impressive.
+
+00:07:32.720 --> 00:07:34.639
+You don't have to dive too deeply to
+
+00:07:34.639 --> 00:07:36.960
+start using Lilypond.
+
+00:07:36.960 --> 00:07:39.635
+Likewise, the ability to extend the
+software,
+I think,
+
+00:07:39.635 --> 00:07:42.400
+is especially appealing for music
+professionals,
+
+00:07:42.400 --> 00:07:46.560
+enthusiasts, composers, and the academic
+community:
+
+00:07:46.560 --> 00:07:48.400
+for example, allowing users to create
+
+00:07:48.400 --> 00:07:50.187
+alternative notation systems
+
+00:07:50.187 --> 00:07:53.120
+required in non-Western music traditions
+
+00:07:53.120 --> 00:07:56.160
+and other non-conventional requirements.
+
+00:07:56.160 --> 00:07:58.400
+Also, Lilypond and Emacs both have
+
+00:07:58.400 --> 00:08:00.720
+extensive and well-written manuals
+
+00:08:00.720 --> 00:08:04.639
+and active communities of users.
+
+00:08:04.639 --> 00:08:05.971
+But if you're still not sure
+
+00:08:05.971 --> 00:08:10.475
+where to start and when to wedge your
+feet in the deep but warm pond
+
+00:08:10.475 --> 00:08:13.680
+of lilies, Lilypond, and Lilypond users,
+
+00:08:13.680 --> 00:08:16.960
+I invite you to contribute to my
+Lilypond projects,
+
+00:08:16.960 --> 00:08:20.720
+which you can do so from the links on
+the screen.
+
+00:08:20.720 --> 00:08:23.271
+So, thank you all. I look forward to
+your comments,
+
+00:08:23.271 --> 00:08:27.840
+and I hope you enjoy the rest of the
+conference.
diff --git a/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt
new file mode 100644
index 00000000..24e598d5
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--grant-shangreaux.vtt
@@ -0,0 +1,1062 @@
+WEBVTT
+
+00:00:01.360 --> 00:00:04.480
+Hello, my name is Grant Shangreaux.
+
+00:00:04.480 --> 00:00:09.519
+This is my talk titled Bard Bivou(m)acs:
+Publishing Music with Emacs.
+
+00:00:09.519 --> 00:00:14.400
+I'm a software developer with Unabridged
+Software in Lincoln, Nebraska.
+
+00:00:14.400 --> 00:00:18.720
+Long time Emacs user, relatively new
+Emacs hacker.
+
+00:00:18.720 --> 00:00:22.487
+Hopefully, I'll be able to show you
+my workflow,
+
+00:00:22.487 --> 00:00:30.480
+with how I publish music with Emacs.
+
+00:00:30.480 --> 00:00:35.520
+All right. So as a musician, I would
+like to publish my music online.
+
+00:00:35.520 --> 00:00:39.040
+I could publish with popular online
+music services,
+
+00:00:39.040 --> 00:00:41.061
+but I'm more of a DIY-type,
+
+00:00:41.061 --> 00:00:44.719
+so I chose to go ahead and
+publish with Emacs.
+
+00:00:44.719 --> 00:00:48.160
+What's the motivation behind this?
+
+00:00:48.160 --> 00:00:51.600
+A lot of it comes down to some
+fundamental freedoms
+
+00:00:51.600 --> 00:00:57.178
+that Emacs and GNU software
+represent to me,
+
+00:00:57.178 --> 00:01:01.840
+as well as my ideas on culture and my
+background.
+
+00:01:01.840 --> 00:01:04.080
+I don't believe that music is
+a consumer good.
+
+00:01:04.080 --> 00:01:08.320
+It's a form of knowledge, like an
+algorithm.
+
+00:01:08.320 --> 00:01:11.036
+And it's just such a part of culture,
+
+00:01:11.036 --> 00:01:12.780
+like in tribal cultures,
+
+00:01:12.780 --> 00:01:17.405
+music was seen as a gift from the cosmos
+or the gods.
+
+00:01:17.405 --> 00:01:20.288
+It was a gift maybe through an
+individual vessel,
+
+00:01:20.288 --> 00:01:21.920
+but was shared with the people
+
+00:01:21.920 --> 00:01:23.520
+and shared with everyone,
+
+00:01:23.520 --> 00:01:26.799
+kept alive by the culture itself.
+
+00:01:26.799 --> 00:01:29.840
+So to me, music is something that
+
+00:01:29.840 --> 00:01:31.520
+should be shared and should be
+
+00:01:31.520 --> 00:01:33.818
+freely enjoyed by everyone.
+
+00:01:33.818 --> 00:01:36.560
+Of course, artists should be
+compensated as well,
+
+00:01:36.560 --> 00:01:39.040
+but that's a whole different topic.
+
+00:01:39.040 --> 00:01:41.040
+So when I want to share my music,
+
+00:01:41.040 --> 00:01:43.520
+I want to do it without impacting
+anyone's freedom.
+
+00:01:43.520 --> 00:01:45.425
+Using GNU software like Emacs
+
+00:01:45.425 --> 00:01:49.200
+is a good way that I can ensure that
+
+00:01:49.200 --> 00:01:52.597
+I won't be requiring people
+
+00:01:52.597 --> 00:01:55.840
+to sign away their freedoms for
+anything.
+
+00:01:55.840 --> 00:01:57.367
+There's a lot more I could say
+about this
+
+00:01:57.367 --> 00:01:58.799
+but I don't have time.
+
+00:01:58.799 --> 00:02:03.439
+Feel free to reach out to me by
+email or IRC.
+
+00:02:03.439 --> 00:02:06.479
+Part of the motivation for me,
+
+00:02:06.479 --> 00:02:08.775
+personally, is that Emacs is super
+magical.
+
+00:02:08.775 --> 00:02:10.720
+It's an all-in-one solution.
+
+00:02:10.720 --> 00:02:12.720
+Like I said, the GNU software aligns with
+
+00:02:12.720 --> 00:02:14.480
+Creative Commons' ideas.
+
+00:02:14.480 --> 00:02:16.067
+I can do file management.
+
+00:02:16.067 --> 00:02:20.239
+I can author HTML, all the web stuff
+I need even, literate-style.
+
+00:02:20.239 --> 00:02:22.171
+I can handle media and metadata.
+
+00:02:22.171 --> 00:02:24.640
+I've got version control, remote server
+access...
+
+00:02:24.640 --> 00:02:28.080
+All the tools I need are right under my
+fingertips with this tool
+
+00:02:28.080 --> 00:02:30.000
+that I use every day for a long time.
+
+00:02:30.000 --> 00:02:31.440
+I don't need to look elsewhere.
+
+00:02:31.440 --> 00:02:34.319
+It was a challenge.
+
+00:02:34.319 --> 00:02:36.319
+I wanted to see if I could do this
+
+00:02:36.319 --> 00:02:39.440
+all within Emacs itself.
+
+00:02:39.440 --> 00:02:41.680
+So, how do you use Emacs to publish music?
+
+00:02:41.680 --> 00:02:43.440
+Well, for me, I needed
+
+00:02:43.440 --> 00:02:44.258
+a couple of things.
+
+00:02:44.258 --> 00:02:47.564
+I needed to be able to audition and
+label unlabeled audio tracks.
+
+00:02:47.564 --> 00:02:50.320
+I have a lot of files that
+I don't know where they came from.
+
+00:02:50.320 --> 00:02:51.213
+I don't know what they are.
+
+00:02:51.213 --> 00:02:53.840
+I need to be able to listen to them,
+
+00:02:53.840 --> 00:02:56.800
+and I need to be able to add metadata to
+
+00:02:56.800 --> 00:02:58.480
+whatever audio format it is
+
+00:02:58.480 --> 00:03:00.800
+and rename the files based on that
+
+00:03:00.800 --> 00:03:03.200
+metadata, potentially.
+
+00:03:03.200 --> 00:03:05.120
+And in the end, I wanted to take those
+
+00:03:05.120 --> 00:03:08.319
+files and programmatically produce a web page
+
+00:03:08.319 --> 00:03:10.442
+for people to consume.
+
+00:03:10.442 --> 00:03:14.879
+I found out that Emacs scores a hundred
+percent on all of
+
+00:03:14.879 --> 00:03:17.709
+these requirements that I had for this,
+
+00:03:17.709 --> 00:03:22.640
+and a lot of that came from EMMS, the
+Emacs multimedia system.
+
+00:03:22.640 --> 00:03:26.080
+EMMS is great.
+
+00:03:26.080 --> 00:03:27.760
+If you haven't checked it out, please do.
+
+00:03:27.760 --> 00:03:29.736
+It's a little bit unintuitive,
+
+00:03:29.736 --> 00:03:34.000
+but once you get into it, you know it
+works.
+
+00:03:34.000 --> 00:03:36.420
+Basically, what EMMS gave me was
+
+00:03:36.420 --> 00:03:38.720
+the ability to listen to the tracks,
+
+00:03:38.720 --> 00:03:39.680
+organize playlists.
+
+00:03:39.680 --> 00:03:41.280
+On top of that, it gave me
+
+00:03:41.280 --> 00:03:42.959
+super-powered metadata authoring.
+
+00:03:42.959 --> 00:03:45.040
+I'm going to demonstrate that to you.
+
+00:03:45.040 --> 00:03:47.200
+So in order to do this,
+
+00:03:47.200 --> 00:03:50.879
+you have to require markable playlists,
+
+00:03:50.879 --> 00:03:54.879
+so (require 'emms-mark). I'm going to
+
+00:03:54.879 --> 00:03:59.680
+go through, and I'm going to open the red...
+
+00:03:59.680 --> 00:04:02.092
+I've got this. These files here.
+
+00:04:02.092 --> 00:04:04.480
+So you can see these files are mp3s.
+
+00:04:04.480 --> 00:04:07.599
+They're recorded on a digital recorder.
+
+00:04:07.599 --> 00:04:09.920
+If I had the choice, I would have a
+
+00:04:09.920 --> 00:04:12.319
+recorder that used a different format,
+
+00:04:12.319 --> 00:04:14.640
+but so be it. I can mark all these files
+
+00:04:14.640 --> 00:04:27.040
+and I can do EMMS add to .., and now
+they've been loaded into a playlist.
+
+00:04:27.040 --> 00:04:28.698
+So you can see the playlist here.
+
+00:04:28.698 --> 00:04:30.400
+There's some leftover files.
+
+00:04:30.400 --> 00:04:31.771
+So I've got these three files
+
+00:04:31.771 --> 00:04:33.361
+in my playlist, and as you can see,
+
+00:04:33.361 --> 00:04:35.194
+it's just the file name, the path.
+
+00:04:35.194 --> 00:04:38.560
+I don't have any metadata associated
+with them.
+
+00:04:38.560 --> 00:04:41.360
+In this playlist, I can hit E,
+
+00:04:41.360 --> 00:04:43.440
+and it'll bring up a buffer showing
+
+00:04:43.440 --> 00:04:47.360
+the tag information that I have.
+
+00:04:47.360 --> 00:04:49.840
+I could edit these here.
+
+00:04:49.840 --> 00:04:51.129
+I could edit them one at a time,
+
+00:04:51.129 --> 00:05:03.101
+but that's not really great. I want
+superpower metadata authoring.
+
+00:05:03.101 --> 00:05:07.159
+So, by marking them, I can then hit E,
+
+00:05:07.159 --> 00:05:12.639
+and I have all three of the tracks
+loaded up in this tags buffer.
+
+00:05:12.639 --> 00:05:16.912
+On top of that, I can do EMMS tag
+editor,
+
+00:05:16.912 --> 00:05:22.840
+set all, C-c C-r, and I want to
+set the artist.
+
+00:05:22.840 --> 00:05:26.320
+so these are some recordings of my
+family.
+
+00:05:26.320 --> 00:05:31.039
+So, Shangreaux, set all three of them.
+
+00:05:31.039 --> 00:05:35.600
+I want to set the album:
+
+00:05:35.600 --> 00:05:40.160
+Spring Walk with Lap Harp.
+
+00:05:40.160 --> 00:05:45.520
+I want to set the year.
+
+00:05:45.520 --> 00:05:53.759
+And then I'm going to go ahead and put
+these in manually,
+
+00:05:53.759 --> 00:05:56.759
+but with the power of Emacs
+keyboard macros
+
+00:05:56.759 --> 00:05:59.600
+and registers and so on. I could do this
+
+00:05:59.600 --> 00:06:02.319
+programmatically as well,
+
+00:06:02.319 --> 00:06:03.818
+which would make it a lot easier
+
+00:06:03.818 --> 00:06:07.440
+if I had much more than three files to
+do this with.
+
+00:06:07.440 --> 00:06:09.919
+Submit the changes with C-c C-c,
+
+00:06:09.919 --> 00:06:11.232
+and now we've got the playlist.
+
+00:06:11.232 --> 00:06:15.039
+You can see the artist and track number
+have been updated here.
+
+00:06:15.039 --> 00:06:17.360
+And then the final piece of this is that
+
+00:06:17.360 --> 00:06:18.875
+if you look at this, you can see that
+
+00:06:18.875 --> 00:06:20.479
+the file name is still the same.
+
+00:06:20.479 --> 00:06:22.639
+So if I were looking at the directory,
+
+00:06:22.639 --> 00:06:24.560
+I would still have this file name.
+
+00:06:24.560 --> 00:06:26.479
+When packaging these up for a release,
+
+00:06:26.479 --> 00:06:28.000
+for people to download,
+
+00:06:28.000 --> 00:06:30.319
+it's nice to be able to have that
+
+00:06:30.319 --> 00:06:32.044
+filename reflect the track number
+
+00:06:32.044 --> 00:06:33.609
+and the artist and so on.
+
+00:06:33.609 --> 00:06:40.250
+So there's another command,
+
+00:06:40.250 --> 00:06:42.970
+EMMS rename tag editor, rename,
+
+00:06:42.970 --> 00:06:45.120
+so it could be just capital R.
+
+00:06:45.120 --> 00:06:46.991
+I think I need to mark all of these,
+
+00:06:46.991 --> 00:06:50.000
+hit capital R, and then it's going to
+ask me to confirm
+
+00:06:50.000 --> 00:06:54.400
+and say yes to all of them.
+
+00:06:54.400 --> 00:07:02.720
+And now, if you look in the--
+
+00:07:02.720 --> 00:07:04.319
+whoops I have to update it--you'll see
+
+00:07:04.319 --> 00:07:06.319
+it's been updated with the artist,
+
+00:07:06.319 --> 00:07:11.120
+track number and track name.
+
+00:07:11.120 --> 00:07:14.432
+This format is a format string,
+
+00:07:14.432 --> 00:07:17.360
+so it's customizable of course.
+
+00:07:17.360 --> 00:07:21.039
+I just decided to go with the default.
+
+00:07:21.039 --> 00:07:24.948
+So that's pretty great, this workflow
+just with EMMS.
+
+00:07:24.948 --> 00:07:27.585
+I didn't have to do anything. This is
+all there.
+
+00:07:27.585 --> 00:07:31.673
+It's all built in. It gave me exactly
+what I was looking for
+
+00:07:31.673 --> 00:07:35.599
+in terms of being able to process a lot
+of raw audio files,
+
+00:07:35.599 --> 00:07:39.280
+add metadata to them, and get them ready
+for publishing.
+
+00:07:39.280 --> 00:07:41.599
+And this is for publishing for playback
+
+00:07:41.599 --> 00:07:44.026
+in any media player. It'll be useful.
+
+00:07:44.026 --> 00:07:47.639
+Not just for the web page that I'm
+building.
+
+00:07:47.639 --> 00:07:51.440
+So the final part, of course, is to
+build the web page.
+
+00:07:51.440 --> 00:07:54.960
+Emacs makes authoring HTML trivial.
+
+00:07:54.960 --> 00:07:57.357
+As I was going through this,
+
+00:07:57.357 --> 00:07:59.701
+I wanted to challenge myself and just
+be, like,
+
+00:07:59.701 --> 00:08:03.520
+can I do this just all with Emacs?
+Can I just make this?
+
+00:08:03.520 --> 00:08:05.134
+I don't need a... I don't need Ruby.
+
+00:08:05.134 --> 00:08:06.707
+I don't need Rails. I don't need Node.
+
+00:08:06.707 --> 00:08:08.528
+I don't need any of this other stuff.
+
+00:08:08.528 --> 00:08:10.560
+I have my tool right here. It's a
+fully...
+
+00:08:10.560 --> 00:08:12.560
+It's a whole operating system, basically,
+
+00:08:12.560 --> 00:08:15.039
+plus programming languages.
+
+00:08:15.039 --> 00:08:17.171
+So the first thing I started with
+
+00:08:17.171 --> 00:08:19.919
+was buffer scripting for
+manipulating text.
+
+00:08:19.919 --> 00:08:22.560
+That's kind of the easiest way to do it.
+
+00:08:22.560 --> 00:08:24.692
+Basically, anything you can do in
+a buffer,
+
+00:08:24.692 --> 00:08:27.834
+you can do programmatically with Elisp.
+
+00:08:27.834 --> 00:08:30.217
+So this might be a good example for
+beginners.
+
+00:08:30.217 --> 00:08:33.919
+If you haven't done any Elisp yet,
+
+00:08:33.919 --> 00:08:39.557
+a simple example is to create this div
+output here.
+
+00:08:39.557 --> 00:08:41.581
+You can use this with-temp-buffer,
+
+00:08:41.581 --> 00:08:44.240
+so basically creating an imaginary
+buffer.
+
+00:08:44.240 --> 00:08:45.945
+insert is just like typing,
+
+00:08:45.945 --> 00:08:48.800
+so you put strings in,
+you put new lines in,
+
+00:08:48.800 --> 00:08:50.959
+you can build some strings together.
+
+00:08:50.959 --> 00:08:53.551
+Here you can see I'm doing a random
+number,
+
+00:08:53.551 --> 00:08:55.360
+so every time I execute this,
+
+00:08:55.360 --> 00:08:56.790
+my content changes.
+
+00:08:56.790 --> 00:09:03.685
+I can generate dynamic content in HTML
+blocks with Elisp.
+
+00:09:03.685 --> 00:09:06.493
+For my web page builder, it's a little
+more complex.
+
+00:09:06.493 --> 00:09:08.000
+I'm pulling data out
+
+00:09:08.000 --> 00:09:12.080
+using EMMS data structures,
+
+00:09:12.080 --> 00:09:16.080
+so it's pulling that out from
+the track data.
+
+00:09:16.080 --> 00:09:19.440
+And then I'm using some program to
+
+00:09:19.440 --> 00:09:21.440
+generate list elements, so each track is
+
+00:09:21.440 --> 00:09:24.086
+going to have the title and
+track number,
+
+00:09:24.086 --> 00:09:25.869
+and then a button for playing it,
+
+00:09:25.869 --> 00:09:28.206
+plus the source of the audio file,
+
+00:09:28.206 --> 00:09:30.480
+which will get added here.
+
+00:09:30.480 --> 00:09:32.485
+Right now, this is hard coded for Opus,
+
+00:09:32.485 --> 00:09:37.200
+so it won't work for my MP3s.
+
+00:09:37.200 --> 00:09:38.867
+I'm going to skip over snippets.
+
+00:09:38.867 --> 00:09:42.017
+Turns out format strings were good
+enough for me.
+
+00:09:42.017 --> 00:09:45.035
+Snippets could be useful,
+
+00:09:45.035 --> 00:09:47.267
+but format is super powerful,
+
+00:09:47.267 --> 00:09:49.839
+and I didn't really even need
+all that much power,
+
+00:09:49.839 --> 00:09:52.187
+basically, just doing string
+interpolation.
+
+00:09:52.187 --> 00:09:54.560
+So if you haven't seen format before,
+
+00:09:54.560 --> 00:09:56.720
+you basically put these control strings
+
+00:09:56.720 --> 00:09:59.120
+or control characters inside of a string,
+
+00:09:59.120 --> 00:10:05.040
+and you can generate an output string
+that you want.
+
+00:10:05.040 --> 00:10:07.344
+So in my generator code, basically,
+
+00:10:07.344 --> 00:10:08.720
+it's down here,
+
+00:10:08.720 --> 00:10:12.800
+I'm calling format with this Bard
+Bivou(m)acs template,
+
+00:10:12.800 --> 00:10:17.491
+and that's basically a big string of
+HTML.
+
+00:10:17.491 --> 00:10:21.200
+It's just my whole page of HTML
+
+00:10:21.200 --> 00:10:24.399
+with those control characters in just
+four places.
+
+00:10:24.399 --> 00:10:26.399
+One of them populates the track list.
+
+00:10:26.399 --> 00:10:29.760
+That's really the meat of the program.
+
+00:10:29.760 --> 00:10:34.746
+Again, this is a combination of using
+buffer scripting, using HTML mode,
+
+00:10:34.746 --> 00:10:37.279
+inserting text format strings,
+
+00:10:37.279 --> 00:10:39.251
+and then I can indent-region
+
+00:10:39.251 --> 00:10:41.920
+so the HTML actually looks pretty
+
+00:10:41.920 --> 00:10:45.200
+when it comes out of it as well.
+
+00:10:45.200 --> 00:10:54.000
+I will show that, just really quick
+actually.
+
+00:10:54.000 --> 00:10:57.540
+So you can see, this is the HTML that
+got generated.
+
+00:10:57.540 --> 00:10:58.800
+I've got my template.
+
+00:10:58.800 --> 00:11:02.193
+I inserted the title here, the style,
+
+00:11:02.193 --> 00:11:05.760
+the font was all inserted,
+
+00:11:05.760 --> 00:11:07.920
+and then this whole list of of tracks here.
+
+00:11:07.920 --> 00:11:11.200
+It's kind of messy to look at,
+
+00:11:11.200 --> 00:11:14.399
+but this track list, this whole div here,
+
+00:11:14.399 --> 00:11:22.480
+is all generated by my generator code,
+and it works. It's great.
+
+00:11:22.480 --> 00:11:27.120
+Okay, moving on.
+
+00:11:27.120 --> 00:11:30.945
+So the other thing was that as I was
+developing this,
+
+00:11:30.945 --> 00:11:32.547
+I decided to use Org Babel
+
+00:11:32.547 --> 00:11:35.588
+and some of its features for
+multi-language things
+
+00:11:35.588 --> 00:11:37.839
+because I needed to style it with CSS
+
+00:11:37.839 --> 00:11:39.835
+and put actions in Javascript,
+
+00:11:39.835 --> 00:11:42.480
+and also I used SVG for authoring stuff.
+
+00:11:42.480 --> 00:11:46.079
+It was a little bit complicated.
+
+00:11:46.079 --> 00:11:47.484
+It probably would have been simpler
+
+00:11:47.484 --> 00:11:48.680
+had I not used Org Babel,
+
+00:11:48.680 --> 00:11:49.894
+but it's also really fun.
+
+00:11:49.894 --> 00:11:53.663
+I think it's a cool, cool idea to use
+literate programming.
+
+00:11:53.663 --> 00:11:57.001
+My idea was to create HTML
+components.
+
+00:11:57.001 --> 00:11:59.519
+I could name it like this,
+
+00:11:59.519 --> 00:12:00.959
+put a format string inside it,
+
+00:12:00.959 --> 00:12:02.800
+and build a function
+
+00:12:02.800 --> 00:12:04.302
+in Elisp to format it
+
+00:12:04.302 --> 00:12:07.120
+and spit out the HTML that I want.
+
+00:12:07.120 --> 00:12:09.581
+By doing this, then,
+
+00:12:09.581 --> 00:12:12.388
+I can just change things in my Org file,
+
+00:12:12.388 --> 00:12:14.814
+which, not getting a whole lot of time
+to work on it,
+
+00:12:14.814 --> 00:12:16.615
+I can come back to it
+
+00:12:16.615 --> 00:12:19.335
+and I have a lot of notes.
+
+00:12:19.335 --> 00:12:21.695
+I can kind of generate things as I'm
+going
+
+00:12:21.695 --> 00:12:24.399
+and keep notes for myself,
+and keep the...
+
+00:12:24.399 --> 00:12:25.308
+I don't know. It's cool.
+
+00:12:25.308 --> 00:12:26.672
+Literate programming is fun.
+
+00:12:26.672 --> 00:12:27.519
+So I don't need to
+
+00:12:27.519 --> 00:12:29.279
+go into that too much, but you can see if
+
+00:12:29.279 --> 00:12:31.040
+I execute this here,
+
+00:12:31.040 --> 00:12:32.983
+I get the the div that I want.
+
+00:12:32.983 --> 00:12:34.013
+It's a little bit funny.
+
+00:12:34.013 --> 00:12:35.786
+You'll see I have the string like this,
+
+00:12:35.786 --> 00:12:40.000
+the way that noweb expands, I can't do
+this on a single line.
+
+00:12:40.000 --> 00:12:43.839
+It looks funny when you do that,
+
+00:12:43.839 --> 00:12:45.931
+so that might be something
+to work out later.
+
+00:12:45.931 --> 00:12:48.959
+CSS blocks can either be tangled out
+
+00:12:48.959 --> 00:12:52.639
+and referenced in the HTML source,
+or inlined.
+
+00:12:52.639 --> 00:12:54.639
+Here's an example I have of inlining it.
+
+00:12:54.639 --> 00:12:57.609
+So I've got my little CSS block
+named style,
+
+00:12:57.609 --> 00:13:00.320
+Javascript named script,
+
+00:13:00.320 --> 00:13:03.040
+and then I've got this HTML source block
+
+00:13:03.040 --> 00:13:04.839
+with noweb expansion.
+
+00:13:04.839 --> 00:13:07.920
+These double angle brackets here
+
+00:13:07.920 --> 00:13:09.396
+are where I'm going to expand
+
+00:13:09.396 --> 00:13:12.639
+the block named style. I'm actually
+calling a function,
+
+00:13:12.639 --> 00:13:14.737
+so I want the result of the
+function here,
+
+00:13:14.737 --> 00:13:18.881
+and then the script will just get
+expanded here.
+
+00:13:18.881 --> 00:13:22.959
+So org-babel-expand-src-block,
+
+00:13:22.959 --> 00:13:25.360
+you can see what it looks like.
+
+00:13:25.360 --> 00:13:28.160
+I've got my style here. I've got my title.
+
+00:13:28.160 --> 00:13:31.279
+I've got that main content class I
+showed before,
+
+00:13:31.279 --> 00:13:34.480
+and the script as well.
+So that's kind of cool.
+
+00:13:34.480 --> 00:13:37.527
+I could just run org-babel-tangle and
+get my thing out
+
+00:13:37.527 --> 00:13:40.480
+and just edit one file instead of
+multiple files.
+
+00:13:40.480 --> 00:13:46.455
+Not for everyone, but I thought it was
+kind of fun. All right.
+
+00:13:46.455 --> 00:13:48.807
+Oh, and the final thing is
+that in Emacs,
+
+00:13:48.807 --> 00:13:51.320
+you can author and view SVG.
+
+00:13:51.320 --> 00:13:58.297
+So this is just an Org. This SVG, I used
+to make the play and pause buttons.
+
+00:13:58.297 --> 00:13:59.519
+I didn't know this,
+
+00:13:59.519 --> 00:14:02.162
+but if you edit an SVG file,
+
+00:14:02.162 --> 00:14:08.800
+you can toggle back and forth
+
+00:14:08.800 --> 00:14:13.199
+between the code and the image.
+
+00:14:13.199 --> 00:14:17.360
+It's pretty sweet. So I can iteratively
+
+00:14:17.360 --> 00:14:20.560
+work through this
+because of how Emacs is.
+
+00:14:20.560 --> 00:14:24.959
+Final considerations here,
+
+00:14:24.959 --> 00:14:26.247
+like when doing this,
+
+00:14:26.247 --> 00:14:27.606
+I want it to be all free,
+
+00:14:27.606 --> 00:14:30.079
+so I want to use fonts that use a free
+license.
+
+00:14:30.079 --> 00:14:32.800
+I found GNU Unifont. It's kind of cool.
+
+00:14:32.800 --> 00:14:34.333
+The content license...
+
+00:14:34.333 --> 00:14:37.600
+I chose Creative Commons Attribution
+ShareAlike,
+
+00:14:37.600 --> 00:14:39.920
+which is kind of like the GPL.
+
+00:14:39.920 --> 00:14:42.663
+Ideally, I could serve it with Emacs.
+
+00:14:42.663 --> 00:14:46.320
+I'd like to remove idiosyncrasy so other
+people can use it.
+
+00:14:46.320 --> 00:14:48.720
+It's pretty much just my tool right now.
+
+00:14:48.720 --> 00:14:50.734
+Not requiring the web browser...
+
+00:14:50.734 --> 00:14:56.648
+I can ship playlists so that you can
+just click or link to a playlist
+
+00:14:56.648 --> 00:15:00.068
+on your favorite player, even EMMS if
+you want,
+
+00:15:00.068 --> 00:15:04.320
+and then packing up those albums in like
+a ZIP or .tar file.
+
+00:15:04.320 --> 00:15:08.639
+So you can go to churls.world .
+
+00:15:08.639 --> 00:15:10.644
+It just has a link to this album.
+
+00:15:10.644 --> 00:15:14.000
+I'll display it here in just a second.
+
+00:15:14.000 --> 00:15:17.519
+You can contact me. I'm shoshin on #emacs
+
+00:15:17.519 --> 00:15:21.040
+in IRC and on sourcehut. You can email me:
+
+00:15:21.040 --> 00:15:23.680
+grant@churls.world, personal, or
+
+00:15:23.680 --> 00:15:26.800
+grant@unabridgedsoftware.com.
+All right, now.
+
+00:15:26.800 --> 00:15:32.079
+Let's see about this...
+
+00:15:32.079 --> 00:15:34.316
+This is up online, so if you
+want to listen
+
+00:15:34.316 --> 00:15:39.199
+to my college band's album from
+20 years ago,
+
+00:15:39.199 --> 00:15:43.040
+here it is: Cassiopeia Basement Days.
+
+00:15:43.040 --> 00:15:46.887
+Whoops. I made this art in Krita.
+
+00:15:46.887 --> 00:15:51.199
+You can press play. You can skip around.
+
+00:15:51.199 --> 00:15:55.040
+I do have the playlist up here too.
+
+00:15:55.040 --> 00:15:58.560
+So yeah, thanks for listening.
+
+00:15:58.560 --> 00:16:07.360
+I hope you enjoyed it, and enjoy the
+rest of EmacsConf. Goodbye!
diff --git a/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt
new file mode 100644
index 00000000..4d7bfede
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--05-bard-bivoumacs-building-a-bandcamp-like-page-for-an-album-of-music--questions--grant-shangreaux.vtt
@@ -0,0 +1,719 @@
+WEBVTT
+
+00:00:03.360 --> 00:00:07.440
+So first question, what does
+Bard Bivou(m)acs mean? Good question.
+
+00:00:07.440 --> 00:00:10.800
+In one version of my talk, I spent too
+long explaining it,
+
+00:00:10.800 --> 00:00:14.559
+and decided to cut it out.
+
+00:00:14.559 --> 00:00:20.960
+It's basically a bad pun on band camp.
+
+00:00:20.960 --> 00:00:22.480
+A bivouac--I don't even know if I'm
+
+00:00:22.480 --> 00:00:25.199
+pronouncing that correctly--it's like
+
+00:00:25.199 --> 00:00:29.199
+a tent or a camp that you put up hastily,
+
+00:00:29.199 --> 00:00:32.239
+and a bard is a musician, of course.
+
+00:00:32.239 --> 00:00:36.480
+Yeah, I don't know. I like puns. I'm a dad.
+
+00:00:36.480 --> 00:00:40.960
+That's the best I could come up with.
+
+00:00:40.960 --> 00:00:42.879
+I'll probably find a different name for
+
+00:00:42.879 --> 00:00:45.039
+it but I liked that "bivoaucs,"
+
+00:00:45.039 --> 00:00:48.719
+if you stick an m in there, it becomes
+Bivou(m)acs.
+
+00:00:48.719 --> 00:01:00.160
+It's kind of like editor macros for
+generating some HTML.
+
+00:01:00.160 --> 00:01:07.782
+Yes, it is confusing, chatting on IRC at
+the same time. Great question.
+
+00:01:07.782 --> 00:01:11.398
+(Amin: Grant, so right now, you're
+sharing your screen.
+
+00:01:11.398 --> 00:01:14.479
+Are you planning on showing something
+with it, or for example,
+
+00:01:14.479 --> 00:01:16.036
+should I maximize you?)
+
+00:01:16.036 --> 00:01:20.400
+I don't know. I can turn it off for now.
+Okay.
+
+00:01:20.400 --> 00:01:22.299
+(Amin: You can turn on the webcam.)
+
+00:01:22.299 --> 00:01:22.880
+Yeah, okay.
+
+00:01:22.880 --> 00:01:25.694
+(Amin: I'll maximize your webcam.)
+
+00:01:25.694 --> 00:01:28.240
+Okay, thanks.
+
+00:01:28.240 --> 00:01:30.000
+I'll get to the answer for my color
+
+00:01:30.000 --> 00:01:31.360
+theme here in a bit in IRC.
+
+00:01:31.360 --> 00:01:35.105
+Next question on the Etherpad,
+
+00:01:35.105 --> 00:01:38.479
+does this metadata workflow also support
+
+00:01:38.479 --> 00:01:41.360
+unsynchronized lyrics within ID3 tags,
+
+00:01:41.360 --> 00:01:42.720
+multi-line metadata?
+
+00:01:42.720 --> 00:01:45.920
+I don't know, actually.
+
+00:01:45.920 --> 00:01:47.920
+It's funny because I was trying out
+
+00:01:47.920 --> 00:01:49.280
+different things with metadata,
+
+00:01:49.280 --> 00:01:52.640
+and really the biggest thing was to
+
+00:01:52.640 --> 00:01:55.360
+figure out how to do mass tag editing.
+
+00:01:55.360 --> 00:01:56.399
+And that was like...
+
+00:01:56.399 --> 00:01:59.600
+It wasn't very intuitive, like I said,
+with EMMS.
+
+00:01:59.600 --> 00:02:03.040
+I think EMMS is really great, but its
+interface is huge.
+
+00:02:03.040 --> 00:02:07.040
+like if you do M-x and type emms,
+you get,
+
+00:02:07.040 --> 00:02:10.160
+I don't know, 270-some candidates.
+
+00:02:10.160 --> 00:02:13.200
+There's a lot of functions going on.
+
+00:02:13.200 --> 00:02:18.879
+I basically found the features that I
+needed to get this workflow working.
+
+00:02:18.879 --> 00:02:22.160
+I would guess that you probably can do
+it, and if you don't,
+
+00:02:22.160 --> 00:02:24.026
+if you can't do it out of the box,
+
+00:02:24.026 --> 00:02:28.160
+I think you could script EMMS
+to do that.
+
+00:02:28.160 --> 00:02:33.268
+I'd like to know more, and I'm certainly
+going to be investigating it.
+
+00:02:33.268 --> 00:02:39.519
+I will try and post my findings
+somewhere online.
+
+00:02:39.519 --> 00:02:42.080
+Is it possible to import batch metadata?
+
+00:02:42.080 --> 00:02:46.496
+I'm not sure. I would guess yes is the
+answer.
+
+00:02:46.496 --> 00:02:50.712
+EMMS can connect to metadata services.
+
+00:02:50.712 --> 00:02:53.040
+I haven't done that because I was just
+
+00:02:53.040 --> 00:02:56.959
+using audio files that I created myself.
+
+00:02:56.959 --> 00:03:00.165
+I know that on the back end, it calls out
+
+00:03:00.165 --> 00:03:02.319
+to shell programs for tagging things.
+
+00:03:02.319 --> 00:03:06.165
+There's a lot of different options that can
+shell out too.
+
+00:03:06.165 --> 00:03:12.239
+I was using the vorbis tools to tag the
+particular files I was working with.
+
+00:03:12.239 --> 00:03:15.840
+You can also use tiny tag, and there's
+some other...
+
+00:03:15.840 --> 00:03:17.498
+That might be the python library.
+
+00:03:17.498 --> 00:03:20.971
+I can't remember. There's two other
+libraries that I can shell out to
+
+00:03:20.971 --> 00:03:24.400
+for doing metadata.
+
+00:03:24.400 --> 00:03:26.400
+My current workflow for tagging music is
+
+00:03:26.400 --> 00:03:29.040
+to first apply replay gain in fubar 2000,
+
+00:03:29.040 --> 00:03:31.119
+fix egregious mistakes,
+
+00:03:31.119 --> 00:03:35.118
+use beats to apply metadata from music
+brains or discogs,
+
+00:03:35.118 --> 00:03:38.400
+go over remaining albums with fubar 2000
+again.
+
+00:03:38.400 --> 00:03:43.280
+Is there a chance textual tagging
+could allow doing it all in one program?
+
+00:03:43.280 --> 00:03:46.400
+Have I experimented with mass tag
+update queries?
+
+00:03:46.400 --> 00:03:47.280
+I have not.
+
+00:03:47.280 --> 00:03:49.120
+Again, I was just doing this workflow,
+
+00:03:49.120 --> 00:03:54.799
+taking raw files with no tags and doing that.
+
+00:03:54.799 --> 00:03:58.159
+I believe because it calls out to
+
+00:03:58.159 --> 00:04:00.811
+the programs in the back end,
+
+00:04:00.811 --> 00:04:03.040
+I'm sure you could work that out.
+
+00:04:03.040 --> 00:04:06.159
+I think EMMS would benefit from
+
+00:04:06.159 --> 00:04:08.239
+having something like that because
+
+00:04:08.239 --> 00:04:11.280
+we work with text, and being able
+
+00:04:11.280 --> 00:04:14.000
+to use Emacs as a front end for those
+
+00:04:14.000 --> 00:04:16.647
+updates would be really fantastic.
+
+00:04:16.647 --> 00:04:18.560
+So really, it's just a matter of
+
+00:04:18.560 --> 00:04:22.720
+writing the interface to the external tool.
+
+00:04:22.720 --> 00:04:24.560
+Is there a link to some info expanding
+
+00:04:24.560 --> 00:04:28.479
+philosophy of how to compensate
+musicians?
+
+00:04:28.479 --> 00:04:31.199
+No, I don't really have a lot of
+
+00:04:31.199 --> 00:04:32.052
+philosophy around that.
+
+00:04:32.052 --> 00:04:33.919
+I guess the first thing
+I could say would be
+
+00:04:33.919 --> 00:04:36.378
+something like a universal income.
+
+00:04:36.378 --> 00:04:38.960
+I feel like that would solve
+a lot of problems,
+
+00:04:38.960 --> 00:04:41.772
+if musicians could just be musicians
+
+00:04:41.772 --> 00:04:44.742
+and not have to worry about their pay.
+
+00:04:44.742 --> 00:04:46.240
+I will think about it more.
+
+00:04:46.240 --> 00:04:52.015
+This is one of my first forays into
+getting public with some of these ideas,
+
+00:04:52.015 --> 00:04:53.360
+so I will try to do more
+
+00:04:53.360 --> 00:04:55.187
+and let the community know.
+
+00:04:55.187 --> 00:04:57.199
+What Emacs theme am I using?
+
+00:04:57.199 --> 00:05:02.240
+Can't remember. It's one of the Kaolin themes.
+
+00:05:02.240 --> 00:05:05.680
+I think it was Aurora
+
+00:05:05.680 --> 00:05:09.120
+or Bubble Gum, maybe, but the
+
+00:05:09.120 --> 00:05:12.880
+Kaolin themes are nice. I recommend them.
+
+00:05:12.880 --> 00:05:16.000
+Not using Doom Emacs, Doom mode line though.
+
+00:05:16.000 --> 00:05:17.296
+It's very pretty.
+
+00:05:17.296 --> 00:05:20.080
+SVG support built into Emacs?
+
+00:05:20.080 --> 00:05:25.520
+I'm using Emacs 27.1, and yes, SVG
+support is built in.
+
+00:05:25.520 --> 00:05:30.639
+I may have had to compile it with some
+Cairo support.
+
+00:05:30.639 --> 00:05:33.840
+I don't remember for sure.
+
+00:05:33.840 --> 00:05:41.199
+But yes, you can even take screenshots
+of your Emacs from within Emacs, in SVG.
+
+00:05:41.199 --> 00:05:44.320
+It's pretty great.
+
+00:05:44.320 --> 00:05:46.160
+I don't know how much more time we have
+
+00:05:46.160 --> 00:05:48.000
+left for questions.
+
+00:05:48.000 --> 00:05:52.639
+That's most of the things on the etherpad.
+
+00:05:52.639 --> 00:05:54.320
+(Amin: I think we have like 10 more minutes to
+
+00:05:54.320 --> 00:05:56.479
+catch up with the schedule.
+
+00:05:56.479 --> 00:05:59.120
+If there are more questions,
+
+00:05:59.120 --> 00:06:01.919
+feel free to answer them.)
+
+00:06:01.919 --> 00:06:05.440
+I'll start looking through IRC.
+
+00:06:05.440 --> 00:06:09.680
+(Amin: And keep an eye on the pad too.)
+
+00:06:09.680 --> 00:06:12.688
+Thank you all for listening
+
+00:06:12.688 --> 00:06:19.440
+and for enjoying the talk. I'm glad it
+turned out well.
+
+00:06:19.440 --> 00:06:36.000
+Awesome. Yeah, it's been fun so far.
+
+00:06:36.000 --> 00:06:40.015
+How did I manage? I can post
+a snippet of that,
+
+00:06:40.015 --> 00:06:46.319
+or actually I can share my screen,
+can't I...
+
+00:06:46.319 --> 00:06:49.599
+Okay. I actually have it up right here.
+
+00:06:49.599 --> 00:06:53.440
+So I think I got this from alphapapa, to
+be honest.
+
+00:06:53.440 --> 00:07:00.960
+I define screenshot-svg.
+
+00:07:00.960 --> 00:07:04.960
+It's an interactive command. Oh yeah,
+there's alphapapa.
+
+00:07:04.960 --> 00:07:08.560
+Okay, there we go.
+
+00:07:08.560 --> 00:07:13.249
+I would like to change this so that I
+can get it into the copy-paste buffer
+
+00:07:13.249 --> 00:07:20.560
+so I don't have to copy the file in, but
+I haven't really hacked on it yet.
+
+00:07:20.560 --> 00:07:24.400
+Okay, org heading colors.
+
+00:07:24.400 --> 00:07:26.319
+That might be a good question.
+
+00:07:26.319 --> 00:07:33.199
+I know, the presentation...
+
+00:07:33.199 --> 00:07:35.520
+Sorry, it's hard to think and type at
+
+00:07:35.520 --> 00:07:36.479
+the same time.
+
+00:07:36.479 --> 00:07:41.680
+Think and talk and type.
+
+00:07:41.680 --> 00:07:45.120
+So the presentation is just a
+
+00:07:45.120 --> 00:07:48.960
+normal org file, right, so I have my headers,
+
+00:07:48.960 --> 00:07:50.466
+and the author--you can even stick
+
+00:07:50.466 --> 00:07:52.560
+your email and other headers in there.
+
+00:07:52.560 --> 00:07:57.599
+But there's a package called org-tree-slide.
+
+00:07:57.599 --> 00:08:01.440
+Whoops, why is it not...
+
+00:08:01.440 --> 00:08:03.618
+I must have not required it.
+
+00:08:03.618 --> 00:08:04.594
+Good question.
+
+00:08:04.594 --> 00:08:09.599
+(Amin: Grant, can you try sharing your
+screen maybe?)
+
+00:08:09.599 --> 00:08:13.199
+Oh, is it not shared? I'm sorry.
+
+00:08:13.199 --> 00:08:17.039
+(Amin: Thank you.)
+
+00:08:17.039 --> 00:08:22.000
+There we go, should be coming up.
+
+00:08:22.000 --> 00:08:26.720
+(Amin: It's coming up. Yep, we see it.)
+
+00:08:26.720 --> 00:08:38.800
+Awesome. All right. Okay. I don't know
+why this isn't working.
+
+00:08:38.800 --> 00:08:56.080
+It was working.
+
+00:08:56.080 --> 00:09:01.839
+Okay, you want to see the screenshot.
+
+00:09:01.839 --> 00:09:06.839
+Whoops. Okay, I just took a screenshot.
+
+00:09:06.839 --> 00:09:09.760
+So, org-tree-slide.
+
+00:09:09.760 --> 00:09:12.800
+I don't know why it's not launching.
+
+00:09:12.800 --> 00:09:16.000
+I thought that I had required it, but I
+must not have.
+
+00:09:16.000 --> 00:09:30.959
+Maybe I'll try. Okay.
+
+00:09:30.959 --> 00:09:34.560
+So there we go. So org-tree-slide is a
+way that basically uses
+
+00:09:34.560 --> 00:09:38.880
+narrowing and some kind of font tricks to...
+
+00:09:38.880 --> 00:09:42.640
+it changes your titles
+or your metadata into
+
+00:09:42.640 --> 00:09:44.560
+this banner for the title here,
+
+00:09:44.560 --> 00:09:46.560
+and it automatically sets the
+faces for you.
+
+00:09:46.560 --> 00:09:53.938
+You can customize that, of course. And
+then, as you go through the Org file,
+
+00:09:53.938 --> 00:09:59.600
+you get these kind of nice animations
+and--
+
+00:09:59.600 --> 00:10:04.160
+what's it called--breadcrumbs up at the top.
+
+00:10:04.160 --> 00:10:06.399
+So org-tree-slide. I highly recommend it.
+
+00:10:06.399 --> 00:10:10.024
+It's really nice because you can give
+your presentation and practice it,
+
+00:10:10.024 --> 00:10:12.560
+and while you're practicing it, you can
+edit things as well,
+
+00:10:12.560 --> 00:10:16.160
+because it's still just an Org document
+using narrowing, you know.
+
+00:10:16.160 --> 00:10:20.079
+It doesn't actually change anything.
+
+00:10:20.079 --> 00:10:24.079
+Definitely recommend org-tree-slide mode.
+
+00:10:24.079 --> 00:10:29.760
+Okay, let's see, what else...
+
+00:10:29.760 --> 00:10:32.880
+Share my screen to demo. Oh, that's the SVG.
+
+00:10:32.880 --> 00:10:39.519
+Let's see.
+
+00:10:39.519 --> 00:10:41.279
+Okay, so I don't know if you can see this now,
+
+00:10:41.279 --> 00:10:49.360
+but I'm actually viewing the SVG
+screenshot that I took with Emacs.
+
+00:10:49.360 --> 00:10:52.720
+See here's the source of it. So Emacs
+made that.
+
+00:10:52.720 --> 00:10:58.160
+And here's the image.
+
+00:10:58.160 --> 00:11:01.570
+It's cool because you can even do it
+again and again,
+
+00:11:01.570 --> 00:11:05.360
+and open more screenshots of
+screenshots.
+
+00:11:05.360 --> 00:11:14.880
+Yeah, definitely Emacsception.
+Fun stuff.
+
+00:11:14.880 --> 00:11:18.079
+Anything else in chat?
+
+00:11:18.079 --> 00:11:20.160
+Heading colors? Oh, yeah. I talked about the
+
+00:11:20.160 --> 00:11:24.800
+themes. This is another Kaolin theme.
+
+00:11:24.800 --> 00:11:34.959
+I think the one in the talk was
+maybe this one, Aurora.
+
+00:11:34.959 --> 00:11:36.560
+Oh, here, there's something funny when
+
+00:11:36.560 --> 00:11:37.785
+you start org-tree-slide
+
+00:11:37.785 --> 00:11:38.880
+with a different theme.
+
+00:11:38.880 --> 00:11:41.823
+This top header bar gets the faces
+
+00:11:41.823 --> 00:11:43.395
+from that previous theme.
+
+00:11:43.395 --> 00:11:47.760
+I have not figured out how to
+fix that yet.
+
+00:11:47.760 --> 00:11:49.200
+Did I have to compile to get the
+
+00:11:49.200 --> 00:11:51.120
+screenshot? I think maybe I did.
+
+00:11:51.120 --> 00:11:54.480
+Yes, if I'm remembering correctly.
+
+00:11:54.480 --> 00:11:58.399
+I got Emacs 27. I'm not on a Mac.
+
+00:11:58.399 --> 00:12:01.424
+I saw alphapapa's comment on reddit,
+
+00:12:01.424 --> 00:12:08.839
+and then I recompiled it with Cairo
+support.
+
+00:12:08.839 --> 00:12:18.000
+Yes.
+
+00:12:18.000 --> 00:12:21.920
+Okay, lots of good conversation on here.
+
+00:12:21.920 --> 00:12:25.839
+Yep, I have like one or two more minutes.
+
+00:12:25.839 --> 00:12:34.240
+Okay. I guess while I'm here, I might as
+
+00:12:34.240 --> 00:12:36.993
+well say thank you to the organizers.
+
+00:12:36.993 --> 00:12:40.320
+I really appreciate everybody's
+work on this.
+
+00:12:40.320 --> 00:12:42.720
+It's fun to be a part of this community.
+
+00:12:42.720 --> 00:12:45.929
+I'm enjoying the other talks I've seen
+so far today,
+
+00:12:45.929 --> 00:12:48.560
+and I'm looking forward to
+to the rest.
+
+00:12:48.560 --> 00:12:53.570
+It's really interesting, just from being
+on Emacs in IRC for a few months,
+
+00:12:53.570 --> 00:12:54.720
+I've already connected
+
+00:12:54.720 --> 00:12:56.959
+with a lot of interesting people
+
+00:12:56.959 --> 00:13:04.079
+and have a lot of cool connections
+already.
+
+00:13:04.079 --> 00:13:07.519
+(Amin: Thank you for being a part of the
+community, Grant.)
+
+00:13:07.519 --> 00:13:08.883
+That's good to be here.
+
+00:13:08.883 --> 00:13:16.560
+I have another talk tomorrow as well.
+
+00:13:16.560 --> 00:13:18.399
+Oh, thanks for everyone in the Etherpad
+
+00:13:18.399 --> 00:13:21.680
+for putting more comments on these
+questions here
+
+00:13:21.680 --> 00:13:29.360
+and taking the notes.
+
+00:13:29.360 --> 00:13:31.680
+(Amin: I think that's about all the time
+
+00:13:31.680 --> 00:13:33.040
+that we have for the Q&A.
+
+00:13:33.040 --> 00:13:36.720
+Okay. Thank you again so much, Grant,
+
+00:13:36.720 --> 00:13:39.920
+for your awesome talk and for popping in
+for questions.)
+
+00:13:39.920 --> 00:13:46.800
+Yeah, thanks again for hosting. See you
+later. Cheers!
diff --git a/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt b/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt
new file mode 100644
index 00000000..588cf43a
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--06-trivial-emacs-kits--corwin-brust.vtt
@@ -0,0 +1,792 @@
+WEBVTT
+
+00:00:00.399 --> 00:00:02.683
+My name is Corwin Brust
+
+00:00:02.683 --> 00:00:08.960
+and I will be talking about getting
+started with Emacs today.
+
+00:00:08.960 --> 00:00:11.448
+I have been an Emacs user for a long
+time.
+
+00:00:11.448 --> 00:00:15.360
+First of all, thanks and a huge welcome
+to the conference
+
+00:00:15.360 --> 00:00:22.400
+from me and and on behalf
+
+00:00:22.400 --> 00:00:24.368
+and back to the other people
+
+00:00:24.368 --> 00:00:26.080
+that have been helping to organize.
+
+00:00:26.080 --> 00:00:30.480
+It's been amazing just to be involved
+
+00:00:30.480 --> 00:00:36.399
+with that and just, kind of, see
+backstage.
+
+00:00:36.399 --> 00:00:42.281
+So I've used a lot of different editors
+in my time.
+
+00:00:42.281 --> 00:00:52.399
+That's about 25 years as a professional
+software engineer.
+
+00:00:52.399 --> 00:00:54.247
+And most of that time I've been using
+Emacs.
+
+00:00:54.247 --> 00:00:56.160
+I'll talk a little bit in a minute
+
+00:00:56.160 --> 00:01:00.960
+(if I can ever find my slides)
+
+00:01:00.960 --> 00:01:04.479
+about how I got into Emacs,
+
+00:01:04.479 --> 00:01:07.200
+but I think if you've used Emacs and a
+
+00:01:07.200 --> 00:01:10.240
+lot of other editors for a long time,
+
+00:01:10.240 --> 00:01:14.410
+something that you notice right away
+
+00:01:14.410 --> 00:01:18.560
+is that you get good with it in a way
+that stays meaningful.
+
+00:01:18.560 --> 00:01:24.199
+You learn new things. Those things
+stick with you.
+
+00:01:24.199 --> 00:01:33.759
+You learn how to make it do new tricks
+and then keep doing those tricks.
+
+00:01:33.759 --> 00:01:39.439
+I want to mention that this
+conference--oops,
+
+00:01:39.439 --> 00:01:44.829
+this talk isn't about how to adjust
+
+00:01:44.829 --> 00:01:46.802
+your configuration specifically.
+
+00:01:46.802 --> 00:01:50.000
+I don't have a bunch of good code
+samples in here.
+
+00:01:50.000 --> 00:01:52.451
+There are other great talks at the
+conference,
+
+00:01:52.451 --> 00:01:56.411
+particularly Andrew's, that I looked at,
+
+00:01:56.411 --> 00:01:59.920
+that looked like they might be more
+aimed at that
+
+00:01:59.920 --> 00:02:02.240
+"hey, I'm just getting started with Emacs,
+
+00:02:02.240 --> 00:02:05.280
+what are some things to try to make
+
+00:02:05.280 --> 00:02:07.017
+it more comfortable for me starting?"
+
+00:02:07.017 --> 00:02:09.759
+This is about how to think about the
+problem space.
+
+00:02:09.759 --> 00:02:13.337
+Hopefully, a good warm up as we start
+thinking about
+
+00:02:13.337 --> 00:02:17.200
+some of the lightning talks a little
+later on.
+
+00:02:17.200 --> 00:02:19.835
+I'm just gonna quickly make sure
+
+00:02:19.835 --> 00:02:21.789
+I can see my IRC buffer in case
+
+00:02:21.789 --> 00:02:25.680
+I run into time. I didn't get my
+stopwatch started for this one.
+
+00:02:25.680 --> 00:02:29.680
+So all right, let's dive in.
+
+00:02:29.680 --> 00:02:33.840
+We assume that we want to
+install packages
+
+00:02:33.840 --> 00:02:36.281
+and maybe configure some features.
+
+00:02:36.281 --> 00:02:38.319
+This is particularly from the
+perspective of
+
+00:02:38.319 --> 00:02:39.120
+where we're working
+
+00:02:39.120 --> 00:02:40.541
+with a bunch of people on a team
+
+00:02:40.541 --> 00:02:42.160
+and we want to get something done.
+
+00:02:42.160 --> 00:02:44.800
+Some of us probably already have mature
+
+00:02:44.800 --> 00:02:46.560
+Emacs workflows.
+
+00:02:46.560 --> 00:02:53.519
+Others are installing it for the first
+time.
+
+00:02:53.519 --> 00:02:57.889
+So the first question is, you know, in
+that context:
+
+00:02:57.889 --> 00:02:59.784
+what's the value proposition?
+
+00:02:59.784 --> 00:03:01.532
+Why should I mess with my machine,
+
+00:03:01.532 --> 00:03:04.219
+my mature Emacs configuration,
+
+00:03:04.219 --> 00:03:09.815
+and impose my ideas over the way
+somebody else is learning Emacs?
+
+00:03:09.815 --> 00:03:13.840
+Well, it can be.. I'm off my slides here
+a little bit.
+
+00:03:13.840 --> 00:03:16.959
+It can be a little bit tricky
+
+00:03:16.959 --> 00:03:21.440
+to learn Emacs. One thing that
+helps us a lot
+
+00:03:21.440 --> 00:03:24.720
+is if people that we're working with
+
+00:03:24.720 --> 00:03:27.301
+can tell us, kinda, keystroke for
+keystroke at times,
+
+00:03:27.301 --> 00:03:30.480
+what to do and explain what everything
+is doing.
+
+00:03:30.480 --> 00:03:35.840
+Using the same packages can really help
+us working together on a project.
+
+00:03:35.840 --> 00:03:40.720
+Speaking from my personal experience,
+
+00:03:40.720 --> 00:03:42.959
+it took me decades to get to the point
+
+00:03:42.959 --> 00:03:45.226
+where I was excited to program
+in Emacs Lisp.
+
+00:03:45.226 --> 00:03:47.840
+I've programmed in a lot of programming
+languages,
+
+00:03:47.840 --> 00:03:50.252
+but Lisp wasn't on my list.
+
+00:03:50.252 --> 00:03:53.680
+I looked at my config that I was
+copy-pasting around
+
+00:03:53.680 --> 00:03:57.279
+from generation after generation of
+.emacs file,
+
+00:03:57.279 --> 00:04:00.799
+or recrafting it from hand and from
+Internet searches,
+
+00:04:00.799 --> 00:04:03.519
+to get the things that I needed when
+
+00:04:03.519 --> 00:04:05.680
+I would quickly go install Emacs at some
+
+00:04:05.680 --> 00:04:07.680
+new job or contract,
+
+00:04:07.680 --> 00:04:14.016
+and be able to to quickly get through
+that workflow
+
+00:04:14.016 --> 00:04:17.440
+that caused me to install the program.
+
+00:04:17.440 --> 00:04:24.049
+You know, just little simple one-liners
+that got committed to memory
+
+00:04:24.049 --> 00:04:27.675
+over decades eventually just led me to a
+sort of "hey what's going on here."
+
+00:04:27.675 --> 00:04:33.520
+And I credit Jeff Goff, my good friend
+who died earlier in 2020,
+
+00:04:33.520 --> 00:04:37.759
+for my lifelong love of Emacs.
+
+00:04:37.759 --> 00:04:39.280
+Perhaps Erik and I will talk about that
+
+00:04:39.280 --> 00:04:42.000
+a little bit more in another talk we
+have scheduled,
+
+00:04:42.000 --> 00:04:44.400
+but Jeff was a huge influence on us
+
+00:04:44.400 --> 00:04:46.027
+in a number of ways,
+
+00:04:46.027 --> 00:04:47.732
+and a huge contributor
+
+00:04:47.732 --> 00:04:54.840
+to the Raku programming language,
+which is very cool.
+
+00:04:54.840 --> 00:05:00.153
+So, understanding how to make
+a good decision
+
+00:05:00.153 --> 00:05:03.680
+about splitting up configuration in a
+way to share it across
+
+00:05:03.680 --> 00:05:06.292
+people with really different uses of
+Emacs...
+
+00:05:06.292 --> 00:05:08.546
+That's actually a complicated topic
+
+00:05:08.546 --> 00:05:12.639
+and I want to sort of back off and stare
+at it for a second.
+
+00:05:12.639 --> 00:05:18.720
+I think Emacs is about people, so that
+means it's about community.
+
+00:05:18.720 --> 00:05:24.960
+And community means we're going to
+invite disagreement.
+
+00:05:24.960 --> 00:05:32.687
+In fact, that disagreement isn't
+necessarily a road-block to our project.
+
+00:05:32.687 --> 00:05:37.759
+In fact, some of the work that a
+community project can invite us to do
+
+00:05:37.759 --> 00:05:39.505
+is to get closer to each other
+
+00:05:39.505 --> 00:05:40.840
+by inviting those disagreements,
+
+00:05:40.840 --> 00:05:42.080
+by learning from them--learning from
+
+00:05:42.080 --> 00:05:46.880
+different people's styles and from how
+they argue,
+
+00:05:46.880 --> 00:05:50.058
+and thinking about why they have that
+perspective
+
+00:05:50.058 --> 00:05:53.227
+and what technical benefits
+
+00:05:53.227 --> 00:05:55.800
+that perhaps radical point of view might
+carry away.
+
+00:05:55.800 --> 00:05:58.266
+Some people are really aggressive
+arguers,
+
+00:05:58.266 --> 00:06:01.919
+and others are very passive and really
+
+00:06:01.919 --> 00:06:05.824
+couch their ideas in distancing terms,
+to say,
+
+00:06:05.824 --> 00:06:07.906
+"well probably, this is a good idea"
+
+00:06:07.906 --> 00:06:12.479
+or "please double check me."
+
+00:06:12.479 --> 00:06:15.520
+Those don't always necessarily indicate
+
+00:06:15.520 --> 00:06:17.497
+how certain a person is,
+because we're different.
+
+00:06:17.497 --> 00:06:19.520
+We have different ways of communicating
+
+00:06:19.520 --> 00:06:23.380
+ideas like certainty or excitement.
+
+00:06:24.560 --> 00:06:26.235
+When we think about a bunch of
+
+00:06:26.235 --> 00:06:30.000
+really diverse programmers
+approaching Emacs,
+
+00:06:30.000 --> 00:06:36.479
+probably one of our first really big
+challenges is just
+
+00:06:36.479 --> 00:06:40.085
+to pick what we're going
+to go after.
+
+00:06:40.085 --> 00:06:49.599
+There are a lot of existing kit installs
+and things like this.
+
+00:06:49.599 --> 00:06:54.400
+My argument is that you could actually
+get pretty far
+
+00:06:54.400 --> 00:06:56.020
+just trading files around.
+
+00:06:56.020 --> 00:07:03.698
+Maybe the more valuable conversation
+to have
+
+00:07:03.698 --> 00:07:06.080
+is making the hard decisions
+about, well,
+
+00:07:06.080 --> 00:07:08.000
+"should we have vertical completion,"
+
+00:07:08.000 --> 00:07:10.080
+should that be the out of the box,
+
+00:07:10.080 --> 00:07:11.759
+and the people that want
+
+00:07:11.759 --> 00:07:17.440
+the traditional splayed out over a
+single line completion,
+
+00:07:17.440 --> 00:07:19.428
+for example in the mode line,
+
+00:07:19.428 --> 00:07:29.039
+those people are going to add a line of
+config to their own setup?
+
+00:07:29.039 --> 00:07:30.979
+The way to get there?
+
+00:07:30.979 --> 00:07:33.344
+I mean, how do we find out what works?
+
+00:07:33.344 --> 00:07:38.587
+We don't want to slow down the people
+that are super productive with Emacs
+
+00:07:38.587 --> 00:07:40.879
+by asking them to completely
+break their workflows
+
+00:07:40.879 --> 00:07:42.560
+and make it easier for new folks.
+
+00:07:42.560 --> 00:07:48.673
+At the same time, we do want to make
+sure those new people
+
+00:07:48.673 --> 00:07:52.720
+are excited by Emacs and not turned off
+by having to learn
+
+00:07:52.720 --> 00:08:00.363
+the entire jungle of Emacs history in
+the form of its unique
+
+00:08:00.363 --> 00:08:07.610
+technical stylings for things like
+frames, buffers,
+
+00:08:07.610 --> 00:08:11.668
+and other unique Emacs viewpoints
+
+00:08:11.668 --> 00:08:16.240
+on important interface concepts,
+especially.
+
+00:08:16.240 --> 00:08:19.520
+The encouragement here is to keep
+
+00:08:19.520 --> 00:08:21.680
+the initialization for a project team
+
+00:08:21.680 --> 00:08:23.280
+together as a crucible.
+
+00:08:23.280 --> 00:08:25.117
+Rather than necessarily following
+
+00:08:25.117 --> 00:08:33.279
+our defaults of finding the simplest
+configurations
+
+00:08:33.279 --> 00:08:37.440
+that generally work and letting people
+customize it,
+
+00:08:37.440 --> 00:08:40.479
+what if we tried to look
+
+00:08:40.479 --> 00:08:42.346
+for fairly specific configurations
+
+00:08:42.346 --> 00:08:44.159
+that we'll expect essentially all of our
+
+00:08:44.159 --> 00:08:46.320
+developers to be using,
+
+00:08:46.320 --> 00:08:52.839
+at least when they submit bug reports.
+
+00:08:52.839 --> 00:08:55.920
+In particular, with this,
+
+00:08:55.920 --> 00:08:59.839
+I think that degree of experimentation
+
+00:08:59.839 --> 00:09:02.584
+can drive back into the Emacs
+development process.
+
+00:09:02.584 --> 00:09:04.800
+In the development mailing list...
+
+00:09:04.800 --> 00:09:15.120
+I'm hoping I'll get a timing cue here.
+
+00:09:15.120 --> 00:09:18.835
+In the context of Emacs development as a
+greater entity,
+
+00:09:18.835 --> 00:09:20.959
+we see some of these struggles.
+
+00:09:20.959 --> 00:09:22.399
+Should we change this default?
+
+00:09:22.399 --> 00:09:27.146
+Sometimes we can have the sense that
+defaults in Emacs will never change.
+
+00:09:27.146 --> 00:09:29.279
+The conversation is too difficult.
+
+00:09:29.279 --> 00:09:32.560
+I think one thing that can help us get
+there is evidence
+
+00:09:32.560 --> 00:09:36.160
+that says, "hey my 30- to 40-person project
+
+00:09:36.160 --> 00:09:38.560
+is using this set of bindings,
+
+00:09:38.560 --> 00:09:40.111
+and here's what we learned
+
+00:09:40.111 --> 00:09:42.240
+about brand new Emacs users
+trying to come in
+
+00:09:42.240 --> 00:09:46.800
+and get work done with that."
+
+00:09:46.800 --> 00:09:49.360
+(Amin: Yeah you still have
+
+00:09:49.360 --> 00:09:50.720
+a couple more minutes.)
+
+00:09:50.720 --> 00:09:51.984
+Oh, beautiful. Okay, great.
+
+00:09:51.984 --> 00:09:54.720
+I will try to get through my last few
+slides that I cut
+
+00:09:54.720 --> 00:09:56.320
+in my last walkthrough, but I think I'm
+
+00:09:56.320 --> 00:09:58.320
+going quicker today, thank you.
+
+00:09:58.320 --> 00:10:02.000
+Thank you.
+
+00:10:02.000 --> 00:10:05.120
+So let's just recap real quick:
+
+00:10:05.120 --> 00:10:08.760
+in theory, Emacs works out of the box.
+
+00:10:08.760 --> 00:10:12.853
+That means we're free to experiment.
+
+00:10:12.853 --> 00:10:17.120
+We can throw it all away and start over.
+
+00:10:17.120 --> 00:10:26.000
+As an organizational principle...
+
+00:10:26.000 --> 00:10:30.079
+I don't know what I was thinking on that
+slide, excuse me.
+
+00:10:30.079 --> 00:10:33.440
+Bringing it back around to the free
+
+00:10:33.440 --> 00:10:35.680
+and open source software community,
+
+00:10:35.680 --> 00:10:39.519
+our goal is to enable users
+
+00:10:39.519 --> 00:10:41.440
+to unlock their computers, to do as much
+
+00:10:41.440 --> 00:10:43.040
+with them as possible.
+
+00:10:43.040 --> 00:10:47.680
+That's the context to take with project
+initialization, but sometimes
+
+00:10:47.680 --> 00:10:49.560
+it could make sense
+
+00:10:50.800 --> 00:10:52.032
+to put some gloves on.
+
+00:10:52.032 --> 00:10:53.766
+I've thrown up on the screen here
+
+00:10:53.766 --> 00:10:55.276
+just a couple of other ideas,
+
+00:10:55.276 --> 00:10:57.920
+ways to maybe think outside of the box.
+
+00:10:57.920 --> 00:11:01.440
+As you're putting together project nets,
+
+00:11:01.440 --> 00:11:05.519
+my words of encouragement are to
+experiment with it,
+
+00:11:05.519 --> 00:11:09.941
+try different things, and think really
+specifically
+
+00:11:09.941 --> 00:11:17.010
+about how different the development
+users might be from each other
+
+00:11:17.010 --> 00:11:21.680
+as you define standards for configuring
+
+00:11:21.680 --> 00:11:23.519
+the user environment of Emacs
+
+00:11:23.519 --> 00:11:26.552
+specifically for developing on a
+project.
+
+00:11:26.552 --> 00:11:29.120
+That's pretty much my talk.
+
+00:11:29.120 --> 00:11:32.959
+If there's any time, I would take a
+couple questions.
+
+00:11:32.959 --> 00:11:36.480
+(Amin: Thank you for your
+awesome talk, Corwin.
+
+00:11:36.480 --> 00:11:49.519
+I think we have one or two minutes for a
+few questions.
+
+00:11:49.519 --> 00:11:52.000
+Do you have the pad open or would you
+
+00:11:52.000 --> 00:11:53.839
+like me to read the questions for you?)
+
+00:11:53.839 --> 00:11:58.000
+Corwin: Oh, I managed to close the pad
+
+00:11:58.000 --> 00:12:00.352
+and I am trying to open it again.
+
+00:12:00.352 --> 00:12:03.519
+All right, there it opened.
+
+00:12:03.519 --> 00:12:05.500
+Bringing it onto a screen where I can
+see it.
+
+00:12:05.500 --> 00:12:09.360
+Will you read me the first question
+while I drag windows around, please?
+
+00:12:09.360 --> 00:12:15.600
+(Amin: Sure. It says, "do you use Emacs
+as a community building tool?")
+
+00:12:15.600 --> 00:12:19.760
+Do I use Emacs as a community building
+tool, or how do I?
+
+00:12:19.760 --> 00:12:23.519
+(Amin: It just says do you.) Yes, absolutely.
+
+00:12:23.519 --> 00:12:29.920
+I think Emacs is an ambassador to the
+GNU tool chain.
+
+00:12:29.920 --> 00:12:33.027
+I think that in the fullness of time,
+
+00:12:33.027 --> 00:12:36.558
+we will see an Emacs
+
+00:12:36.558 --> 00:12:43.760
+that makes iOS and Android and other
+closed-source tools dream.
+
+00:12:43.760 --> 00:12:46.689
+That's why they mock us and call Emacs
+
+00:12:46.689 --> 00:12:49.200
+an operating system. It's because
+
+00:12:49.200 --> 00:12:51.440
+it could be, if we cared for it to be.
+
+00:12:51.440 --> 00:12:55.680
+It's quite a threatening product
+
+00:12:55.680 --> 00:12:57.440
+from the perspective of how many problem
+
+00:12:57.440 --> 00:12:58.540
+spaces it can address,
+
+00:12:58.540 --> 00:13:01.519
+how many types of users it can satisfy,
+
+00:13:01.519 --> 00:13:04.399
+the things that we can do to make
+
+00:13:04.399 --> 00:13:06.456
+it robust in those environments.
+
+00:13:06.456 --> 00:13:09.524
+I mean, we're always thinking about the
+weak points,
+
+00:13:09.524 --> 00:13:14.639
+but is Emacs a community building tool?
+Heck yeah.
+
+00:13:14.639 --> 00:13:18.480
+(Amin: There's like one or two more
+questions.
+
+00:13:18.480 --> 00:13:22.480
+I think they're more long-form so it
+might be better
+
+00:13:22.480 --> 00:13:26.880
+if you took them off stream so you could
+keep the schedule on time.)
+
+00:13:26.880 --> 00:13:29.463
+I would love to take those questions
+offline.
+
+00:13:29.463 --> 00:13:30.908
+I will respond to you
+
+00:13:30.908 --> 00:13:32.237
+in writing if we don't get to it
+
+00:13:32.237 --> 00:13:33.360
+in a breakout room.
+
+00:13:33.360 --> 00:13:35.451
+Thanks so much for joining us.
+
+00:13:35.451 --> 00:13:36.639
+I can't wait to see the rest of the
+
+00:13:36.639 --> 00:13:38.000
+conference. See you there!
+
+00:13:38.000 --> 00:13:42.800
+(Amin: Awesome. Thank you again so much, Corwin.)
diff --git a/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt
new file mode 100644
index 00000000..ebe18254
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--questions--sid-kasivajhula.vtt
@@ -0,0 +1,353 @@
+WEBVTT
+
+00:00:00.080 --> 00:00:01.680
+(Amin: ... for the list of questions in whatever
+
+00:00:01.680 --> 00:00:03.520
+order you like.)
+
+00:00:03.520 --> 00:00:06.160
+Okay, so I see what package is used,
+
+00:00:06.160 --> 00:00:08.000
+probably symex-mode...
+
+00:00:08.000 --> 00:00:10.400
+Right. So the main package that was
+
+00:00:10.400 --> 00:00:11.360
+being demoed,
+
+00:00:11.360 --> 00:00:14.480
+that is not yet on MELPA. In fact, I
+
+00:00:14.480 --> 00:00:16.720
+haven't even decided on a name for it.
+
+00:00:16.720 --> 00:00:19.359
+I've alternately called
+
+00:00:19.359 --> 00:00:22.080
+it epistemic-mode, I've called it
+
+00:00:22.080 --> 00:00:26.000
+england, I called it
+
+00:00:26.000 --> 00:00:28.560
+all kinds of things, but at the moment
+
+00:00:28.560 --> 00:00:31.439
+you can find it on my Github. There's a link
+
+00:00:31.439 --> 00:00:32.960
+in the presentation itself, if you go to
+
+00:00:32.960 --> 00:00:35.600
+https://github.com/countvajhula, you'll see
+
+00:00:35.600 --> 00:00:38.879
+the package there. It's currently
+
+00:00:38.879 --> 00:00:39.840
+named Indra, but
+
+00:00:39.840 --> 00:00:42.879
+I'm not sure. (Organizer: Package is
+called rigpa.)
+
+00:00:42.879 --> 00:00:46.800
+Actually, yes, the second one is
+
+00:00:46.800 --> 00:00:49.920
+correct. That was the name that I selected
+
+00:00:49.920 --> 00:00:53.280
+last night. That's because it...
+
+00:00:53.920 --> 00:00:55.760
+There's a concept in Tibetan Buddhism
+
+00:00:55.760 --> 00:00:57.520
+that seems like it might have something
+
+00:00:57.520 --> 00:00:58.480
+to do with
+
+00:00:58.480 --> 00:00:59.840
+the kinds of concepts we're talking
+
+00:00:59.840 --> 00:01:01.600
+about with this package, so I just
+
+00:01:01.600 --> 00:01:04.000
+thought it would be a good name for it.
+
+00:01:04.000 --> 00:01:05.760
+You can look up that concept
+
+00:01:05.760 --> 00:01:09.920
+and get a sense of it on Wikipedia.
+
+00:01:09.920 --> 00:01:13.119
+Next question is "how to deal with Dvorak
+
+00:01:13.119 --> 00:01:15.759
+or however that's pronounced.
+
+00:01:15.759 --> 00:01:16.960
+This has always bugged me.
+
+00:01:16.960 --> 00:01:20.400
+Is there an Xmodmap mode?" So the thing
+
+00:01:20.400 --> 00:01:22.400
+with this is it's kind of surprising, but
+
+00:01:22.400 --> 00:01:23.360
+although Vim
+
+00:01:23.360 --> 00:01:26.000
+was originally developed
+
+00:01:26.000 --> 00:01:27.200
+with the idea of
+
+00:01:27.200 --> 00:01:29.520
+the key bindings being on the home row,
+
+00:01:29.520 --> 00:01:32.000
+it turns out that that is actually not a
+
+00:01:32.000 --> 00:01:33.119
+major aspect
+
+00:01:33.119 --> 00:01:36.400
+of the Vim editing experience, so
+
+00:01:36.400 --> 00:01:38.560
+people who use the Dvorak layout
+
+00:01:38.560 --> 00:01:40.720
+actually end up using the same keys as
+
+00:01:40.720 --> 00:01:42.640
+they do on the normal QWERTY layout, so
+
+00:01:42.640 --> 00:01:44.720
+they don't remap anything,
+
+00:01:44.720 --> 00:01:48.159
+because
+
+00:01:48.159 --> 00:01:51.040
+the power that Vim--or the
+
+00:01:51.040 --> 00:01:52.240
+flexibility, the
+
+00:01:52.240 --> 00:01:55.600
+spiral that Vim enables on QWERTY-layout
+
+00:01:55.600 --> 00:01:56.880
+keyboards is exactly
+
+00:01:56.880 --> 00:01:58.719
+preserved, even on a Dvorak keyboard,
+
+00:01:58.719 --> 00:01:59.920
+even though your
+
+00:01:59.920 --> 00:02:01.920
+fingers are not in the same positions.
+
+00:02:01.920 --> 00:02:04.399
+It's not a big deal, actually.
+
+00:02:04.399 --> 00:02:09.119
+"I mostly use default model
+
+00:02:09.119 --> 00:02:10.879
+provided by vanilla Emacs and work and
+
+00:02:10.879 --> 00:02:12.319
+Org Mode for text editing. Can you give
+
+00:02:12.319 --> 00:02:13.840
+me some examples
+
+00:02:13.840 --> 00:02:15.920
+of how the user can use the concept of
+
+00:02:15.920 --> 00:02:17.280
+"mode of mode"
+
+00:02:17.280 --> 00:02:20.840
+to do some interesting editing?
+
+00:02:20.840 --> 00:02:24.640
+Probably the main thing would be
+
+00:02:25.120 --> 00:02:27.920
+the keystrokes would be less
+
+00:02:27.920 --> 00:02:28.959
+contrived.
+
+00:02:28.959 --> 00:02:32.080
+The fewer modes you have,
+
+00:02:32.080 --> 00:02:36.560
+the more modifiers you need
+
+00:02:36.560 --> 00:02:39.840
+in order to do whatever it is that
+
+00:02:39.840 --> 00:02:41.280
+you're trying to do, because you've got,
+
+00:02:41.280 --> 00:02:44.800
+essentially, with the Emacs model, you've got
+
+00:02:44.800 --> 00:02:48.080
+a completely flat
+
+00:02:48.080 --> 00:02:50.959
+keyboard structure. So all of the
+
+00:02:50.959 --> 00:02:52.160
+different things that you might
+
+00:02:52.160 --> 00:02:55.680
+want to express are all mapped to a flat
+
+00:02:55.680 --> 00:02:58.720
+keyboard, a set of keys.
+
+00:02:58.720 --> 00:03:02.840
+With this kind of
+
+00:03:02.840 --> 00:03:06.400
+modal structure, the more modes you have,
+
+00:03:06.400 --> 00:03:09.200
+the more the individual keystrokes
+
+00:03:09.200 --> 00:03:10.400
+become
+
+00:03:10.400 --> 00:03:13.200
+shorter and shorter. That could be one
+
+00:03:13.200 --> 00:03:14.959
+benefit that would be provided.
+
+00:03:14.959 --> 00:03:17.519
+With many modes, your keystrokes would
+
+00:03:17.519 --> 00:03:18.000
+generally
+
+00:03:18.000 --> 00:03:20.080
+be a single keystroke long for even
+
+00:03:20.080 --> 00:03:22.080
+relatively complex tasks,
+
+00:03:22.080 --> 00:03:24.159
+because you're setting the context
+
+00:03:24.159 --> 00:03:25.440
+beforehand.
+
+00:03:25.440 --> 00:03:27.200
+So you already say, "Oh, I'm going to be
+
+00:03:27.200 --> 00:03:30.840
+talking about this Org buffer
+
+00:03:30.840 --> 00:03:33.440
+agenda," and then
+
+00:03:33.440 --> 00:03:36.319
+all the keystrokes that you do at
+
+00:03:36.319 --> 00:03:39.599
+that point would be in relation to that.
+
+00:03:39.599 --> 00:03:42.159
+(Amin: I think we have time for like
+
+00:03:42.159 --> 00:03:44.080
+one more short question.)
+
+00:03:44.080 --> 00:03:46.879
+One more short question... Okay, let's see.
+
+00:03:46.879 --> 00:03:48.879
+"How do new modes come into existence?" You
+
+00:03:48.879 --> 00:03:50.400
+can make them yourself,
+
+00:03:50.400 --> 00:03:53.040
+and you can specify them in Emacs
+
+00:03:53.040 --> 00:03:53.760
+Lisp
+
+00:03:53.760 --> 00:03:56.159
+if you like, but there's also a simple way.
+
+00:03:56.159 --> 00:03:59.040
+You can also do it visually as we did.
+
+00:03:59.040 --> 00:04:02.720
+But yeah, defining them
+
+00:04:02.720 --> 00:04:04.799
+is essentially built on top of Hydra, but
+
+00:04:04.799 --> 00:04:07.519
+it could also be built on top of Evil or
+
+00:04:07.519 --> 00:04:09.120
+any other modal interface provider.
+
+00:04:09.120 --> 00:04:12.840
+There's an abstraction layer.
+
+00:04:12.840 --> 00:04:15.920
+(Amin: Okay. Thank you so much for your talk and
+
+00:04:15.920 --> 00:04:17.919
+for the live Q&A.)
+
+00:04:17.919 --> 00:04:21.440
+Sure, thank you. (Amin: Feel free to take
+
+00:04:21.440 --> 00:04:22.880
+up the rest of the questions either via
+
+00:04:22.880 --> 00:04:23.759
+IRC or
+
+00:04:23.759 --> 00:04:25.680
+on the pad on on your own time off the
+
+00:04:25.680 --> 00:04:26.960
+stream.)
+
+00:04:26.960 --> 00:04:28.639
+Perfect. Yeah, I'll go ahead and put in
+
+00:04:28.639 --> 00:04:30.000
+some answers there.
+
+00:04:30.000 --> 00:04:32.240
+(Amin: Awesome, thank you.) All right, thank you.
+
+00:04:32.240 --> 00:04:33.120
+Have a good one.
+
+00:04:33.120 --> 00:04:36.880
+(Amin: Thanks you too)
diff --git a/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt
new file mode 100644
index 00000000..8bb1e882
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--07-beyond-vim-and-emacs-a-scalable-ui-paradigm--sid-kasivajhula.vtt
@@ -0,0 +1,1067 @@
+WEBVTT
+
+00:00:02.960 --> 00:00:04.644
+"Far away in the heavenly abode
+
+00:00:04.644 --> 00:00:06.560
+of the great god Indra,
+
+00:00:06.560 --> 00:00:07.688
+there is a wonderful net
+
+00:00:07.688 --> 00:00:10.160
+which has been hung
+by some cunning artificer
+
+00:00:10.160 --> 00:00:12.080
+in such a manner that it stretches out
+
+00:00:12.080 --> 00:00:14.320
+infinitely in all directions.
+
+00:00:14.320 --> 00:00:16.938
+In accordance with the extravagant
+tastes of deities,
+
+00:00:16.938 --> 00:00:18.240
+the artificer has hung
+
+00:00:18.240 --> 00:00:20.277
+a single glittering jewel
+
+00:00:20.277 --> 00:00:22.080
+in each eye of the net,
+
+00:00:22.080 --> 00:00:23.859
+and since the net itself is infinite,
+
+00:00:23.859 --> 00:00:26.480
+the jewels are infinite in number.
+
+00:00:26.480 --> 00:00:27.642
+There hang the jewels,
+
+00:00:27.642 --> 00:00:30.480
+glittering like stars in the first
+magnitude,
+
+00:00:30.480 --> 00:00:32.681
+a wonderful sight to behold.
+
+00:00:32.681 --> 00:00:35.680
+Were we to select one of these jewels
+for inspection,
+
+00:00:35.680 --> 00:00:38.216
+we would discover that in
+its polished surface
+
+00:00:38.216 --> 00:00:39.520
+there are reflected
+
+00:00:39.520 --> 00:00:41.451
+all the other jewels in the net,
+
+00:00:41.451 --> 00:00:43.360
+infinite in number.
+
+00:00:43.360 --> 00:00:45.140
+If we look still more closely,
+
+00:00:45.140 --> 00:00:48.960
+we would see that each of the jewels
+reflected in this one jewel
+
+00:00:48.960 --> 00:00:51.264
+reflects all the others."
+
+00:00:51.264 --> 00:00:54.000
+This is the metaphor of Indra's Net,
+
+00:00:54.000 --> 00:00:57.615
+which is told in some schools of
+philosophy.
+
+00:00:57.615 --> 00:01:00.160
+Let's keep this metaphor in mind,
+
+00:01:00.160 --> 00:01:01.773
+because it'll help us understand
+
+00:01:01.773 --> 00:01:06.960
+the Emacs extension that we're about to
+discuss.
+
+00:01:06.960 --> 00:01:12.810
+In editing text, there's two main
+paradigms:
+
+00:01:12.810 --> 00:01:16.880
+one is editing at the ground level,
+
+00:01:16.880 --> 00:01:19.439
+where the characters that we type
+
+00:01:19.439 --> 00:01:22.159
+actually appear on the screen,
+
+00:01:22.159 --> 00:01:25.960
+the changes we make actually occur.
+
+00:01:28.479 --> 00:01:30.126
+The other editing paradigm
+
+00:01:30.126 --> 00:01:33.439
+is where we escape to a higher level
+
+00:01:33.439 --> 00:01:36.479
+and now the characters that we type are
+not...
+
+00:01:36.479 --> 00:01:39.040
+They don't actually appear on the screen
+
+00:01:39.040 --> 00:01:42.748
+because we're not at the ground level
+with the text,
+
+00:01:42.748 --> 00:01:44.799
+we are at a higher level
+
+00:01:44.799 --> 00:01:48.479
+looking down at the text
+
+00:01:48.479 --> 00:01:50.773
+and regarding the text,
+
+00:01:50.773 --> 00:01:56.159
+referring to this world of text in terms
+of a language.
+
+00:01:56.159 --> 00:01:57.920
+For instance, we could describe this
+
+00:01:57.920 --> 00:02:03.404
+world as having words and paragraphs and
+sentences and lines and so on.
+
+00:02:03.404 --> 00:02:05.985
+We could reason about this text
+
+00:02:05.985 --> 00:02:13.120
+in terms of these textual entities and
+this textual language.
+
+00:02:13.120 --> 00:02:18.640
+This is the second paradigm of text
+editing.
+
+00:02:18.640 --> 00:02:22.800
+When we're in the second paradigm,
+
+00:02:22.800 --> 00:02:25.304
+there is a way to go down to ground
+level.
+
+00:02:25.304 --> 00:02:28.997
+You hit Enter now--or we'll hit Enter to
+go down to the ground level,
+
+00:02:28.997 --> 00:02:30.480
+and you can hit Escape
+
+00:02:30.480 --> 00:02:33.200
+to go back out to the referential level.
+
+00:02:33.200 --> 00:02:35.200
+Enter to go down to ground level
+
+00:02:35.200 --> 00:02:40.160
+and Escape to go up to the
+referential level.
+
+00:02:40.160 --> 00:02:47.565
+Now, in Vim, the nouns in this
+world of text
+
+00:02:47.565 --> 00:02:52.319
+all share the same referential plane
+which we call normal mode.
+
+00:02:52.319 --> 00:02:54.959
+So in normal mode, all of the nouns
+
+00:02:54.959 --> 00:02:57.360
+of the world of text are available,
+
+00:02:57.360 --> 00:03:00.959
+whether it's words or sentences or
+paragraphs,
+
+00:03:00.959 --> 00:03:08.319
+and they all share this same referential
+plane.
+
+00:03:08.319 --> 00:03:12.720
+They compete for space on the keyboard.
+
+00:03:12.720 --> 00:03:17.037
+An alternative way to structure these
+modes is
+
+00:03:17.037 --> 00:03:21.840
+instead of having a single mode where
+all the nouns coexist,
+
+00:03:21.840 --> 00:03:24.005
+peacefully or otherwise,
+
+00:03:24.005 --> 00:03:30.400
+you instead have a dedicated mode for
+every noun.
+
+00:03:30.400 --> 00:03:32.540
+In that case, what happens is
+
+00:03:32.540 --> 00:03:35.440
+because your modal spaces are
+now much smaller,
+
+00:03:35.440 --> 00:03:40.593
+you're just talking about words or
+paragraphs or lines or something,
+
+00:03:40.593 --> 00:03:42.560
+the keys that you use
+
+00:03:42.560 --> 00:03:45.760
+can be much more targeted.
+
+00:03:45.760 --> 00:03:48.560
+You can use the same keystrokes
+
+00:03:48.560 --> 00:03:50.400
+in all of your modes and they would have
+
+00:03:50.400 --> 00:03:51.845
+the same ideas behind them,
+
+00:03:51.845 --> 00:03:53.280
+but they would have different effects
+
+00:03:53.280 --> 00:03:55.519
+depending on which context you're using.
+
+00:03:55.519 --> 00:03:59.120
+It's the same keystrokes, different
+contexts.
+
+00:03:59.120 --> 00:04:04.244
+The advantage of that is it's often
+easier to change context
+
+00:04:04.244 --> 00:04:07.888
+than it is to learn new key bindings.
+
+00:04:07.888 --> 00:04:11.289
+So let's see an example of how
+that works.
+
+00:04:11.289 --> 00:04:14.039
+We go into character mode, and if you
+look at the mode line
+
+00:04:14.039 --> 00:04:15.439
+at the bottom of the screen there,
+
+00:04:15.439 --> 00:04:18.720
+you'll see that we're in character mode.
+
+00:04:18.720 --> 00:04:21.955
+Now, when we move up, down,
+left, and right,
+
+00:04:21.955 --> 00:04:23.919
+we're moving by character.
+
+00:04:23.919 --> 00:04:28.088
+We can also transform the text,
+
+00:04:28.088 --> 00:04:32.400
+and the transformations occur in terms
+of character.
+
+00:04:32.400 --> 00:04:34.207
+You can also go into word mode.
+
+00:04:34.207 --> 00:04:40.000
+In word mode, the transformations that
+you do are on words.
+
+00:04:40.000 --> 00:04:43.440
+and you try... Your movement is also in
+terms of words.
+
+00:04:43.440 --> 00:04:46.560
+So that's the level of granularity that
+you have.
+
+00:04:46.560 --> 00:04:49.191
+You could also go to line mode.
+
+00:04:49.191 --> 00:04:50.720
+When you're in line mode,
+
+00:04:50.720 --> 00:04:52.901
+you go up and down by line,
+
+00:04:52.901 --> 00:04:54.240
+and you can move lines
+
+00:04:54.240 --> 00:04:57.520
+up and down left and right and so on.
+
+00:04:59.120 --> 00:05:00.880
+The transformations you do are in
+
+00:05:00.880 --> 00:05:02.800
+terms of lines.
+
+00:05:02.800 --> 00:05:07.682
+You could also go to window mode,
+
+00:05:07.682 --> 00:05:11.695
+where now the objects that you're
+referring to are windows.
+
+00:05:11.695 --> 00:05:15.578
+You can move spatially
+amongst the windows
+
+00:05:15.578 --> 00:05:17.520
+or do transformations on the windows
+
+00:05:17.520 --> 00:05:20.850
+using the same keystrokes.
+
+00:05:25.360 --> 00:05:28.720
+So let's go to...
+
+00:05:28.720 --> 00:05:32.800
+Right. One of the things,
+
+00:05:32.800 --> 00:05:35.114
+the principles at play here
+
+00:05:35.114 --> 00:05:37.266
+is something called the
+Rumpelstiltskin principle,
+
+00:05:37.266 --> 00:05:40.720
+which is something that's known in
+computer science.
+
+00:05:40.720 --> 00:05:42.113
+If you can name something,
+
+00:05:42.113 --> 00:05:45.824
+then you have power over it.
+
+00:05:45.824 --> 00:05:48.560
+This is kind of an adaptation of that
+principle
+
+00:05:48.560 --> 00:05:51.123
+which says that if you can name
+something
+
+00:05:51.123 --> 00:05:52.572
+and if you can talk about it,
+
+00:05:52.572 --> 00:05:56.334
+then it's a noun in your editing
+language.
+
+00:05:56.334 --> 00:05:58.960
+If it's a noun, then it has...
+
+00:05:58.960 --> 00:06:02.319
+It's a mode. So if we can talk about it,
+it's a noun.
+
+00:06:02.319 --> 00:06:04.818
+If it's a noun, then it's a mode.
+
+00:06:04.818 --> 00:06:08.919
+One of the things we've been talking a
+lot about is modes.
+
+00:06:08.919 --> 00:06:12.699
+In fact, by this principle,
+
+00:06:12.699 --> 00:06:17.280
+modes also should be a mode.
+
+00:06:17.280 --> 00:06:19.039
+You should have a mode that can reason
+
+00:06:19.039 --> 00:06:20.639
+in terms of modes as objects,
+
+00:06:20.639 --> 00:06:22.300
+just like you have modes
+
+00:06:22.300 --> 00:06:23.759
+where you can reason in terms of
+
+00:06:23.759 --> 00:06:26.560
+words or lines as objects.
+
+00:06:26.560 --> 00:06:30.479
+So let's do that. Let's go to mode mode.
+
+00:06:30.479 --> 00:06:34.000
+When you go to mode mode, you see that
+
+00:06:34.000 --> 00:06:35.915
+the objects that are depicted here
+
+00:06:35.915 --> 00:06:40.960
+are the modes that are present
+in the buffer,
+
+00:06:40.960 --> 00:06:44.500
+which we knew about because
+
+00:06:44.500 --> 00:06:46.797
+the style of editing that we had
+in this buffer
+
+00:06:46.797 --> 00:06:48.720
+was the Vim style of editing
+
+00:06:48.720 --> 00:06:51.143
+where there's an insert mode at the
+ground level
+
+00:06:51.143 --> 00:06:53.039
+and a normal mode that
+you can escape to.
+
+00:06:53.039 --> 00:06:57.280
+You insert, enter the ground level.
+
+00:06:57.280 --> 00:07:01.352
+Enter to the insert mode and escape to
+normal mode.
+
+00:07:01.352 --> 00:07:04.647
+When you look at the mode mode
+representation,
+
+00:07:04.647 --> 00:07:06.160
+you see that in fact that
+
+00:07:06.160 --> 00:07:10.479
+is the structure that's depicted.
+
+00:07:10.479 --> 00:07:14.080
+But in different situations,
+you might find
+
+00:07:14.080 --> 00:07:16.080
+that these modes are not the
+
+00:07:16.080 --> 00:07:16.922
+ones that you want.
+
+00:07:16.922 --> 00:07:20.880
+You want something more tailored for the
+specific application.
+
+00:07:20.880 --> 00:07:25.065
+For instance, if you're editing
+Lisp code
+
+00:07:25.065 --> 00:07:27.360
+(or code in general, but
+
+00:07:27.360 --> 00:07:30.880
+Lisp code is a particular example),
+
+00:07:30.880 --> 00:07:32.640
+you might want to take advantage
+
+00:07:32.640 --> 00:07:34.852
+of the structure of the code.
+
+00:07:34.852 --> 00:07:37.599
+For Lisp code in particular,
+
+00:07:37.599 --> 00:07:40.960
+we have a mode called symex-mode
+
+00:07:40.960 --> 00:07:45.414
+which is able to reason about your code
+
+00:07:45.414 --> 00:07:47.919
+in terms of its tree structure.
+
+00:07:47.919 --> 00:07:52.397
+So you can use the same keystrokes: hjkl
+goes left, right, up, and down,
+
+00:07:52.397 --> 00:07:58.080
+but you also have other keystrokes that
+are more specialized to the application.
+
+00:07:58.080 --> 00:08:01.520
+You can run the code.
+
+00:08:01.520 --> 00:08:06.960
+We'll see that happen here in a minute.
+
+00:08:06.960 --> 00:08:12.240
+You can make changes to it
+really quickly
+
+00:08:12.240 --> 00:08:18.000
+and see the effects of those changes.
+
+00:08:18.000 --> 00:08:19.440
+You're doing this all in a mode
+
+00:08:19.440 --> 00:08:22.625
+that's convenient for this particular
+application,
+
+00:08:22.625 --> 00:08:25.039
+which is editing Lisp code,
+
+00:08:25.039 --> 00:08:28.960
+and that is, in this case, symex-mode.
+
+00:08:28.960 --> 00:08:31.631
+Typically, when you're editing code
+like this,
+
+00:08:31.631 --> 00:08:33.435
+you'd want to be in insert mode
+
+00:08:33.435 --> 00:08:36.640
+actually typing out the code,
+
+00:08:36.640 --> 00:08:40.959
+and then you'd want to escape to symex
+mode rather than normal mode,
+
+00:08:40.959 --> 00:08:42.021
+and then you could escape again
+
+00:08:42.021 --> 00:08:44.080
+and you'd end up in normal mode.
+
+00:08:44.080 --> 00:08:48.000
+So this, if we go to mode mode, we see
+is depicted
+
+00:08:48.000 --> 00:08:51.040
+as this tower where insert is at the
+
+00:08:51.040 --> 00:08:52.604
+bottom and normal is at the top,
+
+00:08:52.604 --> 00:08:55.305
+but symex-mode is in between the two.
+
+00:08:55.305 --> 00:08:57.551
+You could also change that if you like.
+
+00:08:57.551 --> 00:08:59.566
+If you don't want symex-mode
+to be there,
+
+00:08:59.566 --> 00:09:02.187
+you could just move it to the top.
+
+00:09:02.187 --> 00:09:04.392
+Now you find symex is at the top
+
+00:09:04.392 --> 00:09:06.160
+and you enter down to normal.
+
+00:09:06.160 --> 00:09:08.848
+You can see it on the status bar at the
+bottom there.
+
+00:09:08.848 --> 00:09:13.839
+Enter to insert, escape to normal,
+escape to symex.
+
+00:09:13.839 --> 00:09:16.344
+In fact, you can even add more modes
+
+00:09:16.344 --> 00:09:19.380
+if you don't like the existing ones.
+
+00:09:21.519 --> 00:09:23.839
+Now we have an additional mode here.
+
+00:09:23.839 --> 00:09:25.855
+We have window mode. It goes
+down to symex,
+
+00:09:25.855 --> 00:09:27.519
+it goes down to normal.
+
+00:09:27.519 --> 00:09:29.919
+Enter the insert, escape to normal,
+
+00:09:29.919 --> 00:09:33.600
+escape to symex, escape to window.
+
+00:09:33.600 --> 00:09:41.232
+So we've talked... Okay, so another thing
+actually to note here
+
+00:09:41.232 --> 00:09:45.360
+is that in editing modes,
+
+00:09:45.360 --> 00:09:46.486
+if you look at the mode line
+
+00:09:46.486 --> 00:09:48.399
+at the bottom of the screen,
+
+00:09:48.399 --> 00:09:50.257
+you'll see that we are currently,
+
+00:09:50.257 --> 00:09:51.519
+in this buffer,
+
+00:09:51.519 --> 00:09:54.560
+we are currently in line mode.
+
+00:09:54.560 --> 00:09:57.296
+I'm going to hit Enter now
+
+00:09:57.296 --> 00:09:59.119
+and you'll see that when I hit Enter,
+
+00:09:59.119 --> 00:10:00.627
+nothing is happening.
+
+00:10:00.627 --> 00:10:02.160
+It's still in line mode.
+
+00:10:02.160 --> 00:10:05.120
+If you hit Escape, it's still in line mode.
+
+00:10:05.120 --> 00:10:07.200
+You can find out the reason for that
+
+00:10:07.200 --> 00:10:10.640
+by taking another meta jump out of this.
+
+00:10:10.640 --> 00:10:12.800
+You'll see that, in fact, the reason
+
+00:10:12.800 --> 00:10:15.279
+is that we're currently in line mode,
+
+00:10:15.279 --> 00:10:17.360
+and line mode is the only one available
+
+00:10:17.360 --> 00:10:19.519
+in this tower
+
+00:10:19.519 --> 00:10:21.556
+for editing the modes that are
+
+00:10:21.556 --> 00:10:24.880
+in operation in your ground level.
+
+00:10:24.880 --> 00:10:26.898
+In fact, line mode is all you need
+here,
+
+00:10:26.898 --> 00:10:32.796
+because this is just the nature of how
+these modes are laid out is in rows.
+
+00:10:32.796 --> 00:10:36.399
+So line mode is the most appropriate
+thing here.
+
+00:10:36.399 --> 00:10:39.740
+But you could change it to something
+else if you like.
+
+00:10:40.959 --> 00:10:43.659
+Now we've seen two towers.
+
+00:10:43.659 --> 00:10:53.680
+We've seen the Vim tower and we've seen
+also the symex tower, the Lisp tower.
+
+00:10:53.680 --> 00:10:58.880
+It turns out that, because we've been
+talking about towers now,
+
+00:10:58.880 --> 00:11:06.399
+by the Rumpelstiltskin principle, towers
+also can be talked about,
+
+00:11:06.399 --> 00:11:09.127
+and therefore they also are a mode.
+
+00:11:09.127 --> 00:11:11.200
+So how do we go to tower mode?
+
+00:11:11.200 --> 00:11:14.640
+The way we go to tower mode is
+
+00:11:14.640 --> 00:11:19.200
+we go in a slightly different direction,
+
+00:11:19.200 --> 00:11:23.360
+and we find that we are now in tower
+mode.
+
+00:11:23.360 --> 00:11:29.279
+We see that there are many towers
+available. We're now...
+
+00:11:29.279 --> 00:11:33.440
+We're seeing several possible towers
+
+00:11:33.440 --> 00:11:40.344
+that we have written to be available and
+for use in different buffers.
+
+00:11:40.344 --> 00:11:42.110
+You can edit them on the fly.
+
+00:11:42.110 --> 00:11:46.630
+For instance, let's enter this tower.
+
+00:11:48.000 --> 00:11:50.180
+Now you see that in the bottom of
+the...
+
+00:11:50.180 --> 00:11:51.519
+In the mode line, you see that we're
+
+00:11:51.519 --> 00:11:53.944
+going across all of these
+different modes
+
+00:11:53.944 --> 00:11:56.480
+that were in the tower.
+
+00:11:56.480 --> 00:11:59.724
+You could escape and you could even move
+things around.
+
+00:11:59.724 --> 00:12:00.880
+You could put window mode
+
+00:12:00.880 --> 00:12:02.573
+all the way at the bottom,
+
+00:12:02.573 --> 00:12:04.079
+right above insert mode.
+
+00:12:04.079 --> 00:12:06.479
+Let's see that happen. There it is,
+
+00:12:06.479 --> 00:12:10.444
+window is right above insert, and
+so on.
+
+00:12:10.444 --> 00:12:14.240
+The tower always reflects your current
+position,
+
+00:12:14.240 --> 00:12:17.600
+so if you're in buffer mode here and you
+go down to line mode,
+
+00:12:17.600 --> 00:12:22.480
+when you go back to mode mode, you see
+that we are in line mode.
+
+00:12:22.480 --> 00:12:25.620
+But in practice, you wouldn't have a
+tower this elaborate
+
+00:12:25.620 --> 00:12:29.440
+because you'd rather have several
+smaller towers you enter,
+
+00:12:29.440 --> 00:12:33.360
+that you alternate between.
+
+00:12:33.360 --> 00:12:39.839
+Okay. So one other thing of interest
+here is that
+
+00:12:39.839 --> 00:12:42.240
+when you're in tower mode,
+
+00:12:42.240 --> 00:12:44.740
+if you look at the status line at the
+bottom there,
+
+00:12:44.740 --> 00:12:49.839
+we are currently in buffer mode while we
+are in tower mode.
+
+00:12:49.839 --> 00:12:53.151
+Tower mode actually isn't a mode really.
+Neither is mode mode.
+
+00:12:53.151 --> 00:12:58.000
+They're really referential planes or
+meta planes.
+
+00:12:58.000 --> 00:13:01.679
+In any case, you can see that we're in
+buffer mode.
+
+00:13:01.679 --> 00:13:03.840
+We can take a meta jump out of this
+
+00:13:03.840 --> 00:13:08.000
+to confirm that buffer mode is the only
+mode available
+
+00:13:08.000 --> 00:13:09.664
+when we're editing towers
+
+00:13:09.664 --> 00:13:11.915
+because that's the one we need,
+
+00:13:11.915 --> 00:13:23.200
+given that our towers are represented in
+individual buffers.
+
+00:13:23.200 --> 00:13:26.320
+Right. So let's see where we're at.
+
+00:13:26.320 --> 00:13:27.785
+Rumpelstiltskin principle...
+
+00:13:27.785 --> 00:13:30.160
+We talked about mode mode.
+
+00:13:30.160 --> 00:13:32.240
+We talked about the strange loop
+
+00:13:32.240 --> 00:13:37.820
+application of ground level modes in
+meta levels.
+
+00:13:39.600 --> 00:13:41.992
+We saw the different towers,
+
+00:13:41.992 --> 00:13:50.720
+and in fact, we're currently
+in Vim tower,
+
+00:13:50.720 --> 00:13:52.860
+where you can go to Emacs tower.
+
+00:13:52.860 --> 00:13:54.720
+Now, with a single keystroke, you can
+
+00:13:54.720 --> 00:13:59.695
+alternate between Emacs and Vim,
+
+00:13:59.695 --> 00:14:01.638
+which are represented--
+
+00:14:01.638 --> 00:14:05.519
+which are modeled as towers.
+
+00:14:13.360 --> 00:14:14.760
+So there's... One thing
+
+00:14:14.760 --> 00:14:18.160
+that we've sort of alluded to is that
+there are two directions
+
+00:14:18.160 --> 00:14:19.494
+that you can travel in
+
+00:14:19.494 --> 00:14:22.399
+when you're going through this
+framework.
+
+00:14:22.399 --> 00:14:33.760
+One direction is--and we'll visualize it
+like so...
+
+00:14:33.760 --> 00:14:35.120
+There's two directions you can travel,
+
+00:14:35.120 --> 00:14:37.040
+and you can either go sideways or you
+
+00:14:37.040 --> 00:14:38.399
+can go up and down.
+
+00:14:38.399 --> 00:14:41.680
+If you go sideways, you're changing your
+perspective.
+
+00:14:41.680 --> 00:14:45.440
+So normal mode, word mode, line mode,
+
+00:14:45.440 --> 00:14:46.544
+window mode, and so on
+
+00:14:46.544 --> 00:14:51.680
+are all different perspectives on your
+ground editing experience.
+
+00:14:51.680 --> 00:14:53.265
+The other direction you can travel in
+
+00:14:53.265 --> 00:14:56.811
+is up or down, which takes you through
+meta levels.
+
+00:14:56.811 --> 00:14:59.600
+So you go from the ground level
+editing experience,
+
+00:14:59.600 --> 00:15:07.040
+up to mode mode, and then up to the
+tower plane, and so on, and so on.
+
+00:15:07.040 --> 00:15:12.568
+So this all sounds very complex,
+
+00:15:12.568 --> 00:15:18.160
+but the truth is it's not really that
+complicated,
+
+00:15:18.160 --> 00:15:20.699
+even though it feels that way.
+
+00:15:20.699 --> 00:15:22.959
+The reason it isn't that complicated
+
+00:15:22.959 --> 00:15:26.480
+is because no matter how many levels
+
+00:15:26.480 --> 00:15:30.160
+up or down you go and no matter where
+you are,
+
+00:15:30.160 --> 00:15:32.399
+whether you're in at the ground level
+
+00:15:32.399 --> 00:15:34.079
+editing the actual text
+
+00:15:34.079 --> 00:15:35.802
+or whether you're at a meta level,
+
+00:15:35.802 --> 00:15:39.279
+some unknown meta level and you don't
+know where you are,
+
+00:15:39.279 --> 00:15:41.133
+no matter where you are,
+
+00:15:41.133 --> 00:15:44.399
+the way in which you interact with it
+
+00:15:44.399 --> 00:15:47.519
+is the same at every level.
+
+00:15:47.519 --> 00:15:54.751
+That is the great power of this
+approach:
+
+00:15:54.751 --> 00:16:00.880
+that all of the different levels
+are the same.
+
+00:16:00.880 --> 00:16:03.839
+In fact, the complexity of the whole
+
+00:16:03.839 --> 00:16:05.545
+is exactly identical to
+
+00:16:05.545 --> 00:16:07.657
+the complexity of each part,
+
+00:16:07.657 --> 00:16:10.000
+so if you know how to edit words
+
+00:16:10.000 --> 00:16:12.048
+in the ground level buffer
+
+00:16:12.048 --> 00:16:15.378
+and you know how to move lines around
+using line mode,
+
+00:16:15.378 --> 00:16:22.800
+then you know how to edit any aspect of
+your editing experience at any level.
+
+00:16:30.079 --> 00:16:31.780
+So this is a pre-release demo.
+
+00:16:31.780 --> 00:16:40.079
+This doesn't exist on MELPA yet, but you
+can follow updates at this repo on
+github.
+
+00:16:40.079 --> 00:16:43.850
+If you can also be a beta tester
+
+00:16:43.850 --> 00:16:46.775
+or something like that, if you like,
+that would be very helpful.
+
+00:16:46.775 --> 00:16:50.560
+You can learn more about this at
+
+00:16:50.560 --> 00:16:53.920
+drym.org, which is where I house
+
+00:16:53.920 --> 00:16:55.726
+the research that I work on.
+
+00:16:55.726 --> 00:17:00.154
+In particular, the research on epistemic
+levels
+
+00:17:00.154 --> 00:17:03.600
+is what inspired this particular Emacs
+extension.
+
+00:17:03.600 --> 00:17:05.600
+You can also learn about
+
+00:17:05.600 --> 00:17:10.880
+dialectical inheritance attribution,
+which is the basis of
+
+00:17:10.880 --> 00:17:14.559
+a new economic system that could be fair
+
+00:17:14.559 --> 00:17:19.439
+and could lead to a prosperous and happy
+world.
+
+00:17:19.439 --> 00:17:26.319
+You can follow me on Twitter at
+@countvajhula.
+
+00:17:26.319 --> 00:17:31.919
+That's it! Thank you.
diff --git a/2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt b/2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt
new file mode 100644
index 00000000..c0dc4397
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--08-building-reproducible-emacs--andrew-tropin.vtt
@@ -0,0 +1,839 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:04.556
+Hello, everyone. I am Andrew Tropin.
+
+00:00:04.556 --> 00:00:06.622
+I am a professional software engineer
+
+00:00:06.622 --> 00:00:11.622
+I was playing with NixOS
+
+00:00:11.622 --> 00:00:15.322
+It's an operating system based on the
+Nix package manager.
+
+00:00:15.322 --> 00:00:21.089
+I came up with this interesting
+approach for configuring Emacs.
+
+00:00:21.089 --> 00:00:24.056
+I want to share it with you.
+
+00:00:24.056 --> 00:00:27.756
+I will start with the bold statement that
+
+00:00:27.756 --> 00:00:30.822
+Emacs configuration is almost the same
+
+00:00:30.822 --> 00:00:33.022
+as system configuration.
+
+00:00:33.022 --> 00:00:37.262
+It's not related to that Emacs joke
+
+00:00:37.262 --> 00:00:39.922
+about Emacs being an operating system.
+
+00:00:39.922 --> 00:00:44.489
+It's more about Emacs being integrated
+
+00:00:44.489 --> 00:00:48.589
+with so many tools inside the environment.
+
+00:00:48.589 --> 00:00:53.089
+For example, if you don't even use any
+fancy workflows,
+
+00:00:53.089 --> 00:00:57.256
+you use only plain Emacs without any
+configuration,
+
+00:00:57.256 --> 00:01:02.556
+dired uses ls, grep.el uses grep,
+
+00:01:02.556 --> 00:01:09.356
+and info files placed
+somewhere in your system.
+
+00:01:09.356 --> 00:01:15.489
+Also Emacs can interact with gpg, git,
+make, and other stuff.
+
+00:01:15.489 --> 00:01:20.789
+When you grow your Emacs Lisp
+
+00:01:20.789 --> 00:01:23.189
+init.el file
+
+00:01:23.189 --> 00:01:27.222
+or other files in your .emacs.d directory,
+
+00:01:27.222 --> 00:01:29.989
+you get much more integration
+
+00:01:29.989 --> 00:01:31.389
+with underlying operating system.
+
+00:01:31.389 --> 00:01:36.922
+The question is: how to manage such configuration?
+
+00:01:36.922 --> 00:01:40.922
+Because you can't just take a bunch of
+.el files
+
+00:01:40.922 --> 00:01:43.456
+and move to a different machine
+
+00:01:43.456 --> 00:01:47.122
+and be sure that everything will work.
+
+00:01:47.122 --> 00:01:50.577
+Because you didn't move your
+executables.
+
+00:01:50.577 --> 00:01:53.522
+You didn't move configuration
+of other programs.
+
+00:01:53.522 --> 00:01:55.089
+You didn't move your service configurations.
+
+00:01:55.089 --> 00:02:01.889
+And you can't even just create dotfiles
+for each program
+
+00:02:01.889 --> 00:02:05.022
+and move it with your .el files.
+
+00:02:05.022 --> 00:02:08.622
+The approach would be a little broader.
+
+00:02:08.622 --> 00:02:13.056
+Everything that I am showing today
+
+00:02:13.056 --> 00:02:15.322
+is available on Github.
+
+00:02:15.322 --> 00:02:18.022
+Any source code, you can find here.
+
+00:02:18.022 --> 00:02:21.589
+but my copy of the repository
+
+00:02:21.589 --> 00:02:23.722
+is on my local machine.
+
+00:02:23.722 --> 00:02:27.722
+As you can see, the font is a little small.
+
+00:02:27.722 --> 00:02:31.122
+And also, my terminal font is also a
+little small.
+
+00:02:31.122 --> 00:02:36.756
+I can do a quick fix and increase the font.
+
+00:02:36.756 --> 00:02:40.789
+But imagine how cool it will be
+
+00:02:40.789 --> 00:02:45.756
+if you can have a file which contains
+the configuration for a system.
+
+00:02:45.756 --> 00:02:52.489
+You change some value. Here, for
+example, fontSize = 16
+
+00:02:52.489 --> 00:02:54.589
+and run some command
+
+00:02:54.589 --> 00:02:58.489
+and based on this file
+
+00:02:58.489 --> 00:03:00.322
+and some other includes
+
+00:03:00.322 --> 00:03:02.422
+your operating system is built
+
+00:03:02.422 --> 00:03:06.389
+and all your environment is set up
+
+00:03:06.389 --> 00:03:07.656
+and ready for use.
+
+00:03:07.656 --> 00:03:11.622
+For example here, we already built
+the new operating system,
+
+00:03:11.622 --> 00:03:17.856
+and everything is already installed in
+my SSD.
+
+00:03:17.856 --> 00:03:21.322
+Now I can run the program and you can
+see that
+
+00:03:21.322 --> 00:03:29.422
+my alacrity terminal has much bigger font
+
+00:03:29.422 --> 00:03:31.789
+and also if I restart my Emacs instance
+
+00:03:31.789 --> 00:03:34.089
+it by default uses
+
+00:03:34.089 --> 00:03:36.889
+a much bigger font for any buffer.
+
+00:03:36.889 --> 00:03:41.089
+Practical, and as you can see, it's
+already working,
+
+00:03:41.089 --> 00:03:45.889
+thanks to Nix and NixOS.
+
+00:03:45.889 --> 00:03:50.722
+I will explain a little later how it
+works inside,
+
+00:03:50.722 --> 00:03:57.089
+but for now, let's specify a little more
+
+00:03:57.089 --> 00:04:00.789
+what happened right now.
+
+00:04:00.789 --> 00:04:08.156
+I fed my... Oh. It doesn't work. Sorry.
+I want...
+
+00:04:08.156 --> 00:04:13.056
+I have my whole operating system
+
+00:04:13.056 --> 00:04:15.589
+defined in a few Nix files.
+
+00:04:15.589 --> 00:04:18.689
+For example, here you saw the file
+
+00:04:18.689 --> 00:04:22.522
+which defines some variables for my environment
+
+00:04:22.522 --> 00:04:24.256
+and then a few more files
+
+00:04:24.256 --> 00:04:25.722
+for different programs.
+
+00:04:25.722 --> 00:04:30.056
+There is a folder which contains all
+Emacs-related configuration.
+
+00:04:30.056 --> 00:04:36.989
+Also, there are package definitions
+defined in Nix package repositories
+
+00:04:36.989 --> 00:04:42.522
+which is also included for the function
+which generates
+
+00:04:42.522 --> 00:04:44.556
+the operating system.
+
+00:04:44.556 --> 00:04:47.622
+Getting all my configurations
+written in Nix language
+
+00:04:47.622 --> 00:04:51.174
+and a few firewalls in ?? languages,
+
+00:04:51.174 --> 00:04:54.700
+everything is gathered together,
+
+00:04:54.700 --> 00:04:56.722
+and from that input
+
+00:04:56.722 --> 00:04:58.322
+and only from that input,
+
+00:04:58.322 --> 00:05:00.489
+the new operating system is built.
+
+00:05:00.489 --> 00:05:03.856
+Emacs now is a part of this operating system.
+
+00:05:03.856 --> 00:05:08.422
+I can distribute this Emacs configuration
+
+00:05:08.422 --> 00:05:11.689
+with all the environment that I want.
+
+00:05:11.689 --> 00:05:18.389
+Practical so far. Let's clarify which
+problems does it solve.
+
+00:05:18.389 --> 00:05:21.756
+First of all, the integration problem.
+
+00:05:21.756 --> 00:05:27.389
+For example, a few minutes ago, you saw
+that I changed one variable.
+
+00:05:27.389 --> 00:05:31.348
+That was to update... The first one, for
+my terminal,
+
+00:05:31.348 --> 00:05:33.889
+and the second one, for my Emacs.
+
+00:05:33.889 --> 00:05:40.322
+It's pretty good that a few different
+programs can share some data.
+
+00:05:40.322 --> 00:05:43.822
+For example, you can have one of them
+for every application,
+
+00:05:43.822 --> 00:05:45.222
+or something like that
+
+00:05:45.222 --> 00:05:48.356
+and you change only one value in one place
+
+00:05:48.356 --> 00:05:50.789
+and the whole operating system is updated.
+
+00:05:50.789 --> 00:05:56.422
+Also, another problem is reproducibility.
+
+00:05:56.422 --> 00:06:00.156
+
+
+00:06:00.156 --> 00:06:06.600
+For example, when you install
+your new instance of Emacs
+
+00:06:06.600 --> 00:06:11.089
+on your laptop or something like that,
+
+00:06:11.089 --> 00:06:14.289
+you can be sure that you will get the
+same package versions
+
+00:06:14.289 --> 00:06:17.189
+and you can be sure that the
+configuration of your work
+
+00:06:17.189 --> 00:06:20.856
+results in newly-updated or
+newly-installed packages.
+
+00:06:20.856 --> 00:06:25.056
+Also, if you update packages
+
+00:06:25.056 --> 00:06:27.656
+sometimes it's hard to revert,
+
+00:06:27.656 --> 00:06:36.289
+because it's the way your package
+manager almost every time works.
+
+00:06:36.289 --> 00:06:38.722
+You're just getting the latest
+available packages.
+
+00:06:38.722 --> 00:06:43.256
+If they are broken, you need to wait for
+the maintainer to update them.
+
+00:06:43.256 --> 00:06:50.989
+And also, your basic configuration
+almost always doesn't contain
+
+00:06:50.989 --> 00:06:56.156
+any native dependencies, like
+executables or something else.
+
+00:06:56.156 --> 00:07:00.689
+Recently, I saw some attempts to make it
+possible to
+
+00:07:00.689 --> 00:07:03.089
+use use-package for those needs,
+
+00:07:03.089 --> 00:07:06.356
+like ensuring native dependencies
+or something like that.
+
+00:07:06.356 --> 00:07:11.134
+It's obviously... If
+your configuration isn't reproducible
+
+00:07:11.134 --> 00:07:15.322
+and it doesn't have
+your whole environment,
+
+00:07:15.322 --> 00:07:19.522
+placed in one repository,
+
+00:07:19.522 --> 00:07:22.322
+it's very hard to share such
+configuration.
+
+00:07:22.322 --> 00:07:27.089
+You can share part of your configuration
+and some instruction
+
+00:07:27.089 --> 00:07:32.222
+how to get a similar environment,
+but it doesn't always work.
+
+00:07:32.222 --> 00:07:39.656
+Let's go closer to actually Emacs
+configuration itself.
+
+00:07:39.656 --> 00:07:45.306
+I had some experience with Spacemacs and
+Doom Emacs distributions.
+
+00:07:45.306 --> 00:07:50.414
+I also watched a lot of videos and
+articles by Protesilaos
+
+00:07:50.414 --> 00:07:56.756
+and a lot of other custom configurations
+of many different cool people.
+
+00:07:56.756 --> 00:08:03.039
+And also I was inspired by use-package
+
+00:08:03.039 --> 00:08:10.839
+and decided that I will create a folding
+structure for my Emacs configuration.
+
+00:08:10.839 --> 00:08:16.172
+I will be using subconfigs. It's almost
+the same as layers in Spacemacs,
+
+00:08:16.172 --> 00:08:20.972
+or modules in Doom Emacs, which are
+self-contained.
+
+00:08:20.972 --> 00:08:26.287
+They contain Emacs Lisp code which
+configures all packages necessary
+
+00:08:26.287 --> 00:08:28.789
+for this part of configuration.
+
+00:08:28.789 --> 00:08:33.493
+It contains all Emacs dependencies like
+Emacs packages.
+
+00:08:33.493 --> 00:08:36.572
+It contains all native dependencies
+
+00:08:36.572 --> 00:08:40.039
+like binaries or maybe info pages or
+something like that.
+
+00:08:40.039 --> 00:08:45.115
+It also contains variables
+that can be shared between
+
+00:08:45.115 --> 00:08:47.989
+Emacs and other applications,
+
+00:08:47.989 --> 00:08:52.072
+and it can contain service
+or system definitions
+
+00:08:52.072 --> 00:08:56.072
+which configure your systemd service or
+something like that
+
+00:08:56.072 --> 00:09:01.306
+that you use in your workflow. For
+example, for synchronizing your e-mails.
+
+00:09:01.306 --> 00:09:06.239
+Let's start from just the example
+
+00:09:06.239 --> 00:09:16.618
+that I already am... I have a folding
+structure for my configuration.
+
+00:09:16.618 --> 00:09:25.789
+I have some files here.
+early-init just has this.
+
+00:09:25.789 --> 00:09:33.006
+Nothing changes. It will be copied to
+that .emacs.d directory later
+
+00:09:33.006 --> 00:09:37.306
+with some exceptions that
+
+00:09:37.306 --> 00:09:40.789
+it will replace the Nix dir and a
+symlink will be created to it.
+
+00:09:40.789 --> 00:09:47.889
+I have use-package-init.el.
+It's part of configuration
+
+00:09:47.889 --> 00:09:51.522
+that will be on top of everything
+
+00:09:51.522 --> 00:09:55.589
+to be able to use use-package in my
+subconfigurations.
+
+00:09:55.589 --> 00:10:01.156
+And actually some Nix code to glue
+everything up
+
+00:10:01.156 --> 00:10:06.922
+and config dirs which contain all my subconfigs.
+
+00:10:06.922 --> 00:10:11.389
+Let's start from faces subconfig.
+
+00:10:11.389 --> 00:10:14.556
+Let's start from config.el
+
+00:10:14.556 --> 00:10:20.022
+which can be familiar for many people.
+
+00:10:20.022 --> 00:10:23.556
+Just use-package definition
+for faces package
+
+00:10:23.556 --> 00:10:24.122
+and some configuration for it
+
+00:10:24.122 --> 00:10:29.589
+which are setting some attributes.
+
+00:10:29.589 --> 00:10:32.156
+It reads some variables.
+
+00:10:32.156 --> 00:10:36.922
+Those variables are actually defined in
+a different place.
+
+00:10:36.922 --> 00:10:44.422
+If I open default.nix file, you can see
+that it contains
+
+00:10:44.422 --> 00:10:52.689
+the definition or subconfig, and it
+should contain a definition of variables
+
+00:10:52.689 --> 00:10:55.322
+that it uses by... I forgot to move it from
+
+00:10:55.322 --> 00:11:01.889
+my original default.nix file somewhere
+here.
+
+00:11:01.889 --> 00:11:10.105
+You probably can find definition of
+those variables just right here.
+
+00:11:10.105 --> 00:11:13.722
+I took values from my
+Nix expressions.
+
+00:11:13.722 --> 00:11:23.956
+Those values will be shared across my
+alacrity, Emacs, and other applications.
+
+00:11:23.956 --> 00:11:27.789
+Later, they will be placed in generated
+Emacs configuration.
+
+00:11:27.789 --> 00:11:32.856
+They will be available for faces config.
+
+00:11:32.856 --> 00:11:38.422
+Here I will be referencing them just
+like Emacs variables.
+
+00:11:38.422 --> 00:11:43.356
+Let's take a look at another more
+complicated example.
+
+00:11:43.356 --> 00:11:45.922
+For example, org-roam package.
+
+00:11:45.922 --> 00:11:49.922
+Just a basic use-package configuration
+
+00:11:49.922 --> 00:11:54.607
+which uses a variable and
+the definition.
+
+00:11:54.607 --> 00:12:00.322
+It's a little more complex than the
+previous one.
+
+00:12:00.322 --> 00:12:04.222
+Elisp configuration in the same file.
+
+00:12:04.222 --> 00:12:08.856
+emacsPackages specified here.
+
+00:12:08.856 --> 00:12:12.289
+Those two packages: org-roam and company-org-roam.
+
+00:12:12.289 --> 00:12:16.956
+systemPackages: it's something that
+should be available
+
+00:12:16.956 --> 00:12:18.456
+on your host operating system.
+
+00:12:18.456 --> 00:12:24.756
+And for emacsPackages, you need sqlite
+package,
+
+00:12:24.756 --> 00:12:27.922
+and also the definition of the variable
+
+00:12:27.922 --> 00:12:31.556
+which will be passed in my Emacs
+configuration later.
+
+00:12:31.556 --> 00:12:37.722
+It's equal to my workDir, which is
+defined in my environment,
+
+00:12:37.722 --> 00:12:39.222
+and a subdirectory of it.
+
+00:12:39.222 --> 00:12:43.222
+([Amin:] Andrew, you have about five
+minutes including questions.)
+
+00:12:43.222 --> 00:12:50.822
+Oh, okay. I'm almost finished. It was
+last example.
+
+00:12:50.822 --> 00:12:56.556
+Let me open my Org file. Okay.
+
+00:12:56.556 --> 00:13:02.222
+Right here. I won't give you an
+introduction to Nix itself
+
+00:13:02.222 --> 00:13:06.922
+and the underlying mechanism,
+
+00:13:06.922 --> 00:13:11.140
+but I can say that there's already a
+proof of concept framework
+
+00:13:11.140 --> 00:13:14.622
+for utilizing Nix and NixOS
+
+00:13:14.622 --> 00:13:18.389
+for configuring Emacs
+and making a very complex workflow
+
+00:13:18.389 --> 00:13:22.056
+reproducible on other machines.
+
+00:13:22.056 --> 00:13:26.222
+It gives everything that we
+saw right now.
+
+00:13:26.222 --> 00:13:31.522
+For the future work, I plan to
+reimplement it in Guile,
+
+00:13:31.522 --> 00:13:36.189
+which is a Scheme dialect,
+which is another Lisp language,
+
+00:13:36.189 --> 00:13:39.199
+for the GNU Guix operating system,
+
+00:13:39.199 --> 00:13:41.856
+because I like Lisp languages
+
+00:13:41.856 --> 00:13:46.822
+a little more than Nix languages and I
+want to make
+
+00:13:46.822 --> 00:13:50.089
+this project from proof of concept
+to some state which
+
+00:13:50.089 --> 00:13:54.189
+will be user-friendly and
+available for other people.
+
+00:13:54.189 --> 00:13:59.156
+If I will have a lot of time,
+I will make an operating system
+
+00:13:59.156 --> 00:14:01.356
+which will be inspired by Lisp machines
+
+00:14:01.356 --> 00:14:05.389
+to make the whole experience very Lispy.
+
+00:14:05.389 --> 00:14:08.556
+Thank you for your attention
+
+00:14:08.556 --> 00:14:12.189
+and now I will answer questions.
+
+00:14:12.189 --> 00:14:22.622
+Oh. There is a lot of... Okay. I see
+some questions.
+
+00:14:22.622 --> 00:14:29.222
+Did you release some config files such
+as Emacs custom.el, some of which have
+sensitive data?
+
+00:14:29.222 --> 00:14:39.922
+Ideally, in the folding way, I create a
+separate directory called local/share/emacs,
+
+00:14:39.922 --> 00:14:45.089
+and I place custom el files here. It's
+not synchronized in any way,
+
+00:14:45.089 --> 00:14:48.922
+and it will be just lost in case you
+move to a separate machine.
+
+00:14:48.922 --> 00:14:52.456
+I do it for a purpose, because I don't
+use custom.el.
+
+00:14:52.456 --> 00:14:59.456
+It's hard to make it reproducible if
+you're using such mechanism as custom.el.
+
+00:14:59.456 --> 00:15:06.656
+How do you learn the Nix language
+basics? Just from the manual?
+
+00:15:06.656 --> 00:15:10.141
+I read a lot of documentation.
+
+00:15:10.141 --> 00:15:15.989
+Also, I saw the course like Learn Nix in
+15 minutes.
+
+00:15:15.989 --> 00:15:19.289
+And also there was another resource.
+
+00:15:19.289 --> 00:15:25.689
+Better to ask this question in Nix or
+NixOS channel in IRC,
+
+00:15:25.689 --> 00:15:32.989
+which will be treated in more details.
+
+00:15:32.989 --> 00:15:36.656
+What are the main advantages besides
+switching computers,
+
+00:15:36.656 --> 00:15:38.909
+which most people rarely do?
+
+00:15:38.909 --> 00:15:44.422
+For example, the original idea was to
+make part of configurations
+
+00:15:44.422 --> 00:15:46.422
+available for projects.
+
+00:15:46.422 --> 00:15:48.156
+For example, you have some project,
+
+00:15:48.156 --> 00:15:51.914
+you made the setup,
+and want other developers
+
+00:15:51.914 --> 00:15:55.256
+to use the same setup
+on their machine,
+
+00:15:55.256 --> 00:15:58.122
+but you implement only the part of
+stuff,
+
+00:15:58.122 --> 00:16:01.156
+like one subconfig especially for
+this language
+
+00:16:01.156 --> 00:16:05.389
+for this project. With such approach,
+you can easily
+
+00:16:05.389 --> 00:16:10.556
+share such subconfig with other people.
+
+00:16:10.556 --> 00:16:15.239
+Have you tried Guix in place of Nix?
+
+00:16:15.239 --> 00:16:22.272
+Yes, I tried it, and currently I am in
+the state of switching from Nix to Guix.
+
+00:16:22.272 --> 00:16:26.739
+You can follow my Youtube channel, I think,
+
+00:16:26.739 --> 00:16:32.522
+I do streams twice in a month
+
+00:16:32.522 --> 00:16:35.922
+talking about reproducibility and
+related stuff.
+
+00:16:35.922 --> 00:16:39.306
+Probably soon I will be talking
+about installation of Guix
+
+00:16:39.306 --> 00:16:41.239
+and configuration of it.
+
+00:16:41.239 --> 00:16:44.956
+In case you're watching this video later,
+
+00:16:44.956 --> 00:16:47.972
+you can find me somewhere on the network
+using those contacts.
+
+00:16:47.972 --> 00:16:50.406
+It's my nickname and my e-mail address.
+
+00:16:54.072 --> 00:16:56.556
+([Amin:] Awesome. I think we're wrapping
+up just on time.
+
+00:16:56.556 --> 00:17:00.889
+Thank you so much, Andrew, for your
+great talk,
+
+00:17:00.889 --> 00:17:04.622
+and for hanging out to answer the
+questions live.)
+
+00:17:04.622 --> 00:17:08.022
+[Andrew:] Thank you for organizing the
+conference
+
+00:17:08.022 --> 00:17:11.572
+and thank you all participants for
+questions and participation.
+
+00:17:11.572 --> 00:17:18.000
+See you soon!
diff --git a/2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt b/2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt
new file mode 100644
index 00000000..0d69ba0e
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--09-orgmode-your-life-in-plain-text--rainer-koenig.vtt
@@ -0,0 +1,385 @@
+WEBVTT
+
+00:00:02.480 --> 00:00:06.240
+Hi there, this is Rainer. I have
+
+00:00:06.240 --> 00:00:08.559
+a 10-minute time slot at the EmacsConf
+
+00:00:08.559 --> 00:00:11.759
+and I will show you a quick walk
+
+00:00:11.759 --> 00:00:17.039
+through my GTD system in Org mode, so
+
+00:00:17.039 --> 00:00:19.520
+let's start with capturing. We want to
+
+00:00:19.520 --> 00:00:24.080
+capture what we do here. So the idea
+
+00:00:24.080 --> 00:00:27.279
+is I press F6 and I say: "I want to make a
+
+00:00:27.279 --> 00:00:29.599
+small project because this video
+
+00:00:29.599 --> 00:00:33.120
+will be a small project," so the thing is:
+
+00:00:33.120 --> 00:00:42.000
+"Record a video for Emacs Conf 2020."
+
+00:00:42.000 --> 00:00:45.920
+Video is recorded, edited,
+
+00:00:45.920 --> 00:00:49.360
+and uploaded. We can also
+
+00:00:49.360 --> 00:00:52.160
+set the timeline because we want to
+
+00:00:52.160 --> 00:00:53.680
+upload it. The time,
+
+00:00:53.680 --> 00:00:56.640
+the deadline for uploads is--we know it
+
+00:00:56.640 --> 00:00:59.440
+already--the 14th of November.
+
+00:00:59.440 --> 00:01:03.600
+so let me put this in here. See, this is
+done.
+
+00:01:03.600 --> 00:01:05.760
+Now, because it's a project... I mean, I
+
+00:01:05.760 --> 00:01:07.600
+could say just one task to record a
+
+00:01:07.600 --> 00:01:12.159
+video, but it's too much, so let's split
+it down in a few
+
+00:01:12.159 --> 00:01:40.400
+small tasks. The next one...
+
+00:01:40.400 --> 00:01:43.439
+So you see, I've just typed a few
+
+00:01:43.439 --> 00:01:46.159
+quick tasks. We can see them if we look
+
+00:01:46.159 --> 00:01:50.240
+in the capture file.
+
+00:01:50.240 --> 00:01:52.399
+You see, there's my project entry and
+
+00:01:52.399 --> 00:01:54.479
+there are all my tasks. Since it's a
+
+00:01:54.479 --> 00:01:56.799
+project, I can now
+
+00:01:56.799 --> 00:02:05.360
+make it easy. I just indent every
+task by one
+
+00:02:05.360 --> 00:02:18.560
+and then, so...
+
+00:02:18.560 --> 00:02:23.120
+Okay, so you see we have one
+
+00:02:23.120 --> 00:02:27.360
+project here, and this one we refile now
+
+00:02:27.360 --> 00:02:36.160
+to our backlog.
+
+00:02:36.160 --> 00:02:42.000
+So if we look in our backlog,
+
+00:02:42.000 --> 00:02:45.599
+you see my project with all the tasks.
+
+00:02:45.599 --> 00:02:52.480
+So now, next one.
+
+00:02:52.480 --> 00:02:56.720
+I pretend now I'm doing a weekly review.
+
+00:02:56.720 --> 00:03:01.040
+C-c x b.
+
+00:03:01.040 --> 00:03:04.080
+And I already did some things, and now
+
+00:03:04.080 --> 00:03:07.120
+the point where I am
+
+00:03:07.120 --> 00:03:10.319
+is scheduled tasks with no date.
+
+00:03:10.319 --> 00:03:15.200
+Those are all those tasks. So I have a
+
+00:03:15.200 --> 00:03:17.519
+weekly review helper that says, okay,
+
+00:03:17.519 --> 00:03:19.040
+show me everything
+
+00:03:19.040 --> 00:03:22.080
+that I need to schedule, plan.
+
+00:03:22.080 --> 00:03:30.879
+So schedule this class. We do
+everything.
+
+00:03:30.879 --> 00:03:35.040
+So everything is scheduled now,
+
+00:03:35.040 --> 00:03:38.239
+and we can check off that and so on.
+
+00:03:38.239 --> 00:03:42.000
+We can... I have a plan
+
+00:03:42.000 --> 00:03:44.959
+for every day. That's my free plan.
+
+00:03:44.959 --> 00:03:46.879
+I press F6,
+
+00:03:46.879 --> 00:03:50.239
+and I say p p plan.
+
+00:03:50.239 --> 00:03:53.439
+Private things. You see there is the
+
+00:03:53.439 --> 00:03:57.360
+first day, 12th of November, German.
+
+00:03:57.360 --> 00:04:03.200
+And now I can look at what I have to do
+today.
+
+00:04:04.239 --> 00:04:07.040
+My agenda view is very long, and I just want
+
+00:04:07.040 --> 00:04:09.360
+to focus on a few tasks, so
+
+00:04:09.360 --> 00:04:22.639
+I copied them to my daily plan.
+
+00:04:22.639 --> 00:04:25.680
+I just want to show you. So I have a
+
+00:04:25.680 --> 00:04:29.919
+daily plan for every day, and that means
+
+00:04:29.919 --> 00:04:33.919
+this one is what I see,
+
+00:04:33.919 --> 00:04:37.680
+and this one is gone.
+
+00:04:37.680 --> 00:04:41.360
+So now, let's pretend we are working on
+
+00:04:41.360 --> 00:04:43.600
+the first: we find the requirements for
+
+00:04:43.600 --> 00:04:44.960
+the video.
+
+00:04:44.960 --> 00:04:48.320
+We had a look. Okay,
+
+00:04:48.320 --> 00:04:51.520
+I can mark this task as done here
+
+00:04:51.520 --> 00:04:53.520
+because I knew the requirements. C-c t.
+
+00:04:54.840 --> 00:05:05.199
+Done. Format is 720p, webm codec.
+
+00:05:05.199 --> 00:05:09.440
+So this one is done and I can mark it
+
+00:05:09.440 --> 00:05:14.560
+off here as well. So now I have marked it off
+
+00:05:14.560 --> 00:05:17.600
+everywhere. The good thing of my
+
+00:05:17.600 --> 00:05:19.600
+daily plan is that I can
+
+00:05:19.600 --> 00:05:21.600
+really see it all the day. I stick to
+
+00:05:21.600 --> 00:05:23.520
+this, what I decided in the morning what
+
+00:05:23.520 --> 00:05:24.639
+I want to do.
+
+00:05:24.639 --> 00:05:28.080
+So let's go to the next one. Make
+a quick test.
+
+00:05:28.080 --> 00:05:38.000
+Yeah, I did the test already.
+
+00:05:38.000 --> 00:05:40.720
+I will do a small trick. I say, okay, I
+
+00:05:40.720 --> 00:05:42.639
+record the video here.
+
+00:05:42.639 --> 00:05:46.960
+Video recorded. Then let me do
+
+00:05:46.960 --> 00:05:55.120
+what to show.
+
+00:05:55.120 --> 00:05:58.319
+Now I'm recording the video.
+
+00:05:58.319 --> 00:06:02.240
+Let's see. What we do: we had
+capture, we had
+
+00:06:02.240 --> 00:06:05.440
+weekly review, we had daily planning.
+
+00:06:05.440 --> 00:06:09.919
+How are we processing this? Very nice.
+
+00:06:09.919 --> 00:06:12.319
+So let's pretend the video is recorded
+
+00:06:12.319 --> 00:06:17.520
+C-c t done.
+
+00:06:17.520 --> 00:06:20.479
+Let me put this to NEXT again. Start
+
+00:06:20.479 --> 00:06:27.280
+kdenlive to time lapse.
+
+00:06:27.280 --> 00:06:30.319
+After recording it,
+
+00:06:30.319 --> 00:06:33.759
+I pretend this is done now.
+
+00:06:33.759 --> 00:06:39.039
+C-c t done.
+
+00:06:39.039 --> 00:06:42.400
+Then I have a video ready.
+
+00:06:42.400 --> 00:06:44.639
+Let's pretend I did the upload
+
+00:06:44.639 --> 00:06:50.639
+as well. Done. Video uploaded.
+
+00:06:50.639 --> 00:06:55.280
+So I can say everything now is done.
+
+00:06:55.280 --> 00:06:59.199
+Save it, so tomorrow I see what I did
+yesterday.
+
+00:06:59.199 --> 00:07:02.560
+Here I'm completely done.
+
+00:07:02.560 --> 00:07:06.000
+We have the weekly review.
+
+00:07:06.000 --> 00:07:09.680
+We put another
+
+00:07:09.680 --> 00:07:12.639
+buffer here because I want to show you
+
+00:07:12.639 --> 00:07:15.199
+the final step of my weekly review.
+
+00:07:16.960 --> 00:07:19.199
+If you see, there's a final step that
+
+00:07:19.199 --> 00:07:21.599
+says: select finished tasks and make a bulk
+
+00:07:21.599 --> 00:07:24.160
+archive action. So if you look at my
+
+00:07:24.160 --> 00:07:26.560
+EmacsConf thing, okay, the project is
+
+00:07:26.560 --> 00:07:27.440
+done as well.
+
+00:07:27.440 --> 00:07:31.360
+Project C-c t done.
+
+00:07:31.360 --> 00:07:34.880
+And then, what I can do is now see
+
+00:07:34.880 --> 00:07:38.160
+a weekly review helper.
+
+00:07:38.160 --> 00:07:41.680
+Finished tasks. I could
+
+00:07:41.680 --> 00:07:48.639
+make a bulk operation that says
+archive everything,
+
+00:07:48.639 --> 00:07:50.639
+but at the moment I don't need to do
+
+00:07:50.639 --> 00:07:52.720
+that because we have
+
+00:07:52.720 --> 00:07:56.720
+a tree structure, so it's C-c x a I have this
+
+00:07:56.720 --> 00:08:00.080
+task away, and the task is done. So that's
+
+00:08:00.080 --> 00:08:02.800
+it. That's my system you see: from
+
+00:08:02.800 --> 00:08:06.080
+capturing tasks, to scheduling tasks,
+
+00:08:06.080 --> 00:08:08.000
+to putting it on the daily plan,
+
+00:08:08.000 --> 00:08:09.759
+performing it, and at the end, when
+
+00:08:09.759 --> 00:08:11.120
+everything is done,
+
+00:08:11.120 --> 00:08:13.199
+the next weekly review they will go
+
+00:08:13.199 --> 00:08:14.879
+to the archive file,
+
+00:08:14.879 --> 00:08:17.199
+because it's finished. Thank you for
+
+00:08:17.399 --> 00:08:21.959
+watching. That's it.
diff --git a/2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt b/2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt
new file mode 100644
index 00000000..e6eb21a7
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--10-lead-your-future-with-org--andrea.vtt
@@ -0,0 +1,349 @@
+WEBVTT
+
+00:00:00.220 --> 00:00:03.400
+Welcome to my talk, Lead Your Future with
+Org.
+
+00:00:03.400 --> 00:00:04.680
+Who am I?
+
+00:00:04.680 --> 00:00:05.680
+I'm Andrea.
+
+00:00:05.680 --> 00:00:10.060
+I work as a Scala software engineer somewhere
+in the Netherlands, and I inherited my passion
+
+00:00:10.060 --> 00:00:12.340
+for Emacs from my PhD supervisor.
+
+00:00:12.340 --> 00:00:15.050
+From that moment on, I got in synergy with
+it.
+
+00:00:15.050 --> 00:00:19.830
+You can find more about me and my interests
+at https://ag91.github.io.
+
+00:00:19.830 --> 00:00:27.150
+That is the place where I keep my blog and
+I blog on a weekly basis.
+
+00:00:27.150 --> 00:00:29.449
+Let's get into the bulk of the talk.
+
+00:00:29.449 --> 00:00:31.679
+Why I needed a vision.
+
+00:00:31.679 --> 00:00:34.360
+The main, main problem is that I have too
+many interests.
+
+00:00:34.360 --> 00:00:37.740
+I like a lot of things, and these things take
+time.
+
+00:00:37.740 --> 00:00:44.000
+Then I have too little time to do other things
+that are very important as well.
+
+00:00:44.000 --> 00:00:46.430
+And so I need priority.
+
+00:00:46.430 --> 00:00:51.750
+And the vision in my mind is both an ambition,
+something that I want to do with my life,
+
+00:00:51.750 --> 00:00:59.220
+and at the same time, it's a way to focus
+my efforts and get rid of some stuff that
+
+00:00:59.220 --> 00:01:03.350
+fundamentally is not something I really care
+so much about.
+
+00:01:03.350 --> 00:01:09.400
+Even if you come up with a vision and so with
+a smaller scope of things that you want to
+
+00:01:09.400 --> 00:01:17.150
+do, even then, you have to take this ambition
+of yours, this vision, and disassemble it
+
+00:01:17.150 --> 00:01:19.310
+in very small steps.
+
+00:01:19.310 --> 00:01:28.950
+Org Mode is very good at taking care of this
+because you can keep track of TODOs in Org
+
+00:01:28.950 --> 00:01:29.950
+Mode.
+
+00:01:29.950 --> 00:01:36.740
+So let me show you how I keep an agenda that
+also keeps track of my vision.
+
+00:01:36.740 --> 00:01:40.250
+For this talk, I have a running example.
+
+00:01:40.250 --> 00:01:42.990
+Vision will be "I want to bring joy to people."
+
+00:01:42.990 --> 00:01:45.730
+and "I want to live in synergy with the planet."
+
+00:01:45.730 --> 00:01:49.740
+Okay, so, given these two visions, let's open
+the agenda.
+
+00:01:49.740 --> 00:01:59.560
+You will see on the right that now I have
+some tasks, both on Tuesday and on Friday.
+
+00:01:59.560 --> 00:02:04.560
+Things to notice is that we said one of our
+visions is synergy with the planet, so some
+
+00:02:04.560 --> 00:02:13.010
+tasks are annotated on the left with this
+category and some with "Bring joy to people."
+
+00:02:13.010 --> 00:02:16.730
+In this way, you can distinguish where are
+my...
+
+00:02:16.730 --> 00:02:20.100
+In this day, where my effort is going in this
+day.
+
+00:02:20.100 --> 00:02:27.950
+The other thing is the specification of these
+tasks, and then at the end, you can notice
+
+00:02:27.950 --> 00:02:42.690
+a tag on the right that is essentially a guess
+of how long this task will have an effect
+
+00:02:42.690 --> 00:02:43.750
+over the future.
+
+00:02:43.750 --> 00:02:53.970
+So, for example, installing solar panel onto
+my roof is going to have an effect of 10 years
+
+00:02:53.970 --> 00:02:57.180
+over my life, if I manage to achieve that.
+
+00:02:57.180 --> 00:03:01.230
+That is my rough guess.
+
+00:03:01.230 --> 00:03:08.180
+You will notice that the ones that have a
+bigger amount, so 10 years over the 5 year
+
+00:03:08.180 --> 00:03:15.879
+one, because I order my day so that the tasks
+that are more important or that I believe
+
+00:03:15.879 --> 00:03:21.540
+are more effective over my future, I sort
+them so that they appear at the top.
+
+00:03:21.540 --> 00:03:26.420
+In this way, I can basically decide, okay,
+today, what should I...
+
+00:03:26.420 --> 00:03:36.379
+Find a video on Youtube, but I should take
+into consideration when I look at my agenda
+
+00:03:36.379 --> 00:03:42.379
+that I've traded that small fun for today
+with something that could have had an effect
+
+00:03:42.379 --> 00:03:45.890
+over a longer period of time.
+
+00:03:45.890 --> 00:04:03.909
+Let me show you how I also exploit the facilities
+that Org Mode comes with.
+
+00:04:03.909 --> 00:04:05.190
+I will...
+
+00:04:05.190 --> 00:04:07.830
+I have two templates available to me.
+
+00:04:07.830 --> 00:04:09.330
+I will choose one.
+
+00:04:09.330 --> 00:04:13.970
+The first thing that it asks to me is "How
+long will this affect your life?"
+
+00:04:13.970 --> 00:04:20.660
+So I like ... It will affect a long time,
+if I manage to produce only for myself.
+
+00:04:20.660 --> 00:04:23.400
+So I choose 10 years.
+
+00:04:23.400 --> 00:04:24.750
+And then I specify the task.
+
+00:04:24.750 --> 00:04:29.080
+So, "Learn how to keep bees."
+
+00:04:29.080 --> 00:04:30.080
+I collect this task.
+
+00:04:30.080 --> 00:04:35.870
+It will now appear in the middle because 10
+years is between 20 years and 5 years.
+
+00:04:35.870 --> 00:04:40.860
+So I know that if I put some effort in learning
+how to keep bees, I should be quite happy
+
+00:04:40.860 --> 00:04:41.979
+for today.
+
+00:04:41.979 --> 00:04:43.060
+Okay.
+
+00:04:43.060 --> 00:04:50.470
+So, say that I do it, say that that's it...
+
+00:04:50.470 --> 00:04:52.490
+Once I've done this task, how can I be...
+
+00:04:52.490 --> 00:04:58.000
+How do I know how much progress I am doing?
+
+00:04:58.000 --> 00:05:07.100
+The way I can do that is by retrospecting
+weekly or monthly about the successes or the
+
+00:05:07.100 --> 00:05:09.520
+progress that I am doing.
+
+00:05:09.520 --> 00:05:14.949
+How I do it is simply by running this kind
+of snippet that shows me that for this month,
+
+00:05:14.949 --> 00:05:23.350
+I have done three tasks for bringing joy to
+people and three tasks for synergy with planet.
+
+00:05:23.350 --> 00:05:30.300
+This is useful because you can repeat it and
+it will be appended, so every time you run
+
+00:05:30.300 --> 00:05:38.040
+it again, you can compare if you are... how
+you are working towards your goal and if you're
+
+00:05:38.040 --> 00:05:43.830
+focusing more on bringing joy to people or
+if you're focusing more on synergy.
+
+00:05:43.830 --> 00:05:45.990
+Balance the effort.
+
+00:05:45.990 --> 00:05:51.850
+A thing that I want to share that I think
+will be useful to you is this function I use
+
+00:05:51.850 --> 00:05:55.789
+that I made for myself to create these statistics.
+
+00:05:55.789 --> 00:06:04.509
+It's a wrapper around the very enjoyable library
+org-ql, which allows you to query and group
+
+00:06:04.509 --> 00:06:13.650
+headings, do analysis on headings, or restructuring
+and view headings in a SQL fashion.
+
+00:06:13.650 --> 00:06:19.120
+The syntax is very similar to SQL.
+
+00:06:19.120 --> 00:06:25.390
+You can manipulate your headings and visualize
+them or just get statistics as I have done
+
+00:06:25.390 --> 00:06:26.390
+here.
+
+00:06:26.390 --> 00:06:36.540
+Finally, for this talk, say that you are doing
+progress, that progress most likely will generate
+
+00:06:36.540 --> 00:06:39.950
+some useful knowledge for yourself.
+
+00:06:39.950 --> 00:06:46.050
+My way to store this knowledge is through
+org-roam, another interesting mode that is
+
+00:06:46.050 --> 00:06:54.759
+very... that is becoming very relevant and
+known today.
+
+00:06:54.759 --> 00:06:56.020
+The idea is that I simply...
+
+00:06:56.020 --> 00:07:08.470
+If I learn how to make, how to install solar
+panels, that can be useful knowledge.
+
+00:07:08.470 --> 00:07:15.800
+I can link to some other knowledge that I
+have and so create my own knowledgebase, and
+
+00:07:15.800 --> 00:07:19.020
+save it for later use.
+
+00:07:19.020 --> 00:07:25.160
+My later use is typically, in this case, my
+blog.
+
+00:07:25.160 --> 00:07:31.630
+In here, I have a few notes that are basically
+a synthesis of knowledge that I have collected
+
+00:07:31.630 --> 00:07:34.550
+doing my tasks towards my vision.
+
+00:07:34.550 --> 00:07:39.440
+With this, this is all I wanted to show you
+for this talk.
+
+00:07:39.440 --> 00:07:47.490
+You can follow me on my blog at https://ag91.github.io
+. That is also where I am going to share a
+
+00:07:47.490 --> 00:07:55.370
+version of this Org Mode file that allows
+you basically to create the same kind of configuration
+
+00:07:55.370 --> 00:08:02.950
+I have here, and you can create an instance
+by running this snippet of Emacs in which
+
+00:08:02.950 --> 00:08:04.790
+you can just run this example.
+
+00:08:04.790 --> 00:08:11.890
+An extended example I will also add, to just
+play around safely with this kind of configuration.
+
+00:08:11.890 --> 00:08:13.300
+So enjoy the rest of the conference.
+
+00:08:13.300 --> 00:08:14.460
+Catch you later!
+
+00:08:14.460 --> 00:08:15.650
+Nice to meet you!
diff --git a/2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt b/2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt
new file mode 100644
index 00000000..f3c3133d
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--11-the-org-gtd-package-opinions-about-getting-things-done--aldric.vtt
@@ -0,0 +1,1066 @@
+WEBVTT
+
+00:00:01.680 --> 00:00:03.439
+Hello, and welcome
+
+00:00:03.439 --> 00:00:07.200
+to my Org GTD talk.
+
+00:00:07.200 --> 00:00:10.400
+I wrote this package because I was
+
+00:00:10.400 --> 00:00:12.719
+overwhelmed with all the stuff I had to
+
+00:00:12.719 --> 00:00:14.320
+manage working at home.
+
+00:00:14.320 --> 00:00:17.359
+I'd heard about GTD. I saw someone
+
+00:00:17.359 --> 00:00:18.720
+using it with
+
+00:00:18.720 --> 00:00:22.320
+just a small notebook.
+
+00:00:22.320 --> 00:00:24.720
+I wanted to do it in Emacs because,
+
+00:00:24.720 --> 00:00:29.199
+well, Emacs can do everything, right?
+
+00:00:29.199 --> 00:00:31.359
+I'm going to jump in quickly. Just so
+
+00:00:31.359 --> 00:00:34.559
+you know, here's kind of a list of the
+
+00:00:34.559 --> 00:00:36.960
+resources. Obviously, org-gtd, which you
+
+00:00:36.960 --> 00:00:38.719
+can find there. You can open an issue, ask
+
+00:00:38.719 --> 00:00:41.120
+me questions there about it.
+
+00:00:41.120 --> 00:00:43.280
+I use org-edna, a package for state
+
+00:00:43.280 --> 00:00:45.360
+triggers. I'm going to show this briefly
+
+00:00:45.360 --> 00:00:49.840
+when I finish item in a project.
+
+00:00:49.840 --> 00:00:52.000
+org-agenda-property, you will see in the
+
+00:00:52.000 --> 00:00:53.440
+agenda. It's going to show
+
+00:00:53.440 --> 00:00:57.360
+to whom an action has been delegated to.
+
+00:00:57.360 --> 00:01:00.960
+You will see org-roam briefly as a
+
+00:01:00.960 --> 00:01:02.559
+reference because that is what I have
+
+00:01:02.559 --> 00:01:06.960
+chosen for my knowledge archival tool.
+
+00:01:06.960 --> 00:01:07.360
+You can choose
+
+00:01:07.360 --> 00:01:12.640
+whatever you prefer.
+
+00:01:12.640 --> 00:01:15.520
+This is a quick, quick reminder on
+
+00:01:15.520 --> 00:01:18.479
+what GTD is and how it works.
+This is not a
+
+00:01:18.479 --> 00:01:22.640
+lesson on--a presentation on gtd
+because that would
+
+00:01:22.640 --> 00:01:27.920
+be... Well, other people have done it
+better than me.
+
+00:01:27.920 --> 00:01:31.280
+In short, everything goes into
+the inbox.
+
+00:01:31.280 --> 00:01:34.320
+Then you process the inbox, and you
+
+00:01:34.320 --> 00:01:35.600
+decide what to do, if
+
+00:01:35.600 --> 00:01:37.200
+it could be actionable or not. If it's
+
+00:01:37.200 --> 00:01:39.119
+actionable, it could be a project
+
+00:01:39.119 --> 00:01:40.799
+or it could be a single action, which you
+
+00:01:40.799 --> 00:01:42.159
+could delegate
+
+00:01:42.159 --> 00:01:45.759
+or schedule or just
+
+00:01:45.759 --> 00:01:48.079
+do it. If it's not actionable, you could
+
+00:01:48.079 --> 00:01:49.680
+just throw it away,
+
+00:01:49.680 --> 00:01:51.759
+incubate it for later, or move it into
+
+00:01:51.759 --> 00:01:57.520
+your files, reference.
+
+00:01:57.520 --> 00:02:05.119
+Over here, you can see the
+global bindings
+
+00:02:05.119 --> 00:02:08.959
+for org-gtd. Those are the actions,
+
+00:02:08.959 --> 00:02:11.599
+the functions I have made available.
+
+00:02:11.599 --> 00:02:14.000
+This is in progress. There's more to come.
+
+00:02:14.000 --> 00:02:15.760
+Some stuff is probably missing.
+
+00:02:15.760 --> 00:02:17.360
+It's grown mostly from my own personal
+
+00:02:17.360 --> 00:02:22.400
+use so far, so it doesn't have things.
+
+00:02:22.400 --> 00:02:27.200
+In the bottom right, you can see the
+agenda.
+
+00:02:27.200 --> 00:02:28.560
+One thing I wanted to do with
+this package
+
+00:02:28.560 --> 00:02:32.959
+was leverage Org Mode as much as
+possible.
+
+00:02:32.959 --> 00:02:36.319
+So I tried to not reinvent
+
+00:02:36.319 --> 00:02:40.160
+the wheel as much as I could. That meant
+
+00:02:40.160 --> 00:02:43.599
+reusing the agenda. You can see here
+
+00:02:43.599 --> 00:02:45.599
+a couple of the things that are made
+
+00:02:45.599 --> 00:02:47.920
+available or kind of
+
+00:02:47.920 --> 00:02:49.760
+customized or configured for you,
+
+00:02:49.760 --> 00:02:54.319
+some of the opinions that org-gtd has.
+
+00:02:54.319 --> 00:02:56.400
+Up here, for instance, you can see a
+
+00:02:56.400 --> 00:02:57.840
+delegated action.
+
+00:02:57.840 --> 00:03:01.040
+So a delegated action
+
+00:03:01.040 --> 00:03:03.200
+has someone to whom it's delegated. It's
+
+00:03:03.200 --> 00:03:04.720
+my parents in this case.
+
+00:03:04.720 --> 00:03:06.080
+It has the name of the action: ask
+
+00:03:06.080 --> 00:03:08.239
+parents what gift they want.
+
+00:03:08.239 --> 00:03:11.599
+It's marked as the state
+
+00:03:11.599 --> 00:03:14.800
+of WAIT because I'm waiting.
+
+00:03:14.800 --> 00:03:17.280
+It is scheduled because you should
+
+00:03:17.280 --> 00:03:20.239
+ping people or check on the status
+status of a task
+
+00:03:20.239 --> 00:03:21.840
+when you're waiting for it, so you don't
+
+00:03:21.840 --> 00:03:25.680
+forget about it or it gets lost forever.
+
+00:03:25.680 --> 00:03:27.599
+I have a scheduled action to give a talk.
+
+00:03:27.599 --> 00:03:30.560
+That's what I'm doing right now.
+
+00:03:30.560 --> 00:03:33.440
+I have an incubated action which is
+
+00:03:33.440 --> 00:03:36.640
+also scheduled: to make money through the
+lottery.
+
+00:03:36.640 --> 00:03:38.640
+This is a thing to take a look at
+
+00:03:38.640 --> 00:03:41.120
+for later, decide later what I want to do.
+
+00:03:41.120 --> 00:03:42.560
+It might be actionable, it might not be.
+
+00:03:42.560 --> 00:03:44.560
+I don't know right now, or I didn't
+
+00:03:44.560 --> 00:03:49.280
+know when I processed it, so I
+incubated it.
+
+00:03:49.280 --> 00:03:52.319
+Underneath, we have all the things that
+
+00:03:52.319 --> 00:03:59.360
+are direct actions for me to take.
+
+00:03:59.360 --> 00:04:01.439
+All right. You see a little bit of the
+
+00:04:01.439 --> 00:04:04.080
+preparation seeps through the
+actual talk.
+
+00:04:04.080 --> 00:04:05.519
+I have here two... I have a single
+
+00:04:05.519 --> 00:04:07.920
+action of "Steal Andrea's
+
+00:04:07.920 --> 00:04:09.840
+GTD configuration"
+
+00:04:09.840 --> 00:04:12.879
+and an action to read the GTD book.
+
+00:04:12.879 --> 00:04:16.320
+It's part of a project.
+
+00:04:16.320 --> 00:04:21.680
+So most of the day-to-day operation with
+
+00:04:21.680 --> 00:04:23.840
+with this package should come through
+
+00:04:23.840 --> 00:04:26.000
+just having the agenda open
+
+00:04:26.000 --> 00:04:29.600
+and having it be your source
+
+00:04:29.600 --> 00:04:31.199
+for the information you need to know, so
+
+00:04:31.199 --> 00:04:34.960
+that you can do the right thing.
+So let's take a look
+
+00:04:34.960 --> 00:04:37.440
+at what's underneath all of this
+
+00:04:37.440 --> 00:04:39.600
+really quickly.
+
+00:04:39.600 --> 00:04:42.320
+We have--There's three primary files.
+
+00:04:42.320 --> 00:04:43.360
+We have the inbox.
+
+00:04:43.360 --> 00:04:45.759
+I'm gonna process it in a second
+
+00:04:45.759 --> 00:04:48.880
+because there's two things here.
+One thing to cancel, like
+
+00:04:48.880 --> 00:04:51.919
+an action to not take. It's nothing.
+And then something
+
+00:04:51.919 --> 00:04:53.919
+I will just put into org-roam, just so
+
+00:04:53.919 --> 00:04:58.960
+you can see that there is the
+incubate file.
+
+00:04:58.960 --> 00:05:02.000
+You can see here: make money through
+the lottery,
+
+00:05:02.000 --> 00:05:04.800
+captured, refiled here, and scheduled
+
+00:05:04.800 --> 00:05:06.560
+so it would show up in the agenda
+
+00:05:06.560 --> 00:05:10.000
+right at a given time. On the right,
+
+00:05:10.000 --> 00:05:13.039
+you have the actionable file. This is
+
+00:05:13.039 --> 00:05:14.560
+the one that has the most information,
+
+00:05:14.560 --> 00:05:18.960
+where most things should go.
+
+00:05:18.960 --> 00:05:20.560
+So I have the single actions. They all go
+
+00:05:20.560 --> 00:05:22.720
+underneath here.
+
+00:05:22.720 --> 00:05:24.479
+This is marked as next because it's an
+
+00:05:24.479 --> 00:05:26.240
+action for me to take.
+
+00:05:26.240 --> 00:05:28.240
+Delegated is marked as WAIT. It is
+
+00:05:28.240 --> 00:05:29.600
+not an action for me to take. It's an
+
+00:05:29.600 --> 00:05:31.199
+action for somebody else to take, but it
+
+00:05:31.199 --> 00:05:32.400
+is scheduled because
+
+00:05:32.400 --> 00:05:37.919
+I may wanna... I can check in at some point.
+
+00:05:38.400 --> 00:05:39.759
+Things that are scheduled, like "give a
+
+00:05:39.759 --> 00:05:43.120
+talk," do not have a TODO or NEXT or WAIT
+
+00:05:43.120 --> 00:05:44.960
+state because they are not bound that
+
+00:05:44.960 --> 00:05:46.400
+way. They are time-bound,
+
+00:05:46.400 --> 00:05:48.080
+so they will show up in the agenda when
+
+00:05:48.080 --> 00:05:50.320
+the time comes. I shouldn't act on them
+
+00:05:50.320 --> 00:05:53.840
+or I can't act on them beforehand.
+
+00:05:53.840 --> 00:05:55.280
+You can see here, I have two projects: a
+
+00:05:55.280 --> 00:05:56.880
+test project (and I will
+
+00:05:56.880 --> 00:05:58.880
+do something with this in a second)
+
+00:05:58.880 --> 00:06:00.080
+and then there's this
+
+00:06:00.080 --> 00:06:01.919
+package "Make a GTD package." There's a
+
+00:06:01.919 --> 00:06:04.000
+project here for me to create this.
+
+00:06:04.000 --> 00:06:07.520
+It's made of a bunch of actions.
+
+00:06:07.520 --> 00:06:09.759
+I'm going to show you two things here.
+
+00:06:09.759 --> 00:06:14.639
+One is: since I was trying to leverage
+
+00:06:14.639 --> 00:06:16.400
+Org Mode as much as possible,
+
+00:06:16.400 --> 00:06:20.479
+I didn't try to create very clever
+
+00:06:20.479 --> 00:06:24.080
+operations, because Org Mode has a lot of
+
+00:06:24.080 --> 00:06:27.199
+very powerful tools already.
+
+00:06:27.199 --> 00:06:29.600
+There's automations I can add,
+
+00:06:29.600 --> 00:06:31.039
+but I thought it might be
+
+00:06:31.039 --> 00:06:34.240
+better to leave more things in the
+
+00:06:34.240 --> 00:06:35.680
+hands of the user.
+
+00:06:35.680 --> 00:06:38.000
+So here, in this case, this test project
+
+00:06:38.000 --> 00:06:39.199
+we can just archive.
+
+00:06:39.199 --> 00:06:42.479
+Right. That's just
+
+00:06:42.479 --> 00:06:45.680
+C-c C-x C-a is the
+
+00:06:45.680 --> 00:06:52.000
+org-archive action. Save this.
+
+00:06:52.000 --> 00:06:54.479
+So now if we go to...
+
+00:06:54.479 --> 00:06:56.160
+This will create an archive file
+
+00:06:56.160 --> 00:06:59.440
+which will have this information
+
+00:06:59.440 --> 00:07:00.560
+for later perusal
+
+00:07:00.560 --> 00:07:03.840
+if you're interested.
+
+00:07:03.840 --> 00:07:05.360
+That's one thing. If we go back to the
+
+00:07:05.360 --> 00:07:07.199
+agenda for a second,
+
+00:07:07.199 --> 00:07:10.479
+you can see
+
+00:07:10.479 --> 00:07:14.080
+these things here. Org. So by the way,
+
+00:07:14.080 --> 00:07:16.479
+this "parents" here was the org
+
+00:07:16.479 --> 00:07:19.120
+agenda property. This is what shows here,
+
+00:07:19.120 --> 00:07:23.680
+right? And here, if I finish "Read
+the GTD book,"
+
+00:07:23.680 --> 00:07:27.680
+I mark it as done. Now refresh.
+
+00:07:27.680 --> 00:07:31.919
+You'll see that another item shows up,
+
+00:07:31.919 --> 00:07:34.720
+and that is where org-edna comes in.
+
+00:07:34.720 --> 00:07:37.280
+When an action is marked as done in a project,
+
+00:07:37.280 --> 00:07:39.759
+the next to do action is
+
+00:07:39.759 --> 00:07:41.360
+automatically marked as next, so your
+
+00:07:41.360 --> 00:07:43.759
+agenda is automatically updated.
+
+00:07:43.759 --> 00:07:46.400
+This was one of the nice things for me
+
+00:07:46.400 --> 00:07:48.400
+because I didn't want to have to
+
+00:07:48.400 --> 00:07:50.400
+open my file, go find the action, mark it
+
+00:07:50.400 --> 00:07:51.919
+as done, find the next one, mark it as
+
+00:07:51.919 --> 00:07:53.440
+next, and so forth.
+
+00:07:53.440 --> 00:07:57.280
+I didn't want to bother with it.
+
+00:07:57.280 --> 00:07:58.960
+Oh, actually, you know what, let me show
+
+00:07:58.960 --> 00:08:00.960
+you something else.
+
+00:08:00.960 --> 00:08:07.120
+This simple project... I don't need this
+timestamp to
+
+00:08:07.120 --> 00:08:09.680
+be here but I like having a capture
+timestamp here,
+
+00:08:09.680 --> 00:08:13.039
+so I'm gonna make one up.
+
+00:08:13.039 --> 00:08:15.919
+So this is the most convenient thing
+
+00:08:15.919 --> 00:08:16.879
+that I think...
+
+00:08:16.879 --> 00:08:17.919
+This is one of the most convenient
+
+00:08:17.919 --> 00:08:20.720
+things that I get out of this binding.
+
+00:08:20.720 --> 00:08:22.960
+The next really convenient thing is the
+
+00:08:22.960 --> 00:08:24.400
+way this gets processed.
+
+00:08:24.400 --> 00:08:27.440
+Let me show you this.
+
+00:08:27.440 --> 00:08:30.080
+When you process the entire inbox,
+
+00:08:30.080 --> 00:08:31.440
+what you see is
+
+00:08:31.440 --> 00:08:33.440
+the items one at a time, so you can work
+
+00:08:33.440 --> 00:08:34.560
+with them.
+
+00:08:34.560 --> 00:08:36.320
+You can see at the bottom... You can
+
+00:08:36.320 --> 00:08:38.320
+work with them without being distracted.
+
+00:08:38.320 --> 00:08:40.320
+You can see at the bottom the list
+
+00:08:40.320 --> 00:08:42.399
+of things you can do, which are all the
+
+00:08:42.399 --> 00:08:45.120
+decisions you can take from GTD, right?
+
+00:08:45.120 --> 00:08:45.760
+In this case,
+
+00:08:45.760 --> 00:08:48.959
+this is one to throw out, so press t.
+
+00:08:48.959 --> 00:08:50.959
+You have the option to make modifications to
+
+00:08:50.959 --> 00:08:52.320
+this if you want to.
+
+00:08:52.320 --> 00:08:55.200
+If you have any reason to store it, then
+
+00:08:55.200 --> 00:08:56.240
+you finish editing.
+
+00:08:56.240 --> 00:08:58.160
+You can add a tag if you want to, because
+
+00:08:58.160 --> 00:09:00.080
+this might still be interesting,
+
+00:09:00.080 --> 00:09:02.720
+and then enter and it's done.
+
+00:09:02.720 --> 00:09:03.920
+Important knowledge,
+
+00:09:03.920 --> 00:09:06.959
+I'm going to hit a for archive it.
+
+00:09:06.959 --> 00:09:12.160
+I'm gonna start looking at
+org-roam.
+
+00:09:12.160 --> 00:09:20.800
+So this is important knowledge.
+
+00:09:20.800 --> 00:09:23.519
+I have to capture this. That's it.
+
+00:09:23.519 --> 00:09:24.640
+I've captured it.
+
+00:09:24.640 --> 00:09:27.920
+It is done.
+
+00:09:27.920 --> 00:09:30.959
+I go back to buffer,
+
+00:09:30.959 --> 00:09:34.080
+and I can mark it with C-c.
+
+00:09:34.080 --> 00:09:35.360
+There's no archiving because this is
+
+00:09:35.360 --> 00:09:37.279
+just knowledge. There's no
+
+00:09:37.279 --> 00:09:38.800
+tagging. It's just knowledge. But then the
+
+00:09:38.800 --> 00:09:40.320
+simple project... I want to show you this
+
+00:09:40.320 --> 00:09:42.800
+because there's some automation
+that's pretty helpful.
+
+00:09:42.800 --> 00:09:50.000
+In the simple project, I have my first
+action,
+
+00:09:50.000 --> 00:09:53.920
+second action, third action.
+
+00:09:53.920 --> 00:09:55.360
+and you see, this is all I'm writing.
+
+00:09:55.360 --> 00:09:56.720
+I'm not adding any of the states, any of the
+
+00:09:56.720 --> 00:10:00.399
+tags. They're going to be added by...
+
+00:10:00.399 --> 00:10:04.320
+Here, I can add a tag
+
+00:10:04.320 --> 00:10:05.839
+if I want to this project.
+
+00:10:05.839 --> 00:10:07.360
+I don't care
+
+00:10:07.360 --> 00:10:09.920
+right now, but you know... I leave the tags
+
+00:10:09.920 --> 00:10:11.279
+to the user, so they're not super
+
+00:10:11.279 --> 00:10:15.440
+relevant to me as a package provider.
+
+00:10:15.440 --> 00:10:19.600
+This is where we are. This is
+
+00:10:19.600 --> 00:10:21.200
+the whole thing. So now if we go back to
+
+00:10:21.200 --> 00:10:23.519
+the agenda,
+
+00:10:23.519 --> 00:10:27.600
+I have a first action, right.
+
+00:10:27.600 --> 00:10:30.720
+And if I go to the actionable file, and now
+
+00:10:30.720 --> 00:10:32.959
+see, I have a simple project that has my
+
+00:10:32.959 --> 00:10:34.079
+first action as NEXT,
+
+00:10:34.079 --> 00:10:38.079
+second option TODO, third action as TODO.
+
+00:10:38.079 --> 00:10:41.360
+So what I've... You know,
+
+00:10:41.360 --> 00:10:42.880
+as you can see... I hope what I've tried to
+
+00:10:42.880 --> 00:10:47.200
+do is take all of the
+
+00:10:47.200 --> 00:10:50.880
+tedium out of working with
+
+00:10:50.880 --> 00:10:52.560
+with Emacs and Org Mode when working
+
+00:10:52.560 --> 00:10:54.880
+with your actions so you could focus on
+
+00:10:54.880 --> 00:10:57.200
+what you want to do, what you need to do,
+
+00:10:57.200 --> 00:10:58.640
+what you care about, and the package
+
+00:10:58.640 --> 00:11:04.880
+would take care of the rest.
+
+00:11:04.880 --> 00:11:06.240
+So the last thing I wanted to take a quick
+
+00:11:06.240 --> 00:11:08.000
+look at was some of the the tests.
+
+00:11:08.640 --> 00:11:11.120
+The code is available here. You can
+
+00:11:11.120 --> 00:11:13.440
+see the code on...
+
+00:11:13.440 --> 00:11:16.880
+the code on Github if you want.
+
+00:11:16.880 --> 00:11:18.720
+I've had some trouble writing good tests
+
+00:11:18.720 --> 00:11:20.320
+for this because Org Mode was written at
+
+00:11:20.320 --> 00:11:26.000
+a time before testing was quite
+as important, I think,
+
+00:11:26.000 --> 00:11:29.200
+or valued quite the same way,
+
+00:11:29.200 --> 00:11:31.440
+let's put it this way.
+
+00:11:31.440 --> 00:11:34.959
+And as a result, a number of things
+actually...
+
+00:11:34.959 --> 00:11:37.200
+It might also be a feature of Emacs at
+
+00:11:37.200 --> 00:11:38.240
+the time, I don't know.
+
+00:11:38.240 --> 00:11:40.560
+But a lot of things in Org Mode aren't
+
+00:11:40.560 --> 00:11:42.480
+very testable, and so
+
+00:11:42.480 --> 00:11:45.519
+what I ended up doing was just having an
+
+00:11:45.519 --> 00:11:49.440
+actual directory in which I
+
+00:11:49.440 --> 00:11:53.360
+actually... with files,
+
+00:11:53.360 --> 00:11:55.279
+right? So I don't have much mocking
+
+00:11:55.279 --> 00:11:57.120
+I can do. I can't just do a bunch of fake
+
+00:11:57.120 --> 00:11:58.639
+files, fake directories.
+
+00:11:58.639 --> 00:12:01.200
+So I actually go through the process,
+
+00:12:01.200 --> 00:12:03.360
+actually create files, and then actually
+
+00:12:03.360 --> 00:12:05.040
+have Emacs pointing at this
+
+00:12:05.040 --> 00:12:10.240
+directory to process and get the
+information.
+
+00:12:10.240 --> 00:12:12.240
+So I have to define the key to test that
+
+00:12:12.240 --> 00:12:13.920
+it gets bound properly.
+
+00:12:13.920 --> 00:12:18.160
+I have to set the capture templates.
+
+00:12:18.160 --> 00:12:19.839
+The capture templates are how
+
+00:12:19.839 --> 00:12:21.839
+things get added. I have a wrapper
+
+00:12:21.839 --> 00:12:25.600
+control... org-gtd-capture essentially is
+
+00:12:25.600 --> 00:12:27.279
+a wrapper around the capture that
+
+00:12:27.279 --> 00:12:29.920
+makes sure the inbox is there and then
+
+00:12:29.920 --> 00:12:32.000
+captures to the inbox.
+
+00:12:36.240 --> 00:12:39.360
+Making sure the items show in the agenda
+
+00:12:39.360 --> 00:12:41.519
+when I'm done with the processing
+
+00:12:41.519 --> 00:12:45.519
+was a little bit tricky. I had a bug and
+I had to to fix it,
+
+00:12:45.519 --> 00:12:50.480
+so I just wrote this test, but it's
+it's pretty convenient now
+
+00:12:50.480 --> 00:12:51.839
+to have that, because it gives me a
+
+00:12:51.839 --> 00:12:54.000
+bunch of sanity. So again, I have a
+
+00:12:54.000 --> 00:12:55.040
+capture, and this is...
+
+00:12:55.040 --> 00:12:56.000
+I wanted to be able to do this
+
+00:12:56.000 --> 00:12:59.680
+automatically but org-capture itself
+
+00:12:59.680 --> 00:13:02.079
+is not super testable right now,
+
+00:13:02.079 --> 00:13:03.200
+so the way it's...
+
+00:13:03.200 --> 00:13:04.480
+the way you test it is just by
+
+00:13:04.480 --> 00:13:07.519
+programmatically calling it, which
+
+00:13:07.519 --> 00:13:09.279
+is not exactly what I wanted, because I
+
+00:13:09.279 --> 00:13:10.639
+wanted something more like
+
+00:13:10.639 --> 00:13:13.200
+the user action, but I'll... You know, what I
+
+00:13:13.200 --> 00:13:15.519
+can get.
+
+00:13:15.519 --> 00:13:17.040
+And then I can... I'll just insert these
+
+00:13:17.040 --> 00:13:19.360
+words into the buffer and then
+
+00:13:19.360 --> 00:13:21.760
+I'll finalize the capture. Then I have
+
+00:13:21.760 --> 00:13:23.519
+another... I have a test package here
+
+00:13:23.519 --> 00:13:26.160
+called with simulated input which
+
+00:13:26.160 --> 00:13:29.920
+basically calls this and then enters
+
+00:13:29.920 --> 00:13:33.040
+these user actions. Right, so
+
+00:13:33.040 --> 00:13:34.800
+like the letter s,
+
+00:13:34.800 --> 00:13:39.040
+C-c c and then RET. And that is,
+
+00:13:39.040 --> 00:13:41.360
+you know, choosing a single action,
+
+00:13:41.360 --> 00:13:42.480
+then finishing the edit,
+
+00:13:42.480 --> 00:13:45.360
+and then adding zero and not adding tags.
+
+00:13:46.480 --> 00:13:48.639
+As you can tell, there's a strong layer
+
+00:13:48.639 --> 00:13:50.320
+of disconnect between the tests
+
+00:13:50.320 --> 00:13:56.560
+and what they represent.
+That's a work in progress.
+
+00:13:56.560 --> 00:13:59.680
+I have four tests.
+
+00:13:59.680 --> 00:14:02.320
+It's not a lot, but I want to... I intend to
+
+00:14:02.320 --> 00:14:05.040
+add more as I keep on adding more
+behavior.
+
+00:14:05.040 --> 00:14:09.519
+I would like this to be eventually
+
+00:14:09.519 --> 00:14:14.320
+a sane starting point for GTD.
+
+00:14:14.320 --> 00:14:16.079
+There's a lot of people like
+
+00:14:16.079 --> 00:14:18.720
+like Andrea, like Rainer, like...
+
+00:14:18.720 --> 00:14:20.959
+I mean, if you search for Org Mode and
+
+00:14:20.959 --> 00:14:22.160
+GTD, you'll find
+
+00:14:22.160 --> 00:14:25.279
+a lot of blog entries, a lot of
+
+00:14:25.279 --> 00:14:27.600
+entries, a lot of articles that explain
+
+00:14:27.600 --> 00:14:29.360
+how to connect it together, how to think
+
+00:14:29.360 --> 00:14:31.199
+that way, how to use all the tools that
+
+00:14:31.199 --> 00:14:34.880
+Org Mode makes available.
+
+00:14:34.880 --> 00:14:38.399
+Hopefully, this package is a way to
+
+00:14:38.399 --> 00:14:40.320
+get started without having to write
+
+00:14:40.320 --> 00:14:45.920
+too much of your own code.
+
+00:14:45.920 --> 00:14:47.279
+Then eventually, you can move away from
+
+00:14:47.279 --> 00:14:48.720
+the package if you want, if you realize
+
+00:14:48.720 --> 00:14:50.000
+that you are developing different opinions
+
+00:14:50.000 --> 00:14:52.000
+and you don't want to...
+
+00:14:52.000 --> 00:14:54.160
+If GTD doesn't work this way for you, if
+
+00:14:54.160 --> 00:14:55.519
+you have a different way,
+
+00:14:55.519 --> 00:14:57.839
+it is a better fit for the way you want
+
+00:14:57.839 --> 00:14:59.279
+to organize your life,
+
+00:14:59.279 --> 00:15:02.720
+then move away from the package.
+
+00:15:02.720 --> 00:15:05.920
+In the meanwhile, I welcome all thoughts.
+
+00:15:05.920 --> 00:15:07.839
+I welcome contributions. I welcome
+
+00:15:07.839 --> 00:15:10.079
+questions, bug reports, everything
+
+00:15:10.079 --> 00:15:13.920
+So, you know, come say hi. Try the package.
+
+00:15:13.920 --> 00:15:17.040
+And yeah, see you.
+
+00:15:17.040 --> 00:15:20.560
+I'll see you online!
diff --git a/2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt b/2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt
new file mode 100644
index 00000000..ba6afec0
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--12-one-big-ass-org-file-or-multiple-tiny-ones-finally-the-end-of-the-debate--leo-vivier.vtt
@@ -0,0 +1,1342 @@
+WEBVTT
+
+00:00:00.240 --> 00:00:01.520
+([Amin Bandali]: I mean, we are ahead of
+the schedule
+
+00:00:01.520 --> 00:00:03.679
+a little bit, but I mean we also were
+
+00:00:03.679 --> 00:00:05.680
+a little bit earlier in the day.
+
+00:00:05.680 --> 00:00:09.040
+Yeah, I'd say that's fine. Go for it.
+
+00:00:09.040 --> 00:00:10.800
+Take it away.)
+
+00:00:10.800 --> 00:00:14.240
+[Leo Vivier]: Sure. Thank you. So am I live already?
+
+00:00:14.240 --> 00:00:16.640
+[Amin]: Yep, you're live.
+
+00:00:16.640 --> 00:00:17.359
+[Leo]: Hello
+
+00:00:17.359 --> 00:00:18.880
+Splendid. So I'll just start the timer to
+
+00:00:18.880 --> 00:00:20.720
+make sure that I don't go overboard.
+
+00:00:20.720 --> 00:00:22.720
+All right. ([BBB:] you are now muted) Okay, good
+
+00:00:22.720 --> 00:00:24.160
+to go now.
+
+00:00:24.160 --> 00:00:26.960
+Hello again, everyone! I hope you had,
+
+00:00:26.960 --> 00:00:28.240
+well, quite a lot of talks
+
+00:00:28.240 --> 00:00:30.880
+ever since the last one I did, and all
+
+00:00:30.880 --> 00:00:32.000
+more interesting
+
+00:00:32.000 --> 00:00:35.040
+one after the other.
+
+00:00:35.040 --> 00:00:36.559
+You know, I'm a bit in a bit of a weird
+
+00:00:36.559 --> 00:00:38.239
+spot right now, because I'm supposed to
+
+00:00:38.239 --> 00:00:40.239
+be presenting to you (as you can see on
+my screen)
+
+00:00:40.239 --> 00:00:42.879
+"One big-ass Org file or multiple tiny ones:
+
+00:00:42.879 --> 00:00:44.960
+finally, the end of the debate,"
+
+00:00:44.960 --> 00:00:48.160
+and it sounds about as clickbaity
+
+00:00:48.160 --> 00:00:49.760
+as you can possibly get with those
+
+00:00:49.760 --> 00:00:51.280
+topics. By the way,
+
+00:00:51.280 --> 00:00:54.000
+credit where credit is due, the title
+
+00:00:54.000 --> 00:00:55.760
+is not mine. It's actually from Bastien
+
+00:00:55.760 --> 00:00:57.039
+Guerry, the current Org
+
+00:00:57.039 --> 00:01:00.719
+maintainer. Yeah, I wanted to
+
+00:01:00.719 --> 00:01:03.199
+talk to you a little bit today about
+
+00:01:03.199 --> 00:01:04.879
+this question because
+
+00:01:04.879 --> 00:01:07.600
+if you are used to going on
+reddit.com/r/emacs ,
+
+00:01:07.600 --> 00:01:09.600
+you know the subreddit that we
+have,
+
+00:01:09.600 --> 00:01:11.840
+if you go on Hacker News often, you know
+
+00:01:11.840 --> 00:01:13.200
+it's a question that
+
+00:01:13.200 --> 00:01:16.000
+you see pop up every once in a while.
+
+00:01:16.000 --> 00:01:17.520
+"Should I be using
+
+00:01:17.520 --> 00:01:20.640
+one big file, or should I be using
+
+00:01:20.640 --> 00:01:24.799
+a lot of tiny files?" I believe you
+know
+
+00:01:24.799 --> 00:01:27.600
+we've got defenders on both sides. If I
+
+00:01:27.600 --> 00:01:29.520
+just show you one example...
+
+00:01:29.520 --> 00:01:32.479
+We have Karl Voit. He's one
+
+00:01:32.479 --> 00:01:35.280
+of the organizers for the conference.
+
+00:01:35.280 --> 00:01:37.920
+He is the guy who probably has the
+
+00:01:37.920 --> 00:01:40.000
+biggest Org Mode files
+
+00:01:40.000 --> 00:01:42.000
+right now in all the people I know, and
+
+00:01:42.000 --> 00:01:43.759
+god knows I know plenty of people use
+
+00:01:43.759 --> 00:01:44.479
+Org Mode.
+
+00:01:44.479 --> 00:01:46.880
+But if you just look at this line--I hope
+
+00:01:46.880 --> 00:01:48.320
+it's not too small; you just
+
+00:01:48.320 --> 00:01:51.360
+make it a little larger--but
+
+00:01:51.360 --> 00:01:56.719
+Karl basically has a file with
+
+00:01:56.719 --> 00:02:01.759
+126,000 lines. I'm just going to pause
+
+00:02:01.759 --> 00:02:04.560
+and try to have you imagine how large a
+
+00:02:04.560 --> 00:02:06.399
+file it actually is.
+
+00:02:06.399 --> 00:02:08.399
+Just think about all of these lines
+
+00:02:08.399 --> 00:02:10.000
+being tasks in your days.
+
+00:02:10.000 --> 00:02:13.200
+Think about all those lines being about
+little thoughts
+
+00:02:13.200 --> 00:02:14.400
+you know that you've had throughout the
+
+00:02:14.400 --> 00:02:17.200
+day or project that you were working on.
+
+00:02:17.200 --> 00:02:19.680
+It's massive. You know one of the
+
+00:02:19.680 --> 00:02:23.920
+problems that Karl Voit actually
+approaches on
+
+00:02:23.920 --> 00:02:27.680
+this topic is that it takes him roughly
+
+00:02:27.680 --> 00:02:30.160
+20 seconds to get his Org agenda going,
+
+00:02:30.160 --> 00:02:32.400
+which is a massive amount of time.
+
+00:02:32.400 --> 00:02:35.680
+I mean, we have very fast computers now.
+
+00:02:35.680 --> 00:02:37.720
+You know, ever since Emacs was created in
+
+00:02:37.720 --> 00:02:42.319
+1976, computers... I have no idea how much faster
+
+00:02:42.319 --> 00:02:43.440
+they've gotten.
+
+00:02:43.440 --> 00:02:47.760
+And yet, you know, for 100,000 lines,
+
+00:02:47.760 --> 00:02:49.599
+Emacs seems to be choking. It's
+
+00:02:49.599 --> 00:02:51.120
+certainly not reasonable, in a way, to
+
+00:02:51.120 --> 00:02:52.720
+have to wait 20 seconds
+
+00:02:52.720 --> 00:02:55.360
+just for your entire file to be parsed.
+
+00:02:55.360 --> 00:02:57.040
+So basically what I want to do--
+
+00:02:57.040 --> 00:02:58.480
+By the way, I forgot to introduce the
+
+00:02:58.480 --> 00:03:00.879
+presentation, but I'm Leo Vivier. I did this
+
+00:03:00.879 --> 00:03:02.879
+before, for those who were around.
+
+00:03:02.879 --> 00:03:05.519
+I help maintain a software which
+
+00:03:05.519 --> 00:03:06.640
+is called org-roam,
+
+00:03:06.640 --> 00:03:08.560
+and that's the expertise that I have on
+
+00:03:08.560 --> 00:03:09.840
+the topic.
+
+00:03:09.840 --> 00:03:11.760
+Actually, if you go online, I do have a
+
+00:03:11.760 --> 00:03:13.599
+Github page. I will make sure that you
+
+00:03:13.599 --> 00:03:15.440
+have all the links available afterwards.
+
+00:03:15.440 --> 00:03:18.640
+But I do publish my init files,
+
+00:03:18.640 --> 00:03:20.720
+and you can see, if you scroll at the
+
+00:03:20.720 --> 00:03:22.319
+bottom, I have a little demonstration
+
+00:03:22.319 --> 00:03:23.200
+which shows you
+
+00:03:23.200 --> 00:03:25.519
+the fancy things that I can do with my
+
+00:03:25.519 --> 00:03:28.159
+Org Mode setup. That might be even
+interesting
+
+00:03:28.159 --> 00:03:30.720
+in light of the talk you've just had
+
+00:03:30.720 --> 00:03:32.319
+about GTD stuff, because
+
+00:03:32.319 --> 00:03:34.080
+the first one is about how I handle my
+
+00:03:34.080 --> 00:03:36.159
+projects, the second one is about
+
+00:03:36.159 --> 00:03:39.680
+the flow from a task as I work on it...
+
+00:03:39.680 --> 00:03:41.519
+So I won't spend too much time on
+this, but
+
+00:03:41.519 --> 00:03:43.120
+basically that's my expertise.
+
+00:03:43.120 --> 00:03:45.440
+I have spent eight years
+
+00:03:45.440 --> 00:03:46.959
+working with Org Mode,
+
+00:03:46.959 --> 00:03:48.959
+three of them actually thinking about
+
+00:03:48.959 --> 00:03:50.720
+writing packages.
+
+00:03:50.720 --> 00:03:54.080
+The thing is, if I go into a little
+
+00:03:54.080 --> 00:03:55.680
+bit of detail (and obviously it's only a
+
+00:03:55.680 --> 00:03:57.760
+lighting talk, so I won't have time to
+
+00:03:57.760 --> 00:04:00.720
+actually go really in depth about it), but
+
+00:04:00.720 --> 00:04:01.840
+there is something
+
+00:04:01.840 --> 00:04:03.599
+in the Org Mode library which is
+
+00:04:03.599 --> 00:04:05.200
+called org-element.
+
+00:04:05.200 --> 00:04:07.000
+You have the name right there,
+
+00:04:07.000 --> 00:04:08.319
+org-element.el,
+
+00:04:08.319 --> 00:04:12.319
+.el being for Elisp file. As you
+can see,
+
+00:04:12.319 --> 00:04:14.799
+the page is on the Worg wiki, so it's
+
+00:04:14.799 --> 00:04:16.239
+accessible by everyone.
+
+00:04:16.239 --> 00:04:19.280
+It's basically the API that
+
+00:04:19.280 --> 00:04:23.759
+Org Mode uses to parse Org Mode files.
+
+00:04:23.759 --> 00:04:26.400
+For those who don't know, parsing
+
+00:04:26.400 --> 00:04:27.199
+means basically
+
+00:04:27.199 --> 00:04:29.360
+checking a file, checking all the contents
+
+00:04:29.360 --> 00:04:30.880
+of the file, and extracting all the
+
+00:04:30.880 --> 00:04:32.880
+information that we need from that file.
+
+00:04:32.880 --> 00:04:34.960
+As you can imagine, you all have
+
+00:04:34.960 --> 00:04:36.560
+Org Mode files in your mind,
+
+00:04:36.560 --> 00:04:38.240
+well you know they can be fairly complex.
+
+00:04:38.240 --> 00:04:39.840
+You can have properties,
+
+00:04:39.840 --> 00:04:41.759
+you can have contextual information, like
+
+00:04:41.759 --> 00:04:43.040
+if you write a line
+
+00:04:43.040 --> 00:04:45.199
+which starts at column zero (which means
+
+00:04:45.199 --> 00:04:46.560
+at the left),
+
+00:04:46.560 --> 00:04:48.000
+it doesn't have the same
+
+00:04:48.000 --> 00:04:49.680
+meaning, whether or not it is
+
+00:04:49.680 --> 00:04:52.639
+before the beginning of a headline or if
+
+00:04:52.639 --> 00:04:54.160
+it is after the beginning of a headline.
+
+00:04:54.160 --> 00:04:55.199
+It's going to be
+
+00:04:55.199 --> 00:04:57.759
+relatively different, hierarchically
+
+00:04:57.759 --> 00:04:58.960
+speaking.
+
+00:04:58.960 --> 00:05:02.639
+So the problem, when it comes to the
+question of
+
+00:05:02.639 --> 00:05:05.759
+many files versus one big file or
+
+00:05:05.759 --> 00:05:08.560
+few big files, is that we always have to
+
+00:05:08.560 --> 00:05:09.600
+keep in mind
+
+00:05:09.600 --> 00:05:12.880
+what org-element wants you to do.
+
+00:05:12.880 --> 00:05:15.680
+The thing is, there are plenty of
+
+00:05:15.680 --> 00:05:17.440
+problems when it comes to parsing files,
+
+00:05:17.440 --> 00:05:19.330
+the first one being obviously
+
+00:05:19.330 --> 00:05:22.160
+that Emacs is a single-thread
+
+00:05:22.160 --> 00:05:24.880
+process (or has some threading
+
+00:05:24.880 --> 00:05:26.400
+capabilities; we're not going to go into
+
+00:05:26.400 --> 00:05:28.639
+the details right now, that's not my goal).
+
+00:05:28.639 --> 00:05:32.400
+It makes it incredibly hard to
+
+00:05:32.400 --> 00:05:35.919
+parallelize parsing processes
+
+00:05:35.919 --> 00:05:39.280
+with the current technology.
+
+00:05:39.280 --> 00:05:42.320
+So you'd have to imagine that if you
+
+00:05:42.320 --> 00:05:44.080
+have a very large file--if you go back
+
+00:05:44.080 --> 00:05:46.479
+to the example of Karl Voit from before:
+
+00:05:46.479 --> 00:05:49.199
+100,000 lines--that means that you have
+
+00:05:49.199 --> 00:05:50.000
+to scan
+
+00:05:50.000 --> 00:05:52.320
+through every single line, basically.
+
+00:05:52.320 --> 00:05:53.759
+Because sometimes... Let's just say that
+
+00:05:53.759 --> 00:05:56.080
+you have a property drawer, for instance,
+
+00:05:56.080 --> 00:05:59.440
+which tells you, oh okay, this tree
+
+00:05:59.440 --> 00:06:03.520
+has the tag :foo:. So the problem is, there
+
+00:06:03.520 --> 00:06:05.120
+are multiple ways for you
+
+00:06:05.120 --> 00:06:08.720
+to define a tag. You can use the
+
+00:06:08.720 --> 00:06:11.840
+usual way, which is about wrapping in
+
+00:06:11.840 --> 00:06:14.000
+columns the :tag: at the end of a heading.
+
+00:06:14.000 --> 00:06:16.160
+For instance, if I... (I'm not going to
+
+00:06:16.160 --> 00:06:17.360
+switch to Emacs, that's going to waste too
+
+00:06:17.360 --> 00:06:18.240
+much time)
+
+00:06:18.240 --> 00:06:21.520
+That's one way to say your tag.
+But say,
+
+00:06:21.520 --> 00:06:23.520
+you have tag inheritance, which means
+
+00:06:23.520 --> 00:06:25.360
+that when you have a parent with a tag,
+
+00:06:25.360 --> 00:06:28.160
+you also want the child to inherit the
+
+00:06:28.160 --> 00:06:29.520
+tag. If you have
+
+00:06:29.520 --> 00:06:32.400
+first heading with the tag :foo:, you have
+
+00:06:32.400 --> 00:06:33.680
+the first subheading,
+
+00:06:33.680 --> 00:06:37.520
+and the tag :foo: is implied. Now imagine
+
+00:06:37.520 --> 00:06:39.680
+having to do that with a file that is
+
+00:06:39.680 --> 00:06:41.039
+completely nested,
+
+00:06:41.039 --> 00:06:44.160
+a file that has maybe 9, 10,
+
+00:06:44.160 --> 00:06:47.280
+11 levels of depth to it.
+
+00:06:47.280 --> 00:06:49.039
+It's mind-bogglingly complicated for the
+
+00:06:49.039 --> 00:06:51.039
+software to do that, knowing that... I've
+
+00:06:51.039 --> 00:06:52.639
+told you about tags,
+
+00:06:52.639 --> 00:06:55.919
+but any property can be inheritable.
+
+00:06:55.919 --> 00:06:58.639
+Anything like priorities, even. Though why
+
+00:06:58.639 --> 00:07:00.240
+would you do this?
+
+00:07:00.240 --> 00:07:03.759
+You can have groups. You can have all this.
+
+00:07:03.759 --> 00:07:05.599
+And as someone who went through the trouble
+
+00:07:05.599 --> 00:07:07.199
+of optimizing his Org agenda... So
+
+00:07:07.199 --> 00:07:08.560
+basically, if we go back to the
+
+00:07:08.560 --> 00:07:12.160
+GIFs--oh god we've already had this
+discussion
+
+00:07:12.160 --> 00:07:14.479
+between the "git" and "magit" and now I've
+
+00:07:14.479 --> 00:07:16.400
+started "gif" and "gif" and I only have one
+
+00:07:16.400 --> 00:07:18.080
+more minute left to do so, so let's just
+
+00:07:18.080 --> 00:07:19.599
+say I'm going to say "gif"
+
+00:07:19.599 --> 00:07:23.599
+just to spite people... So if you go on
+
+00:07:23.599 --> 00:07:26.880
+the way I organize my agenda, what I did
+
+00:07:26.880 --> 00:07:29.120
+in order to keep my agenda build time
+
+00:07:29.120 --> 00:07:30.960
+under two seconds,
+
+00:07:30.960 --> 00:07:33.440
+is that I've rewritten a whole lot of
+
+00:07:33.440 --> 00:07:36.560
+codes to be able to parse my Org agenda
+files.
+
+00:07:36.560 --> 00:07:40.080
+So the thing is, I'm going to be talking
+
+00:07:40.080 --> 00:07:41.360
+more about this later.
+
+00:07:41.360 --> 00:07:43.440
+I only have, let's say, one minute to
+
+00:07:43.440 --> 00:07:44.479
+conclude.
+
+00:07:44.479 --> 00:07:47.440
+So as you've gathered, I'm not going to
+
+00:07:47.440 --> 00:07:48.479
+be giving you the answer right now.
+
+00:07:48.479 --> 00:07:51.039
+I'm going to be talking about
+
+00:07:51.039 --> 00:07:53.440
+org-roam a little later, which is about
+
+00:07:53.440 --> 00:07:55.680
+following the principle of having many
+
+00:07:55.680 --> 00:07:57.759
+small files.
+
+00:07:57.759 --> 00:08:01.120
+But as someone who has been using
+
+00:08:01.120 --> 00:08:02.960
+one large file to manage my life,
+
+00:08:02.960 --> 00:08:04.879
+you know, I'm sitting on the fence.
+
+00:08:04.879 --> 00:08:08.319
+I do not know which one is the best,
+
+00:08:08.319 --> 00:08:10.560
+but I hope that my presentation has
+
+00:08:10.560 --> 00:08:12.240
+given you a little idea
+
+00:08:12.240 --> 00:08:15.199
+of what goes on behind the principles.
+
+00:08:15.520 --> 00:08:16.560
+You also need to think about the
+
+00:08:16.560 --> 00:08:18.560
+philosophy behind the organization of
+
+00:08:18.560 --> 00:08:19.120
+your notes.
+
+00:08:19.120 --> 00:08:21.039
+I hope to be approaching this topic
+
+00:08:21.039 --> 00:08:23.280
+with you in about
+
+00:08:23.280 --> 00:08:25.360
+two hours or so (maybe one hour actually).
+
+00:08:25.360 --> 00:08:27.520
+I'm actually finished. I've decided to
+
+00:08:27.520 --> 00:08:28.960
+leave you two minutes of questions.
+
+00:08:28.960 --> 00:08:31.520
+If someone could feed me the
+
+00:08:31.520 --> 00:08:32.880
+questions, that might be best,
+
+00:08:32.880 --> 00:08:34.399
+because I don't want... oh actually I can
+
+00:08:34.399 --> 00:08:36.240
+just open the pad.
+
+00:08:36.240 --> 00:08:39.919
+I can just open it. Give me a second, okay.
+
+00:08:40.800 --> 00:08:43.039
+Just loading up. I might stop showing
+
+00:08:43.039 --> 00:08:43.839
+my screen.
+
+00:08:43.839 --> 00:08:46.959
+That might make it easier. So I mean if
+
+00:08:46.959 --> 00:08:47.519
+you can make
+
+00:08:47.519 --> 00:08:49.360
+myself big now on the screen, that would
+
+00:08:49.360 --> 00:08:52.000
+be splendid. ([Amin]: yeah sure)
+
+00:08:52.000 --> 00:08:55.839
+Thank you. Where are we...
+
+00:08:55.839 --> 00:08:58.720
+Question 12. Okay, so what's better, one
+
+00:08:58.720 --> 00:09:00.160
+big file or...?
+
+00:09:00.160 --> 00:09:02.160
+Is it a jab to tell me that I
+
+00:09:02.160 --> 00:09:03.120
+haven't answered the question because
+
+00:09:03.120 --> 00:09:04.240
+someone just
+
+00:09:04.240 --> 00:09:06.320
+asked me the question? Well, personally, if
+
+00:09:06.320 --> 00:09:08.080
+I were to give you a quick answer in
+
+00:09:08.560 --> 00:09:11.600
+20 seconds, personally, I think it's a
+
+00:09:11.600 --> 00:09:13.920
+question that is contextually based.
+
+00:09:13.920 --> 00:09:15.680
+Do you want something that is efficient
+
+00:09:15.680 --> 00:09:17.839
+as far as optimization is concerned?
+
+00:09:17.839 --> 00:09:21.200
+Then you need to think about
+
+00:09:21.200 --> 00:09:23.440
+this. Personally, for all the
+
+00:09:23.440 --> 00:09:24.640
+organization that I do,
+
+00:09:24.640 --> 00:09:27.760
+all this stuff, all the TODOs that I
+handle,
+
+00:09:27.760 --> 00:09:30.080
+I like to do this in one simple big file
+
+00:09:30.080 --> 00:09:31.519
+because you benefit from all the
+
+00:09:31.519 --> 00:09:33.760
+refiling capabilities of Org Mode,
+
+00:09:33.760 --> 00:09:37.200
+so I would do that. But for knowledge
+management,
+
+00:09:37.200 --> 00:09:40.080
+for note-taking and all this, well I'd
+
+00:09:40.080 --> 00:09:41.279
+much rather follow the
+
+00:09:41.279 --> 00:09:42.959
+org-roam way of doing things, which is
+
+00:09:42.959 --> 00:09:44.480
+about having many
+
+00:09:44.480 --> 00:09:48.240
+small files. I'm not getting any
+
+00:09:48.240 --> 00:09:50.000
+more questions. I'm not sure if there is
+
+00:09:50.000 --> 00:09:52.080
+one on IRC that could be fed to me.
+
+00:09:52.080 --> 00:09:57.040
+Otherwise, I'm happy to pass over to
+the next speaker.
+
+00:09:57.040 --> 00:09:59.360
+By the way, just before I finish, your
+
+00:09:59.360 --> 00:10:01.360
+world is a lie. It's not a three-piece
+
+00:10:01.360 --> 00:10:04.399
+suit. I'm wearing jeans below, so I hope
+
+00:10:04.399 --> 00:10:06.520
+that satisfies your curiosity.
+
+00:10:10.640 --> 00:10:12.640
+Okay, there's one more question appearing.
+
+00:10:12.640 --> 00:10:15.040
+"but otherwise one big file to have
+
+00:10:15.040 --> 00:10:17.680
+everything..." So I'm putting you on the
+
+00:10:17.680 --> 00:10:19.760
+spot, I believe. It was such a short talk.
+
+00:10:19.760 --> 00:10:21.040
+You know the problem is,
+
+00:10:21.040 --> 00:10:24.720
+I just wanted to give you a little
+answer.
+
+00:10:24.720 --> 00:10:26.959
+A little, you know, path of thinking on
+
+00:10:26.959 --> 00:10:27.920
+this topic.
+
+00:10:27.920 --> 00:10:29.839
+Obviously it's a topic I could be
+
+00:10:29.839 --> 00:10:31.600
+spending 40 minutes on,
+
+00:10:31.600 --> 00:10:33.200
+but I'm going to be drained, you're going to
+
+00:10:33.200 --> 00:10:35.120
+be drained, nobody's going to be happy
+
+00:10:35.120 --> 00:10:35.680
+if I do this.
+
+00:10:39.440 --> 00:10:41.200
+Someone asked me if I switch between
+
+00:10:41.200 --> 00:10:42.880
+British and French accents.
+
+00:10:42.880 --> 00:10:46.560
+A little secret for you:
+
+00:10:46.560 --> 00:10:48.480
+when I'm stressed, I tend to revert to a
+
+00:10:48.480 --> 00:10:49.760
+French accent,
+
+00:10:49.760 --> 00:10:53.760
+so you can measure the amount of stress
+
+00:10:53.760 --> 00:10:56.160
+that I'm feeling during this talk
+
+00:10:56.160 --> 00:10:58.880
+with the amount of h's that I drop and
+
+00:10:58.880 --> 00:11:02.720
+the amount of sheer fright that you can
+see sometimes
+
+00:11:02.720 --> 00:11:04.399
+in my eyes, when I'm thinking about what
+
+00:11:04.399 --> 00:11:08.240
+to say next.
+
+00:11:08.240 --> 00:11:10.880
+All right sir. So, Amin, do you believe
+
+00:11:10.880 --> 00:11:14.240
+we can leave it at that? I'll be...
+
+00:11:14.240 --> 00:11:15.519
+People will see plenty more of me
+
+00:11:15.519 --> 00:11:17.040
+later on, anyway.
+
+00:11:17.040 --> 00:11:20.640
+([Amin:] So, looking at the schedule,
+I think
+
+00:11:20.640 --> 00:11:23.920
+your talk has until like 2:02, meaning
+
+00:11:23.920 --> 00:11:27.120
+like five or six minutes from now.)
+
+00:11:27.120 --> 00:11:28.000
+Oh, right.
+
+00:11:28.000 --> 00:11:30.000
+([Amin:] So if you do like to take one
+
+00:11:30.000 --> 00:11:31.680
+or two questions, to add two more
+
+00:11:31.680 --> 00:11:33.920
+questions, by all means.)
+
+00:11:33.920 --> 00:11:37.040
+So someone has asked me what is
+
+00:11:37.040 --> 00:11:38.320
+the Emacs
+
+00:11:38.320 --> 00:11:40.640
+icon (sorry, see, another French accent)
+
+00:11:40.640 --> 00:11:42.880
+here in my status bar...
+
+00:11:42.880 --> 00:11:44.880
+Oh sorry, I'm not sharing any more.
+
+00:11:44.880 --> 00:11:46.640
+I might just share again just so that
+
+00:11:46.640 --> 00:11:49.200
+everyone can catch a glimpse of that.
+
+00:11:49.200 --> 00:11:53.120
+There we go. Allow...
+
+00:11:53.120 --> 00:11:54.880
+So it should be... So if you could make me
+
+00:11:54.880 --> 00:11:56.240
+small again, Amin, I'm not sure if it's
+
+00:11:56.240 --> 00:11:56.959
+going to do it
+
+00:11:56.959 --> 00:12:00.480
+by itself, but I do have a little icon
+
+00:12:00.480 --> 00:12:01.839
+here in my status bar
+
+00:12:01.839 --> 00:12:04.480
+which is basically a way to interact
+
+00:12:04.480 --> 00:12:05.760
+with org-protocol.
+
+00:12:05.760 --> 00:12:09.120
+I'm not going to look for it right now,
+
+00:12:09.120 --> 00:12:10.800
+but it's a browser extension that is
+
+00:12:10.800 --> 00:12:12.399
+developed by one of my friends
+
+00:12:12.399 --> 00:12:15.680
+over at Ranger whose name is Li Fong (??) and
+
+00:12:16.160 --> 00:12:18.240
+it's very useful. I'm someone who uses a
+
+00:12:18.240 --> 00:12:22.320
+lot of Org protocols. And by the way,
+
+00:12:22.320 --> 00:12:25.279
+I used to teach English to high
+schoolers, and they
+
+00:12:25.279 --> 00:12:27.279
+were supremely worried
+
+00:12:27.279 --> 00:12:29.600
+when I showed them my status line and they
+
+00:12:29.600 --> 00:12:34.000
+saw "kill" and "explore" in my status
+line.
+
+00:12:34.000 --> 00:12:36.560
+As fellow Emacs users, you know that
+
+00:12:36.560 --> 00:12:40.880
+obviously kill means to kill a selection
+of text and
+
+00:12:40.880 --> 00:12:44.320
+keep it inside your clipboard,
+
+00:12:44.320 --> 00:12:47.279
+but for my students, they
+
+00:12:47.279 --> 00:12:48.320
+were very worried
+
+00:12:48.320 --> 00:12:51.600
+about what their professor was up to
+
+00:12:51.600 --> 00:12:53.600
+during his nights.
+
+00:12:53.600 --> 00:12:55.120
+So let's see if we've got more questions.
+
+00:12:55.120 --> 00:12:56.560
+I'm showing you the questions on the
+
+00:12:56.560 --> 00:12:57.920
+rainbow. Let's see if
+
+00:12:57.920 --> 00:13:00.560
+we've got more. People are posting a
+
+00:13:00.560 --> 00:13:01.920
+lot of questions now.
+
+00:13:01.920 --> 00:13:03.920
+So how do you feel about archiving files
+
+00:13:03.920 --> 00:13:06.399
+in Org Mode and how can that work?
+
+00:13:06.399 --> 00:13:09.360
+So one of the things when we think about
+
+00:13:09.360 --> 00:13:13.920
+optimization is: yes, archiving done trees
+
+00:13:13.920 --> 00:13:16.240
+is a good idea because it means that if
+
+00:13:16.240 --> 00:13:17.920
+we go back to the org-element, the way it
+
+00:13:17.920 --> 00:13:20.399
+works (and we'll get into technical details
+
+00:13:20.399 --> 00:13:22.079
+afterwards; I'm giving a presentation
+
+00:13:22.079 --> 00:13:24.079
+about org-roam technical
+
+00:13:24.079 --> 00:13:26.880
+aspects, sorry, so I'll have a chance to
+
+00:13:26.880 --> 00:13:28.399
+expand a little more on this)
+
+00:13:28.399 --> 00:13:31.360
+but basically, org-element needs to...
+
+00:13:31.360 --> 00:13:35.279
+Every time it sees a TODO, it has to
+consider it,
+
+00:13:35.279 --> 00:13:38.320
+even though it is a done TODO. Why?
+
+00:13:38.320 --> 00:13:40.000
+Because let's say, for instance, that in
+
+00:13:40.000 --> 00:13:41.839
+your agenda you want to activate
+
+00:13:41.839 --> 00:13:45.519
+log mode, which is going to show the
+
+00:13:45.519 --> 00:13:48.959
+tasks which are done... Now you could be
+
+00:13:48.959 --> 00:13:51.440
+clever and say, oh okay, the Org agenda does not
+
+00:13:51.440 --> 00:13:53.360
+need to show done items, so it's not going
+
+00:13:53.360 --> 00:13:54.880
+to look for them,
+
+00:13:54.880 --> 00:13:56.959
+but the problem is that org-element is
+
+00:13:56.959 --> 00:13:59.519
+always called. It always needs to parse
+the buffer.
+
+00:13:59.519 --> 00:14:01.839
+You know, Nicolas Goaziou, who is the
+
+00:14:01.839 --> 00:14:03.519
+French developer who's worked a whole
+
+00:14:03.519 --> 00:14:05.040
+lot on org-element
+
+00:14:05.040 --> 00:14:07.440
+has gone through a lot of trouble to
+
+00:14:07.440 --> 00:14:11.600
+optimize org-element, but the problem is
+
+00:14:11.600 --> 00:14:13.279
+there's just so much that we can do with
+
+00:14:13.279 --> 00:14:14.720
+a concurrent process.
+
+00:14:14.720 --> 00:14:18.560
+Right now it leaves somewhat
+
+00:14:18.560 --> 00:14:21.120
+things to be desired, but
+
+00:14:21.120 --> 00:14:22.079
+we're working on it.
+
+00:14:22.079 --> 00:14:24.800
+One more time... I feel like I spent
+
+00:14:24.800 --> 00:14:25.839
+half of this talk
+
+00:14:25.839 --> 00:14:28.000
+teasing my next talks, but I'll be
+
+00:14:28.000 --> 00:14:29.360
+talking more about this
+
+00:14:29.360 --> 00:14:31.279
+in my future talks in about one to two
+
+00:14:31.279 --> 00:14:32.639
+hours.
+
+00:14:32.639 --> 00:14:34.959
+So, continuing with questions, how big are
+
+00:14:34.959 --> 00:14:36.079
+my Org files?
+
+00:14:36.079 --> 00:14:37.760
+So in the background, I'm just going to
+
+00:14:37.760 --> 00:14:40.720
+check how many lines I have in my main
+file.
+
+00:14:40.720 --> 00:14:42.959
+In my own file, so the one I told you
+
+00:14:42.959 --> 00:14:44.079
+about where I keep all
+
+00:14:44.079 --> 00:14:47.279
+my TODO GTD stuff, I have
+
+00:14:47.279 --> 00:14:50.720
+38,000 lines, which is...
+
+00:14:50.720 --> 00:14:54.000
+It's sizable, definitely.
+
+00:14:54.000 --> 00:14:57.040
+But I do archive a lot of stuff,
+
+00:14:57.040 --> 00:14:58.480
+so that might be a slight difference
+
+00:14:58.480 --> 00:15:00.880
+between myself and Karl Voit,
+
+00:15:00.880 --> 00:15:02.079
+even though I don't remember if they
+
+00:15:02.079 --> 00:15:04.880
+actually archive stuff.
+
+00:15:04.880 --> 00:15:06.639
+So does it not consume more resources
+
+00:15:06.639 --> 00:15:08.480
+and time to load multiple files
+
+00:15:08.480 --> 00:15:10.839
+files than a large file or the same
+
+00:15:10.839 --> 00:15:12.560
+content now?
+
+00:15:12.560 --> 00:15:15.839
+Theoretically, yes, having many files
+
+00:15:15.839 --> 00:15:19.279
+open concurrently is slightly slower
+
+00:15:19.279 --> 00:15:22.240
+than having one main file opened.
+
+00:15:22.240 --> 00:15:24.160
+Now the problem is for those of you who
+
+00:15:24.160 --> 00:15:25.279
+have large files,
+
+00:15:25.279 --> 00:15:27.199
+you may have noticed that when you are
+
+00:15:27.199 --> 00:15:29.360
+scrolling in a very large file,
+
+00:15:29.360 --> 00:15:32.560
+it starts taking quite a bit of time. Why?
+
+00:15:32.560 --> 00:15:34.480
+It's because in Org Mode,
+
+00:15:34.480 --> 00:15:35.920
+you have a lot of content
+
+00:15:35.920 --> 00:15:38.959
+that is hidden, so when you have
+
+00:15:38.959 --> 00:15:40.959
+the view mode which hides as much stuff
+
+00:15:40.959 --> 00:15:43.600
+as possible, meaning that you only see
+
+00:15:43.600 --> 00:15:45.360
+the top heading--and I'm checking the
+
+00:15:45.360 --> 00:15:46.880
+time, Amin, don't worry, I'm finished
+
+00:15:46.880 --> 00:15:50.240
+on this one--
+
+00:15:50.240 --> 00:15:52.160
+when you're hiding a whole lot of stuff,
+
+00:15:52.160 --> 00:15:54.720
+Org Mode needs to keep track, or I
+should say,
+
+00:15:54.720 --> 00:15:56.959
+Emacs needs to keep track of which areas
+
+00:15:56.959 --> 00:15:58.160
+of text to show
+
+00:15:58.160 --> 00:16:00.560
+and which areas of text to hide.
+
+00:16:00.560 --> 00:16:02.320
+The problem is that when you're hiding stuff--
+
+00:16:02.320 --> 00:16:04.480
+let's say you're moving from the
+
+00:16:04.480 --> 00:16:06.320
+first heading to the second heading,
+
+00:16:06.320 --> 00:16:08.639
+but you've got like 10,000 lines between
+
+00:16:08.639 --> 00:16:09.839
+those two headings--
+
+00:16:09.839 --> 00:16:11.519
+well, Emacs needs to compute the
+
+00:16:11.519 --> 00:16:13.680
+difference between the two passages,
+
+00:16:13.680 --> 00:16:15.680
+and that takes quite a lot of time.
+
+00:16:15.680 --> 00:16:18.560
+That's why you might realize that it's
+a little
+
+00:16:18.560 --> 00:16:21.199
+choppy when you start scrolling in large
+files.
+
+00:16:21.199 --> 00:16:22.560
+Anyway I could be answering questions
+
+00:16:22.560 --> 00:16:25.120
+about Org Mode for literally two hours
+straight,
+
+00:16:25.120 --> 00:16:26.720
+so I'm gonna hand it over to the next
+
+00:16:26.720 --> 00:16:28.639
+speakers. I'll be seeing
+
+00:16:28.639 --> 00:16:31.759
+you guys a little later. ([Amin]: Thank you
+
+00:16:31.759 --> 00:16:33.440
+very much, Leo.)
+
+00:16:33.440 --> 00:16:36.959
+Oh, thank you. ([Amin:] Yes. Bye.)
+
+00:16:36.959 --> 00:16:39.839
+Bye.
diff --git a/2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt b/2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt
new file mode 100644
index 00000000..15513080
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--13-experience-report-steps-to-emacs-hyper-notebooks--joseph-corneli-raymond-puzio-cameron-ray-smith.vtt
@@ -0,0 +1,968 @@
+WEBVTT
+
+00:00:00.320 --> 00:00:03.280
+Joe: Hi, I'm Joe Corneli.
+
+00:00:03.280 --> 00:00:06.879
+This is work I did with Ray Puzio and
+Cameron Smith.
+
+00:00:06.879 --> 00:00:11.123
+They're the main protagonists in
+this story.
+
+00:00:11.123 --> 00:00:14.960
+They are researchers who've been working
+
+00:00:14.960 --> 00:00:17.490
+on theoretical biology.
+
+00:00:17.490 --> 00:00:21.357
+In a typical project, they may use
+Maxima and Julia.
+
+00:00:21.357 --> 00:00:24.800
+Their work combines biology, physics and
+computer science.
+
+00:00:24.800 --> 00:00:29.439
+The latest work-in-progress is on
+branching processes for
+
+00:00:29.439 --> 00:00:30.800
+cancer modeling.
+
+00:00:30.800 --> 00:00:34.719
+How can Emacs possibly help?
+
+00:00:34.719 --> 00:00:37.360
+Let's have a look. Moving code
+
+00:00:37.360 --> 00:00:38.399
+and data between these different
+
+00:00:38.399 --> 00:00:39.680
+programs by hand is
+
+00:00:39.680 --> 00:00:42.000
+annoying. Separate workflows for
+
+00:00:42.000 --> 00:00:44.399
+writing up notes and preparing
+publications
+
+00:00:44.399 --> 00:00:46.000
+is perhaps even more annoying. All of
+
+00:00:46.000 --> 00:00:48.640
+it is time consuming and error-prone.
+
+00:00:48.640 --> 00:00:52.000
+So what about maybe using Jupyter?
+
+00:00:52.000 --> 00:00:53.760
+We found something called Script of
+
+00:00:53.760 --> 00:00:55.199
+Scripts. It solves some of those
+
+00:00:55.199 --> 00:00:58.399
+problems because you can use
+
+00:00:58.399 --> 00:01:01.120
+Maxima and Julia together, but we were
+
+00:01:01.120 --> 00:01:02.640
+quite happy to explore Emacs-based
+
+00:01:02.640 --> 00:01:04.890
+solutions, being Emcas enthusiasts
+
+00:01:04.890 --> 00:01:07.760
+We even got Cameron to be
+enthusiastic about
+
+00:01:07.760 --> 00:01:10.057
+doing Emacs, so that went nice.
+
+00:01:10.057 --> 00:01:12.400
+Here's a little feature grid
+
+00:01:12.400 --> 00:01:15.360
+of Emacs + Org versus your
+
+00:01:15.360 --> 00:01:18.390
+generic tools that are in a
+
+00:01:18.390 --> 00:01:20.123
+different, more general ecosystem.
+
+00:01:20.123 --> 00:01:21.520
+As you can see, it's quite
+
+00:01:21.520 --> 00:01:22.957
+feature-complete. You've got your
+
+00:01:22.957 --> 00:01:25.520
+maxima-mode, julia-mode. You can use both of them
+
+00:01:25.520 --> 00:01:27.119
+inside of org-mode.
+
+00:01:27.119 --> 00:01:28.720
+You can present things with org-tree-slide.
+
+00:01:28.720 --> 00:01:31.490
+You can set up a wiki inside of org-roam.
+
+00:01:31.490 --> 00:01:33.680
+This is one I found
+
+00:01:33.680 --> 00:01:35.759
+rather recently. You can even use
+
+00:01:35.759 --> 00:01:37.759
+compatibly with org-roam, something called
+
+00:01:37.759 --> 00:01:42.159
+logseq, which is in the browser, so that's
+nice.
+
+00:01:42.159 --> 00:01:44.957
+You can do real-time collaborative
+editing,
+
+00:01:44.957 --> 00:01:47.657
+either in a kind of pairing style
+
+00:01:47.657 --> 00:01:49.280
+or in a more Etherpad style.
+
+00:01:49.280 --> 00:01:51.520
+Obviously, you can manage your references.
+
+00:01:51.520 --> 00:01:53.457
+You can typeset whatever you want.
+
+00:01:53.457 --> 00:01:55.759
+You can publish work in progress on
+a blog.
+
+00:01:55.759 --> 00:01:57.439
+Firn is another one of these
+
+00:01:57.439 --> 00:01:59.790
+external Org Mode tools.
+
+00:01:59.790 --> 00:02:00.560
+It's not actually in Emacs,
+
+00:02:00.560 --> 00:02:03.557
+but works with Org Mode stuff. And, you know...
+
+00:02:03.557 --> 00:02:05.657
+So we're good to go with all of that.
+
+00:02:05.657 --> 00:02:07.423
+So what does that look like? Well,
+
+00:02:07.423 --> 00:02:09.423
+here's a little example from before
+
+00:02:09.423 --> 00:02:12.800
+they were doing... before we started
+really thinking
+
+00:02:12.800 --> 00:02:13.890
+seriously about this stuff.
+
+00:02:13.890 --> 00:02:15.599
+So this is just Maxima.
+
+00:02:15.599 --> 00:02:17.440
+Well, Maxima doesn't have a long running
+
+00:02:17.440 --> 00:02:19.280
+process by default. If you've ever used
+
+00:02:19.280 --> 00:02:22.480
+Python, you have something called
+sessions.
+
+00:02:22.480 --> 00:02:23.920
+They don't have that for Maxima, at least
+
+00:02:23.920 --> 00:02:24.959
+not by default.
+
+00:02:24.959 --> 00:02:27.599
+So how... What was the workaround?
+
+00:02:27.599 --> 00:02:29.360
+There's this thing called
+
+00:02:29.360 --> 00:02:32.480
+solve-for-u here
+
+00:02:32.480 --> 00:02:34.879
+that shows up down below again in these
+
+00:02:34.879 --> 00:02:36.319
+angle brackets, which you've seen maybe
+
+00:02:36.319 --> 00:02:37.360
+in someone else's talk,
+
+00:02:37.360 --> 00:02:40.480
+which means go to the previous
+
+00:02:40.480 --> 00:02:41.920
+thing that was named solve-for-u
+
+00:02:41.920 --> 00:02:43.920
+and do that all over again, so they do
+
+00:02:43.920 --> 00:02:45.280
+that over again.
+
+00:02:45.280 --> 00:02:47.440
+Here's the little Maxima code for
+
+00:02:47.440 --> 00:02:48.990
+defining usol, so you've now
+
+00:02:48.990 --> 00:02:51.723
+defined usol, and then you can use it
+
+00:02:51.723 --> 00:02:54.000
+in the next expression. You get out a
+nice juicy
+
+00:02:54.000 --> 00:02:56.560
+zero at the end. It's a little bit
+
+00:02:57.200 --> 00:02:58.959
+like a partridge in a pear tree to have to
+
+00:02:58.959 --> 00:03:00.640
+redefine everything every time.
+
+00:03:00.640 --> 00:03:02.490
+So this is clearly at the level of
+
+00:03:02.490 --> 00:03:04.159
+work-around. Maybe just
+
+00:03:04.159 --> 00:03:06.223
+one more time looking through
+
+00:03:06.223 --> 00:03:11.599
+that stuff.
+
+00:03:11.599 --> 00:03:13.760
+Sorry. So, looking through that stuff,
+
+00:03:13.760 --> 00:03:15.280
+this is... We're going to need something
+
+00:03:15.280 --> 00:03:17.200
+like that, probably, for stitching
+
+00:03:17.200 --> 00:03:19.599
+Maxima and Julia together. so it's
+
+00:03:19.599 --> 00:03:20.890
+good to look a little bit
+
+00:03:20.890 --> 00:03:22.590
+about how that might work.
+
+00:03:22.590 --> 00:03:23.920
+First of all, you can cache
+
+00:03:23.920 --> 00:03:25.680
+results, so if you wanted to save the
+
+00:03:25.680 --> 00:03:28.480
+date out of block one at a certain
+time and
+
+00:03:28.480 --> 00:03:30.990
+then use it again later...
+
+00:03:30.990 --> 00:03:33.280
+At the time when I ran this code,
+
+00:03:33.280 --> 00:03:34.640
+you can see I've got two slightly
+
+00:03:34.640 --> 00:03:36.623
+different time stamps down below.
+
+00:03:36.623 --> 00:03:38.323
+One's the cached result, and the other
+
+00:03:38.323 --> 00:03:40.319
+was the result of reevaluating
+
+00:03:40.319 --> 00:03:42.640
+the block. So you can move things around.
+
+00:03:43.760 --> 00:03:46.000
+That's going to be useful. But you know,
+
+00:03:46.000 --> 00:03:46.923
+that's not really the main problem.
+
+00:03:46.923 --> 00:03:48.080
+The main problem is
+
+00:03:48.080 --> 00:03:50.799
+making Maxima long-running.
+
+00:03:50.799 --> 00:03:53.920
+The core of this talk is a new observant
+
+00:03:53.920 --> 00:03:56.400
+facility, which is a general purpose
+
+00:03:56.400 --> 00:03:59.280
+way to do that kind of thing, which
+
+00:03:59.280 --> 00:04:01.823
+involves a very simple change to ob-core.
+
+00:04:01.823 --> 00:04:04.239
+We'll give a quick
+
+00:04:04.239 --> 00:04:05.360
+overview of that and show
+
+00:04:05.360 --> 00:04:08.480
+an example. So here's the example,
+
+00:04:08.480 --> 00:04:11.760
+a very simple sort of silly example.
+
+00:04:11.760 --> 00:04:12.957
+What does it mean to have
+
+00:04:12.957 --> 00:04:13.990
+a long-running process?
+
+00:04:13.990 --> 00:04:14.640
+Here, I've set this
+
+00:04:14.640 --> 00:04:18.560
+display2d to be false, which just
+means that
+
+00:04:18.560 --> 00:04:19.440
+things are going to come
+
+00:04:19.440 --> 00:04:22.320
+come across in 1d. Then I ask it to
+
+00:04:22.320 --> 00:04:25.199
+expand something. I get LaTeX
+by default.
+
+00:04:25.199 --> 00:04:27.280
+So that's what it means. It's that I've sent
+
+00:04:27.280 --> 00:04:28.639
+something in and it's going to come
+
+00:04:28.639 --> 00:04:30.240
+across in one view, which is great.
+
+00:04:30.240 --> 00:04:32.080
+Maybe you'll also notice that there's
+
+00:04:32.080 --> 00:04:34.560
+no semicolon, if you're a Maxima fan,
+
+00:04:34.560 --> 00:04:36.720
+and things are coming across as TeX.
+
+00:04:36.720 --> 00:04:38.400
+So those were some little bonus features.
+
+00:04:38.400 --> 00:04:40.320
+I'll show you how that works later.
+
+00:04:41.040 --> 00:04:45.440
+The change to ob-core is as follows.
+
+00:04:45.440 --> 00:04:48.880
+Actually, this should say...
+
+00:04:48.880 --> 00:04:51.520
+Instead of stream here, it should say
+
+00:04:51.520 --> 00:04:54.800
+servant. Sorry. We tried an experimental
+
+00:04:54.800 --> 00:04:56.160
+version which was called stream, so now it's
+
+00:04:56.160 --> 00:04:58.160
+called servant. But all it does is it
+
+00:04:58.160 --> 00:05:01.520
+overrides org-babel-execute lang for
+
+00:05:01.520 --> 00:05:02.639
+arbitrary lang
+
+00:05:02.639 --> 00:05:05.919
+if you have a servant
+
+00:05:05.919 --> 00:05:07.840
+in your params. So that's the
+
+00:05:07.840 --> 00:05:09.759
+change that hasn't been
+
+00:05:09.759 --> 00:05:11.919
+pushed out or sent as a patch to anybody,
+
+00:05:11.919 --> 00:05:13.759
+but it's a pretty minor change.
+
+00:05:13.759 --> 00:05:16.960
+Here's an overview without the code.
+
+00:05:16.960 --> 00:05:19.080
+Just a high level overview of
+
+00:05:19.080 --> 00:05:20.720
+observant.el.
+
+00:05:20.720 --> 00:05:22.160
+It stores information about these
+
+00:05:22.160 --> 00:05:24.479
+processes in a hash table.
+
+00:05:24.479 --> 00:05:26.080
+It can do pre-processing and
+
+00:05:26.080 --> 00:05:27.600
+post-processing.
+
+00:05:27.600 --> 00:05:29.759
+It does all these things. It stores
+
+00:05:29.759 --> 00:05:30.720
+the output.
+
+00:05:30.720 --> 00:05:32.479
+I mentioned here that, in principle, we
+
+00:05:32.479 --> 00:05:34.080
+could store lots of output and have a
+
+00:05:34.080 --> 00:05:35.657
+kind of browsable history,
+
+00:05:35.657 --> 00:05:37.790
+although we don't do that
+presently.
+
+00:05:37.790 --> 00:05:38.790
+But that's what observant does.
+
+00:05:38.790 --> 00:05:40.639
+It does what you might expect.
+
+00:05:41.440 --> 00:05:46.190
+Here's the Maxima on-ramp
+
+00:05:46.190 --> 00:05:48.160
+to get Maxima brought in.
+
+00:05:48.160 --> 00:05:49.257
+You have to obviously have
+
+00:05:49.257 --> 00:05:51.360
+a Maxima process you can call.
+
+00:05:51.360 --> 00:05:54.960
+puthash... this is the preprocessing
+
+00:05:54.960 --> 00:05:57.840
+thing I mentioned, adding in some Tex
+
+00:05:57.840 --> 00:05:58.960
+and adding in--
+
+00:05:58.960 --> 00:06:01.520
+or deleting, rather--a substring.
+
+00:06:01.520 --> 00:06:03.759
+Here is why you delete the
+substring.
+
+00:06:03.759 --> 00:06:06.960
+It's because Maxima thinks it's a good
+
+00:06:06.960 --> 00:06:08.240
+idea to tell you false
+
+00:06:08.240 --> 00:06:10.080
+once you run check on things.
+
+00:06:10.080 --> 00:06:11.759
+You've got to delete that back out to
+
+00:06:11.759 --> 00:06:13.680
+get something coherent out of it.
+
+00:06:13.680 --> 00:06:16.960
+So this is how to set up Maxima.
+
+00:06:16.960 --> 00:06:19.157
+That's enough, really, of the demo.
+
+00:06:19.157 --> 00:06:20.000
+It's not really a demo for
+
+00:06:20.000 --> 00:06:21.919
+show and tell, but as this is an
+
+00:06:21.919 --> 00:06:23.600
+experience report, I wanted to talk about
+
+00:06:23.600 --> 00:06:25.440
+the experience of doing this.
+
+00:06:25.440 --> 00:06:28.080
+Some negatives, like we tried to
+
+00:06:28.080 --> 00:06:30.160
+get Emacs Jupyter working
+
+00:06:30.160 --> 00:06:34.190
+prior to working on observant.
+
+00:06:34.190 --> 00:06:36.000
+We couldn't get it doing
+
+00:06:36.000 --> 00:06:37.919
+everything we wanted, despite a bit of
+
+00:06:37.919 --> 00:06:40.160
+heavy lifting and debugging and stuff.
+
+00:06:40.160 --> 00:06:42.880
+So that's not finished. That was a bit
+difficult.
+
+00:06:42.880 --> 00:06:45.360
+On the other hand, working on
+
+00:06:45.360 --> 00:06:47.759
+observant was fun, pretty lightweight,
+
+00:06:47.759 --> 00:06:48.479
+and easy.
+
+00:06:48.479 --> 00:06:50.400
+We got some experience co-editing
+
+00:06:50.400 --> 00:06:52.400
+things with these real-time tools.
+
+00:06:52.400 --> 00:06:55.919
+Obviously, the stack is somewhat work in
+progress.
+
+00:06:55.919 --> 00:06:58.000
+I just wanted to give a shout out to
+
+00:06:58.000 --> 00:07:00.800
+crdt which was really fun,
+
+00:07:00.800 --> 00:07:03.919
+and Qiantan was making
+
+00:07:03.919 --> 00:07:06.057
+bug fixes for that as we go.
+
+00:07:06.057 --> 00:07:08.960
+Similarly, for firn and logseq,
+the maintainers
+
+00:07:08.960 --> 00:07:10.160
+were really responsive,
+
+00:07:10.160 --> 00:07:12.960
+so that was nice. We did try to
+
+00:07:12.960 --> 00:07:14.560
+get Emacs running in the browser,
+
+00:07:14.560 --> 00:07:15.840
+thinking it would be really nice for
+
+00:07:15.840 --> 00:07:19.290
+people who didn't want to install it
+
+00:07:19.290 --> 00:07:21.120
+to get a chance to just try it,
+
+00:07:21.120 --> 00:07:23.120
+but actually, browsers capture things
+
+00:07:23.120 --> 00:07:27.120
+like C-n, so that was a bit annoying.
+
+00:07:27.120 --> 00:07:28.479
+But we did get lots of great feedback
+
+00:07:28.479 --> 00:07:29.759
+and interaction with people, including
+
+00:07:29.759 --> 00:07:31.599
+around this conference. Thank you
+
+00:07:31.599 --> 00:07:33.759
+to those who we've had discussions with.
+
+00:07:35.599 --> 00:07:37.680
+So, future work. Okay, so... Maybe you
+
+00:07:37.680 --> 00:07:41.039
+remember, I gave a talk a few years back
+on Arxana.
+
+00:07:41.039 --> 00:07:44.479
+What might this have to do with Org
+Mode?
+
+00:07:44.479 --> 00:07:45.919
+That's always the question one asks
+
+00:07:45.919 --> 00:07:47.039
+about Arxana.
+
+00:07:47.039 --> 00:07:48.720
+Arxana... One of the things it does
+
+00:07:48.720 --> 00:07:50.319
+is transclusions, and so that could be
+
+00:07:50.319 --> 00:07:51.680
+actually very helpful
+
+00:07:51.680 --> 00:07:54.000
+in connection with this "combined notes
+
+00:07:54.000 --> 00:07:55.520
+and write-up" workflow. So you might have
+
+00:07:55.520 --> 00:07:58.400
+an Org Mode. Some of these
+
+00:07:58.400 --> 00:08:00.800
+results we got back as raw results
+
+00:08:00.800 --> 00:08:03.199
+could go right into your write-up in a
+
+00:08:03.919 --> 00:08:07.520
+convenient way, at a level above--
+
+00:08:07.520 --> 00:08:09.039
+transparently, a level above the notebook.
+
+00:08:09.039 --> 00:08:11.280
+So you'd have the notebook alongside the
+
+00:08:11.280 --> 00:08:13.440
+write-up in that case,
+
+00:08:13.440 --> 00:08:15.599
+which is a variation on the
+
+00:08:15.599 --> 00:08:17.423
+literate programming workflow.
+
+00:08:17.423 --> 00:08:19.120
+This is speculative. Who knows?
+
+00:08:19.120 --> 00:08:20.000
+The other thought is,
+
+00:08:20.000 --> 00:08:22.080
+it just relates to the idea of network
+
+00:08:22.080 --> 00:08:23.520
+programming. So we can imagine these
+
+00:08:23.520 --> 00:08:25.990
+networks of computational nodes
+
+00:08:25.990 --> 00:08:27.623
+sitting inside of org-roam,
+
+00:08:27.623 --> 00:08:28.800
+calling each other.
+
+00:08:28.800 --> 00:08:31.199
+You would want to maintain some
+
+00:08:31.199 --> 00:08:33.357
+kind of model of that process.
+
+00:08:33.357 --> 00:08:36.640
+A general question is: how do we have a
+remote control for
+
+00:08:36.640 --> 00:08:37.957
+long-running processes?
+
+00:08:37.957 --> 00:08:38.320
+You could do that
+
+00:08:38.320 --> 00:08:39.857
+in Lisp or Clojure,
+
+00:08:39.857 --> 00:08:41.657
+but maybe we could have something
+
+00:08:41.657 --> 00:08:44.080
+a little bit like that here.
+
+00:08:44.080 --> 00:08:45.839
+Conclusions: what have we actually
+
+00:08:45.839 --> 00:08:48.080
+addressed? Well, we addressed
+
+00:08:48.080 --> 00:08:50.080
+accessing any long-running process with
+
+00:08:50.080 --> 00:08:51.600
+a simple Org Mode interface.
+
+00:08:51.600 --> 00:08:52.959
+Obviously, we're not the only people to
+
+00:08:52.959 --> 00:08:54.880
+think about notebooks, but we think that
+
+00:08:54.880 --> 00:08:56.880
+Emacs has some advantages
+
+00:08:56.880 --> 00:08:58.880
+related to reproducible research and
+
+00:08:58.880 --> 00:09:00.757
+interdisciplinary collaboration.
+
+00:09:00.757 --> 00:09:02.590
+Let's just say that we think
+
+00:09:02.590 --> 00:09:04.880
+something is reproducible if it's
+actually teachable
+
+00:09:04.880 --> 00:09:07.200
+to someone new and they can do it.
+
+00:09:07.200 --> 00:09:09.190
+Org Mode seems very useful for that.
+
+00:09:09.190 --> 00:09:11.680
+Many of the other talks have touched
+on this.
+
+00:09:11.680 --> 00:09:14.399
+Interdisciplinary collaboration is great.
+
+00:09:14.399 --> 00:09:16.000
+This was an interdisciplinary
+
+00:09:16.000 --> 00:09:17.839
+collaboration on some level, but
+
+00:09:17.839 --> 00:09:19.680
+what about future work for
+
+00:09:19.680 --> 00:09:21.190
+bringing in scenario planners,
+
+00:09:21.190 --> 00:09:22.320
+simulation scientists,
+
+00:09:22.320 --> 00:09:24.480
+and local farmers, and building something
+
+00:09:24.480 --> 00:09:26.023
+that they can all use
+
+00:09:26.023 --> 00:09:27.857
+that's more than the sum of the
+parts?
+
+00:09:27.857 --> 00:09:30.720
+So a little future work for everybody
+else here.
+
+00:09:30.720 --> 00:09:32.160
+We think science should be widely
+
+00:09:32.160 --> 00:09:34.560
+teachable, shareable, semi-automated,
+
+00:09:34.560 --> 00:09:36.720
+transdisciplinary, and real-time
+
+00:09:36.720 --> 00:09:40.399
+like EmacsConf. So you can get in touch
+
+00:09:40.399 --> 00:09:43.279
+via these methods. The code--which
+
+00:09:43.279 --> 00:09:45.200
+is very much early stage work in
+progress,
+
+00:09:45.200 --> 00:09:46.640
+as this was meant to be an experience
+
+00:09:46.640 --> 00:09:48.800
+report, not a "it's all done, here, it is
+
+00:09:48.800 --> 00:09:49.920
+polished" report--
+
+00:09:49.920 --> 00:09:51.680
+it's also online if you'd like to
+
+00:09:51.680 --> 00:09:53.360
+have a look. That's the end of the
+
+00:09:53.360 --> 00:09:54.560
+talk. I don't know if there's time
+
+00:09:54.560 --> 00:09:57.440
+for questions or not, but um I'm at your
+disposal now.
+
+00:09:57.440 --> 00:10:00.240
+Thank you.
+
+00:10:00.240 --> 00:10:04.079
+(Amin: Many thanks for the tough job.
+
+00:10:04.079 --> 00:10:07.120
+Let's see. We have about I think four
+
+00:10:07.120 --> 00:10:08.880
+minutes for questions,
+
+00:10:08.880 --> 00:10:10.880
+and we have a couple of questions on
+
+00:10:10.880 --> 00:10:12.320
+the pad. Would you like to read them
+
+00:10:12.320 --> 00:10:14.240
+yourself or should I read them to you?)
+
+00:10:14.240 --> 00:10:16.423
+Just for the sake of easy management
+
+00:10:16.423 --> 00:10:18.079
+why don't you read them out, if
+that's okay?
+
+00:10:18.079 --> 00:10:21.279
+(Amin: yeah, sure. They ask, "Have you looked
+
+00:10:21.279 --> 00:10:25.440
+into trying Sage Math? I've long wanted
+
+00:10:25.440 --> 00:10:33.760
+to use Sage Math in Org files.")
+
+00:10:33.760 --> 00:10:36.959
+Ray: Right. I wrote the answer that
+
+00:10:36.959 --> 00:10:39.279
+it should be possible because one can
+
+00:10:39.279 --> 00:10:44.839
+call it from a command.
+
+00:10:44.839 --> 00:10:48.190
+(Amin: okay, and I see there's
+
+00:10:48.190 --> 00:10:50.079
+another Sage Math question that you seem
+to have answered
+
+00:10:50.079 --> 00:10:52.100
+as well, so I guess I won't repeat that.
+
+00:10:54.880 --> 00:10:56.959
+There's... "Let's not forget about embedded
+
+00:10:56.959 --> 00:11:00.640
+Calc in Emacs.")
+
+00:11:00.640 --> 00:11:05.040
+Joe: So the first demos actually were with
+Calc.
+
+00:11:05.040 --> 00:11:06.640
+That's useful. Although I think it was a
+
+00:11:06.640 --> 00:11:08.240
+different--kind of a different command
+line.
+
+00:11:08.240 --> 00:11:11.839
+Ray: Well, that was UNIX Calc.
+
+00:11:11.839 --> 00:11:13.839
+Joe: So, sure, there is calc, so that...
+
+00:11:15.680 --> 00:11:19.120
+Ray: Calc is already in Org Mode.
+
+00:11:25.680 --> 00:11:39.760
+(Amin: Still looking for questions.
+
+00:11:39.760 --> 00:11:41.760
+Okay, I think that's about it. I don't see
+
+00:11:41.760 --> 00:11:44.320
+any questions on the Etherpad.
+
+00:11:44.320 --> 00:11:47.440
+And let's see...
+
+00:11:47.440 --> 00:11:53.040
+Anything on irc?
+
+00:11:53.040 --> 00:11:55.760
+Nothing but praises and everyone
+
+00:11:55.760 --> 00:11:57.290
+thanking you. Thank you.)
+
+00:11:57.290 --> 00:11:59.120
+Ray: all right, you're welcome.
+
+00:11:59.120 --> 00:12:00.240
+Joe: Thanks a lot!
+
+00:12:00.240 --> 00:12:01.923
+We'll see you guys around then.
+
+00:12:01.923 --> 00:12:06.800
+Amin: Cheers, and see you around!
diff --git a/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt b/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt
new file mode 100644
index 00000000..78d044e8
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--14-readme-driven-design--adam-ard.vtt
@@ -0,0 +1,1250 @@
+WEBVTT
+
+00:00:03.600 --> 00:00:04.400
+Adam: Hello!
+
+00:00:04.400 --> 00:00:06.560
+Welcome to Readme Driven Design in Emacs
+
+00:00:06.560 --> 00:00:08.400
+by Adam Aard.
+
+00:00:08.400 --> 00:00:10.800
+If you're a programmer, you're accustomed
+
+00:00:10.800 --> 00:00:13.759
+to putting a README file at the root of your project.
+
+00:00:13.759 --> 00:00:15.845
+It's usually a Markdown file
+
+00:00:15.845 --> 00:00:20.579
+But if you use an Org Mode file instead,
+
+00:00:20.579 --> 00:00:22.560
+you can take advantage of the great features
+
+00:00:22.560 --> 00:00:24.898
+that Org Mode provides,
+
+00:00:24.898 --> 00:00:25.920
+including literate programming,
+
+00:00:25.920 --> 00:00:28.000
+which lets you generate your source code
+
+00:00:28.000 --> 00:00:31.840
+and Markdown documentation dynamically.
+
+00:00:31.840 --> 00:00:34.719
+I want to walk you through a little bit
+
+00:00:34.719 --> 00:00:37.120
+of what this looks like.
+
+00:00:37.120 --> 00:00:39.607
+When you start a project,
+
+00:00:39.607 --> 00:00:41.179
+especially if you use something like Github
+
+00:00:41.179 --> 00:00:45.913
+you begin with an automatically generated
+README.md file.
+
+00:00:45.913 --> 00:00:47.039
+So just delete that
+
+00:00:47.039 --> 00:00:50.239
+and instead, create a README.org file.
+
+00:00:50.239 --> 00:00:51.712
+Starting with an empty Org file,
+
+00:00:51.712 --> 00:00:54.800
+like you see here, you can begin
+
+00:00:54.800 --> 00:00:56.295
+by recording important information
+
+00:00:56.295 --> 00:00:59.440
+about your project goals. You can add diagrams,
+
+00:00:59.440 --> 00:01:03.520
+code snippets, to-do lists, time
+tracking, and much more.
+
+00:01:03.520 --> 00:01:05.360
+I'm going to drop in some documentation
+
+00:01:05.360 --> 00:01:07.760
+that I've written about
+
+00:01:07.760 --> 00:01:12.240
+about my project here, so you can see
+
+00:01:12.240 --> 00:01:15.280
+what this would look like.
+
+00:01:15.280 --> 00:01:17.870
+As you can see, I have a title,
+
+00:01:17.870 --> 00:01:20.320
+and a description, and then a subsection
+
+00:01:20.320 --> 00:01:23.840
+as well as some code snippets.
+
+00:01:23.840 --> 00:01:25.210
+You can see that Org Mode does
+
+00:01:25.210 --> 00:01:28.240
+a great job of formatting lists,
+
+00:01:28.240 --> 00:01:31.280
+code sections, diagrams, and so forth.
+
+00:01:31.280 --> 00:01:35.040
+It's as good or better than Markdown,
+
+00:01:35.040 --> 00:01:37.179
+but when you use it in Emacs,
+
+00:01:37.179 --> 00:01:38.880
+you can do a lot more.
+
+00:01:38.880 --> 00:01:43.360
+For example, you can dynamically create
+diagrams using Graphviz
+
+00:01:43.360 --> 00:01:45.553
+from a text description.
+
+00:01:45.553 --> 00:01:48.266
+If you go to this source block here
+and hit C-c C-c,
+
+00:01:48.266 --> 00:01:52.979
+you'll see that we generate a diagram
+dynamically.
+
+00:01:55.439 --> 00:02:00.519
+You can run these code snippets in
+place
+
+00:02:00.519 --> 00:02:00.799
+and get the results
+
+00:02:00.799 --> 00:02:03.040
+to show up inside of your file,
+
+00:02:03.040 --> 00:02:08.000
+which is a really powerful paradigm.
+
+00:02:08.000 --> 00:02:14.800
+But most importantly, for my purposes here,
+
+00:02:14.800 --> 00:02:19.520
+Org Mode provides you the ability to do literate programming.
+
+00:02:19.520 --> 00:02:21.440
+So take a quick look at this diagram
+
+00:02:21.440 --> 00:02:23.200
+that I generated here.
+
+00:02:23.200 --> 00:02:25.912
+It gives you a quick overview
+
+00:02:25.912 --> 00:02:27.520
+of what I mean by literate programming
+
+00:02:27.520 --> 00:02:30.973
+and how I'm using it.
+
+00:02:30.973 --> 00:02:34.720
+You can see that we start with a README.org file on top.
+
+00:02:34.720 --> 00:02:40.501
+At this point, we can do one of two things:
+tangle or weave.
+
+00:02:40.501 --> 00:02:43.611
+Tangle is used to describe the process
+
+00:02:43.611 --> 00:02:45.463
+of generating source code,
+
+00:02:45.463 --> 00:02:48.495
+while weave is the process of generating
+documentation.
+
+00:02:48.495 --> 00:02:51.920
+These are terms that Donald Knuth used.
+
+00:02:51.920 --> 00:02:53.388
+He's the one that came up
+
+00:02:53.388 --> 00:02:55.519
+with the idea of literate programming
+
+00:02:55.519 --> 00:02:59.920
+in the early 1980s.
+
+00:02:59.920 --> 00:03:01.945
+But this is really all that there is to it.
+
+00:03:01.945 --> 00:03:05.412
+You just... You are simply
+
+00:03:05.412 --> 00:03:07.840
+using a literate source file,
+
+00:03:07.840 --> 00:03:10.575
+in this case the README.org,
+
+00:03:10.575 --> 00:03:17.120
+to generate the rest of the project files, basically.
+
+00:03:17.120 --> 00:03:22.640
+So let's dig in to the details of how this works.
+
+00:03:22.640 --> 00:03:26.159
+I hope you... Hopefully you'll see how cool this is.
+
+00:03:26.159 --> 00:03:27.545
+So returning to the file here.
+
+00:03:27.545 --> 00:03:31.120
+Let's assume we have enough documentation now,
+
+00:03:31.120 --> 00:03:32.679
+that we want to get started coding.
+
+00:03:32.679 --> 00:03:34.159
+So maybe we'll just start with
+
+00:03:34.159 --> 00:03:35.845
+like a Hello World app,
+
+00:03:35.845 --> 00:03:38.159
+just so we can make sure that our
+
+00:03:38.159 --> 00:03:41.519
+environment is set up correctly.
+
+00:03:41.519 --> 00:03:47.120
+Let's get started with a code block.
+
+00:03:47.120 --> 00:03:49.519
+So I created a little snippet to help me
+
+00:03:49.519 --> 00:03:51.326
+add a source block
+
+00:03:51.326 --> 00:03:53.599
+for literate programming quickly.
+
+00:03:53.599 --> 00:03:56.959
+There's not much to it,
+
+00:03:56.959 --> 00:03:59.479
+but there are some important annotations here.
+
+00:04:01.599 --> 00:04:05.200
+Excuse me. There's a property called :tangle
+
+00:04:05.200 --> 00:04:09.360
+and that takes a value of a file name.
+
+00:04:09.360 --> 00:04:18.880
+Then there's also a :noweb property called no-export.
+
+00:04:23.759 --> 00:04:26.800
+Basically, the noexport--we'll explain
+
+00:04:26.800 --> 00:04:29.645
+that a little bit more later...
+
+00:04:29.645 --> 00:04:32.080
+It has to do with how
+
+00:04:32.080 --> 00:04:36.845
+the tangling is done in the tangle step
+
+00:04:36.845 --> 00:04:38.479
+versus the weave step.
+
+00:04:38.479 --> 00:04:40.212
+I'll explain that a little bit more.
+
+00:04:40.212 --> 00:04:46.719
+But the tangle field just simply tells
+Emacs
+
+00:04:46.719 --> 00:04:48.320
+where it needs to generate the
+
+00:04:48.320 --> 00:04:49.951
+main.go file
+
+00:04:49.951 --> 00:04:55.360
+and where it needs to put it on the file system.
+
+00:04:55.360 --> 00:04:59.040
+You'll notice that we're going to use Go.
+
+00:04:59.040 --> 00:05:01.578
+That's just the language
+
+00:05:01.578 --> 00:05:03.379
+that I've been using the most lately,
+
+00:05:03.379 --> 00:05:06.845
+but this programming strategy
+
+00:05:06.845 --> 00:05:08.400
+is language-agnostic.
+
+00:05:08.400 --> 00:05:11.279
+You could use any language
+
+00:05:11.279 --> 00:05:13.145
+or any mix of languages.
+
+00:05:13.145 --> 00:05:15.377
+You could create some files
+in Python,
+
+00:05:15.377 --> 00:05:16.560
+some files in Go,
+
+00:05:16.560 --> 00:05:19.179
+some files in Lisp,
+
+00:05:19.179 --> 00:05:21.520
+or whatever you want.
+
+00:05:24.720 --> 00:05:29.440
+Let's create just a little Hello World.
+
+00:05:29.440 --> 00:05:31.379
+Let's use another snippet here
+
+00:05:31.379 --> 00:05:36.560
+to generate the basics of a Go program.
+
+00:05:36.560 --> 00:05:44.960
+I'm just going to print Hello World.
+
+00:05:44.960 --> 00:05:52.779
+So that's... And then let's make it a section in our file.
+
+00:05:52.779 --> 00:05:56.400
+So now you can see, we've got this snippet.
+
+00:05:56.400 --> 00:06:01.600
+When you have a source block in
+inside of Org Mode,
+
+00:06:01.600 --> 00:06:04.960
+you can easily pop into a
+language-specific buffer by typing
+
+00:06:04.960 --> 00:06:07.680
+C-c ' (single quote).
+
+00:06:07.680 --> 00:06:10.240
+So you can see, now I have a
+
+00:06:10.240 --> 00:06:12.160
+buffer that's in go-mode
+
+00:06:12.160 --> 00:06:14.240
+and gives you all the ability to edit
+
+00:06:14.240 --> 00:06:15.520
+like you would
+
+00:06:15.520 --> 00:06:19.945
+normally. If you hit C-c '
+(single quote)
+
+00:06:19.945 --> 00:06:20.800
+again, it goes back and
+
+00:06:20.800 --> 00:06:25.045
+any changes you make will be
+updated there.
+
+00:06:25.045 --> 00:06:26.160
+But you can do quite a bit
+
+00:06:26.160 --> 00:06:27.879
+just inside of here too.
+
+00:06:27.879 --> 00:06:29.199
+There's quite a bit of
+
+00:06:29.199 --> 00:06:34.479
+language-specific functionality
+
+00:06:34.479 --> 00:06:35.312
+just in place,
+
+00:06:35.312 --> 00:06:36.880
+so you don't always have to go over to a
+
+00:06:36.880 --> 00:06:38.080
+separate buffer.
+
+00:06:38.080 --> 00:06:42.319
+It's a nice option sometimes.
+
+00:06:42.319 --> 00:06:44.319
+Now that you have the code in here,
+
+00:06:44.319 --> 00:06:46.720
+you're going to want to run it.
+
+00:06:46.720 --> 00:06:48.179
+Right now, it just lives here
+
+00:06:48.179 --> 00:06:50.240
+in this documentation.
+
+00:06:50.240 --> 00:06:52.160
+You need to get a copy of it into a
+
+00:06:52.160 --> 00:06:53.840
+separate file,
+
+00:06:53.840 --> 00:06:57.440
+and that's the tangle process that you
+
+00:06:57.440 --> 00:07:01.360
+you need to follow there. So I'm gonna
+
+00:07:01.360 --> 00:07:03.360
+drop in a little bit more doc, a little
+
+00:07:03.360 --> 00:07:12.240
+bit more documentation really quick here.
+
+00:07:12.240 --> 00:07:19.112
+Okay, all right. So just as a side note,
+
+00:07:19.112 --> 00:07:22.845
+I like to follow this process.
+
+00:07:22.845 --> 00:07:26.639
+Whenever I have an operation to perform,
+
+00:07:26.639 --> 00:07:28.880
+I'd like to document it here with a
+
+00:07:28.880 --> 00:07:31.680
+snippet that can be executed inline.
+
+00:07:31.680 --> 00:07:33.280
+Then I don't have to leave Org Mode, and
+
+00:07:33.280 --> 00:07:34.639
+I don't have to try to remember what I
+
+00:07:34.639 --> 00:07:36.800
+did later. So instead of just
+
+00:07:36.800 --> 00:07:38.960
+trying to do an operation, the first time
+
+00:07:38.960 --> 00:07:40.319
+I do something,
+
+00:07:40.319 --> 00:07:41.680
+I take the time to figure out what it is
+
+00:07:41.680 --> 00:07:44.879
+and document it, so then it's
+recorded.
+
+00:07:44.879 --> 00:07:49.120
+So here we find that to do a tangle
+operation,
+
+00:07:49.120 --> 00:07:51.680
+you run the command org-babel-tangle,
+
+00:07:51.680 --> 00:07:53.779
+which is an Elisp command.
+
+00:07:53.779 --> 00:07:58.712
+If you hit C-c C-c to run it in place,
+
+00:07:58.712 --> 00:08:00.080
+you get the result
+
+00:08:00.080 --> 00:08:02.720
+of main.go, which basically is
+
+00:08:02.720 --> 00:08:03.759
+telling us that
+
+00:08:03.759 --> 00:08:07.680
+we've tangled one file called main.go.
+
+00:08:07.680 --> 00:08:11.039
+You can see that's true
+
+00:08:11.039 --> 00:08:12.879
+if you go to the file system
+
+00:08:12.879 --> 00:08:14.400
+and you look.
+
+00:08:14.400 --> 00:08:17.840
+Now in our demo directory,
+
+00:08:17.840 --> 00:08:19.712
+we have a README.org,
+
+00:08:19.712 --> 00:08:22.045
+we have that PNG that we generated,
+
+00:08:22.045 --> 00:08:23.440
+but we also have a main.go.
+
+00:08:23.440 --> 00:08:25.945
+If you visit that file,
+
+00:08:25.945 --> 00:08:27.045
+you'll see that it's just
+
+00:08:27.045 --> 00:08:28.212
+the source code that was
+
+00:08:28.212 --> 00:08:29.280
+in our documentation, which is
+
+00:08:29.280 --> 00:08:30.679
+exactly what we expected
+
+00:08:30.679 --> 00:08:32.880
+and what we wanted. So that's good.
+
+00:08:32.880 --> 00:08:41.120
+So if we return to where we were at...
+
+00:08:41.120 --> 00:08:42.959
+Now we're at the point where we
+
+00:08:42.959 --> 00:08:44.479
+have a file on the file system.
+
+00:08:45.760 --> 00:08:48.379
+Now we need to build it
+
+00:08:48.379 --> 00:08:49.612
+and to run it.
+
+00:08:49.612 --> 00:08:57.040
+So let's follow the same philosophy,
+where let's document
+
+00:08:57.040 --> 00:09:00.160
+these operations that we're going to
+perform.
+
+00:09:00.160 --> 00:09:04.560
+I'm dropping in a
+
+00:09:04.560 --> 00:09:07.112
+a build instruction section
+
+00:09:07.112 --> 00:09:13.360
+and a run instruction section.
+
+00:09:13.360 --> 00:09:15.279
+As you can see here, we have a little
+
+00:09:15.279 --> 00:09:17.839
+a bash source block,
+
+00:09:17.839 --> 00:09:19.245
+and another bash source block.
+
+00:09:19.245 --> 00:09:21.812
+This one compiles. The go build command
+
+00:09:21.812 --> 00:09:25.440
+is what compiles a file. Then
+
+00:09:25.440 --> 00:09:26.579
+the file that gets generated
+
+00:09:26.579 --> 00:09:30.080
+should be called demo.
+
+00:09:30.080 --> 00:09:32.412
+So we just run it here.
+
+00:09:32.412 --> 00:09:37.839
+If I type C-c C-c, we get an
+empty results block.
+
+00:09:37.839 --> 00:09:38.979
+When you compile things,
+
+00:09:38.979 --> 00:09:41.360
+no news is good news.
+
+00:09:41.360 --> 00:09:43.012
+It means there's no errors
+
+00:09:43.012 --> 00:09:45.912
+So presumably, we've created
+
+00:09:45.912 --> 00:09:48.000
+an executable that's called demo.
+
+00:09:51.440 --> 00:09:53.312
+Let's look again at the file system
+
+00:09:53.312 --> 00:10:02.480
+and regenerate...
+
+00:10:02.480 --> 00:10:06.479
+Yep. What we have here is a demo
+executable,
+
+00:10:06.479 --> 00:10:07.760
+which is exactly what we
+wanted.
+
+00:10:07.760 --> 00:10:12.079
+Let's go back.
+
+00:10:12.079 --> 00:10:14.160
+Now we should be able to run it.
+
+00:10:14.160 --> 00:10:16.079
+C-c C-c,
+
+00:10:16.079 --> 00:10:20.399
+and we get Hello World as a result,
+
+00:10:20.399 --> 00:10:23.440
+which was exactly what we were expecting.
+
+00:10:23.440 --> 00:10:26.560
+So that's already pretty cool.
+
+00:10:26.560 --> 00:10:30.839
+You can do that much.
+
+00:10:33.040 --> 00:10:34.560
+That's really just the tip of
+
+00:10:34.560 --> 00:10:37.839
+the iceberg. To really
+
+00:10:41.040 --> 00:10:43.440
+use the more impressive features of
+
+00:10:43.440 --> 00:10:46.160
+literate programming,
+
+00:10:46.160 --> 00:10:49.920
+we need to do a little bit more
+
+00:10:53.200 --> 00:10:54.512
+at least. Really,
+
+00:10:54.512 --> 00:10:56.480
+to get the full benefit of it,
+
+00:10:56.480 --> 00:11:01.079
+we need to add some sections
+
+00:11:01.079 --> 00:11:04.412
+that will cause Emacs to have to
+
+00:11:04.412 --> 00:11:06.720
+tangle or assemble
+
+00:11:06.720 --> 00:11:09.760
+this file from different pieces.
+
+00:11:09.760 --> 00:11:13.120
+Imagine that we wanted to take this file
+
+00:11:13.120 --> 00:11:16.720
+and maybe kind of templatize it.
+
+00:11:16.720 --> 00:11:19.120
+So, using literature programming syntax,
+
+00:11:19.120 --> 00:11:21.279
+this angle bracket syntax,
+
+00:11:21.279 --> 00:11:24.399
+let's say that we want to create an
+
+00:11:24.399 --> 00:11:29.360
+imports section,
+
+00:11:29.360 --> 00:11:32.399
+a functions section,
+
+00:11:32.399 --> 00:11:35.040
+and then maybe just a main section.
+
+00:11:35.040 --> 00:11:36.240
+We'll get rid of this.
+
+00:11:36.240 --> 00:11:37.920
+So now you see, we've created something
+
+00:11:37.920 --> 00:11:39.760
+that looks a little bit like a
+
+00:11:39.760 --> 00:11:42.880
+template or a scaffolding or outline
+
+00:11:42.880 --> 00:11:45.812
+for what our file is going to be.
+
+00:11:45.812 --> 00:11:48.399
+It looks a little bit like pseudocode.
+
+00:11:48.399 --> 00:11:50.612
+What we're going to have
+
+00:11:50.612 --> 00:11:52.399
+literate programming do
+
+00:11:52.399 --> 00:11:54.800
+is dynamically insert those things into
+
+00:11:54.800 --> 00:11:56.639
+those slots.
+
+00:11:56.639 --> 00:12:00.079
+So the first thing we need to do
+
+00:12:00.079 --> 00:12:03.200
+is... So let's create a section
+
+00:12:03.200 --> 00:12:08.079
+called "Say Hello."
+
+00:12:08.079 --> 00:12:09.519
+We want to add some functionality that
+
+00:12:09.519 --> 00:12:12.720
+makes our program say hello.
+
+00:12:12.720 --> 00:12:15.680
+So using a different snippet that I have
+
+00:12:15.680 --> 00:12:17.600
+for creating something
+
+00:12:17.600 --> 00:12:20.800
+that I call like a literate section,
+
+00:12:20.800 --> 00:12:24.079
+basically, we create a
+
+00:12:24.079 --> 00:12:26.000
+another source block that's almost the
+
+00:12:26.000 --> 00:12:27.839
+same as the one for the file.
+
+00:12:27.839 --> 00:12:29.412
+It just has a few differences
+
+00:12:29.412 --> 00:12:34.079
+Say we want to drop code into the import
+section
+
+00:12:34.079 --> 00:12:36.639
+and we want it to be in Go.
+
+00:12:36.639 --> 00:12:40.720
+Here we use the same :noweb no-export syntax,
+
+00:12:40.720 --> 00:12:44.560
+but then we've added this :noweb-ref imports,
+
+00:12:44.560 --> 00:12:48.240
+and this ties that slot
+
+00:12:48.240 --> 00:12:51.120
+to this reference. It tells
+
+00:12:51.120 --> 00:12:53.760
+Emacs that when you tangle,
+
+00:12:53.760 --> 00:12:55.479
+we want to stick whatever's in here
+
+00:12:55.479 --> 00:12:58.240
+in that spot.
+
+00:12:58.240 --> 00:13:02.079
+You skip the tangle file name section
+
+00:13:02.079 --> 00:13:03.279
+because you're not actually creating a
+
+00:13:03.279 --> 00:13:04.240
+file name.
+
+00:13:04.240 --> 00:13:06.160
+You're putting information into an
+
+00:13:06.160 --> 00:13:07.680
+existing file.
+
+00:13:07.680 --> 00:13:10.720
+So here, we would just add the "fmt"
+
+00:13:10.720 --> 00:13:14.399
+for the imports.
+
+00:13:14.399 --> 00:13:16.145
+Let's add another section
+
+00:13:16.145 --> 00:13:22.240
+for functions.
+
+00:13:22.240 --> 00:13:23.812
+Let's just create a function
+
+00:13:23.812 --> 00:13:28.079
+called sayHello
+
+00:13:28.079 --> 00:13:31.745
+that doesn't have any arguments.
+
+00:13:31.745 --> 00:13:34.000
+No return types.
+
+00:13:34.000 --> 00:13:35.760
+All it does is pretty much the
+
+00:13:35.760 --> 00:13:37.440
+same thing as we did before:
+
+00:13:37.440 --> 00:13:38.479
+just print something.
+
+00:13:38.479 --> 00:13:45.760
+Let's just say "Hello EmacsConf"
+this time.
+
+00:13:45.760 --> 00:13:47.279
+Now we have a function,
+
+00:13:47.279 --> 00:13:50.779
+and now the function won't do anything
+
+00:13:50.779 --> 00:13:52.720
+unless we invoke it. Let's do
+
+00:13:52.720 --> 00:13:56.000
+one last literate section
+
+00:13:56.000 --> 00:13:59.920
+called main. Make that Go
+
+00:13:59.920 --> 00:14:03.519
+source block. Then let's
+
+00:14:03.519 --> 00:14:10.320
+invoke that function.
+
+00:14:10.320 --> 00:14:13.360
+Now you can see that we've got
+
+00:14:13.360 --> 00:14:15.600
+our scaffolding
+
+00:14:15.600 --> 00:14:17.199
+outline, and then we have
+
+00:14:17.199 --> 00:14:20.079
+the sections that we want to get tangled
+
+00:14:20.079 --> 00:14:21.360
+or inserted.
+
+00:14:21.360 --> 00:14:25.440
+I've used this syntax.
+
+00:14:25.440 --> 00:14:27.199
+It's kinda borrowed from
+
+00:14:27.199 --> 00:14:28.479
+literate programming a little bit
+
+00:14:28.479 --> 00:14:30.320
+with a +=, so really it's just saying
+
+00:14:30.320 --> 00:14:32.480
+that I want to append
+
+00:14:32.480 --> 00:14:35.760
+this item into the import section
+
+00:14:35.760 --> 00:14:37.600
+It's really just to make a little bit
+
+00:14:37.600 --> 00:14:39.839
+more clear what's going on.
+
+00:14:39.839 --> 00:14:41.445
+When you generate documentation,
+
+00:14:41.445 --> 00:14:43.519
+you won't see these
+
+00:14:43.519 --> 00:14:46.979
+particular property annotations,
+
+00:14:46.979 --> 00:14:50.145
+and so you won't know immediately
+
+00:14:50.145 --> 00:14:51.779
+that this section goes in the
+
+00:14:51.779 --> 00:14:53.839
+imports area. So I usually put
+
+00:14:53.839 --> 00:14:55.440
+a little bit of documentation on top
+
+00:14:55.440 --> 00:14:57.760
+there, so that it's easy to see.
+
+00:14:57.760 --> 00:15:01.120
+You would, probably, if this was very
+
+00:15:01.120 --> 00:15:03.040
+complicated, you'd put some
+
+00:15:03.040 --> 00:15:06.245
+documentation above to explain
+
+00:15:06.245 --> 00:15:07.360
+what you were doing,
+
+00:15:07.360 --> 00:15:11.519
+maybe right here.
+
+00:15:11.519 --> 00:15:13.279
+You could picture yourself
+
+00:15:13.279 --> 00:15:15.040
+maybe explaining
+
+00:15:15.040 --> 00:15:16.745
+a complicated algorithm
+
+00:15:16.745 --> 00:15:18.079
+or something up here
+
+00:15:18.079 --> 00:15:21.120
+and having a nice way to document it.
+
+00:15:21.120 --> 00:15:22.959
+So now that we've got that here in the
+
+00:15:22.959 --> 00:15:25.600
+documentation, we need to figure out...
+
+00:15:25.600 --> 00:15:27.040
+We need to make sure that it's going to
+
+00:15:27.040 --> 00:15:28.045
+tangle properly.
+
+00:15:28.045 --> 00:15:33.519
+Your best friend at this point
+
+00:15:33.519 --> 00:15:35.680
+is a keyboard shortcut that lets you
+
+00:15:35.680 --> 00:15:37.945
+preview the tangled operation.
+
+00:15:37.945 --> 00:15:42.560
+If you say C-c C-v C-v,
+
+00:15:42.560 --> 00:15:44.079
+it will create a new buffer
+
+00:15:44.079 --> 00:15:47.212
+with the tangled contents
+
+00:15:47.212 --> 00:15:49.179
+and so you can see here
+
+00:15:49.179 --> 00:15:52.345
+that the fmt import went to the right
+place,
+
+00:15:52.345 --> 00:15:54.679
+that function went to the right place,
+
+00:15:54.679 --> 00:15:56.079
+the function invocation went to
+
+00:15:56.079 --> 00:15:58.480
+the right place. We're feeling good.
+
+00:15:58.480 --> 00:16:00.912
+You can nest these things
+
+00:16:00.912 --> 00:16:02.800
+many layers deep.
+
+00:16:02.800 --> 00:16:06.045
+If you came into the sayHello function,
+
+00:16:06.045 --> 00:16:10.560
+you could add more sections.
+
+00:16:10.560 --> 00:16:13.759
+It'll go through and it'll
+
+00:16:13.759 --> 00:16:15.345
+keep track of all that
+
+00:16:15.345 --> 00:16:16.212
+and tangle it for you
+
+00:16:16.212 --> 00:16:16.959
+so you really get a lot of freedom
+
+00:16:16.959 --> 00:16:18.320
+and flexibility for how you want to
+
+00:16:18.320 --> 00:16:20.479
+document things by doing this.
+
+00:16:20.479 --> 00:16:23.079
+So now that we've previewed it
+
+00:16:23.079 --> 00:16:25.839
+and we feel good about it,
+
+00:16:25.839 --> 00:16:28.639
+we need to tangle so
+
+00:16:28.639 --> 00:16:31.440
+we get the file on the file system.
+
+00:16:31.440 --> 00:16:34.979
+so C-c C-c and get...
+
+00:16:34.979 --> 00:16:37.199
+just main.go comes back again.
+
+00:16:37.199 --> 00:16:40.959
+C-c C-cc and no errors come back.
+
+00:16:40.959 --> 00:16:43.279
+Then if we did this right,
+
+00:16:43.279 --> 00:16:45.079
+when we run this, we should get
+
+00:16:45.079 --> 00:16:45.600
+"Hello, EmacsConf."
+
+00:16:45.600 --> 00:16:51.199
+So C-c C-c, Hello EmacsConf.
+
+00:16:54.800 --> 00:16:57.645
+I think that's pretty, pretty cool,
+actually.
+
+00:16:57.645 --> 00:16:59.579
+So we've got the breadcrumbs
+
+00:16:59.579 --> 00:17:01.212
+of the process we've gone through
+
+00:17:01.212 --> 00:17:02.399
+to get to this point,
+
+00:17:02.399 --> 00:17:07.545
+this initial document that has some
+tangling in it.
+
+00:17:07.545 --> 00:17:09.919
+We have documentation for how to tangle,
+
+00:17:09.919 --> 00:17:11.345
+how to build, how to run.
+
+00:17:11.345 --> 00:17:15.045
+We've really built a nice foundation
+
+00:17:15.045 --> 00:17:19.379
+for moving forward on our project
+
+00:17:19.379 --> 00:17:21.439
+and a nice way of breaking things
+out
+
+00:17:21.439 --> 00:17:23.280
+and documenting further.
+
+00:17:23.280 --> 00:17:27.120
+The last piece that we need to
+
+00:17:27.120 --> 00:17:30.559
+take care of is the weave that
+
+00:17:30.559 --> 00:17:34.799
+I showed you in the diagram above.
+
+00:17:34.799 --> 00:17:38.640
+So one more time, we'll drop in
+
+00:17:38.640 --> 00:17:41.760
+some documentation, this time on how
+
+00:17:41.760 --> 00:17:42.400
+to weave.
+
+00:17:42.400 --> 00:17:44.400
+It's really just an export function.
+
+00:17:44.400 --> 00:17:46.245
+it's not... There's not a separate
+
+00:17:46.245 --> 00:17:49.012
+weave command going on here.
+
+00:17:49.012 --> 00:17:50.640
+we're just going to export
+
+00:17:50.640 --> 00:17:53.512
+what we've got here into a Markdown
+format.
+
+00:17:53.512 --> 00:17:57.045
+We're using org-gfm-export-to-markdown,
+
+00:17:57.045 --> 00:17:59.745
+which is the Github style markdown.
+
+00:17:59.745 --> 00:18:02.160
+You can use the other,
+
+00:18:02.160 --> 00:18:03.812
+more standard type as well.
+
+00:18:03.812 --> 00:18:08.479
+Hit C-c C-c. Now you see
+
+00:18:08.479 --> 00:18:11.312
+we've got a README file,
+
+00:18:11.312 --> 00:18:16.512
+and if you look in the file system,
+
+00:18:16.512 --> 00:18:19.120
+we've got that right there.
+
+00:18:19.120 --> 00:18:23.120
+If you go to something like ghostwriter
+
+00:18:23.120 --> 00:18:31.679
+and open that file,
+
+00:18:31.679 --> 00:18:32.879
+now you can see that
+
+00:18:32.879 --> 00:18:35.520
+it's generated some documentation.
+
+00:18:35.520 --> 00:18:37.645
+It puts a index at top at the top.
+
+00:18:39.679 --> 00:18:41.145
+I usually turn that off.
+
+00:18:41.145 --> 00:18:42.379
+It's easy to do that by
+
+00:18:42.379 --> 00:18:43.179
+putting a property at the
+
+00:18:43.179 --> 00:18:46.145
+top of your Org file,
+
+00:18:46.145 --> 00:18:46.880
+but some people like to
+
+00:18:46.880 --> 00:18:48.559
+have an index.
+
+00:18:48.559 --> 00:18:50.799
+Here you can see that it has generated
+
+00:18:50.799 --> 00:18:55.200
+pretty nicely and formatted
+snippets well,
+
+00:18:55.200 --> 00:18:56.880
+put the diagram in there, and then
+
+00:18:58.240 --> 00:19:02.799
+it's preserved this
+literate programming syntax,
+
+00:19:02.799 --> 00:19:04.960
+which is important because that's how we
+
+00:19:04.960 --> 00:19:06.112
+want to view the documentation.
+
+00:19:06.112 --> 00:19:11.312
+That's what the no-exports property
+
+00:19:11.312 --> 00:19:13.360
+was trying to maintain.
+
+00:19:13.360 --> 00:19:15.979
+no-exports means when you export,
+
+00:19:15.979 --> 00:19:18.400
+do not try to tangle.
+
+00:19:18.400 --> 00:19:20.559
+Hopefully that makes more sense now.
+
+00:19:20.559 --> 00:19:22.240
+Now you can see all the documentation.
+
+00:19:22.240 --> 00:19:26.080
+I think it demonstrates a
+
+00:19:26.080 --> 00:19:33.520
+pretty useful feature that's inside of
+Emacs.
+
+00:19:33.520 --> 00:19:34.979
+Hopefully you'll have as much fun
+
+00:19:34.979 --> 00:19:39.919
+using that as I have.
+
+00:19:39.919 --> 00:19:43.600
+So thanks!
diff --git a/2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt b/2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt
new file mode 100644
index 00000000..5d0b0b57
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--15-moving-from-jekyll-to-orgmode-an-experience-report--adolfo-villafiorita.vtt
@@ -0,0 +1,1057 @@
+WEBVTT
+
+00:00:00.080 --> 00:00:03.120
+Adolfo: Okay, excellent.
+
+00:00:03.120 --> 00:00:06.960
+Hello, everyone and
+
+00:00:06.960 --> 00:00:10.080
+nice meeting you. Let me
+
+00:00:10.080 --> 00:00:12.400
+thank the the organizer for all the
+
+00:00:12.400 --> 00:00:13.920
+organization and all the work they are
+
+00:00:13.920 --> 00:00:15.200
+doing to support us.
+
+00:00:15.200 --> 00:00:18.400
+My name is Adolfo Villafiorita.
+
+00:00:18.400 --> 00:00:20.733
+I'm teaching at the University of
+Trento.
+
+00:00:20.733 --> 00:00:24.480
+I will shortly be working at
+
+00:00:24.480 --> 00:00:26.240
+shared.tech, which is
+
+00:00:26.240 --> 00:00:29.359
+a non-profit organization developing
+
+00:00:29.359 --> 00:00:30.530
+applications to
+
+00:00:32.399 --> 00:00:35.680
+recover surplus food.
+
+00:00:35.680 --> 00:00:38.600
+The reason of the talk today
+
+00:00:38.600 --> 00:00:40.079
+and the reason I'm here today
+
+00:00:40.079 --> 00:00:42.719
+is to talk about my experience in moving
+
+00:00:42.719 --> 00:00:47.200
+from Jekyll static website generator to
+Org Mode.
+
+00:00:47.200 --> 00:00:50.700
+The reason I moved to Org Mode
+
+00:00:50.700 --> 00:00:53.100
+is to have better support for
+
+00:00:53.100 --> 00:00:56.800
+literate programming on the websites
+
+00:00:56.800 --> 00:00:58.399
+at the University of Trento, where we
+
+00:00:58.399 --> 00:01:00.480
+make available the content for the
+
+00:01:00.480 --> 00:01:04.720
+the students.
+
+00:01:04.720 --> 00:01:08.900
+First of all, what is a static
+website generator?
+
+00:01:08.900 --> 00:01:10.080
+It is basically a tool which
+
+00:01:10.080 --> 00:01:11.360
+allows you to
+
+00:01:11.360 --> 00:01:15.360
+generate HTML files out of text files
+
+00:01:15.360 --> 00:01:17.439
+containing basically two types of
+
+00:01:17.439 --> 00:01:20.700
+information: metadata and content.
+
+00:01:20.700 --> 00:01:23.119
+Metadata is a
+
+00:01:23.119 --> 00:01:26.159
+set of key pairs describing the
+
+00:01:26.159 --> 00:01:28.560
+content of the file, such as the title,
+
+00:01:28.560 --> 00:01:31.733
+author, tags, and so on and so forth.
+
+00:01:31.733 --> 00:01:34.560
+The content is what you actually
+want to
+
+00:01:34.560 --> 00:01:37.040
+get published on the Internet in
+
+00:01:37.040 --> 00:01:38.880
+the HTML file.
+
+00:01:38.880 --> 00:01:41.439
+Usually the content is written in
+
+00:01:41.439 --> 00:01:45.800
+some kind of markup language,
+
+00:01:45.800 --> 00:01:49.759
+such as Markdown or possibly
+
+00:01:49.759 --> 00:01:53.200
+Org Mode. Jekyll is a very
+
+00:01:53.200 --> 00:01:57.900
+popular static website generator.
+
+00:01:57.900 --> 00:01:59.840
+It is written in Ruby.
+
+00:01:59.840 --> 00:02:03.280
+What it does: it systematically
+
+00:02:03.280 --> 00:02:06.840
+transforms all the input files
+
+00:02:06.840 --> 00:02:09.440
+by making the content into
+
+00:02:09.440 --> 00:02:11.599
+HTML and systematically applying a
+
+00:02:11.599 --> 00:02:14.000
+template in order to generate the
+
+00:02:14.000 --> 00:02:17.120
+HTML files, which you can then deploy
+
+00:02:17.120 --> 00:02:19.840
+on your server of choice to make them
+
+00:02:19.840 --> 00:02:22.160
+available on the Internet.
+
+00:02:22.160 --> 00:02:26.160
+One of the features most--
+
+00:02:26.160 --> 00:02:27.500
+well, I would say all
+
+00:02:27.500 --> 00:02:30.239
+static website generators have
+
+00:02:30.239 --> 00:02:32.560
+is that of being able to
+
+00:02:32.560 --> 00:02:34.879
+collect the metadata information
+
+00:02:34.879 --> 00:02:38.400
+of the files being part of
+
+00:02:38.400 --> 00:02:39.440
+your project.
+
+00:02:39.440 --> 00:02:45.280
+The reason they do that is because
+
+00:02:45.280 --> 00:02:47.840
+you sometimes want to generate pages
+
+00:02:47.840 --> 00:02:49.280
+based on the content
+
+00:02:49.280 --> 00:02:53.200
+of your projects,
+
+00:02:53.200 --> 00:02:56.239
+such as, for instance, the list of
+
+00:02:56.239 --> 00:02:59.040
+posts you have recently published, or
+
+00:02:59.040 --> 00:03:00.400
+maybe the list of tags
+
+00:03:00.400 --> 00:03:03.840
+you have defined for your post,
+
+00:03:03.840 --> 00:03:07.280
+and so on and so forth.
+
+00:03:07.280 --> 00:03:09.760
+Jekyll gives the possibility of
+
+00:03:09.760 --> 00:03:12.400
+generating this kind of dynamic
+
+00:03:12.400 --> 00:03:14.400
+content by using Liquid,
+
+00:03:14.400 --> 00:03:18.800
+which is a templating language which
+
+00:03:18.800 --> 00:03:21.840
+looks like this.
+
+00:03:21.840 --> 00:03:24.879
+So basically, you have all the
+
+00:03:24.879 --> 00:03:26.879
+constructs you can
+
+00:03:26.879 --> 00:03:28.800
+expect in a programming language.
+
+00:03:28.800 --> 00:03:29.920
+This, for instance,
+
+00:03:29.920 --> 00:03:33.360
+is a for cycle which
+
+00:03:33.360 --> 00:03:37.440
+iterates over all the posts or the
+
+00:03:37.440 --> 00:03:39.599
+files in a specific directory of the
+
+00:03:39.599 --> 00:03:41.040
+Jekyll project.
+
+00:03:41.040 --> 00:03:45.040
+For each post, it takes the title
+
+00:03:45.040 --> 00:03:48.400
+and the URL and generates a link.
+
+00:03:48.400 --> 00:03:52.867
+So Jekyll is nice and sweet,
+
+00:03:52.867 --> 00:03:55.200
+but over the years
+
+00:03:55.200 --> 00:03:57.760
+I started using more and more
+
+00:03:57.760 --> 00:03:59.519
+systematically
+
+00:03:59.519 --> 00:04:02.000
+Org Mode to write all my files.
+
+00:04:02.000 --> 00:04:04.833
+I moved from Markdown to Org Mode
+
+00:04:04.833 --> 00:04:07.200
+I am a long time Emacs user.
+
+00:04:07.200 --> 00:04:09.167
+I've been using Emacs for 30 years now,
+
+00:04:09.167 --> 00:04:12.799
+so Org Mode is a more recent discovery,
+
+00:04:12.799 --> 00:04:17.033
+but it is a very nice discovery I made.
+
+00:04:17.033 --> 00:04:19.680
+The reason I like Org Mode
+
+00:04:19.680 --> 00:04:22.320
+is because, for instance, you can write
+
+00:04:22.320 --> 00:04:24.933
+formulas using MathJax
+
+00:04:24.933 --> 00:04:26.639
+and you can generate diagrams
+
+00:04:26.639 --> 00:04:30.320
+or plots with Gnuplot.
+
+00:04:30.320 --> 00:04:32.240
+Also important is the fact that you have
+
+00:04:32.240 --> 00:04:34.080
+the possibility of publishing
+
+00:04:34.080 --> 00:04:39.520
+your documents to multiple backends
+such as PDF,
+
+00:04:39.520 --> 00:04:43.600
+or maybe a Reveal presentation,
+
+00:04:43.600 --> 00:04:47.199
+or HTML. This is all made possible
+
+00:04:47.199 --> 00:04:50.479
+by Babel, which is
+
+00:04:50.479 --> 00:04:52.560
+exactly what we just saw in the
+
+00:04:52.560 --> 00:04:54.639
+previous talk:
+
+00:04:54.639 --> 00:04:57.440
+Namely, the possibility of executing a
+
+00:04:57.440 --> 00:04:59.520
+snippet of code
+
+00:04:59.520 --> 00:05:02.560
+embedded in in your pages.
+
+00:05:02.560 --> 00:05:06.400
+Our model can also be used
+
+00:05:06.400 --> 00:05:09.600
+within Jekyll. In fact,
+
+00:05:09.600 --> 00:05:13.667
+there is a a nice gem, a nice library,
+
+00:05:13.667 --> 00:05:17.233
+called jekyll-org which allows you
+
+00:05:17.233 --> 00:05:19.680
+to use Org Mode files directly
+
+00:05:19.680 --> 00:05:22.880
+into jekyll. But when you start using
+
+00:05:22.880 --> 00:05:26.560
+Org Mode... When I started using
+
+00:05:26.560 --> 00:05:30.560
+Org Mode, I realized I could move
+
+00:05:30.560 --> 00:05:34.240
+all my workflow, all my publishing
+
+00:05:34.240 --> 00:05:36.840
+workflow to Emacs.
+
+00:05:36.840 --> 00:05:41.100
+In fact, Org Mode is also a
+
+00:05:41.100 --> 00:05:42.880
+static website generator because
+
+00:05:42.880 --> 00:05:46.240
+it has got the possibility of publishing
+
+00:05:46.240 --> 00:05:50.880
+projects made of Org Mode files.
+
+00:05:50.880 --> 00:05:53.840
+One of the nice things about
+
+00:05:53.840 --> 00:05:56.479
+the publishing features of Org Mode
+
+00:05:56.479 --> 00:05:58.880
+is that it allows you to define in the
+
+00:05:58.880 --> 00:06:01.300
+org-publish-project-alist,
+
+00:06:01.300 --> 00:06:03.199
+all the the components
+
+00:06:03.199 --> 00:06:05.367
+which are part of your project.
+
+00:06:05.367 --> 00:06:07.520
+In a sense, it is
+
+00:06:07.520 --> 00:06:10.479
+also more flexible than Jekyll,
+
+00:06:10.479 --> 00:06:12.880
+because it also allows you, for instance,
+
+00:06:12.880 --> 00:06:15.120
+to publish a single file rather
+
+00:06:15.120 --> 00:06:17.440
+than having to recompile everything
+
+00:06:17.440 --> 00:06:20.080
+every time you want to publish your
+
+00:06:20.080 --> 00:06:22.333
+your project to your website.
+
+00:06:22.333 --> 00:06:25.333
+However, there are some short comments
+
+00:06:25.333 --> 00:06:29.520
+I would say, or some areas
+of improvement.
+
+00:06:30.400 --> 00:06:33.600
+The first is that support for
+templating
+
+00:06:33.600 --> 00:06:36.639
+is not so obvious as it is
+
+00:06:36.639 --> 00:06:39.280
+in Jekyll, even though there are some
+
+00:06:40.560 --> 00:06:44.560
+nice extensions such as org-thtml,
+
+00:06:44.560 --> 00:06:48.400
+for instance, which allows you to use
+templates.
+
+00:06:48.400 --> 00:06:51.840
+More important to me was the fact that
+
+00:06:51.840 --> 00:06:54.080
+apparently, there is little support for
+
+00:06:54.080 --> 00:06:56.133
+the creation of dynamic content
+
+00:06:56.133 --> 00:06:57.900
+So I was very curious
+
+00:06:57.900 --> 00:06:59.360
+and very keen to use
+
+00:06:59.360 --> 00:07:02.800
+Org Mode for publishing my blog
+
+00:07:02.800 --> 00:07:05.440
+and the courses at the university,
+
+00:07:05.440 --> 00:07:08.720
+but then I had to find a way
+
+00:07:08.720 --> 00:07:11.440
+to being able to publish these
+
+00:07:11.440 --> 00:07:13.599
+dynamic pages, finding some kind of
+
+00:07:13.599 --> 00:07:16.000
+replacement, so to speak,
+
+00:07:16.720 --> 00:07:17.900
+for the liquid engine.
+
+00:07:17.900 --> 00:07:24.160
+The solution was there at hand,
+actually, because
+
+00:07:24.160 --> 00:07:27.280
+basically, I realized I could use Babel
+
+00:07:27.280 --> 00:07:30.800
+for exactly this purpose. Rather than
+
+00:07:30.800 --> 00:07:32.720
+using Babel for generating
+
+00:07:32.720 --> 00:07:35.759
+plots or my other computations
+
+00:07:35.759 --> 00:07:37.919
+or whatever I was using them for,
+
+00:07:37.919 --> 00:07:41.039
+I realized I could use Babel to
+
+00:07:41.039 --> 00:07:45.120
+generate HTML which could be
+
+00:07:45.120 --> 00:07:49.967
+then published in the project
+
+00:07:49.967 --> 00:07:53.680
+All I needed to do then
+
+00:07:53.680 --> 00:07:56.100
+was defining some kind of functions,
+
+00:07:56.100 --> 00:07:58.319
+some kind of code in order to read
+
+00:07:58.319 --> 00:08:01.840
+the metadata of all
+
+00:08:01.840 --> 00:08:04.767
+the Org Mode files of my web project,
+
+00:08:04.767 --> 00:08:09.680
+so that I could then publish--
+
+00:08:09.680 --> 00:08:13.280
+generate the dynamic content.
+
+00:08:13.280 --> 00:08:18.080
+This is a snippet taken from
+
+00:08:18.080 --> 00:08:21.759
+one of my HTML projects,
+
+00:08:21.759 --> 00:08:24.800
+which basically shows the way in which
+
+00:08:24.800 --> 00:08:27.599
+I generate the list of posts on
+
+00:08:27.599 --> 00:08:32.560
+my page. It is exactly how the
+Liquid that we saw
+
+00:08:32.560 --> 00:08:35.680
+a couple of slides earlier that
+looks like
+
+00:08:35.680 --> 00:08:39.200
+in Org Mode.
+
+00:08:39.200 --> 00:08:42.320
+Basically, what I'm doing...
+I'm using...
+
+00:08:42.320 --> 00:08:46.720
+I wrote a Ruby script which
+
+00:08:46.720 --> 00:08:49.680
+reads all the metadata. So this
+
+00:08:49.680 --> 00:08:51.040
+highlighted code
+
+00:08:51.040 --> 00:08:53.100
+basically loads the script
+
+00:08:53.100 --> 00:08:55.300
+which is stored externally.
+
+00:08:55.300 --> 00:08:56.800
+Then it collects all the
+
+00:08:56.800 --> 00:08:58.320
+metadata from the
+
+00:08:58.320 --> 00:09:00.880
+Org Mode files in the
+
+00:09:00.880 --> 00:09:02.240
+current directory.
+
+00:09:02.240 --> 00:09:04.800
+And then the following... The code
+
+00:09:04.800 --> 00:09:06.480
+you can see here
+
+00:09:06.480 --> 00:09:09.839
+basically iterates over all the
+
+00:09:09.839 --> 00:09:12.959
+posts read at the previous step.
+
+00:09:12.959 --> 00:09:16.399
+It generates
+
+00:09:16.399 --> 00:09:19.519
+a list with the title
+
+00:09:19.519 --> 00:09:22.959
+and the URLS, basically
+
+00:09:22.959 --> 00:09:27.440
+replicating what Jekyll does.
+
+00:09:27.440 --> 00:09:30.240
+There are some other things
+
+00:09:30.240 --> 00:09:32.399
+I have to deal with in order to
+
+00:09:33.200 --> 00:09:36.480
+accommodate my workflow. But that was
+
+00:09:36.480 --> 00:09:39.200
+relatively easy in the sense that one of
+
+00:09:39.200 --> 00:09:43.279
+the problems, one of the issues I had to
+
+00:09:43.279 --> 00:09:45.360
+solve was that of having
+
+00:09:45.360 --> 00:09:48.480
+a common navigation on all my
+
+00:09:48.480 --> 00:09:51.040
+pages. That was easily solved
+
+00:09:51.040 --> 00:09:53.867
+using the #+INCLUDE feature.
+
+00:09:53.867 --> 00:09:54.959
+So I basically
+
+00:09:54.959 --> 00:09:56.000
+made available
+
+00:09:56.000 --> 00:09:57.839
+an #+INCLUDE with all the navigation
+
+00:09:57.839 --> 00:10:00.560
+which is embedded in all the pages of
+
+00:10:00.560 --> 00:10:01.839
+my websites
+
+00:10:01.839 --> 00:10:03.733
+through the #+INCLUDE.
+
+00:10:03.733 --> 00:10:06.160
+Another nice feature which
+
+00:10:06.160 --> 00:10:08.560
+Jekyll has is the possibility of
+
+00:10:08.560 --> 00:10:12.800
+previewing a website before deploying it.
+
+00:10:13.200 --> 00:10:16.079
+Emacs also has got a node which allows
+
+00:10:16.079 --> 00:10:21.200
+you to launch a web server. In fact,
+
+00:10:21.200 --> 00:10:24.320
+I wrote a quick hack
+
+00:10:24.320 --> 00:10:26.959
+which allows you to
+
+00:10:26.959 --> 00:10:31.519
+invoke a node on an Org Mode
+
+00:10:31.519 --> 00:10:34.720
+project, start a local preview,
+
+00:10:34.720 --> 00:10:37.920
+and then use rsync
+
+00:10:37.920 --> 00:10:44.839
+in order to deploy the the website.
+
+00:10:46.240 --> 00:10:48.720
+Five minutes left. More than
+
+00:10:48.720 --> 00:10:51.200
+enough. Okay.
+
+00:10:51.200 --> 00:10:52.967
+Thanks. Thank you, thank you very much.
+
+00:10:52.967 --> 00:10:56.480
+I'm nearly done. So then I can take
+some questions.
+
+00:10:56.480 --> 00:11:00.560
+Just to give you maybe
+
+00:11:00.560 --> 00:11:03.680
+a slightly more in-depth
+
+00:11:03.680 --> 00:11:06.480
+view of what the pages look like,
+
+00:11:06.480 --> 00:11:07.200
+so these are
+
+00:11:07.200 --> 00:11:11.120
+one of the pages, or the source files
+
+00:11:11.120 --> 00:11:14.720
+of one of the websites. It is
+
+00:11:14.720 --> 00:11:18.480
+in literate programming. Basically,
+
+00:11:18.480 --> 00:11:20.399
+you see there is some metadata here.
+
+00:11:20.399 --> 00:11:22.640
+I mean this is a regular Org Mode file.
+
+00:11:22.640 --> 00:11:26.640
+This part here
+
+00:11:26.640 --> 00:11:29.920
+basically defines some common options
+
+00:11:29.920 --> 00:11:31.519
+for publication.
+
+00:11:31.519 --> 00:11:35.920
+These two includes here
+
+00:11:35.920 --> 00:11:41.120
+put some extra HTML in the head part and
+
+00:11:41.120 --> 00:11:44.480
+the navigation. Here, as you can see,
+
+00:11:44.480 --> 00:11:48.079
+is the code generating the
+
+00:11:48.079 --> 00:11:50.160
+the list in chronological order. It is
+
+00:11:50.160 --> 00:11:52.240
+slightly more complex than the example I
+
+00:11:52.240 --> 00:11:53.839
+made in the slide
+
+00:11:53.839 --> 00:11:56.240
+because there is some more
+
+00:11:56.240 --> 00:11:59.760
+elaboration to do, including
+putting some
+
+00:11:59.760 --> 00:12:01.839
+Javascript to identify
+
+00:12:01.839 --> 00:12:05.120
+according to the tags.
+
+00:12:05.120 --> 00:12:08.160
+To go back to the presentation...
+
+00:12:11.200 --> 00:12:13.067
+I managed this migration
+
+00:12:13.067 --> 00:12:14.560
+a few months ago,
+
+00:12:14.560 --> 00:12:17.680
+and then all my workflow is within
+
+00:12:17.680 --> 00:12:20.399
+Org Mode and within Emacs.
+
+00:12:20.399 --> 00:12:23.079
+I'm very happy with it because it's
+
+00:12:23.079 --> 00:12:26.800
+simplified quite a bit
+
+00:12:26.800 --> 00:12:28.480
+my publication process.
+
+00:12:28.480 --> 00:12:31.839
+One of the advantages... Another
+
+00:12:31.839 --> 00:12:34.240
+advantage... So the first advantage is that
+
+00:12:34.240 --> 00:12:36.959
+everything is in Org Mode and Emacs.
+
+00:12:36.959 --> 00:12:38.160
+Second advantage
+
+00:12:38.160 --> 00:12:41.680
+is that everything is based on the
+
+00:12:41.680 --> 00:12:44.880
+standard machinery provided by Org Mode.
+
+00:12:44.880 --> 00:12:47.760
+So in a sense, it is
+
+00:12:47.760 --> 00:12:50.079
+more robust with respect to
+
+00:12:50.079 --> 00:12:53.040
+dependencies, possible errors, and so
+
+00:12:53.040 --> 00:12:54.320
+on and so forth.
+
+00:12:54.320 --> 00:12:56.639
+The fact that Org Mode
+
+00:12:56.639 --> 00:12:58.240
+allows you to publish
+
+00:12:58.240 --> 00:13:00.880
+a single file in a project is also
+
+00:13:00.880 --> 00:13:03.839
+very interesting because
+
+00:13:03.839 --> 00:13:07.839
+it allows to be more robust to
+
+00:13:07.839 --> 00:13:11.040
+problems you might introduce when
+
+00:13:11.040 --> 00:13:14.959
+you're changing--when I'm changing the
+setup.
+
+00:13:14.959 --> 00:13:16.880
+Another interesting thing which I
+
+00:13:16.880 --> 00:13:21.519
+realized that I could have is that
+
+00:13:21.519 --> 00:13:23.600
+in a sense, the specification of the
+
+00:13:23.600 --> 00:13:28.480
+website can be embedded in the website
+itself.
+
+00:13:28.480 --> 00:13:30.800
+In a sense this is some kind of
+
+00:13:30.800 --> 00:13:31.839
+self-documenting...
+
+00:13:31.839 --> 00:13:35.120
+It's a way of self-documenting
+
+00:13:35.120 --> 00:13:36.600
+what I'm actually doing.
+
+00:13:36.600 --> 00:13:44.133
+For instance, here on my website,
+
+00:13:44.133 --> 00:13:46.399
+you can see the
+
+00:13:46.399 --> 00:13:48.240
+specification of the
+
+00:13:48.240 --> 00:13:51.519
+project which is loaded
+
+00:13:51.519 --> 00:13:53.933
+from my initialization file,
+
+00:13:53.933 --> 00:13:56.320
+but then it is also published
+
+00:13:56.320 --> 00:13:59.440
+together with my home page. It lives
+
+00:13:59.440 --> 00:14:01.360
+with the repository where
+
+00:14:01.360 --> 00:14:05.360
+I keep all the sources of my website,
+
+00:14:05.360 --> 00:14:08.079
+which is kind of nice because it
+
+00:14:08.079 --> 00:14:09.839
+basically isolates
+
+00:14:09.839 --> 00:14:14.079
+everything in a single place.
+
+00:14:14.079 --> 00:14:16.880
+So there are some examples. I'm
+
+00:14:16.880 --> 00:14:19.433
+showing them more because of the
+
+00:14:19.433 --> 00:14:21.760
+source code which
+
+00:14:21.760 --> 00:14:25.519
+you can grab from the git repositories
+
+00:14:25.519 --> 00:14:26.933
+if you are interested.
+
+00:14:26.933 --> 00:14:28.399
+Of course I'm also available
+
+00:14:28.399 --> 00:14:31.600
+to provide some support and help
+
+00:14:31.600 --> 00:14:32.959
+if you are interested
+
+00:14:32.959 --> 00:14:34.480
+in this kind of stuff.
+
+00:14:34.480 --> 00:14:37.760
+The the next step for me will be that of
+
+00:14:37.760 --> 00:14:41.600
+trying, making this kind of
+machinery available
+
+00:14:41.600 --> 00:14:45.199
+for more general use at the moment.
+
+00:14:45.199 --> 00:14:47.120
+If you are interested in trying out my
+
+00:14:47.120 --> 00:14:48.800
+suggestion, grabbing the
+
+00:14:48.800 --> 00:14:51.933
+sources for one of the websites
+
+00:14:51.933 --> 00:14:54.700
+to seehow they look like,
+
+00:14:54.700 --> 00:14:56.720
+and maybe try and
+
+00:14:56.720 --> 00:15:00.160
+customize it for your purposes...
+
+00:15:00.160 --> 00:15:03.839
+This is basically the content of my talk.
+
+00:15:03.839 --> 00:15:06.959
+I'm open to questions and thank you
+
+00:15:06.959 --> 00:15:10.880
+for your attention.
+
+00:15:10.880 --> 00:15:12.880
+(Amin: Thank you very much, Adolfo, for your
+
+00:15:12.880 --> 00:15:14.480
+awesome presentation.
+
+00:15:14.480 --> 00:15:17.360
+I think we have time for maybe like
+
+00:15:17.360 --> 00:15:19.360
+one or two questions,
+
+00:15:19.360 --> 00:15:21.279
+and then the rest maybe you could
+
+00:15:21.279 --> 00:15:26.639
+take up after the stream.)
+
+00:15:26.639 --> 00:15:28.033
+Adolfo: What should we do?
+
+00:15:28.033 --> 00:15:30.000
+(Amin: Would you like me
+
+00:15:30.000 --> 00:15:31.839
+to read you the questions?)
+
+00:15:31.839 --> 00:15:35.199
+Adolfo: Yeah, probably better because
+
+00:15:35.199 --> 00:15:36.700
+I'm kind of lost there.
+
+00:15:36.700 --> 00:15:40.399
+(Amin: Okay, no problem.
+
+00:15:40.399 --> 00:15:42.480
+So someone asks, "Do you have any
+
+00:15:42.480 --> 00:15:45.440
+opinion on Firn?")
+
+00:15:45.440 --> 00:15:48.639
+Adolfo: Firn. I don't know Firn,
+
+00:15:48.639 --> 00:15:51.839
+so I'll give it a try
+
+00:15:51.839 --> 00:15:55.040
+and check it out.
+
+00:15:55.040 --> 00:15:57.839
+(Amin: Thanks. People are also asking,
+
+00:15:57.839 --> 00:15:59.680
+do you discuss this, for example, in a blog
+
+00:15:59.680 --> 00:16:01.279
+or anywhere else they could find more
+
+00:16:01.279 --> 00:16:02.800
+about it?)
+
+00:16:02.800 --> 00:16:05.600
+Adolfo: Oh yes. I'm going to publish the
+
+00:16:05.600 --> 00:16:08.560
+the talk and the content
+
+00:16:08.560 --> 00:16:11.120
+on my website, and then I'll link it from
+
+00:16:11.120 --> 00:16:13.067
+the EmacsConf conference
+
+00:16:13.067 --> 00:16:14.720
+so that it will be easier for
+
+00:16:14.720 --> 00:16:16.533
+people to to reach it
+
+00:16:16.533 --> 00:16:19.040
+I will shortly make it
+
+00:16:19.040 --> 00:16:22.880
+available right after the conference.
+
+00:16:22.880 --> 00:16:26.160
+(Amin: Wonderful. I think that's all
+for the questions.
+
+00:16:26.160 --> 00:16:27.667
+Thank you very much.)
+
+00:16:27.667 --> 00:16:29.600
+Adolfo: Thank you very much. Thank you.
+
+00:16:29.600 --> 00:16:34.800
+(Amin: Cheers.) Adolfo: Bye, cheers. (Amin: Bye.)
diff --git a/2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt b/2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt
new file mode 100644
index 00000000..b5aeca75
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--16-org-roam-presentation-demonstration-and-whats-on-the-horizon--leo-vivier.vtt
@@ -0,0 +1,1674 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.480
+Leo Vivier: I'm hoping to keep this
+talk in
+
+00:00:02.480 --> 00:00:03.919
+15 minutes. I'll take five minutes of
+
+00:00:03.919 --> 00:00:05.279
+questions at the end.
+
+00:00:05.279 --> 00:00:07.520
+So, hello again! I suppose you're starting
+
+00:00:07.520 --> 00:00:09.200
+to get pretty familiar with me and my
+
+00:00:09.200 --> 00:00:10.719
+start(?) right now.
+
+00:00:10.719 --> 00:00:12.480
+We're getting into the nitty
+
+00:00:12.480 --> 00:00:14.719
+gritty. We started today,
+
+00:00:14.719 --> 00:00:17.039
+I told you about how I'd ventured from
+
+00:00:17.039 --> 00:00:18.480
+being a user
+
+00:00:18.480 --> 00:00:20.800
+to being a maintainer, and right now I'm
+
+00:00:20.800 --> 00:00:22.080
+going to get the chance to
+
+00:00:22.080 --> 00:00:24.240
+actually tell you more about the project
+
+00:00:24.240 --> 00:00:25.279
+that I'm maintaining,
+
+00:00:25.279 --> 00:00:28.480
+which is called org-roam.
+
+00:00:28.480 --> 00:00:30.560
+So even if I... It would have had a better
+
+00:00:30.560 --> 00:00:32.320
+impact if I
+
+00:00:32.320 --> 00:00:33.840
+didn't scroll the page, but you know,
+
+00:00:33.840 --> 00:00:35.520
+sadly, I'm out of tea,
+
+00:00:35.520 --> 00:00:37.120
+it's getting late in Europe and I'm
+
+00:00:37.120 --> 00:00:39.600
+starting to get tired.
+
+00:00:39.600 --> 00:00:43.360
+So what I'm gonna do during this talk
+
+00:00:43.360 --> 00:00:46.160
+is just to do, really, a survey for people who
+
+00:00:46.160 --> 00:00:48.079
+do not know what org-roam is about.
+
+00:00:48.079 --> 00:00:50.480
+Some of you might have,
+
+00:00:50.480 --> 00:00:52.320
+whilst browsing Reddit,
+
+00:00:52.320 --> 00:00:54.879
+found a topic about org-roam and thought
+
+00:00:54.879 --> 00:00:56.480
+to yourself, "Oh, that looks interesting,
+
+00:00:56.480 --> 00:00:58.967
+but you know, I have my own workflow
+
+00:00:58.967 --> 00:01:01.039
+and I kinda don't need to
+change anything
+
+00:01:01.039 --> 00:01:03.199
+about it. I'm completely fine
+
+00:01:03.199 --> 00:01:05.680
+using my very very large file. Or I'm
+
+00:01:05.680 --> 00:01:07.520
+completely fine having my
+
+00:01:07.520 --> 00:01:10.960
+database of notes which I've been
+
+00:01:10.960 --> 00:01:14.560
+accruing for 10, 20, 30 years or so."
+
+00:01:14.560 --> 00:01:17.759
+So what I want to do during this talk
+
+00:01:17.759 --> 00:01:20.960
+is both to present to you what
+org-roam is about,
+
+00:01:20.960 --> 00:01:23.439
+if you are in this group of people who
+
+00:01:23.439 --> 00:01:25.600
+do not know what org-roam is about
+but would
+
+00:01:25.600 --> 00:01:27.520
+like to know more, but
+
+00:01:27.520 --> 00:01:30.560
+also for people who have close to no
+
+00:01:30.560 --> 00:01:33.360
+experience with Emacs and Org Mode and
+
+00:01:33.360 --> 00:01:35.040
+who have just found their way. They
+
+00:01:35.040 --> 00:01:36.880
+wanted to find the system to
+
+00:01:36.880 --> 00:01:39.840
+write their notes, basically, and
+
+00:01:39.840 --> 00:01:41.439
+they discovered this little tool which
+
+00:01:41.439 --> 00:01:42.960
+is called org-roam,
+
+00:01:42.960 --> 00:01:44.479
+and they'd like to know more about this.
+
+00:01:44.479 --> 00:01:49.360
+So I've got 13 minutes to convince you
+to use org-roam.
+
+00:01:49.360 --> 00:01:53.360
+If we go in a very broad strokes,
+
+00:01:53.360 --> 00:01:56.799
+what is org-roam? org-roam
+
+00:01:56.799 --> 00:01:59.759
+is a way for you to manage backlinks
+
+00:01:59.759 --> 00:02:03.439
+inside Org Mode. The keyword
+
+00:02:03.439 --> 00:02:07.040
+in what I've just said is links.
+
+00:02:07.040 --> 00:02:10.080
+Now there is a principle behind org-roam
+
+00:02:10.080 --> 00:02:12.879
+which is called the Zettelkasten method,
+
+00:02:12.879 --> 00:02:14.239
+which you can see written right there.
+
+00:02:14.239 --> 00:02:15.440
+It's a German word
+
+00:02:15.440 --> 00:02:18.000
+which means a slip box. If you remember
+
+00:02:18.000 --> 00:02:19.280
+in old libraries,
+
+00:02:19.280 --> 00:02:22.080
+you had--actually, I believe if I scroll, I
+
+00:02:22.080 --> 00:02:23.440
+should have an example of this.
+
+00:02:23.440 --> 00:02:26.640
+Yes. So this is a slip box. Basically, in
+
+00:02:26.640 --> 00:02:28.879
+all libraries, you used to have all the
+
+00:02:28.879 --> 00:02:30.560
+references to the books that the library
+
+00:02:30.560 --> 00:02:31.599
+used to have
+
+00:02:31.599 --> 00:02:34.720
+inside those boxes. They're called
+
+00:02:34.720 --> 00:02:36.080
+slip boxes because you can
+
+00:02:36.080 --> 00:02:38.480
+insert stuff into the boxes and you can
+
+00:02:38.480 --> 00:02:41.200
+remove stuff out of the boxes.
+
+00:02:41.200 --> 00:02:44.720
+Now if I try
+
+00:02:44.720 --> 00:02:48.000
+to summarize as simply as I may what the
+
+00:02:48.000 --> 00:02:49.360
+Zettelkasten method
+
+00:02:49.360 --> 00:02:52.800
+is about, it's about having a way
+
+00:02:52.800 --> 00:02:56.560
+to work with your notes which considers
+
+00:02:56.560 --> 00:02:59.920
+elements of knowledge as atoms,
+
+00:02:59.920 --> 00:03:02.000
+as something that is individual, like
+
+00:03:02.000 --> 00:03:04.159
+a single file.
+
+00:03:04.159 --> 00:03:07.440
+You consider that in order to build
+knowledge,
+
+00:03:07.440 --> 00:03:11.120
+you have to combine atoms together,
+so that
+
+00:03:11.120 --> 00:03:14.720
+when you have one atom, another atom,
+
+00:03:14.720 --> 00:03:17.519
+if you link them together, you have a
+
+00:03:17.519 --> 00:03:22.000
+complex thought or a complex molecule.
+
+00:03:22.000 --> 00:03:24.000
+Don't quote me on the chemistry, by
+
+00:03:24.000 --> 00:03:25.360
+the way. I shall remind you I'm an
+
+00:03:25.360 --> 00:03:26.879
+English major I have no idea what I'm
+
+00:03:26.879 --> 00:03:28.239
+talking about.
+
+00:03:28.239 --> 00:03:31.360
+So, how does it work as far as a
+
+00:03:31.360 --> 00:03:35.280
+note-taking system is concerned?
+To do so,
+
+00:03:35.280 --> 00:03:37.599
+I'm just going to switch really quickly
+
+00:03:37.599 --> 00:03:43.040
+to my Emacs, if I may.
+So I'm just going to screenshare
+
+00:03:43.040 --> 00:03:44.959
+onto my Emacs. Just give me a second to get
+
+00:03:44.959 --> 00:03:47.840
+the windows all right.
+
+00:03:47.840 --> 00:03:52.080
+Okay, it's loading up. Oh no,
+
+00:03:52.080 --> 00:03:54.720
+I think Firefox has crashed again. Okay,
+
+00:03:54.720 --> 00:03:56.000
+so you're gonna have to give me a second.
+
+00:03:56.000 --> 00:03:58.840
+I need to figure this out.
+
+00:03:58.840 --> 00:04:01.680
+Okay. So everything is frozen right now.
+
+00:04:01.680 --> 00:04:03.120
+Just to tell you, so you're gonna have to
+
+00:04:03.120 --> 00:04:04.720
+deal with my lovely voice.
+
+00:04:04.720 --> 00:04:06.159
+Amin, can you confirm that if I
+
+00:04:06.159 --> 00:04:09.840
+switch to a new (tty?), you can
+still hear me?
+
+00:04:09.840 --> 00:04:12.959
+So can you still hear me now?
+
+00:04:12.959 --> 00:04:14.879
+Okay. So I'm gonna have probably to kill
+
+00:04:14.879 --> 00:04:16.479
+firefox and log in again.
+
+00:04:16.479 --> 00:04:18.000
+I'm sorry. It's gonna cost us two
+
+00:04:18.000 --> 00:04:19.600
+minutes, but I'm gonna try to be as fast
+
+00:04:19.600 --> 00:04:20.560
+as I can. Okay
+
+00:04:20.560 --> 00:04:28.560
+(Amin: Okay. No problem, thanks.
+
+00:04:28.560 --> 00:04:35.199
+All right.
+
+00:04:35.199 --> 00:04:37.520
+I guess no event is a good one without
+
+00:04:37.520 --> 00:04:39.280
+one or two technical difficulties.
+
+00:04:39.280 --> 00:04:42.800
+I guess this is our share of
+
+00:04:42.800 --> 00:04:45.360
+technical difficulties this year.
+
+00:04:45.360 --> 00:05:04.800
+No problem.)
+
+00:05:04.800 --> 00:05:06.320
+Leo: All right. Guess who's back? It's not
+
+00:05:06.320 --> 00:05:08.160
+Britney. It's just me, sadly, so you're
+
+00:05:08.160 --> 00:05:10.800
+gonna have to make do with me.
+
+00:05:10.800 --> 00:05:11.667
+(Amin: Welcome back.)
+
+00:05:11.667 --> 00:05:12.880
+Leo: Well, thank you. I'm just
+
+00:05:12.880 --> 00:05:15.520
+gonna turn back on the camera, if I may.
+
+00:05:15.520 --> 00:05:19.919
+All righty.
+
+00:05:19.919 --> 00:05:22.400
+I'm going to make myself a presenter.
+
+00:05:22.400 --> 00:05:23.520
+I'm going to
+
+00:05:23.520 --> 00:05:26.160
+share my screen with you.
+
+00:05:29.919 --> 00:05:32.700
+So, if my calculations are correct,
+
+00:05:32.700 --> 00:05:34.800
+you should be able to see my
+monitor right now.
+
+00:05:34.800 --> 00:05:38.160
+(Amin: Yep, but not your webcam feed.)
+
+00:05:38.160 --> 00:05:39.919
+Not my webcam feed. Okay. So I'm going to
+
+00:05:39.919 --> 00:05:42.800
+stop it.
+
+00:05:42.800 --> 00:05:46.000
+Sorry for the little delay, folks. You
+know, it's...
+
+00:05:46.000 --> 00:05:49.039
+The show must go on. Can you see it now?
+
+00:05:49.039 --> 00:05:52.320
+(Amin: Not yet.) Leo: Still not?
+
+00:05:52.320 --> 00:06:00.080
+Damn it. Can I stop it? Okay, so I'm gonna...
+
+00:06:00.080 --> 00:06:32.960
+(Amin: yeah, maybe try like sharing a webcam
+first.)
+
+00:06:32.960 --> 00:06:36.319
+Leo: All right, I'm back now. So I'm going to
+
+00:06:36.319 --> 00:06:37.759
+share my webcam first.
+
+00:06:37.759 --> 00:06:39.550
+(Amin: Okay.)
+
+00:06:43.440 --> 00:06:46.560
+Leo: All righty. So can you confirm whenever
+
+00:06:46.560 --> 00:06:49.360
+you've got my webcam working?
+
+00:06:49.360 --> 00:06:52.880
+(Amin: Let's see. I don't see it yet,
+
+00:06:52.880 --> 00:06:55.919
+unfortunately.) Leo: Is it loading up?
+(Amin: yeah,
+
+00:06:55.919 --> 00:06:57.120
+it's coming up.
+
+00:06:57.120 --> 00:06:59.680
+Yep, I can see it.) Leo: Awesome. All right. Okay,
+
+00:06:59.680 --> 00:07:01.199
+we're back on track. I've got still eight
+
+00:07:01.199 --> 00:07:02.880
+minutes left to do, so I might have to
+
+00:07:02.880 --> 00:07:04.160
+have a couple of minutes to my talk, if
+
+00:07:04.160 --> 00:07:06.000
+you don't mind and shave off some
+
+00:07:06.000 --> 00:07:07.599
+questions.
+
+00:07:07.599 --> 00:07:10.800
+(Amin: Okay, do you want to share your
+screen?) Leo: Okay, yeah,
+
+00:07:10.800 --> 00:07:13.759
+I'm on my way to. All right. So
+
+00:07:13.759 --> 00:07:14.639
+please forget
+
+00:07:14.639 --> 00:07:16.240
+whatever, whichever technical
+
+00:07:16.240 --> 00:07:18.000
+difficulties we might have had for
+
+00:07:18.000 --> 00:07:18.479
+the last
+
+00:07:18.479 --> 00:07:20.240
+three, four minutes, but we're back on
+
+00:07:20.240 --> 00:07:22.080
+track now.
+
+00:07:22.080 --> 00:07:24.960
+So org-roam: what is it and how does it
+
+00:07:24.960 --> 00:07:26.639
+work? I was telling you all about
+
+00:07:26.639 --> 00:07:28.720
+atoms and I was telling you about links,
+
+00:07:28.720 --> 00:07:30.720
+but how does it work concretely?
+
+00:07:30.720 --> 00:07:33.840
+Right now what you're seeing on your
+screens
+
+00:07:33.840 --> 00:07:37.199
+is a slip box, which is what we... the fancy
+
+00:07:37.199 --> 00:07:39.520
+word that we use to designate your
+folder
+
+00:07:39.520 --> 00:07:41.039
+where all your notes are going to be
+
+00:07:41.039 --> 00:07:43.280
+living. So you have here (and I hope you
+
+00:07:43.280 --> 00:07:44.000
+can see my
+
+00:07:44.000 --> 00:07:47.039
+cursor; yes you can)... So we have
+a file
+
+00:07:47.039 --> 00:07:48.199
+which is called
+
+00:07:48.199 --> 00:07:51.120
+index.org and the good thing is,
+
+00:07:51.120 --> 00:07:52.960
+as you might have garnered by the fact
+
+00:07:52.960 --> 00:07:54.240
+that it finishes by
+
+00:07:54.240 --> 00:07:57.599
+.org is that it is just an Org Mode
+file.
+
+00:07:57.599 --> 00:08:00.800
+I can create a heading.
+
+00:08:00.800 --> 00:08:03.520
+I can create another heading.
+
+00:08:03.520 --> 00:08:05.599
+everything works as you would expect it
+to.
+
+00:08:05.599 --> 00:08:08.879
+It is completely... It's just an Org Mode
+
+00:08:08.879 --> 00:08:10.400
+file at the end of the day.
+
+00:08:10.400 --> 00:08:13.759
+Now, what can we do with this?
+
+00:08:13.759 --> 00:08:16.800
+I've told you about links.
+You do know that
+
+00:08:16.800 --> 00:08:19.520
+Org Mode has links. What we're going
+
+00:08:19.520 --> 00:08:20.080
+to do
+
+00:08:20.080 --> 00:08:22.479
+is that we're going to create a new file.
+
+00:08:22.479 --> 00:08:23.440
+We're going to go back
+
+00:08:23.440 --> 00:08:26.240
+to our directory. What I'm going to
+
+00:08:26.240 --> 00:08:28.000
+do is that we have a special command...
+
+00:08:28.000 --> 00:08:28.879
+Actually, let me just
+
+00:08:28.879 --> 00:08:31.199
+show you my command. It might help you a
+
+00:08:31.199 --> 00:08:32.240
+little bit
+
+00:08:32.240 --> 00:08:35.360
+see what I'm doing. Wait, which is the
+
+00:08:35.360 --> 00:08:36.479
+buffer...
+
+00:08:36.479 --> 00:08:39.680
+Uh... log mode? Yes. exlog. So now on the
+
+00:08:39.680 --> 00:08:41.039
+right side of the monitor, you'll be able
+
+00:08:41.039 --> 00:08:43.120
+to see the command that I'm using.
+
+00:08:43.120 --> 00:08:45.040
+If you don't mind, in order to have as
+
+00:08:45.040 --> 00:08:46.640
+much realistic as possible, I'm going to
+
+00:08:46.640 --> 00:08:48.480
+make it a little bit shorter.
+
+00:08:48.480 --> 00:08:50.720
+Smaller, I should say. Is it not too small?
+
+00:08:50.720 --> 00:08:52.320
+Yeah, I believe it's good.
+
+00:08:52.320 --> 00:08:54.720
+So what I'm going to do is I'm going to
+
+00:08:54.720 --> 00:08:57.167
+run a command in org-roam which allows me
+
+00:08:57.167 --> 00:08:59.200
+to create a new note.
+
+00:08:59.200 --> 00:09:02.320
+I'm going to use my keybinding, which
+
+00:09:02.320 --> 00:09:04.720
+is not this one, definitely,
+
+00:09:04.720 --> 00:09:06.800
+and I'm going to create a new file which
+
+00:09:06.800 --> 00:09:09.839
+is, in a great tradition of examples in
+
+00:09:09.839 --> 00:09:12.400
+programming, I'm going to call "foo."
+
+00:09:12.400 --> 00:09:15.519
+Right. So at the bottom--
+
+00:09:15.519 --> 00:09:17.600
+in the bottom buffer, I should say, you
+
+00:09:17.600 --> 00:09:21.760
+are seeing the file "foo," which is, as
+you can see here,
+
+00:09:21.760 --> 00:09:22.720
+a capture buffer
+
+00:09:22.720 --> 00:09:24.640
+just like you would have in Org Mode.
+
+00:09:24.640 --> 00:09:25.839
+Now what I'm going to do
+
+00:09:25.839 --> 00:09:28.560
+is that I'm going to validate this file
+
+00:09:28.560 --> 00:09:32.560
+and now you see that we are in the
+file "foo."
+
+00:09:32.560 --> 00:09:36.240
+The good thing is that I can start
+
+00:09:36.240 --> 00:09:39.440
+writing without having to worry
+
+00:09:39.440 --> 00:09:42.160
+about anything else.
+
+00:09:42.160 --> 00:09:43.760
+I was going to say that I'm
+
+00:09:43.760 --> 00:09:46.160
+showing off about my typing skills, but I
+
+00:09:46.160 --> 00:09:47.680
+did make mistakes, so
+
+00:09:47.680 --> 00:09:50.959
+well, nobody's perfect, right? So now we do
+
+00:09:50.959 --> 00:09:53.760
+have this "foo" file. We're going to
+
+00:09:53.760 --> 00:09:55.519
+go back to the index. Let's go back to
+
+00:09:55.519 --> 00:09:56.800
+the directory.
+
+00:09:56.800 --> 00:09:58.560
+We're going to refresh the file. As you
+
+00:09:58.560 --> 00:10:00.560
+can see, we have a file which is called
+"foo,"
+
+00:10:00.560 --> 00:10:03.360
+and we have the index. So now what I'm
+
+00:10:03.360 --> 00:10:04.399
+going to do
+
+00:10:04.399 --> 00:10:06.480
+is that I'm going to insert a link to
+
+00:10:06.480 --> 00:10:07.760
+this file.
+
+00:10:07.760 --> 00:10:09.920
+So we're going to run another org-roam
+
+00:10:09.920 --> 00:10:11.360
+command which you can see here,
+
+00:10:11.360 --> 00:10:14.160
+org-roam-insert, and I'm going to insert a
+
+00:10:14.160 --> 00:10:15.279
+link to the file
+
+00:10:15.279 --> 00:10:17.279
+"foo." As you can see, it has now
+
+00:10:17.279 --> 00:10:18.959
+appeared. Now what I'm going to do,
+
+00:10:18.959 --> 00:10:21.920
+I'm going to save the file, and now I'm
+
+00:10:21.920 --> 00:10:23.040
+going to show you
+
+00:10:23.040 --> 00:10:24.480
+the little thing I told you about--
+
+00:10:24.480 --> 00:10:26.720
+backlinks--before. I'm afraid I'm going
+
+00:10:26.720 --> 00:10:27.680
+to have to hide
+
+00:10:27.680 --> 00:10:29.680
+the commands for now, but don't worry
+
+00:10:29.680 --> 00:10:30.880
+they'll be back.
+
+00:10:30.880 --> 00:10:34.320
+I'm going to show you the side
+buffer.
+
+00:10:34.320 --> 00:10:35.839
+It is the buffer that you see on the
+
+00:10:35.839 --> 00:10:38.079
+right side of your screen.
+
+00:10:38.079 --> 00:10:40.000
+Right now, it's telling you that
+
+00:10:40.000 --> 00:10:42.560
+index does not have any backlinks,
+
+00:10:42.560 --> 00:10:46.320
+which is normal. But if we follow
+the link
+
+00:10:46.320 --> 00:10:49.200
+"foo," now you see something different on
+
+00:10:49.200 --> 00:10:50.560
+the right side. As you can see on the
+
+00:10:50.560 --> 00:10:52.160
+left side, we're back inside the
+
+00:10:52.160 --> 00:10:53.360
+file "foo,"
+
+00:10:53.360 --> 00:10:55.600
+but on the right side, we have something
+
+00:10:55.600 --> 00:10:56.560
+showing up:
+
+00:10:56.560 --> 00:11:00.160
+one backlink in the file "index."
+
+00:11:00.160 --> 00:11:03.519
+And under the heading, you have
+
+00:11:03.519 --> 00:11:04.399
+the file--
+
+00:11:04.399 --> 00:11:08.720
+sorry, the link "foo." You can just
+open the link,
+
+00:11:08.720 --> 00:11:10.720
+and you will be brought exactly where it is.
+
+00:11:12.640 --> 00:11:16.240
+So that was one thing. Now just
+
+00:11:16.240 --> 00:11:17.600
+to make sure that you've understood
+
+00:11:17.600 --> 00:11:20.320
+properly, I'm going to go back to the
+index.
+
+00:11:20.320 --> 00:11:23.920
+I'm going to create a second file.
+
+00:11:23.920 --> 00:11:25.440
+Now I'm going to use a command that
+
+00:11:25.440 --> 00:11:27.680
+is slightly different. Let me just
+
+00:11:27.680 --> 00:11:30.800
+show you the commands on the right.
+
+00:11:30.800 --> 00:11:32.480
+I'm going to run the command org-roam-insert
+
+00:11:32.480 --> 00:11:33.839
+and I'm going to
+
+00:11:33.839 --> 00:11:37.519
+enter a file which is called "bar."
+
+00:11:37.519 --> 00:11:39.600
+Again, at the bottom, you can see that
+
+00:11:39.600 --> 00:11:41.440
+I have a new file "bar."
+
+00:11:41.440 --> 00:11:45.920
+I'm going to validate this file.
+
+00:11:45.920 --> 00:11:49.760
+I'm going to save index.org.
+
+00:11:49.760 --> 00:11:52.959
+Now, if we go in bar, and if I show
+
+00:11:52.959 --> 00:11:55.920
+you the links on the side, you can
+see that
+
+00:11:55.920 --> 00:11:58.240
+exactly the same, we have a link.
+
+00:11:58.240 --> 00:12:00.480
+Now just to make the pictures complete,
+
+00:12:00.480 --> 00:12:02.639
+inside the file "bar," I'm going to insert
+
+00:12:02.639 --> 00:12:05.200
+a link to "foo." I'm going to save. I'm
+
+00:12:05.200 --> 00:12:06.959
+going to go to the file "foo." Now on
+
+00:12:06.959 --> 00:12:07.920
+the right side,
+
+00:12:07.920 --> 00:12:11.120
+you can see that we have two backlinks.
+
+00:12:11.120 --> 00:12:14.720
+Now you're gonna tell me, yeah, thank
+you, Leo, but
+
+00:12:14.720 --> 00:12:17.760
+what's the point? Well the thing is
+
+00:12:17.760 --> 00:12:20.320
+it might sound... it might seem very simple,
+
+00:12:20.320 --> 00:12:22.160
+what I've just shown you,
+
+00:12:22.160 --> 00:12:24.160
+but programmatically, it's a little hard
+
+00:12:24.160 --> 00:12:26.160
+to do. We have to
+
+00:12:26.160 --> 00:12:28.000
+look into your files to make sure that
+
+00:12:28.000 --> 00:12:30.079
+every time you link your file
+
+00:12:30.079 --> 00:12:32.240
+somewhere else, we need to track
+
+00:12:32.240 --> 00:12:34.079
+everything down.
+
+00:12:34.079 --> 00:12:37.920
+Now as simple as org-roam might be
+
+00:12:37.920 --> 00:12:39.519
+looking to you,
+
+00:12:39.519 --> 00:12:43.279
+thee thing is what we try to do
+with org-roam
+
+00:12:43.279 --> 00:12:46.399
+is to make sure that your collection
+of notes
+
+00:12:46.399 --> 00:12:50.320
+remains consistent whatever we do.
+
+00:12:50.320 --> 00:12:54.079
+An example, for instance, right now
+
+00:12:54.079 --> 00:12:56.880
+I've told you about a file named "foo" and
+
+00:12:56.880 --> 00:13:01.120
+the file named "bar." Let's say that for
+whatever reason,
+
+00:13:01.120 --> 00:13:03.920
+you decide to rename your file "foo" to
+
+00:13:03.920 --> 00:13:08.079
+something very original. Let's just
+say "bar."
+
+00:13:08.079 --> 00:13:11.040
+So we actually have a way in Emacs--in
+
+00:13:11.040 --> 00:13:12.320
+org-roam, I should say--
+
+00:13:12.320 --> 00:13:14.560
+when you modify the title at the top of
+
+00:13:14.560 --> 00:13:15.680
+the file...
+
+00:13:15.680 --> 00:13:18.880
+So we get "foo..." I've modified it
+with "baz."
+
+00:13:18.880 --> 00:13:20.320
+You can see at the bottom that right now
+
+00:13:20.320 --> 00:13:22.000
+we haven't saved and we are still in the
+
+00:13:22.000 --> 00:13:26.079
+file "foo.org." I'm going to save.
+
+00:13:26.079 --> 00:13:29.360
+Now what you see is
+
+00:13:29.360 --> 00:13:32.560
+a new name for the file. But you may ask,
+
+00:13:32.560 --> 00:13:35.360
+"Wait a second, in the other file, we had a
+
+00:13:35.360 --> 00:13:36.880
+link to this file.
+
+00:13:36.880 --> 00:13:40.560
+Does it mean that it's broken? Does
+it mean
+
+00:13:40.560 --> 00:13:43.440
+that we cannot access the file anymore?"
+
+00:13:43.920 --> 00:13:48.000
+But when we go there, beginning to go
+in the
+index,
+
+00:13:48.000 --> 00:13:50.399
+so obviously the actual description of
+
+00:13:50.399 --> 00:13:52.079
+the link hasn't been updated,
+
+00:13:52.079 --> 00:13:54.320
+but if I show you what goes on under the
+
+00:13:54.320 --> 00:13:55.680
+hood by showing you
+
+00:13:55.680 --> 00:13:57.440
+what is fontified, what is behind the
+
+00:13:57.440 --> 00:14:00.000
+content of the link...
+
+00:14:00.000 --> 00:14:02.320
+Actually, it didn't work! that's why
+
+00:14:02.320 --> 00:14:04.079
+you never present live, folks, because
+
+00:14:04.079 --> 00:14:04.639
+otherwise you're
+
+00:14:04.639 --> 00:14:05.920
+just going to show problems with the
+
+00:14:05.920 --> 00:14:08.880
+software and that's not good.
+
+00:14:08.880 --> 00:14:12.079
+Something must have gone on, obviously.
+
+00:14:12.079 --> 00:14:15.120
+But generally speaking, the file should
+
+00:14:15.120 --> 00:14:17.120
+have been updated.
+
+00:14:17.120 --> 00:14:18.959
+Damn. I'm showing you bugging my software.
+
+00:14:18.959 --> 00:14:21.279
+That's not very professional, now is it?
+
+00:14:21.279 --> 00:14:25.040
+Basically, to come back to the main idea,
+
+00:14:25.040 --> 00:14:28.079
+what we try to do with org-roam is to make
+
+00:14:28.079 --> 00:14:28.880
+sure that
+
+00:14:28.880 --> 00:14:30.833
+everything remains consistent.
+
+00:14:30.833 --> 00:14:35.279
+We really much love the system of
+
+00:14:35.279 --> 00:14:38.720
+organization that is behind the
+Zettelkasten method.
+
+00:14:38.720 --> 00:14:40.240
+Now I was going, at this point of the
+
+00:14:40.240 --> 00:14:41.600
+presentation, basically, I wanted to go
+
+00:14:41.600 --> 00:14:42.639
+back to Firefox
+
+00:14:42.639 --> 00:14:45.199
+and show you more stuff, but it's likely
+
+00:14:45.199 --> 00:14:46.880
+that it's going to crash again.
+
+00:14:46.880 --> 00:14:48.959
+I'm not going to tempt the devil.
+
+00:14:48.959 --> 00:14:50.240
+I'm just going to continue talking to
+
+00:14:50.240 --> 00:14:51.680
+you like that.
+
+00:14:51.680 --> 00:14:54.800
+So the Zettelkasten method
+
+00:14:54.800 --> 00:14:58.160
+is a very organic way
+
+00:14:58.160 --> 00:15:01.839
+to write notes. If you think...
+
+00:15:01.839 --> 00:15:04.959
+I believe as Org Mode users,
+
+00:15:04.959 --> 00:15:06.639
+we share quite a lot of features. I'm
+
+00:15:06.639 --> 00:15:08.000
+out of time. I'm just going to take one
+
+00:15:08.000 --> 00:15:09.600
+more minute to answer this question
+
+00:15:09.600 --> 00:15:12.320
+that I'm asking myself anyway. But if
+
+00:15:12.320 --> 00:15:14.560
+you're anything like me,
+
+00:15:14.560 --> 00:15:16.079
+you've been through many
+
+00:15:16.079 --> 00:15:18.240
+iterations of your workflow inside
+
+00:15:18.240 --> 00:15:18.959
+Org Mode.
+
+00:15:18.959 --> 00:15:20.959
+Do I keep all my professional stuff
+
+00:15:20.959 --> 00:15:22.959
+under one heading, or do I create a
+
+00:15:22.959 --> 00:15:24.399
+separate file for this?
+
+00:15:24.399 --> 00:15:25.920
+You know, those types of questions on
+
+00:15:25.920 --> 00:15:28.000
+which you could ponder for
+
+00:15:28.000 --> 00:15:30.639
+many, many hours at night, generally when
+
+00:15:30.639 --> 00:15:31.360
+you have a
+
+00:15:31.360 --> 00:15:34.560
+tight deadline to be following. But
+
+00:15:34.560 --> 00:15:36.959
+what I've discovered by using org-roam for
+
+00:15:36.959 --> 00:15:38.240
+taking notes about
+
+00:15:38.240 --> 00:15:41.360
+my academic projects or by
+taking notes on
+
+00:15:41.360 --> 00:15:44.880
+anything worth writing about
+
+00:15:44.880 --> 00:15:47.440
+is that not having to worry about the
+
+00:15:47.440 --> 00:15:49.199
+structure of you files,
+
+00:15:49.199 --> 00:15:52.399
+just having to worry about atoms
+
+00:15:52.399 --> 00:15:56.079
+and links, it does wonders
+
+00:15:56.079 --> 00:15:58.480
+for the way you think about problems. It
+
+00:15:58.480 --> 00:16:00.639
+does wonders about your creativity.
+
+00:16:00.639 --> 00:16:04.800
+And it does wonders about your ability to
+
+00:16:04.800 --> 00:16:07.519
+take your thoughts, put them on a paper,
+
+00:16:07.519 --> 00:16:08.800
+and generally, during this
+
+00:16:08.800 --> 00:16:10.399
+process you realize, "Oh, maybe I do not
+
+00:16:10.399 --> 00:16:13.120
+know this concept as well as I should."
+
+00:16:13.120 --> 00:16:16.079
+But I've never had a system which
+
+00:16:16.079 --> 00:16:16.800
+brought me
+
+00:16:16.800 --> 00:16:19.839
+as much serendipity as this system.
+
+00:16:19.839 --> 00:16:21.440
+And for those who don't know, serendipity
+
+00:16:21.440 --> 00:16:24.880
+the ability to come up with novel ideas
+
+00:16:24.880 --> 00:16:28.800
+on the spot, contextually.
+
+00:16:28.800 --> 00:16:32.240
+So this was just a little primer on what
+
+00:16:32.240 --> 00:16:34.959
+org-roam and the Zettelkasten is about.
+
+00:16:34.959 --> 00:16:38.000
+In about 20 minutes, I'll be giving you
+a talk
+
+00:16:38.000 --> 00:16:39.680
+about the technical aspects of org-roam,
+
+00:16:39.680 --> 00:16:40.800
+which I'm certain
+
+00:16:40.800 --> 00:16:43.040
+some of you will be very interested in.
+
+00:16:44.160 --> 00:16:46.160
+Otherwise, I do have a YouTube channel
+
+00:16:46.160 --> 00:16:50.720
+where I try to record videos where I
+explain to you
+
+00:16:52.079 --> 00:16:55.600
+what org-roam is about, what the
+method is
+about.
+
+00:16:55.600 --> 00:16:57.040
+I'll just finish on this. I'm two
+
+00:16:57.040 --> 00:16:58.720
+minutes extra time, sorry.
+
+00:16:58.720 --> 00:17:02.399
+We do know that a lot of people
+
+00:17:02.399 --> 00:17:04.079
+are interested into org-roam.
+I mentioned
+
+00:17:04.079 --> 00:17:06.160
+at the very beginning of the
+presentation
+
+00:17:06.160 --> 00:17:09.360
+that a lot of people discovered Emacs
+
+00:17:09.360 --> 00:17:10.640
+and org-roam
+
+00:17:10.640 --> 00:17:14.640
+and Org Mode even through org-roam.
+
+00:17:14.640 --> 00:17:18.400
+We feel that we have a duty to
+
+00:17:18.400 --> 00:17:20.959
+introduce those people, this new pool of
+
+00:17:20.959 --> 00:17:22.720
+people, most of whom are
+
+00:17:22.720 --> 00:17:25.439
+academic,s into the world of Emacs and
+
+00:17:25.439 --> 00:17:27.600
+into the world of free software.
+
+00:17:27.600 --> 00:17:30.240
+Right now the thing is we're not
+
+00:17:30.240 --> 00:17:32.240
+doing a particularly good job at writing
+
+00:17:32.240 --> 00:17:34.080
+manuals. I'm just going to try
+
+00:17:34.080 --> 00:17:36.160
+to stop sharing my screen, because I'm
+
+00:17:36.160 --> 00:17:37.360
+nearly to the end,
+
+00:17:37.360 --> 00:17:40.240
+and just try sharing my Firefox windows
+
+00:17:40.240 --> 00:17:41.919
+if it allows me. No, it doesn't allow me,
+
+00:17:41.919 --> 00:17:44.160
+which is very good. That's why I won't
+have to
+
+00:17:44.160 --> 00:17:47.200
+to screw things up.
+
+00:17:47.200 --> 00:17:50.080
+We know that our manual is not fully
+
+00:17:50.080 --> 00:17:50.880
+up to date,
+
+00:17:50.880 --> 00:17:53.760
+but believe me, one of the key focus
+
+00:17:53.760 --> 00:17:54.480
+right now
+
+00:17:54.480 --> 00:17:57.840
+is making sure that within two to three
+months,
+
+00:17:57.840 --> 00:17:59.679
+we have a good tutorial for people to
+
+00:17:59.679 --> 00:18:02.559
+join, and we have good videos for people
+
+00:18:02.559 --> 00:18:04.640
+to get introduced to the topics we're
+covering.
+
+00:18:04.640 --> 00:18:06.320
+And that's me done. So, thank you so much
+
+00:18:06.320 --> 00:18:07.679
+for listening and now I'll be taking
+
+00:18:07.679 --> 00:18:09.840
+some questions.
+
+00:18:09.840 --> 00:18:12.880
+(Amin: Thank you very much, Leo.
+
+00:18:12.880 --> 00:18:17.679
+Cheers! We have, I think, about two minutes
+
+00:18:17.679 --> 00:18:19.440
+four questions, I see a lot of them
+
+00:18:19.440 --> 00:18:20.880
+on the pad.
+
+00:18:20.880 --> 00:18:23.120
+Would you take them?) Leo: Sure. So... Yep I'm
+
+00:18:23.120 --> 00:18:24.320
+scrolling, I'm scrolling...
+
+00:18:24.320 --> 00:18:27.600
+Getting Things Done, that's Aldric.
+
+00:18:27.600 --> 00:18:30.000
+Still scrolling. Okay. org-roam. Oh, wow. Okay.
+
+00:18:30.000 --> 00:18:31.679
+So we do have quite a lot of questions.
+
+00:18:31.679 --> 00:18:33.600
+Please excuse me if I'm answering
+
+00:18:33.600 --> 00:18:34.799
+your questions really fast, but I just
+
+00:18:34.799 --> 00:18:35.760
+want to make sure that I cover
+
+00:18:35.760 --> 00:18:38.080
+as much ground as possible. "What is
+
+00:18:38.080 --> 00:18:41.039
+the functionality of org-roam-unlinked-references?"
+
+00:18:41.039 --> 00:18:43.200
+So basically when you have a file that
+
+00:18:43.200 --> 00:18:45.200
+is not linked anywhere,
+
+00:18:45.200 --> 00:18:48.000
+this function allows you to see...
+
+00:18:48.000 --> 00:18:49.520
+Let's say we have a file "Emacs"
+
+00:18:49.520 --> 00:18:51.200
+and we've talked about "Emacs" in another
+
+00:18:51.200 --> 00:18:53.200
+note, but we haven't created a link.
+
+00:18:53.200 --> 00:18:57.440
+What this command do is that it
+
+00:18:57.440 --> 00:18:59.520
+looks into your folder for every mention
+
+00:18:59.520 --> 00:19:00.720
+of "Emacs" that is not
+
+00:19:00.720 --> 00:19:03.840
+linked to the note "Emacs," and it prints
+
+00:19:03.840 --> 00:19:05.039
+all the results in the buffer so that
+
+00:19:05.039 --> 00:19:06.480
+you know, "okay, I've talked about Emacs
+
+00:19:06.480 --> 00:19:07.840
+here, but I didn't create a link.
+
+00:19:07.840 --> 00:19:10.480
+Do I want to create a link?" That's it.
+
+00:19:10.480 --> 00:19:11.840
+"Is it possible to use the backlinks
+
+00:19:11.840 --> 00:19:16.400
+features in regular Org buffers?" Right
+now, no. It is not possible. We are
+
+00:19:16.400 --> 00:19:18.080
+having a very controlled environment
+
+00:19:18.080 --> 00:19:20.240
+which is... I told you about this slip box
+
+00:19:20.240 --> 00:19:21.280
+folder before.
+
+00:19:21.280 --> 00:19:22.799
+This is where we keep all the notes.
+
+00:19:22.799 --> 00:19:24.400
+The reason why we do this will be more
+
+00:19:24.400 --> 00:19:27.360
+evident when I go through the technical
+presentation,
+
+00:19:27.360 --> 00:19:30.720
+but it's because of optimization.
+
+00:19:30.720 --> 00:19:32.080
+I'll get back to you on that
+
+00:19:32.080 --> 00:19:33.760
+afterwards.
+
+00:19:33.760 --> 00:19:35.440
+"Do you make org-roam database
+
+00:19:35.440 --> 00:19:37.039
+accessible across computers?"
+
+00:19:37.039 --> 00:19:39.760
+No, I do not, because I'm only using my
+
+00:19:39.760 --> 00:19:41.760
+laptop, but plenty of people have had
+
+00:19:41.760 --> 00:19:44.559
+a lot of success doing so either by
+
+00:19:44.559 --> 00:19:47.039
+sharing the files via syncthing or by
+
+00:19:47.039 --> 00:19:49.760
+any other method. We have a section in
+a manual
+
+00:19:49.760 --> 00:19:51.100
+specifying how to do this.
+
+00:19:51.100 --> 00:19:54.880
+"How do you discover tags' links to add
+to your new org-roam note?"
+
+00:19:54.880 --> 00:19:56.160
+There is something that I didn't tell
+
+00:19:56.160 --> 00:19:57.679
+you about which is called org-roam server,
+
+00:19:57.679 --> 00:20:01.679
+which is a magnificent way to access
+
+00:20:01.679 --> 00:20:04.320
+visually the notes that you have in your
+
+00:20:04.320 --> 00:20:05.360
+in your system.
+
+00:20:05.360 --> 00:20:08.799
+You'll have to go to the orgroam.com
+website.
+
+00:20:08.799 --> 00:20:10.640
+Please go on our Github page. We
+
+00:20:10.640 --> 00:20:12.080
+show everything.
+
+00:20:12.080 --> 00:20:14.640
+I hope what I've told you has excited
+
+00:20:14.640 --> 00:20:16.000
+you, so please go.
+
+00:20:16.000 --> 00:20:18.000
+Maybe one more question, two more
+
+00:20:18.000 --> 00:20:19.133
+questions, just to make sure?
+
+00:20:19.133 --> 00:20:21.679
+"Is it possible to seamlessly link
+to other
+
+00:20:21.679 --> 00:20:23.039
+notes with syntax instead of a
+
+00:20:23.039 --> 00:20:23.919
+keybinding?"
+
+00:20:23.919 --> 00:20:25.840
+Yes, we are working on this. This is a
+
+00:20:25.840 --> 00:20:27.120
+huge project that we're doing with
+
+00:20:27.120 --> 00:20:28.880
+org-roam which is called
+
+00:20:28.880 --> 00:20:30.960
+link-ux. We're trying to do something
+
+00:20:30.960 --> 00:20:32.880
+which is very close to Roam Research,
+
+00:20:32.880 --> 00:20:34.559
+which is the software we're using for
+
+00:20:34.559 --> 00:20:36.880
+inspiration for org-roam.
+
+00:20:36.880 --> 00:20:39.200
+Yes, there are going to be
+
+00:20:39.200 --> 00:20:41.280
+ways to do this in the future. I'm going
+
+00:20:41.280 --> 00:20:42.640
+to give you a window of
+
+00:20:42.640 --> 00:20:46.320
+maybe three to four months.
+One last question.
+
+00:20:46.320 --> 00:20:48.480
+Uh, good on you, thank you, well, thank you
+
+00:20:48.480 --> 00:20:49.440
+for this.
+
+00:20:49.440 --> 00:20:51.039
+"Is there an easy way to export several
+
+00:20:51.039 --> 00:20:53.200
+selected nodes to, say, a LaTeX file?"
+
+00:20:53.200 --> 00:20:56.960
+LaTeX. Yes. I mean, it's Org Mode.
+
+00:20:56.960 --> 00:20:59.840
+At the very core, it is Org Mode, so you
+
+00:20:59.840 --> 00:21:00.480
+know you don't...
+
+00:21:00.480 --> 00:21:02.559
+If you want to export to a LaTeX file, you
+
+00:21:02.559 --> 00:21:04.000
+can... you just use the
+
+00:21:04.000 --> 00:21:06.320
+ox-latex library, which you can access
+
+00:21:06.320 --> 00:21:08.320
+by pressing C-c C-e
+
+00:21:08.320 --> 00:21:11.760
+for export. All right. Is it...
+
+00:21:11.760 --> 00:21:12.480
+I believe I'm...
+
+00:21:12.480 --> 00:21:13.919
+It's all the time I had. Amin, can you
+
+00:21:13.919 --> 00:21:16.880
+confirm this?
+
+00:21:16.880 --> 00:21:19.039
+Okay. So if you have more questions,
+
+00:21:19.039 --> 00:21:20.240
+don't worry, I'll be in chat.
+
+00:21:20.240 --> 00:21:23.679
+I'll be answering them. I'm also on on
+
+00:21:23.679 --> 00:21:26.799
+all the platforms we advertise on
+
+00:21:26.799 --> 00:21:28.159
+org-roam. If you want to reach me, I'm
+
+00:21:28.159 --> 00:21:29.280
+really easy to reach.
+
+00:21:29.280 --> 00:21:31.919
+Our Github page is always open. So thank
+
+00:21:31.919 --> 00:21:32.559
+you all for
+
+00:21:32.559 --> 00:21:35.520
+all your questions and all your energy
+
+00:21:35.520 --> 00:21:37.440
+about org-roam. It is very exciting for me
+
+00:21:37.440 --> 00:21:38.640
+to see all this.
+
+00:21:38.640 --> 00:21:42.000
+but right now, I'll be handing off the
+
+00:21:42.000 --> 00:21:44.080
+microphone, I should say, to Noorah, who is
+
+00:21:44.080 --> 00:21:45.840
+going to talk to you about the
+
+00:21:45.840 --> 00:21:48.480
+academic way to use org-roam. I'll be
+
+00:21:48.480 --> 00:21:50.080
+back afterwards with the technical talk.
+
+00:21:50.080 --> 00:21:53.760
+Thank you. (Amin: Thank you very much, Leo)
+
+00:21:53.760 --> 00:21:57.760
+Leo: See you later, guys.
diff --git a/2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt b/2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt
new file mode 100644
index 00000000..fbf4ae9b
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--17-org-mode-and-org-roam-for-scholars-and-researchers--noorah-alhasan.vtt
@@ -0,0 +1,1631 @@
+WEBVTT
+
+00:00:00.320 --> 00:00:02.639
+Good afternoon or good evening, everyone.
+
+00:00:03.040 --> 00:00:05.440
+Today, my talk is going to be on Org Mode
+
+00:00:05.440 --> 00:00:07.759
+and org-roam for scholars and researchers.
+
+00:00:07.759 --> 00:00:10.559
+Leo has talked about the overall
+
+00:00:10.559 --> 00:00:12.639
+picture of org-roam and
+
+00:00:12.639 --> 00:00:15.120
+org-roam-bibtex. I will be
+
+00:00:15.120 --> 00:00:16.240
+talking more about
+
+00:00:16.240 --> 00:00:20.320
+the research process itself using these
+tools.
+
+00:00:20.320 --> 00:00:22.400
+All right. So, just to introduce that the
+
+00:00:22.400 --> 00:00:25.039
+research process is really messy.
+
+00:00:25.039 --> 00:00:28.080
+You're always working in
+
+00:00:28.080 --> 00:00:31.039
+piecemeal tasks and things move around
+
+00:00:31.039 --> 00:00:32.960
+all the time.
+
+00:00:32.960 --> 00:00:35.280
+There needs to be a system where you can
+
+00:00:35.280 --> 00:00:36.880
+organize all these tasks,
+
+00:00:36.880 --> 00:00:39.360
+all these ideas in a way that is
+
+00:00:39.360 --> 00:00:41.760
+flexible and effective.
+
+00:00:41.760 --> 00:00:44.767
+So my motivation is that research is
+hard
+
+00:00:44.767 --> 00:00:47.120
+and writing about it is even
+more difficult.
+
+00:00:47.120 --> 00:00:49.600
+My goal is to add some structure to
+
+00:00:49.600 --> 00:00:51.120
+this whole madness.
+
+00:00:51.120 --> 00:00:52.800
+Here's a list of some of the stuff
+
+00:00:52.800 --> 00:00:54.480
+that I've been using since I first
+
+00:00:54.480 --> 00:00:57.199
+learned about Emacs in 2019
+
+00:00:57.199 --> 00:01:00.160
+and what I've found useful
+
+00:01:02.000 --> 00:01:05.199
+within my research process.
+
+00:01:05.199 --> 00:01:07.920
+I've organized Org Mode for Researchers
+
+00:01:07.920 --> 00:01:10.400
+and Scholars Within the Writing Process
+
+00:01:10.400 --> 00:01:12.400
+into three modules. First, there's
+
+00:01:12.400 --> 00:01:14.320
+the planning aspect of it,
+
+00:01:14.320 --> 00:01:15.759
+then you've got the writing and the
+
+00:01:15.759 --> 00:01:18.320
+reference management, which I will join
+together
+
+00:01:18.320 --> 00:01:20.560
+by looking at the example of doing your
+
+00:01:20.560 --> 00:01:21.920
+literature review.
+
+00:01:21.920 --> 00:01:25.467
+When we're talking about planning,
+
+00:01:25.467 --> 00:01:27.360
+we're talking about either task
+management or
+
+00:01:27.360 --> 00:01:30.880
+time management with task management.
+
+00:01:30.880 --> 00:01:31.600
+You've got
+
+00:01:31.600 --> 00:01:33.840
+Org Mode's TODOs, tags, and
+
+00:01:33.840 --> 00:01:36.159
+categories. These are really powerful
+
+00:01:36.159 --> 00:01:38.479
+tools that you could use
+
+00:01:38.479 --> 00:01:41.600
+in your Org files to
+
+00:01:41.600 --> 00:01:44.799
+organize your tasks and
+
+00:01:44.799 --> 00:01:47.040
+your appointments. There are different
+
+00:01:47.040 --> 00:01:49.040
+types of TODOs that you can either set
+
+00:01:49.040 --> 00:01:50.960
+globally in your init file or they can
+
+00:01:50.960 --> 00:01:52.799
+be file-/buffer-specific.
+
+00:01:52.799 --> 00:01:54.867
+That means, based on context,
+
+00:01:54.867 --> 00:01:57.759
+based on the type of manuscript you're
+working on, whether
+
+00:01:57.759 --> 00:02:00.033
+it's a literate programming report
+
+00:02:00.033 --> 00:02:03.759
+or your actual thesis/dissertation.
+
+00:02:03.759 --> 00:02:05.840
+Also, these TODOs are either created
+
+00:02:05.840 --> 00:02:07.759
+as a subtree, like think of them as
+
+00:02:07.759 --> 00:02:11.440
+headings and sections if you use LaTeX,
+
+00:02:11.440 --> 00:02:15.233
+or inline tasks, which are like Org
+inline tasks.
+
+00:02:19.120 --> 00:02:17.760
+I like Org inline tasks
+because I can add
+
+00:02:19.120 --> 00:02:21.520
+TODOs between two paragraphs. That
+
+00:02:21.520 --> 00:02:22.879
+way, it doesn't show up
+
+00:02:22.879 --> 00:02:25.360
+in the table of contents when I export
+
+00:02:25.360 --> 00:02:27.280
+into PDF, HTML, or
+
+00:02:27.280 --> 00:02:30.879
+anything else. So this is an
+
+00:02:30.879 --> 00:02:34.319
+example of buffer-specific TODOs,
+
+00:02:34.319 --> 00:02:37.360
+and this is an example of a little
+
+00:02:37.360 --> 00:02:39.120
+programming report that I was working on
+
+00:02:39.120 --> 00:02:40.800
+where I was dealing with
+
+00:02:40.800 --> 00:02:44.080
+data and analysis and all of that
+stuff.
+
+00:02:44.080 --> 00:02:47.519
+I needed context-specific TODOs to
+
+00:02:47.519 --> 00:02:49.440
+use them within this buffer.
+
+00:02:49.440 --> 00:02:52.080
+That's how I would organize it.
+
+00:02:52.080 --> 00:02:54.319
+There's also another example
+
+00:02:54.319 --> 00:02:57.200
+of an Org inline task where you could
+
+00:02:57.200 --> 00:03:01.360
+see it in the middle between the
+two headings.
+
+00:03:01.360 --> 00:03:03.040
+That way, it wouldn't show up in the
+
+00:03:03.040 --> 00:03:04.959
+table of contents, and it would look
+
+00:03:04.959 --> 00:03:06.480
+neater within the
+
+00:03:06.480 --> 00:03:09.519
+text when you export it.
+
+00:03:09.519 --> 00:03:11.920
+I also added a tag of :noexport:
+
+00:03:11.920 --> 00:03:13.280
+so it won't show up at all
+
+00:03:13.280 --> 00:03:16.400
+when I export it into either PDF,
+
+00:03:16.400 --> 00:03:19.360
+which I use all the time.
+
+00:03:19.360 --> 00:03:21.599
+Another useful tool
+
+00:03:21.599 --> 00:03:24.159
+for the research and just
+
+00:03:24.159 --> 00:03:25.200
+general planning
+
+00:03:25.200 --> 00:03:27.920
+is the org-capture. When I first
+
+00:03:27.920 --> 00:03:29.120
+started with Emacs,
+
+00:03:29.120 --> 00:03:32.080
+actually, it was for org-agenda.
+
+00:03:32.080 --> 00:03:34.239
+I went crazy with my capture template.
+
+00:03:34.239 --> 00:03:35.360
+I created a template for
+
+00:03:35.360 --> 00:03:38.640
+everything because I was just so
+excited.
+
+00:03:38.640 --> 00:03:40.720
+But with time, I was using less and less
+
+00:03:40.720 --> 00:03:42.400
+of them, so I kept taking them out.
+
+00:03:42.400 --> 00:03:46.319
+Now this is my simplified
+
+00:03:46.319 --> 00:03:48.239
+capture templates that I use, either for
+
+00:03:48.239 --> 00:03:49.599
+a general TODO,
+
+00:03:49.599 --> 00:03:52.159
+for a regular appointment, a fleeting
+
+00:03:52.159 --> 00:03:54.159
+note, research tasks (because those
+
+00:03:54.159 --> 00:03:55.200
+are what I focus on,
+
+00:03:55.200 --> 00:03:56.959
+like my bread and butter), and then
+
+00:03:56.959 --> 00:03:58.720
+finally with meetings, which I find
+
+00:03:58.720 --> 00:04:00.879
+sometimes I don't use it as much because
+
+00:04:00.879 --> 00:04:03.519
+I would just have the Org file ready
+instead of
+
+00:04:03.519 --> 00:04:04.879
+needing to capture,
+
+00:04:04.879 --> 00:04:07.920
+you know, open a capture template.
+
+00:04:07.920 --> 00:04:12.400
+Right. Org Agenda. That's how I got into
+Emacs.
+
+00:04:12.400 --> 00:04:15.439
+I needed to organize my life.
+
+00:04:15.439 --> 00:04:19.199
+I found Emacs and it's been great
+ever since.
+
+00:04:19.199 --> 00:04:20.479
+It populates all your TODOs and
+
+00:04:20.479 --> 00:04:22.720
+appointments into a singular view. So the
+
+00:04:22.720 --> 00:04:25.280
+default view, I think, is a week view.
+
+00:04:25.280 --> 00:04:29.120
+However, I use org-super-agenda. Love this
+
+00:04:29.120 --> 00:04:31.919
+package. I set up my agenda as a
+
+00:04:31.919 --> 00:04:34.160
+daily view with appointments,
+
+00:04:34.160 --> 00:04:37.360
+deadlines, and a habit tracker.
+
+00:04:37.360 --> 00:04:38.720
+A side note, you guys: I'm still
+
+00:04:38.720 --> 00:04:40.639
+struggling with organizing the perfect
+
+00:04:40.639 --> 00:04:42.320
+agenda, so it's a process.
+
+00:04:42.320 --> 00:04:45.360
+Take it easy, all right?
+
+00:04:45.360 --> 00:04:47.919
+So this is just an overview of my daily
+
+00:04:47.919 --> 00:04:50.320
+agenda. As you can see they're just
+
+00:04:50.320 --> 00:04:55.520
+appointments that I import from Gmail
+using org-gcal;
+
+00:04:55.520 --> 00:04:57.919
+a simple habit tracker of daily
+
+00:04:57.919 --> 00:04:58.880
+free writing--
+
+00:04:58.880 --> 00:05:00.960
+as you can see, there are a lot of times
+
+00:05:00.960 --> 00:05:02.800
+where I'm skipping, and the asterisk is
+
+00:05:02.800 --> 00:05:05.199
+the one where I've completed that day,
+
+00:05:05.199 --> 00:05:08.479
+so, you know, it's a process--and then
+
+00:05:08.479 --> 00:05:10.080
+regular deadlines.
+
+00:05:10.080 --> 00:05:12.639
+So what happens is that I have other
+
+00:05:12.639 --> 00:05:17.120
+TODOs that I have not scheduled or not
+added a deadline
+
+00:05:17.120 --> 00:05:19.933
+but they're just tasks that keep piling
+up.
+
+00:05:19.933 --> 00:05:22.320
+When I first started with Emacs
+and org-agenda,
+
+00:05:22.320 --> 00:05:24.880
+I had everything in there, and it got
+
+00:05:24.880 --> 00:05:26.880
+overwhelming. Then I decided, no,
+
+00:05:26.880 --> 00:05:29.680
+I'm not gonna even let them show up.
+
+00:05:29.680 --> 00:05:30.800
+So what I would do
+
+00:05:30.800 --> 00:05:33.120
+at the beginning of each week or the
+
+00:05:33.120 --> 00:05:34.479
+night before,
+
+00:05:34.479 --> 00:05:36.800
+I would sit down, look at all my
+
+00:05:36.800 --> 00:05:40.720
+TODOs that I have not assigned yet to a
+deadline or a
+
+00:05:40.720 --> 00:05:42.639
+schedule or just a simple
+
+00:05:42.639 --> 00:05:45.360
+timestamp, and I would organize them
+
+00:05:45.360 --> 00:05:46.320
+throughout the week.
+
+00:05:46.320 --> 00:05:49.520
+So, here's an example of what I did.
+
+00:05:49.520 --> 00:05:51.680
+On that Wednesday, from my Gmail, I had
+
+00:05:51.680 --> 00:05:53.039
+all these appointments, but
+
+00:05:53.039 --> 00:05:56.560
+one of them is I have a writing group
+session.
+
+00:05:56.560 --> 00:05:58.400
+So I looked at my tasks and I
+
+00:05:58.400 --> 00:05:59.759
+thought, okay, then I will just
+
+00:05:59.759 --> 00:06:03.520
+assign, for example, my Emacs
+slides
+
+00:06:03.520 --> 00:06:06.319
+or the framework diagram into that
+
+00:06:06.319 --> 00:06:07.280
+writing session.
+
+00:06:07.280 --> 00:06:10.800
+All I did was just add an active
+timestamp.
+
+00:06:10.800 --> 00:06:12.960
+That is all I needed to do, and it went
+
+00:06:12.960 --> 00:06:14.000
+straight into my
+
+00:06:14.000 --> 00:06:17.120
+appointment. Now, if I miss that,
+
+00:06:17.120 --> 00:06:20.080
+it won't show up on the next day. So if
+
+00:06:20.080 --> 00:06:21.520
+you put in a deadline,
+
+00:06:21.520 --> 00:06:24.639
+it will show up as an overdue, but if you
+
+00:06:24.639 --> 00:06:26.560
+have no deadline or schedule, it will not
+
+00:06:26.560 --> 00:06:29.280
+show up in your daily org agenda.
+
+00:06:29.280 --> 00:06:32.960
+So, just a star.
+
+00:06:32.960 --> 00:06:35.680
+All right. Another way of accessing your
+
+00:06:35.680 --> 00:06:37.520
+TODOs is that if it's
+
+00:06:37.520 --> 00:06:40.880
+Org file-specific,
+
+00:06:40.880 --> 00:06:42.160
+buffer-specific,
+
+00:06:42.160 --> 00:06:44.160
+and so... Like when we talked about like
+
+00:06:44.160 --> 00:06:46.400
+whether to have a big-ass Org file or
+
+00:06:46.400 --> 00:06:47.680
+like tiny files,
+
+00:06:47.680 --> 00:06:50.720
+it all depends. This isn't the...
+
+00:06:50.720 --> 00:06:54.560
+you know, the way this depends,
+
+00:06:54.560 --> 00:06:55.759
+because if you're working on a
+
+00:06:55.759 --> 00:06:58.400
+dissertation, it's a huge manuscript.
+
+00:06:58.400 --> 00:06:59.680
+You need to work
+
+00:06:59.680 --> 00:07:02.880
+on that Org file all the time.
+
+00:07:02.880 --> 00:07:05.759
+Then yes, my TODOs should be in that
+
+00:07:05.759 --> 00:07:07.680
+file specifically, because every time,
+
+00:07:08.000 --> 00:07:09.680
+if I'm visiting this Org file all the
+
+00:07:09.680 --> 00:07:12.479
+time, I should be able to just look at my
+
+00:07:12.479 --> 00:07:15.520
+tasks from within that buffer.
+
+00:07:15.520 --> 00:07:18.639
+And so I use org-sidebar to
+
+00:07:18.639 --> 00:07:21.599
+keep all these specific TODOs
+
+00:07:21.599 --> 00:07:22.960
+within that Org file.
+
+00:07:22.960 --> 00:07:26.560
+I find it helpful. Okay.
+
+00:07:26.560 --> 00:07:28.400
+Now that we're going into the writing
+
+00:07:28.400 --> 00:07:29.759
+and reference management...
+
+00:07:29.759 --> 00:07:33.039
+We'll call it a literature review.
+
+00:07:33.039 --> 00:07:36.639
+This is something I've built as a
+schema.
+
+00:07:36.639 --> 00:07:40.240
+I think that it works for now.
+
+00:07:40.240 --> 00:07:45.919
+It requires one outside software, which
+is Zotero, what
+
+00:07:45.919 --> 00:07:47.680
+I use. It's an open source reference
+
+00:07:47.680 --> 00:07:51.759
+management software. It's great.
+
+00:07:51.759 --> 00:07:53.599
+But the thing to keep in mind is that I
+
+00:07:53.599 --> 00:07:58.319
+use two plugins that are really needed
+for when
+
+00:07:58.319 --> 00:08:01.039
+we work with org-roam-bibtex, org-roam,
+
+00:08:01.039 --> 00:08:03.840
+Org Mode, and the ZotFile.
+
+00:08:03.840 --> 00:08:07.039
+Better BibTeX organizes your
+reference keys
+
+00:08:07.039 --> 00:08:10.560
+in a way, in a fashion that
+
+00:08:10.560 --> 00:08:13.360
+works for you. For me, all my reference
+
+00:08:13.360 --> 00:08:17.280
+keys are last author and year.
+With ZotFile,
+
+00:08:17.280 --> 00:08:21.120
+I let it rename all the
+
+00:08:21.120 --> 00:08:22.319
+PDF files
+
+00:08:22.319 --> 00:08:24.400
+the same way that I have for
+
+00:08:24.400 --> 00:08:26.000
+my Bib keys, which is
+
+00:08:26.000 --> 00:08:29.360
+last name of author and year. All right.
+
+00:08:29.360 --> 00:08:33.440
+Once you export your entire
+
+00:08:33.440 --> 00:08:37.120
+library as a Bib file, then you can work
+
+00:08:37.120 --> 00:08:39.440
+on it within Org Mode and Emacs
+
+00:08:39.440 --> 00:08:42.880
+using the following packages.
+
+00:08:42.880 --> 00:08:45.040
+So with org-roam-bibtex, it
+
+00:08:45.040 --> 00:08:47.839
+creates an Org file for each Bib entry.
+
+00:08:47.839 --> 00:08:49.519
+You have the option of
+
+00:08:49.519 --> 00:08:52.240
+templating and doing other stuff with it.
+
+00:08:52.240 --> 00:08:54.880
+Then finally, there's this
+
+00:08:54.880 --> 00:08:56.240
+orb-pdf-scrapper.
+
+00:08:56.240 --> 00:09:00.240
+I've used it briefly but I think the
+potential
+
+00:09:00.240 --> 00:09:02.880
+with orb-pdf-scrapper is if you're going to
+
+00:09:02.880 --> 00:09:05.920
+do a bibliometric study or
+
+00:09:05.920 --> 00:09:08.320
+a systematic literature review, there's
+
+00:09:08.320 --> 00:09:10.000
+something there, but I have to look
+
+00:09:10.000 --> 00:09:10.959
+through it.
+
+00:09:10.959 --> 00:09:14.399
+Anyway, so once you create
+
+00:09:14.399 --> 00:09:16.880
+your reference file of reference X and
+
+00:09:16.880 --> 00:09:18.160
+you're writing your notes,
+
+00:09:18.160 --> 00:09:20.240
+you can either go... Like, with going
+
+00:09:20.240 --> 00:09:22.399
+through Org Mode, you're writing
+
+00:09:22.399 --> 00:09:24.080
+your ideas, you're writing your notes,
+
+00:09:24.080 --> 00:09:26.080
+you're assigning tasks,
+
+00:09:26.080 --> 00:09:27.839
+and then there's org-transclusion, which
+
+00:09:27.839 --> 00:09:30.480
+I will mention briefly at the end,
+
+00:09:30.480 --> 00:09:32.240
+and ways to extract. If you're going to
+
+00:09:32.240 --> 00:09:35.360
+go through the org-roam...
+
+00:09:35.360 --> 00:09:36.640
+Things that you're going to use within
+
+00:09:36.640 --> 00:09:38.720
+org-roam... It's a great way to build your
+
+00:09:38.720 --> 00:09:40.000
+database. You start making the
+
+00:09:40.000 --> 00:09:42.880
+connections. You can visualize your
+
+00:09:42.880 --> 00:09:44.959
+notes and how these references are
+
+00:09:44.959 --> 00:09:46.240
+linked to each other
+
+00:09:46.240 --> 00:09:48.839
+through the org-roam server or
+
+00:09:48.839 --> 00:09:50.240
+org-roam graph.
+
+00:09:50.240 --> 00:09:53.120
+All right. This is just notes for later.
+
+00:09:53.680 --> 00:09:56.240
+So this is an example of an org-roam
+
+00:09:56.240 --> 00:09:57.360
+file that I have.
+
+00:09:57.360 --> 00:09:59.279
+For example, if I'm working on adaptation
+
+00:09:59.279 --> 00:10:01.760
+policy, I have these hyperlinks that are
+
+00:10:01.760 --> 00:10:04.959
+linked to other concepts and ideas such
+as either
+
+00:10:04.959 --> 00:10:06.640
+climate security,
+
+00:10:06.640 --> 00:10:08.720
+changing global environment, so on and
+
+00:10:08.720 --> 00:10:10.560
+so forth. The backlinks
+
+00:10:10.560 --> 00:10:13.920
+are other references that talk about
+
+00:10:13.920 --> 00:10:15.839
+this specific concept.
+
+00:10:15.839 --> 00:10:17.680
+This is really helpful. Then, when
+
+00:10:17.680 --> 00:10:19.920
+you visualize it, the picture on the left
+
+00:10:19.920 --> 00:10:22.160
+(which I'm sure looks really small),
+
+00:10:22.160 --> 00:10:24.160
+you can see the connections that it's
+
+00:10:24.160 --> 00:10:25.680
+making with other
+
+00:10:25.680 --> 00:10:28.160
+references. Of course, this is just
+
+00:10:28.160 --> 00:10:32.720
+like a buffer network. When you look at
+the entire
+
+00:10:32.720 --> 00:10:34.560
+database network...
+
+00:10:34.560 --> 00:10:38.000
+It's growing. Okay.
+
+00:10:38.000 --> 00:10:41.680
+So going into org-roam-bibtex...
+
+00:10:41.680 --> 00:10:44.079
+It utilizes a combination of the
+
+00:10:44.079 --> 00:10:46.000
+org-ref package, helm-bibtex,
+
+00:10:46.000 --> 00:10:46.880
+bibtex-completion.
+
+00:10:46.880 --> 00:10:50.079
+It works with org-roam functionalities
+
+00:10:50.079 --> 00:10:54.880
+and other good stuff. This is an example
+
+00:10:54.880 --> 00:10:57.440
+of my org-roam-bibtex file. All right. So
+
+00:10:57.440 --> 00:11:01.200
+I've created the template which I
+pretty much use,
+
+00:11:01.200 --> 00:11:05.920
+what Leo has produced in his
+
+00:11:05.920 --> 00:11:08.640
+tutorial. I think it's great. It
+
+00:11:08.640 --> 00:11:10.160
+works well for me.
+
+00:11:10.160 --> 00:11:12.880
+What it does is that it works
+
+00:11:12.880 --> 00:11:14.480
+with your bib file.
+
+00:11:14.480 --> 00:11:17.519
+So if you're in your bib file, you have a
+
+00:11:17.519 --> 00:11:19.519
+sub entry that's called keywords, and
+
+00:11:19.519 --> 00:11:21.040
+usually that's within
+
+00:11:21.040 --> 00:11:23.120
+a journal article. The author would
+
+00:11:23.120 --> 00:11:27.519
+specify these keywords. When it gets
+imported into
+
+00:11:27.519 --> 00:11:30.399
+Zotero, it extracts those keywords and
+then it
+
+00:11:30.399 --> 00:11:32.399
+gets populated as an Org file
+
+00:11:32.399 --> 00:11:34.959
+with org-roam-bibtex. I always start
+
+00:11:34.959 --> 00:11:36.959
+with the meta information first, and then
+
+00:11:36.959 --> 00:11:38.560
+I would write my notes
+
+00:11:38.560 --> 00:11:42.480
+after that. This is an example, though,
+
+00:11:42.480 --> 00:11:45.760
+for reference of a physical book, so
+
+00:11:45.760 --> 00:11:49.120
+I don't have a pdf file for it.
+
+00:11:49.120 --> 00:11:51.519
+So when I've figured out a new idea
+
+00:11:51.519 --> 00:11:53.920
+for it, if I'm writing notes on it,
+
+00:11:53.920 --> 00:11:57.279
+I would create a property that says
+pages.
+
+00:11:57.279 --> 00:11:58.959
+That way, it's easier for you when you go
+
+00:11:58.959 --> 00:12:00.639
+back to citing
+
+00:12:00.639 --> 00:12:02.720
+certain ideas or something, that you
+
+00:12:02.720 --> 00:12:04.720
+have the pages prepared there.
+
+00:12:04.720 --> 00:12:07.839
+It's easier that way. Okay.
+
+00:12:07.839 --> 00:12:11.279
+org-noter which is something I
+
+00:12:11.279 --> 00:12:13.040
+use a lot, especially with journal
+
+00:12:13.040 --> 00:12:15.600
+articles that have PDFs and stuff like
+that.
+
+00:12:15.600 --> 00:12:19.120
+They're really helpful if you are going to...
+
+00:12:19.120 --> 00:12:22.720
+If you've just started using Emacs
+
+00:12:22.720 --> 00:12:23.760
+and org-roam,
+
+00:12:23.760 --> 00:12:26.959
+and you have all these PDFs that have
+
+00:12:26.959 --> 00:12:29.519
+all the annotations and highlighting and
+
+00:12:29.519 --> 00:12:32.639
+all that stuff, with org-noter you can
+
+00:12:32.639 --> 00:12:36.720
+just use the org-noter-create-skeleton
+
+00:12:36.720 --> 00:12:39.519
+command and it will populate all your
+
+00:12:39.519 --> 00:12:41.200
+notes that have already been
+
+00:12:41.200 --> 00:12:43.760
+entered within the PDF file if you're
+
+00:12:43.760 --> 00:12:48.160
+using an outside software, and creates
+them as a neat
+
+00:12:48.160 --> 00:12:52.560
+Org file. I highly recommend.
+
+00:12:52.560 --> 00:12:55.920
+Finally, org-transclusion.
+
+00:12:55.920 --> 00:12:57.920
+I think this is still in its beta phase,
+
+00:12:57.920 --> 00:13:01.040
+but I've been enjoying it so far.
+
+00:13:01.040 --> 00:13:02.720
+I'm guessing people know what
+
+00:13:02.720 --> 00:13:04.800
+transclusion means, which is like
+
+00:13:04.800 --> 00:13:06.480
+copy-pasting text from
+
+00:13:06.480 --> 00:13:09.600
+one Org file to another. This is helpful.
+
+00:13:09.600 --> 00:13:11.839
+I think I peeked at a question that
+
+00:13:11.839 --> 00:13:12.959
+was talking about
+
+00:13:12.959 --> 00:13:16.320
+linking to other Org files.
+
+00:13:16.320 --> 00:13:20.320
+I think org-transclusion could really
+work. It's
+
+00:13:20.320 --> 00:13:24.399
+equivalent to the include
+
+00:13:24.399 --> 00:13:27.760
+function within Org Mode, but I think...
+
+00:13:27.760 --> 00:13:29.519
+So if you have other files
+
+00:13:29.519 --> 00:13:32.560
+that you know which region that you
+
+00:13:32.560 --> 00:13:34.800
+need in another file, you could use the
+
+00:13:34.800 --> 00:13:36.079
+#+INCLUDE, but with
+
+00:13:36.079 --> 00:13:38.160
+org-transclusion... It's great. I mean you
+
+00:13:38.160 --> 00:13:39.440
+just have...
+
+00:13:39.440 --> 00:13:43.360
+you're just linking one part to the
+other.
+
+00:13:43.360 --> 00:13:45.760
+Sort of... Like, not refiling, but you know
+
+00:13:45.760 --> 00:13:47.760
+hyperlinking.
+
+00:13:47.760 --> 00:13:49.680
+So this is an example of what
+
+00:13:49.680 --> 00:13:51.120
+org-transclusion looks like.
+
+00:13:51.120 --> 00:13:53.680
+The highlighted problem statement
+
+00:13:53.680 --> 00:13:54.720
+is from another
+
+00:13:54.720 --> 00:13:57.760
+Org file. Then what I would do is
+
+00:13:57.760 --> 00:13:59.760
+just link it to there, and there was a
+
+00:13:59.760 --> 00:14:01.440
+transclusion command.
+
+00:14:01.440 --> 00:14:05.440
+I wish I made another screenshot of it.
+
+00:14:05.440 --> 00:14:09.120
+When you invoke org-transclusion-mode,
+
+00:14:09.120 --> 00:14:12.079
+it turns... It prints it out like that.
+
+00:14:12.480 --> 00:14:15.120
+It's in view mode. Then when you want
+
+00:14:15.120 --> 00:14:16.560
+to edit, it will take you back to that
+
+00:14:16.560 --> 00:14:18.480
+buffer and you can edit the text
+
+00:14:18.480 --> 00:14:22.720
+however you want. All right. So, thank
+you so much.
+
+00:14:22.720 --> 00:14:26.000
+I wanted to leave room for questions,
+
+00:14:26.000 --> 00:14:29.120
+but special thanks to all the folks that
+
+00:14:29.120 --> 00:14:33.440
+work on org-roam, org-roam-bibtex,
+org-roam-server,
+
+00:14:33.440 --> 00:14:36.320
+org-transclusion, and of course alphapapa on
+
+00:14:36.320 --> 00:14:38.240
+org-super-agenda and org-sidebar.
+
+00:14:38.240 --> 00:14:43.440
+That's how I got into Emacs. Thank you.
+
+00:14:43.440 --> 00:14:45.600
+(Leo: All right. Well, thank you. So yeah,
+
+00:14:45.600 --> 00:14:47.120
+this time I'll be the one asking the
+
+00:14:47.120 --> 00:14:49.120
+question and not Amin.
+
+00:14:49.120 --> 00:14:51.360
+I'm filling big shoes right now,
+
+00:14:51.360 --> 00:14:53.120
+so you'll have to bear with me folks.
+
+00:14:53.120 --> 00:14:54.880
+So thank you so much, Noorah, for your
+
+00:14:54.880 --> 00:14:56.240
+presentation that is incredibly
+
+00:14:56.240 --> 00:14:57.279
+interesting.
+
+00:14:57.279 --> 00:14:58.959
+Would you mind if I fed you questions
+
+00:14:58.959 --> 00:15:00.800
+from the charts?)
+
+00:15:00.800 --> 00:15:04.000
+Noorah: Go ahead. (Leo: Okay. so the first one I've
+
+00:15:04.000 --> 00:15:06.160
+picked on my end was "Did you try using
+
+00:15:06.160 --> 00:15:07.920
+ebib instead of Zotero,
+
+00:15:07.920 --> 00:15:10.560
+and if so, is it better than Zotero in
+
+00:15:10.560 --> 00:15:12.079
+some ways?)
+
+00:15:12.079 --> 00:15:14.880
+Noorah: No, I have not used Ebib. I've only used
+
+00:15:14.880 --> 00:15:15.680
+Mendeley
+
+00:15:15.680 --> 00:15:18.560
+and then they got bought by Elsevier,
+
+00:15:18.560 --> 00:15:20.320
+and so I was, like, okay I'm done,
+
+00:15:20.320 --> 00:15:23.040
+I'm going to Zotero. There are a lot
+
+00:15:23.040 --> 00:15:25.120
+of plugins with Zotero that you can play
+
+00:15:25.120 --> 00:15:26.240
+around with.
+
+00:15:26.240 --> 00:15:28.320
+I can't speak for Ebib, but definitely
+
+00:15:28.320 --> 00:15:32.079
+Zotero has been a good experience so
+far.
+
+00:15:32.079 --> 00:15:34.880
+(Leo: Yes, same. I also do research on
+
+00:15:34.880 --> 00:15:35.360
+the side;
+
+00:15:35.360 --> 00:15:38.079
+as I told you, English major, and yeah I
+
+00:15:38.079 --> 00:15:39.360
+also do Zotero.
+
+00:15:39.360 --> 00:15:41.839
+Some people have been using uh a
+
+00:15:41.839 --> 00:15:43.759
+connector between Zotero and Emacs which
+
+00:15:43.759 --> 00:15:46.000
+has... they've had great success with
+them but
+
+00:15:46.000 --> 00:15:47.360
+personally I haven't
+
+00:15:47.360 --> 00:15:50.480
+touched it already, so yeah.
+
+00:15:50.480 --> 00:15:52.240
+Oh, go ahead. Sorry.) Noorah: All right. So far, I
+
+00:15:52.240 --> 00:15:53.920
+don't have any problems with Zotero, but
+
+00:15:53.920 --> 00:15:56.320
+maybe if I run into something, I might
+check out
+
+00:15:56.320 --> 00:15:58.320
+Ebib in the future.
+
+00:15:58.320 --> 00:16:00.240
+(Leo: yeah, definitely. I think zotero is a very
+
+00:16:00.240 --> 00:16:01.680
+solid project. You know, the fact that
+
+00:16:01.680 --> 00:16:02.560
+it's being used
+
+00:16:02.560 --> 00:16:04.959
+by people outside of Emacs also ensures
+
+00:16:04.959 --> 00:16:06.560
+that there's quite a lot of backing
+
+00:16:06.560 --> 00:16:07.680
+behind the software,
+
+00:16:07.680 --> 00:16:09.759
+which is reassuring when your livelihood
+
+00:16:09.759 --> 00:16:11.759
+depends on your research.)
+
+00:16:11.759 --> 00:16:13.519
+Noorah: Right. And then I think one more thing
+
+00:16:13.519 --> 00:16:15.600
+with Zotero is that you can create
+
+00:16:15.600 --> 00:16:18.079
+groups, so if you're in a collaborative
+project,
+
+00:16:18.079 --> 00:16:20.160
+you can create a reference,
+
+00:16:20.160 --> 00:16:22.320
+a library just for your group, and I think
+
+00:16:22.320 --> 00:16:23.759
+that could help.
+
+00:16:23.759 --> 00:16:25.279
+I'm going to be in a project next
+
+00:16:25.279 --> 00:16:27.600
+semester that requires that.
+
+00:16:27.600 --> 00:16:29.839
+(Leo: Yeah, definitely. I believe the ability to
+
+00:16:29.839 --> 00:16:31.600
+have folders inside Zotero
+
+00:16:31.600 --> 00:16:33.839
+makes it incredibly useful to manage
+
+00:16:33.839 --> 00:16:37.440
+your different projects, concurrent
+projects.
+
+00:16:37.440 --> 00:16:39.279
+So moving on to other questions, do you
+
+00:16:39.279 --> 00:16:41.279
+have any suggestion on what subjects or
+
+00:16:41.279 --> 00:16:43.440
+things should be tags or separate org-roam
+
+00:16:43.440 --> 00:16:46.560
+files for cross-linking?)
+
+00:16:46.560 --> 00:16:50.320
+Right. So far, now, I'm having
+
+00:16:50.320 --> 00:16:52.720
+trouble with "should I be combining
+
+00:16:52.720 --> 00:16:55.360
+certain concepts together as one?"
+
+00:16:55.360 --> 00:16:59.360
+This is where the thought process
+
+00:16:59.360 --> 00:17:00.959
+starts coming to fruit, is that when you
+
+00:17:00.959 --> 00:17:04.880
+start combining ideas together so you
+won't need a
+
+00:17:04.880 --> 00:17:06.480
+specific tag
+
+00:17:06.480 --> 00:17:09.199
+and another one that are like similar in
+
+00:17:09.199 --> 00:17:11.280
+ideas...
+
+00:17:11.280 --> 00:17:12.720
+I'm not sure if that answers the
+
+00:17:12.720 --> 00:17:14.799
+question, but so far I've been using
+
+00:17:14.799 --> 00:17:17.919
+the org-roam the default way,
+which is
+
+00:17:17.919 --> 00:17:22.160
+many small files and then just
+
+00:17:22.160 --> 00:17:24.400
+linking them to my... Like, either if I have
+
+00:17:24.400 --> 00:17:26.319
+a report to write, or if I have an
+
+00:17:26.959 --> 00:17:32.240
+essay to write...
+
+00:17:32.240 --> 00:17:35.360
+I think you're muted.
+
+00:17:35.360 --> 00:17:38.400
+(Leo: I did two stupid things. The
+first one
+
+00:17:38.400 --> 00:17:40.640
+was spilling out my water. The second one
+
+00:17:40.640 --> 00:17:42.320
+was speaking without actually turning on
+
+00:17:42.320 --> 00:17:43.760
+my microphone.
+
+00:17:43.760 --> 00:17:45.760
+Let's just hope that nothing is going
+
+00:17:45.760 --> 00:17:48.320
+to fry in the near vicinity of me right
+now.
+
+00:17:48.320 --> 00:17:49.840
+But yeah, I believe you've answered
+
+00:17:49.840 --> 00:17:51.440
+the question, so don't worry about it. I'm
+
+00:17:51.440 --> 00:17:53.200
+slightly wet right now, which is not a
+
+00:17:53.200 --> 00:17:55.280
+very agreeable feeling, but we'll have to
+
+00:17:55.280 --> 00:17:57.280
+carry on, I suppose.
+
+00:17:57.280 --> 00:17:59.360
+Another question: "is there a place where
+
+00:17:59.360 --> 00:18:01.600
+people are collaborating on research
+
+00:18:01.600 --> 00:18:04.320
+about Emacs?" So do you want to try to
+
+00:18:04.320 --> 00:18:06.160
+take this one?)
+
+00:18:06.160 --> 00:18:08.559
+Noorah: I don't know, but I'm definitely
+
+00:18:08.559 --> 00:18:10.559
+interested in the user experience of
+
+00:18:10.559 --> 00:18:14.720
+Emacs, so if anyone wants to work on
+that,
+
+00:18:14.720 --> 00:18:16.400
+I'm happy.
+
+00:18:16.400 --> 00:18:18.320
+(Leo: Well you do have a a pretty good
+
+00:18:18.320 --> 00:18:19.760
+candidate in front of you, if I
+
+00:18:19.760 --> 00:18:22.080
+should say so myself. I'm incredibly
+
+00:18:22.080 --> 00:18:22.960
+interested about
+
+00:18:22.960 --> 00:18:25.039
+the ability to do research in Emacs
+
+00:18:25.039 --> 00:18:26.960
+and about the ability to
+
+00:18:26.960 --> 00:18:30.480
+preach the FLOSS way
+
+00:18:30.480 --> 00:18:32.480
+to academia and to the academe,
+
+00:18:32.480 --> 00:18:34.080
+especially because I believe there's
+
+00:18:34.080 --> 00:18:35.280
+really something
+
+00:18:35.280 --> 00:18:38.240
+great to be done. Sorry, I'm just looking
+
+00:18:38.240 --> 00:18:39.919
+at the puddle of water on the side which
+
+00:18:39.919 --> 00:18:41.840
+is slightly oozing my way,
+
+00:18:41.840 --> 00:18:45.039
+which is not a very good feeling, really.
+
+00:18:45.039 --> 00:18:46.880
+I believe some work
+
+00:18:46.880 --> 00:18:48.320
+could be done, and if people are
+
+00:18:48.320 --> 00:18:50.000
+interested in the chat right now,
+
+00:18:50.000 --> 00:18:52.320
+do get in touch with us. Both
+
+00:18:52.320 --> 00:18:57.280
+Noorah and I are on our Slack channel.
+Yes, I know, Slack,
+
+00:18:57.280 --> 00:19:00.080
+the corporate hive mind that is Slack.
+
+00:19:00.080 --> 00:19:02.720
+But we've decided with org-roam to use
+Slack.
+
+00:19:02.720 --> 00:19:05.520
+You can find us very easily.
+
+00:19:05.520 --> 00:19:06.880
+If you want to talk about these topics,
+
+00:19:07.360 --> 00:19:08.720
+by all means, do, and we'll be very
+
+00:19:08.720 --> 00:19:10.720
+interested to answer your questions.)
+
+00:19:10.720 --> 00:19:12.640
+Noorah: I have a question here that says, "How
+
+00:19:12.640 --> 00:19:15.520
+does the view for time blocking works?"
+
+00:19:15.520 --> 00:19:18.640
+I use org-super-agenda, so
+
+00:19:18.640 --> 00:19:22.000
+what happens is that my active
+
+00:19:22.000 --> 00:19:26.960
+timestamps are only in my Gmail
+Org file.
+
+00:19:26.960 --> 00:19:29.200
+If you use org-gcal, you have to
+
+00:19:29.200 --> 00:19:32.559
+specify a certain Org file. When it
+
+00:19:32.559 --> 00:19:34.320
+imports them, it imports them as
+
+00:19:34.320 --> 00:19:38.200
+active timestamps. I make sure
+
+00:19:38.200 --> 00:19:40.480
+whenever I create a TODO or even a
+research task
+
+00:19:40.480 --> 00:19:42.480
+that it doesn't have a timestamp on it,
+
+00:19:42.480 --> 00:19:45.039
+because what I want to do is go back
+
+00:19:45.039 --> 00:19:48.480
+and then move around these tasks
+
+00:19:48.480 --> 00:19:50.160
+according to my either weekly
+
+00:19:50.160 --> 00:19:51.919
+schedule, or monthly, or however long you
+
+00:19:51.919 --> 00:19:52.960
+want to do it.
+
+00:19:52.960 --> 00:19:56.480
+So yeah, only active timestamps or
+
+00:19:56.480 --> 00:19:59.679
+deadline um appear in your time grid.
+
+00:19:59.679 --> 00:20:03.280
+So that could work. (Leo: That's very good.
+
+00:20:03.280 --> 00:20:05.440
+Just to interject for a second
+
+00:20:05.440 --> 00:20:06.320
+about this,
+
+00:20:06.320 --> 00:20:07.840
+you know with org-roam right now, we're
+
+00:20:07.840 --> 00:20:10.720
+mostly focused on optimization,
+
+00:20:10.720 --> 00:20:13.039
+but we're hoping to move on to UX very
+
+00:20:13.039 --> 00:20:14.720
+soon. So all those matters about
+
+00:20:14.720 --> 00:20:16.720
+having TODOs in your files, it
+
+00:20:16.720 --> 00:20:18.159
+is something that we've been thinking
+
+00:20:18.159 --> 00:20:20.000
+about with Jethro Kuan, who is my main
+
+00:20:20.000 --> 00:20:23.280
+co-maintainer for org-roam. We'll be
+working on this in
+
+00:20:23.280 --> 00:20:24.480
+the coming months, so don't worry too
+
+00:20:24.480 --> 00:20:26.080
+much about it and stay tuned.)
+
+00:20:26.080 --> 00:20:29.760
+Noorah: Yeah. So I've got the ebib
+
+00:20:29.760 --> 00:20:33.200
+and what else... What subjects... I think...
+
+00:20:33.200 --> 00:20:34.080
+Okay!
+
+00:20:34.080 --> 00:20:35.919
+What is this question? "Have you seen the
+
+00:20:35.919 --> 00:20:37.120
+project Papis?"
+
+00:20:37.120 --> 00:20:40.400
+I'm not sure what... oh it's a Zotero
+
+00:20:40.400 --> 00:20:41.280
+alternative. Okay.
+
+00:20:41.280 --> 00:20:43.840
+I'll look into it. Thank you.
+
+00:20:43.840 --> 00:20:45.919
+(Leo: I don't know about it either, so
+
+00:20:45.919 --> 00:20:49.600
+please look into it and let me know.)
+
+00:20:49.600 --> 00:20:53.200
+Have we covered all the questions?
+
+00:20:53.200 --> 00:20:55.679
+(Leo: I believe we have. We have about
+
+00:20:55.679 --> 00:20:56.880
+two-minute leeway
+
+00:20:56.880 --> 00:20:58.880
+for me to move into the next talk, so
+
+00:20:58.880 --> 00:21:00.240
+we're right on time.)
+
+00:21:00.240 --> 00:21:01.760
+All right. Thank you so much. Really
+
+00:21:01.760 --> 00:21:04.159
+appreciate it. Good luck everyone!
+
+00:21:04.159 --> 00:21:05.440
+(Leo: well thank you, and thank you so much for
+
+00:21:05.440 --> 00:21:07.600
+coming, and allowing me not to
+
+00:21:07.600 --> 00:21:08.400
+be the only one
+
+00:21:08.400 --> 00:21:11.440
+talking about org-roam today.) Noorah: Sounds good.
+
+00:21:11.440 --> 00:21:14.559
+All right. (Amin: Thank you both very much.)
diff --git a/2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt b/2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt
new file mode 100644
index 00000000..4c840ad7
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--18-org-roam-technical-presentation--leo-vivier.vtt
@@ -0,0 +1,1640 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.399
+Leo Vivier: [About the previous
+presentation:] At the end... We are
+right on time, so I'm
+
+00:00:02.399 --> 00:00:04.319
+sorry if you have a lot of questions
+before.
+
+00:00:04.319 --> 00:00:06.960
+You had so many questions and I
+
+00:00:06.960 --> 00:00:08.375
+couldn't answer all of them
+
+00:00:08.375 --> 00:00:10.080
+I'm really happy about it but I'm also
+
+00:00:10.080 --> 00:00:12.719
+really sad that I don't have enough time
+to do so.
+
+00:00:12.719 --> 00:00:15.040
+I'm going to try to do a better job this
+
+00:00:15.040 --> 00:00:17.119
+time of leaving you a little more time
+
+00:00:17.119 --> 00:00:20.240
+for the questions. So, just before,
+
+00:00:20.240 --> 00:00:22.960
+a little addendum because I did screw up
+
+00:00:22.960 --> 00:00:24.400
+in the previous presentation...
+
+00:00:24.400 --> 00:00:27.439
+You remember I tried to rename the file
+
+00:00:27.439 --> 00:00:28.800
+and it didn't work?
+
+00:00:28.800 --> 00:00:32.559
+well it turns out I had two files named
+"baz," so
+
+00:00:32.559 --> 00:00:36.000
+my software works great, thank you very
+much.
+
+00:00:36.000 --> 00:00:38.800
+[Org Roam Technical Presentation]: All
+right. So now what I'm going to do
+
+00:00:38.800 --> 00:00:40.239
+during this presentation
+
+00:00:40.239 --> 00:00:43.040
+is that I'm going to... Oops, I didn't start
+
+00:00:43.040 --> 00:00:44.399
+my timer. Just give me
+
+00:00:44.399 --> 00:00:47.520
+a little second, and let's subtract
+
+00:00:47.520 --> 00:00:50.141
+one minute. Okay. Good.
+
+00:00:50.141 --> 00:00:52.239
+So, what I'm going to do right now... It's a
+
+00:00:52.239 --> 00:00:54.079
+little different from the previous
+
+00:00:54.079 --> 00:00:56.879
+talk I gave you, and different even
+
+00:00:56.879 --> 00:00:58.239
+from what Noorah gave you.
+
+00:00:58.239 --> 00:01:00.480
+There's scaling the mountain as
+
+00:01:00.480 --> 00:01:01.941
+far as difficulty is concerned.
+
+00:01:01.941 --> 00:01:04.879
+On this one, I will be telling you
+about the
+
+00:01:04.879 --> 00:01:06.799
+technical aspects of org-roam,
+
+00:01:06.799 --> 00:01:09.360
+because I've been telling you
+
+00:01:09.360 --> 00:01:11.119
+about the general philosophy
+
+00:01:11.119 --> 00:01:13.119
+of the notes and the general philosophy
+
+00:01:13.119 --> 00:01:14.560
+of organization,
+
+00:01:14.560 --> 00:01:16.159
+but right now, I really want to get into
+
+00:01:16.159 --> 00:01:18.479
+the nitty gritty about org-roam.
+
+00:01:18.479 --> 00:01:22.640
+So if we go in the git repository,
+
+00:01:22.640 --> 00:01:25.759
+this at the very core is org-roam.
+
+00:01:25.759 --> 00:01:28.960
+For some of you who have no experience
+whatsoever
+
+00:01:28.960 --> 00:01:31.280
+developing stuff or programming or
+
+00:01:31.280 --> 00:01:32.880
+anything along those lines,
+
+00:01:32.880 --> 00:01:36.720
+this is how all the development
+around the world
+
+00:01:36.720 --> 00:01:40.000
+is working. You have a repository, a
+
+00:01:40.000 --> 00:01:42.159
+git repository, where you have all the
+
+00:01:42.159 --> 00:01:44.399
+files, all the libraries you're using,
+
+00:01:44.399 --> 00:01:46.399
+all the programs, all the commands.
+
+00:01:46.399 --> 00:01:48.720
+Everything is inside your files.
+
+00:01:48.720 --> 00:01:52.240
+And in a way, this is the org-roam project.
+
+00:01:52.240 --> 00:01:53.741
+You can see that we have many files.
+
+00:01:53.741 --> 00:01:55.600
+We have org-roam-buffer, -capture, -compat,
+
+00:01:55.600 --> 00:01:58.441
+-completion, -dailies, etc. etc.
+
+00:01:58.441 --> 00:02:02.000
+So, before we dive a little deeper,
+I just
+
+00:02:02.000 --> 00:02:04.640
+want to give you a lay of the land,
+so to speak,
+
+00:02:04.640 --> 00:02:08.160
+to know where we're heading.
+
+00:02:08.160 --> 00:02:11.680
+Org-roam is built on top of Org Mode,
+
+00:02:11.680 --> 00:02:15.599
+and Org Mode gives us plenty of tools
+
+00:02:15.599 --> 00:02:17.408
+to play around with the files.
+
+00:02:17.408 --> 00:02:18.308
+I'm moving the glass.
+
+00:02:18.308 --> 00:02:20.080
+I'm starting to move my hands a little
+
+00:02:20.080 --> 00:02:21.360
+bit. You know, when I get excited about
+
+00:02:21.360 --> 00:02:22.959
+something, I move my hand,
+
+00:02:22.959 --> 00:02:26.640
+and then that stuff happens. So
+
+00:02:26.640 --> 00:02:29.360
+in org-roam, we have Org Mode and
+
+00:02:29.360 --> 00:02:31.360
+Org Roam gives us plenty of tools which
+
+00:02:31.360 --> 00:02:33.360
+are incredibly useful
+
+00:02:33.360 --> 00:02:36.560
+for writing stuff. So you know we already
+
+00:02:36.560 --> 00:02:37.440
+have the links,
+
+00:02:37.440 --> 00:02:39.440
+we already have the hierarchy which is
+
+00:02:39.440 --> 00:02:43.360
+given by having trees within trees
+within trees. We have
+
+00:02:43.760 --> 00:02:45.741
+quote blocks. We have babel blocks.
+
+00:02:45.741 --> 00:02:48.000
+We have so much stuff. We have an
+arsenal of
+
+00:02:48.000 --> 00:02:49.680
+tools that have been developed
+
+00:02:49.680 --> 00:02:53.519
+for the last 15 years.
+
+00:02:53.519 --> 00:02:56.640
+When you think about it, org-roam just
+
+00:02:56.640 --> 00:02:59.760
+wants to create backlinks. It sounds
+
+00:02:59.760 --> 00:03:01.360
+something very simple, but the problem is
+
+00:03:01.360 --> 00:03:05.519
+that we need to play nicely with all
+of those
+
+00:03:05.519 --> 00:03:09.360
+intricate pieces. The fact is, it
+takes quite a
+
+00:03:09.360 --> 00:03:10.879
+lot of expertise to be able to do so
+
+00:03:10.879 --> 00:03:14.400
+because if... Right now we are in the brain
+of org-roam,
+
+00:03:15.200 --> 00:03:18.959
+but if I show you the brain of Org Mode...
+
+00:03:18.959 --> 00:03:20.608
+So this is the brain of Org Mode.
+
+00:03:20.608 --> 00:03:23.280
+It looks very simple like this because I
+
+00:03:23.280 --> 00:03:25.519
+haven't entered the lisp/ folder.
+
+00:03:25.519 --> 00:03:28.000
+I'm just going to enter it. I'm going
+
+00:03:28.000 --> 00:03:32.000
+to zoom out a little bit. Don't worry
+if you
+
+00:03:32.000 --> 00:03:32.959
+don't see everything.
+
+00:03:32.959 --> 00:03:35.519
+but I just want you to get the
+
+00:03:35.519 --> 00:03:37.519
+sheer feel of magnitude
+
+00:03:37.519 --> 00:03:41.280
+that is Org Mode. So right now, we are
+
+00:03:41.280 --> 00:03:42.640
+in a very small size... What I'm going
+to do,
+
+00:03:42.640 --> 00:03:43.760
+I'm going to skip
+
+00:03:43.760 --> 00:03:47.519
+one page, one, two,
+
+00:03:47.519 --> 00:03:51.040
+three, we have... Let's just check how many
+
+00:03:51.040 --> 00:03:52.319
+lines we have.
+
+00:03:52.319 --> 00:03:54.640
+Okay. Let me just revert to a fairly
+
+00:03:54.640 --> 00:03:56.480
+readable sight.
+
+00:03:56.480 --> 00:03:58.560
+At the bottom, you can see that we have...
+
+00:03:58.560 --> 00:03:59.599
+Oh it's not showing because it's a
+
+00:03:59.599 --> 00:04:00.959
+little small. Okay, I'm just going to
+
+00:04:00.959 --> 00:04:03.840
+resize the window a little bit.
+
+00:04:03.840 --> 00:04:06.959
+It's not showing up. Give me a second. I
+
+00:04:06.959 --> 00:04:08.720
+can't see how many lines I have. Okay. So
+
+00:04:08.720 --> 00:04:10.159
+let's do it the better way.
+
+00:04:10.159 --> 00:04:11.840
+I'm going to go back at the beginning of
+
+00:04:11.840 --> 00:04:14.000
+the buffer and we're going to count
+
+00:04:14.000 --> 00:04:16.160
+how many lines we have. So the bottom, in
+
+00:04:16.160 --> 00:04:18.880
+the mini buffer (and the mini buffer is
+this area),
+
+00:04:18.880 --> 00:04:22.320
+we have 377 lines,
+
+00:04:22.320 --> 00:04:25.919
+which means 377
+
+00:04:25.919 --> 00:04:29.759
+libraries within Org Mode. And mind you,
+
+00:04:29.759 --> 00:04:31.520
+that's not counting all the modules that
+
+00:04:31.520 --> 00:04:32.960
+we have on the side, which
+
+00:04:32.960 --> 00:04:36.240
+come on top of Org Mode. Now when you
+
+00:04:36.240 --> 00:04:37.360
+try to think
+
+00:04:37.360 --> 00:04:41.408
+about something so elemental as links,
+
+00:04:41.408 --> 00:04:45.520
+you have to think about how to play well
+
+00:04:45.520 --> 00:04:48.560
+with every single one of these modules.
+
+00:04:48.560 --> 00:04:48.875
+Now, obviously not the 370.
+
+00:04:48.875 --> 00:04:56.080
+Sometimes, you know one module it's not
+going to do anything.
+
+00:04:56.080 --> 00:04:57.680
+I'm not sure ob-calc could be doing
+
+00:04:57.680 --> 00:04:58.639
+anything with it.
+
+00:04:58.639 --> 00:05:00.080
+But it's something that we have to keep
+
+00:05:00.080 --> 00:05:03.039
+in mind.
+
+00:05:03.039 --> 00:05:04.720
+So, really early on, when we started
+
+00:05:04.720 --> 00:05:07.520
+developing org-roam with Jethro Kuan, my
+
+00:05:07.520 --> 00:05:10.639
+co-maintainer, you know we had this
+idea that
+
+00:05:10.639 --> 00:05:14.639
+we wanted to develop something that
+was optimized,
+
+00:05:14.639 --> 00:05:18.240
+something that would scale very
+
+00:05:18.240 --> 00:05:20.160
+nicely, whether or not you had...
+
+00:05:20.160 --> 00:05:21.600
+Something that would work as
+
+00:05:21.600 --> 00:05:24.560
+fast if you had 10 files,
+
+00:05:24.560 --> 00:05:27.680
+or if you had 100 files, or if you had
+
+00:05:27.680 --> 00:05:30.880
+10,000 files and maybe more. So the
+
+00:05:30.880 --> 00:05:32.080
+problem when you do this--
+
+00:05:32.080 --> 00:05:34.400
+and I'm doing some callbacks to the talk
+
+00:05:34.400 --> 00:05:36.320
+I gave you earlier today about
+
+00:05:36.320 --> 00:05:41.280
+a few big files versus many--
+
+00:05:41.280 --> 00:05:44.800
+I got confused--few big files versus many
+
+00:05:44.800 --> 00:05:45.919
+small files,
+
+00:05:45.919 --> 00:05:49.280
+the problem with this is that we need to
+
+00:05:49.280 --> 00:05:51.600
+think about optimization from the get go.
+
+00:05:51.600 --> 00:05:53.680
+So one of the decisions we took when
+
+00:05:53.680 --> 00:05:54.800
+we got started
+
+00:05:54.800 --> 00:05:59.199
+with org-roam is that if I go in my
+
+00:05:59.199 --> 00:06:02.479
+test repository--so that's the one in
+
+00:06:02.479 --> 00:06:04.240
+which we were right before--
+
+00:06:04.240 --> 00:06:08.000
+we have a file which is called org-roam.db.
+
+00:06:08.000 --> 00:06:11.600
+Now if I open it, it's not... It's a
+
+00:06:11.600 --> 00:06:14.160
+little garbage because it's a binary.
+
+00:06:14.160 --> 00:06:15.120
+But what we have
+
+00:06:15.120 --> 00:06:18.560
+is a database with which we communicate
+
+00:06:18.560 --> 00:06:21.919
+via... Sorry, it's an SQL database.
+
+00:06:21.919 --> 00:06:25.120
+And what this allows us to do
+
+00:06:25.120 --> 00:06:28.479
+is we store all the information we need
+
+00:06:28.479 --> 00:06:31.919
+inside this SQL database which allows us
+
+00:06:31.919 --> 00:06:34.720
+to speed up a lot of the operations that
+
+00:06:34.720 --> 00:06:38.479
+are necessary for the functioning of org-roam.
+
+00:06:38.479 --> 00:06:40.240
+So, for instance, if I go back to the
+
+00:06:40.240 --> 00:06:41.759
+index file that I had before...
+
+00:06:41.759 --> 00:06:43.341
+Let's just go back to "foo," actually.
+
+00:06:43.341 --> 00:06:45.680
+This way you'll see a little more on
+the side.
+
+00:06:45.680 --> 00:06:47.919
+So you see that on the side we have
+
+00:06:47.919 --> 00:06:50.319
+two links. I'm not going to
+click on them;
+
+00:06:50.319 --> 00:06:51.508
+otherwise, I'm going to open them.
+
+00:06:51.508 --> 00:06:53.199
+But we have two links.
+
+00:06:53.199 --> 00:06:56.319
+Now there are many implementations of
+
+00:06:56.319 --> 00:06:58.975
+the Zettelkasten method inside Emacs
+
+00:06:58.975 --> 00:07:00.541
+and with Org Mode.
+
+00:07:00.541 --> 00:07:02.400
+But what we've decided to do
+
+00:07:02.400 --> 00:07:04.639
+is that every time you have a link--so if
+
+00:07:04.639 --> 00:07:08.479
+we go to the index again here at point
+we have
+
+00:07:08.479 --> 00:07:09.908
+the link "foo." Every time we create a
+link,
+
+00:07:09.908 --> 00:07:14.160
+we update our database
+
+00:07:14.160 --> 00:07:17.919
+to say, okay, so we have a link in the
+file
+
+00:07:17.919 --> 00:07:21.080
+"index" which is leading to the file
+
+00:07:21.080 --> 00:07:24.319
+"foo.org" and it is situated
+
+00:07:24.319 --> 00:07:27.840
+under the heading "A heading."
+
+00:07:27.840 --> 00:07:29.840
+If you check the side buffer, you see
+
+00:07:29.840 --> 00:07:31.440
+that all this information
+
+00:07:31.440 --> 00:07:33.120
+which I just highlighted to you
+
+00:07:33.120 --> 00:07:42.639
+is present right here.
+
+00:07:42.639 --> 00:07:45.599
+Oh, sorry I forgot this. Thank you.
+
+00:07:46.400 --> 00:07:50.879
+So let's see. Log. Okay.
+
+00:07:50.879 --> 00:07:53.039
+I'm going to split like this.
+
+00:07:53.039 --> 00:07:54.960
+I'm going to go back there.
+
+00:07:54.960 --> 00:07:56.960
+The problem is that I can't show my
+
+00:07:56.960 --> 00:07:58.720
+keystrokes at the same time as
+
+00:07:58.720 --> 00:08:02.080
+I'm showing the side buffer, so I'll
+
+00:08:02.080 --> 00:08:03.599
+keep it right now for your own
+
+00:08:03.599 --> 00:08:07.039
+discretion. Anyway, getting back to the
+talk.
+
+00:08:07.039 --> 00:08:10.160
+So the thing is we have this
+
+00:08:10.160 --> 00:08:13.520
+SQL database. The goal is to keep it
+optimized.
+
+00:08:13.520 --> 00:08:16.400
+Now, why is it better optimized than just
+
+00:08:16.400 --> 00:08:20.960
+using default Org Mode?
+
+00:08:20.960 --> 00:08:23.520
+So in my talk about many big files
+
+00:08:23.520 --> 00:08:26.879
+versus a few--I keep getting.--
+you got
+
+00:08:26.879 --> 00:08:28.080
+what I was saying; I'm not going to
+
+00:08:28.080 --> 00:08:29.120
+repeat it--
+
+00:08:29.120 --> 00:08:32.240
+By the way, it is 10 to 10:00.
+
+00:08:32.240 --> 00:08:35.200
+I'm starting really to be tired now.
+
+00:08:35.200 --> 00:08:36.399
+Moving on to...
+
+00:08:36.399 --> 00:08:39.279
+What did I want to show you? So it was
+
+00:08:39.279 --> 00:08:40.800
+almost... Yes, org-elements.
+
+00:08:40.800 --> 00:08:44.959
+So what I'm going to do... I'm going to...
+
+00:08:44.959 --> 00:08:48.399
+I believe it's org-element-parse-buffer.
+
+00:08:48.399 --> 00:08:51.920
+So I was telling you about org-elements
+before.
+
+00:08:51.920 --> 00:08:53.600
+And the main command--sorry, the main
+
+00:08:53.600 --> 00:08:55.760
+function that is used by org-element
+
+00:08:55.760 --> 00:08:58.560
+is -parse-buffer. What it does (and you can
+
+00:08:58.560 --> 00:08:59.760
+see the docstring) is that it
+
+00:08:59.760 --> 00:09:01.040
+recursively parsed
+
+00:09:01.040 --> 00:09:03.279
+the buffer and returned structure,
+
+00:09:03.279 --> 00:09:04.959
+structure being all the information that
+
+00:09:04.959 --> 00:09:06.320
+we have in this buffer.
+
+00:09:06.320 --> 00:09:07.680
+So just to show you a little more, we're
+
+00:09:07.680 --> 00:09:09.600
+going to move into a scratch buffer,
+
+00:09:09.600 --> 00:09:10.880
+and what we're going to do is that we're
+
+00:09:10.880 --> 00:09:12.800
+going to write this command
+
+00:09:12.800 --> 00:09:16.320
+org-element-parse-buffer, and we're going to check the
+
+00:09:16.320 --> 00:09:17.760
+output of this command.
+
+00:09:17.760 --> 00:09:19.600
+Sorry, not this one. We're going to go
+
+00:09:19.600 --> 00:09:22.000
+in the index. So in the index file, you have
+
+00:09:22.000 --> 00:09:23.680
+a title, you have a heading, you have a
+
+00:09:23.680 --> 00:09:25.120
+link, etc. etc.
+
+00:09:25.120 --> 00:09:26.880
+So what I'm going to do, I'm going to
+
+00:09:26.880 --> 00:09:28.560
+evaluate this text.
+
+00:09:28.560 --> 00:09:30.800
+Now at the bottom in the mini buffer,
+
+00:09:32.560 --> 00:09:36.160
+you see an AST, an abstract--
+
+00:09:36.160 --> 00:09:37.600
+obviously don't remember what the S
+
+00:09:37.600 --> 00:09:39.839
+stands for... Semantic?--
+
+00:09:39.839 --> 00:09:42.720
+Huh. Interesting. Anyway. A representation
+
+00:09:42.720 --> 00:09:43.519
+of the data
+
+00:09:43.519 --> 00:09:45.279
+in a way that is exploitable by a
+
+00:09:45.279 --> 00:09:47.600
+machine. Now what I'm going to do--
+
+00:09:47.600 --> 00:09:49.839
+syntax, thank you--so what I'm going to do,
+
+00:09:49.839 --> 00:09:52.000
+I'm going to paste it inside the buffer
+
+00:09:52.000 --> 00:09:54.480
+in a way that is humanly readable.
+
+00:09:54.480 --> 00:09:56.399
+You can see that we have plenty of
+
+00:09:56.399 --> 00:09:58.800
+information. We have a section which
+
+00:09:58.800 --> 00:10:05.040
+starts at the char 1, which ends at the
+character 45.
+
+00:10:05.040 --> 00:10:07.040
+We have the content... so "Emacs Scratch"--
+
+00:10:07.040 --> 00:10:10.240
+oh actually, no, never mind, I did
+something wrong, I ran
+
+00:10:10.240 --> 00:10:11.279
+it in the wrong buffer.
+
+00:10:11.279 --> 00:10:13.040
+So actually what I'm going to do, we're
+
+00:10:13.040 --> 00:10:14.399
+going to run this command
+
+00:10:14.399 --> 00:10:16.241
+with the selected window.
+
+00:10:16.241 --> 00:10:21.120
+Next window. Okay. That's a bit of live
+
+00:10:21.120 --> 00:10:23.760
+Elisp writing for you right now.
+
+00:10:23.760 --> 00:10:25.541
+Now if I evaluate this
+
+00:10:25.541 --> 00:10:28.480
+and paste the content of the buffer,
+
+00:10:28.480 --> 00:10:30.208
+it is doing its bidding.
+
+00:10:30.208 --> 00:10:32.399
+So now what we have...
+
+00:10:32.399 --> 00:10:34.959
+We have a section. We have the keyword
+
+00:10:34.959 --> 00:10:38.160
+TITLE which you see right here. You have
+the :value.
+
+00:10:38.160 --> 00:10:39.920
+If we scroll down a little bit, we have a
+
+00:10:39.920 --> 00:10:42.480
+heading which is right here. We have the
+contents,
+
+00:10:42.480 --> 00:10:44.800
+which should be... Yes, the content is not
+
+00:10:44.800 --> 00:10:46.320
+listed exactly here, but you have a
+
+00:10:46.320 --> 00:10:48.079
+paragraph, which is this,
+
+00:10:48.079 --> 00:10:50.308
+and then you have a link, etc. etc.
+
+00:10:50.308 --> 00:10:54.640
+It is all parentheses if you're not
+used to Elisp.
+
+00:10:54.640 --> 00:10:56.320
+Like, right now, I've selected only the
+
+00:10:56.320 --> 00:10:58.640
+content of the parenthesis link.
+
+00:10:58.640 --> 00:11:00.399
+I can move like this etc. etc.
+
+00:11:00.399 --> 00:11:01.680
+I'm not... It's not an Elisp
+
+00:11:01.680 --> 00:11:05.279
+lesson that I'm doing right now, but
+basically,
+
+00:11:05.279 --> 00:11:08.399
+if we were to use the default tooling of
+
+00:11:08.399 --> 00:11:12.480
+org-roam--Org Mode, sorry, I keep
+getting too confused, sorry for that--
+
+00:11:12.480 --> 00:11:14.240
+would be extremely slow to do what
+
+00:11:14.240 --> 00:11:16.399
+we're doing. Some people
+
+00:11:16.399 --> 00:11:19.760
+who are doing some implementations of the
+
+00:11:19.760 --> 00:11:22.240
+Zettelkasten method inside Emacs have
+
+00:11:22.240 --> 00:11:26.480
+opted for this method, but the problem
+is that
+
+00:11:26.480 --> 00:11:28.975
+we think that it scales poorly.
+
+00:11:28.975 --> 00:11:33.920
+Now some other people have decided to
+not do with a database,
+
+00:11:33.920 --> 00:11:35.600
+and what they do is that they use a tool
+
+00:11:35.600 --> 00:11:37.200
+which is called ripgrep.
+
+00:11:37.200 --> 00:11:38.800
+You might know grep, which is a tool that
+
+00:11:38.800 --> 00:11:41.279
+allows you to search
+
+00:11:41.279 --> 00:11:43.440
+a file, the content of a file, for a line.
+
+00:11:43.440 --> 00:11:46.560
+So for instance, if we open vterm here,
+
+00:11:46.560 --> 00:11:48.041
+let's see... I've opened the term.
+
+00:11:48.041 --> 00:11:51.308
+I am in this repository.
+
+00:11:51.308 --> 00:11:54.399
+What I'm going to do is that I'm
+going to
+
+00:11:54.399 --> 00:11:58.000
+load the content of the file.
+
+00:11:58.000 --> 00:12:02.480
+How am I going to do this? I need to
+move to bash.
+
+00:12:02.480 --> 00:12:06.160
+Let's do grep
+
+00:12:06.160 --> 00:12:08.000
+for the line... Which links did we
+
+00:12:08.000 --> 00:12:09.519
+have... grep foo
+
+00:12:09.519 --> 00:12:11.600
+inside the file. Is it three? I can't
+
+00:12:11.600 --> 00:12:13.760
+remember. Okay. Let's do this.
+
+00:12:13.760 --> 00:12:18.079
+Am I working? No.
+
+00:12:18.079 --> 00:12:21.279
+Let's go for four? Why, is it eight?
+
+00:12:21.279 --> 00:12:22.800
+Oh, you know what, I'm just
+
+00:12:22.800 --> 00:12:24.320
+going to copy the name.
+
+00:12:24.320 --> 00:12:28.240
+There we go.
+
+00:12:28.240 --> 00:12:33.680
+Problem with live presentation, always.
+
+00:12:33.680 --> 00:12:34.800
+You know what, I'm struggling, so I'm
+
+00:12:34.800 --> 00:12:36.720
+going to drop this point. Anyway,
+
+00:12:36.720 --> 00:12:38.560
+so grep is a simple tool that allows you
+
+00:12:38.560 --> 00:12:40.000
+to search the content of a file, but
+
+00:12:40.000 --> 00:12:42.480
+ripgrep is a solution that is written
+
+00:12:42.480 --> 00:12:44.160
+in Rust and which is supposed to be--
+
+00:12:44.160 --> 00:12:48.880
+well, not supposed--which is far more
+capable.
+
+00:12:48.880 --> 00:12:50.639
+Now I'd like to talk to you about the future
+
+00:12:50.639 --> 00:12:52.320
+of org-roam. Right now, I've told you about
+
+00:12:52.320 --> 00:12:54.720
+the general concept, which is about using
+
+00:12:54.720 --> 00:12:58.399
+this SQL database, and about
+
+00:12:58.399 --> 00:13:01.519
+playing nicely with Org Mode.
+
+00:13:01.519 --> 00:13:03.279
+We think that there's something great
+
+00:13:03.279 --> 00:13:05.200
+that we can do about org-roam.
+
+00:13:05.200 --> 00:13:08.320
+Now I've been talking with a lot of
+
+00:13:08.320 --> 00:13:10.880
+people who are behind Org Mode and you
+know,
+
+00:13:10.880 --> 00:13:14.000
+they've told us, "Do you think that
+
+00:13:14.000 --> 00:13:16.880
+org-roam could have something to bring to
+
+00:13:16.880 --> 00:13:18.320
+Org Mode? Let's say,
+
+00:13:18.320 --> 00:13:20.160
+backlinks? Is there something that we
+
+00:13:20.160 --> 00:13:21.600
+could be doing to
+
+00:13:21.600 --> 00:13:25.600
+import backlinks into Org Mode?"
+
+00:13:25.600 --> 00:13:29.200
+We thought about it with Jethro and the
+problem is
+
+00:13:29.200 --> 00:13:30.800
+we've always tried to have an
+
+00:13:30.800 --> 00:13:32.720
+experimental ground,
+
+00:13:32.720 --> 00:13:36.320
+a very isolated portion of your
+system
+
+00:13:36.320 --> 00:13:37.920
+where we could track backlinks and
+
+00:13:37.920 --> 00:13:40.320
+that's why we use
+
+00:13:40.320 --> 00:13:42.320
+a slipbox directory, so that we only
+
+00:13:42.320 --> 00:13:44.880
+track backlinks in one specific place.
+
+00:13:44.880 --> 00:13:47.040
+But now, because there seems to be so
+
+00:13:47.040 --> 00:13:48.639
+much interest about the method and we
+
+00:13:48.639 --> 00:13:50.079
+have so much backing
+
+00:13:50.079 --> 00:13:52.480
+on Github--we have like
+
+00:13:53.120 --> 00:13:56.399
+2,600 stars, which is mind-boggling to us---
+
+00:13:56.399 --> 00:13:59.760
+because we have so much success...
+
+00:13:59.760 --> 00:14:02.399
+We have plenty of ideas about the future.
+
+00:14:02.399 --> 00:14:06.000
+One of the key parts of development
+being the writing
+
+00:14:06.000 --> 00:14:08.480
+of an external parser for org-roam.
+
+00:14:08.480 --> 00:14:11.839
+So I've been telling you about org-element.
+org-element runs
+
+00:14:11.839 --> 00:14:15.279
+inside Emacs. But what if
+
+00:14:15.279 --> 00:14:19.519
+we wrote a background process
+
+00:14:19.519 --> 00:14:23.600
+that could read a file, an Org Mode file,
+
+00:14:23.600 --> 00:14:25.760
+extract the same type of data that you
+
+00:14:25.760 --> 00:14:27.440
+see on your screen right now,
+
+00:14:27.440 --> 00:14:30.959
+so that we could use to update a
+database
+
+00:14:30.959 --> 00:14:33.279
+that we could use to compute the
+
+00:14:33.279 --> 00:14:34.959
+links, so that we could use it
+
+00:14:34.959 --> 00:14:37.360
+to show org-roam server all the
+
+00:14:37.360 --> 00:14:39.519
+connections between your nodes?
+
+00:14:39.519 --> 00:14:41.360
+Now there is a path of improvement here
+
+00:14:41.360 --> 00:14:44.320
+that is extremely important to us.
+
+00:14:44.320 --> 00:14:47.360
+But you know, that's the technical aspect.
+
+00:14:47.360 --> 00:14:48.639
+I'm out of time. I'm just going to
+
+00:14:48.639 --> 00:14:51.360
+take one more minute to finish on this
+point.
+
+00:14:51.360 --> 00:14:57.680
+We believe that org-roam has the
+potential to be a
+
+00:14:57.680 --> 00:14:58.399
+think tank,
+
+00:14:58.399 --> 00:15:00.639
+in a way, for Org Mode and the way we
+
+00:15:00.639 --> 00:15:01.920
+think about
+
+00:15:01.920 --> 00:15:04.079
+note-taking in general. I've stressed a
+
+00:15:04.079 --> 00:15:06.079
+great deal in my first presentation--
+
+00:15:06.079 --> 00:15:10.240
+sorry, the one I did before Noorah--that
+
+00:15:10.240 --> 00:15:12.480
+org-roam is really great as a way to
+
+00:15:12.480 --> 00:15:14.639
+think organically about knowledge.
+
+00:15:14.639 --> 00:15:17.600
+Honestly, we want to put the
+
+00:15:17.600 --> 00:15:19.279
+theory into practice with org-roam.
+
+00:15:19.279 --> 00:15:22.079
+We are holding something which has the
+
+00:15:22.079 --> 00:15:23.440
+potential to be
+
+00:15:23.440 --> 00:15:25.120
+a great factor of innovation for the
+
+00:15:25.120 --> 00:15:27.279
+future, whether it be Org Mode
+
+00:15:27.279 --> 00:15:29.600
+or even for software in general. You know,
+
+00:15:29.600 --> 00:15:31.440
+the way to think about...
+
+00:15:31.440 --> 00:15:34.880
+build nodes of knowledge in a way,
+
+00:15:34.880 --> 00:15:37.440
+and the way to represent all those ids
+
+00:15:37.440 --> 00:15:38.240
+with the graph...
+
+00:15:38.240 --> 00:15:41.600
+the way to basically have a note-taking
+system that
+
+00:15:41.600 --> 00:15:43.360
+corresponds to the research that
+
+00:15:43.360 --> 00:15:45.839
+corresponds to the way you think.
+
+00:15:45.839 --> 00:15:51.839
+I believe we are really excited about
+this and if you
+
+00:15:51.839 --> 00:15:55.360
+want to keep track of the development of
+org-roam
+
+00:15:55.360 --> 00:15:57.600
+on my YouTube channel (which is already
+
+00:15:57.600 --> 00:15:59.279
+linked a little earlier
+
+00:15:59.279 --> 00:16:02.639
+inside the pad),
+
+00:16:02.639 --> 00:16:04.240
+I do have a Youtube channel where I try
+
+00:16:04.240 --> 00:16:06.079
+to present novelties
+
+00:16:06.079 --> 00:16:09.519
+or the new stuff inside org-roam.
+
+00:16:09.519 --> 00:16:11.519
+I'll also be recording videos about the
+
+00:16:11.519 --> 00:16:13.360
+technical aspects, about the direction
+
+00:16:13.360 --> 00:16:15.519
+that we're taking with org-roam.
+
+00:16:15.519 --> 00:16:18.000
+If you want to talk with us we are
+
+00:16:18.000 --> 00:16:22.160
+always available either on IRC
+channel #org-roam
+
+00:16:22.160 --> 00:16:25.279
+(I believe there's a dash between org
+and roam) but also
+
+00:16:25.279 --> 00:16:27.279
+on the Discourse. I'll be putting all
+
+00:16:27.279 --> 00:16:29.440
+the links inside the conversation.
+
+00:16:29.440 --> 00:16:31.199
+And that's me done. So, thank you for
+
+00:16:31.199 --> 00:16:32.880
+listening. Now I'll be taking
+
+00:16:32.880 --> 00:16:34.560
+three minutes of questions so as to be
+
+00:16:34.560 --> 00:16:37.360
+right on time.
+
+00:16:37.360 --> 00:16:39.920
+(Amin: Many thanks for your awesome talk, Leo.)
+
+00:16:39.920 --> 00:16:41.120
+Leo: Thank you.
+
+00:16:41.120 --> 00:16:43.040
+I'm just refreshing the page, and I'm
+
+00:16:43.040 --> 00:16:44.959
+going to scroll down to my
+
+00:16:44.959 --> 00:16:49.600
+talk if I can find the right section.
+
+00:16:49.600 --> 00:16:53.120
+Let me just scroll a little bit.
+
+00:16:53.120 --> 00:16:55.600
+Reproducible Emacs. No, I think it's
+
+00:16:55.600 --> 00:16:57.120
+slower...
+
+00:16:57.120 --> 00:16:59.279
+We have so many questions, so at the
+
+00:16:59.279 --> 00:17:00.639
+same time I'm pissed because I can't
+
+00:17:00.639 --> 00:17:01.120
+find it,
+
+00:17:01.120 --> 00:17:02.639
+but I'm really, really impressed by the
+
+00:17:02.639 --> 00:17:05.360
+number of questions that we had. (Amin: Oh yeah.
+
+00:17:05.360 --> 00:17:07.760
+Yours is about I think about line 600
+
+00:17:07.760 --> 00:17:08.260
+or so.)
+
+00:17:09.919 --> 00:17:13.199
+Leo: Yes, got it splendid.
+
+00:17:13.199 --> 00:17:16.400
+So, the questions. "So why not run a
+
+00:17:16.400 --> 00:17:18.160
+background Emacs for parsing instead of
+
+00:17:18.160 --> 00:17:19.919
+implementing a new parser?"
+
+00:17:19.919 --> 00:17:22.559
+I believe we've had this question.
+
+00:17:22.559 --> 00:17:24.480
+I was giving a similar talk
+
+00:17:24.480 --> 00:17:27.600
+earlier this week--and this week,
+
+00:17:27.600 --> 00:17:31.679
+I'm not French, this week, sorry--and
+
+00:17:31.679 --> 00:17:33.008
+someone asked me this question.
+
+00:17:33.008 --> 00:17:35.679
+The thing is running a background Emacs
+
+00:17:35.679 --> 00:17:38.320
+process... You know, it sounds great,
+
+00:17:38.320 --> 00:17:40.400
+but it's also very limited because all
+
+00:17:40.400 --> 00:17:41.760
+the problems we have
+
+00:17:41.760 --> 00:17:45.520
+about concurrency, about threads in Emacs...
+
+00:17:45.520 --> 00:17:48.160
+Well, yes, we can forward all our calls to
+
+00:17:48.160 --> 00:17:49.200
+background Emacs
+
+00:17:49.200 --> 00:17:52.240
+just like when you export a file
+
+00:17:52.240 --> 00:17:56.400
+with... Sorry,
+
+00:17:56.400 --> 00:17:57.840
+Amin, could you mute microphone when
+
+00:17:57.840 --> 00:17:58.799
+you're not speaking, it's a little hard for
+
+00:17:58.799 --> 00:18:01.520
+me to concentrate?
+
+00:18:01.520 --> 00:18:03.600
+That's fine. Don't worry.
+
+00:18:04.640 --> 00:18:06.960
+Where was I? I'm sorry. The
+
+00:18:06.960 --> 00:18:07.679
+question. Yes.
+
+00:18:07.679 --> 00:18:09.280
+So, basically, forwarding all the
+
+00:18:09.280 --> 00:18:11.840
+questions--sorry, all our queries to a
+
+00:18:11.840 --> 00:18:13.039
+background Emacs.
+
+00:18:13.039 --> 00:18:16.000
+That is what org export is doing. Like,
+
+00:18:16.000 --> 00:18:17.960
+you have the ability to
+
+00:18:17.960 --> 00:18:20.799
+asynchronously export LaTeX documents,
+
+00:18:20.799 --> 00:18:22.080
+ODT documents from
+
+00:18:22.080 --> 00:18:24.480
+Org Mode. It uses a very minimal
+
+00:18:24.480 --> 00:18:26.000
+version of Emacs to do that. But the
+
+00:18:26.000 --> 00:18:28.240
+problem is that we think that it's not
+
+00:18:28.240 --> 00:18:30.320
+going to scale as well as a true
+
+00:18:30.320 --> 00:18:33.039
+genuine background process. Since we
+
+00:18:33.039 --> 00:18:34.480
+have been talking a lot
+
+00:18:34.480 --> 00:18:36.000
+as far as the Org Mode development is
+
+00:18:36.000 --> 00:18:38.160
+concerned about,
+
+00:18:38.160 --> 00:18:40.640
+writing a proper parser, writing a proper
+
+00:18:40.640 --> 00:18:43.440
+documentation for the parsing of Org
+Mode files and
+
+00:18:43.440 --> 00:18:46.000
+writing a proper document standard
+
+00:18:46.000 --> 00:18:48.400
+that says, okay, this is how the Org Mode
+
+00:18:48.400 --> 00:18:50.000
+format works, you know, to
+
+00:18:50.000 --> 00:18:52.000
+basically have a way to not fall into
+
+00:18:52.000 --> 00:18:55.120
+the traps of Markdown which has many
+
+00:18:55.120 --> 00:18:56.559
+many standards...
+
+00:18:56.559 --> 00:18:58.480
+We need to think about this and we
+
+00:18:58.480 --> 00:19:00.000
+believe that org-roam has
+
+00:19:00.000 --> 00:19:03.120
+the ability to think about these
+questions.
+
+00:19:03.120 --> 00:19:04.640
+As a person, I'm also really interested
+
+00:19:04.640 --> 00:19:06.400
+about this.
+
+00:19:06.400 --> 00:19:07.840
+I can take the questions, Amin, so don't
+
+00:19:07.840 --> 00:19:10.160
+worry about feeding them to me. So how
+
+00:19:10.160 --> 00:19:11.760
+often does the
+
+00:19:11.760 --> 00:19:13.679
+DB index get updated in order to contain
+
+00:19:13.679 --> 00:19:15.175
+changes within the Org files?
+
+00:19:15.175 --> 00:19:17.360
+So we have two ways: either we
+
+00:19:17.360 --> 00:19:19.440
+update as soon as you save a file,
+
+00:19:19.440 --> 00:19:22.160
+or we have a timer which is an idle
+
+00:19:22.160 --> 00:19:23.600
+timer, which waits... Okay
+
+00:19:23.600 --> 00:19:25.600
+the user has not inputted
+
+00:19:25.600 --> 00:19:26.960
+anything in the last
+
+00:19:26.960 --> 00:19:29.360
+five seconds, so it's time to queue a
+
+00:19:29.360 --> 00:19:30.080
+database--parsing--
+
+00:19:30.080 --> 00:19:33.039
+a rebuild of the data, not an
+
+00:19:33.039 --> 00:19:33.919
+incrementation
+
+00:19:33.919 --> 00:19:37.120
+of the database, I should say.
+
+00:19:37.120 --> 00:19:38.799
+"Did you ever think of..." I believe I
+
+00:19:38.799 --> 00:19:40.320
+have one more minute and then
+
+00:19:40.320 --> 00:19:42.240
+I'll hand it to the other folks.
+
+00:19:42.240 --> 00:19:43.440
+"Do you ever think of opening up or
+
+00:19:43.440 --> 00:19:45.440
+designing the SQL DB as a general Org
+
+00:19:45.440 --> 00:19:47.200
+speed up tool outside of org-roam so that
+
+00:19:47.200 --> 00:19:49.141
+other libraries that do execute
+
+00:19:49.141 --> 00:19:50.208
+complex queries are able to use it?"
+
+00:19:50.208 --> 00:19:53.341
+Well, a lot of people have been working
+on this
+
+00:19:53.341 --> 00:19:54.640
+I believe alphapapa has been
+
+00:19:54.640 --> 00:19:56.480
+thinking quite a lot about this.
+
+00:19:56.480 --> 00:20:01.120
+org-ql is... The ql stands for
+query language.
+
+00:20:01.120 --> 00:20:04.720
+I can't remember now what the backend is
+
+00:20:04.720 --> 00:20:08.080
+for org-ql, but the idea is
+
+00:20:08.080 --> 00:20:10.080
+relatively the same, you know. It's about
+
+00:20:10.080 --> 00:20:13.039
+finding ways to optimize the way we
+
+00:20:13.039 --> 00:20:14.880
+store the data about an Org Mode file
+
+00:20:14.880 --> 00:20:16.640
+and how we retrieve it,
+
+00:20:16.640 --> 00:20:20.400
+and SQL for us seems to seem to be a
+
+00:20:20.400 --> 00:20:22.159
+good idea. Now, obviously,
+
+00:20:22.159 --> 00:20:24.240
+maybe we could do something about
+
+00:20:24.240 --> 00:20:26.080
+Org Mode, but the problem is, I think, a
+
+00:20:26.080 --> 00:20:27.360
+background process
+
+00:20:27.360 --> 00:20:30.799
+is not necessarily in
+
+00:20:30.799 --> 00:20:32.960
+the core mentality of Org Mode. But it's
+
+00:20:32.960 --> 00:20:36.080
+definitely something that we
+could suggest
+
+00:20:36.080 --> 00:20:37.679
+when we are a little more mature,
+because, well,
+
+00:20:37.679 --> 00:20:40.960
+org-roam was started last February and so
+
+00:20:40.960 --> 00:20:43.008
+it's a fairly young project in a way.
+
+00:20:43.008 --> 00:20:45.840
+I see plenty more questions, but
+
+00:20:45.840 --> 00:20:48.400
+I'm out of time, folks, so I'm not sure.
+
+00:20:48.400 --> 00:20:50.559
+The other speaker is probably ready.
+
+00:20:50.559 --> 00:20:52.559
+So what I'll do is I'll probably try to
+
+00:20:52.559 --> 00:20:54.000
+answer your questions when I get the
+
+00:20:54.000 --> 00:20:55.360
+time inside the pad,
+
+00:20:55.360 --> 00:20:58.960
+but feel free to ping me on IRC
+
+00:20:58.960 --> 00:21:01.039
+or on the different channels we have
+
+00:21:01.039 --> 00:21:02.320
+for org-roam, and
+
+00:21:02.320 --> 00:21:04.000
+I'll answer them with as much
+
+00:21:04.000 --> 00:21:05.520
+energy as I can gather.
+
+00:21:05.520 --> 00:21:07.600
+All right, thank you so much.
+
+00:21:08.880 --> 00:21:10.808
+(Amin: Thank you again very much, Leo.)
+
+00:21:10.808 --> 00:21:14.000
+Leo: And that was me done for today. So
+you'll see me at the end, but I'm
+
+00:21:14.000 --> 00:21:15.840
+officially done and I am free of
+
+00:21:15.840 --> 00:21:17.840
+thoughts. I can focus on
+
+00:21:17.840 --> 00:21:22.640
+sleeping, probably. (Amin: Awesome)
+
+00:21:22.640 --> 00:21:27.760
+Leo: See you guys later. Bye.
diff --git a/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt b/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt
new file mode 100644
index 00000000..f2db5398
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--19-sharing-blogs-and-more-with-org-webring--brett-gilio.vtt
@@ -0,0 +1,664 @@
+WEBVTT
+
+00:00:01.120 --> 00:00:03.120
+Hi, my name is Brett Gillio,
+
+00:00:03.120 --> 00:00:04.560
+and today I'll be sharing a project that
+
+00:00:04.560 --> 00:00:05.920
+several people and I have been working on
+
+00:00:05.920 --> 00:00:08.480
+for the past few months, called
+org-webring.
+
+00:00:08.480 --> 00:00:10.559
+The essential idea behind org-webring
+
+00:00:10.559 --> 00:00:12.240
+is to take the power of creating a
+
+00:00:12.240 --> 00:00:13.679
+website with Org Mode
+
+00:00:13.679 --> 00:00:15.360
+and its built-in features to control
+
+00:00:15.360 --> 00:00:17.520
+HTML and XML output
+
+00:00:17.520 --> 00:00:19.119
+and utilize it to share blogs, git
+
+00:00:19.119 --> 00:00:22.640
+commits, or other rss or atom static
+feed content
+
+00:00:22.640 --> 00:00:25.920
+to share directly with your audiences.
+
+00:00:25.920 --> 00:00:28.362
+My website is created entirely using
+
+00:00:28.362 --> 00:00:30.000
+Org Mode. I love the amount of
+
+00:00:30.000 --> 00:00:31.679
+flexibility it offers me while keeping
+
+00:00:31.679 --> 00:00:34.079
+everything quite simple.
+
+00:00:34.079 --> 00:00:35.920
+I am able to put information about
+
+00:00:35.920 --> 00:00:37.600
+myself, a blog,
+
+00:00:37.600 --> 00:00:40.079
+and my org-webring tool directly on on
+
+00:00:40.079 --> 00:00:42.879
+the home page using simple Org syntax.
+
+00:00:42.879 --> 00:00:44.640
+As you can see, I am currently displaying
+
+00:00:44.640 --> 00:00:46.239
+three posts on my website.
+
+00:00:46.239 --> 00:00:48.239
+The first is the Guix Day announcement,
+
+00:00:48.239 --> 00:00:49.840
+the second is a quarterly financial
+
+00:00:49.840 --> 00:00:51.039
+update from SourceHut,
+
+00:00:51.039 --> 00:00:52.320
+and the third is a post from
+
+00:00:52.320 --> 00:00:55.120
+Drew DeVault's blog. Drew DeVault,
+by the way--
+
+00:00:55.120 --> 00:00:57.680
+his open ring is what helped inspire
+
+00:00:57.680 --> 00:01:01.359
+what is today org-webring.
+All this information is
+
+00:01:01.359 --> 00:01:03.440
+gathered using a sort of manifest file
+
+00:01:03.440 --> 00:01:05.360
+that org-webring will use to acquire
+
+00:01:05.360 --> 00:01:06.746
+and place the information in the
+
+00:01:06.746 --> 00:01:07.760
+correct format
+
+00:01:07.760 --> 00:01:10.000
+according to your specification.
+
+00:01:10.000 --> 00:01:11.729
+additionally, you can see that the
+
+00:01:11.729 --> 00:01:14.159
+Guix Day announcement's post is pinned.
+
+00:01:14.159 --> 00:01:17.200
+Stylization is likewise controlled by
+using CSS.
+
+00:01:17.200 --> 00:01:18.960
+You can add nice subtle color changes on
+
+00:01:18.960 --> 00:01:20.720
+mouse hover or control the size of the
+
+00:01:20.720 --> 00:01:23.759
+flexboxes, all using standard CSS.
+
+00:01:23.759 --> 00:01:28.320
+Let's examine a simple scenario of using
+org-webring.
+
+00:01:28.320 --> 00:01:30.400
+After you have org-webring installed,
+
+00:01:30.400 --> 00:01:32.000
+you'll be able to create a manifest file
+
+00:01:32.000 --> 00:01:33.759
+that looks something like this.
+
+00:01:33.759 --> 00:01:35.680
+This particular manifest file is an
+
+00:01:35.680 --> 00:01:37.840
+example offered in the repository under
+
+00:01:37.840 --> 00:01:39.520
+the assets directory.
+
+00:01:39.520 --> 00:01:41.200
+Please feel free to utilize them as a
+
+00:01:41.200 --> 00:01:42.640
+starting point if you are interested in
+
+00:01:42.640 --> 00:01:44.399
+using org-webring.
+
+00:01:44.399 --> 00:01:46.320
+As you can see here, we are able to place
+
+00:01:46.320 --> 00:01:48.640
+an RSS or ATOM feed in this file and
+
+00:01:48.640 --> 00:01:50.479
+specify information about the feed we
+
+00:01:50.479 --> 00:01:51.920
+wish to produce.
+
+00:01:51.920 --> 00:01:54.640
+For example: the total number of items
+
+00:01:54.640 --> 00:01:56.159
+and the total number of entries per
+
+00:01:56.159 --> 00:01:57.439
+source item.
+
+00:01:57.439 --> 00:01:59.439
+Additionally, you're able to filter posts
+
+00:01:59.439 --> 00:02:02.079
+you feel would not be relevant to your
+web ring.
+
+00:02:02.079 --> 00:02:03.843
+We can take this example file,
+
+00:02:03.843 --> 00:02:13.120
+run the dispatch and see the result.
+
+00:02:13.120 --> 00:02:15.280
+The web ring displays a proper summary
+
+00:02:15.280 --> 00:02:17.760
+set to a character limit you can specify.
+
+00:02:17.760 --> 00:02:19.453
+Additionally, all the links in the
+
+00:02:19.453 --> 00:02:20.814
+web ring are navigatable and
+
+00:02:20.814 --> 00:02:22.560
+will open in a new tab.
+
+00:02:22.560 --> 00:02:24.719
+That way, if someone wishes to
+view the content,
+
+00:02:24.719 --> 00:02:25.920
+they simply need to
+
+00:02:25.920 --> 00:02:30.319
+click on the title or their source name.
+
+00:02:30.319 --> 00:02:32.879
+Now this particular example is not
+
+00:02:32.879 --> 00:02:34.800
+stylized because we have not given the
+
+00:02:34.800 --> 00:02:37.120
+website a CSS file to reference.
+
+00:02:37.120 --> 00:02:38.720
+Let's examine what is happening from
+
+00:02:38.720 --> 00:02:40.319
+behind the scenes a little bit.
+
+00:02:40.319 --> 00:02:42.621
+From inside of the Org Mode file,
+
+00:02:42.621 --> 00:02:48.800
+let's run the org-webring function.
+
+00:02:48.800 --> 00:02:51.280
+As you can see, it takes that XML file
+
+00:02:51.280 --> 00:02:54.239
+and processes it into the correct HTML.
+
+00:02:54.239 --> 00:02:55.938
+You will then be able to embed this
+
+00:02:55.938 --> 00:02:57.758
+Org function into another Org file
+
+00:02:57.758 --> 00:03:00.080
+to be able to display it on your website.
+
+00:03:00.080 --> 00:03:05.440
+Pretty neat. Let's look at
+another example.
+
+00:03:05.440 --> 00:03:07.360
+On my website, we have an example of
+
+00:03:07.360 --> 00:03:09.519
+using org-webring to reply to another
+
+00:03:09.519 --> 00:03:10.800
+blog post.
+
+00:03:10.800 --> 00:03:12.178
+What I have here is a post from
+
+00:03:12.178 --> 00:03:14.640
+Drew DeVault's blog. It is showcased clearly at
+
+00:03:14.640 --> 00:03:16.239
+the top as a single entry,
+
+00:03:16.239 --> 00:03:18.220
+and you can see it is pinned.
+
+00:03:18.220 --> 00:03:19.889
+The pinning functionality ensures
+
+00:03:19.889 --> 00:03:20.800
+that this post is
+
+00:03:20.800 --> 00:03:21.852
+moved to the front of the
+
+00:03:21.852 --> 00:03:23.120
+hypothetical web ring
+
+00:03:23.120 --> 00:03:25.232
+and guaranteeing its visibility.
+
+00:03:25.232 --> 00:03:27.599
+This is then coupled with a
+few changes, such as
+
+00:03:27.599 --> 00:03:29.840
+disabling the generation time
+
+00:03:29.840 --> 00:03:31.552
+(which would not be relevant to the
+readers)
+
+00:03:31.552 --> 00:03:34.000
+and a change of the text
+in the header
+
+00:03:34.000 --> 00:03:37.040
+to demonstrate it is indeed
+used as a reply.
+
+00:03:37.040 --> 00:03:39.599
+An example of this is also provided in
+
+00:03:39.599 --> 00:03:42.319
+the assets directory.
+
+00:03:42.319 --> 00:03:44.146
+Last, we can use org-webring
+
+00:03:44.146 --> 00:03:45.519
+as a blog planet,
+
+00:03:45.519 --> 00:03:47.599
+which is one of my favorites. This takes
+
+00:03:47.599 --> 00:03:49.360
+after the Emacs Life planet, which I
+
+00:03:49.360 --> 00:03:51.722
+believe is moderated
+by Sacha and others,
+
+00:03:51.722 --> 00:03:53.200
+as well as the Haskell and
+
+00:03:53.200 --> 00:03:54.720
+OCaml planets.
+
+00:03:54.720 --> 00:03:56.959
+A planet, for the uninitiated, is a
+
+00:03:56.959 --> 00:03:58.485
+curated form of content sharing
+
+00:03:58.485 --> 00:04:00.159
+about a set of topics.
+
+00:04:00.159 --> 00:04:02.400
+The Emacs Life, Haskell, and OCaml planets,
+
+00:04:02.400 --> 00:04:03.439
+as their names imply,
+
+00:04:03.439 --> 00:04:07.200
+cover Emacs, Haskell, and OCaml blogs
+respectively.
+
+00:04:07.200 --> 00:04:08.962
+Likewise, my planet covers
+
+00:04:08.962 --> 00:04:10.310
+programming language theory
+
+00:04:10.310 --> 00:04:12.239
+and category theory, primarily.
+
+00:04:12.239 --> 00:04:13.920
+It works in essentially the same way as
+
+00:04:13.920 --> 00:04:15.840
+the org-webring. You provide it with a
+
+00:04:15.840 --> 00:04:17.519
+list of feeds that get parsed.
+
+00:04:17.519 --> 00:04:19.317
+However, unlike the web ring,
+
+00:04:19.317 --> 00:04:21.086
+the planet function has no limits
+
+00:04:21.086 --> 00:04:23.040
+on the number of entries per source,
+
+00:04:23.040 --> 00:04:24.639
+and the display number of posts is
+
+00:04:24.639 --> 00:04:27.600
+increased significantly.
+
+00:04:27.600 --> 00:04:29.759
+The syndicates or sources have their
+
+00:04:29.759 --> 00:04:31.429
+feeds shown visibly to users
+
+00:04:31.429 --> 00:04:33.759
+who may wish to fetch them.
+
+00:04:33.759 --> 00:04:35.440
+A planet is typically meant to be a
+
+00:04:35.440 --> 00:04:37.040
+standalone page and not something you
+
+00:04:37.040 --> 00:04:39.440
+would embed in another page like a
+web ring.
+
+00:04:39.440 --> 00:04:41.680
+All this is provided under a single file
+
+00:04:41.680 --> 00:04:43.009
+in the org-webring package,
+
+00:04:43.009 --> 00:04:45.280
+as the code reuse is quite high.
+
+00:04:45.280 --> 00:04:48.240
+Aside from my own website, we can view
+
+00:04:48.240 --> 00:04:49.840
+the org-webring being used in neat
+
+00:04:49.840 --> 00:04:52.400
+context with varying stylizations.
+
+00:04:52.400 --> 00:04:53.642
+Here's a nice example
+
+00:04:53.642 --> 00:04:57.680
+from Mikhail Kirillov at w96k.ru,
+
+00:04:57.680 --> 00:05:00.960
+featuring a four symmetrical
+flexbox layout,
+
+00:05:00.960 --> 00:05:02.324
+an appropriate Russian language
+
+00:05:02.324 --> 00:05:04.225
+time encoding, which can be also set
+
+00:05:04.225 --> 00:05:07.360
+in the org-webring manifest.
+
+00:05:07.360 --> 00:05:08.892
+Another is an example from
+
+00:05:08.892 --> 00:05:10.400
+Camilo Mesa Gaete (https://cmezagaete.cl/),
+
+00:05:10.400 --> 00:05:13.280
+using ox-hugo with org-webring and
+
+00:05:13.280 --> 00:05:14.320
+likewise correctly
+
+00:05:14.320 --> 00:05:17.680
+features the correct Spanish
+time encoding.
+
+00:05:17.680 --> 00:05:22.240
+Last, my other website workircd.org
+
+00:05:22.240 --> 00:05:24.265
+shows the web ring being used
+
+00:05:24.265 --> 00:05:27.440
+in combination with Ocaml's tool
+link Soupault,
+
+00:05:27.440 --> 00:05:32.800
+to fetch git logs for that project.
+
+00:05:32.800 --> 00:05:34.639
+You may obtain org-webring directly
+
+00:05:34.639 --> 00:05:37.039
+from SourceHut and add it to your
+load-path.
+
+00:05:37.039 --> 00:05:39.639
+Additionally, you will need to obtain
+
+00:05:39.639 --> 00:05:43.280
+xmlgen.el, which is unfortunately
+not yet on ELPA,
+
+00:05:43.280 --> 00:05:44.960
+although I have been trying to get this
+
+00:05:44.960 --> 00:05:46.800
+rectified so I do not have to rewrite
+
+00:05:46.800 --> 00:05:49.840
+org-webring's XML to HTML parser.
+
+00:05:49.840 --> 00:05:51.759
+Or if you're one of the cool kids using
+
+00:05:51.759 --> 00:05:54.000
+my favorite package manager, GNU Guix,
+
+00:05:54.000 --> 00:06:06.319
+you can obtain it like so.
+
+00:06:06.319 --> 00:06:08.248
+All of the documentation for
+
+00:06:08.248 --> 00:06:09.840
+org-webring is available
+
+00:06:09.840 --> 00:06:12.000
+on the SourceHut website or in the README
+
+00:06:12.000 --> 00:06:15.039
+file after you check it out
+from the git tree.
+
+00:06:15.039 --> 00:06:16.586
+There are so many ways to
+
+00:06:16.586 --> 00:06:18.240
+customize org-webring,
+
+00:06:18.240 --> 00:06:20.671
+as there are just as many variables
+
+00:06:20.671 --> 00:06:23.056
+as there are parts and components
+
+00:06:23.056 --> 00:06:25.759
+to org-webring for you to change.
+
+00:06:25.759 --> 00:06:27.759
+All of this is able to be done simply
+
+00:06:27.759 --> 00:06:31.600
+from that same manifest file.
+
+00:06:31.600 --> 00:06:33.919
+Now, taking a moment to examine some of
+
+00:06:33.919 --> 00:06:35.759
+the org-webring code,
+
+00:06:35.759 --> 00:06:37.840
+you can see it is all done in the same
+
+00:06:37.840 --> 00:06:40.160
+Elisp that everybody else is used to.
+
+00:06:40.160 --> 00:06:43.120
+Now, admittedly, my Elisp is not as
+
+00:06:43.120 --> 00:06:45.977
+strong as probably somebody else's,
+
+00:06:45.977 --> 00:06:48.678
+so if you are an Elisp ninja,
+
+00:06:48.678 --> 00:06:50.479
+please feel free to
+
+00:06:50.479 --> 00:06:52.633
+send a contribution or a patch
+
+00:06:52.633 --> 00:06:54.880
+and tell me what I'm doing wrong.
+
+00:06:54.880 --> 00:06:56.836
+I am not going to be offended
+
+00:06:56.836 --> 00:06:58.233
+by that at all. I would love to
+
+00:06:58.233 --> 00:06:59.982
+see this code to improve.
+
+00:06:59.982 --> 00:07:04.160
+Otherwise, I don't think it's half bad,
+
+00:07:04.160 --> 00:07:06.800
+considering that my experience with
+
+00:07:06.800 --> 00:07:08.880
+Lisps is usually in Scheme.
+
+00:07:08.880 --> 00:07:10.774
+Me moving from Scheme to Elisp
+
+00:07:10.774 --> 00:07:13.680
+was not all that hard.
+
+00:07:13.680 --> 00:07:17.120
+Taking the syntax apart,
+
+00:07:17.120 --> 00:07:20.880
+we're able to see that we can
+
+00:07:20.880 --> 00:07:23.331
+fetch URLs, which are then
+
+00:07:23.331 --> 00:07:26.505
+parsed and filtered, sorted, and then
+
+00:07:26.505 --> 00:07:29.151
+kind of reverse-sorted, rather,
+
+00:07:29.151 --> 00:07:32.960
+to get you to the web ring result.
+
+00:07:32.960 --> 00:07:34.639
+All of this is then passed through
+
+00:07:34.639 --> 00:07:37.840
+different parts of the xmlgen.el
+
+00:07:37.840 --> 00:07:40.280
+functions which gets you that HTML
+
+00:07:40.280 --> 00:07:43.520
+that you saw earlier.
+
+00:07:43.520 --> 00:07:45.599
+org-webring is fully free software
+
+00:07:45.599 --> 00:07:47.440
+distributed under the GNU General Public
+
+00:07:47.440 --> 00:07:49.280
+License versions 3 or later.
+
+00:07:49.280 --> 00:07:52.000
+At your option, I love accepting patches
+
+00:07:52.000 --> 00:07:53.120
+and collaborating.
+
+00:07:53.120 --> 00:07:55.166
+I hope you will consider
+using org-webring.
+
+00:07:55.166 --> 00:07:56.720
+You can contact me on
+
+00:07:56.720 --> 00:07:59.390
+Freenode, OFTC, or many other
+
+00:07:59.390 --> 00:08:01.520
+IRC networks at brettgillio,
+
+00:08:01.520 --> 00:08:05.120
+or email me at brettg@gnu.org.
+
+00:08:05.120 --> 00:08:09.327
+Thanks so much to Amin Bandali and the
+EmacsConf organizers,
+
+00:08:09.327 --> 00:08:13.840
+and to you, the audience, thanks.
diff --git a/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt
new file mode 100644
index 00000000..a2e0ccae
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--20-omg-macros--corwin-brust.vtt
@@ -0,0 +1,1446 @@
+WEBVTT
+
+00:00:00.480 --> 00:00:02.796
+Good evening again. I think
+
+00:00:02.796 --> 00:00:04.319
+I have a little time here
+
+00:00:04.319 --> 00:00:06.447
+to talk about macros.
+
+00:00:06.447 --> 00:00:09.440
+Is there still room in
+our schedule for that,
+
+00:00:09.440 --> 00:00:11.440
+or should I just jump to some of
+
+00:00:11.440 --> 00:00:12.559
+my thoughts on the day?
+
+00:00:12.559 --> 00:00:15.920
+([Amin:] Pretty sure we
+
+00:00:15.920 --> 00:00:17.039
+have some time.)
+
+00:00:17.039 --> 00:00:19.039
+[Corwin:] All right. Great.
+([Amin:] Yeah, go for it.)
+
+00:00:19.039 --> 00:00:20.720
+Well, I'll just dive into my
+
+00:00:20.720 --> 00:00:22.384
+prepared thing here then.
+
+00:00:22.384 --> 00:00:24.720
+(Amin: yeah, actually, you're
+right on time, so...)
+
+00:00:24.720 --> 00:00:27.664
+[Corwin:] oh what an amazing thing.
+
+00:00:27.664 --> 00:00:31.199
+I just... You know, I have been
+trying to do what I...
+
+00:00:31.199 --> 00:00:33.040
+I've got a big thank you planned
+
+00:00:33.040 --> 00:00:36.239
+at the end, but let me just say,
+
+00:00:36.239 --> 00:00:39.200
+it's been really cool to watch the
+
+00:00:39.200 --> 00:00:42.160
+way that people work together.
+
+00:00:42.160 --> 00:00:46.800
+([Amin:] Absolutely. It's...
+This whole event today has been
+
+00:00:46.800 --> 00:00:50.879
+nothing but awesome, and
+
+00:00:50.879 --> 00:00:53.120
+no little part thanks to all of the help
+
+00:00:53.120 --> 00:00:56.909
+from all of you guys and everyone.
+
+00:00:56.909 --> 00:00:59.120
+Yeah, it's awesome.
+
+00:00:59.120 --> 00:01:03.065
+With that, I'll just shut up
+for now.
+
+00:01:03.065 --> 00:01:04.891
+Take it away, Corwin.)
+
+00:01:04.891 --> 00:01:06.479
+[Corwin:] Who knows how to make
+
+00:01:06.479 --> 00:01:09.840
+make that the default in good old smex?
+
+00:01:09.840 --> 00:01:12.799
+All right. So I'm gonna try to continue
+
+00:01:12.799 --> 00:01:14.551
+my theme from the previous talk.
+
+00:01:14.551 --> 00:01:16.393
+I'm a longtime Emacs user,
+
+00:01:16.393 --> 00:01:20.240
+but I'm a pretty new person
+
+00:01:20.240 --> 00:01:22.380
+to trying to really understand
+
+00:01:22.380 --> 00:01:24.960
+what's going on within Emacs and make
+
+00:01:24.960 --> 00:01:28.240
+my customizations to it--simple for
+
+00:01:28.240 --> 00:01:30.960
+what I tend to just think of will work.
+
+00:01:30.960 --> 00:01:33.566
+And maybe that's a nice bow
+
+00:01:33.566 --> 00:01:36.240
+to put on that earlier talk.
+
+00:01:40.479 --> 00:01:44.981
+Let's see here now. It's C-x M-i.
+
+00:01:44.981 --> 00:01:48.159
+That's right.
+
+00:01:48.159 --> 00:01:52.960
+And let's try that again. Okay, good.
+
+00:01:52.960 --> 00:01:55.240
+So demoing is fun,
+
+00:01:55.240 --> 00:01:57.192
+but I will save most of that
+
+00:01:57.192 --> 00:01:59.759
+for tomorrow where my
+
+00:01:59.759 --> 00:02:02.750
+dear friend and co-collaborator
+
+00:02:02.750 --> 00:02:04.799
+in bringing you the dungeon-mode project,
+
+00:02:04.799 --> 00:02:07.261
+which is sort of the exciting thing
+
+00:02:07.261 --> 00:02:10.800
+that we hope you'll be interested in,
+
+00:02:10.800 --> 00:02:15.680
+gets a little more of a reveal.
+
+00:02:15.680 --> 00:02:19.360
+Tonight, I'll just close saying
+
+00:02:19.360 --> 00:02:22.640
+a few things about the process of
+
+00:02:22.640 --> 00:02:25.680
+making it and continuing my theme of
+community.
+
+00:02:25.680 --> 00:02:29.760
+First of all, a specific and upfront
+shout out
+
+00:02:29.760 --> 00:02:33.120
+to tv's wasamasa who
+
+00:02:33.120 --> 00:02:36.239
+absolutely shaped and guided this
+
+00:02:36.239 --> 00:02:38.582
+this program. I may have taken out
+
+00:02:38.582 --> 00:02:39.898
+a slide with your name on it,
+
+00:02:39.898 --> 00:02:43.599
+but thank you.
+
+00:02:43.599 --> 00:02:46.479
+So when we think about Emacs macros
+
+00:02:46.479 --> 00:02:50.239
+and the power that they give us,
+
+00:02:53.280 --> 00:02:54.720
+I think about them as a really
+
+00:02:54.720 --> 00:02:56.400
+deep rabbit hole. They confuse
+
+00:02:56.400 --> 00:03:00.239
+people a lot. And so, to try to center
+
+00:03:00.239 --> 00:03:02.480
+myself on that, I remember first that
+
+00:03:03.599 --> 00:03:09.599
+they're going to be talking to us
+about code.
+
+00:03:09.599 --> 00:03:13.519
+Excuse me, I realize I hadn't
+set my timer.
+
+00:03:13.519 --> 00:03:18.000
+Here we are.
+
+00:03:18.000 --> 00:03:20.543
+So a simple macro syntax is
+
+00:03:20.543 --> 00:03:22.239
+going to generate
+
+00:03:22.239 --> 00:03:25.920
+something that is implicitly confusing
+
+00:03:25.920 --> 00:03:27.657
+to somebody that knows the syntax
+
+00:03:27.657 --> 00:03:28.988
+of Emacs Lisp well.
+
+00:03:28.988 --> 00:03:30.785
+We see something like this
+
+00:03:30.785 --> 00:03:32.784
+and a veteran eye says
+
+00:03:32.784 --> 00:03:36.239
+"That x isn't quoted. What's going on?"
+
+00:03:36.239 --> 00:03:39.840
+but it can be hard to miss.
+
+00:03:39.840 --> 00:03:43.040
+A lot of the functions (as we'll talk
+
+00:03:43.040 --> 00:03:46.640
+about in a moment) that are built
+into Emacs
+
+00:03:46.640 --> 00:03:48.572
+really are macros, so a lot of
+
+00:03:48.572 --> 00:03:50.480
+Emacs features work this way.
+
+00:03:50.480 --> 00:03:53.040
+It might be scary, but we have to look at
+
+00:03:53.040 --> 00:03:54.640
+it closely if we really want to get
+
+00:03:54.640 --> 00:03:58.400
+friendly with Emacs.
+
+00:03:58.400 --> 00:04:01.439
+Let's just jump right into defmacro,
+
+00:04:01.439 --> 00:04:03.920
+which is our key entry point.
+
+00:04:04.720 --> 00:04:05.833
+The notes from this talk
+
+00:04:05.833 --> 00:04:09.420
+include the link to that,
+
+00:04:09.420 --> 00:04:12.000
+which... Definitely
+
+00:04:12.000 --> 00:04:14.640
+read through a couple of times.
+
+00:04:14.640 --> 00:04:16.000
+That may take you through
+
+00:04:16.000 --> 00:04:19.440
+into the cl-def macro, which adds
+
+00:04:19.440 --> 00:04:23.440
+the Common Lisp extensions.
+
+00:04:23.440 --> 00:04:28.080
+Definitely challenging.
+
+00:04:28.080 --> 00:04:30.560
+I've struggled there,
+
+00:04:30.560 --> 00:04:31.759
+as we'll take a look at
+
+00:04:31.759 --> 00:04:34.800
+in a moment.
+
+00:04:34.800 --> 00:04:36.266
+So I haven't played too much with
+
+00:04:36.266 --> 00:04:38.320
+cl-maclet. Perhaps success in
+
+00:04:38.320 --> 00:04:40.804
+in that keyword space
+
+00:04:40.804 --> 00:04:44.320
+and figuring out what
+the right balance is there
+
+00:04:44.320 --> 00:04:46.000
+will give me the confidence to try
+
+00:04:46.000 --> 00:04:51.680
+some more lexical macros.
+
+00:04:51.680 --> 00:04:53.402
+Let me also briefly introduce
+
+00:04:53.402 --> 00:04:55.134
+the comma (,) and back quote (`).
+
+00:04:55.134 --> 00:04:57.389
+If you have allowed your eyes
+
+00:04:57.389 --> 00:04:59.321
+to cross when you see these,
+
+00:04:59.321 --> 00:05:03.113
+that's not a shameful,
+shameful thing.
+
+00:05:03.113 --> 00:05:06.080
+It's confusing, and we should be
+
+00:05:06.080 --> 00:05:07.543
+alerting each other
+
+00:05:07.543 --> 00:05:09.520
+when we stick macros in,
+
+00:05:09.520 --> 00:05:11.199
+often by putting them in
+
+00:05:11.199 --> 00:05:12.255
+different library spaces
+
+00:05:12.255 --> 00:05:14.160
+for complicated projects,
+
+00:05:14.160 --> 00:05:17.520
+or otherwise warning people
+
+00:05:17.520 --> 00:05:19.520
+that this is not an interactive function,
+
+00:05:19.520 --> 00:05:21.919
+even if you get away
+with using it like one.
+
+00:05:22.639 --> 00:05:26.000
+Watch your back.
+
+00:05:26.000 --> 00:05:32.800
+The manual itself talks about macros
+
+00:05:32.800 --> 00:05:35.840
+as being a way of evaluating,
+
+00:05:35.840 --> 00:05:39.993
+as being an evaluator that will take
+
+00:05:39.993 --> 00:05:42.800
+our Emacs Lisp expression
+
+00:05:42.800 --> 00:05:44.800
+and the set of forms that
+
+00:05:44.800 --> 00:05:47.590
+will feed to it our code,
+
+00:05:48.960 --> 00:05:50.792
+but it also provides us with
+
+00:05:50.792 --> 00:05:53.467
+this concept of an environment.
+
+00:05:53.467 --> 00:05:57.027
+That's really where the power
+comes in.
+
+00:05:57.027 --> 00:05:58.240
+Through that, we can have
+
+00:05:58.240 --> 00:06:00.080
+lexical variables and
+
+00:06:00.080 --> 00:06:03.199
+think about--bring in some of the
+
+00:06:03.199 --> 00:06:06.400
+capabilities that
+
+00:06:06.400 --> 00:06:09.759
+can be harder to reach with
+
+00:06:09.759 --> 00:06:13.840
+a pure declarative statement that
+
+00:06:13.840 --> 00:06:21.440
+doesn't allow for top level
+
+00:06:21.440 --> 00:06:28.639
+asynchronous... Asynchronicity...
+
+00:06:28.639 --> 00:06:31.950
+I'm gonna basically
+
+00:06:33.520 --> 00:06:35.577
+ignore the byte-compilation phase
+
+00:06:35.577 --> 00:06:36.880
+for this talk
+
+00:06:36.880 --> 00:06:38.463
+in order to have any prayer
+
+00:06:38.463 --> 00:06:39.919
+of getting through it in the
+
+00:06:39.919 --> 00:06:43.600
+remaining 9 or 11 minutes or whatever.
+
+00:06:43.600 --> 00:06:50.441
+But suffice to say,
+that's a scary space,
+
+00:06:50.441 --> 00:06:52.240
+and that's really
+
+00:06:52.240 --> 00:06:53.800
+the thing that you want to
+
+00:06:53.800 --> 00:06:55.277
+start learning about
+
+00:06:55.277 --> 00:06:57.199
+as you think about
+
+00:06:57.199 --> 00:07:02.160
+taking macros on in earnest.
+
+00:07:02.160 --> 00:07:05.919
+Coming back to the comma syntax,
+
+00:07:05.919 --> 00:07:09.759
+then, having given ourselves a
+
+00:07:09.759 --> 00:07:12.479
+working definition for the Emacs Lisp
+
+00:07:12.479 --> 00:07:14.479
+runtime environment, then we can say that
+
+00:07:14.479 --> 00:07:15.840
+macros are going to
+
+00:07:15.840 --> 00:07:21.120
+inject code back into that stream,
+
+00:07:21.120 --> 00:07:25.280
+whereas backquote (`)
+
+00:07:25.280 --> 00:07:28.479
+is going to give code back.
+
+00:07:28.479 --> 00:07:31.919
+to the stream--or interject, sorry,
+
+00:07:31.919 --> 00:07:33.632
+it's going to interject
+
+00:07:33.632 --> 00:07:35.360
+back into the stream.
+
+00:07:35.360 --> 00:07:39.840
+Sort of an exclamatory "Excuse me,
+
+00:07:39.840 --> 00:07:46.966
+I'd like to have a value here."
+We can take that value
+
+00:07:46.966 --> 00:07:48.639
+from the environment as it exists
+
+00:07:48.639 --> 00:07:54.160
+when our macro is evaluated.
+
+00:07:54.160 --> 00:07:56.003
+Backquote, on the other hand,
+
+00:07:56.003 --> 00:08:00.560
+takes the result from that
+
+00:08:00.560 --> 00:08:02.201
+and returns it back to the stream
+
+00:08:02.201 --> 00:08:03.467
+for evaluation at the
+
+00:08:03.467 --> 00:08:05.680
+processing level that invoked us.
+
+00:08:05.680 --> 00:08:08.720
+So in other words, perhaps back up to
+
+00:08:08.720 --> 00:08:10.960
+a top-level eval expression where our
+
+00:08:10.960 --> 00:08:16.720
+macro is invoked.
+
+00:08:20.080 --> 00:08:22.560
+I'm going to briefly bring
+
+00:08:22.560 --> 00:08:23.759
+you back to the game
+
+00:08:23.759 --> 00:08:27.120
+for just a moment.
+
+00:08:30.240 --> 00:08:32.479
+I won't linger on this slide,
+
+00:08:32.479 --> 00:08:37.039
+but briefly: this is a
+
+00:08:37.039 --> 00:08:41.615
+role-playing, pen and pencil,
+
+00:08:41.615 --> 00:08:43.829
+physical dice tradition
+
+00:08:43.829 --> 00:08:46.320
+that dates back a long time
+
+00:08:46.320 --> 00:08:48.080
+from a technology perspective.
+
+00:08:48.080 --> 00:08:50.727
+It's old in the same way
+
+00:08:50.727 --> 00:08:58.560
+that other tools that I like
+are old.
+
+00:08:58.560 --> 00:09:00.185
+It's simple to understand.
+
+00:09:00.185 --> 00:09:01.873
+I can communicate a lot with it
+
+00:09:01.873 --> 00:09:03.952
+with a simple amount of typing
+
+00:09:03.952 --> 00:09:09.120
+or scribbling something
+on a piece of paper.
+
+00:09:09.120 --> 00:09:13.500
+It has a complicated problem space
+of its own.
+
+00:09:13.500 --> 00:09:15.519
+Again, I don't want to
+
+00:09:15.519 --> 00:09:18.212
+get too much into the game here,
+
+00:09:18.212 --> 00:09:20.177
+but in this talk,
+
+00:09:20.177 --> 00:09:22.590
+for the last five minutes,
+
+00:09:22.590 --> 00:09:24.751
+I'll focus on the process
+
+00:09:24.751 --> 00:09:26.640
+that we took to
+
+00:09:26.640 --> 00:09:29.190
+automate getting data out of
+
+00:09:29.190 --> 00:09:31.564
+the Org Mode tables
+which eventually
+
+00:09:31.564 --> 00:09:33.855
+(as we'll talk about more
+tomorrow)
+
+00:09:33.855 --> 00:09:36.000
+are used to draw
+
+00:09:36.000 --> 00:09:39.440
+game maps and other things.
+
+00:09:39.440 --> 00:09:42.543
+Here I talk about why we did
+that.
+
+00:09:42.543 --> 00:09:45.279
+I'm going to skip briefly past that,
+
+00:09:45.279 --> 00:09:49.360
+and say instead that at a high level,
+
+00:09:49.360 --> 00:09:51.440
+it's symbolic informatics.
+
+00:09:51.440 --> 00:09:53.519
+We're giving a symbolic name
+
+00:09:53.519 --> 00:09:58.080
+to a tile set,
+
+00:10:02.000 --> 00:10:04.000
+and then assigning that tile set some
+
+00:10:04.000 --> 00:10:04.840
+some characteristics
+
+00:10:04.840 --> 00:10:06.820
+like physical speeds, screen space
+
+00:10:06.820 --> 00:10:08.399
+(a variable that we might
+
+00:10:08.399 --> 00:10:12.800
+want to swap in), and so forth.
+
+00:10:12.800 --> 00:10:15.200
+You know, our project rests heavily on
+
+00:10:15.200 --> 00:10:21.040
+Org Mode and its
+fundamental capabilities.
+
+00:10:21.040 --> 00:10:24.000
+The code I'm going to show here
+
+00:10:28.320 --> 00:10:31.360
+is focused around a sticky
+
+00:10:31.360 --> 00:10:32.380
+problem space in
+
+00:10:32.380 --> 00:10:33.861
+information technology.
+
+00:10:33.861 --> 00:10:38.240
+I'm a professional software engineer
+
+00:10:38.240 --> 00:10:40.362
+turned technology architect.
+
+00:10:40.362 --> 00:10:43.495
+I support the websites for
+
+00:10:43.495 --> 00:10:46.533
+a recognizable financial services brand
+
+00:10:46.533 --> 00:10:48.500
+that I don't identify
+
+00:10:48.500 --> 00:10:50.720
+just so I don't accidentally end up
+
+00:10:50.720 --> 00:10:54.399
+inadvertently misrepresenting my firm
+
+00:10:54.399 --> 00:10:56.456
+in some financial perspective
+
+00:10:56.456 --> 00:10:57.760
+if I let some other
+
+00:10:57.760 --> 00:11:03.300
+companies' name slip, or my own.
+
+00:11:03.300 --> 00:11:07.700
+It's certainly no representation
+
+00:11:07.700 --> 00:11:11.279
+of an opinion other than my own.
+
+00:11:18.800 --> 00:11:22.720
+So ETL has to do with moving data around.
+
+00:11:22.720 --> 00:11:26.240
+We have the idea of
+
+00:11:26.240 --> 00:11:29.200
+a pipeline where we'll be able to verify
+
+00:11:29.200 --> 00:11:30.560
+certain assumptions,
+
+00:11:30.560 --> 00:11:32.106
+nominally about data quality,
+
+00:11:32.106 --> 00:11:33.600
+but it could be about anything.
+
+00:11:33.600 --> 00:11:35.630
+Before the pipeline starts, okay,
+
+00:11:35.630 --> 00:11:36.886
+we've got a state where we think
+
+00:11:36.886 --> 00:11:38.560
+it should work if we run it.
+
+00:11:38.560 --> 00:11:41.920
+We have some extraction where we'll
+
+00:11:41.920 --> 00:11:43.973
+get our sources, and we may have
+
+00:11:43.973 --> 00:11:45.040
+the opportunity to
+
+00:11:45.040 --> 00:11:47.327
+make some assertions there.
+
+00:11:47.327 --> 00:11:50.510
+In the transform stage,
+as well as the load,
+
+00:11:50.510 --> 00:11:52.720
+things get a little dicer,
+
+00:11:52.720 --> 00:11:54.079
+to the point where we come out of the
+
+00:11:54.079 --> 00:11:55.360
+load stage and we should have some
+
+00:11:55.360 --> 00:11:56.676
+really solid assertions again
+
+00:11:56.676 --> 00:11:57.724
+that we can even go back
+
+00:11:57.724 --> 00:11:59.680
+and compare to the extract stage.
+
+00:11:59.680 --> 00:12:02.639
+From this, we have the rudimentaries
+
+00:12:02.639 --> 00:12:04.959
+of a data quality practice.
+
+00:12:04.959 --> 00:12:08.120
+In this case, we have a number of
+
+00:12:08.120 --> 00:12:09.360
+Org Mode files that will all
+
+00:12:09.360 --> 00:12:12.639
+be distributed across a
+
+00:12:12.639 --> 00:12:16.720
+number of players' computers,
+
+00:12:16.720 --> 00:12:18.959
+so we might not want to update every
+
+00:12:18.959 --> 00:12:20.320
+part of every buffer.
+
+00:12:20.320 --> 00:12:22.720
+I think it's a complicated problem space.
+
+00:12:22.720 --> 00:12:24.560
+So we tried to take
+
+00:12:24.560 --> 00:12:27.839
+a long-term view of
+
+00:12:27.839 --> 00:12:30.321
+the solution that we needed.
+
+00:12:30.321 --> 00:12:32.160
+So I'll go ahead
+
+00:12:32.160 --> 00:12:36.279
+and open up the function
+that...
+
+00:12:36.279 --> 00:12:39.020
+Let's actually start with the one
+
+00:12:39.020 --> 00:12:41.680
+that's pretty easy to read.
+
+00:12:41.680 --> 00:12:46.800
+I'm gonna go ahead and
+just crank it up huge,
+
+00:12:46.800 --> 00:12:51.680
+in case anybody's watching in 480.
+
+00:12:51.680 --> 00:12:57.733
+This program is not a work of art
+
+00:12:57.733 --> 00:13:01.120
+It's a simple implementation
+of the idea that
+
+00:13:01.120 --> 00:13:04.000
+an alist of functions
+
+00:13:04.000 --> 00:13:06.633
+that return maybe some data,
+
+00:13:06.633 --> 00:13:10.399
+maybe some data and an entry
+back into that alist,
+
+00:13:10.399 --> 00:13:13.040
+can be done quite extensively with
+
+00:13:13.040 --> 00:13:15.680
+very few lines of code.
+
+00:13:15.680 --> 00:13:17.586
+Neither is it an especially tight
+
+00:13:17.586 --> 00:13:19.600
+or thrifty implementation.
+
+00:13:19.600 --> 00:13:22.000
+It's just trying to get the job done
+
+00:13:22.000 --> 00:13:25.056
+with a doc statement for everything.
+
+00:13:25.056 --> 00:13:28.595
+At the heart, we see a call to
+
+00:13:28.595 --> 00:13:32.067
+this macro called dm-coalesce-hash,
+
+00:13:32.067 --> 00:13:33.714
+and that's what I'd like
+to focus in on.
+
+00:13:33.714 --> 00:13:35.360
+You can see... I think
+
+00:13:35.360 --> 00:13:38.800
+that something unpleasant is
+happening here.
+
+00:13:38.800 --> 00:13:43.991
+I've got an eval in what is...
+
+00:13:43.991 --> 00:13:49.519
+I will share a fairly central function
+
+00:13:49.519 --> 00:13:52.160
+that those implementing
+this ETL pattern are
+
+00:13:52.160 --> 00:13:54.933
+welcome to derive from.
+
+00:13:54.933 --> 00:13:57.680
+That is, this is a
+default transform
+
+00:13:57.680 --> 00:14:00.959
+that you can get when loading
+certain kinds of
+
+00:14:00.959 --> 00:14:04.560
+org-mode tables that have been
+
+00:14:04.560 --> 00:14:06.399
+properly adorned. Again, we'll get
+
+00:14:06.399 --> 00:14:09.120
+into that all tomorrow.
+
+00:14:09.120 --> 00:14:11.900
+So, keeping an eye on time.
+Couple minutes left.
+
+00:14:11.900 --> 00:14:13.760
+Let's look at the macro itself.
+
+00:14:13.760 --> 00:14:15.000
+I have a slide on this,
+
+00:14:15.000 --> 00:14:24.639
+but let's go ahead
+and risk getting off page.
+
+00:14:24.639 --> 00:14:27.199
+Oh boy. Here we go. So this is my
+
+00:14:27.199 --> 00:14:28.959
+utilities bucket.
+
+00:14:28.959 --> 00:14:31.920
+It has such basic features as "give me a
+
+00:14:31.920 --> 00:14:34.000
+hash table with some defaults, I'll think
+
+00:14:34.000 --> 00:14:36.000
+about that later,"
+
+00:14:36.000 --> 00:14:44.720
+and "add to list," a special version
+
+00:14:44.720 --> 00:14:47.600
+that enables us to be a little cavalier
+
+00:14:47.600 --> 00:14:49.360
+in experimenting with alist versus
+
+00:14:49.360 --> 00:14:50.967
+hashes versus plists.
+
+00:14:50.967 --> 00:14:53.178
+We've made a right mess for
+ourselves
+
+00:14:53.178 --> 00:14:54.399
+in the proof of concept area,
+
+00:14:54.399 --> 00:14:57.433
+and it's ripe for someone to write a
+
+00:14:57.433 --> 00:14:58.560
+whitepaper about
+
+00:14:58.560 --> 00:15:00.240
+when to prefer these things.
+
+00:15:04.800 --> 00:15:08.000
+The merge alist...
+
+00:15:08.000 --> 00:15:12.959
+Same work here.
+Let's get down to business.
+
+00:15:12.959 --> 00:15:14.667
+This function has quite a...
+
+00:15:14.667 --> 00:15:17.467
+This macro has quite a doc string.
+
+00:15:17.467 --> 00:15:20.720
+I think I mentioned earlier
+that I got myself into
+
+00:15:20.720 --> 00:15:22.088
+trouble with the keyword properties.
+
+00:15:22.088 --> 00:15:23.519
+You can see that we have
+
+00:15:23.519 --> 00:15:27.359
+not only quite a number of them,
+
+00:15:27.359 --> 00:15:31.155
+but a lot of default values,
+
+00:15:31.155 --> 00:15:35.446
+many of which may be relying on
+
+00:15:35.446 --> 00:15:37.264
+the values that are passed in here.
+
+00:15:37.264 --> 00:15:40.000
+This is complicated. As it turns out,
+
+00:15:40.000 --> 00:15:44.000
+I wasn't brave enough in most cases
+
+00:15:44.000 --> 00:15:45.485
+to try to write a lambda
+
+00:15:45.485 --> 00:15:47.279
+that could understand and
+
+00:15:47.279 --> 00:15:49.300
+replace its own local variable.
+
+00:15:49.300 --> 00:15:50.399
+I just didn't...
+
+00:15:50.399 --> 00:15:53.519
+It didn't save me enough time. This was
+
+00:15:53.519 --> 00:15:56.532
+really easy to read and write and
+understand
+
+00:15:56.532 --> 00:15:58.240
+as I thought through my problem,
+
+00:15:58.240 --> 00:16:00.000
+but now, as I use it,
+
+00:16:00.000 --> 00:16:02.486
+I've lost a little ground with
+this.
+
+00:16:02.486 --> 00:16:04.079
+I'm not even sure
+
+00:16:04.079 --> 00:16:06.453
+I like what I got from
+
+00:16:06.453 --> 00:16:09.341
+the many keyword properties
+when it...
+
+00:16:09.341 --> 00:16:11.920
+And we can look, perhaps if we have
+
+00:16:11.920 --> 00:16:17.340
+the time, at what that looks like in
+
+00:16:19.920 --> 00:16:22.720
+Oh, all right, I have to separately
+
+00:16:22.720 --> 00:16:24.480
+dismiss and restart that.
+
+00:16:24.480 --> 00:16:27.519
+So that's just about my time.
+
+00:16:27.519 --> 00:16:29.600
+Being respectful of that, I want
+
+00:16:29.600 --> 00:16:31.920
+to invite presenters to just jump in at
+
+00:16:31.920 --> 00:16:35.519
+any of the many large pauses I leave.
+
+00:16:35.519 --> 00:16:38.079
+I'll just leave up the doc string
+
+00:16:38.079 --> 00:16:40.160
+for a moment and maybe split the screen
+
+00:16:40.160 --> 00:16:45.199
+and pull open an item.
+
+00:16:45.199 --> 00:16:48.720
+([Amin]: Thank you very
+
+00:16:48.720 --> 00:16:50.720
+much for your talk, Corwin.
+
+00:16:50.720 --> 00:16:53.839
+I think you still have
+
+00:16:53.839 --> 00:16:55.027
+maybe three or four more minutes,
+
+00:16:55.027 --> 00:16:57.680
+if you want to quickly wrap up.)
+
+00:16:57.680 --> 00:17:00.644
+[Corwin:] Okay, so three or four
+more minutes
+
+00:17:00.644 --> 00:17:05.439
+I can easily spend on thank yous.
+
+00:17:05.439 --> 00:17:07.280
+I might switch to that if there aren't
+
+00:17:07.280 --> 00:17:08.270
+questions on the pad.
+
+00:17:10.160 --> 00:17:12.559
+([Amin:] Would you like me to pull up the pad,
+
+00:17:12.559 --> 00:17:14.079
+or are you looking at it?)
+
+00:17:14.079 --> 00:17:16.777
+[Corwin:] I am. I bookmarked it.
+
+00:17:16.777 --> 00:17:30.840
+I am pulling the tab
+and I'll bring it in.
+
+00:17:30.840 --> 00:17:38.799
+Okay. All right. This is the wrong
+Etherpad.
+
+00:17:38.799 --> 00:17:44.480
+Thanks for the link.
+
+00:17:44.480 --> 00:17:54.880
+All right. So I think I'm
+looking for macros.
+
+00:17:54.880 --> 00:17:57.630
+Okay. Key message. Sure.
+
+00:17:57.630 --> 00:18:01.679
+So, the key message is that it's
+
+00:18:01.679 --> 00:18:02.960
+a jungle out there.
+
+00:18:02.960 --> 00:18:05.912
+Macros, along with any other design,
+
+00:18:05.912 --> 00:18:08.559
+can leave you in a position
+
+00:18:08.559 --> 00:18:11.919
+where you have a nice API. I can show
+
+00:18:11.919 --> 00:18:13.600
+you other examples (you can find them in
+
+00:18:13.600 --> 00:18:14.960
+the dungeon-mode source)
+
+00:18:14.960 --> 00:18:18.480
+of many, many other places where I use
+
+00:18:18.480 --> 00:18:20.820
+this exact same formula,
+
+00:18:20.820 --> 00:18:23.840
+quickly sketching out
+how a character sheet
+
+00:18:23.840 --> 00:18:26.180
+or another big data set
+
+00:18:26.180 --> 00:18:28.480
+needs to figure out
+what tables are
+
+00:18:28.480 --> 00:18:29.320
+going to be interesting
+
+00:18:29.320 --> 00:18:30.720
+from the collection of files,
+
+00:18:30.720 --> 00:18:33.967
+and then load up the tile set,
+
+00:18:33.967 --> 00:18:38.880
+and the layout file from that.
+
+00:18:38.880 --> 00:18:40.542
+And I mean, it works.
+
+00:18:40.542 --> 00:18:42.677
+The project is moving forward
+with this.
+
+00:18:42.677 --> 00:18:44.799
+I have the flexibility that I need.
+
+00:18:44.799 --> 00:18:46.559
+But here I am evaling my own code
+
+00:18:46.559 --> 00:18:48.640
+to make darn sure even if I get
+
+00:18:48.640 --> 00:18:52.400
+byte-compiled, this macro
+
+00:18:52.400 --> 00:18:55.440
+does get evaluated in the user's real
+
+00:18:55.440 --> 00:18:57.684
+run time. Clearly a design fail.
+
+00:18:57.684 --> 00:18:58.890
+So that would be...
+
+00:18:58.890 --> 00:19:00.880
+The key point of my talk is to
+
+00:19:00.880 --> 00:19:05.600
+present this design fail and
+
+00:19:05.600 --> 00:19:08.320
+thank the community, but especially
+
+00:19:08.320 --> 00:19:10.942
+wasamasa for some patience.
+
+00:19:10.942 --> 00:19:13.280
+Let me add at this moment that
+
+00:19:13.280 --> 00:19:13.333
+he was so frustrated with me.
+
+00:19:13.333 --> 00:19:17.115
+They were sort of frustrated with me
+
+00:19:17.115 --> 00:19:20.400
+(I think I didn't qualify pronouns)
+
+00:19:24.240 --> 00:19:26.287
+with doing this. The first...
+
+00:19:26.287 --> 00:19:27.985
+This was one of our first
+interactions,
+
+00:19:27.985 --> 00:19:29.919
+and the feedback was,
+
+00:19:29.919 --> 00:19:34.240
+"Why is this a macro. Full stop."
+
+00:19:34.240 --> 00:19:36.640
+And that's a great message, actually.
+
+00:19:36.640 --> 00:19:39.520
+I hope that maybe this
+can encourage
+
+00:19:39.520 --> 00:19:42.720
+further talks across the subject about,
+
+00:19:42.720 --> 00:19:43.808
+you know, "Hey, wait a minute,
+
+00:19:43.808 --> 00:19:45.549
+macros are really fantastic,"
+
+00:19:45.549 --> 00:19:47.018
+as I hope I made clear.
+
+00:19:47.018 --> 00:19:48.559
+You can do a tremendous amount
+
+00:19:48.559 --> 00:19:51.039
+with them, and we rely on them
+
+00:19:51.039 --> 00:19:55.200
+for almost all the fun goodies,
+
+00:19:55.200 --> 00:20:02.159
+from defun, setq...
+
+00:20:02.159 --> 00:20:04.639
+I want to get to my thank yous.
+
+00:20:04.639 --> 00:20:18.840
+Let me just peek back at the pad.
+
+00:20:20.000 --> 00:20:22.080
+Well, that was actually a scratch buffer,
+
+00:20:22.080 --> 00:20:24.720
+so I'll have to read it cold off
+my notes.
+
+00:20:27.919 --> 00:20:30.320
+But I'll switch to... I'll also...
+
+00:20:30.320 --> 00:20:31.600
+I'll say a couple of thank-yous if you
+
+00:20:31.600 --> 00:20:34.320
+don't mind, Amin.
+
+00:20:34.320 --> 00:20:36.080
+In addition to the big thank you that I
+
+00:20:36.080 --> 00:20:39.360
+hope was implied by my shout out
+to wasamasa,
+
+00:20:39.360 --> 00:20:42.720
+I also want to thank you, Amin, for
+
+00:20:42.720 --> 00:20:46.640
+your kindness in extending
+
+00:20:46.640 --> 00:20:51.360
+to the project as well as to me, the
+
+00:20:51.360 --> 00:20:54.320
+the chance to present here.
+
+00:20:54.320 --> 00:20:56.358
+You've also done a lot of great stuff
+
+00:20:56.358 --> 00:20:59.360
+for our project. Thank you very much for
+that.
+
+00:20:59.360 --> 00:21:03.400
+Sacha Chua (I'll get there),
+
+00:21:03.400 --> 00:21:15.919
+thank you so much for
+
+00:21:15.919 --> 00:21:17.200
+the inspiration that you are to our
+
+00:21:17.200 --> 00:21:18.320
+whole community.
+
+00:21:18.320 --> 00:21:22.400
+I also want to thank the presenters
+
+00:21:22.400 --> 00:21:25.600
+for just being so flexible and
+
+00:21:25.600 --> 00:21:27.600
+nagging back through the whole thing,
+
+00:21:27.600 --> 00:21:29.120
+and especially to Leo
+
+00:21:29.120 --> 00:21:32.159
+who has done so much to
+drive the show today.
+
+00:21:32.159 --> 00:21:37.242
+This is a fractious tent at times,
+
+00:21:37.242 --> 00:21:39.800
+and sometimes it is indeed
+
+00:21:39.800 --> 00:21:41.360
+a little bit of a circus,
+
+00:21:41.360 --> 00:21:44.746
+but I am learning so much so fast.
+
+00:21:44.746 --> 00:21:46.880
+I'm just inspired by how much
+
+00:21:46.880 --> 00:21:49.333
+Emacs can teach us.
+
+00:21:49.333 --> 00:21:52.901
+([Amin:] thank you, Corwin,
+for your kind words
+
+00:21:52.901 --> 00:21:54.960
+about me, of course,
+
+00:21:54.960 --> 00:21:56.000
+about all of us
+
+00:21:56.000 --> 00:21:58.000
+and the conference...
+
+00:21:58.000 --> 00:22:02.400
+Indeed, thanks to everyone who's helped,
+
+00:22:02.400 --> 00:22:04.159
+including the speakers, of course,
+
+00:22:04.159 --> 00:22:05.840
+without whom EmacsConf really
+
+00:22:05.840 --> 00:22:08.960
+wouldn't have been a EmacsConf.
+
+00:22:08.960 --> 00:22:10.640
+It's been a pleasure
+
+00:22:10.640 --> 00:22:12.366
+knowing you and
+working with you,
+
+00:22:12.366 --> 00:22:15.743
+from afar for the most part
+
+00:22:15.743 --> 00:22:17.360
+on dungeon-mode,
+
+00:22:17.360 --> 00:22:19.937
+helping with small things
+here and there
+
+00:22:19.937 --> 00:22:21.796
+but yeah, it's been my pleasure,
+
+00:22:21.796 --> 00:22:23.840
+and it's great to have you and
+
+00:22:23.840 --> 00:22:26.582
+everyone else part of the
+community,
+
+00:22:26.582 --> 00:22:29.180
+and for me to be part of the
+community.
+
+00:22:29.180 --> 00:22:30.559
+It's been a lot of fun.
+
+00:22:30.559 --> 00:22:33.679
+Thank you.)
+
+00:22:33.679 --> 00:22:35.206
+[Corwin]: It's an honor.
+
+00:22:35.206 --> 00:22:37.428
+I don't use that word an awful lot
+
+00:22:37.428 --> 00:22:39.867
+because I sort of smirk at it.
+
+00:22:39.867 --> 00:22:43.941
+It gets us in a lot of trouble,
+honor does,
+
+00:22:43.941 --> 00:22:46.904
+but this will be a sure time
+to use it.
+
+00:22:46.904 --> 00:22:48.840
+([Amin:] Thank you.)
+
+00:22:48.840 --> 00:22:51.840
+[Corwin:] Likewise.
diff --git a/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt b/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt
new file mode 100644
index 00000000..530b95c8
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--21-on-why-most-of-the-best-features-in-eev-look-like-5-minute-hacks--eduardo-ochs.vtt
@@ -0,0 +1,2848 @@
+WEBVTT
+
+00:00:00.080 --> 00:00:01.708
+Hi, my name is Eduardo Ochs.
+
+00:00:01.708 --> 00:00:03.439
+I'm this person here,
+
+00:00:03.439 --> 00:00:06.240
+and the title of this talk is on "Why
+
+00:00:07.120 --> 00:00:09.519
+Most of the Best Features in eev Look
+
+00:00:09.519 --> 00:00:11.599
+Like Five Minute Hacks."
+
+00:00:11.599 --> 00:00:15.280
+This is a presentation at the
+EmacsConf 2020
+
+00:00:15.280 --> 00:00:23.199
+happening on November 28 and 29, 2020.
+
+00:00:23.199 --> 00:00:25.519
+So this is part one of the presentation.
+
+00:00:25.519 --> 00:00:27.680
+Here I'm going to explain
+
+00:00:27.680 --> 00:00:29.840
+some ideas that are prerequisites for
+
+00:00:29.840 --> 00:00:32.320
+understanding the rest of the
+presentation.
+
+00:00:32.320 --> 00:00:35.440
+The three main keys of eev are
+
+00:00:35.440 --> 00:00:37.920
+M-e, M-k, and M-j.
+I'm going to start by
+
+00:00:37.920 --> 00:00:42.079
+explaining M-e and M-k.
+
+00:00:42.079 --> 00:00:44.960
+M-e is used to follow hyperlinks.
+
+00:00:44.960 --> 00:00:47.592
+Technically, it is essentially
+
+00:00:47.592 --> 00:00:49.345
+just a C-e to move to
+
+00:00:49.345 --> 00:00:50.402
+the end of the line,
+
+00:00:50.402 --> 00:00:53.918
+and then a C-x C-e to
+execute this,
+
+00:00:53.918 --> 00:00:58.960
+the sexp before point at
+the end of the line.
+
+00:00:58.960 --> 00:01:00.879
+And the thing is that Emacs comes with
+
+00:01:00.879 --> 00:01:02.479
+many functions that can be
+
+00:01:02.479 --> 00:01:05.040
+used as sexp hyperlinks.
+
+00:01:05.040 --> 00:01:07.540
+We can consider that they point to
+somewhere.
+
+00:01:07.540 --> 00:01:09.040
+I'm going to refer to that as
+
+00:01:09.040 --> 00:01:11.411
+the target of the hyperlink.
+
+00:01:11.411 --> 00:01:12.960
+If we execute this
+
+00:01:12.960 --> 00:01:15.759
+sexp hyperlinks, we coul go to that target.
+
+00:01:15.759 --> 00:01:17.119
+For example, this one
+
+00:01:17.119 --> 00:01:20.000
+is a hyperlink that points to a buffer
+
+00:01:20.000 --> 00:01:22.720
+with the manpage for cat.
+
+00:01:22.720 --> 00:01:25.040
+And usually, but not always, after
+
+00:01:25.040 --> 00:01:27.040
+following the hyperlink, we can go back
+
+00:01:27.040 --> 00:01:29.840
+by just killing the current buffer
+
+00:01:29.840 --> 00:01:31.537
+that the hyperlink created:
+
+00:01:31.537 --> 00:01:34.400
+the target of the hyperlink.
+
+00:01:34.400 --> 00:01:38.000
+But this example here is badly behaved.
+
+00:01:38.000 --> 00:01:41.360
+If we execute it, it creates a new frame,
+
+00:01:41.360 --> 00:01:43.360
+and to go back to the previous situation,
+
+00:01:43.360 --> 00:01:52.840
+we have to either click here
+or type C-x 5 0.
+
+00:01:54.880 --> 00:01:57.120
+So here are some examples of
+
+00:01:57.120 --> 00:01:58.726
+sexp hyperlinks using
+
+00:01:58.726 --> 00:02:00.640
+standard Emacs functions.
+
+00:02:00.640 --> 00:02:03.188
+This third one is badly behaved
+
+00:02:03.188 --> 00:02:04.880
+in a different way.
+
+00:02:04.880 --> 00:02:08.554
+If executed, the target is created
+
+00:02:08.554 --> 00:02:11.006
+in the same window as we are now,
+
+00:02:11.006 --> 00:02:14.312
+but it also shows a lot of
+garbage
+
+00:02:14.312 --> 00:02:15.797
+here in the echo area,
+
+00:02:15.797 --> 00:02:23.280
+so the current frame becomes
+a bit messy.
+
+00:02:23.280 --> 00:02:25.728
+And well, one of the first things
+
+00:02:25.728 --> 00:02:28.319
+that I did when I was creating eev
+
+00:02:28.319 --> 00:02:30.720
+many many years ago was that I created
+
+00:02:30.720 --> 00:02:33.380
+variants of all these functions
+
+00:02:33.380 --> 00:02:36.640
+that were better behaved.
+
+00:02:36.640 --> 00:02:39.200
+They were better behaved in two
+senses.
+
+00:02:39.200 --> 00:02:40.839
+The obvious one was that
+
+00:02:40.839 --> 00:02:43.680
+they all created the target
+
+00:02:43.680 --> 00:02:45.246
+in the same window as before,
+
+00:02:45.246 --> 00:02:48.720
+so I could go back by just typing M-k
+
+00:02:48.720 --> 00:02:52.879
+which has essentially just killed this
+buffer.
+
+00:02:52.879 --> 00:02:56.480
+I also implemented something extra that
+
+00:02:56.480 --> 00:02:59.040
+are the postback lists.
+
+00:02:59.040 --> 00:03:03.599
+For example, these extra arguments here
+are a postback list.
+
+00:03:03.599 --> 00:03:06.080
+These extra arguments specify
+
+00:03:06.080 --> 00:03:09.599
+position and the target buffer.
+
+00:03:09.599 --> 00:03:14.337
+In this example,
+this postback list means:
+
+00:03:14.337 --> 00:03:18.239
+starting from the beginning of
+the buffer,
+
+00:03:18.239 --> 00:03:22.757
+search for the first occurrence
+of this string after that,
+
+00:03:22.757 --> 00:03:24.754
+after the beginning
+of the buffer,
+
+00:03:24.754 --> 00:03:27.662
+and then search for
+the first occurrence
+
+00:03:27.662 --> 00:03:33.760
+of this string after that.
+
+00:03:33.760 --> 00:03:36.070
+eev also defines some hyperlinks
+
+00:03:36.070 --> 00:03:38.799
+that do not create new buffers.
+
+00:03:38.799 --> 00:03:40.879
+Here is the first example.
+
+00:03:40.879 --> 00:03:42.971
+If I execute this one,
+
+00:03:42.971 --> 00:03:45.920
+this one is a hyperlink
+
+00:03:45.920 --> 00:03:46.959
+to the result
+
+00:03:46.959 --> 00:03:50.720
+of running this show comment date,
+
+00:03:50.720 --> 00:03:52.623
+but instead of showing the result
+
+00:03:52.623 --> 00:03:53.767
+in the new buffer,
+
+00:03:53.767 --> 00:03:55.475
+the result is shown
+here.
+
+00:03:55.475 --> 00:03:58.959
+So, if I execute this hyperlink,
+
+00:03:58.959 --> 00:04:01.634
+the result of date, the output of date,
+
+00:04:01.634 --> 00:04:03.339
+is shown in the echo area.
+
+00:04:03.339 --> 00:04:07.120
+And if executed again,
+
+00:04:07.120 --> 00:04:08.673
+it shows the result again,
+
+00:04:08.673 --> 00:04:09.519
+and the result
+
+00:04:09.519 --> 00:04:11.519
+changes every second.
+
+00:04:11.519 --> 00:04:18.720
+So this is a variant of find-sh.
+
+00:04:18.720 --> 00:04:21.840
+find-sh0 is the variant that
+
+00:04:21.840 --> 00:04:24.960
+just shows the output in the echo area,
+
+00:04:24.960 --> 00:04:28.080
+and find-sh shows the output in
+
+00:04:28.080 --> 00:04:31.759
+a new buffer.
+
+00:04:31.759 --> 00:04:35.919
+Here is an example of a hyperlink
+
+00:04:35.919 --> 00:04:39.173
+that calls an external program.
+
+00:04:39.173 --> 00:04:41.280
+If I execute this,
+
+00:04:41.280 --> 00:04:43.604
+it calls Google Chrome to open
+
+00:04:43.604 --> 00:04:46.639
+a certain URL.
+
+00:04:46.639 --> 00:04:51.520
+Here it is. Let's go back to Emacs.
+
+00:04:51.520 --> 00:04:55.280
+If I execute this hyperlink here,
+
+00:04:55.280 --> 00:04:57.986
+it invokes my favorite PDF viewer
+
+00:04:57.986 --> 00:05:02.560
+which is xpdf. It makes xpdf
+
+00:05:02.560 --> 00:05:07.759
+open this PDF page. It is PDF
+
+00:05:07.759 --> 00:05:10.880
+in this page, and these other arguments
+
+00:05:10.880 --> 00:05:15.199
+are ignored. Let me show how it works.
+
+00:05:15.199 --> 00:05:20.160
+Here it is. This is an excerpt from a
+book.
+
+00:05:20.160 --> 00:05:22.639
+So page 3 in the pdf corresponds to
+
+00:05:22.639 --> 00:05:26.400
+page 113 in the book.
+
+00:05:26.400 --> 00:05:29.360
+This variant here of the hyperlink above,
+
+00:05:29.360 --> 00:05:31.759
+it opens the PDF in a different way.
+
+00:05:31.759 --> 00:05:34.560
+It runs a program called pdftotext on
+
+00:05:34.560 --> 00:05:36.479
+this PDF here,
+
+00:05:36.479 --> 00:05:39.600
+and Emacs takes the output of
+
+00:05:39.600 --> 00:05:42.880
+running pdftotext on this pdf here
+
+00:05:42.880 --> 00:05:45.301
+and displays it in a buffer.
+
+00:05:45.301 --> 00:05:47.280
+Now this postback list
+
+00:05:47.280 --> 00:05:49.651
+is interpreted in a different way.
+
+00:05:49.651 --> 00:05:51.280
+This thing is interpreted
+
+00:05:51.280 --> 00:05:53.425
+as a number of a page,
+
+00:05:53.425 --> 00:05:55.548
+and Emacs goes to page three
+
+00:05:55.548 --> 00:05:57.520
+by counting form feeds in
+
+00:05:57.520 --> 00:06:00.370
+the converted version of the PDF
+
+00:06:00.370 --> 00:06:03.039
+and then it searches for this string.
+
+00:06:03.039 --> 00:06:06.319
+and in this three... So let's execute this
+
+00:06:06.319 --> 00:06:09.169
+to see what happens.
+Here it is.
+
+00:06:09.169 --> 00:06:14.800
+I opened the same page
+as before.
+
+00:06:14.800 --> 00:06:18.400
+It starts with lecture one.
+
+00:06:18.400 --> 00:06:20.720
+So the other hyperlink searched for this
+
+00:06:20.720 --> 00:06:25.520
+string and for this string here.
+
+00:06:25.520 --> 00:06:30.400
+This thing here is a hyperlink
+to video,
+
+00:06:30.400 --> 00:06:31.644
+and when I execute it,
+
+00:06:31.644 --> 00:06:34.560
+it's going to open this video here
+
+00:06:34.560 --> 00:06:37.759
+at this timestamp. Let's see.
+
+00:06:37.759 --> 00:06:49.440
+1, 2, 3. 1, 2, 3.
+That's the way to do it.
+
+00:06:49.440 --> 00:06:51.956
+And also some hyperlinks
+
+00:06:51.956 --> 00:06:53.680
+that I defined,
+
+00:06:53.680 --> 00:06:55.940
+they don't work like
+
+00:06:55.940 --> 00:06:58.160
+usual hyperlinks. They work more
+
+00:06:58.160 --> 00:07:01.440
+like browser buttons,
+
+00:07:01.440 --> 00:07:06.240
+these buttons that appear in web pages,
+
+00:07:06.240 --> 00:07:09.120
+in the sense that these buttons usually
+
+00:07:09.120 --> 00:07:11.360
+don't open a new page. They usually
+
+00:07:11.360 --> 00:07:14.960
+just do something to change
+the current page.
+
+00:07:14.960 --> 00:07:17.312
+If I execute this, the action
+
+00:07:17.312 --> 00:07:22.240
+of this function eek is to...
+
+00:07:22.240 --> 00:07:25.423
+It interprets this string
+as a series of keys
+
+00:07:25.423 --> 00:07:30.051
+and it acts as if the user had
+typed all these keys.
+
+00:07:30.051 --> 00:07:32.706
+So if executed, I get a hello
+
+00:07:32.706 --> 00:07:34.400
+in the next line.
+
+00:07:34.400 --> 00:07:36.639
+If executed again, I get another hello.
+
+00:07:36.639 --> 00:07:39.440
+Another hello. hello. hello. etc. etc.
+
+00:07:39.440 --> 00:07:44.319
+Let me undo this mess. Oops.
+
+00:07:44.319 --> 00:07:47.840
+And here is another kind of button
+
+00:07:47.840 --> 00:07:51.440
+that defines a new function. If I execute
+
+00:07:51.440 --> 00:07:54.879
+this sexp here, at this moment, though it's
+
+00:07:54.879 --> 00:07:55.759
+not defined.
+
+00:07:55.759 --> 00:07:57.919
+And if I execute this, Emacs is going to
+
+00:07:57.919 --> 00:08:00.000
+show me a message saying
+
+00:08:00.000 --> 00:08:03.599
+symbol as function cell is not defined,
+
+00:08:03.599 --> 00:08:05.840
+something like this.
+
+00:08:05.840 --> 00:08:09.520
+But if I execute the defun,
+
+00:08:09.520 --> 00:08:12.960
+the action of this function o here
+
+00:08:12.960 --> 00:08:18.960
+is to run this, which opens a certain
+directory.
+
+00:08:18.960 --> 00:08:21.840
+Let me go back. Here is another
+
+00:08:21.840 --> 00:08:23.039
+button that defines
+
+00:08:23.039 --> 00:08:25.489
+several functions at the same time.
+
+00:08:25.489 --> 00:08:32.320
+If I execute this,
+
+00:08:32.320 --> 00:08:34.561
+note that the the result of
+
+00:08:34.561 --> 00:08:36.719
+executing this expression
+
+00:08:36.719 --> 00:08:38.447
+is the name of one of the functions
+
+00:08:38.447 --> 00:08:40.080
+that it defined.
+
+00:08:40.080 --> 00:08:42.800
+That is this one here. Let me explain
+
+00:08:42.800 --> 00:08:46.959
+these examples. One of the functions
+
+00:08:46.959 --> 00:08:48.800
+that this thing here defined
+
+00:08:48.800 --> 00:08:51.839
+is called find-orggitfile, where
+
+00:08:51.839 --> 00:08:54.640
+this orggit in the middle of its name
+
+00:08:54.640 --> 00:08:59.600
+is exactly this first argument to
+code-c-d.
+
+00:08:59.600 --> 00:09:03.120
+The action of running find-orggitfile
+
+00:09:03.120 --> 00:09:06.399
+on a string like this is that
+
+00:09:06.399 --> 00:09:09.680
+find-orggitfile takes the string
+
+00:09:09.680 --> 00:09:13.360
+and prepends this string to it,
+
+00:09:13.360 --> 00:09:15.600
+this one here which is the second
+
+00:09:15.600 --> 00:09:17.920
+argument to code-c-d,
+
+00:09:17.920 --> 00:09:21.760
+and then it executes find-fline
+
+00:09:21.760 --> 00:09:25.680
+on the result, which is this one.
+
+00:09:25.680 --> 00:09:28.320
+find-fline is my variant of find-file
+
+00:09:28.800 --> 00:09:32.080
+that supports both spec lists.
+
+00:09:32.080 --> 00:09:36.880
+This function here that I'm
+
+00:09:36.880 --> 00:09:38.538
+referring to as a button,
+
+00:09:38.538 --> 00:09:41.200
+it also defines a function called
+
+00:09:41.200 --> 00:09:44.880
+find-orggitnode here, where the orggit
+
+00:09:44.880 --> 00:09:46.839
+is the same string as here.
+
+00:09:46.839 --> 00:09:50.320
+This function opens a node
+
+00:09:50.320 --> 00:09:54.160
+of an info manual. This one,
+
+00:09:54.160 --> 00:09:57.310
+this text here opens this node
+
+00:09:57.310 --> 00:10:00.080
+in the Org manual.
+
+00:10:00.080 --> 00:10:03.519
+It is equivalent to this text here.
+
+00:10:03.519 --> 00:10:06.225
+So in the passage from this line
+
+00:10:06.225 --> 00:10:08.720
+to this line, we prepended
+
+00:10:08.720 --> 00:10:12.310
+to the node name the name of
+the manual here.
+
+00:10:12.310 --> 00:10:15.040
+find-node is my variant
+
+00:10:15.040 --> 00:10:18.160
+of this standard Emacs function here,
+
+00:10:18.160 --> 00:10:20.119
+but find-node also supports
+
+00:10:20.119 --> 00:10:23.519
+postback lists.
+
+00:10:23.519 --> 00:10:26.640
+eev also defines some functions that
+
+00:10:26.640 --> 00:10:28.423
+define shorter hyperlinks to PDFs
+
+00:10:28.423 --> 00:10:30.800
+and videos.
+
+00:10:30.800 --> 00:10:32.574
+Remember that this thing here
+
+00:10:32.574 --> 00:10:34.322
+is a shorter hyperlink
+
+00:10:34.322 --> 00:10:36.668
+to a file. This thing here
+
+00:10:36.668 --> 00:10:39.040
+is a shorter hyperlink to a node
+
+00:10:39.040 --> 00:10:43.200
+in an Emacs menu in an info manual.
+
+00:10:43.200 --> 00:10:47.279
+If we run this thing here, this
+code-pdf-page,
+
+00:10:47.279 --> 00:10:50.240
+this acts like a button that defines a
+
+00:10:50.240 --> 00:10:52.880
+certain function
+
+00:10:52.880 --> 00:10:56.669
+and this string,
+this other sexp here,
+
+00:10:56.669 --> 00:10:58.430
+defines another function.
+
+00:10:58.430 --> 00:11:00.240
+The first one defines
+
+00:11:00.240 --> 00:11:02.745
+the function find-fongspivak-page,
+
+00:11:02.745 --> 00:11:05.360
+and the second one defines the
+function find-fongspivak-text.
+
+00:11:05.360 --> 00:11:09.608
+When we run the file,
+
+00:11:09.608 --> 00:11:12.020
+when we run find-fongspivak-page,
+
+00:11:12.020 --> 00:11:15.686
+it opens this PDF here.
+
+00:11:15.686 --> 00:11:20.640
+The name is quite long.
+
+00:11:20.640 --> 00:11:23.839
+This example opens this PDF at page 8
+
+00:11:23.839 --> 00:11:26.079
+and searches for the string contents.
+
+00:11:26.079 --> 00:11:31.279
+In this case, it just ignores
+this string.
+
+00:11:31.279 --> 00:11:33.519
+Here it only considers
+
+00:11:33.519 --> 00:11:37.360
+the number of the page. Let's try.
+
+00:11:42.640 --> 00:11:45.200
+Here it is, the contents of a book
+
+00:11:45.200 --> 00:11:51.760
+that is freely available. Here is
+another page of the book.
+
+00:11:51.760 --> 00:11:55.519
+And if we execute this
+hyperlink here,
+
+00:11:55.519 --> 00:11:58.399
+find-fongspivak-text, it converts the
+
+00:11:58.399 --> 00:11:59.920
+PDF to text
+
+00:11:59.920 --> 00:12:03.382
+and it searches for
+page eight in it,
+
+00:12:03.382 --> 00:12:04.754
+and then for the string,
+
+00:12:04.754 --> 00:12:08.079
+this string here in page eight.
+
+00:12:08.079 --> 00:12:12.240
+It takes a few seconds.
+
+00:12:12.240 --> 00:12:16.160
+Here it is. So this is the
+
+00:12:16.160 --> 00:12:20.892
+ASCII version of this contents page
+here.
+
+00:12:20.892 --> 00:12:25.040
+Note that this block here
+
+00:12:25.040 --> 00:12:28.800
+is a kind of an index to that book.
+
+00:12:28.800 --> 00:12:31.360
+I have the full index somewhere,
+
+00:12:31.360 --> 00:12:32.506
+but it's very long,
+
+00:12:32.506 --> 00:12:34.959
+so I just copied a few lines here.
+
+00:12:34.959 --> 00:12:38.959
+So this is a link to s
+
+00:12:38.959 --> 00:12:42.160
+section one, chapter one. This is the
+
+00:12:42.160 --> 00:12:48.959
+section 1.1, section 1.1.1, and so on.
+
+00:12:48.959 --> 00:12:54.000
+Here is a link to the index.
+
+00:12:54.000 --> 00:12:58.079
+Here is a part of my index
+
+00:12:58.079 --> 00:13:03.279
+of positions in the video
+that we just saw
+
+00:13:03.279 --> 00:13:07.360
+that I think that are especially
+relevant.
+
+00:13:07.360 --> 00:13:11.940
+So this hyperlink is a kind
+of a button
+
+00:13:11.940 --> 00:13:14.160
+that defines this function here,
+
+00:13:14.160 --> 00:13:18.839
+find-punchandjudyvideo. Into the video.
+
+00:13:27.600 --> 00:13:30.800
+We can also use this for
+
+00:13:30.800 --> 00:13:33.360
+video tutorials. For example,
+
+00:13:33.360 --> 00:13:37.200
+this is a very good tutorial on Magit.
+
+00:13:37.200 --> 00:13:40.880
+If we execute this,
+
+00:13:40.880 --> 00:13:42.560
+then these functions are going to be
+
+00:13:42.560 --> 00:13:44.800
+defined, and these functions open
+
+00:13:44.800 --> 00:13:48.399
+this tutorial on Magit.
+
+00:13:48.399 --> 00:13:50.079
+These are some of the positions in the
+
+00:13:50.079 --> 00:13:52.904
+tutorial that I found
+especially relevant.
+
+00:13:52.904 --> 00:13:54.408
+This is a very dense tutorial.
+
+00:13:54.408 --> 00:13:56.480
+I had to take notes
+of everything,
+
+00:13:56.480 --> 00:13:59.040
+and I had to watch everything
+
+00:13:59.040 --> 00:14:00.800
+several times.
+
+00:14:00.800 --> 00:14:02.896
+For example, this is a link
+
+00:14:02.896 --> 00:14:05.444
+to the position in the tutorial
+
+00:14:05.444 --> 00:14:11.005
+that explains how in Spacemacs,
+
+00:14:11.005 --> 00:14:17.600
+Magit interprets SPC g s as magit-status.
+
+00:14:17.600 --> 00:14:20.480
+Let's see. "...beginners.
+SPC g s to initiate
+
+00:14:20.480 --> 00:14:22.320
+Magit's git status.
+
+00:14:22.320 --> 00:14:25.600
+You can also do..." That's it.
+
+00:14:25.600 --> 00:14:28.800
+Here are some examples that I
+
+00:14:28.800 --> 00:14:31.200
+took from somewhere else.
+
+00:14:31.200 --> 00:14:34.240
+The video tutorials from
+
+00:14:34.240 --> 00:14:43.519
+Rainer Koenig about Org Mode.
+
+00:14:43.519 --> 00:14:45.308
+Now let me show how the functions
+
+00:14:45.308 --> 00:14:47.220
+that define these shorter hyperlinks
+
+00:14:47.220 --> 00:14:48.720
+are implemented.
+
+00:14:48.720 --> 00:14:50.509
+The standard ways in Emacs
+
+00:14:50.509 --> 00:14:53.741
+to define functions that define
+other functions
+
+00:14:53.741 --> 00:14:55.760
+would be with macros.
+
+00:14:55.760 --> 00:14:58.320
+Let's see an example. This is a standard
+
+00:14:58.320 --> 00:15:01.540
+function that defines new functions.
+
+00:15:02.959 --> 00:15:06.959
+If we execute it,
+
+00:15:06.959 --> 00:15:09.040
+its result is the last function that it
+
+00:15:09.040 --> 00:15:11.527
+defined, which is ee-glyph,
+
+00:15:11.527 --> 00:15:13.920
+which is here.
+
+00:15:13.920 --> 00:15:16.959
+It's implemented as a macro. We can
+
+00:15:16.959 --> 00:15:20.880
+look at the result of macro-expand,
+which is going to
+
+00:15:20.880 --> 00:15:22.975
+show us the result of this,
+
+00:15:22.975 --> 00:15:25.519
+of the expansion of this.
+
+00:15:25.519 --> 00:15:27.804
+Instead of expanding and executing,
+
+00:15:27.804 --> 00:15:33.199
+it just expands and shows us the result.
+
+00:15:33.199 --> 00:15:35.439
+Here the result is a bit messy.
+
+00:15:35.439 --> 00:15:39.396
+It's too big for humans to understand,
+
+00:15:39.396 --> 00:15:42.894
+but we can run this or this text here.
+
+00:15:42.894 --> 00:15:47.519
+That takes that result
+and pretty-prints it.
+
+00:15:47.519 --> 00:15:50.701
+So this is the pretty-printed version
+
+00:15:50.701 --> 00:15:54.000
+of this macro here.
+
+00:15:54.000 --> 00:15:57.600
+We can see that it defines
+
+00:15:57.600 --> 00:16:01.120
+several functions here.
+
+00:16:01.120 --> 00:16:06.399
+For example, this one.
+
+00:16:06.399 --> 00:16:09.360
+And this, just as a curiosity, is a link
+
+00:16:09.360 --> 00:16:13.839
+to the definition of cl-defstruct.
+
+00:16:13.839 --> 00:16:16.880
+Note that the code is huge.
+
+00:16:16.880 --> 00:16:18.677
+Well, it's very well-commented,
+
+00:16:18.677 --> 00:16:22.577
+but it has lots of special cases.
+
+00:16:22.577 --> 00:16:26.210
+It supports lots of constructions,
+
+00:16:26.210 --> 00:16:27.920
+and so it's huge.
+
+00:16:27.920 --> 00:16:30.174
+It's very difficult to understand.
+
+00:16:30.174 --> 00:16:33.360
+I mean, I found it very difficult
+to understand.
+
+00:16:33.360 --> 00:16:35.040
+Here's a link to document the
+
+00:16:35.040 --> 00:16:37.759
+documentation of cl-defstruct
+
+00:16:37.759 --> 00:16:42.210
+here in the manual for cl,
+
+00:16:42.210 --> 00:16:45.025
+which is a kind of support
+
+00:16:45.025 --> 00:16:50.480
+for some features of Common Lisp
+in Emacs.
+
+00:16:50.480 --> 00:16:53.825
+So let's compare this standard way of
+
+00:16:53.825 --> 00:16:56.560
+defining functions that
+define new functions,
+
+00:16:56.560 --> 00:16:59.253
+which is with macros,
+with this.
+
+00:16:59.253 --> 00:17:02.300
+I'm going to use a slogan
+repeatedly.
+
+00:17:02.300 --> 00:17:06.319
+The slogan is: "I am a very bad
+programmer."
+
+00:17:06.319 --> 00:17:08.005
+I'm a very bad programmer.
+
+00:17:08.005 --> 00:17:10.082
+So, when I was trying to create
+functions
+
+00:17:10.082 --> 00:17:12.240
+that would define new functions,
+
+00:17:12.240 --> 00:17:14.480
+I found it easier to generally generate
+
+00:17:14.480 --> 00:17:16.400
+this code as text,
+
+00:17:16.400 --> 00:17:20.559
+and then run read and eval in it.
+
+00:17:20.559 --> 00:17:24.640
+The code-c-d that we saw
+in the previous section,
+
+00:17:24.640 --> 00:17:28.079
+we can see the code that it produces
+
+00:17:28.079 --> 00:17:30.769
+by making a copy of this line
+
+00:17:30.769 --> 00:17:32.579
+and prepending this string here
+
+00:17:32.579 --> 00:17:34.480
+to the name of the function.
+
+00:17:34.480 --> 00:17:36.317
+So, instead of running code-c-d,
+
+00:17:36.317 --> 00:17:38.400
+we run find-code-cd,
+
+00:17:38.400 --> 00:17:41.280
+and it creates a new temporary buffer
+
+00:17:41.280 --> 00:17:44.400
+with the code that
+
+00:17:44.400 --> 00:17:47.760
+code-c-d would execute.
+
+00:17:47.760 --> 00:17:54.080
+So it's a series of the defuns
+and a few setqs and so on.
+
+00:17:54.080 --> 00:17:59.120
+And this thing is implemented mostly as
+a template.
+
+00:18:02.160 --> 00:18:04.045
+There's an inner function called
+
+00:18:04.045 --> 00:18:06.240
+ee-code-c-d-base that receives just
+
+00:18:06.240 --> 00:18:08.799
+these two arguments, and it says...
+
+00:18:08.799 --> 00:18:10.640
+Essentially, it just runs the function
+
+00:18:10.640 --> 00:18:14.320
+ee-template0 on the string here, and
+
+00:18:14.320 --> 00:18:16.480
+the things between curly braces are
+
+00:18:16.480 --> 00:18:18.559
+substituted by the values
+
+00:18:18.559 --> 00:18:23.600
+of these arguments here.
+
+00:18:23.600 --> 00:18:25.919
+There's one part of the tutorial here
+
+00:18:25.919 --> 00:18:28.480
+that explains all these things,
+
+00:18:28.480 --> 00:18:31.039
+except for the rationale for some
+
+00:18:31.039 --> 00:18:32.559
+design decisions,
+
+00:18:32.559 --> 00:18:35.360
+and those design decisions are one of
+
+00:18:35.360 --> 00:18:37.280
+the many motivations for this talk.
+
+00:18:37.760 --> 00:18:39.679
+I'm only going to explain these
+
+00:18:39.679 --> 00:18:42.640
+things in detail at the end,
+
+00:18:42.640 --> 00:18:48.480
+which is kind of...
+
+00:18:48.480 --> 00:18:49.662
+So in the beginning, I said
+
+00:18:49.662 --> 00:18:51.600
+that the three main keys of eev
+
+00:18:51.600 --> 00:18:56.000
+are M-e, M-k and M-j.
+
+00:18:56.000 --> 00:19:00.080
+Let's see now what M-j does.
+
+00:19:00.080 --> 00:19:02.447
+I need to start with some
+motivation.
+
+00:19:02.447 --> 00:19:04.640
+The motivation is that we
+
+00:19:04.640 --> 00:19:06.559
+can define commands with very short
+
+00:19:06.559 --> 00:19:08.240
+names. Actually, I became kind of
+
+00:19:08.240 --> 00:19:10.160
+addicted to that.
+
+00:19:10.160 --> 00:19:13.200
+This is an example of defun that
+
+00:19:13.200 --> 00:19:15.600
+defines a comment with a very short name.
+
+00:19:15.600 --> 00:19:18.000
+Its name is just one letter, "e."
+
+00:19:18.000 --> 00:19:20.530
+and I can invoke... You invoke it
+
+00:19:20.530 --> 00:19:21.856
+with M-x e.
+
+00:19:21.856 --> 00:19:24.720
+If I type M-x p,
+
+00:19:24.720 --> 00:19:26.661
+now it opens a LaTeX file
+
+00:19:26.661 --> 00:19:31.130
+that I'm working on.
+
+00:19:32.559 --> 00:19:35.200
+I create most of my LaTeX files
+
+00:19:35.200 --> 00:19:39.200
+using template-based functions like
+
+00:19:39.200 --> 00:19:43.760
+the implementation of code-c-d above.
+
+00:19:43.760 --> 00:19:45.576
+These template-based functions
+
+00:19:45.576 --> 00:19:49.280
+create files with extension .tex
+
+00:19:49.280 --> 00:19:51.280
+that start with a series of defuns
+
+00:19:51.280 --> 00:19:53.919
+in comments. For example,
+
+00:19:53.919 --> 00:19:55.926
+let's look at this example here.
+
+00:19:55.926 --> 00:19:58.049
+If I execute find-latex-links
+
+00:19:58.049 --> 00:19:59.440
+with this argument,
+
+00:19:59.440 --> 00:20:02.525
+it's going to do several things
+
+00:20:02.525 --> 00:20:08.320
+for creating a file called /tmp/foo.tex,
+
+00:20:08.320 --> 00:20:10.387
+and the header of that file
+
+00:20:10.387 --> 00:20:12.400
+is going to be this,
+
+00:20:12.400 --> 00:20:16.080
+which starts with three
+
+00:20:16.080 --> 00:20:19.280
+defuns with functions with very short
+
+00:20:19.280 --> 00:20:21.919
+names and comments.
+
+00:20:21.919 --> 00:20:27.520
+Let's compare with the situation here.
+
+00:20:27.520 --> 00:20:32.799
+In my file, 2020favorite-conventions.tex,
+
+00:20:32.799 --> 00:20:34.640
+I have this header here in which I
+
+00:20:34.640 --> 00:20:39.360
+define six functions with
+very short names.
+
+00:20:39.360 --> 00:20:41.919
+And in this case here, that is even
+
+00:20:41.919 --> 00:20:44.799
+explained in the tutorial.
+
+00:20:44.799 --> 00:20:48.000
+These... We have mnemonics for
+
+00:20:48.000 --> 00:20:51.520
+these short names here. c is compile,
+
+00:20:51.520 --> 00:20:54.799
+d is display. I mean, display the PDF.
+
+00:20:54.799 --> 00:20:57.377
+e is added in the sense of
+
+00:20:57.377 --> 00:21:02.320
+make Emacs visit that file.
+
+00:21:02.320 --> 00:21:06.480
+Now I can explain what is M-j
+itself.
+
+00:21:06.480 --> 00:21:09.600
+We just saw commands with
+very short names.
+
+00:21:09.600 --> 00:21:12.048
+The idea behind M-j is that
+
+00:21:12.048 --> 00:21:14.031
+we can define commands with
+
+00:21:14.031 --> 00:21:16.480
+very short numbers.
+
+00:21:16.480 --> 00:21:19.679
+Let me explain this.
+
+00:21:19.679 --> 00:21:23.039
+The short explanation
+for what M-j does
+
+00:21:23.039 --> 00:21:25.360
+is that it jumps to set certain
+
+00:21:25.360 --> 00:21:27.039
+predefined places.
+
+00:21:27.039 --> 00:21:30.799
+In particular, a M-j without
+a numeric argument
+
+00:21:30.799 --> 00:21:32.216
+takes us to a buffer
+
+00:21:32.216 --> 00:21:34.080
+with the basic help
+
+00:21:34.080 --> 00:21:37.679
+and a list of the current jump targets.
+
+00:21:37.679 --> 00:21:39.760
+This is something that is a bit
+
+00:21:39.760 --> 00:21:41.520
+simpler to understand.
+
+00:21:41.520 --> 00:21:44.559
+If we type M-5 M-j,
+
+00:21:44.559 --> 00:21:48.411
+then M-j runs this sexp here
+
+00:21:48.411 --> 00:21:51.120
+that is associated to
+
+00:21:51.120 --> 00:21:55.440
+the argument 5. I say that the target
+
+00:21:55.440 --> 00:21:59.039
+for the argument 5 is this one,
+
+00:21:59.039 --> 00:22:01.520
+and if the argument is true, then the
+
+00:22:01.520 --> 00:22:03.760
+target associated to the true
+
+00:22:03.760 --> 00:22:07.039
+is this sexp here that opens...
+
+00:22:07.039 --> 00:22:09.600
+This one opens the main tutorial
+for eev,
+
+00:22:09.600 --> 00:22:13.679
+and this one opens another tutorial.
+
+00:22:13.679 --> 00:22:15.679
+This is a link to one of the tutorials
+
+00:22:15.679 --> 00:22:20.480
+of eev to the part that explains M-j.
+
+00:22:20.480 --> 00:22:22.212
+I've copied the the main part
+
+00:22:22.212 --> 00:22:24.559
+of the text here.
+
+00:22:24.559 --> 00:22:28.159
+The header that M-j shows...
+
+00:22:28.159 --> 00:22:31.360
+Let me show it very quickly here.
+
+00:22:31.360 --> 00:22:36.320
+Here is their head and
+here is the rest.
+
+00:22:36.320 --> 00:22:38.773
+The header is very beginner friendly,
+
+00:22:38.773 --> 00:22:40.000
+and if you're a beginner
+
+00:22:40.000 --> 00:22:42.159
+who only knows how to use M-e to
+
+00:22:42.159 --> 00:22:44.559
+execute and...
+
+00:22:44.559 --> 00:22:46.706
+This should be okay.
+
+00:22:46.706 --> 00:22:48.240
+M-k to go back.
+
+00:22:48.240 --> 00:22:52.320
+Then you can and should use that header--
+
+00:22:52.320 --> 00:22:56.720
+I mean, this header here--
+
+00:22:56.720 --> 00:22:58.894
+as your main starting point.
+
+00:22:58.894 --> 00:23:00.799
+Every time that you feel lost,
+
+00:23:00.799 --> 00:23:04.799
+you can type M-j to go back to
+that header,
+
+00:23:04.799 --> 00:23:08.000
+and you can use its links to
+navigate to the documentation
+
+00:23:08.000 --> 00:23:11.360
+for Emacs and eev. Let me explain that.
+
+00:23:11.360 --> 00:23:15.679
+This header here has several elisp
+hyperlinks.
+
+00:23:15.679 --> 00:23:22.400
+One here, one here, one here,
+one here, and so on.
+
+00:23:22.400 --> 00:23:25.760
+These ones are links to the
+
+00:23:25.760 --> 00:23:29.280
+to the intros, which are the tutorials.
+
+00:23:29.280 --> 00:23:31.520
+find-eev-quick-intro is the
+main tutorial,
+
+00:23:31.520 --> 00:23:35.760
+and find-emacs-keys-intro is a
+kind of tutorial that is
+
+00:23:35.760 --> 00:23:40.000
+an index of the main keys.
+
+00:23:40.000 --> 00:23:42.559
+After that, we have an explanation of
+
+00:23:42.559 --> 00:23:45.449
+what some numeric prefixes do.
+
+00:23:45.449 --> 00:23:49.913
+So if we type M-1 M-j,
+the effect of that
+
+00:23:49.913 --> 00:23:53.200
+is exactly the same as
+executing this.
+
+00:23:53.200 --> 00:24:00.159
+We can execute this with M-e also.
+
+00:24:00.159 --> 00:24:03.679
+M-2 M-j runs this sexp and
+
+00:24:03.679 --> 00:24:06.960
+I can also execute it with M-e.
+
+00:24:06.960 --> 00:24:18.400
+Here it is. It's this intro, this
+sandbox tutorial.
+
+00:24:18.400 --> 00:24:24.640
+Here is another sandbox tutorial.
+
+00:24:24.640 --> 00:24:27.039
+Let me go back. Then the
+
+00:24:27.039 --> 00:24:29.388
+documentation says that header,
+
+00:24:29.388 --> 00:24:31.760
+the header that is beginner-friendly
+
+00:24:31.760 --> 00:24:33.679
+is followed by a section that is very
+
+00:24:33.679 --> 00:24:35.520
+beginner-unfriendly
+
+00:24:35.520 --> 00:24:40.400
+that contains a series of defuns
+like these ones.
+
+00:24:40.400 --> 00:24:44.640
+Here, the last line of the header is
+this comment here.
+
+00:24:44.640 --> 00:24:48.559
+Then we have several defuns like this.
+
+00:24:48.559 --> 00:24:51.440
+Let me explain how these things work.
+
+00:24:51.440 --> 00:24:53.082
+Technically, what happens
+
+00:24:53.082 --> 00:24:56.399
+when we type M-j without any arguments
+
+00:24:56.399 --> 00:25:00.230
+is that it runs eejump with argument nil,
+
+00:25:00.230 --> 00:25:04.640
+and then this runs 5 eejumps.
+
+00:25:04.640 --> 00:25:07.224
+When I run M-j with a numeric argument,
+
+00:25:07.224 --> 00:25:13.374
+for example, with argument 5,
+it runs a jump 5.
+
+00:25:13.374 --> 00:25:17.679
+eejump-5 concatenates this 5 one
+
+00:25:17.679 --> 00:25:19.999
+to make a name of a function,
+
+00:25:19.999 --> 00:25:21.679
+this function here.
+
+00:25:21.679 --> 00:25:24.720
+and it executes this function
+eejump-5.
+
+00:25:24.720 --> 00:25:31.919
+You jump -5, and eejump-5
+
+00:25:31.919 --> 00:25:35.520
+executes find-eev-quick-intro.
+
+00:25:35.520 --> 00:25:39.360
+If I execute just M-j,
+
+00:25:39.360 --> 00:25:40.533
+the section that shows
+
+00:25:40.533 --> 00:25:43.919
+the current jump targets
+
+00:25:43.919 --> 00:25:46.719
+has a line for eejump-5. This is...
+
+00:25:46.719 --> 00:25:52.400
+That is exactly the thing
+that I was explaining before.
+
+00:25:52.400 --> 00:25:54.544
+So we can use M-j to navigate
+
+00:25:54.544 --> 00:25:59.520
+the tutorials. We can copy the links.
+
+00:25:59.520 --> 00:26:03.440
+Sorry. We can copy links to the
+
+00:26:03.440 --> 00:26:07.919
+tutorials to our notes.
+
+00:26:07.919 --> 00:26:11.840
+Oh, sorry, this has some typos.
+
+00:26:11.840 --> 00:26:14.880
+For example, if I execute this,
+
+00:26:14.880 --> 00:26:18.080
+I go to a section of this tutorial here
+
+00:26:18.080 --> 00:26:20.640
+that explains the main keys of eev.
+
+00:26:20.640 --> 00:26:23.670
+These things are hyperlinks.
+
+00:26:23.670 --> 00:26:25.597
+I can mark a hyperlink like this.
+
+00:26:25.597 --> 00:26:27.286
+it is just plain text.
+
+00:26:27.286 --> 00:26:29.525
+I can copy it to my notes.
+
+00:26:29.525 --> 00:26:31.760
+The idea is that every time
+
+00:26:31.760 --> 00:26:34.016
+that I find something that is
+interesting,
+
+00:26:34.016 --> 00:26:36.240
+I can create a hyperlink to it.
+
+00:26:36.240 --> 00:26:38.513
+I can put these links in my notes
+
+00:26:38.513 --> 00:26:40.799
+so I can navigate back
+
+00:26:40.799 --> 00:26:42.667
+to all the interesting positions
+
+00:26:42.667 --> 00:26:48.799
+very quickly.
+
+00:26:48.799 --> 00:26:57.600
+Okay, next feature.
+If we type M-J (uppercase), then
+
+00:26:57.600 --> 00:27:00.080
+this is a function that transforms
+
+00:27:00.080 --> 00:27:03.679
+the current line in a certain way.
+
+00:27:03.679 --> 00:27:06.471
+Let me give an example.
+Let me isolate this.
+
+00:27:06.471 --> 00:27:11.039
+Let me duplicate this line
+to make clear what happens.
+
+00:27:11.039 --> 00:27:14.240
+If I type M-J (uppercase) here,
+
+00:27:14.240 --> 00:27:17.561
+this line here becomes
+the defun for eejump-6,
+
+00:27:17.561 --> 00:27:21.200
+and the target of this eejump
+
+00:27:21.200 --> 00:27:24.799
+is exactly this sexp here.
+
+00:27:24.799 --> 00:27:28.559
+Let me undo this mess.
+
+00:27:28.559 --> 00:27:30.815
+If the first word in the line
+
+00:27:30.815 --> 00:27:32.840
+is not a number... For example,
+
+00:27:32.840 --> 00:27:36.240
+here, let me do the same thing:
+
+00:27:36.240 --> 00:27:41.200
+duplicate the line and type M-J,
+
+00:27:41.200 --> 00:27:44.014
+then M-J (uppercase) converts that to
+
+00:27:44.014 --> 00:27:49.440
+a defun that defines a function
+with a very short name.
+
+00:27:49.440 --> 00:27:52.720
+This function with a very short name
+
+00:27:52.720 --> 00:27:56.720
+opens this file here in the directory
+
+00:27:56.720 --> 00:27:59.360
+with the copy of the git repository
+
+00:27:59.360 --> 00:28:01.360
+for Org Mode.
+
+00:28:01.360 --> 00:28:05.360
+Let me undo the mess again.
+
+00:28:05.360 --> 00:28:14.640
+Oops. That's it.
+
+00:28:14.640 --> 00:28:21.279
+M-J (uppercase) is a particular case
+of something that
+
+00:28:21.279 --> 00:28:23.708
+I use a lot in eev.
+
+00:28:23.708 --> 00:28:28.799
+eev has lots of commands that--
+sorry, key sequences
+
+00:28:28.799 --> 00:28:31.466
+that are like M- uppercase letter,
+
+00:28:31.466 --> 00:28:34.660
+and almost all of them operate
+
+00:28:34.660 --> 00:28:36.019
+on the current line and
+
+00:28:36.019 --> 00:28:37.616
+transform the current line
+
+00:28:37.616 --> 00:28:38.880
+in a certain way.
+
+00:28:38.880 --> 00:28:42.000
+For example, this is a filename.
+
+00:28:42.000 --> 00:28:45.360
+If I type M-F (uppercase) here,
+
+00:28:45.360 --> 00:28:47.967
+it becomes a link to that file.
+
+00:28:47.967 --> 00:28:50.000
+This is the name of a man page.
+
+00:28:50.000 --> 00:28:53.600
+If I type M-M (uppercase) here,
+
+00:28:53.600 --> 00:28:55.292
+it converts that to the link
+
+00:28:55.292 --> 00:28:58.080
+to a manpage. This is a shell command.
+
+00:28:58.080 --> 00:29:01.679
+If I type M-S (uppercase) here,
+
+00:29:01.679 --> 00:29:04.960
+it converts that to a link to a
+
+00:29:04.960 --> 00:29:08.720
+to find-sh (shell).
+
+00:29:08.720 --> 00:29:12.960
+Until a few years ago,
+these functions
+
+00:29:12.960 --> 00:29:16.159
+with M- uppercase letter were half
+
+00:29:16.159 --> 00:29:18.880
+of my main ways of creating
+sexp hyperlinks
+
+00:29:18.880 --> 00:29:20.085
+with a few key strokes.
+
+00:29:20.085 --> 00:29:22.399
+In the beginning, of course,
+I had to create my
+
+00:29:22.399 --> 00:29:25.600
+sexp pipelines by typing each character.
+
+00:29:25.600 --> 00:29:28.640
+But after some time, I decided that
+
+00:29:28.640 --> 00:29:31.520
+I needed something more efficient.
+
+00:29:31.520 --> 00:29:38.480
+So this is the end of part one
+of the presentation.
+
+00:29:38.480 --> 00:29:40.640
+So this is part two of the presentation,
+
+00:29:40.640 --> 00:29:42.070
+and the main theme here
+
+00:29:42.070 --> 00:29:44.320
+is the standard describe-key
+
+00:29:44.320 --> 00:29:46.320
+function that comes with Emacs.
+
+00:29:46.320 --> 00:29:49.200
+My variant of it... The thing is that
+
+00:29:49.200 --> 00:29:50.960
+the standard describe-key in Emacs
+
+00:29:50.960 --> 00:29:52.738
+is user-friendly, but it is
+
+00:29:52.738 --> 00:29:55.600
+hacker-unfriendly. Well, I felt so.
+
+00:29:55.600 --> 00:29:58.281
+When I tried to complement it
+
+00:29:58.281 --> 00:30:00.799
+by writing a hacker-friendly
+version of it
+
+00:30:00.799 --> 00:30:03.919
+that produced the sexp hyperlinks
+that I needed,
+
+00:30:03.919 --> 00:30:06.457
+I got something that
+I found really lovely.
+
+00:30:07.039 --> 00:30:08.994
+Several of the main
+
+00:30:08.994 --> 00:30:12.480
+design decisions of eev can be seen there.
+
+00:30:12.480 --> 00:30:13.995
+When I showed my variants to
+
+00:30:13.995 --> 00:30:15.520
+other people, they hated it.
+
+00:30:15.520 --> 00:30:16.851
+They felt that it was
+
+00:30:16.851 --> 00:30:19.360
+totally against their notions of
+
+00:30:19.360 --> 00:30:23.440
+user-friendliness.
+
+00:30:23.440 --> 00:30:24.606
+Okay. So let's see.
+
+00:30:24.606 --> 00:30:26.297
+The standard describe-key,
+
+00:30:26.297 --> 00:30:30.401
+if I run this hyperlink here,
+I get this.
+
+00:30:30.401 --> 00:30:31.866
+The result of running
+
+00:30:31.866 --> 00:30:34.399
+describe-key on the key down...
+
+00:30:34.399 --> 00:30:35.799
+This is a big buffer
+
+00:30:35.799 --> 00:30:38.080
+with some things in italics.
+
+00:30:38.080 --> 00:30:40.752
+Some hyperlinks here.
+
+00:30:40.752 --> 00:30:42.387
+These hyperlinks are standard
+
+00:30:42.387 --> 00:30:43.679
+in the sense that
+
+00:30:43.679 --> 00:30:45.407
+the targets are not visible,
+
+00:30:45.407 --> 00:30:47.760
+and they are implemented using
+
+00:30:47.760 --> 00:30:49.519
+buttons in Emacs Lisp.
+
+00:30:49.519 --> 00:30:52.385
+This section of the Emacs Lisp manual
+
+00:30:52.385 --> 00:30:56.799
+describes how buttons work.
+
+00:30:56.799 --> 00:31:01.957
+The source code is quite difficult.
+
+00:31:01.957 --> 00:31:04.240
+I mean, when I was starting to
+
+00:31:04.240 --> 00:31:05.721
+to try to decipher this
+
+00:31:05.721 --> 00:31:07.600
+when I was a beginner
+
+00:31:07.600 --> 00:31:11.200
+using Emacs 19.34, I felt that this
+
+00:31:11.200 --> 00:31:12.320
+describe-key was
+
+00:31:12.320 --> 00:31:15.519
+very difficult to understand.
+
+00:31:15.519 --> 00:31:20.080
+I felt that the the designers,
+
+00:31:20.080 --> 00:31:22.640
+the people who wrote it,
+were sacrificing
+
+00:31:22.640 --> 00:31:24.839
+too much of the hacker-friendliness
+
+00:31:24.839 --> 00:31:27.154
+that I was expecting from it
+
+00:31:27.154 --> 00:31:31.279
+to make it beginner-friendly.
+
+00:31:31.279 --> 00:31:33.600
+Let me explain. What are the problems
+
+00:31:33.600 --> 00:31:35.511
+with the standard describe-key?
+
+00:31:35.511 --> 00:31:37.336
+If we think that hyperlinks
+
+00:31:37.336 --> 00:31:38.640
+are things like this
+
+00:31:38.640 --> 00:31:41.600
+with the target and the text, then in the
+
+00:31:41.600 --> 00:31:43.600
+button hyperlinks of describe-key,
+
+00:31:43.600 --> 00:31:46.516
+these three bad things happen.
+
+00:31:46.516 --> 00:31:49.983
+First, it is hard to extract
+the target from the hyperlink.
+
+00:31:49.983 --> 00:31:52.000
+Second, it is hard to recreate
+
+00:31:52.000 --> 00:31:55.440
+a list of code that would
+go to that target.
+
+00:31:55.440 --> 00:31:57.519
+Third, it is hard to copy the full
+
+00:31:57.519 --> 00:32:00.640
+hyperlink, including the targets
+to other buffers.
+
+00:32:00.640 --> 00:32:04.960
+I only knew how to copy the text
+
+00:32:04.960 --> 00:32:06.937
+when I was trying to decipher
+
+00:32:06.937 --> 00:32:09.039
+what describe-key was doing.
+
+00:32:09.039 --> 00:32:11.679
+I created lots of hyperlinks like this
+
+00:32:11.679 --> 00:32:16.159
+to inspect the text properties and
+things like that.
+
+00:32:16.159 --> 00:32:18.113
+For example, in the description
+
+00:32:18.113 --> 00:32:20.390
+of the key down here,
+
+00:32:20.390 --> 00:32:26.799
+we have a button that points to
+simple.el.
+
+00:32:26.799 --> 00:32:29.336
+The text of that button is simple.el.
+
+00:32:29.336 --> 00:32:31.600
+This hyperlink goes to the
+
+00:32:31.600 --> 00:32:35.519
+to the middle of this
+button hyperlink here.
+
+00:32:35.519 --> 00:32:39.120
+This hyperlink here
+
+00:32:39.120 --> 00:32:43.279
+goes to the middle of the button
+of this button hyperlink,
+
+00:32:43.279 --> 00:32:46.240
+and then inspects its text properties,
+
+00:32:46.240 --> 00:32:51.679
+and then goes to this section here
+of the description.
+
+00:32:51.679 --> 00:32:53.521
+So this is a high-level description
+
+00:32:53.521 --> 00:32:56.159
+of the text properties.
+
+00:32:56.159 --> 00:32:58.782
+I mean, the text properties that make it
+a button.
+
+00:32:58.782 --> 00:33:04.320
+This is a lower-level description of
+these text properties.
+
+00:33:04.320 --> 00:33:08.000
+The button that points to
+
+00:33:08.000 --> 00:33:11.440
+forward-line--sorry, the button
+
+00:33:11.440 --> 00:33:14.399
+whose text is forward-line, this one is
+
+00:33:14.399 --> 00:33:16.480
+slightly different--
+
+00:33:16.480 --> 00:33:21.200
+this hyperlink here goes to the middle
+of that button.
+
+00:33:21.200 --> 00:33:25.760
+This hyperlink goes to the middle of
+that button,
+
+00:33:25.760 --> 00:33:28.173
+inspects its text properties,
+
+00:33:28.173 --> 00:33:29.360
+and goes to the section
+
+00:33:29.360 --> 00:33:33.617
+of this button of this help buffer here
+
+00:33:33.617 --> 00:33:36.399
+that describes the button
+
+00:33:36.399 --> 00:33:41.679
+and the lower-level view of the text
+properties.
+
+00:33:41.679 --> 00:33:45.519
+So I started with things like this
+
+00:33:45.519 --> 00:33:47.866
+to understand what these buttons
+were doing
+
+00:33:47.866 --> 00:33:49.339
+and I was able to figure out
+
+00:33:49.339 --> 00:33:51.620
+how these things are implemented
+
+00:33:51.620 --> 00:33:53.120
+in describe-key, and then
+
+00:33:53.120 --> 00:33:55.519
+similar help functions in Emacs.
+
+00:33:55.519 --> 00:33:57.506
+I discovered that one of the
+
+00:33:57.506 --> 00:33:59.049
+main lower-level functions
+
+00:33:59.049 --> 00:34:01.360
+that Emacs used for this
+
+00:34:01.360 --> 00:34:05.279
+is a function called
+find-function-noselect.
+
+00:34:05.279 --> 00:34:09.929
+If I run find-function-noselect
+on next line,
+
+00:34:11.200 --> 00:34:14.240
+it returns a pair:
+
+00:34:14.240 --> 00:34:18.079
+a cons made of a buffer and a position.
+
+00:34:18.079 --> 00:34:20.560
+So I created functions that would
+
+00:34:21.679 --> 00:34:24.320
+follow this. That would open that
+
+00:34:24.320 --> 00:34:26.510
+buffer in that position
+
+00:34:26.510 --> 00:34:29.679
+and then this is a postback list.
+
+00:34:29.679 --> 00:34:31.679
+So we could go to these positions and
+
+00:34:31.679 --> 00:34:33.919
+then search for this string, and another
+
+00:34:33.919 --> 00:34:36.000
+string, and another string, and so on.
+
+00:34:36.000 --> 00:34:41.040
+So this goes to the definition
+of find-efunction
+
+00:34:41.040 --> 00:34:45.006
+and then to a string after it.
+
+00:34:45.006 --> 00:34:48.296
+I use these things to implement
+
+00:34:48.296 --> 00:34:51.839
+my own functions that pointed to the
+
+00:34:51.839 --> 00:34:55.339
+same targets as the button hyperlinks
+
+00:34:55.339 --> 00:35:00.240
+and describe-key.
+
+00:35:00.240 --> 00:35:02.673
+Again, let me show the comparison.
+
+00:35:02.673 --> 00:35:06.322
+This is the standard
+describe-key here,
+
+00:35:06.322 --> 00:35:10.480
+and this is my variant.
+
+00:35:10.480 --> 00:35:13.839
+It creates a buffer with links,
+
+00:35:13.839 --> 00:35:17.680
+with the list of hyperlinks about this key.
+
+00:35:17.680 --> 00:35:20.960
+We get this. So, each one of these
+
+00:35:20.960 --> 00:35:22.960
+functions is either a blank line
+
+00:35:22.960 --> 00:35:28.720
+or an elisp hyperlink.
+
+00:35:28.720 --> 00:35:34.506
+Here is a slight variant of the
+function find-ekey-links above.
+
+00:35:34.506 --> 00:35:39.280
+In this variant, the argument is a
+string that has to be processed by
+
+00:35:39.280 --> 00:35:42.400
+read-kbd-macro to convert it to the
+
+00:35:42.400 --> 00:35:45.280
+lower-level format.
+
+00:35:45.280 --> 00:35:49.040
+Note that these functions here
+that I wrote,
+
+00:35:49.040 --> 00:35:50.934
+they display temporary buffers
+
+00:35:50.934 --> 00:35:53.599
+with no help at all.
+
+00:35:53.599 --> 00:35:57.131
+To be honest, there's a link to
+
+00:35:57.131 --> 00:35:58.345
+a tutorial here,
+
+00:35:58.345 --> 00:36:00.467
+but this is a recent edition
+
+00:36:00.467 --> 00:36:03.200
+so let's ignore this.
+
+00:36:03.200 --> 00:36:06.640
+They display temporary buffers
+
+00:36:06.640 --> 00:36:07.949
+with no help at all,
+
+00:36:07.949 --> 00:36:09.520
+just lots of hyperlinks.
+
+00:36:09.520 --> 00:36:11.172
+And these hyperlinks can be...
+
+00:36:11.172 --> 00:36:13.359
+They are very hacker-friendly
+in the sense that
+
+00:36:13.359 --> 00:36:15.477
+they can be followed with M-e.
+
+00:36:15.477 --> 00:36:17.520
+They can be copied to other
+
+00:36:17.520 --> 00:36:19.920
+buffers because they are plain text,
+
+00:36:19.920 --> 00:36:23.680
+because they are just sexp.
+
+00:36:23.680 --> 00:36:28.000
+And they can be inspected
+in the sense that...
+
+00:36:28.000 --> 00:36:32.400
+For example, here,
+
+00:36:32.400 --> 00:36:35.520
+we have a hyperlink to a function
+that we...
+
+00:36:35.520 --> 00:36:37.599
+It may be difficult to figure out what
+
+00:36:37.599 --> 00:36:39.200
+this function does,
+
+00:36:39.200 --> 00:36:41.600
+but we can go to that position,
+
+00:36:41.600 --> 00:36:45.839
+and then type C-h f to see the
+
+00:36:45.839 --> 00:36:48.240
+description of this function.
+
+00:36:48.240 --> 00:36:53.890
+And here is a hyperlink that does that
+
+00:36:56.000 --> 00:37:00.160
+in my syntax, say.
+
+00:37:00.160 --> 00:37:02.800
+This list of hyperlinks were
+
+00:37:02.800 --> 00:37:08.000
+generated by this code here that just
+
+00:37:08.000 --> 00:37:11.119
+used a back quote to generate
+
+00:37:11.119 --> 00:37:14.640
+lists of sexps.
+
+00:37:14.640 --> 00:37:18.240
+I felt that this function here
+
+00:37:18.240 --> 00:37:20.700
+that just generated this list
+
+00:37:20.700 --> 00:37:23.393
+was very easy to understand
+and to modify,
+
+00:37:23.393 --> 00:37:28.480
+so this was hacker-friendly
+in the way that I wanted.
+
+00:37:28.480 --> 00:37:31.599
+So I started using this,
+
+00:37:31.599 --> 00:37:33.459
+and this idea of using buffers
+
+00:37:33.459 --> 00:37:36.066
+with sexp hyperlinks and no help
+
+00:37:36.066 --> 00:37:38.720
+violated all the notions
+of user-friendliness
+
+00:37:38.720 --> 00:37:40.079
+that I knew, so I was
+
+00:37:40.079 --> 00:37:41.504
+exploring something new
+
+00:37:41.504 --> 00:37:46.160
+at that time. This is the end of
+part two.
+
+00:37:46.160 --> 00:37:49.359
+Part three of this presentation is
+
+00:37:49.359 --> 00:37:51.735
+about the killer features of eev,
+
+00:37:51.735 --> 00:37:53.778
+or why everybody should use eev
+
+00:37:53.778 --> 00:37:55.789
+or at least have eev installed
+
+00:37:55.789 --> 00:37:59.280
+even if they think that eev
+is too weird.
+
+00:37:59.280 --> 00:38:01.200
+So this is a very quick listing.
+
+00:38:01.200 --> 00:38:04.240
+eev has elisp hyperlinks
+which are super nice.
+
+00:38:04.240 --> 00:38:06.050
+It comes with lots of tutorials.
+
+00:38:06.050 --> 00:38:10.800
+The main one here explains all the
+main features.
+
+00:38:10.800 --> 00:38:14.079
+There's also a tutorial that's
+
+00:38:14.079 --> 00:38:18.079
+an index of all the other tutorials here.
+
+00:38:18.079 --> 00:38:20.509
+Many, many, many tutorials.
+
+00:38:20.509 --> 00:38:24.079
+If we forget everything,
+we can just type M-j.
+
+00:38:24.079 --> 00:38:28.104
+Remember that this part here
+is beginner-friendly,
+
+00:38:28.104 --> 00:38:32.960
+and the rest is
+beginner-unfriendly.
+
+00:38:32.960 --> 00:38:38.320
+There's a tutorial on Emacs Lisp here.
+
+00:38:38.320 --> 00:38:41.920
+It mainly explains how to understand
+
+00:38:41.920 --> 00:38:44.640
+Elisp code, which is much easier than...
+
+00:38:44.640 --> 00:38:46.673
+It's much easier to understand
+Elisp code
+
+00:38:46.673 --> 00:38:50.160
+than to understand how to
+program in Elisp.
+
+00:38:50.160 --> 00:38:53.440
+Most people are only going to need this.
+
+00:38:53.440 --> 00:38:55.368
+eev is very easy to install.
+
+00:38:55.368 --> 00:38:58.240
+It's in ELPA, so we just need to do
+
+00:38:58.240 --> 00:39:03.520
+this thing here, and it's very
+non-invasive.
+
+00:39:03.520 --> 00:39:05.472
+Years ago, several years ago,
+
+00:39:05.472 --> 00:39:07.039
+it was a very invasive package,
+
+00:39:07.039 --> 00:39:08.960
+but then I changed everything.
+
+00:39:08.960 --> 00:39:13.520
+Now, if we toggle eev-mode on and off,
+
+00:39:13.520 --> 00:39:16.320
+what's going to happen is just that
+
+00:39:16.320 --> 00:39:21.599
+the eev-keymap becomes activated or
+deactivated.
+
+00:39:21.599 --> 00:39:24.720
+When we install eev--
+
+00:39:24.720 --> 00:39:27.064
+I mean when we require eev,
+
+00:39:27.064 --> 00:39:32.640
+the only things that happens globally
+are these things here:
+
+00:39:32.640 --> 00:39:34.993
+several functions and variables
+become defined.
+
+00:39:34.993 --> 00:39:40.079
+All of them have standard prefixes,
+except for one.
+
+00:39:40.079 --> 00:39:43.040
+Three characters are changed in the
+
+00:39:43.040 --> 00:39:44.480
+standard display table
+
+00:39:44.480 --> 00:39:48.640
+to make them appear as colored glyphs:
+
+00:39:48.640 --> 00:39:52.780
+the red star, the open
+double angle brackets,
+
+00:39:52.780 --> 00:39:58.160
+and the closed double angle brackets.
+
+00:39:58.160 --> 00:40:01.359
+Two environment variables are set.
+
+00:40:01.359 --> 00:40:04.560
+This is a trivial technicality.
+
+00:40:04.560 --> 00:40:10.800
+We just run a defadvice around one
+function that is used by "man."
+
+00:40:10.800 --> 00:40:18.400
+Also, eev has a very high
+discoverability factor.
+
+00:40:18.400 --> 00:40:22.135
+There's a way to create,
+a very easy way
+
+00:40:22.135 --> 00:40:25.200
+to create a hyperlink to here.
+
+00:40:25.200 --> 00:40:27.760
+I do not have time to show this now,
+
+00:40:27.760 --> 00:40:31.200
+but for example, if I'm here
+in a tutorial,
+
+00:40:31.200 --> 00:40:35.736
+and I think that this section
+is something interesting
+
+00:40:35.736 --> 00:40:39.520
+and I want to create a hyperlink to it,
+
+00:40:39.520 --> 00:40:43.040
+I just have to type a certain key
+sequence here,
+
+00:40:43.040 --> 00:40:45.783
+and here I got a hyperlink
+
+00:40:45.783 --> 00:40:48.269
+that I can copy to my notes,
+
+00:40:48.269 --> 00:40:52.260
+and this hyperlink goes to that section.
+
+00:40:58.240 --> 00:41:02.092
+We have hyperlinks that point to
+specific positions
+
+00:41:02.092 --> 00:41:05.382
+in PDF documents and in video files.
+
+00:41:05.382 --> 00:41:09.119
+Here, this one opens a PDF
+and displays it.
+
+00:41:09.119 --> 00:41:13.920
+This one opens a PDF
+and converts it to text.
+
+00:41:13.920 --> 00:41:18.400
+and this one opens the video in a
+certain position.
+
+00:41:18.400 --> 00:41:20.480
+We also have a way to control
+
+00:41:20.480 --> 00:41:22.079
+shell-like programs.
+
+00:41:22.079 --> 00:41:25.111
+In my presentation of the last year,
+
+00:41:25.111 --> 00:41:28.163
+I spent one third of the presentation
+explaining this,
+
+00:41:28.163 --> 00:41:31.839
+and I think that I gave a very good
+demonstration there.
+
+00:41:31.839 --> 00:41:35.680
+The demonstration is here.
+
+00:41:35.680 --> 00:41:37.908
+We can go to the web page,
+
+00:41:37.908 --> 00:41:41.839
+go to this section of the web page,
+
+00:41:41.839 --> 00:41:47.680
+and start by this point.
+
+00:41:47.680 --> 00:41:55.920
+And here we have an explanation
+and so on. Whatever.
+
+00:41:55.920 --> 00:41:58.720
+I've already mentioned this before.
+
+00:41:59.200 --> 00:42:02.240
+eev comes with a very nice Elisp
+tutorial.
+
+00:42:02.240 --> 00:42:05.599
+So that's it. This is the end of part
+three.
+
+00:42:05.599 --> 00:42:08.103
+So this is the last part of my
+presentation,
+
+00:42:08.103 --> 00:42:10.965
+and it's about the title of the
+presentation.
+
+00:42:10.965 --> 00:42:13.599
+I called the presentation, "Why
+
+00:42:13.599 --> 00:42:16.560
+Most of the Best Features in eev Look
+
+00:42:16.560 --> 00:42:20.480
+Like Five-Minute Hacks." I've already
+
+00:42:20.480 --> 00:42:23.920
+run out of time, so I have to skip this
+
+00:42:23.920 --> 00:42:28.485
+first part here in which
+I describe how
+
+00:42:28.485 --> 00:42:33.440
+I was exposed to several different
+notions of user-friendliness,
+
+00:42:33.440 --> 00:42:35.920
+and how the one that really blew my mind
+
+00:42:35.920 --> 00:42:41.680
+was the one in a certain
+Forth environment.
+
+00:42:41.680 --> 00:42:44.160
+Let me make the long, long story
+
+00:42:44.160 --> 00:42:46.560
+very, very short.
+
+00:42:46.560 --> 00:42:49.280
+In all this process, I switched from
+
+00:42:49.680 --> 00:42:52.960
+the belief that the user was always
+someone else,
+
+00:42:52.960 --> 00:42:55.359
+someone external, and that I always
+
+00:42:55.359 --> 00:42:57.040
+had to write my programs for
+
+00:42:57.040 --> 00:43:00.079
+this external user. I switched
+
+00:43:00.079 --> 00:43:00.173
+from that to the belief
+
+00:43:00.173 --> 00:43:03.200
+that I am the user.
+
+00:43:03.200 --> 00:43:06.319
+I can play with the interface
+that I want.
+
+00:43:06.319 --> 00:43:10.079
+I can write programs
+
+00:43:10.079 --> 00:43:11.786
+that only I am going to understand.
+
+00:43:11.786 --> 00:43:14.240
+I can experiment with
+hundreds of interfaces,
+
+00:43:14.240 --> 00:43:16.079
+select the best ones,
+
+00:43:16.079 --> 00:43:18.720
+document them, and then share them
+
+00:43:18.720 --> 00:43:20.960
+with other people
+
+00:43:20.960 --> 00:43:24.056
+who are also experimenting
+with interfaces
+
+00:43:24.056 --> 00:43:27.050
+in their own ways.
+
+00:43:27.050 --> 00:43:30.879
+So eev has lots of things
+that are user-friendly
+
+00:43:30.879 --> 00:43:34.880
+in these unusual ways that I've
+explained before.
+
+00:43:34.880 --> 00:43:37.160
+If we consider that
+
+00:43:37.160 --> 00:43:40.319
+this notion of user-friendliness
+is valid,
+
+00:43:40.319 --> 00:43:44.651
+then these things that eev implements,
+
+00:43:44.651 --> 00:43:46.904
+they are user-friendly
+and hacker-friendly
+
+00:43:46.904 --> 00:43:48.800
+at the same time.
+
+00:43:48.800 --> 00:43:50.346
+Let me show one example.
+
+00:43:51.119 --> 00:43:56.640
+This is one that really took me only
+five minutes to implement.
+
+00:43:56.640 --> 00:43:59.430
+At one point a few months ago,
+
+00:43:59.430 --> 00:44:05.599
+I discovered that Sacha Chua's weekly
+posts about Emacs News
+
+00:44:05.599 --> 00:44:08.800
+were also being posted to a
+
+00:44:08.800 --> 00:44:12.893
+mailing list that is stored at
+lists.gnu.org,
+
+00:44:12.893 --> 00:44:16.319
+and it's called emacs-tangents.
+
+00:44:16.319 --> 00:44:19.760
+I found a way to create
+
+00:44:19.760 --> 00:44:25.440
+the links to the posts in both places,
+
+00:44:25.440 --> 00:44:28.178
+but I had to use a template for that.
+
+00:44:28.178 --> 00:44:30.640
+So what we are seeing here now
+
+00:44:30.640 --> 00:44:33.221
+is a template with
+the default values.
+
+00:44:33.221 --> 00:44:38.243
+So this means that we have not set the
+year correctly.
+
+00:44:38.243 --> 00:44:40.720
+We have not set the month correctly,
+
+00:44:40.720 --> 00:44:42.173
+or the day correctly,
+
+00:44:42.173 --> 00:44:45.462
+but if we run this sexp here...
+
+00:44:45.462 --> 00:44:48.960
+Let me do something else before...
+
+00:44:48.960 --> 00:44:53.359
+If we run this sexp here,
+
+00:44:53.359 --> 00:45:00.880
+we change some of these entries
+
+00:45:00.880 --> 00:45:05.200
+in the template, and we get
+these links here.
+
+00:45:05.200 --> 00:45:07.719
+They all work. For example,
+
+00:45:07.719 --> 00:45:13.552
+this one opens the blog post in
+Sacha Chua's site,
+
+00:45:13.552 --> 00:45:21.280
+and this one opens it
+in the mailing list.
+
+00:45:21.280 --> 00:45:23.672
+Sometimes I want
+the Org source of that,
+
+00:45:23.672 --> 00:45:26.520
+and the easiest way
+to get the Org source
+
+00:45:26.520 --> 00:45:31.680
+is to look at this link here
+that has an attachment.
+
+00:45:31.680 --> 00:45:35.839
+If I take this link here,
+
+00:45:35.839 --> 00:45:43.342
+and I take this stem that points to the
+attachment, and I put it here,
+
+00:45:43.342 --> 00:45:45.440
+and I generate this page again
+
+00:45:45.440 --> 00:45:50.000
+with all this data,
+then I get a script here
+
+00:45:50.000 --> 00:45:51.673
+that downloads...
+
+00:45:51.673 --> 00:45:54.640
+Let me switch to a smaller font.
+
+00:45:54.640 --> 00:45:58.160
+It downloads this attachment
+
+00:45:58.160 --> 00:46:01.599
+and it renames that attachment to
+something:
+
+00:46:01.599 --> 00:46:06.000
+./emacs-news -- sorry, something's...
+
+00:46:06.000 --> 00:46:10.720
+-emacs-news-something
+
+00:46:10.720 --> 00:46:15.119
+something emacs-news.org here.
+
+00:46:15.119 --> 00:46:16.750
+The file is already here,
+
+00:46:16.750 --> 00:46:18.400
+already with the right name.
+
+00:46:18.400 --> 00:46:22.079
+So I can open it with
+just this hyperlink.
+
+00:46:22.079 --> 00:46:23.780
+Let me go to the big font again.
+
+00:46:25.200 --> 00:46:28.673
+And now I have the Org source
+for that hyperlink--
+
+00:46:28.673 --> 00:46:33.839
+Sorry, for that blog post.
+
+00:46:33.839 --> 00:46:37.911
+And so this one-line thing here
+
+00:46:37.911 --> 00:46:40.960
+is, in a sense,
+
+00:46:40.960 --> 00:46:45.119
+a hyperlink to this blog post
+in all its formats.
+
+00:46:45.119 --> 00:46:48.640
+If I execute this, I get links to
+
+00:46:48.640 --> 00:46:52.000
+all the places where it is posted,
+
+00:46:52.000 --> 00:46:56.000
+and I get a script to
+download the local copy
+
+00:46:56.000 --> 00:47:00.480
+of the Org source of it. And that's it.
+
+00:47:00.480 --> 00:47:02.506
+Well, I'm already out of time,
+
+00:47:02.506 --> 00:47:04.480
+so let me finish here.
+
+00:47:04.480 --> 00:47:10.079
+Thanks. Bye.
diff --git a/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt b/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt
new file mode 100644
index 00000000..46b7433f
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--22-powering-up-special-blocks--musa-al-hassy.vtt
@@ -0,0 +1,1723 @@
+WEBVTT
+
+00:00:04.080 --> 00:00:07.359
+All right, then. Well, hello everyone.
+
+00:00:07.359 --> 00:00:11.519
+I hope you're all enjoying the EmacsConf.
+
+00:00:11.519 --> 00:00:15.040
+My name is Musa Al-hassy, and I hope you're
+
+00:00:15.040 --> 00:00:19.840
+excited to learn about powering up special blocks.
+
+00:00:19.840 --> 00:00:25.574
+Let's first off find out
+what these special blocks are,
+
+00:00:25.574 --> 00:00:27.920
+and see what we can go from.
+
+00:00:27.920 --> 00:00:30.240
+Yesterday, I saw a lot of cool talks
+
+00:00:30.240 --> 00:00:33.200
+and people were chatting about
+
+00:00:33.200 --> 00:00:37.200
+how should you present? Should you
+do it this way or that way?
+
+00:00:37.200 --> 00:00:39.931
+I thought maybe I should try a different way.
+
+00:00:39.931 --> 00:00:42.567
+But I'm talking about special blocks
+
+00:00:42.567 --> 00:00:45.039
+and if I show you an Emacs, then I have to export
+
+00:00:45.039 --> 00:00:47.840
+the HTML so you can see what it looks like
+
+00:00:47.840 --> 00:00:51.920
+or export to a PDF so you can see what it looks like.
+
+00:00:51.920 --> 00:00:54.239
+So I ended up writing in org-reveal,
+
+00:00:54.239 --> 00:00:58.233
+and joyously, this just works.
+
+00:00:58.960 --> 00:01:00.879
+You can just see things here.
+
+00:01:00.879 --> 00:01:03.452
+I was worried that I'd have to take pictures
+
+00:01:03.452 --> 00:01:09.760
+and then insert pings, so that was a delight.
+
+00:01:09.760 --> 00:01:15.704
+Okay. Special blocks are these things like a center small quote.
+
+00:01:15.704 --> 00:01:17.280
+That's what a special block is,
+
+00:01:17.280 --> 00:01:19.733
+and with a bit of Lisp, we can make
+
+00:01:19.733 --> 00:01:22.741
+special blocks and link types.
+
+00:01:22.741 --> 00:01:24.799
+Right. Using a single interface.
+
+00:01:24.799 --> 00:01:27.344
+The interface is going to be similar
+
+00:01:27.344 --> 00:01:29.281
+to one many people are familiar with.
+
+00:01:29.281 --> 00:01:34.712
+In particular, Org Babel's src interface
+
+00:01:34.712 --> 00:01:37.840
+as well as using global header arguments for link types.
+
+00:01:37.840 --> 00:01:39.450
+The idea is to write it once
+
+00:01:39.450 --> 00:01:41.200
+and generate many different kinds.
+
+00:01:41.200 --> 00:01:45.213
+You write in Org markup and you can have HTML,
+
+00:01:45.213 --> 00:01:49.767
+you can have PDF, and joyously, org-reveal.
+
+00:01:49.767 --> 00:01:53.600
+That was an unexpected delight.
+
+00:01:53.600 --> 00:01:57.840
+Here are a few that you'll just see
+
+00:01:57.840 --> 00:02:01.759
+in this presentation.
+
+00:02:01.759 --> 00:02:05.040
+I won't show some of these link-only ones,
+
+00:02:05.040 --> 00:02:06.799
+but we'll see a few of these other ones
+
+00:02:06.799 --> 00:02:09.500
+just to make the presentation look nice
+
+00:02:09.500 --> 00:02:11.520
+So the presentation is really going to
+
+00:02:11.520 --> 00:02:14.000
+present these blocks and the mechanism
+
+00:02:14.000 --> 00:02:15.120
+at the same time.
+
+00:02:15.120 --> 00:02:18.400
+No HTML was written.
+
+00:02:18.400 --> 00:02:21.280
+Look, Ma! No HTML, just pure Org Mode,
+
+00:02:21.280 --> 00:02:25.840
+and you get all these beautiful boxes and things.
+
+00:02:25.840 --> 00:02:27.680
+The motivation for this is...
+
+00:02:29.120 --> 00:02:31.200
+you're online, you run into a blog,
+
+00:02:31.200 --> 00:02:32.120
+and you see something you like,
+
+00:02:32.120 --> 00:02:33.120
+and you're like, man,
+
+00:02:33.120 --> 00:02:36.640
+you know, I wish I could produce that.
+
+00:02:36.640 --> 00:02:41.639
+But you check, and the author wrote raw HTML.
+
+00:02:41.639 --> 00:02:44.239
+You know, #+HTML: everywhere.
+
+00:02:44.239 --> 00:02:49.533
+That's going to obscure your real content.
+
+00:02:49.533 --> 00:02:51.200
+It's going to be surrounded by all this
+
+00:02:51.200 --> 00:02:54.239
+styling information. That's unfortunate.
+
+00:02:54.239 --> 00:02:57.033
+The author decides to use an Org macro.
+
+00:02:57.033 --> 00:02:58.959
+All right, a bit better,
+
+00:02:58.959 --> 00:03:00.333
+but then what if you decide,
+
+00:03:00.333 --> 00:03:04.667
+hey I want to make a PDF? Not great.
+
+00:03:04.667 --> 00:03:06.000
+And then the worst of all,
+
+00:03:06.000 --> 00:03:07.840
+the author doesn't give you the source,
+
+00:03:07.840 --> 00:03:10.159
+and then you have to view page source,
+
+00:03:10.159 --> 00:03:13.760
+and learn cascading style sheets,
+
+00:03:14.239 --> 00:03:15.767
+and sit in a corner and cry,
+
+00:03:15.767 --> 00:03:18.080
+and decide to do other things with your life.
+
+00:03:18.080 --> 00:03:22.640
+We want to give you Org users numerous styles
+
+00:03:22.640 --> 00:03:27.200
+and an extensible mechanism to add more of these
+
+00:03:27.200 --> 00:03:28.799
+aesthetically pleasing styles,
+
+00:03:28.799 --> 00:03:31.200
+to have really nice things
+
+00:03:31.200 --> 00:03:33.933
+look one way in the HTML
+
+00:03:33.933 --> 00:03:36.567
+and look almost the same way in the PDF
+
+00:03:36.567 --> 00:03:38.667
+and other back ends.
+
+00:03:38.667 --> 00:03:41.680
+And if by having these newer ones,
+
+00:03:41.680 --> 00:03:45.519
+people might be encouraged to try making new ones,
+
+00:03:45.519 --> 00:03:49.040
+especially when the interface is not so difficult,
+
+00:03:49.040 --> 00:03:54.159
+that's the aim.
+
+00:03:54.159 --> 00:03:59.120
+So let's have a real story to motivate this even more.
+
+00:03:59.120 --> 00:04:03.533
+Here's three friends. I hope I don't butcher their names,
+
+00:04:03.533 --> 00:04:04.640
+but these friends are called
+
+00:04:04.640 --> 00:04:08.720
+Amin, Sacha, and Corwin. They're organizing a conference,
+
+00:04:08.720 --> 00:04:12.080
+EmacsConf 2020.
+
+00:04:12.080 --> 00:04:14.239
+So Sacha decides to write an Org file
+
+00:04:14.239 --> 00:04:16.479
+and she would like some feedback.
+
+00:04:16.479 --> 00:04:19.840
+Okay. Just to make it clear, there's no...
+
+00:04:19.840 --> 00:04:22.960
+just how easy this looks,
+
+00:04:22.960 --> 00:04:27.280
+let's look at the source for this block.
+
+00:04:27.280 --> 00:04:30.720
+Notice it's just the word "green," then a colon,
+
+00:04:30.720 --> 00:04:37.333
+then Amin. No div style coloring,
+
+00:04:37.333 --> 00:04:38.479
+just green:Amin.
+
+00:04:38.479 --> 00:04:41.520
+A very pleasant Org markup.
+
+00:04:41.520 --> 00:04:44.960
+So that's quite nice. Put some bold around it.
+
+00:04:44.960 --> 00:04:46.433
+Not too difficult.
+
+00:04:46.433 --> 00:04:49.900
+Hopefully, this will be useful to other people as well.
+
+00:04:49.900 --> 00:04:52.240
+So what kind of feedback
+
+00:04:52.240 --> 00:04:55.233
+would Sacha expect to get?
+
+00:04:55.233 --> 00:04:59.120
+Maybe she would expect top-level remarks
+
+00:04:59.120 --> 00:05:00.833
+visible in the export.
+
+00:05:00.833 --> 00:05:04.400
+When she makes an HTML, she can see right there a big block.
+
+00:05:04.400 --> 00:05:09.533
+Right. Maybe Amin will suggest to Sacha,
+
+00:05:09.533 --> 00:05:11.120
+please replace this part
+
+00:05:11.120 --> 00:05:12.267
+with this other part
+
+00:05:12.267 --> 00:05:13.333
+or replace this word
+
+00:05:13.333 --> 00:05:14.639
+with this other word.
+
+00:05:14.639 --> 00:05:16.960
+This is not really possible
+
+00:05:16.960 --> 00:05:21.919
+with raw HTML or with even LaTeX.
+
+00:05:21.919 --> 00:05:24.000
+You'd have to have multiple arguments:
+
+00:05:24.000 --> 00:05:25.360
+the first argument, and then
+
+00:05:25.360 --> 00:05:28.800
+the replacement argument. It's a bit clunky.
+
+00:05:28.800 --> 00:05:32.080
+But with our setup, you just write some text,
+
+00:05:32.080 --> 00:05:34.367
+write #+replace_with
+
+00:05:34.367 --> 00:05:36.240
+and then write more text, and you're good to go.
+
+00:05:36.240 --> 00:05:39.440
+Normal Org markup.
+
+00:05:39.440 --> 00:05:40.720
+Everyone speaks different languages.
+
+00:05:40.720 --> 00:05:43.833
+Maybe they want to use one word,
+
+00:05:43.833 --> 00:05:45.919
+or they're arguing about
+
+00:05:45.919 --> 00:05:48.000
+whether we talk about frames or windows,
+
+00:05:48.000 --> 00:05:50.560
+so maybe they want to have some translations.
+
+00:05:50.560 --> 00:05:53.433
+So there are different kinds of feedback.
+
+00:05:53.433 --> 00:05:55.360
+Let's take an example.
+
+00:05:55.360 --> 00:05:59.360
+Look at what they are.
+
+00:05:59.360 --> 00:06:02.560
+For example, Sacha might write
+
+00:06:02.560 --> 00:06:06.160
+this Org Mode right here,
+
+00:06:06.160 --> 00:06:09.759
+and then in her HTML exports, you might see this,
+
+00:06:09.759 --> 00:06:12.733
+and her feedback might look really nicely
+
+00:06:12.733 --> 00:06:13.840
+from anyone who says
+
+00:06:14.560 --> 00:06:17.400
+let's do some Lisp instead of mathematics.
+
+00:06:17.400 --> 00:06:18.560
+Let's just do some Lisp.
+
+00:06:18.560 --> 00:06:22.479
+Corwin says, let's not be so silly.
+
+00:06:22.479 --> 00:06:25.120
+Let's just say 9 a.m. and move on.
+
+00:06:28.080 --> 00:06:31.360
+Amin likes to export to PDF,
+
+00:06:31.360 --> 00:06:34.333
+and so he writes his top-level remarks using LaTeX.
+
+00:06:34.333 --> 00:06:36.900
+That's how. To get this square
+
+00:06:36.900 --> 00:06:38.960
+Amin: please change whatever,
+
+00:06:38.960 --> 00:06:43.120
+he might write like this: #+latex:.
+
+00:06:43.120 --> 00:06:50.880
+But then Sacha only exports to HTML, for example,
+
+00:06:50.880 --> 00:06:54.880
+so she doesn't look at the PDF,
+
+00:06:54.880 --> 00:06:57.867
+and she may not see his top-level feedback
+
+00:06:57.867 --> 00:07:00.667
+with those nice brackets and and bold.
+
+00:07:00.667 --> 00:07:03.120
+She might think everything's good.
+
+00:07:03.120 --> 00:07:06.160
+That can be a bit disastrous.
+
+00:07:06.160 --> 00:07:08.600
+So maybe Sacha will then
+
+00:07:08.600 --> 00:07:13.199
+make some of her own feedback.
+
+00:07:13.199 --> 00:07:16.160
+To produce it, she might write
+
+00:07:16.560 --> 00:07:21.680
+HTML commands, #+html: to get that.
+
+00:07:21.680 --> 00:07:24.100
+But then Amin will make a PDF,
+
+00:07:24.100 --> 00:07:25.680
+and this won't stick out.
+
+00:07:25.680 --> 00:07:28.367
+So he might think everything's okay,
+
+00:07:28.367 --> 00:07:30.160
+even though it's not.
+
+00:07:30.160 --> 00:07:33.100
+Then Corwin actually decides,
+
+00:07:33.100 --> 00:07:35.900
+"Hey, let me read the exported result
+
+00:07:35.900 --> 00:07:38.867
+and there's all those feedback
+from two people
+
+00:07:38.867 --> 00:07:42.633
+who haven't read anything,
+because maybe they were in a rush,
+
+00:07:42.633 --> 00:07:45.167
+and didn't see the top-level feedback.
+
+00:07:45.167 --> 00:07:50.000
+So they agree. "Hey, let's have a
+uniform Org interface that exports
+
+00:07:50.000 --> 00:07:52.567
+to both HTML and PDF.
+
+00:07:52.567 --> 00:07:54.080
+Make both of us happy."
+
+00:07:54.080 --> 00:07:58.160
+Okay. So they decide to use
+Org special blocks.
+
+00:07:58.160 --> 00:08:01.300
+Right. To set this up,
+
+00:08:01.300 --> 00:08:04.400
+they need to read a little bit of Lisp,
+
+00:08:04.400 --> 00:08:08.879
+hooks, advice, macros to get all of this
+set up,
+
+00:08:08.879 --> 00:08:12.319
+and then they'll use Org as the main
+interface.
+
+00:08:12.319 --> 00:08:16.479
+It's a lot of work, but it's worth it,
+right? maybe?
+
+00:08:16.479 --> 00:08:19.360
+But then Corwin's a bit terse.
+
+00:08:19.759 --> 00:08:24.333
+Corwin maybe doesn't want to
+write using blocks.
+
+00:08:24.333 --> 00:08:26.080
+He thinks they're overkill.
+
+00:08:26.080 --> 00:08:32.560
+Sacha wants HTML, and Amin wants PDF,
+and Corwin wants org-reveal.
+
+00:08:32.560 --> 00:08:35.533
+So now they have to reformat
+all their code.
+
+00:08:35.533 --> 00:08:36.900
+And then they need to use org link types
+
+00:08:36.900 --> 00:08:38.867
+to reduce the overkill,
+
+00:08:38.867 --> 00:08:41.367
+so they can try to avoid duplication
+
+00:08:41.367 --> 00:08:46.800
+by factoring things out into
+self-contained functions.
+
+00:08:46.800 --> 00:08:50.320
+But now, to set up our links,
+
+00:08:50.320 --> 00:08:55.467
+we'll have to learn a new interface, org
+setup link.
+
+00:08:55.467 --> 00:09:02.160
+Learn a little bit about fonts, follow
+links, export handlers...
+
+00:09:02.160 --> 00:09:05.040
+It's so much. That's so much. But then,
+
+00:09:05.040 --> 00:09:06.800
+the friends, they learn a lot.
+
+00:09:06.800 --> 00:09:08.399
+They learn about defun.
+
+00:09:08.399 --> 00:09:11.120
+So these words are red.
+
+00:09:11.120 --> 00:09:12.185
+You get a little explanation.
+
+00:09:12.185 --> 00:09:14.320
+I think it's a bit too small for anyone
+to read.
+
+00:09:14.320 --> 00:09:18.000
+This is Lisp documentation for defun.
+
+00:09:18.000 --> 00:09:21.600
+advice-add. There's some Lisp
+documentation.
+
+00:09:21.600 --> 00:09:23.600
+They learn about destructuring -let.
+
+00:09:23.600 --> 00:09:25.279
+This is from the dash library.
+
+00:09:25.279 --> 00:09:26.959
+Here's all that glorious,
+
+00:09:26.959 --> 00:09:28.800
+glorious documentation with examples.
+
+00:09:28.800 --> 00:09:30.300
+Sorry. I like that.
+
+00:09:30.300 --> 00:09:32.467
+They might make
+an ad-hoc mechanism
+
+00:09:32.467 --> 00:09:35.400
+to simulate arguments for special blocks,
+
+00:09:35.400 --> 00:09:38.500
+so something maybe called
+extract-arguments,
+
+00:09:38.500 --> 00:09:41.533
+and then, of course, to make
+new link types,
+
+00:09:41.533 --> 00:09:42.480
+they have to learn about
+
+00:09:42.480 --> 00:09:47.400
+org-link-set-parameters and
+its numerous bits and pieces.
+
+00:09:49.920 --> 00:09:53.600
+Let's close all these ones down.
+
+00:09:53.600 --> 00:09:55.800
+Of course they also need to be
+comfortable
+
+00:09:55.800 --> 00:09:59.920
+with loops and maps and matching and
+string functions.
+
+00:09:59.920 --> 00:10:02.560
+So it's a bit of a pain.
+
+00:10:03.360 --> 00:10:05.839
+It's probably not worth it.
+
+00:10:05.839 --> 00:10:07.767
+Maybe I'll just rush things quickly,
+
+00:10:07.767 --> 00:10:09.360
+or do it ad-hoc...
+
+00:10:10.320 --> 00:10:13.680
+We have things to do.
+
+00:10:13.680 --> 00:10:19.367
+But maybe the squad wants to have a
+modular and unified interface
+
+00:10:19.367 --> 00:10:23.700
+so everyone's comfortable with defun to
+define a function
+
+00:10:23.700 --> 00:10:29.440
+and they say, "It would be nice if we
+could just define simultaneously
+
+00:10:29.440 --> 00:10:32.959
+both a block and the link type."
+
+00:10:32.959 --> 00:10:36.000
+That way, we have a single interface
+
+00:10:36.000 --> 00:10:37.867
+Org mode, for these things.
+
+00:10:37.867 --> 00:10:39.767
+It would be nice if it was modular.
+
+00:10:39.767 --> 00:10:44.633
+If I defined a one kind of block and
+you defined another,
+
+00:10:44.633 --> 00:10:45.519
+we could compose them,
+
+00:10:45.519 --> 00:10:49.360
+then get a nice bigger block, like LEGO.
+
+00:10:49.360 --> 00:10:52.320
+That would be nice. Building blocks.
+
+00:10:52.320 --> 00:10:56.240
+This is what we have come up with,
+called defblock.
+
+00:10:56.240 --> 00:11:01.760
+It also has a long documentation string
+containing examples and things.
+
+00:11:01.760 --> 00:11:04.800
+So that way, it can try to be useful.
+
+00:11:04.800 --> 00:11:10.880
+Let's look at a solution to these
+friends' trilemma.
+
+00:11:10.880 --> 00:11:14.320
+So here's a way to define a block.
+
+00:11:14.320 --> 00:11:22.320
+It doesn't look that difficult, but this
+is how they can define a block
+
+00:11:22.320 --> 00:11:25.920
+for their top-level feedback.
+
+00:11:25.920 --> 00:11:28.959
+Let's look at the three main parts
+together.
+
+00:11:28.959 --> 00:11:31.233
+It's not that difficult, I hope.
+
+00:11:31.233 --> 00:11:35.300
+Just six lines, and that's including a
+documentation string,
+
+00:11:35.300 --> 00:11:37.633
+newlines and things.
+
+00:11:37.633 --> 00:11:43.300
+So in line 1, we define the block just
+like you define a function.
+
+00:11:43.300 --> 00:11:44.880
+We define a block.
+
+00:11:44.880 --> 00:11:47.433
+The block name is going to be called
+"feedback."
+
+00:11:47.433 --> 00:11:49.680
+It has an author, "who."
+
+00:11:49.680 --> 00:11:54.133
+The author has no default value.
+
+00:11:54.133 --> 00:11:57.760
+It has a color, and the color has a
+default value of red.
+
+00:11:57.760 --> 00:12:01.680
+So just as when you define functions,
+
+00:12:01.680 --> 00:12:06.233
+you start by define or defblock,
+
+00:12:06.233 --> 00:12:13.440
+then the name, some mandatory argument,
+and some optional arguments.
+
+00:12:13.440 --> 00:12:18.480
+Then the next stage is definition.
+Documentation.
+
+00:12:18.480 --> 00:12:20.133
+The people who use this,
+
+00:12:20.133 --> 00:12:22.880
+which are future you or future me,
+
+00:12:22.880 --> 00:12:25.519
+might want to know what this is.
+
+00:12:25.519 --> 00:12:27.839
+So let's get to document this.
+
+00:12:27.839 --> 00:12:32.079
+For Corwin, who might want to use
+tooltips...
+
+00:12:32.079 --> 00:12:37.120
+When Corwin writes feedback in Emacs,
+they'll see a nice little tooltip,
+
+00:12:37.120 --> 00:12:38.639
+and the tooltip will have
+
+00:12:38.639 --> 00:12:41.279
+this documentation string.
+
+00:12:41.279 --> 00:12:43.279
+That'll be nice.
+
+00:12:43.279 --> 00:12:45.980
+And then here's the third part.
+
+00:12:45.980 --> 00:12:48.067
+The last three lines are not so
+difficult.
+
+00:12:48.067 --> 00:12:52.800
+If the backend is HTML,
+
+00:12:52.800 --> 00:12:55.360
+please use this template string.
+
+00:12:55.360 --> 00:12:57.440
+Otherwise, use the other string.
+
+00:12:57.440 --> 00:13:01.279
+For each of these string markers,
+
+00:13:01.279 --> 00:13:04.959
+please put in the color, who wrote it,
+and then the contents
+
+00:13:04.959 --> 00:13:07.279
+of the special block or the link type.
+
+00:13:08.160 --> 00:13:11.600
+So that's pretty neat. Not so difficult.
+
+00:13:11.600 --> 00:13:14.639
+I thought that was kind of cool,
+
+00:13:14.639 --> 00:13:16.600
+then noticed it's anaphoric.
+
+00:13:16.600 --> 00:13:21.033
+This defblock gives you two new names.
+
+00:13:21.033 --> 00:13:23.433
+It gives you a name called contents,
+
+00:13:23.433 --> 00:13:26.480
+and it gives you a name called backend.
+
+00:13:26.480 --> 00:13:29.733
+So even if you're writing a defblock
+
+00:13:29.733 --> 00:13:32.560
+and you intend it to be used
+only for links...
+
+00:13:32.560 --> 00:13:35.440
+Like these colors, for example.
+
+00:13:35.440 --> 00:13:38.399
+These colors were defined using defblock.
+
+00:13:38.399 --> 00:13:41.279
+I used them as links right here.
+
+00:13:41.279 --> 00:13:43.360
+You don't need to worry
+
+00:13:43.360 --> 00:13:45.300
+where does the text come from
+in the link.
+
+00:13:45.300 --> 00:13:48.959
+If I say "red:Bob," is it Bob?
+
+00:13:48.959 --> 00:13:52.000
+Or if I put a description, is it the
+description?
+
+00:13:52.000 --> 00:13:54.000
+So it's whatever is available will
+
+00:13:54.000 --> 00:13:56.720
+become the value of contents.
+
+00:13:56.720 --> 00:13:59.199
+If you're really interested
+
+00:13:59.199 --> 00:14:02.433
+and you want to do some intricate stuff,
+
+00:14:02.433 --> 00:14:06.933
+defblock also gives you something called
+raw-contents,
+
+00:14:06.933 --> 00:14:08.633
+if you really want to touch
+
+00:14:08.633 --> 00:14:12.639
+the raw contents with all of the Org
+markups still there.
+
+00:14:12.639 --> 00:14:19.440
+Let's see how everyone can communicate
+amongst themselves
+
+00:14:19.440 --> 00:14:22.480
+using this new interface.
+
+00:14:22.480 --> 00:14:26.000
+So, Sacha speculates and she... How does
+
+00:14:26.000 --> 00:14:28.399
+she speculate for her Org HTML?
+
+00:14:28.399 --> 00:14:33.733
+She might just write. Hey look at that,
+no HTML, nice.
+
+00:14:34.800 --> 00:14:36.833
+Amin wants to have some green,
+
+00:14:36.833 --> 00:14:39.600
+and so he just says, hey here's some
+color green.
+
+00:14:39.600 --> 00:14:42.959
+There you go. It looks almost the same.
+
+00:14:42.959 --> 00:14:48.267
+Notice that the main argument is right
+here.
+
+00:14:48.267 --> 00:14:49.680
+defblock took an author,
+
+00:14:49.680 --> 00:14:51.333
+and here's the author again.
+
+00:14:51.333 --> 00:14:53.920
+And now the optional argument
+
+00:14:53.920 --> 00:14:57.007
+uses the org babel source interface
+
+00:14:57.007 --> 00:15:02.867
+You just say :, then a key, and then the
+argument. Quite nice.
+
+00:15:02.867 --> 00:15:07.920
+Corwin doesn't want to use blocks.
+It's a bit of an overkill.
+
+00:15:07.920 --> 00:15:12.959
+He can just write a link.
+
+00:15:12.959 --> 00:15:17.440
+So the main argument is now
+the label of the link,
+
+00:15:17.440 --> 00:15:23.667
+and the description of the link is the
+contents of the feedback.
+
+00:15:23.667 --> 00:15:25.680
+So that was quite nice.
+
+00:15:25.680 --> 00:15:29.360
+So it looks like everyone uses the same
+interface on the left
+
+00:15:29.360 --> 00:15:32.800
+and can have varying outputs.
+
+00:15:32.800 --> 00:15:34.480
+I think it looks quite nice,
+
+00:15:34.480 --> 00:15:36.639
+and I hope you do too.
+
+00:15:36.639 --> 00:15:38.800
+There's a few more.
+
+00:15:38.800 --> 00:15:41.800
+Maybe, as you saw in some previous ones,
+
+00:15:41.800 --> 00:15:43.920
+we had text side beside side,
+
+00:15:43.920 --> 00:15:47.440
+or we folded some regions away.
+
+00:15:47.440 --> 00:15:50.959
+We put some things in pretty boxes.
+
+00:15:50.959 --> 00:15:57.120
+We had some spoilers at the very
+beginning that we hid some text.
+
+00:15:57.120 --> 00:16:01.680
+We demoed some texts. Here's some Org
+and here's what it looks like,
+
+00:16:01.680 --> 00:16:05.199
+and most importantly, they compose.
+
+00:16:05.199 --> 00:16:12.639
+There's a a macro called thread-block.
+
+00:16:12.639 --> 00:16:17.000
+thread-block call, and it lets you
+thread the contents
+
+00:16:17.000 --> 00:16:18.000
+through a number of blocks,
+
+00:16:18.000 --> 00:16:20.639
+treating them as if they were functions.
+
+00:16:20.639 --> 00:16:22.480
+So, really, you can think of a block
+
+00:16:23.680 --> 00:16:25.567
+as a string-valued function.
+
+00:16:25.567 --> 00:16:28.533
+That's pretty neat, I think.
+
+00:16:28.533 --> 00:16:30.959
+Thank you for listening.
+
+00:16:31.759 --> 00:16:34.320
+I hope you've enjoyed this little
+
+00:16:34.880 --> 00:16:38.160
+happy fun time with the Emacs and
+friends.
+
+00:16:38.160 --> 00:16:43.730
+I'll happily answer questions right now.
+
+00:16:45.360 --> 00:16:49.467
+Someone says: "Why did you put
+optional arguments
+
+00:16:49.467 --> 00:16:50.480
+in a separate list
+
+00:16:50.480 --> 00:16:54.560
+rather than using cl-style argument
+lists?"
+
+00:16:54.560 --> 00:16:58.399
+So that's a very good question,
+
+00:16:58.399 --> 00:17:00.000
+and I will answer that
+
+00:17:00.000 --> 00:17:05.467
+by showing you a more involved
+definition of feedback.
+
+00:17:05.467 --> 00:17:14.567
+Let's look at a more involved one right
+here.
+
+00:17:14.567 --> 00:17:19.280
+So, for example, this one is
+called rremark.
+
+00:17:19.280 --> 00:17:23.439
+Please let me know if my text is not
+sufficiently big.
+
+00:17:23.439 --> 00:17:28.033
+Here is why we have two arguments.
+
+00:17:28.033 --> 00:17:30.720
+That takes two arguments instead of one
+
+00:17:30.720 --> 00:17:33.360
+for its argument list.
+
+00:17:33.360 --> 00:17:34.799
+You have def block,
+
+00:17:34.799 --> 00:17:36.000
+then you have the name,
+
+00:17:36.000 --> 00:17:40.467
+then you have the first argument list
+
+00:17:40.467 --> 00:17:42.880
+and the second argument list.
+
+00:17:42.880 --> 00:17:46.080
+The first argument list
+
+00:17:46.080 --> 00:17:49.280
+takes the text right after the begin.
+
+00:17:49.280 --> 00:17:53.000
+The text right after the begin is the
+main argument.
+
+00:17:53.000 --> 00:17:59.200
+And then the remaining key-value pairs
+are in the second argument list.
+
+00:18:00.320 --> 00:18:03.280
+Now the reason we have two is because
+
+00:18:03.280 --> 00:18:08.880
+in order to streamline the interface to
+account for both special blocks
+
+00:18:08.880 --> 00:18:13.360
+and Org link types, what we do is we say,
+
+00:18:13.360 --> 00:18:18.000
+in the first argument list, you can give
+a name to the first argument,
+
+00:18:18.000 --> 00:18:19.633
+give it a default value,
+
+00:18:19.633 --> 00:18:28.800
+and anything else you provide will
+become part of the link information.
+
+00:18:28.800 --> 00:18:30.861
+For example, this link,
+
+00:18:30.861 --> 00:18:32.833
+we decided to make its face
+angry red.
+
+00:18:32.833 --> 00:18:36.433
+You might want to give other
+features to links.
+
+00:18:36.433 --> 00:18:39.100
+So we're trying to streamline
+the interface
+
+00:18:39.100 --> 00:18:41.733
+for both special blocks and
+Org link types,
+
+00:18:41.733 --> 00:18:46.240
+and we thought this way was quite nice.
+
+00:18:46.240 --> 00:18:47.500
+That was the main reason.
+
+00:18:47.500 --> 00:18:52.480
+Someone asks--
+
+00:18:52.480 --> 00:18:55.039
+if you have follow-ups, please ask--
+
+00:18:55.039 --> 00:18:57.600
+Someone asks, "Do you intend to try to
+
+00:18:57.600 --> 00:19:00.559
+upstream this amazing work into Org?"
+
+00:19:00.559 --> 00:19:02.300
+Well, I'm glad you like it.
+
+00:19:02.300 --> 00:19:04.559
+I don't know how to upstream,
+
+00:19:04.559 --> 00:19:06.400
+but I will look into it,
+
+00:19:06.400 --> 00:19:09.833
+and any advice or guidance
+would be much appreciated.
+
+00:19:11.840 --> 00:19:15.267
+Lisp is awesome. Just as
+defun is a macro,
+
+00:19:15.267 --> 00:19:17.120
+defblock is a macro, and then
+
+00:19:17.120 --> 00:19:20.240
+source blocks are awesome.
+
+00:19:20.240 --> 00:19:22.467
+Now maybe we can have arguments in
+special blocks,
+
+00:19:22.467 --> 00:19:28.799
+and motivate and encourage more
+people to learn Lisp.
+
+00:19:28.799 --> 00:19:32.559
+So another person asks,
+
+00:19:32.559 --> 00:19:35.280
+"What is used to produce colorful
+
+00:19:35.280 --> 00:19:38.559
+boxes around the cursor?"
+
+00:19:38.559 --> 00:19:40.400
+I'm not quite sure if you're asking...
+
+00:19:40.400 --> 00:19:42.559
+Are you talking about my cursor
+right here,
+
+00:19:42.559 --> 00:19:48.400
+or are you talking about in the slide?
+
+00:19:48.400 --> 00:19:53.767
+So this cursor is some application
+called Streambrush,
+
+00:19:53.767 --> 00:19:55.440
+that I had to purchase.
+
+00:19:55.440 --> 00:19:59.039
+Unfortunately, I could not find a a
+suitable free one.
+
+00:19:59.039 --> 00:20:03.067
+The blocks... I can demonstrate some
+Emacs Lisp.
+
+00:20:03.067 --> 00:20:04.467
+I can open up my Emacs, if people like,
+
+00:20:04.467 --> 00:20:06.320
+and we can try some things out.
+
+00:20:06.320 --> 00:20:09.440
+Happy to do that.
+
+00:20:09.440 --> 00:20:10.133
+You're welcome.
+
+00:20:10.133 --> 00:20:15.520
+Someone asks a side question about
+org-reveal: "How do you get
+
+00:20:15.520 --> 00:20:17.440
+bespoke or multiple-column layouts
+
+00:20:17.440 --> 00:20:19.120
+without using HTML?"
+
+00:20:19.120 --> 00:20:22.559
+Excellent question. That's what we do.
+
+00:20:22.559 --> 00:20:25.533
+That's what this project is about.
+
+00:20:25.533 --> 00:20:27.000
+So it's not org-reveal,
+
+00:20:27.000 --> 00:20:30.267
+it's our fancy parallel block.
+
+00:20:30.267 --> 00:20:33.440
+So we have this thing. You say,
+#+begin_parallel.
+
+00:20:33.440 --> 00:20:35.679
+You say how many columns you would like.
+
+00:20:35.679 --> 00:20:37.967
+Do you want a bar or not?
+
+00:20:37.967 --> 00:20:39.679
+And then you write some text,
+
+00:20:39.679 --> 00:20:44.400
+and then you get some text, and
+according with the bar or not.
+
+00:20:44.400 --> 00:20:47.520
+That's how we achieve that in our slides.
+
+00:20:47.520 --> 00:20:52.880
+I'm not quite sure where this was.
+
+00:20:52.880 --> 00:20:59.520
+Somewhere here, I think.
+
+00:20:59.520 --> 00:21:06.240
+Let me try to find this for you.
+
+00:21:06.240 --> 00:21:10.433
+I can't seem to find where the parallel
+blocks were. Apologies.
+
+00:21:10.433 --> 00:21:15.039
+Let's move on to the next question,
+I suppose.
+
+00:21:15.039 --> 00:21:18.400
+I'm pretty sure they're here. Ah, there
+they are.
+
+00:21:18.400 --> 00:21:22.640
+So these were just instances of using
+
+00:21:22.640 --> 00:21:26.480
+the parallel block, and it makes things
+parallel.
+
+00:21:26.480 --> 00:21:27.633
+So that's quite nice.
+
+00:21:27.633 --> 00:21:33.360
+Another person asks,
+
+00:21:33.360 --> 00:21:37.840
+"How does this relate to pandoc,
+
+00:21:37.840 --> 00:21:40.960
+which is used for converting between
+markup formats?"
+
+00:21:40.960 --> 00:21:43.919
+So all we're doing is we're saying,
+
+00:21:43.919 --> 00:21:47.679
+hey, please write Org because Org is
+just fantastic,
+
+00:21:47.679 --> 00:21:49.267
+and we love it, and it's the dream,
+
+00:21:49.267 --> 00:21:51.760
+and if you would like to view things
+
+00:21:51.760 --> 00:21:55.900
+in HTML, or in org-reveal, or in PDF,
+
+00:21:55.900 --> 00:21:58.559
+that's up to the user.
+
+00:22:02.320 --> 00:22:06.080
+Made it too small now.
+So here is an example.
+
+00:22:06.080 --> 00:22:10.240
+Here's how parallel is implemented,
+
+00:22:10.240 --> 00:22:14.320
+just as a quick example, not too long.
+
+00:22:14.320 --> 00:22:17.800
+About half of the implementation is
+documentation,
+
+00:22:17.800 --> 00:22:22.720
+so, hopefully, that speaks for for how
+useful this feature is.
+
+00:22:22.720 --> 00:22:25.280
+We decide if there's a rule or not.
+
+00:22:25.280 --> 00:22:28.080
+We look for the column break.
+
+00:22:28.080 --> 00:22:30.600
+Here we're looking at the backend.
+
+00:22:30.600 --> 00:22:31.840
+If the backend is LaTeX,
+
+00:22:31.840 --> 00:22:34.133
+please use this incantation
+
+00:22:34.133 --> 00:22:37.679
+with multicolumns, minipages,
+what have you.
+
+00:22:37.679 --> 00:22:41.600
+If the backend is something else, please
+do this:
+
+00:22:41.600 --> 00:22:48.080
+div, style and other gibberish that we
+don't really want to look at.
+
+00:22:48.080 --> 00:22:51.760
+Pandoc works from Org,
+
+00:22:51.760 --> 00:22:53.633
+so it might not work directly,
+
+00:22:53.633 --> 00:22:59.679
+since our interface... The way we set it
+up is: when you try to export,
+
+00:22:59.679 --> 00:23:03.039
+we hook in and we do a bunch of
+pre-processing,
+
+00:23:03.039 --> 00:23:07.440
+so this defblock is a
+string-valued function.
+
+00:23:07.440 --> 00:23:13.919
+Whenever we see these #+begin_parallel
+when you do an export,
+
+00:23:13.919 --> 00:23:17.767
+I tell Emacs, hold up, look for those
+#+begin_parallels, please.
+
+00:23:17.767 --> 00:23:20.320
+Oh, you found them? Grab that text.
+
+00:23:20.320 --> 00:23:21.533
+You grabbed it. Great.
+
+00:23:21.533 --> 00:23:24.080
+Now please apply this person's function
+
+00:23:24.080 --> 00:23:27.120
+onto that text, and splice in the result.
+
+00:23:27.120 --> 00:23:30.400
+So when you export, we're performing
+
+00:23:30.400 --> 00:23:35.120
+arbitrary computations on your text.
+
+00:23:35.120 --> 00:23:39.633
+Some people might not find that
+comforting,
+
+00:23:39.633 --> 00:23:43.039
+to have arbitrary computations happening.
+
+00:23:43.039 --> 00:23:45.039
+In this article, there's a few where
+
+00:23:45.039 --> 00:23:47.167
+we change your text upon export.
+
+00:23:47.167 --> 00:23:51.760
+We translate it, we do other things
+to it.
+
+00:23:51.760 --> 00:23:56.500
+So someone says, "If you export to
+LaTeX, to PDF,
+
+00:23:56.500 --> 00:23:58.640
+does that work well with Beamer as well
+
+00:23:58.640 --> 00:24:00.320
+to create slides with columns?"
+
+00:24:05.200 --> 00:24:08.000
+I made a bunch of these changes
+
+00:24:08.000 --> 00:24:09.200
+earlier this morning,
+
+00:24:09.200 --> 00:24:12.320
+and it just says LaTeX right here.
+
+00:24:12.320 --> 00:24:14.400
+So if you want to go to beamer,
+
+00:24:14.400 --> 00:24:15.360
+I think the back end for me,
+
+00:24:15.360 --> 00:24:17.333
+beamer is called, well, beamer,
+
+00:24:17.333 --> 00:24:22.000
+so instead of a pcase, what we would do
+is, we would say,
+
+00:24:22.000 --> 00:24:27.167
+if it's a 'latex or it's a 'beamer, then
+use this.
+
+00:24:27.167 --> 00:24:30.267
+Otherwise, it's not a LaTeX,
+
+00:24:30.267 --> 00:24:31.867
+it will simply default to this one,
+
+00:24:31.867 --> 00:24:34.433
+which could be dangerous
+for your needs.
+
+00:24:34.433 --> 00:24:39.167
+I think it's a bad practice to put a
+underscore,
+
+00:24:39.167 --> 00:24:40.767
+but I did it really quickly
+
+00:24:40.767 --> 00:24:44.500
+because I just wanted to show you that
+it works fine in org-reveal
+
+00:24:44.500 --> 00:24:47.440
+Contributions are more than welcome.
+
+00:24:47.440 --> 00:24:52.240
+I happily would love any assistance.
+
+00:24:52.240 --> 00:24:58.633
+We have a Lisp reference
+cheat sheet here
+
+00:24:58.633 --> 00:25:01.000
+to learn a little bit about Lisp, if
+you're not comfortable,
+
+00:25:01.000 --> 00:25:03.267
+or to ask some questions.
+
+00:25:03.267 --> 00:25:06.400
+Lots of helpful people.
+
+00:25:06.400 --> 00:25:09.440
+So there's another question that says,
+
+00:25:09.440 --> 00:25:13.120
+"Does typing in a block mess up with
+syntax highlighting?
+
+00:25:13.120 --> 00:25:15.679
+Usually, you use a single color inside an
+
+00:25:15.679 --> 00:25:17.279
+example block, for example.
+
+00:25:17.279 --> 00:25:21.279
+Ah, you found my crutch.
+
+00:25:25.279 --> 00:25:27.333
+Emacs is all encompassing,
+
+00:25:27.333 --> 00:25:29.760
+and I'm not quite sure how fonts work.
+
+00:25:29.760 --> 00:25:32.559
+I learned enough to get by.
+
+00:25:37.440 --> 00:25:38.667
+Here's how links work.
+
+00:25:38.667 --> 00:25:40.799
+They're a bit complicated.
+
+00:25:40.799 --> 00:25:42.567
+This is a bit scary.
+
+00:25:42.567 --> 00:25:47.039
+I don't recommend anyone read it.
+
+00:25:47.039 --> 00:25:49.840
+Actually, let me open up an email
+
+00:25:50.559 --> 00:25:52.100
+and you can see what I see.
+
+00:25:52.100 --> 00:25:54.799
+So here's an Emacs.
+
+00:25:54.799 --> 00:25:56.799
+Let's make that a bit bigger.
+
+00:25:56.799 --> 00:25:59.133
+Let's change this slightly.
+
+00:25:59.133 --> 00:26:01.200
+Nope, that's worse. There you go.
+
+00:26:01.919 --> 00:26:09.360
+Here's some words. Here's red hello.
+
+00:26:09.360 --> 00:26:15.679
+But you're worried about preserving
+fontification.
+
+00:26:15.679 --> 00:26:18.480
+Let's make an emacs-lisp block.
+
+00:26:18.880 --> 00:26:22.840
+Let's say, (+ 1 2).
+
+00:26:22.840 --> 00:26:31.133
+Ah, where's the fun? Hello. Bye.
+
+00:26:31.133 --> 00:26:32.080
+Okay. Where's the coloring?
+
+00:26:32.080 --> 00:26:36.000
+If we zoom in on this #+begin_src block,
+
+00:26:36.000 --> 00:26:39.200
+you can see down here
+
+00:26:39.200 --> 00:26:42.159
+we have our our coloring
+
+00:26:42.159 --> 00:26:43.279
+when we zoom in.
+
+00:26:43.279 --> 00:26:46.960
+If we zoom out, no coloring.
+
+00:26:46.960 --> 00:26:50.880
+Zoom in, coloring.
+Zoom out, aah, no coloring.
+
+00:26:50.880 --> 00:26:55.679
+Let's take off these bad boys,
+and oh, look, my coloring's back.
+
+00:26:55.679 --> 00:27:03.760
+In a previous iteration of the system,
+I was able to maintain coloring.
+
+00:27:03.760 --> 00:27:06.400
+In this new iteration, I am not.
+
+00:27:06.400 --> 00:27:07.400
+I don't know how to do it.
+
+00:27:07.400 --> 00:27:10.333
+I haven't had the time to implement it.
+
+00:27:10.333 --> 00:27:17.279
+I spent a lot of time writing this
+48-page documentation
+
+00:27:17.279 --> 00:27:21.133
+with some fun examples to try to help
+people learn.
+
+00:27:21.133 --> 00:27:23.200
+But I would appreciate any help or
+guidance
+
+00:27:23.200 --> 00:27:26.240
+on how to maintain the fontification.
+
+00:27:26.240 --> 00:27:29.200
+I really would like to keep those
+colors in.
+
+00:27:29.200 --> 00:27:32.640
+[Amin]: Musa, we have time for maybe one
+more question,
+
+00:27:32.640 --> 00:27:34.500
+one or two more questions,
+
+00:27:34.500 --> 00:27:37.039
+and then we have to move on to the
+next talk.
+
+00:27:37.039 --> 00:27:39.120
+You're more than welcome to
+
+00:27:39.120 --> 00:27:42.559
+continue taking the questions via
+IRC or the pad.
+
+00:27:42.559 --> 00:27:45.760
+[Musa]: Okay. Thank you.
+
+00:27:45.760 --> 00:27:48.880
+The final question we'll take is,
+
+00:27:48.880 --> 00:27:52.320
+"Should packages implement
+
+00:27:52.320 --> 00:27:53.967
+interface to one specific format,
+
+00:27:53.967 --> 00:27:55.600
+or attempt to be inclusive
+
+00:27:55.600 --> 00:27:57.279
+to all the potential output targets?"
+
+00:27:57.279 --> 00:27:59.300
+I think you should just make them
+as you go,
+
+00:27:59.300 --> 00:28:01.500
+and add them as you need them.
+
+00:28:01.500 --> 00:28:05.600
+We'll make Github requests for things.
+
+00:28:05.600 --> 00:28:08.533
+We can share recipes in this document,
+
+00:28:08.533 --> 00:28:12.333
+and then try to add other techniques,
+
+00:28:12.333 --> 00:28:19.200
+and then we can use these blocks as a
+common interface
+
+00:28:19.200 --> 00:28:22.240
+for exporting to PDF and other things.
+
+00:28:22.240 --> 00:28:26.000
+Since someone asked,
+
+00:28:26.000 --> 00:28:28.033
+here what a PDF looks like.
+
+00:28:28.033 --> 00:28:31.667
+This is the same PDF rendered.
+
+00:28:31.667 --> 00:28:34.960
+I made no effort to make it look good,
+
+00:28:34.960 --> 00:28:37.840
+but it surprisingly does look good.
+
+00:28:38.559 --> 00:28:40.067
+That was nice.
+
+00:28:40.067 --> 00:28:44.320
+That was a terrible magenta,
+but that is life.
+
+00:28:44.320 --> 00:28:47.100
+Anyhow, I hope you all enjoyed this talk.
+
+00:28:47.100 --> 00:28:51.033
+I hope you will find
+defblock useful to you.
+
+00:28:51.033 --> 00:28:52.799
+It is available on MELPA.
+
+00:28:52.799 --> 00:28:56.367
+In a rush to make it available for
+EmacsConf 2020,
+
+00:28:56.367 --> 00:29:00.159
+some MELPA guidelines may not have been
+adhered to.
+
+00:29:00.159 --> 00:29:01.600
+Please do not hit me.
+
+00:29:01.600 --> 00:29:08.559
+I hope everyone enjoys the rest of the
+EmacsConf 2020. Thank you!
diff --git a/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt b/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt
new file mode 100644
index 00000000..0f0b2688
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--questions--tuan-anh-nguyen-autogen.vtt
@@ -0,0 +1,1087 @@
+WEBVTT
+
+00:00:00.960 --> 00:00:03.679
+uh okay so the first question is is uh
+
+00:00:03.679 --> 00:00:05.600
+do you think that this package can be
+
+00:00:05.600 --> 00:00:08.000
+included into Emacs or
+
+00:00:08.000 --> 00:00:12.320
+uh empire uh
+
+00:00:12.320 --> 00:00:15.360
+I think uh it most definitely can is
+
+00:00:15.360 --> 00:00:18.560
+just a matter of paperwork but
+
+00:00:18.560 --> 00:00:21.760
+the reason I initially wanted to make it
+
+00:00:21.760 --> 00:00:24.480
+like a central package is that so that I
+
+00:00:24.480 --> 00:00:25.039
+can
+
+00:00:25.039 --> 00:00:28.720
+experiment with it more
+
+00:00:28.720 --> 00:00:31.920
+like have more freedom to experiment but
+
+00:00:31.920 --> 00:00:34.320
+eventually I think is a good candidate
+
+00:00:34.320 --> 00:00:35.680
+for inclusion into
+
+00:00:35.680 --> 00:00:38.800
+core
+
+00:00:38.800 --> 00:00:41.200
+and because because currently not in
+
+00:00:41.200 --> 00:00:42.640
+corey mass there are a couple of
+
+00:00:42.640 --> 00:00:44.480
+problems with it
+
+00:00:44.480 --> 00:00:47.840
+mostly in terms of performance
+
+00:00:47.840 --> 00:00:50.960
+for example like anytime we want to
+
+00:00:50.960 --> 00:00:53.280
+access the text in a buffer we need to
+
+00:00:53.280 --> 00:00:54.160
+make
+
+00:00:54.160 --> 00:00:57.360
+a copy of the text into a string
+
+00:00:57.360 --> 00:01:00.480
+and then right after reading from that
+
+00:01:00.480 --> 00:01:03.520
+text we need to free it right away and
+
+00:01:03.520 --> 00:01:05.280
+that results in a lot of garbage
+
+00:01:05.280 --> 00:01:09.040
+collection so it would be better
+
+00:01:09.040 --> 00:01:11.920
+either the treasure could be included in
+
+00:01:11.920 --> 00:01:12.240
+core
+
+00:01:12.240 --> 00:01:15.680
+imax or dynamic dynamic model support
+
+00:01:15.680 --> 00:01:16.799
+can be
+
+00:01:16.799 --> 00:01:19.439
+augmented with direct text access
+
+00:01:19.439 --> 00:01:24.080
+somehow
+
+00:01:24.080 --> 00:01:26.400
+so the second question is will release
+
+00:01:26.400 --> 00:01:27.200
+performance
+
+00:01:27.200 --> 00:01:30.320
+be more competitive with cce max
+
+00:01:30.320 --> 00:01:33.040
+enough so electricity in english is more
+
+00:01:33.040 --> 00:01:35.670
+attractive
+
+00:01:35.670 --> 00:01:38.240
+[Music]
+
+00:01:38.240 --> 00:01:43.439
+I think it's possible but uh yeah
+
+00:01:43.439 --> 00:01:45.840
+not sure about the amount of effort it
+
+00:01:45.840 --> 00:01:46.799
+can be
+
+00:01:46.799 --> 00:01:52.960
+multi-years effort and one thing that
+
+00:01:52.960 --> 00:01:56.479
+even though gce max can make uh
+
+00:01:56.479 --> 00:02:00.719
+it is fast enough there's
+
+00:02:00.719 --> 00:02:03.119
+there's one thing that it uh cannot have
+
+00:02:03.119 --> 00:02:05.280
+which is that because it's the lisp
+
+00:02:05.280 --> 00:02:09.679
+it needs the garage collector so
+
+00:02:09.679 --> 00:02:12.480
+we may experiment experience some kind
+
+00:02:12.480 --> 00:02:14.000
+of
+
+00:02:14.000 --> 00:02:17.360
+gcc post if we use live whereas the
+
+00:02:17.360 --> 00:02:19.920
+currently transistor is written in c
+
+00:02:19.920 --> 00:02:28.400
+so there's no such latency
+
+00:02:28.400 --> 00:02:31.040
+the next question is do you think three
+
+00:02:31.040 --> 00:02:32.400
+sister would be useful
+
+00:02:32.400 --> 00:02:36.080
+for all buffers I can imagine it being
+
+00:02:36.080 --> 00:02:38.319
+used to keep a post ast about an arc
+
+00:02:38.319 --> 00:02:39.599
+buffer
+
+00:02:39.599 --> 00:02:42.560
+light off element and update it in real
+
+00:02:42.560 --> 00:02:43.920
+time
+
+00:02:43.920 --> 00:02:46.239
+yeah actually this is a very interesting
+
+00:02:46.239 --> 00:02:47.760
+idea
+
+00:02:47.760 --> 00:02:50.800
+I saw someone started
+
+00:02:50.800 --> 00:02:53.760
+resistor grammar for all already I don't
+
+00:02:53.760 --> 00:02:55.120
+have a link right now but
+
+00:02:55.120 --> 00:02:58.159
+I can look for it
+
+00:02:58.159 --> 00:03:01.040
+I'll try looking for it and put the link
+
+00:03:01.040 --> 00:03:01.680
+in
+
+00:03:01.680 --> 00:03:09.599
+here later
+
+00:03:09.599 --> 00:03:13.280
+yeah yes someone has written here the uh
+
+00:03:13.280 --> 00:03:15.519
+and the biggest problem with uh right
+
+00:03:15.519 --> 00:03:17.040
+now is that it doesn't have
+
+00:03:17.040 --> 00:03:21.360
+formal grammar so
+
+00:03:21.360 --> 00:03:22.380
+so the effort
+
+00:03:22.380 --> 00:03:24.400
+[Applause]
+
+00:03:24.400 --> 00:03:27.120
+be quite big I think but but once we
+
+00:03:27.120 --> 00:03:28.799
+have that because the
+
+00:03:28.799 --> 00:03:31.519
+tree sitter can be run on the web as
+
+00:03:31.519 --> 00:03:34.239
+well
+
+00:03:34.239 --> 00:03:37.440
+we can on the web and in many other
+
+00:03:37.440 --> 00:03:38.080
+places
+
+00:03:38.080 --> 00:03:40.720
+if we have a grammar for a traditional
+
+00:03:40.720 --> 00:03:41.840
+grammar for all
+
+00:03:41.840 --> 00:03:45.680
+we can bring off more
+
+00:03:45.680 --> 00:03:49.680
+like everywhere that's a very cool
+
+00:03:49.680 --> 00:03:56.000
+thought
+
+00:03:56.000 --> 00:03:58.080
+next one is could this be used with
+
+00:03:58.080 --> 00:04:00.480
+packages like smart parents that aim to
+
+00:04:00.480 --> 00:04:03.200
+bring structural editing to
+
+00:04:03.200 --> 00:04:07.120
+non-s expression based languages
+
+00:04:07.120 --> 00:04:11.360
+yes that is actually one of the
+
+00:04:11.360 --> 00:04:14.720
+intended use cases initially
+
+00:04:14.720 --> 00:04:17.280
+it's definitely possible but it's just
+
+00:04:17.280 --> 00:04:18.880
+that no one has
+
+00:04:18.880 --> 00:04:37.199
+only started writing the integration yet
+
+00:04:37.199 --> 00:04:40.639
+and next one
+
+00:04:40.639 --> 00:04:41.919
+could you show the source that was
+
+00:04:41.919 --> 00:04:45.040
+matched by the parser in the debug view
+
+00:04:45.040 --> 00:04:48.479
+in addition to the grammar part matched
+
+00:04:48.479 --> 00:04:54.960
+uh yeah that's actually um
+
+00:04:54.960 --> 00:04:57.759
+on my to-do list but I haven't had time
+
+00:04:57.759 --> 00:04:59.280
+for it yet
+
+00:04:59.280 --> 00:05:02.560
+so uh if you go to the treesita
+
+00:05:02.560 --> 00:05:06.560
+website it also has an
+
+00:05:06.560 --> 00:05:08.800
+online playground where you can input
+
+00:05:08.800 --> 00:05:12.000
+the code and see the
+
+00:05:12.000 --> 00:05:14.400
+parse tree in real time and it's
+
+00:05:14.400 --> 00:05:16.000
+actually
+
+00:05:16.000 --> 00:05:19.360
+a lot more fancy than what we have in
+
+00:05:19.360 --> 00:05:22.840
+imax currently so
+
+00:05:22.840 --> 00:05:25.919
+yeah I just don't have time for it yes
+
+00:05:25.919 --> 00:05:27.120
+so
+
+00:05:27.120 --> 00:05:30.320
+some help here would be
+
+00:05:30.320 --> 00:05:38.700
+very appreciated
+
+00:05:38.700 --> 00:05:49.919
+[Music]
+
+00:05:49.919 --> 00:05:52.000
+the next question is will it ever be
+
+00:05:52.000 --> 00:05:54.240
+possible to write resetter grammars in a
+
+00:05:54.240 --> 00:05:55.280
+lisp
+
+00:05:55.280 --> 00:06:00.560
+or will javascript be required
+
+00:06:00.560 --> 00:06:02.800
+yeah that is already answered in the
+
+00:06:02.800 --> 00:06:05.280
+part so the
+
+00:06:05.280 --> 00:06:07.600
+the transcript is actually just used as
+
+00:06:07.600 --> 00:06:08.639
+a sort of
+
+00:06:08.639 --> 00:06:12.160
+preprocessor so the
+
+00:06:12.160 --> 00:06:14.639
+python generator actually works on the
+
+00:06:14.639 --> 00:06:15.680
+on a json
+
+00:06:15.680 --> 00:06:19.280
+structure so uh it's definitely possible
+
+00:06:19.280 --> 00:06:20.240
+to replace
+
+00:06:20.240 --> 00:06:29.039
+javascript with lists for this
+
+00:06:29.039 --> 00:06:31.280
+how extensive will the compatibility
+
+00:06:31.280 --> 00:06:32.160
+between
+
+00:06:32.160 --> 00:06:35.360
+highlighting grammars for e-max and
+
+00:06:35.360 --> 00:06:35.840
+those
+
+00:06:35.840 --> 00:06:44.560
+for veeam nail view
+
+00:06:44.560 --> 00:06:48.720
+so so right now the
+
+00:06:48.720 --> 00:06:51.680
+nail vim and Emacs used a different set
+
+00:06:51.680 --> 00:06:52.000
+of
+
+00:06:52.000 --> 00:06:55.440
+the highlighting queries and
+
+00:06:55.440 --> 00:06:59.520
+item probably uses another set of
+
+00:06:59.520 --> 00:07:03.039
+patterns as well I think it makes sense
+
+00:07:03.039 --> 00:07:04.960
+because
+
+00:07:04.960 --> 00:07:07.680
+each editor has its own like existing
+
+00:07:07.680 --> 00:07:08.479
+conventions
+
+00:07:08.479 --> 00:07:11.919
+for syntax highlighting so
+
+00:07:11.919 --> 00:07:15.599
+at least in the beginning I don't expect
+
+00:07:15.599 --> 00:07:18.560
+there is any compatibility between
+
+00:07:18.560 --> 00:07:21.599
+different editors
+
+00:07:21.599 --> 00:07:27.280
+but I think in the long run it will be
+
+00:07:27.280 --> 00:07:29.520
+would it better if there's some kind of
+
+00:07:29.520 --> 00:07:31.360
+effort to
+
+00:07:31.360 --> 00:07:34.880
+unify the at least provide the
+
+00:07:34.880 --> 00:07:37.440
+most common patterns that should work
+
+00:07:37.440 --> 00:07:42.840
+across
+
+00:07:42.840 --> 00:07:51.759
+editors
+
+00:07:51.759 --> 00:07:53.520
+next one is could there be a
+
+00:07:53.520 --> 00:07:55.280
+standardized approach
+
+00:07:55.280 --> 00:07:57.919
+to coding automatic refactoring in the
+
+00:07:57.919 --> 00:08:01.039
+future
+
+00:08:01.039 --> 00:08:02.639
+so that whichever language mode you're
+
+00:08:02.639 --> 00:08:04.160
+using you could see many
+
+00:08:04.160 --> 00:08:12.960
+available refactoring operations
+
+00:08:12.960 --> 00:08:16.400
+I'm not sure about this because the
+
+00:08:16.400 --> 00:08:19.919
+like
+
+00:08:19.919 --> 00:08:22.240
+most of uh refactoring operations are
+
+00:08:22.240 --> 00:08:23.840
+actually very
+
+00:08:23.840 --> 00:08:26.960
+like highly specific to a language or at
+
+00:08:26.960 --> 00:08:28.720
+least to class of
+
+00:08:28.720 --> 00:08:33.599
+class of languages so
+
+00:08:33.599 --> 00:08:37.839
+so so maybe it's not like uh one single
+
+00:08:37.839 --> 00:08:40.719
+approach for all the languages but maybe
+
+00:08:40.719 --> 00:08:41.519
+uh
+
+00:08:41.519 --> 00:08:43.760
+one for object-oriented oriented
+
+00:08:43.760 --> 00:08:44.959
+languages
+
+00:08:44.959 --> 00:08:50.160
+one for lisp like language for example
+
+00:08:50.160 --> 00:09:02.959
+maybe one for javascript and typestream
+
+00:09:02.959 --> 00:09:05.360
+next question is uh I'm completely new
+
+00:09:05.360 --> 00:09:07.519
+to trisita how do I use it
+
+00:09:07.519 --> 00:09:10.160
+as an end user is there any easy example
+
+00:09:10.160 --> 00:09:11.519
+config out there
+
+00:09:11.519 --> 00:09:14.000
+the organizer otherwise that shows
+
+00:09:14.000 --> 00:09:15.440
+standard usage
+
+00:09:15.440 --> 00:09:18.960
+with whatever programming language
+
+00:09:18.960 --> 00:09:20.480
+[Music]
+
+00:09:20.480 --> 00:09:27.600
+yeah there's no um
+
+00:09:27.600 --> 00:09:30.880
+uh actually that uh so the project has
+
+00:09:30.880 --> 00:09:32.000
+the documentation
+
+00:09:32.000 --> 00:09:36.399
+site but it's not very expensive yet
+
+00:09:36.399 --> 00:09:40.720
+I think we need to add more examples
+
+00:09:40.720 --> 00:09:48.720
+to the documentation
+
+00:09:48.720 --> 00:09:51.200
+can language major mode authors start
+
+00:09:51.200 --> 00:09:53.519
+taking advantage of this now
+
+00:09:53.519 --> 00:09:56.240
+or is it intended to be used as a minor
+
+00:09:56.240 --> 00:09:57.279
+mode
+
+00:09:57.279 --> 00:10:00.399
+uh actually it's both so it's intended
+
+00:10:00.399 --> 00:10:01.600
+to be used
+
+00:10:01.600 --> 00:10:04.480
+as a minor mode but it's also intended
+
+00:10:04.480 --> 00:10:05.920
+to
+
+00:10:05.920 --> 00:10:09.839
+be depended on by the major mode
+
+00:10:09.839 --> 00:10:13.519
+so basically it it wants to be a minor
+
+00:10:13.519 --> 00:10:13.920
+mode
+
+00:10:13.920 --> 00:10:17.200
+that is dependent on by the other
+
+00:10:17.200 --> 00:10:21.839
+major modes
+
+00:10:21.839 --> 00:10:25.680
+and by it here I mean the the base
+
+00:10:25.680 --> 00:10:30.839
+minor mode tree system mode
+
+00:10:30.839 --> 00:10:34.079
+so uh question
+
+00:10:34.079 --> 00:10:37.120
+11 is it possible to use this
+
+00:10:37.120 --> 00:10:40.160
+for refactoring tool
+
+00:10:40.160 --> 00:10:43.360
+uh yeah but
+
+00:10:43.360 --> 00:10:46.720
+um like for the kind of refactoring
+
+00:10:46.720 --> 00:10:47.680
+inside uh
+
+00:10:47.680 --> 00:10:52.640
+buffer it is uh
+
+00:10:52.640 --> 00:10:55.040
+it's very doable right now but you need
+
+00:10:55.040 --> 00:10:57.040
+to write some glue code
+
+00:10:57.040 --> 00:11:01.120
+but for for the kind of more
+
+00:11:01.120 --> 00:11:04.000
+extensive refactoring where you want to
+
+00:11:04.000 --> 00:11:04.399
+touch
+
+00:11:04.399 --> 00:11:09.279
+uh like all files in a project
+
+00:11:09.279 --> 00:11:11.440
+there needs there needs to be some kind
+
+00:11:11.440 --> 00:11:12.839
+of the project
+
+00:11:12.839 --> 00:11:15.920
+and another project and uh
+
+00:11:15.920 --> 00:11:18.399
+understanding of the language uh model
+
+00:11:18.399 --> 00:11:19.200
+system
+
+00:11:19.200 --> 00:11:21.120
+like how they are laid out in the file
+
+00:11:21.120 --> 00:11:22.560
+system as well
+
+00:11:22.560 --> 00:11:24.480
+and with that understanding that there
+
+00:11:24.480 --> 00:11:26.240
+should be passing of
+
+00:11:26.240 --> 00:11:29.920
+the files even files on the file system
+
+00:11:29.920 --> 00:11:30.480
+that
+
+00:11:30.480 --> 00:11:34.000
+are not yet loaded into Emacs
+
+00:11:34.000 --> 00:11:37.760
+so that sounds like something more
+
+00:11:37.760 --> 00:11:41.040
+a lot more
+
+00:11:41.040 --> 00:11:46.320
+a lot more extensive
+
+00:11:46.320 --> 00:11:49.519
+and it probably probably sounds like
+
+00:11:49.519 --> 00:11:50.000
+something
+
+00:11:50.000 --> 00:11:52.160
+something like an id in uh inside your
+
+00:11:52.160 --> 00:11:54.560
+max already like a replacement for
+
+00:11:54.560 --> 00:12:07.360
+for lsp
+
+00:12:07.360 --> 00:12:10.480
+so next question is the that pop-up mx
+
+00:12:10.480 --> 00:12:11.440
+window
+
+00:12:11.440 --> 00:12:15.200
+how do you get that
+
+00:12:15.200 --> 00:12:18.720
+is the custom hem code I wrote a long
+
+00:12:18.720 --> 00:12:20.320
+time ago
+
+00:12:20.320 --> 00:12:24.800
+but but right now the best way to
+
+00:12:24.800 --> 00:12:26.480
+to have something like that is probably
+
+00:12:26.480 --> 00:12:29.440
+the what is written here like uh
+
+00:12:29.440 --> 00:12:33.200
+ham boss frame or iv spring
+
+00:12:33.200 --> 00:12:39.839
+is a lot easier now
+
+00:12:39.839 --> 00:12:43.680
+is there a folding mode for tree sitter
+
+00:12:43.680 --> 00:12:46.320
+nowadays there's no folding mode for
+
+00:12:46.320 --> 00:12:48.079
+three sitters yet
+
+00:12:48.079 --> 00:12:52.000
+but uh
+
+00:12:52.000 --> 00:12:54.880
+uh but I think it would better be better
+
+00:12:54.880 --> 00:12:59.440
+if it's integrated with the
+
+00:12:59.440 --> 00:13:02.079
+like current currently there are
+
+00:13:02.079 --> 00:13:03.120
+multiple
+
+00:13:03.120 --> 00:13:04.880
+I'm not sure they're moving forward
+
+00:13:04.880 --> 00:13:07.200
+there are like code folding frameworks
+
+00:13:07.200 --> 00:13:10.240
+inside imax already or some the
+
+00:13:10.240 --> 00:13:12.800
+code showing packages like third party
+
+00:13:12.800 --> 00:13:13.920
+packaging
+
+00:13:13.920 --> 00:13:15.680
+and I think it's better to integrate
+
+00:13:15.680 --> 00:13:17.680
+with these mods
+
+00:13:17.680 --> 00:13:20.000
+rather than writing something new
+
+00:13:20.000 --> 00:13:32.399
+entirely
+
+00:13:32.399 --> 00:13:34.800
+are there any language major modes that
+
+00:13:34.800 --> 00:13:36.639
+have integrated already
+
+00:13:36.639 --> 00:13:40.079
+uh not yet
+
+00:13:40.079 --> 00:13:42.800
+so the there was a proposed web assembly
+
+00:13:42.800 --> 00:13:43.440
+mode
+
+00:13:43.440 --> 00:13:46.839
+but it's a new major mode in terms of
+
+00:13:46.839 --> 00:13:50.000
+existing major mode there is the
+
+00:13:50.000 --> 00:13:53.279
+typescript mode
+
+00:13:53.279 --> 00:13:55.600
+but they're only discussing about
+
+00:13:55.600 --> 00:13:57.519
+integration
+
+00:13:57.519 --> 00:14:02.079
+they're not integrated yet
+
+00:14:02.079 --> 00:14:04.639
+I think I can try writing the
+
+00:14:04.639 --> 00:14:05.360
+integration
+
+00:14:05.360 --> 00:14:09.199
+sometimes next month
+
+00:14:09.199 --> 00:14:11.839
+uh basically what they want right now is
+
+00:14:11.839 --> 00:14:12.720
+the
+
+00:14:12.720 --> 00:14:16.160
+syntax highlighting and handling
+
+00:14:16.160 --> 00:14:19.199
+synthetic highlighting and
+
+00:14:19.199 --> 00:14:22.959
+code indentation for tsx
+
+00:14:22.959 --> 00:14:27.760
+which is the embedded react
+
+00:14:27.760 --> 00:14:32.160
+syntax inside typescript
+
+00:14:32.160 --> 00:14:36.399
+so it turns out passing these tests
+
+00:14:36.399 --> 00:14:40.639
+is very troublesome so
+
+00:14:40.639 --> 00:14:43.920
+so trees that would be a crystal would
+
+00:14:43.920 --> 00:14:49.920
+be a lot of help there
+
+00:14:49.920 --> 00:14:53.279
+is there any link to the slides yes
+
+00:14:53.279 --> 00:14:59.920
+I'll post it in irc later
+
+00:14:59.920 --> 00:15:01.920
+regarding imax integration we will
+
+00:15:01.920 --> 00:15:04.240
+always need to be a foreign library or
+
+00:15:04.240 --> 00:15:05.440
+can it be included
+
+00:15:05.440 --> 00:15:10.839
+linked directly in compilation
+
+00:15:10.839 --> 00:15:14.480
+uh if if this is about the
+
+00:15:14.480 --> 00:15:17.600
+core library itself
+
+00:15:17.600 --> 00:15:21.839
+then I think it's uh answered it in the
+
+00:15:21.839 --> 00:15:23.440
+first question
+
+00:15:23.440 --> 00:15:27.440
+right now is a right now it's a
+
+00:15:27.440 --> 00:15:29.920
+dynamic model but in the long run it
+
+00:15:29.920 --> 00:15:30.959
+will better if
+
+00:15:30.959 --> 00:15:34.000
+it's included in core Emacs
+
+00:15:34.000 --> 00:15:39.839
+for the language definitions themselves
+
+00:15:39.839 --> 00:15:41.360
+it should be better if they are
+
+00:15:41.360 --> 00:15:43.279
+distributed uh
+
+00:15:43.279 --> 00:15:46.639
+separately like that right now so each
+
+00:15:46.639 --> 00:15:49.199
+uh for each language there will be a
+
+00:15:49.199 --> 00:15:49.680
+shared
+
+00:15:49.680 --> 00:15:52.639
+library that will be loaded by the core
+
+00:15:52.639 --> 00:16:00.480
+library at runtime
+
+00:16:00.480 --> 00:16:02.480
+so the last question is the python mode
+
+00:16:02.480 --> 00:16:04.240
+example is pretty good
+
+00:16:04.240 --> 00:16:06.160
+is that something that one can use
+
+00:16:06.160 --> 00:16:07.600
+already
+
+00:16:07.600 --> 00:16:12.320
+yes I'm using it at work right now
+
+00:16:12.320 --> 00:16:14.639
+I think that's all for that's all the
+
+00:16:14.639 --> 00:16:19.199
+questions right
+
+00:16:19.199 --> 00:16:23.440
+you are now unmuted yeah I think that's
+
+00:16:23.440 --> 00:16:27.839
+all the questions on the pads so far um
+
+00:16:27.839 --> 00:16:30.399
+so thank you but um there may be more
+
+00:16:30.399 --> 00:16:32.399
+questions coming on irc
+
+00:16:32.399 --> 00:16:36.639
+um I'll try to have a look
+
+00:16:36.639 --> 00:16:39.680
+and we still have about 10 or 15 more
+
+00:16:39.680 --> 00:16:40.560
+minutes so
+
+00:16:40.560 --> 00:16:43.600
+um there's no rush to wrap up in case um
+
+00:16:43.600 --> 00:16:48.160
+anyone has any more questions
+
+00:16:48.160 --> 00:16:50.880
+uh yeah I just realized that uh I mixed
+
+00:16:50.880 --> 00:16:51.360
+up the
+
+00:16:51.360 --> 00:16:54.959
+video editing and I uh lost an entire
+
+00:16:54.959 --> 00:16:56.000
+session on the
+
+00:16:56.000 --> 00:17:01.120
+introduction to treesita oh
+
+00:17:01.120 --> 00:17:06.640
+no worries
+
+00:17:06.640 --> 00:17:18.079
+you are now muted
+
+00:17:18.079 --> 00:17:20.079
+sounds like a perfect opportunity for
+
+00:17:20.079 --> 00:17:21.679
+you to redo the introduction if you'd
+
+00:17:21.679 --> 00:17:24.640
+like to
+
+00:17:24.640 --> 00:17:30.799
+uh actually uh forgot a lot of that
+
+00:17:30.799 --> 00:17:33.760
+and I'm with uh tired now so no I don't
+
+00:17:33.760 --> 00:17:35.760
+think I can do it
+
+00:17:35.760 --> 00:17:39.200
+it's uh 30 minutes until my bedtime
+
+00:17:39.200 --> 00:17:43.520
+oh yeah yeah okay you are now unmuted
+
+00:17:43.520 --> 00:17:46.640
+so in that case maybe we should
+
+00:17:46.640 --> 00:17:50.480
+um we should let tona
+
+00:17:50.480 --> 00:17:54.240
+get started going to bed and um and
+
+00:17:54.240 --> 00:17:56.960
+I mean then I will figure out what to do
+
+00:17:56.960 --> 00:17:57.840
+with the time
+
+00:17:57.840 --> 00:17:59.360
+should we start the next talk early
+
+00:17:59.360 --> 00:18:02.160
+since it's pre-recorded
+
+00:18:02.160 --> 00:18:05.360
+um yeah we can do we can do that um
+
+00:18:05.360 --> 00:18:07.919
+but um yeah tonight it you know right
+
+00:18:07.919 --> 00:18:09.919
+now it's pretty late there um no worries
+
+00:18:09.919 --> 00:18:10.480
+but
+
+00:18:10.480 --> 00:18:12.720
+yeah if you know over the next few days
+
+00:18:12.720 --> 00:18:13.520
+or weeks
+
+00:18:13.520 --> 00:18:16.559
+if you would like to um you know
+
+00:18:16.559 --> 00:18:20.240
+do a quick pre-recording or recording
+
+00:18:20.240 --> 00:18:22.080
+to add the introduction and then stitch
+
+00:18:22.080 --> 00:18:24.320
+it in with what you had already sent me
+
+00:18:24.320 --> 00:18:26.559
+um by all means please do that and I
+
+00:18:26.559 --> 00:18:30.160
+will upload the edited version
+
+00:18:30.160 --> 00:18:34.880
+uh yeah yeah I'll try to do that
+
+00:18:34.880 --> 00:18:39.760
+thank you yep thank you so much bye
diff --git a/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt b/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt
new file mode 100644
index 00000000..276f3150
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--23-incremental-parsing-with-emacs-tree-sitter--tuan-anh-nguyen.vtt
@@ -0,0 +1,1235 @@
+WEBVTT
+
+00:00:01.520 --> 00:00:04.400
+Hello, everyone! My name is Tuấn-Anh.
+
+00:00:04.400 --> 00:00:07.200
+I've been using Emacs for about 10 years.
+
+00:00:07.200 --> 00:00:09.280
+Today, I'm going to talk about tree-sitter,
+
+00:00:09.280 --> 00:00:11.351
+a new Emacs package that allows Emacs
+
+00:00:11.351 --> 00:00:17.840
+to parse multiple programming languages
+in real-time.
+
+00:00:17.840 --> 00:00:21.840
+So what is the problem statement?
+
+00:00:21.840 --> 00:00:24.131
+In order to support programming
+functionalities
+
+00:00:24.131 --> 00:00:25.760
+for a particular language,
+
+00:00:25.760 --> 00:00:27.680
+a text editor needs to have some degree
+
+00:00:27.680 --> 00:00:29.679
+of language understanding.
+
+00:00:29.679 --> 00:00:31.840
+Traditionally, text editors have relied
+
+00:00:31.840 --> 00:00:34.960
+very heavily on regular expressions for
+this.
+
+00:00:34.960 --> 00:00:37.013
+Emacs is no different.
+
+00:00:37.013 --> 00:00:40.170
+Most language major modes use regular
+expressions
+
+00:00:40.170 --> 00:00:42.960
+for syntax-highlighting, code navigation,
+
+00:00:42.960 --> 00:00:46.618
+folding, indexing, and so on.
+
+00:00:46.618 --> 00:00:50.559
+Regular expressions are problematic for
+a couple of reasons.
+
+00:00:50.559 --> 00:00:53.778
+They're slow and inaccurate.
+
+00:00:53.778 --> 00:00:56.800
+They also make the code hard to read and
+write.
+
+00:00:56.800 --> 00:01:01.199
+Sometimes it's because the regular
+expressions themselves are very hairy,
+
+00:01:01.199 --> 00:01:05.199
+and sometimes because they are just not
+powerful enough.
+
+00:01:05.199 --> 00:01:08.625
+Some helper code is usually needed
+
+00:01:08.625 --> 00:01:11.200
+to parse more intricate language
+features.
+
+00:01:11.200 --> 00:01:16.159
+That also illustrates the core problem
+with regular expressions,
+
+00:01:16.159 --> 00:01:21.119
+in that they are not powerful enough to
+parse programming languages.
+
+00:01:21.119 --> 00:01:25.040
+An example feature that regular
+expressions cannot handle very well
+
+00:01:25.040 --> 00:01:28.320
+is string interpolation, which is a very
+common feature
+
+00:01:28.320 --> 00:01:31.680
+in many modern programming languages.
+
+00:01:31.680 --> 00:01:34.079
+It would be much nicer if Emacs somehow
+
+00:01:34.079 --> 00:01:39.520
+had structural understanding of source
+code, like IDEs do.
+
+00:01:39.520 --> 00:01:41.981
+There have been multiple efforts
+
+00:01:41.981 --> 00:01:45.280
+to bring this kind of programming
+language understanding into Emacs.
+
+00:01:45.280 --> 00:01:47.119
+There are language-specific parsers
+
+00:01:47.119 --> 00:01:48.640
+written in Elisp
+
+00:01:48.640 --> 00:01:50.675
+that can be thought of
+
+00:01:50.675 --> 00:01:51.989
+as the next logical step
+of the glue code
+
+00:01:51.989 --> 00:01:53.856
+on top of regular expressions,
+
+00:01:53.856 --> 00:01:57.356
+moving from partial local pattern
+recognition
+
+00:01:57.356 --> 00:01:59.840
+into a full-fledged parser.
+
+00:01:59.840 --> 00:02:02.023
+The most prominent example of this
+approach
+
+00:02:02.023 --> 00:02:06.479
+is probably the famous js2-mode.
+
+00:02:06.479 --> 00:02:10.080
+However, this approach has several issues.
+
+00:02:10.080 --> 00:02:12.606
+Parsing is computationally expensive,
+
+00:02:12.606 --> 00:02:16.800
+and Emacs Lisp is not good at that kind
+of stuff.
+
+00:02:16.800 --> 00:02:19.156
+Furthermore, maintenance is very
+troublesome.
+
+00:02:19.156 --> 00:02:22.160
+In order to work on these parsers,
+
+00:02:22.160 --> 00:02:24.239
+first, you have to know Elisp
+well enough,
+
+00:02:24.239 --> 00:02:26.606
+and then you have to be comfortable with
+
+00:02:26.606 --> 00:02:29.739
+writing a recursive descending parser,
+
+00:02:29.739 --> 00:02:34.000
+while constantly keeping up with changes
+to the language itself,
+
+00:02:34.000 --> 00:02:36.356
+which can be evolving very quickly,
+
+00:02:36.356 --> 00:02:39.360
+like Javascript, for example.
+
+00:02:39.360 --> 00:02:42.373
+Together, these constraints
+significantly reduce
+
+00:02:42.373 --> 00:02:45.680
+the pool of potential maintainers.
+
+00:02:45.680 --> 00:02:47.760
+The biggest issue, though, in my opinion,
+
+00:02:47.760 --> 00:02:52.139
+is lack of the set of generic and
+reusable APIs.
+
+00:02:52.139 --> 00:02:54.319
+This makes them very hard to use
+
+00:02:54.319 --> 00:02:55.920
+for minor modes that want to deal with
+
+00:02:55.920 --> 00:02:59.920
+cross-cutting concerns across multiple
+languages.
+
+00:02:59.920 --> 00:03:01.760
+The other approach which has been
+
+00:03:01.760 --> 00:03:04.319
+gaining a lot of momentum
+in recent years
+
+00:03:04.319 --> 00:03:06.560
+is externalizing language understanding
+
+00:03:06.560 --> 00:03:08.159
+to another process,
+
+00:03:08.159 --> 00:03:12.239
+also known as language server protocol.
+
+00:03:12.239 --> 00:03:16.560
+This second approach is actually a very
+interesting one.
+
+00:03:16.560 --> 00:03:18.400
+By decoupling language understanding
+
+00:03:18.400 --> 00:03:21.280
+from the editing facility itself,
+
+00:03:21.280 --> 00:03:25.120
+the LSP servers can attract a lot more
+contributors,
+
+00:03:25.120 --> 00:03:27.189
+which makes maintenance easier.
+
+00:03:27.189 --> 00:03:32.400
+However, they also have several issues
+of their own.
+
+00:03:32.400 --> 00:03:34.089
+Being a separate process,
+
+00:03:34.089 --> 00:03:37.073
+they are usually more
+resource-intensive,
+
+00:03:37.073 --> 00:03:39.920
+and depending on the language,
+
+00:03:39.920 --> 00:03:42.159
+the LSP server itself can bring with it
+
+00:03:42.159 --> 00:03:44.640
+a host of additional dependencies
+
+00:03:44.640 --> 00:03:50.640
+external to Emacs, which may be messy to
+install and manage.
+
+00:03:50.640 --> 00:03:55.120
+Furthermore, JSON over RPC has pretty
+high latency.
+
+00:03:55.120 --> 00:03:57.840
+For one-off tasks like jumping to source
+
+00:03:57.840 --> 00:04:00.879
+or on-demand completion, it's great.
+
+00:04:00.879 --> 00:04:03.040
+But for things like code highlighting,
+
+00:04:03.040 --> 00:04:06.000
+the latency is just too much.
+
+00:04:06.000 --> 00:04:08.319
+I was using Rust and I was following the
+
+00:04:08.319 --> 00:04:11.760
+community effort to improve its
+IDE support,
+
+00:04:11.760 --> 00:04:15.760
+hoping to integrate some of that into
+Emacs itself.
+
+00:04:15.760 --> 00:04:19.759
+Then I heard someone from the community
+mention tree-sitter,
+
+00:04:19.759 --> 00:04:23.360
+and I decided to check it out.
+
+00:04:23.360 --> 00:04:28.720
+Basically, tree-sitter is an incremental
+parsing library and a parser generator.
+
+00:04:28.720 --> 00:04:33.040
+It was introduced by the Atom editor in
+2018.
+
+00:04:33.040 --> 00:04:35.923
+Besides Atom, it is also being
+integrated
+
+00:04:35.923 --> 00:04:37.623
+into the NeoVim editor,
+
+00:04:37.623 --> 00:04:41.040
+and Github is using it to power
+
+00:04:41.040 --> 00:04:42.423
+their source code analysis
+
+00:04:42.423 --> 00:04:45.840
+and navigation features.
+
+00:04:45.840 --> 00:04:48.639
+It is written in C and can be compiled
+
+00:04:48.639 --> 00:04:50.623
+for all major platforms.
+
+00:04:50.623 --> 00:04:53.120
+It can even be compiled
+
+00:04:53.120 --> 00:04:55.323
+to web assembly to run on the web.
+
+00:04:55.323 --> 00:05:00.800
+That's how Github is using it
+on their website.
+
+00:05:00.800 --> 00:05:05.840
+So why is tree-sitter an interesting
+solution to this problem?
+
+00:05:05.840 --> 00:05:10.000
+There are multiple features that make it
+an attractive option.
+
+00:05:10.000 --> 00:05:11.839
+It is designed to be fast.
+
+00:05:11.839 --> 00:05:13.680
+By being incremental,
+
+00:05:13.680 --> 00:05:15.680
+the initial parse of a typical big file
+
+00:05:15.680 --> 00:05:18.160
+can take tens of milliseconds,
+
+00:05:18.160 --> 00:05:20.240
+while subsequent incremental processes
+
+00:05:20.240 --> 00:05:22.560
+are sub-millisecond.
+
+00:05:22.560 --> 00:05:26.240
+It achieves this by using
+structural sharing,
+
+00:05:26.240 --> 00:05:29.360
+meaning replacing only affected nodes
+
+00:05:29.360 --> 00:05:32.960
+in the old tree when it needs to.
+
+00:05:32.960 --> 00:05:37.120
+Also, unlike LSP, being in
+the same process,
+
+00:05:37.120 --> 00:05:40.639
+it has much lower latency.
+
+00:05:40.639 --> 00:05:44.960
+Secondly, it provides a uniform
+programming interface.
+
+00:05:44.960 --> 00:05:47.039
+The same data structures and functions
+
+00:05:47.039 --> 00:05:50.400
+work on parse trees of different
+languages.
+
+00:05:50.400 --> 00:05:52.160
+Syntax nodes of different languages
+
+00:05:52.160 --> 00:05:54.160
+differ only by their types
+
+00:05:54.160 --> 00:05:55.723
+and their possible child nodes.
+
+00:05:55.723 --> 00:06:02.240
+This is a big advantage over
+language-specific parsers.
+
+00:06:02.240 --> 00:06:06.880
+Thirdly, it's written in self-contained
+embeddable C.
+
+00:06:06.880 --> 00:06:11.723
+As I mentioned previously, it can even
+be compiled to webassembly.
+
+00:06:11.723 --> 00:06:16.106
+This makes integrating it into various
+editors quite easy
+
+00:06:16.106 --> 00:06:22.880
+without having to install any external
+dependencies.
+
+00:06:22.880 --> 00:06:25.503
+One thing that is not mentioned here
+
+00:06:25.503 --> 00:06:28.000
+is that being a parser generator,
+
+00:06:28.000 --> 00:06:31.039
+its grammars are declarative.
+
+00:06:31.039 --> 00:06:34.880
+Together with being editor-independent,
+
+00:06:34.880 --> 00:06:39.139
+this makes the pool of potential
+contributors much larger.
+
+00:06:39.139 --> 00:06:45.520
+So I was convinced that tree-sitter is a
+good fit for Emacs.
+
+00:06:45.520 --> 00:06:48.000
+Last year, I started writing the bindings
+
+00:06:48.000 --> 00:06:53.280
+using dynamic module support introduced
+in Emacs 25.
+
+00:06:53.280 --> 00:06:58.479
+Dynamic module means there is
+platform-specific native code involved,
+
+00:06:58.479 --> 00:07:00.560
+but since there are pre-compiled binaries
+
+00:07:00.560 --> 00:07:02.880
+for the three major platforms,
+
+00:07:02.880 --> 00:07:04.706
+it should work in most places.
+
+00:07:04.706 --> 00:07:09.440
+Currently, the core functionalities are
+in a pretty good shape.
+
+00:07:09.440 --> 00:07:12.560
+Syntax highlighting is working nicely.
+
+00:07:12.560 --> 00:07:16.080
+The whole thing is split into three
+packages.
+
+00:07:16.080 --> 00:07:20.319
+tree-sitter is the main package that
+other packages should depend on.
+
+00:07:20.319 --> 00:07:22.800
+tree-sitter-langs is the language bundle
+
+00:07:22.800 --> 00:07:24.000
+that includes support
+
+00:07:24.000 --> 00:07:27.199
+for most common languages.
+
+00:07:27.199 --> 00:07:32.160
+And finally, the core APIs are in the
+package tsc,
+
+00:07:32.160 --> 00:07:36.160
+which stands for tree-sitter-core.
+
+00:07:36.160 --> 00:07:38.800
+It is the implicit dependency of the
+
+00:07:38.800 --> 00:07:43.520
+tree-sitter package.
+
+00:07:43.520 --> 00:07:47.520
+The main package includes the minor mode
+tree-sitter-mode.
+
+00:07:47.520 --> 00:07:52.560
+This provides the base for other major
+or minor modes to build on.
+
+00:07:52.560 --> 00:07:54.839
+Using Emacs's change tracking hooks,
+
+00:07:54.839 --> 00:07:57.073
+it enables incremental parsing
+
+00:07:57.073 --> 00:08:00.800
+and provides a syntax tree that is
+always up to date
+
+00:08:00.800 --> 00:08:04.080
+after any edits in a buffer.
+
+00:08:04.080 --> 00:08:06.223
+There is also a basic debug mode
+
+00:08:06.223 --> 00:08:10.080
+that shows the parse tree in
+another buffer.
+
+00:08:10.080 --> 00:08:13.360
+Here is a quick demo.
+
+00:08:13.360 --> 00:08:15.673
+Here I'm in an empty Python buffer
+
+00:08:15.673 --> 00:08:17.520
+with tree-sitter enabled.
+
+00:08:17.520 --> 00:08:19.440
+I'm going to turn on the debug mode to
+
+00:08:19.440 --> 00:08:26.560
+see the parse tree.
+
+00:08:26.560 --> 00:08:28.106
+Since the buffer is empty,
+
+00:08:28.106 --> 00:08:30.423
+there is only one node in the
+syntax tree:
+
+00:08:30.423 --> 00:08:33.279
+the top-level module node.
+
+00:08:33.279 --> 00:09:11.040
+Let's try typing some code.
+
+00:09:11.040 --> 00:09:14.640
+As you can see, as I type into the
+Python buffer,
+
+00:09:14.640 --> 00:09:19.120
+the syntax tree updates in real time.
+
+00:09:19.120 --> 00:09:22.039
+The other minor mode included in the
+main package
+
+00:09:22.039 --> 00:09:24.389
+is tree-sitter-hl-mode.
+
+00:09:24.389 --> 00:09:26.349
+It overrides font-lock mode
+
+00:09:26.349 --> 00:09:28.480
+and provides its own set of phases
+
+00:09:28.480 --> 00:09:30.139
+and customization options
+
+00:09:30.139 --> 00:09:32.800
+It is query-driven.
+
+00:09:32.800 --> 00:09:36.240
+That means instead of regular
+expressions,
+
+00:09:36.240 --> 00:09:39.518
+it uses a Lisp-like query language
+
+00:09:39.518 --> 00:09:40.320
+to map syntax nodes
+
+00:09:40.320 --> 00:09:41.923
+to highlighting phrases.
+
+00:09:41.923 --> 00:09:45.760
+I'm going to open a python file with
+small snippets
+
+00:09:45.760 --> 00:09:54.320
+that showcase syntax highlighting.
+
+00:09:54.320 --> 00:09:55.920
+So this is the default highlighting
+
+00:09:55.920 --> 00:10:00.880
+provided by python-mode.
+
+00:10:00.880 --> 00:10:04.640
+This is the highlighting enabled
+by tree-sitter.
+
+00:10:04.640 --> 00:10:07.680
+As you can see, string interpolation
+
+00:10:07.680 --> 00:10:11.680
+and decorators are highlighted correctly.
+
+00:10:11.680 --> 00:10:17.440
+Function calls are also highlighted.
+
+00:10:17.440 --> 00:10:21.839
+You can also note that
+property accessors
+
+00:10:21.839 --> 00:10:27.440
+and property assignments are highlighted
+differently.
+
+00:10:27.440 --> 00:10:29.360
+What I like the most about this is that
+
+00:10:29.360 --> 00:10:32.640
+new bindings are consistently
+highlighted.
+
+00:10:32.640 --> 00:10:36.320
+This included local variables,
+
+00:10:36.320 --> 00:10:45.760
+function parameters, and property
+mutations.
+
+00:10:45.760 --> 00:10:48.000
+Before going through the tree queries
+
+00:10:48.000 --> 00:10:49.279
+and the syntax highlighting
+
+00:10:49.279 --> 00:10:51.680
+customization options,
+
+00:10:51.680 --> 00:10:53.339
+let's take a brief look at
+
+00:10:53.339 --> 00:10:55.040
+the core data structures and functions
+
+00:10:55.040 --> 00:10:58.079
+that tree-sitter provides.
+
+00:10:58.079 --> 00:11:00.743
+So parsing is done with the help of
+
+00:11:00.743 --> 00:11:02.240
+a generic parser object.
+
+00:11:02.240 --> 00:11:04.160
+A single parser object can be used to
+
+00:11:04.160 --> 00:11:06.000
+parse different languages
+
+00:11:06.000 --> 00:11:09.279
+by sending different language objects to
+it.
+
+00:11:09.279 --> 00:11:10.880
+The language objects themselves are
+
+00:11:10.880 --> 00:11:14.079
+loaded from shared libraries.
+
+00:11:14.079 --> 00:11:16.079
+Since tree-sitter-mmode already handles
+
+00:11:16.079 --> 00:11:17.360
+the parsing part,
+
+00:11:17.360 --> 00:11:19.440
+we will instead focus on the functions
+
+00:11:19.440 --> 00:11:20.800
+that inspect nodes,
+
+00:11:20.800 --> 00:11:25.279
+and in the resulting path tree,
+
+00:11:25.279 --> 00:11:27.030
+we can ask tree-sitter what is
+
+00:11:27.030 --> 00:11:44.240
+the syntax node at point.
+
+00:11:44.240 --> 00:11:48.480
+This is an opaque object, so this is not
+very useful.
+
+00:11:48.480 --> 00:12:03.760
+We can instead ask what is its type.
+
+00:12:03.760 --> 00:12:08.959
+So its type is the symbol comparison
+operator.
+
+00:12:08.959 --> 00:12:11.600
+In tree-sitter, there are two kinds of nodes,
+
+00:12:11.600 --> 00:12:13.680
+anonymous nodes and named nodes.
+
+00:12:13.680 --> 00:12:17.040
+Anonymous nodes correspond to simple
+grammar elements
+
+00:12:17.040 --> 00:12:21.279
+like keywords, operators, punctuations,
+and so on.
+
+00:12:21.279 --> 00:12:24.656
+Name nodes, on the other hand, are
+grammar elements
+
+00:12:24.656 --> 00:12:26.639
+that are interesting enough
+on their own
+
+00:12:26.639 --> 00:12:30.029
+to have a name, like an identifier,
+
+00:12:30.029 --> 00:12:35.440
+an expression, or a function definition.
+
+00:12:35.440 --> 00:12:37.323
+Name node types are symbols,
+
+00:12:37.323 --> 00:12:42.639
+while anonymous node types are strings.
+
+00:12:42.639 --> 00:12:49.760
+For example, if we are on this
+comparison operator,
+
+00:12:49.760 --> 00:12:55.920
+the node type should be a string.
+
+00:12:55.920 --> 00:12:58.959
+We can also get other information about
+the node.
+
+00:12:58.959 --> 00:13:09.680
+For example: what is this text,
+
+00:13:09.680 --> 00:13:20.800
+or where it is in the buffer,
+
+00:13:20.800 --> 00:13:43.199
+or what is its parent.
+
+00:13:43.199 --> 00:13:46.106
+There are many other APIs to query
+
+00:13:46.106 --> 00:13:52.639
+our node's properties.
+
+00:13:52.639 --> 00:13:54.234
+tree-sitter allows searching
+
+00:13:54.234 --> 00:13:58.240
+for structural patterns
+within a parse tree.
+
+00:13:58.240 --> 00:14:01.440
+It does so through a Lisp-like language.
+
+00:14:01.440 --> 00:14:04.639
+This language supports matching
+by node types,
+
+00:14:04.639 --> 00:14:07.760
+field names, and predicates.
+
+00:14:07.760 --> 00:14:12.639
+It also allows capturing nodes for
+further processing.
+
+00:14:12.639 --> 00:14:37.680
+Let's try to see some examples.
+
+00:14:37.680 --> 00:14:40.206
+So in this very simple query,
+
+00:14:40.206 --> 00:14:49.040
+we just try to highlight all the
+identifiers in the buffer.
+
+00:14:49.040 --> 00:14:53.120
+This s side tells tree-sitter
+to capture a node.
+
+00:14:53.120 --> 00:14:55.507
+In the context of the query builder,
+
+00:14:55.507 --> 00:14:57.360
+it's not very important,
+
+00:14:57.360 --> 00:14:59.706
+but in normal highlighting query,
+
+00:14:59.706 --> 00:15:01.760
+this will determine
+
+00:15:01.760 --> 00:15:06.639
+the face used to highlight the note.
+
+00:15:06.639 --> 00:15:08.256
+Suppose we want to capture
+
+00:15:08.256 --> 00:15:10.320
+all the function names,
+
+00:15:10.320 --> 00:15:13.519
+instead of just any identifier.
+
+00:15:13.519 --> 00:15:29.440
+You can improve the query like this.
+
+00:15:29.440 --> 00:15:32.639
+This will highlight the whole definition.
+
+00:15:32.639 --> 00:15:36.399
+But we only want to capture
+the function name,
+
+00:15:36.399 --> 00:15:41.054
+which means the identifier here.
+
+00:15:41.054 --> 00:15:49.600
+So we move the capture to after the
+identifier node.
+
+00:15:49.600 --> 00:15:52.959
+If we want to capture the
+class names as well,
+
+00:15:52.959 --> 00:16:10.079
+we just add another pattern.
+
+00:16:10.079 --> 00:16:20.320
+Let's look at a more practical example.
+
+00:16:20.320 --> 00:16:23.468
+Here we can see that
+single-quoted strings
+
+00:16:23.468 --> 00:16:27.279
+and double-quoted strings are
+highlighted the same.
+
+00:16:27.279 --> 00:16:30.399
+But in some places,
+
+00:16:30.399 --> 00:16:33.440
+because of some coding conventions,
+
+00:16:33.440 --> 00:16:36.373
+it may be desirable to highlight them
+differently.
+
+00:16:36.373 --> 00:16:39.073
+For example, if the string is
+single-quoted,
+
+00:16:39.073 --> 00:16:44.399
+we may want to highlight it as a
+constant.
+
+00:16:44.399 --> 00:16:46.160
+Let's try to see whether we can
+
+00:16:46.160 --> 00:16:56.240
+distinguish these two cases.
+
+00:16:56.240 --> 00:17:00.639
+So here we get all the strings.
+
+00:17:00.639 --> 00:17:04.079
+If we want to see if it's single quotes
+
+00:17:04.079 --> 00:17:08.799
+or double quote strings,
+
+00:17:08.799 --> 00:17:13.436
+we can try looking at the first
+character of the string--
+
+00:17:13.436 --> 00:17:16.720
+I mean the first character of the node--
+
+00:17:16.720 --> 00:17:33.600
+to check whether it's a single quote or
+a double quote.
+
+00:17:33.600 --> 00:17:38.920
+So for that, we use tree-sitter's
+support for predicates.
+
+00:17:38.920 --> 00:17:43.360
+In this case, we use a match predicate
+
+00:17:43.360 --> 00:17:47.339
+to check whether the string--
+whether the node starts
+
+00:17:47.339 --> 00:17:49.556
+with a single quote.
+
+00:17:49.556 --> 00:17:51.280
+And with this pattern,
+
+00:17:51.280 --> 00:18:00.400
+we only capture the single-quotes
+strings.
+
+00:18:00.400 --> 00:18:03.760
+Let's try to give it a different face.
+
+00:18:03.760 --> 00:18:13.039
+So we copy the pattern,
+
+00:18:13.039 --> 00:18:25.120
+and we add this pattern for Python only.
+
+00:18:25.120 --> 00:18:31.440
+But we also want to give the capture
+a different name.
+
+00:18:31.440 --> 00:18:46.559
+Let's say we want to highlight it
+as a keyword.
+
+00:18:46.559 --> 00:19:06.320
+And now, if we refresh the buffer,
+
+00:19:06.320 --> 00:19:08.523
+we see that single quote strings
+
+00:19:08.523 --> 00:19:14.400
+are highlighted as keywords.
+
+00:19:14.400 --> 00:19:15.751
+The highlighting patterns
+
+00:19:15.751 --> 00:19:19.200
+can also be set for a single project
+
+00:19:19.200 --> 00:19:23.440
+using directory-local variables.
+
+00:19:23.440 --> 00:19:35.760
+For example, let's take a look at
+Emacs's source code.
+
+00:19:35.760 --> 00:19:41.123
+So in Emacs's C source,
+there are a lot of uses
+
+00:19:41.123 --> 00:19:43.760
+of these different macros
+
+00:19:43.760 --> 00:19:47.679
+to define functions,
+
+00:19:47.679 --> 00:19:53.256
+and you can see this is actually
+the function name,
+
+00:19:53.256 --> 00:19:56.373
+but it's highlighted as the string.
+
+00:19:56.373 --> 00:20:03.679
+So what we want is to somehow
+recognize this pattern
+
+00:20:03.679 --> 00:20:07.600
+and highlight it.
+
+00:20:07.600 --> 00:20:11.280
+Highlight this part
+
+00:20:11.280 --> 00:20:14.559
+with the function face instead.
+
+00:20:14.559 --> 00:20:17.679
+In order to do that,
+
+00:20:17.679 --> 00:20:31.760
+we put a pattern in this project's
+directory-local settings file.
+
+00:20:31.760 --> 00:20:40.159
+So we can put this button in
+the C mode section.
+
+00:20:40.159 --> 00:20:48.000
+And now, if we enable tree-sitter,
+
+00:20:48.000 --> 00:20:50.480
+you can see that this is highlighted
+
+00:20:53.200 --> 00:20:55.056
+as a normal function definition.
+
+00:20:55.056 --> 00:21:01.200
+So this is the function face
+like we wanted.
+
+00:21:01.200 --> 00:21:07.200
+The pattern for this is
+actually pretty simple.
+
+00:21:07.200 --> 00:21:12.373
+It's only this part.
+
+00:21:12.373 --> 00:21:16.456
+So if it's a function call
+
+00:21:16.456 --> 00:21:19.679
+where the name of the function is
+defun,
+
+00:21:19.679 --> 00:21:24.240
+then we highlight the defun as a
+keyword,
+
+00:21:24.240 --> 00:21:26.923
+and then the first string element,
+
+00:21:26.923 --> 00:21:35.360
+we highlight it as a function name.
+
+00:21:35.360 --> 00:21:39.280
+Since the language objects are actually
+native code,
+
+00:21:39.280 --> 00:21:41.459
+they have to be compiled
+for each platform
+
+00:21:41.459 --> 00:21:43.440
+that we want to support.
+
+00:21:43.440 --> 00:21:48.159
+This will become a big obstacle for
+tree-sitter adoption.
+
+00:21:48.159 --> 00:21:52.960
+Therefore, I've created a language bundle
+package, tree-sitter-langs,
+
+00:21:52.960 --> 00:21:55.773
+that takes care of pre-compiling the
+grammars,
+
+00:21:55.773 --> 00:22:01.600
+the most common grammars for all three
+major platforms.
+
+00:22:01.600 --> 00:22:05.360
+It also takes care of distributing
+these binaries
+
+00:22:05.360 --> 00:22:08.080
+and provides some highlighting queries
+
+00:22:08.080 --> 00:22:11.440
+for some of the languages.
+
+00:22:11.440 --> 00:22:13.760
+It should be noted that this package
+
+00:22:13.760 --> 00:22:19.919
+should be treated as a temporary
+distribution mechanism only,
+
+00:22:19.919 --> 00:22:24.720
+to help with bootstrapping
+tree-sitter adoption.
+
+00:22:24.720 --> 00:22:27.760
+The plan is that eventually these files
+
+00:22:27.760 --> 00:22:29.156
+should be provided by
+
+00:22:29.156 --> 00:22:32.480
+the language major modes themselves.
+
+00:22:32.480 --> 00:22:36.320
+But in order to do that, we need better
+tooling,
+
+00:22:36.320 --> 00:22:40.240
+so we're not there yet.
+
+00:22:40.240 --> 00:22:43.280
+Since the core already works
+reasonably well,
+
+00:22:43.280 --> 00:22:45.289
+there are several areas
+that would benefit
+
+00:22:45.289 --> 00:22:49.120
+from the community's contribution.
+
+00:22:49.120 --> 00:22:52.640
+So tree-sitter's upstream language
+repositories
+
+00:22:52.640 --> 00:22:55.679
+already contain highlighting queries on
+their own.
+
+00:22:55.679 --> 00:22:57.573
+However, they are pretty basic,
+
+00:22:57.573 --> 00:23:02.559
+and they may not fit well with existing
+Emacs conventions.
+
+00:23:02.559 --> 00:23:07.120
+Therefore, the language bundle has its
+own set of highlighting queries.
+
+00:23:07.120 --> 00:23:12.556
+This requires maintenance until language
+major modes adopt tree-sitter
+
+00:23:12.556 --> 00:23:16.640
+and maintain the queries on their own.
+
+00:23:16.640 --> 00:23:19.056
+The queries are actually
+quite easy to write,
+
+00:23:19.056 --> 00:23:22.000
+as you've already seen.
+
+00:23:22.000 --> 00:23:25.360
+You just need to be familiar
+with the language,
+
+00:23:25.360 --> 00:23:35.200
+familiar enough to come up with sensible
+highlighting patterns.
+
+00:23:35.200 --> 00:23:39.679
+And if you are a maintainer of a
+language major mode,
+
+00:23:39.679 --> 00:23:44.189
+you may want to consider integrating
+tree-sitter into your mode,
+
+00:23:44.189 --> 00:23:48.573
+initially maybe as an optional feature.
+
+00:23:48.573 --> 00:23:53.279
+The integration is actually pretty
+straightforward,
+
+00:23:53.279 --> 00:23:56.640
+especially for syntax highlighting.
+
+00:23:56.640 --> 00:24:01.520
+Or alternatively,
+
+00:24:01.520 --> 00:24:05.760
+you can also try writing a new major
+mode from scratch
+
+00:24:05.760 --> 00:24:08.000
+that relies on tree-sitter
+
+00:24:08.000 --> 00:24:12.559
+from the very beginning.
+
+00:24:12.559 --> 00:24:17.523
+The code for such a major mode is
+quite simple.
+
+00:24:17.523 --> 00:24:23.200
+For example, this is the proposed
+
+00:24:23.200 --> 00:24:26.240
+wat-mode for web assembly.
+
+00:24:26.240 --> 00:24:39.520
+The code is just one page of code,
+not a lot.
+
+00:24:39.520 --> 00:24:42.720
+You can also try writing new minor modes
+
+00:24:42.720 --> 00:24:46.559
+or writing integration packages.
+
+00:24:46.559 --> 00:24:50.880
+For example, a lot of packages
+
+00:24:50.880 --> 00:24:54.559
+may benefit from tree-sitter integration,
+
+00:24:54.559 --> 00:25:02.960
+but no one has written
+the integration yet.
+
+00:25:02.960 --> 00:25:04.836
+If you are interested in tree-sitter,
+
+00:25:04.836 --> 00:25:08.023
+you can use these links to learn more
+about it.
+
+00:25:08.023 --> 00:25:11.440
+I think that's it for me today.
+
+00:25:11.440 --> 00:25:18.159
+I'm happy to answer any questions.
diff --git a/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt b/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt
new file mode 100644
index 00000000..c453575d
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--25-traverse-complex-json-structures-with-live-feedback-counsel-jq--zen-monk-alain-m-lafon.vtt
@@ -0,0 +1,553 @@
+WEBVTT
+
+00:00:00.799 --> 00:00:05.520
+Hello, everyone, and welcome to this
+short lightning talk:
+
+00:00:05.520 --> 00:00:09.519
+"Traverse Complex JSON Structures with
+Live Feedback."
+
+00:00:09.519 --> 00:00:18.000
+This is a pre-recorded talk and part of
+the EmacsConf 2020 schedule.
+
+00:00:18.000 --> 00:00:19.439
+This is what we're going to do.
+
+00:00:19.439 --> 00:00:22.320
+I'll make a quick introduction to the
+topic at hand.
+
+00:00:22.320 --> 00:00:24.400
+I'll give you a demonstration of some
+tools,
+
+00:00:24.400 --> 00:00:29.199
+and then we'll leave you
+with the links to said tools.
+
+00:00:29.199 --> 00:00:31.679
+Before that, just a little bit about me.
+
+00:00:31.679 --> 00:00:40.399
+I am the CEO and co-founder of a company
+based in the Swiss mountains called 200ok.ch.
+
+00:00:40.399 --> 00:00:44.879
+We are a product incubator and
+service consultancy,
+
+00:00:44.879 --> 00:00:50.000
+but we like to spend most or at least as
+much time as we can
+
+00:00:50.000 --> 00:00:52.719
+building free software.
+
+00:00:52.719 --> 00:00:56.879
+I'm also an ordained Zen monk and abbot
+of the Lambda Zen temple.
+
+00:00:56.879 --> 00:01:04.159
+You can reach me anytime on questions
+regarding Emacs, for example,
+
+00:01:04.159 --> 00:01:07.200
+at alain@200ok.ch.
+
+00:01:07.200 --> 00:01:09.439
+But back to the topic at hand.
+
+00:01:09.439 --> 00:01:11.760
+The proposition is as following:
+
+00:01:11.760 --> 00:01:14.000
+most work on the computer is based on
+either
+
+00:01:14.000 --> 00:01:16.479
+text processing or text consumption.
+
+00:01:16.479 --> 00:01:22.799
+And very often, the text which you need
+to process is in a structured format,
+
+00:01:22.799 --> 00:01:24.560
+for example, in JSON.
+
+00:01:24.560 --> 00:01:28.560
+That might even be if your job is not
+programming per se.
+
+00:01:28.560 --> 00:01:33.119
+Reading through such a bigger chunk of
+JSON can be non-trivial, however,
+
+00:01:33.119 --> 00:01:36.479
+while just reading and understanding it
+
+00:01:36.479 --> 00:01:40.320
+will be essential to getting your job
+done.
+
+00:01:40.320 --> 00:01:44.479
+So let's quickly check out an example
+JSON file.
+
+00:01:44.479 --> 00:01:47.200
+This is from the Github API,
+
+00:01:47.200 --> 00:01:52.079
+which is a request--sorry, the
+response to a request
+
+00:01:52.079 --> 00:01:54.640
+for a specific issue on the github API.
+
+00:01:54.640 --> 00:01:58.799
+So let's quickly check that one out.
+
+00:01:58.799 --> 00:02:01.920
+Okay. So here it is open, and we can
+already see
+
+00:02:01.920 --> 00:02:05.439
+that there is lots of stuff
+going on here.
+
+00:02:05.439 --> 00:02:07.360
+It's 200 lines.
+
+00:02:07.360 --> 00:02:09.200
+It's not going to be very easy
+
+00:02:09.200 --> 00:02:11.840
+just to find out what are the top level
+things in here,
+
+00:02:11.840 --> 00:02:13.360
+what are the top level attributes.
+
+00:02:13.360 --> 00:02:17.840
+Of course I can do this, and maybe do it
+by hand, but that doesn't scale.
+
+00:02:17.840 --> 00:02:21.599
+I can use cool Emacs facilities like the
+hideshow-mode
+
+00:02:21.599 --> 00:02:24.720
+and try to fold all the things that are
+top level,
+
+00:02:24.720 --> 00:02:27.200
+but that also doesn't really scale.
+
+00:02:27.200 --> 00:02:29.360
+There must be a better way.
+
+00:02:29.360 --> 00:02:32.000
+Of course there is. There is prior art.
+
+00:02:32.000 --> 00:02:34.080
+There is a tool called jq.
+
+00:02:34.080 --> 00:02:37.760
+I'm going to quote the USP (unique selling proposition) from their website:
+
+00:02:37.760 --> 00:02:42.000
+jq is like sed for JSON data.
+
+00:02:42.000 --> 00:02:46.319
+you can use it to slice and filter and
+map and transform structured data
+
+00:02:46.319 --> 00:02:47.840
+with the same ease that
+
+00:02:47.840 --> 00:02:54.000
+sed, awk, grep, and friends let you
+play with text.
+
+00:02:54.000 --> 00:02:56.879
+Let me give you a quick demonstration of
+it.
+
+00:02:56.879 --> 00:02:59.040
+By the way, it's written in portable C.
+
+00:02:59.040 --> 00:03:03.519
+It has zero runtime dependency, so it's
+very easy to get started with it
+
+00:03:03.519 --> 00:03:09.840
+and use it on pretty much any UNIX-based
+computer.
+
+00:03:09.840 --> 00:03:14.000
+Sorry, no, Linux-based computer,
+apologies.
+
+00:03:14.000 --> 00:03:18.720
+Okay, so let's explore a
+JSON file with it.
+
+00:03:18.720 --> 00:03:20.000
+It's a command line tool,
+
+00:03:20.000 --> 00:03:24.000
+and it has a very simple command
+line syntax.
+
+00:03:24.000 --> 00:03:29.840
+So you call the binary and then you give
+it a query and a file,
+
+00:03:29.840 --> 00:03:32.560
+and then it will return its answer.
+
+00:03:32.560 --> 00:03:35.440
+So, for example, if I want the top
+level keys,
+
+00:03:35.440 --> 00:03:38.000
+I will just say jq keys the file
+
+00:03:38.000 --> 00:03:39.840
+and it will return the keys.
+
+00:03:39.840 --> 00:03:44.400
+Simple as that. So let's check this out
+in a real shell.
+
+00:03:44.400 --> 00:03:46.879
+Here I am in eshell.
+
+00:03:46.879 --> 00:03:51.440
+Let's run jq keys on the Github issue comment.
+
+00:03:51.440 --> 00:03:58.799
+We can see that we have actually
+received a list back here
+
+00:03:58.799 --> 00:04:00.319
+with the top-level things.
+
+00:04:00.319 --> 00:04:02.879
+So this issue... It looks very interesting.
+
+00:04:02.879 --> 00:04:07.360
+Let's ask it to give me more information on this issue.
+
+00:04:07.360 --> 00:04:11.360
+Then it's hairy again. That's a lot of stuff.
+
+00:04:11.360 --> 00:04:14.560
+I mean, lucky for us, we are in Emacs here,
+
+00:04:14.560 --> 00:04:16.720
+so we can use nice shortcuts.
+
+00:04:16.720 --> 00:04:22.000
+We can copy this. We can go in here, just select that,
+
+00:04:22.000 --> 00:04:24.160
+get that out or something like this.
+
+00:04:24.160 --> 00:04:32.320
+But still, this is not really the best way to do that, right?
+
+00:04:32.320 --> 00:04:34.080
+it gets kind of tedious.
+
+00:04:34.080 --> 00:04:37.680
+At this point the output can be humongous.
+
+00:04:37.680 --> 00:04:41.919
+The shell is not really the best place to read through such big output.
+
+00:04:41.919 --> 00:04:45.759
+I mean, eshell is probably one of the better shells for this,
+
+00:04:45.759 --> 00:04:47.919
+because it's just a regular Emacs buffer,
+
+00:04:47.919 --> 00:04:50.720
+but still, it's not really the best tool.
+
+00:04:50.720 --> 00:04:53.680
+I need to repeat the command all the time
+
+00:04:53.680 --> 00:04:56.000
+until I finally build the right query.
+
+00:04:56.000 --> 00:04:59.840
+And all the time, I lose my focus,
+
+00:04:59.840 --> 00:05:02.800
+I lose what I'm currently looking at.
+
+00:05:02.800 --> 00:05:05.520
+I'm seeing the new result.
+
+00:05:05.520 --> 00:05:08.160
+It would be so much nicer to have live feedback.
+
+00:05:08.160 --> 00:05:10.720
+When working with Emacs, we're quite used to that.
+
+00:05:10.720 --> 00:05:12.320
+So there should be an option.
+
+00:05:12.320 --> 00:05:15.120
+And of course there is. It's Emacs, right,
+
+00:05:15.120 --> 00:05:17.759
+so you can do anything.
+
+00:05:17.759 --> 00:05:22.960
+There is various good tools for completion in Emacs.
+
+00:05:22.960 --> 00:05:26.000
+I used ivy for this.
+
+00:05:26.000 --> 00:05:29.039
+I'm going to quote the USP for ivy.
+
+00:05:29.039 --> 00:05:32.639
+ivy is a generic completion mechanism for Emacs.
+
+00:05:32.639 --> 00:05:37.919
+While it operates similarly to other completion schemes such as icomplete mode,
+
+00:05:37.919 --> 00:05:42.160
+ivy aims to be more efficient, smaller, simpler, and smoother to use,
+
+00:05:42.160 --> 00:05:45.199
+yet highly customizable.
+
+00:05:45.199 --> 00:05:46.479
+And that's true.
+
+00:05:46.479 --> 00:05:49.440
+One of the cool things of ivy
+
+00:05:49.440 --> 00:05:54.320
+compared to other completion mechanisms in Emacs
+
+00:05:54.320 --> 00:05:59.120
+is that it can be used on dynamic data.
+
+00:05:59.120 --> 00:06:02.400
+So usually completion works on a static input.
+
+00:06:02.400 --> 00:06:05.360
+For example, you're in a buffer, a text buffer,
+
+00:06:05.360 --> 00:06:09.600
+and you use isearch maybe with ido-mode,
+
+00:06:09.600 --> 00:06:13.360
+and you find your results. That's all nice.
+
+00:06:13.360 --> 00:06:19.600
+However, if I want to search on dynamic data,
+
+00:06:19.600 --> 00:06:20.720
+that doesn't work.
+
+00:06:20.720 --> 00:06:24.880
+So whenever I type in my query for jq,
+
+00:06:24.880 --> 00:06:28.000
+I actually need to call the jq binary,
+
+00:06:28.000 --> 00:06:30.720
+and it will give a different result set back.
+
+00:06:30.720 --> 00:06:36.160
+So it's a really dynamic mechanism that we need here.
+
+00:06:36.160 --> 00:06:38.240
+It's much more like a search engine.
+
+00:06:38.240 --> 00:06:41.440
+ivy luckily has something built in,
+
+00:06:41.440 --> 00:06:43.520
+and it's called counsel.
+
+00:06:43.520 --> 00:06:47.360
+So I used counsel and jq and combined them,
+
+00:06:47.360 --> 00:06:49.199
+and built a new package
+
+00:06:49.199 --> 00:06:52.960
+with which we can use Emacs and jq
+
+00:06:52.960 --> 00:06:56.000
+to have live feedback.
+
+00:06:56.000 --> 00:06:57.759
+It's very easy to use.
+
+00:06:57.759 --> 00:06:59.840
+So you just call counsel-jq
+
+00:06:59.840 --> 00:07:02.160
+on a buffer containing JSON.
+
+00:07:02.160 --> 00:07:04.319
+For example, the one we have here.
+
+00:07:04.319 --> 00:07:06.800
+Let's call counsel-jq on it,
+
+00:07:06.800 --> 00:07:10.080
+and we already get a default query,
+
+00:07:10.080 --> 00:07:14.639
+the dot query, which just gives us the same file.
+
+00:07:14.639 --> 00:07:16.240
+But now we can change it.
+
+00:07:16.240 --> 00:07:18.639
+For example, find all the keys in here.
+
+00:07:18.639 --> 00:07:20.319
+And then we see I had this issue.
+
+00:07:20.319 --> 00:07:22.800
+This was the one that we were interested in.
+
+00:07:22.800 --> 00:07:25.599
+So let's find more information on the issue.
+
+00:07:25.599 --> 00:07:28.720
+What keys does it have actually have?
+
+00:07:28.720 --> 00:07:31.680
+It has assignees. That interests me.
+
+00:07:31.680 --> 00:07:34.800
+So let's check out the assignees in here.
+
+00:07:34.800 --> 00:07:39.759
+There's two of them, but I'm only interested in the first one.
+
+00:07:39.759 --> 00:07:43.599
+I'm making stuff up as I go here, of course.
+
+00:07:43.599 --> 00:07:47.039
+Whenever I hit enter, I get a new buffer
+
+00:07:47.039 --> 00:07:52.639
+which just shows me this particular result
+
+00:07:52.639 --> 00:07:55.599
+for the particular query that I entered.
+
+00:07:55.599 --> 00:07:57.680
+So let me do that again.
+
+00:07:57.680 --> 00:08:04.000
+We are in here. We are looking at a JSON file.
+
+00:08:04.000 --> 00:08:05.840
+This can be very, very big.
+
+00:08:05.840 --> 00:08:07.280
+Doesn't also need to be a file.
+
+00:08:07.280 --> 00:08:09.520
+Just needs to be a buffer.
+
+00:08:09.520 --> 00:08:11.360
+You call counsel-jq on it,
+
+00:08:11.360 --> 00:08:14.319
+and you can do any kind of query on it.
+
+00:08:14.319 --> 00:08:18.080
+For example, let's see if there is a URL here.
+
+00:08:18.080 --> 00:08:19.440
+Yes, there's a URL.
+
+00:08:19.440 --> 00:08:22.827
+Let's see if there's a repository here.
+
+00:08:22.827 --> 00:08:24.639
+Repository. No, there isn't.
+
+00:08:24.639 --> 00:08:33.440
+What was it called? Issue. Keys. Repository URL, it was called.
+
+00:08:33.440 --> 00:08:38.240
+So let's see issue repository URL,
+
+00:08:38.240 --> 00:08:39.519
+and then we see.
+
+00:08:39.519 --> 00:08:44.800
+So apparently this issue comment is for a repository called organice.
+
+00:08:44.800 --> 00:08:47.839
+I wonder what that might be.
+
+00:08:47.839 --> 00:08:52.640
+Okay. So that was a very short introduction to counsel-jq.
+
+00:08:52.640 --> 00:08:54.240
+You can see the timer here.
+
+00:08:54.240 --> 00:08:57.440
+I only have one minute left to go, so I'm going to leave
+
+00:08:57.440 --> 00:09:02.880
+with a very, very short introduction to the counsel-jq code.
+
+00:09:02.880 --> 00:09:06.000
+It's not even 60 lines of elisp,
+
+00:09:06.000 --> 00:09:09.600
+so building something like this is very, very easy.
+
+00:09:09.600 --> 00:09:14.560
+I would encourage you to go and read through the code in your own time,
+
+00:09:14.560 --> 00:09:17.519
+if you're interested in building something like this.
+
+00:09:17.519 --> 00:09:22.720
+If you're interested in just using jq or you're done,
+
+00:09:22.720 --> 00:09:24.320
+these are the links to all the tools.
+
+00:09:24.320 --> 00:09:28.240
+counsel-jq, of course, is readily available on MELPA.
+
+00:09:28.240 --> 00:09:32.959
+Also developed under the AGPL license on Github.
+
+00:09:32.959 --> 00:09:36.080
+And this organice thing, by the way, it's
+
+00:09:36.080 --> 00:09:38.560
+Org Mode for mobile and desktop browsers.
+
+00:09:38.560 --> 00:09:43.120
+Also a great free software tool maybe that interests you.
+
+00:09:43.120 --> 00:09:46.240
+Thank you for listening. Have a great time.
+
+00:09:46.240 --> 00:09:49.360
+10 seconds left. I am going to stop this now.
+
+00:09:49.360 --> 00:09:53.920
+Enjoy EmacsConf. Have a great day.
diff --git a/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt b/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt
new file mode 100644
index 00000000..f4a8cc83
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--pierce-wang.vtt
@@ -0,0 +1,490 @@
+WEBVTT
+
+00:00:01.360 --> 00:00:05.200
+Hello and welcome to my EmacsConf lightning talk.
+
+00:00:05.200 --> 00:00:09.840
+Today I'll be talking about my journey into Emacs as a high schooler
+
+00:00:09.840 --> 00:00:14.400
+and how it has changed my life.
+
+00:00:14.400 --> 00:00:19.520
+Right. So who am I? I am a senior at
+Stanford Online High School,
+
+00:00:19.520 --> 00:00:22.800
+and I am also a violinist.
+
+00:00:22.800 --> 00:00:25.199
+I started violin when I was two and a half,
+
+00:00:25.199 --> 00:00:28.560
+and I have been keeping it up ever since.
+
+00:00:28.560 --> 00:00:30.240
+Violin is a huge part of my life,
+
+00:00:30.240 --> 00:00:33.360
+and I am very much a musician at heart.
+
+00:00:33.360 --> 00:00:36.239
+I am also a somewhat capable programmer.
+
+00:00:36.239 --> 00:00:39.280
+I've done a lot of informal programming in the past,
+
+00:00:39.280 --> 00:00:45.840
+and this year I'm taking my first AP Comp. Sci. course in my high school.
+
+00:00:45.840 --> 00:00:51.039
+And so I've done a lot of side projects,
+
+00:00:51.039 --> 00:00:56.800
+mainly in Python, and some very short scripts in Elisp.
+
+00:00:56.800 --> 00:00:59.840
+And last but not least, I am a tinker.
+
+00:00:59.840 --> 00:01:05.280
+I love to play around with things and see what I can do better,
+
+00:01:05.280 --> 00:01:10.880
+and just have as much fun as possible.
+
+00:01:10.880 --> 00:01:15.040
+So how did I find Emacs?
+
+00:01:15.040 --> 00:01:18.880
+I discovered it actually through a talk, funnily enough,
+
+00:01:18.880 --> 00:01:23.947
+at a Vim conference given by Aaron Bieber, titled:
+
+00:01:23.947 --> 00:01:28.320
+"Evil Mode or How I Learned to Stop Worrying and Love Emacs."
+
+00:01:28.320 --> 00:01:31.439
+I watched that talk a couple times over,
+
+00:01:31.439 --> 00:01:35.759
+just marveling at all the wonderful things that he could do in Emacs.
+
+00:01:35.759 --> 00:01:38.799
+And being a previous Vim user myself,
+
+00:01:38.799 --> 00:01:42.399
+I found it very enticing to be able to have
+
+00:01:42.399 --> 00:01:47.040
+the evil-mode package and very quickly switch to Emacs.
+
+00:01:47.040 --> 00:01:49.680
+At the time, I was also in my sophomore year,
+
+00:01:49.680 --> 00:01:56.320
+and so I had had a sort of a note-taking system
+in the past.
+
+00:01:56.320 --> 00:02:01.680
+But it was not good, and I needed a more organized note-taking system.
+
+00:02:01.680 --> 00:02:04.240
+My parents had suggested paper for a while,
+
+00:02:04.240 --> 00:02:09.759
+and there was the whole organization part of that,
+
+00:02:09.759 --> 00:02:12.080
+but that did not really work out for me.
+
+00:02:12.080 --> 00:02:16.239
+And so I was trying to find this better note-taking system,
+
+00:02:16.239 --> 00:02:19.440
+and it was very hard.
+
+00:02:19.440 --> 00:02:23.520
+I had two main criteria which I did not define at the time,
+
+00:02:23.520 --> 00:02:26.640
+but I realized was really what I was looking for.
+
+00:02:26.640 --> 00:02:29.599
+First of all, it had to be flexible enough,
+
+00:02:29.599 --> 00:02:33.680
+and second of all, I had to have control over the data.
+
+00:02:33.680 --> 00:02:36.239
+And so through this process,
+
+00:02:36.239 --> 00:02:41.920
+I actually went through a bunch of note-taking softwares rather systematically.
+
+00:02:41.920 --> 00:02:47.519
+I went through Google Docs, which very much did not work out.
+
+00:02:47.519 --> 00:02:52.080
+I also went through Evernote which also was not great for me,
+
+00:02:52.080 --> 00:02:55.200
+and OneNote, which I settled on for a little while,
+
+00:02:55.200 --> 00:02:58.800
+but it did not meet these criteria,
+
+00:02:58.800 --> 00:03:00.879
+particularly the second one.
+
+00:03:00.879 --> 00:03:03.840
+I had taken some notes and I wanted to export it,
+
+00:03:03.840 --> 00:03:07.519
+and OneNote did not let me do that.
+
+00:03:07.519 --> 00:03:12.000
+It was PDF. Horribly-organized PDF.
+
+00:03:12.000 --> 00:03:17.440
+And that's when I knew I needed some change.
+
+00:03:17.440 --> 00:03:21.519
+So I discovered Emacs through this talk,
+
+00:03:21.519 --> 00:03:27.040
+and through the wonderful features of Org Mode.
+
+00:03:27.040 --> 00:03:30.080
+This is my first journal entry in Emacs.
+
+00:03:30.080 --> 00:03:34.000
+I had been playing with it for one day,
+
+00:03:34.000 --> 00:03:35.760
+and I was on the Org Agenda,
+
+00:03:35.760 --> 00:03:38.159
+and I happened to press I,
+
+00:03:38.159 --> 00:03:43.040
+which for the Emacs keybinding is the default for diary entry.
+
+00:03:43.040 --> 00:03:45.440
+I was very excited.
+
+00:03:45.440 --> 00:03:50.239
+I shouldn't stay on the slide too long lest you read it.
+
+00:03:50.239 --> 00:03:53.760
+So let's move on to the next one.
+
+00:03:53.760 --> 00:03:57.200
+So the learning curve for me, I think,
+
+00:03:57.200 --> 00:04:00.480
+particularly being an ex-Vim user,
+
+00:04:00.480 --> 00:04:03.760
+evil-mode made it very easy to switch.
+
+00:04:03.760 --> 00:04:07.439
+Thankfully, there was the Emacs reference sheet,
+
+00:04:07.439 --> 00:04:16.160
+and having evil-mode to switch between texts...
+
+00:04:16.160 --> 00:04:17.919
+Whether it be editing a text file,
+
+00:04:17.919 --> 00:04:21.600
+or going to other parts of just Emacs in general,
+
+00:04:21.600 --> 00:04:25.520
+I think Vim really helped with making me feel comfortable
+
+00:04:25.520 --> 00:04:28.000
+within this new environment.
+
+00:04:28.000 --> 00:04:32.160
+So, having that experience, I also wasn't new
+
+00:04:32.160 --> 00:04:33.759
+to the keybind-based world.
+
+00:04:33.759 --> 00:04:36.320
+I have been very comfortable with the computer
+
+00:04:36.320 --> 00:04:40.160
+and the keyboard for most of my life,
+
+00:04:40.160 --> 00:04:45.520
+and so it was not a totally new environment for me.
+
+00:04:45.520 --> 00:04:49.360
+I also spent a lot of time looking at the Emacs reference sheet,
+
+00:04:49.360 --> 00:04:54.720
+Just thinking about trying to find all of the different functions.
+
+00:04:54.720 --> 00:04:58.720
+If I didn't know what something was, then I queried it in Emacs,
+
+00:04:58.720 --> 00:05:01.199
+and then I figured out what it was.
+
+00:05:01.199 --> 00:05:05.600
+And that was one of the best ways for me to discover
+
+00:05:05.600 --> 00:05:09.360
+all of the capabilities of Emacs.
+
+00:05:09.360 --> 00:05:12.800
+Thirdly, of course, the self-documenting feature
+
+00:05:12.800 --> 00:05:17.120
+or nature of Emacs and narrowing frameworks such as helm
+
+00:05:17.120 --> 00:05:21.360
+really helped find things, especially for M-x.
+
+00:05:21.360 --> 00:05:25.919
+For a while, I was just...
+
+00:05:25.919 --> 00:05:30.720
+I would go about my day, and if I pressed a keybind that I didn't know what it did,
+
+00:05:30.720 --> 00:05:37.039
+I would do the lossage and see the list of keybinds that I had pressed
+
+00:05:37.039 --> 00:05:43.039
+and tried to find that one, and query the function and what not.
+
+00:05:43.039 --> 00:05:48.160
+So yeah. And now we jump to now.
+
+00:05:48.160 --> 00:05:53.280
+So there is at least one moment in each day when I think
+
+00:05:53.280 --> 00:05:55.600
+how would I live without Emacs,
+
+00:05:55.600 --> 00:05:59.120
+particularly now during my senior year in high school.
+
+00:05:59.120 --> 00:06:04.880
+Things are very busy with school, violin, and other side projects.
+
+00:06:04.880 --> 00:06:12.720
+It's pretty crazy, and so Emacs and Org Mode has really helped me stay
+
+00:06:12.720 --> 00:06:14.479
+on track with everything.
+
+00:06:14.479 --> 00:06:16.319
+And the flexibility of these software
+
+00:06:16.319 --> 00:06:19.919
+is being able to have things in different files,
+
+00:06:19.919 --> 00:06:21.600
+notes within the tasks,
+
+00:06:21.600 --> 00:06:25.840
+all of that stuff has been truly a lifesaver.
+
+00:06:25.840 --> 00:06:28.400
+And so I think I can confidently say
+
+00:06:28.400 --> 00:06:35.280
+that I have found Emacs to be the perfect software for me
+
+00:06:35.280 --> 00:06:38.639
+over the past two years of using Emacs.
+
+00:06:38.639 --> 00:06:42.240
+Now it is about two years and two months.
+
+00:06:42.240 --> 00:06:45.039
+I have built a fairly well organized
+
+00:06:45.039 --> 00:06:49.520
+2000+ line Org literate config.
+
+00:06:49.520 --> 00:06:53.840
+I actually started with an Elisp config,
+
+00:06:53.840 --> 00:06:56.800
+just the vanilla Emacs with evil-mode,
+
+00:06:56.800 --> 00:06:59.039
+and I built it up from there.
+
+00:06:59.039 --> 00:07:02.400
+Eventually I switched to Org literate configs,
+
+00:07:02.400 --> 00:07:05.840
+and used that to organize the snippets
+
+00:07:05.840 --> 00:07:08.639
+that I was putting in there.
+
+00:07:08.639 --> 00:07:14.000
+So yeah, this is really my workflow now.
+
+00:07:14.000 --> 00:07:18.960
+Currently about 90% of everything I do on my computer is in Emacs.
+
+00:07:18.960 --> 00:07:21.360
+The most notable things, of course--
+
+00:07:21.360 --> 00:07:25.280
+the list is far too long to put on one slide--
+
+00:07:25.280 --> 00:07:28.160
+but I do a lot of my programming in Emacs,
+
+00:07:28.160 --> 00:07:31.280
+mainly Python and Elisp.
+
+00:07:31.280 --> 00:07:33.199
+Because of my AP Comp. Sci. class,
+
+00:07:33.199 --> 00:07:35.199
+I have to do Java as well,
+
+00:07:35.199 --> 00:07:41.840
+and thank goodness Emacs has wonderful support for that as well.
+
+00:07:41.840 --> 00:07:45.840
+Also, I do all of my school assignments,
+
+00:07:45.840 --> 00:07:47.840
+more or less, in Emacs.
+
+00:07:47.840 --> 00:07:51.919
+Essay writing I do in Org Mode, and I have some template files,
+
+00:07:51.919 --> 00:07:55.039
+template Org files which I just include at the top,
+
+00:07:55.039 --> 00:08:01.440
+and then I can export easily to LaTeX and a beautiful PDF.
+
+00:08:01.440 --> 00:08:03.440
+Math, physics, same thing.
+
+00:08:03.440 --> 00:08:09.599
+LaTeX fragments are a lifesaver, and also really pretty.
+
+00:08:09.599 --> 00:08:13.199
+I take notes on basically everything.
+
+00:08:13.199 --> 00:08:15.120
+At first, I had things separate,
+
+00:08:15.120 --> 00:08:19.680
+and then I started sort of putting it all into one notes.org file,
+
+00:08:19.680 --> 00:08:22.479
+or most of it into one file,
+
+00:08:22.479 --> 00:08:24.960
+and that has actually worked out surprisingly well,
+
+00:08:24.960 --> 00:08:30.442
+especially with all the searching
+features of agenda and what not.
+
+00:08:30.442 --> 00:08:33.440
+And I also use mail.
+
+00:08:33.440 --> 00:08:37.680
+I recently made the switch, probably about one or two months ago,
+
+00:08:37.680 --> 00:08:42.399
+and it has been one of the best switches I've ever had,
+
+00:08:42.399 --> 00:08:47.839
+especially given connecting to tasks all of this wonderful stuff.
+
+00:08:47.839 --> 00:08:54.160
+Just putting even more in Emacs is always a good thing, I found.
+
+00:08:54.160 --> 00:08:56.959
+So reflecting back on my journey,
+
+00:08:56.959 --> 00:08:59.600
+I think one of the most important things
+
+00:08:59.600 --> 00:09:01.440
+was just having a reason to use it.
+
+00:09:01.440 --> 00:09:06.080
+When I came to Emacs I had something that I was looking for,
+
+00:09:06.080 --> 00:09:09.839
+and as soon as I found it, I delved right in,
+
+00:09:09.839 --> 00:09:12.720
+and I started using it for that thing.
+
+00:09:12.720 --> 00:09:16.240
+So I was sort of forced to take the time to read the docs
+
+00:09:16.240 --> 00:09:20.880
+and figure out what functions I needed to function
+
+00:09:20.880 --> 00:09:25.839
+and how I was going to put my workflow,
+
+00:09:25.839 --> 00:09:30.399
+and also, of course, the desire to tinker.
+
+00:09:30.399 --> 00:09:35.839
+So, really, what's next for me is just wanting to become
+
+00:09:35.839 --> 00:09:38.640
+a more active member of the Emacs community.
+
+00:09:38.640 --> 00:09:40.959
+I want to give back, and I think this talk
+
+00:09:40.959 --> 00:09:43.760
+is sort of the first step to that
+
+00:09:43.760 --> 00:09:46.399
+being a more active part of this community
+
+00:09:46.399 --> 00:09:52.720
+that has, indirectly, perhaps, but just really helped me
+
+00:09:52.720 --> 00:09:55.839
+become a better and more organized human being.
+
+00:09:55.839 --> 00:10:00.240
+I have some package ideas that I'm slowly working on,
+
+00:10:00.240 --> 00:10:05.920
+and yeah, I just hope to spread the word.
+
+00:10:05.920 --> 00:10:09.360
+So thank you very much for listening to my lightning talk.
+
+00:10:09.360 --> 00:10:11.360
+If you'd like to contact me here are
+
+00:10:11.360 --> 00:10:14.800
+three modes of or two modes of communication.
+
+00:10:14.800 --> 00:10:17.600
+I will be on IRC more soon,
+
+00:10:17.600 --> 00:10:22.079
+and you can always email me if you have any questions.
+
+00:10:22.079 --> 00:10:25.519
+You can also search me on Youtube: Pierce Wang violin.
+
+00:10:25.519 --> 00:10:33.040
+Thank you very much and I hope you enjoy the rest of the conference.
diff --git a/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt b/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt
new file mode 100644
index 00000000..e0ddcb76
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--26-emacs-as-a-highschooler-how-it-changed-my-life--questions--pierce-wang-autogen.vtt
@@ -0,0 +1,769 @@
+WEBVTT
+
+00:00:01.360 --> 00:00:03.040
+hello and welcome to my
+
+00:00:03.040 --> 00:00:05.520
+Emacs conference lightning talk today
+
+00:00:05.520 --> 00:00:07.120
+I'll be talking about
+
+00:00:07.120 --> 00:00:09.840
+my journey into Emacs as a high schooler
+
+00:00:09.840 --> 00:00:14.400
+and how it has changed my life
+
+00:00:14.400 --> 00:00:17.359
+right so who am I I am a senior at
+
+00:00:17.359 --> 00:00:19.520
+stanford online high school
+
+00:00:19.520 --> 00:00:22.800
+and I am also a violinist
+
+00:00:22.800 --> 00:00:24.320
+I started violin when I was two and a
+
+00:00:24.320 --> 00:00:26.960
+half and I have been
+
+00:00:26.960 --> 00:00:29.119
+keeping it up ever since violin is a
+
+00:00:29.119 --> 00:00:30.240
+huge part of my life
+
+00:00:30.240 --> 00:00:33.360
+and I am very much a musician at heart
+
+00:00:33.360 --> 00:00:36.239
+I am also a somewhat capable programmer
+
+00:00:36.239 --> 00:00:37.840
+I've done a lot of informal programming
+
+00:00:37.840 --> 00:00:39.280
+in the past
+
+00:00:39.280 --> 00:00:42.559
+and this year I'm taking my first ap
+
+00:00:42.559 --> 00:00:44.079
+compsci course
+
+00:00:44.079 --> 00:00:47.440
+in my high school and so
+
+00:00:47.440 --> 00:00:51.039
+I've done a lot of side projects
+
+00:00:51.039 --> 00:00:54.239
+mainly in python and some very short
+
+00:00:54.239 --> 00:00:56.800
+scripts in e-lisp
+
+00:00:56.800 --> 00:00:59.840
+and last but not least I am a tinker
+
+00:00:59.840 --> 00:01:02.879
+I love to play around with things and
+
+00:01:02.879 --> 00:01:06.720
+see what I can do better and just
+
+00:01:06.720 --> 00:01:10.880
+have as much fun as possible
+
+00:01:10.880 --> 00:01:15.040
+so how did I find Emacs
+
+00:01:15.040 --> 00:01:17.600
+I discovered it actually through a talk
+
+00:01:17.600 --> 00:01:18.880
+funnily enough
+
+00:01:18.880 --> 00:01:21.360
+at a vim conference given by aaron
+
+00:01:21.360 --> 00:01:23.520
+bieber
+
+00:01:23.520 --> 00:01:25.840
+titled evil mode or how I learned to
+
+00:01:25.840 --> 00:01:28.320
+stop worrying and love Emacs
+
+00:01:28.320 --> 00:01:31.439
+I watched that talk a couple times over
+
+00:01:31.439 --> 00:01:33.360
+just marveling at all the wonderful
+
+00:01:33.360 --> 00:01:35.759
+things that he could do in Emacs
+
+00:01:35.759 --> 00:01:38.799
+and being a previous vim user myself
+
+00:01:38.799 --> 00:01:41.680
+I found it very enticing to be able to
+
+00:01:41.680 --> 00:01:42.399
+have
+
+00:01:42.399 --> 00:01:44.960
+the evil mode package and very quickly
+
+00:01:44.960 --> 00:01:47.040
+switch to Emacs
+
+00:01:47.040 --> 00:01:48.799
+at the time I was also in my sophomore
+
+00:01:48.799 --> 00:01:51.040
+year and so
+
+00:01:51.040 --> 00:01:54.640
+I had had sort of a note-taking system
+
+00:01:54.640 --> 00:01:56.320
+in the past
+
+00:01:56.320 --> 00:01:59.360
+but it was not good um and I needed a
+
+00:01:59.360 --> 00:02:01.680
+more organized note-taking system
+
+00:02:01.680 --> 00:02:03.759
+my parents had suggested paper for a
+
+00:02:03.759 --> 00:02:04.960
+while and
+
+00:02:04.960 --> 00:02:08.160
+there was the whole organization
+
+00:02:08.160 --> 00:02:10.959
+part of that but that did not really
+
+00:02:10.959 --> 00:02:12.080
+work out for me
+
+00:02:12.080 --> 00:02:14.000
+and so I was trying to find this better
+
+00:02:14.000 --> 00:02:16.239
+note-taking system
+
+00:02:16.239 --> 00:02:19.440
+and it was very hard
+
+00:02:19.440 --> 00:02:22.239
+I had two main criteria which I did not
+
+00:02:22.239 --> 00:02:23.520
+define at the time
+
+00:02:23.520 --> 00:02:25.360
+but I realized was really what I was
+
+00:02:25.360 --> 00:02:26.640
+looking for
+
+00:02:26.640 --> 00:02:28.720
+first of all it had to be flexible
+
+00:02:28.720 --> 00:02:30.959
+enough and second of all it had
+
+00:02:30.959 --> 00:02:33.920
+I had to have control over the data and
+
+00:02:33.920 --> 00:02:34.959
+so
+
+00:02:34.959 --> 00:02:37.519
+through this process I actually went
+
+00:02:37.519 --> 00:02:39.680
+through a bunch of note-taking softwares
+
+00:02:39.680 --> 00:02:42.640
+rather systematically I went through
+
+00:02:42.640 --> 00:02:44.080
+google docs
+
+00:02:44.080 --> 00:02:47.519
+which very much did not work out
+
+00:02:47.519 --> 00:02:49.840
+I also went through evernote which also
+
+00:02:49.840 --> 00:02:50.640
+was not
+
+00:02:50.640 --> 00:02:53.200
+great for me and one note which I
+
+00:02:53.200 --> 00:02:55.200
+settled on for a little while
+
+00:02:55.200 --> 00:02:58.800
+but it did not meet these criteria
+
+00:02:58.800 --> 00:03:01.519
+particularly the second one I had taken
+
+00:03:01.519 --> 00:03:02.159
+some notes
+
+00:03:02.159 --> 00:03:05.280
+and I wanted to export it and onenote
+
+00:03:05.280 --> 00:03:07.519
+did not let me do that
+
+00:03:07.519 --> 00:03:12.000
+it was pdf horribly organized pdf
+
+00:03:12.000 --> 00:03:14.879
+and that's when I knew I needed some
+
+00:03:14.879 --> 00:03:17.440
+change
+
+00:03:17.440 --> 00:03:21.519
+so I discovered Emacs through this talk
+
+00:03:21.519 --> 00:03:24.080
+and through the wonderful features of
+
+00:03:24.080 --> 00:03:27.040
+org mode
+
+00:03:27.040 --> 00:03:30.080
+this is my first journal entry in Emacs
+
+00:03:30.080 --> 00:03:34.000
+I had been playing with it for one day
+
+00:03:34.000 --> 00:03:36.159
+and I was on the org agenda and I
+
+00:03:36.159 --> 00:03:38.159
+happened to press I
+
+00:03:38.159 --> 00:03:40.720
+which for the Emacs combined is the
+
+00:03:40.720 --> 00:03:41.599
+default for
+
+00:03:41.599 --> 00:03:45.440
+diary entry and so I was very excited
+
+00:03:45.440 --> 00:03:48.720
+um and I shouldn't stay on the slide too
+
+00:03:48.720 --> 00:03:50.239
+long unless you read it
+
+00:03:50.239 --> 00:03:53.760
+um so let's move on to the next one
+
+00:03:53.760 --> 00:03:57.200
+um so the learning curve for me I think
+
+00:03:57.200 --> 00:04:00.480
+particularly being an xbm user
+
+00:04:00.480 --> 00:04:03.760
+evil mode made it very easy to switch
+
+00:04:03.760 --> 00:04:06.080
+thankfully I there was the emax
+
+00:04:06.080 --> 00:04:07.439
+reference sheet
+
+00:04:07.439 --> 00:04:10.799
+and having evil mode to
+
+00:04:10.799 --> 00:04:14.080
+switch between um
+
+00:04:14.080 --> 00:04:17.440
+texts and whether it be editing a text
+
+00:04:17.440 --> 00:04:17.919
+file
+
+00:04:17.919 --> 00:04:20.560
+or going to other parts of just Emacs in
+
+00:04:20.560 --> 00:04:21.600
+general
+
+00:04:21.600 --> 00:04:24.800
+I think vim really helped with making me
+
+00:04:24.800 --> 00:04:26.840
+feel comfortable within this new
+
+00:04:26.840 --> 00:04:28.000
+environment
+
+00:04:28.000 --> 00:04:31.440
+and so having that experience I also
+
+00:04:31.440 --> 00:04:31.919
+wasn't
+
+00:04:31.919 --> 00:04:34.240
+new to the keybind-based world I have
+
+00:04:34.240 --> 00:04:36.320
+been very comfortable with computer
+
+00:04:36.320 --> 00:04:40.160
+and the keyboard for most of my life
+
+00:04:40.160 --> 00:04:43.520
+and so it was not a totally new
+
+00:04:43.520 --> 00:04:45.520
+environment for me
+
+00:04:45.520 --> 00:04:47.440
+I also spent a lot of time looking at
+
+00:04:47.440 --> 00:04:49.360
+the Emacs reference sheet
+
+00:04:49.360 --> 00:04:53.040
+just thinking about trying to find
+
+00:04:53.040 --> 00:04:55.040
+all of the different functions if I
+
+00:04:55.040 --> 00:04:56.639
+didn't know what something was
+
+00:04:56.639 --> 00:04:59.680
+then I queried it in Emacs and then I
+
+00:04:59.680 --> 00:05:01.199
+figured out what it was
+
+00:05:01.199 --> 00:05:03.759
+and that was one of the best ways for me
+
+00:05:03.759 --> 00:05:05.600
+to discover
+
+00:05:05.600 --> 00:05:09.360
+all of the capabilities of Emacs
+
+00:05:09.360 --> 00:05:11.440
+thirdly of course the self-documenting
+
+00:05:11.440 --> 00:05:12.800
+feature
+
+00:05:12.800 --> 00:05:15.199
+or nature of Emacs and narrowing
+
+00:05:15.199 --> 00:05:17.120
+frameworks such as helm
+
+00:05:17.120 --> 00:05:20.479
+really helped find things especially for
+
+00:05:20.479 --> 00:05:21.360
+mx
+
+00:05:21.360 --> 00:05:25.919
+for a while I was just
+
+00:05:25.919 --> 00:05:28.160
+I would go about my day and if I pressed
+
+00:05:28.160 --> 00:05:29.520
+to keep mine that I didn't know what it
+
+00:05:29.520 --> 00:05:30.720
+did
+
+00:05:30.720 --> 00:05:34.560
+I would do the losses and
+
+00:05:34.560 --> 00:05:36.240
+see the list of key binds that I had
+
+00:05:36.240 --> 00:05:37.600
+pressed and
+
+00:05:37.600 --> 00:05:40.400
+tried to find that one and query the
+
+00:05:40.400 --> 00:05:41.280
+function
+
+00:05:41.280 --> 00:05:45.280
+and what not so
+
+00:05:45.280 --> 00:05:49.120
+yeah and now we jump to now so
+
+00:05:49.120 --> 00:05:51.759
+there there is at least one moment in
+
+00:05:51.759 --> 00:05:53.280
+each day when I think
+
+00:05:53.280 --> 00:05:55.600
+how would I live without umax
+
+00:05:55.600 --> 00:05:57.680
+particularly now during my senior year
+
+00:05:57.680 --> 00:05:59.120
+in high school
+
+00:05:59.120 --> 00:06:02.720
+things are very busy with school violin
+
+00:06:02.720 --> 00:06:05.520
+and other side projects it's pretty
+
+00:06:05.520 --> 00:06:06.400
+crazy
+
+00:06:06.400 --> 00:06:09.680
+and so Emacs
+
+00:06:09.680 --> 00:06:12.720
+and org mode has really helped me stay
+
+00:06:12.720 --> 00:06:14.479
+on track with everything
+
+00:06:14.479 --> 00:06:16.960
+and the flexibility of these software is
+
+00:06:16.960 --> 00:06:18.840
+being able to have things in different
+
+00:06:18.840 --> 00:06:21.600
+files notes within the tasks
+
+00:06:21.600 --> 00:06:24.639
+all of that stuff has been truly a
+
+00:06:24.639 --> 00:06:25.840
+lifesaver
+
+00:06:25.840 --> 00:06:28.400
+and so I think I can confidently say
+
+00:06:28.400 --> 00:06:31.199
+that I have found Emacs to be
+
+00:06:31.199 --> 00:06:35.280
+the perfect software for me
+
+00:06:35.280 --> 00:06:38.639
+over the past two years of using Emacs
+
+00:06:38.639 --> 00:06:42.240
+now it is about two years and two months
+
+00:06:42.240 --> 00:06:45.039
+I have built a fairly well organized
+
+00:06:45.039 --> 00:06:46.160
+2000
+
+00:06:46.160 --> 00:06:49.520
+plus line org literate config
+
+00:06:49.520 --> 00:06:52.160
+and so I actually I started with an
+
+00:06:52.160 --> 00:06:53.840
+e-lisp config
+
+00:06:53.840 --> 00:06:56.800
+just the vanilla e-max with evil mode
+
+00:06:56.800 --> 00:06:57.919
+and I built it up
+
+00:06:57.919 --> 00:07:00.319
+from there eventually I switched to org
+
+00:07:00.319 --> 00:07:02.400
+literate configs
+
+00:07:02.400 --> 00:07:05.840
+and used that to organize the snippets
+
+00:07:05.840 --> 00:07:10.080
+that I was putting in there and so
+
+00:07:10.080 --> 00:07:14.000
+yeah this is really my workflow now
+
+00:07:14.000 --> 00:07:16.639
+currently about 90 of everything I do on
+
+00:07:16.639 --> 00:07:18.960
+my computer is in Emacs
+
+00:07:18.960 --> 00:07:21.520
+the most notable things of course the
+
+00:07:21.520 --> 00:07:22.319
+list is far
+
+00:07:22.319 --> 00:07:26.000
+too long to put on one slide but I do a
+
+00:07:26.000 --> 00:07:28.160
+lot of my programming in Emacs
+
+00:07:28.160 --> 00:07:31.280
+mainly python and e-lisp
+
+00:07:31.280 --> 00:07:33.759
+because of my ap comp sci class I have
+
+00:07:33.759 --> 00:07:35.199
+to do java as well
+
+00:07:35.199 --> 00:07:38.720
+and thank goodness Emacs has wonderful
+
+00:07:38.720 --> 00:07:41.840
+support for that as well
+
+00:07:41.840 --> 00:07:45.840
+also I do all of my school assignments
+
+00:07:45.840 --> 00:07:48.800
+more or less in Emacs essay writing I do
+
+00:07:48.800 --> 00:07:50.400
+an org mode and I have some template
+
+00:07:50.400 --> 00:07:51.919
+files
+
+00:07:51.919 --> 00:07:53.919
+template org files which I just include
+
+00:07:53.919 --> 00:07:55.039
+at the top
+
+00:07:55.039 --> 00:07:58.160
+and then I can export easily to latex
+
+00:07:58.160 --> 00:08:01.440
+and a beautiful pdf
+
+00:08:01.440 --> 00:08:04.400
+math physics same thing latex fragments
+
+00:08:04.400 --> 00:08:05.840
+are a lifesaver
+
+00:08:05.840 --> 00:08:09.599
+and also really pretty
+
+00:08:09.599 --> 00:08:13.199
+and I take notes on basically everything
+
+00:08:13.199 --> 00:08:15.520
+at first I had things separate and then
+
+00:08:15.520 --> 00:08:16.319
+I started
+
+00:08:16.319 --> 00:08:19.360
+sort of putting it all into onenotes.org
+
+00:08:19.360 --> 00:08:21.360
+file or most of it into one
+
+00:08:21.360 --> 00:08:24.000
+file and that has actually worked out
+
+00:08:24.000 --> 00:08:24.960
+surprisingly well
+
+00:08:24.960 --> 00:08:26.479
+especially with all the searching
+
+00:08:26.479 --> 00:08:28.879
+features of agenda
+
+00:08:28.879 --> 00:08:33.440
+and whatnot um and I also use mail
+
+00:08:33.440 --> 00:08:35.680
+I recently made the switch probably
+
+00:08:35.680 --> 00:08:37.680
+about one or two months ago
+
+00:08:37.680 --> 00:08:40.479
+and it has been one of the best switches
+
+00:08:40.479 --> 00:08:40.959
+I've
+
+00:08:40.959 --> 00:08:44.480
+I've ever had especially given
+
+00:08:44.480 --> 00:08:46.320
+connecting to tasks all of this
+
+00:08:46.320 --> 00:08:47.839
+wonderful stuff
+
+00:08:47.839 --> 00:08:50.640
+just putting even more in Emacs is
+
+00:08:50.640 --> 00:08:54.160
+always a good thing I found
+
+00:08:54.160 --> 00:08:57.680
+so reflecting back on my journey I think
+
+00:08:57.680 --> 00:08:59.760
+one of the most important things was
+
+00:08:59.760 --> 00:09:01.440
+just having a reason to use it
+
+00:09:01.440 --> 00:09:04.480
+when I came to Emacs I had something
+
+00:09:04.480 --> 00:09:06.080
+that I was looking for
+
+00:09:06.080 --> 00:09:09.600
+and as soon as I found it I delved right
+
+00:09:09.600 --> 00:09:09.839
+in
+
+00:09:09.839 --> 00:09:12.720
+and I I started using it for that thing
+
+00:09:12.720 --> 00:09:14.480
+and so I was sort of forced to
+
+00:09:14.480 --> 00:09:16.959
+take the time to read the docs and
+
+00:09:16.959 --> 00:09:19.279
+figure out what functions I needed
+
+00:09:19.279 --> 00:09:22.399
+to function and how
+
+00:09:22.399 --> 00:09:25.839
+I was going to put my workflow
+
+00:09:25.839 --> 00:09:30.399
+and also of course the desire to tinker
+
+00:09:30.399 --> 00:09:33.519
+and yeah so really what's next for me
+
+00:09:33.519 --> 00:09:36.800
+is just wanting to become a more active
+
+00:09:36.800 --> 00:09:38.640
+member of the Emacs community
+
+00:09:38.640 --> 00:09:40.640
+I want to give back and I think this
+
+00:09:40.640 --> 00:09:43.760
+talk is sort of the first step to that
+
+00:09:43.760 --> 00:09:45.920
+being a more active part of this
+
+00:09:45.920 --> 00:09:48.000
+community that has
+
+00:09:48.000 --> 00:09:51.040
+indirectly perhaps um but just like
+
+00:09:51.040 --> 00:09:54.000
+really helped me become a better and
+
+00:09:54.000 --> 00:09:55.839
+more organized human being
+
+00:09:55.839 --> 00:09:58.880
+um I have some package ideas that I'm
+
+00:09:58.880 --> 00:10:01.920
+slowly working on and yeah I just hope
+
+00:10:01.920 --> 00:10:05.920
+to spread the word
+
+00:10:05.920 --> 00:10:08.000
+so thank you very much for listening to
+
+00:10:08.000 --> 00:10:09.360
+my lightning talk
+
+00:10:09.360 --> 00:10:11.360
+if you'd like to contact me here are
+
+00:10:11.360 --> 00:10:12.480
+three modes of
+
+00:10:12.480 --> 00:10:15.279
+or two modes of communication I will be
+
+00:10:15.279 --> 00:10:17.120
+on irc more
+
+00:10:17.120 --> 00:10:20.079
+soon and you can always email me if you
+
+00:10:20.079 --> 00:10:20.560
+have
+
+00:10:20.560 --> 00:10:23.200
+any questions you can also search me on
+
+00:10:23.200 --> 00:10:23.680
+youtube
+
+00:10:23.680 --> 00:10:26.399
+pierce wong violin thank you very much
+
+00:10:26.399 --> 00:10:26.800
+and
+
+00:10:26.800 --> 00:10:30.040
+I hope you enjoy the rest of the
+
+00:10:30.040 --> 00:10:33.040
+conference
diff --git a/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt b/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt
new file mode 100644
index 00000000..3d655630
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--27-state-of-retro-gaming-in-emacs-chip8--vasilij-wasamasa-schneidermann.vtt
@@ -0,0 +1,630 @@
+WEBVTT
+
+00:00:00.880 --> 00:00:04.520
+Hello everyone and welcome to my talk, "The State of Retro Gaming and Emacs."
+
+00:00:06.960 --> 00:00:08.639
+First of all, a little bit about myself.
+
+00:00:08.639 --> 00:00:12.000
+My name is Vasilij Schneidermann. I'm 28 years old.
+
+00:00:12.000 --> 00:00:14.719
+I work as a cyber security consultant at msg systems,
+
+00:00:14.719 --> 00:00:17.359
+and test other people's web applications
+
+00:00:17.359 --> 00:00:20.160
+and review the source code for security problems.
+
+00:00:20.160 --> 00:00:22.080
+You can reach me by email.
+
+00:00:22.080 --> 00:00:25.039
+I have my own self-hosted git repositories,
+
+00:00:25.039 --> 00:00:28.160
+and I have a blog where you can occasionally find new posts by me
+
+00:00:28.160 --> 00:00:32.160
+on all kinds of things, not just Emacs things.
+
+00:00:32.160 --> 00:00:34.559
+The motivation about this one...
+
+00:00:34.559 --> 00:00:37.600
+I found that Emacs is the ultimate procrastination machine,
+
+00:00:37.600 --> 00:00:39.600
+and there are lots of fun demonstrations.
+
+00:00:39.600 --> 00:00:41.200
+I'll go over a few of them.
+
+00:00:41.200 --> 00:00:45.840
+For example, someone made a thing to order salad for himself online,
+
+00:00:45.840 --> 00:00:48.239
+so he doesn't have to walk over to the shop.
+
+00:00:48.239 --> 00:00:51.760
+There's plenty of IRC bots. There's some game things.
+
+00:00:51.760 --> 00:00:55.600
+There's an emulator for the Z-machine
+which you can use to play zork.
+
+00:00:55.600 --> 00:00:57.440
+And so I asked myself, at this point,
+
+00:00:57.440 --> 00:00:59.920
+can you actually emulate retro games at 60fps?
+
+00:00:59.920 --> 00:01:02.079
+I looked around a bit and found some projects,
+
+00:01:02.079 --> 00:01:06.159
+but none that were actually able to do it at 60fps.
+
+00:01:06.159 --> 00:01:08.000
+So I set out to do my own one,
+
+00:01:08.000 --> 00:01:09.200
+and looked out for a console
+
+00:01:09.200 --> 00:01:11.119
+that you can actually emulate at that speed,
+
+00:01:11.119 --> 00:01:14.690
+using Emacs with its very, very limited rendering.
+
+00:01:16.320 --> 00:01:19.200
+And here's the project, chip8.el.
+
+00:01:19.200 --> 00:01:20.560
+It's pretty much finished.
+
+00:01:20.560 --> 00:01:24.000
+It clocks into under 1000 source lines of code.
+
+00:01:24.000 --> 00:01:26.159
+It supports the superchip 8 extensions.
+
+00:01:26.159 --> 00:01:27.280
+It runs at full speed.
+
+00:01:27.280 --> 00:01:29.600
+All games behave okay, as far as I'm concerned,
+
+00:01:29.600 --> 00:01:31.680
+and yeah, I'm pretty happy with it.
+
+00:01:31.680 --> 00:01:34.479
+It's very much the hello world of emulation,
+
+00:01:34.479 --> 00:01:40.880
+and I might, maybe, do some other emulation projects in the future.
+
+00:01:40.880 --> 00:01:43.360
+Now, for the section which is the longest:
+
+00:01:43.360 --> 00:01:45.439
+bunch of fun facts about chip8.el
+
+00:01:45.439 --> 00:01:49.200
+which I've learned during this project.
+
+00:01:49.200 --> 00:01:51.759
+So what the hell is chip8 anyway?
+
+00:01:51.759 --> 00:01:54.960
+First of all, unlike many other emulation game things,
+
+00:01:54.960 --> 00:01:56.799
+it's not a console, but a VM.
+
+00:01:56.799 --> 00:02:00.000
+It was designed for easy porting of home
+computer games.
+
+00:02:00.000 --> 00:02:02.320
+It wasn't terribly successful,
+
+00:02:02.320 --> 00:02:05.439
+but there's still a small community of enthusiasts writing games for it,
+
+00:02:05.439 --> 00:02:09.119
+and there are even a few demos.
+
+00:02:09.119 --> 00:02:11.039
+This VM has system specs.
+
+00:02:11.039 --> 00:02:14.720
+It has a very, very simple 8-bit cpu with 16 registers,
+
+00:02:14.720 --> 00:02:17.280
+and 36 fixed-size instructions.
+
+00:02:17.280 --> 00:02:19.680
+You have a whole 4 kilobyte of RAM.
+
+00:02:19.680 --> 00:02:22.080
+You have a stack with 16 return addresses.
+
+00:02:22.080 --> 00:02:25.760
+The resolution is 64 by 32 black/white pixels.
+
+00:02:25.760 --> 00:02:28.000
+Rendering is done by drawing sprites.
+
+00:02:28.000 --> 00:02:29.200
+These are drawn in XOR mode,
+
+00:02:29.200 --> 00:02:31.840
+meaning that if you draw a sprite and set a bit,
+
+00:02:31.840 --> 00:02:35.040
+it just flips over from black to white or white to black.
+
+00:02:35.040 --> 00:02:39.360
+For sound, you have a monotone buzzer that can just beep at one frequency.
+
+00:02:39.360 --> 00:02:43.120
+Most unusually, there's a hexadecimal keypad as input,
+
+00:02:43.120 --> 00:02:48.480
+so the keys are basically zero to nine and a to f.
+
+00:02:48.480 --> 00:02:50.720
+So how does this whole thing work?
+
+00:02:50.720 --> 00:02:52.400
+It runs at an unspecified speed.
+
+00:02:52.400 --> 00:02:53.040
+You'll probably have to do some fine-tuning
+
+00:02:53.040 --> 00:02:56.080
+to find the speed you're happy with.
+
+00:02:56.080 --> 00:02:58.080
+Sound and delay timers exist.
+
+00:02:58.080 --> 00:03:01.120
+They count down at 60fps down to 0.
+
+00:03:01.120 --> 00:03:05.120
+This is done so that you can play a sound at some specific time.
+
+00:03:05.120 --> 00:03:07.840
+The game itself is loaded with a fixed offset into RAM.
+
+00:03:07.840 --> 00:03:10.480
+The program counter is set to exactly that offset,
+
+00:03:10.480 --> 00:03:11.920
+and from there it enters the game loop
+
+00:03:11.920 --> 00:03:13.280
+where it decodes an instruction,
+
+00:03:13.280 --> 00:03:14.800
+executes it for the side effects,
+
+00:03:14.800 --> 00:03:18.130
+and just loops and does this ad infinitum.
+
+00:03:19.599 --> 00:03:22.720
+So the game loop was the first thing where we ran into problems.
+
+00:03:22.720 --> 00:03:25.120
+The usual game approach is to do stuff,
+
+00:03:25.120 --> 00:03:26.640
+figure out how long to wait,
+
+00:03:26.640 --> 00:03:29.280
+wait for exactly that much, and repeat.
+
+00:03:29.280 --> 00:03:31.680
+This doesn't work well in Emacs at all, because, well,
+
+00:03:31.680 --> 00:03:34.959
+user input, basically.
+
+00:03:34.959 --> 00:03:37.760
+Emacs is designed to just do whatever it needs to do
+
+00:03:37.760 --> 00:03:39.040
+whenever you enter user input
+
+00:03:39.040 --> 00:03:42.319
+instead of doing things at one specific time.
+
+00:03:42.319 --> 00:03:46.640
+If you try to do interruptable sleep, well, you get unpredictable behavior.
+
+00:03:46.640 --> 00:03:50.480
+For example, it can be the timer doesn't run at all at the next time
+
+00:03:50.480 --> 00:03:52.560
+because you've accidentally cancelled it.
+
+00:03:52.560 --> 00:03:55.120
+If you do uninterruptable sleep, it freezes instead ,
+
+00:03:55.120 --> 00:03:56.720
+which isn't what we want either.
+
+00:03:56.720 --> 00:04:00.560
+So I went for timers, which forced me to do inversion of control,
+
+00:04:00.560 --> 00:04:02.560
+meaning that I have to write code in the style
+
+00:04:02.560 --> 00:04:04.879
+where it just calls timer,
+
+00:04:04.879 --> 00:04:06.560
+and this allows this input to happen
+
+00:04:06.560 --> 00:04:11.040
+and for things to progress at roughly the speed I want to.
+
+00:04:11.040 --> 00:04:14.159
+So there's the timer function which is called at 60fps
+
+00:04:14.159 --> 00:04:17.359
+and I have to be very careful to not do too much in it.
+
+00:04:17.359 --> 00:04:21.305
+And, say, this function executes CPU cycles,
+
+00:04:21.305 --> 00:04:26.479
+decrement the sound/delay registers, and redraw the screen.
+
+00:04:26.479 --> 00:04:28.800
+So to map this whole system to Emacs Lisp,
+
+00:04:28.800 --> 00:04:31.199
+I've used just integers and vectors
+
+00:04:31.199 --> 00:04:33.120
+which contain even more integers.
+
+00:04:33.120 --> 00:04:35.040
+This is used for the RAM, registers,
+
+00:04:35.040 --> 00:04:37.040
+return stack, key state, screen,
+
+00:04:37.040 --> 00:04:38.508
+and so on and so forth.
+
+00:04:38.508 --> 00:04:41.520
+Basically, what you would do if you were writing C.
+
+00:04:41.520 --> 00:04:43.360
+All of this is stored in global variables.
+
+00:04:43.360 --> 00:04:45.600
+I'm not using any lists at all.
+
+00:04:45.600 --> 00:04:48.400
+As a side effect, there's no consing going on at all.
+
+00:04:48.400 --> 00:04:50.080
+There are no extra objects created
+
+00:04:50.080 --> 00:04:53.199
+which would trigger garbage collection processes.
+
+00:04:53.199 --> 00:04:55.600
+Getting this right was rather tricky, actually,
+
+00:04:55.600 --> 00:04:58.240
+and there were some hidden garbage collection problems
+
+00:04:58.240 --> 00:05:01.759
+which I had to resolve over time.
+
+00:05:01.759 --> 00:05:03.759
+So, decoding instructions.
+
+00:05:03.759 --> 00:05:06.800
+For this, you have to know that all instructions are two bytes long,
+
+00:05:06.800 --> 00:05:08.880
+and the arguments are encoded inside them.
+
+00:05:08.880 --> 00:05:11.440
+For example, the jump to address instruction
+
+00:05:11.440 --> 00:05:15.120
+is encoded as one and three hex digits.
+
+00:05:15.120 --> 00:05:18.400
+The type is extracted masking with #xF000
+
+00:05:18.400 --> 00:05:20.400
+and then shifting it by 12 bits.
+
+00:05:20.400 --> 00:05:23.520
+Mask means you perform the binary AND.
+
+00:05:23.520 --> 00:05:28.400
+You can do the same with the argument by masking with #0xFFF and no shift.
+
+00:05:28.400 --> 00:05:30.560
+If you do this long enough, you'll find common patterns.
+
+00:05:30.560 --> 00:05:32.639
+For example, addresses are always encoded like this
+
+00:05:32.639 --> 00:05:34.880
+using the last three nibbles.
+
+00:05:34.880 --> 00:05:36.160
+In the code, you'll find a big cond
+
+00:05:36.160 --> 00:05:40.070
+which dispatches on the type and executes it for the side effects.
+
+00:05:41.440 --> 00:05:45.919
+For testing, I've initially just executed the ROM until I've hit C-g,
+
+00:05:45.919 --> 00:05:49.039
+and then use the debug command to render the screen to a buffer.
+
+00:05:49.039 --> 00:05:53.199
+Later on, I found tiny ROMs that just display a static test screen,
+
+00:05:53.199 --> 00:05:57.280
+for example, logo, and looked whether it looked right.
+
+00:05:57.280 --> 00:05:58.800
+I added instructions as needed
+
+00:05:58.800 --> 00:06:00.720
+and went through more and more and more ROMs.
+
+00:06:00.720 --> 00:06:04.000
+And later I wrote a unit test suite as a safety net.
+
+00:06:04.000 --> 00:06:07.840
+This unit test suite, it just sets up an empty emulator state,
+
+00:06:07.840 --> 00:06:09.199
+executes some instructions,
+
+00:06:09.199 --> 00:06:14.880
+and then looks whether the expected side effects have happened.
+
+00:06:14.880 --> 00:06:18.319
+For debugging, I usually use edebug, but this was super ineffective,
+
+00:06:18.319 --> 00:06:21.600
+because, well, you don't really want to step through big cons
+
+00:06:21.600 --> 00:06:23.680
+doing side effects for every single cycle,
+
+00:06:23.680 --> 00:06:26.880
+when it can take like 100 cycles for things to happen.
+
+00:06:26.880 --> 00:06:29.680
+Therefore I've set up logging.
+
+00:06:29.680 --> 00:06:32.639
+Whenever I logged something and couldn't figure out the error,
+
+00:06:32.639 --> 00:06:37.039
+I compared my log output with the instrumented version of another emulator,
+
+00:06:37.039 --> 00:06:40.479
+and if the logs diverge, then I have figured out where the bug lies
+
+00:06:40.479 --> 00:06:42.720
+and could look deeper into it.
+
+00:06:42.720 --> 00:06:44.960
+Future project idea might be a chip 8 debugger,
+
+00:06:44.960 --> 00:06:49.440
+but I doubt I'll ever go into it.
+
+00:06:49.440 --> 00:06:51.759
+For analysis, I initially wrote a disassembler,
+
+00:06:51.759 --> 00:06:54.400
+which is a very simple thing but super tedious,
+
+00:06:54.400 --> 00:06:56.639
+especially if you wanted to add advanced functionality,
+
+00:06:56.639 --> 00:06:58.720
+for example, analysis or thinking of what part is data,
+
+00:06:58.720 --> 00:07:00.000
+what part is code.
+
+00:07:00.000 --> 00:07:03.360
+I had this great idea for using the radare 2 framework
+
+00:07:03.360 --> 00:07:06.479
+and adding analysis and disassembly plug-in for it.
+
+00:07:06.479 --> 00:07:08.400
+So I looked into this. Found, okay,
+
+00:07:08.400 --> 00:07:10.319
+you can write plugins in C
+
+00:07:10.319 --> 00:07:12.639
+but also in Python, so I wrote one in Python,
+
+00:07:12.639 --> 00:07:14.720
+and then discovered there's actually an existing one in core,
+
+00:07:14.720 --> 00:07:18.400
+which you have to enable explicitly by passing an extra argument.
+
+00:07:18.400 --> 00:07:21.680
+I've tried it and found it's not exactly as good as my own one,
+
+00:07:21.680 --> 00:07:24.160
+so I improved this one and submitted pull requests
+
+00:07:24.160 --> 00:07:26.610
+until it was at the same level.
+
+00:07:28.080 --> 00:07:30.720
+Rendering was the trickiest part of this whole thing,
+
+00:07:30.720 --> 00:07:34.319
+because, well, I decided against using a library.
+
+00:07:34.319 --> 00:07:37.120
+Not like there would have been any usable library for this.
+
+00:07:37.120 --> 00:07:40.880
+My usual approach of creating SVG files was too expensive.
+
+00:07:40.880 --> 00:07:45.120
+It just created too much garbage and took too long time.
+
+00:07:45.120 --> 00:07:47.360
+I then tried creating mutating strings.
+
+00:07:47.360 --> 00:07:52.479
+This was either too expensive, just like SVGs, or too complicated.
+
+00:07:52.479 --> 00:07:57.280
+I tried changing SVG tiles, which created gaps between the lines.
+
+00:07:57.280 --> 00:08:00.720
+Then I tried to create an xpm file which was backed by a bool vector
+
+00:08:00.720 --> 00:08:02.400
+and mutating this bool vector,
+
+00:08:02.400 --> 00:08:04.000
+but the image caching effect
+
+00:08:04.000 --> 00:08:06.479
+made it just every nth frame to appear,
+
+00:08:06.479 --> 00:08:08.879
+which wasn't good either.
+
+00:08:08.879 --> 00:08:11.440
+Then I had the idea to just use plain text
+
+00:08:11.440 --> 00:08:13.120
+and paint the individual characters
+
+00:08:13.120 --> 00:08:14.800
+with a different background color.
+
+00:08:14.800 --> 00:08:17.120
+This had perfect, perfect performance.
+
+00:08:17.120 --> 00:08:19.280
+There were many optimization attempts until I got there,
+
+00:08:19.280 --> 00:08:21.199
+and it was very, very stressful.
+
+00:08:21.199 --> 00:08:26.160
+I wasn't sure whether I would ever get to accept the performance at all.
+
+00:08:26.160 --> 00:08:28.560
+For sound you only need to do a single beep,
+
+00:08:28.560 --> 00:08:31.280
+so technically, it shouldn't be difficult to emulate it.
+
+00:08:31.280 --> 00:08:33.039
+However, doing this is hard because
+
+00:08:33.039 --> 00:08:37.200
+Emacs officially only supports synchronous playback of sounds.
+
+00:08:37.200 --> 00:08:41.360
+But there's also Emacs process, which you can launch in asynchronous way.
+
+00:08:41.360 --> 00:08:44.720
+So I looked into it and found that mplayer has a slave mode
+
+00:08:44.720 --> 00:08:48.640
+and mpv supports listing on the fifo for commands.
+
+00:08:48.640 --> 00:08:53.760
+So I've created a pipe, started a paused MPV in loop mode,
+
+00:08:53.760 --> 00:08:56.560
+and always send in pause and unpause command to the FIFO,
+
+00:08:56.560 --> 00:08:58.000
+and that way I could control
+
+00:08:58.000 --> 00:09:02.640
+when to start beeping and stop beeping.
+
+00:09:02.640 --> 00:09:04.160
+So yeah, that's it so far.
+
+00:09:04.160 --> 00:09:07.200
+It was a very educational experience.
+
+00:09:07.200 --> 00:09:10.320
+I have tried out a bunch of games which were,
+
+00:09:10.320 --> 00:09:14.320
+well, I almost say the worst ports of classic games I've ever tried.
+
+00:09:14.320 --> 00:09:15.680
+It wasn't terribly fun to play them,
+
+00:09:15.680 --> 00:09:18.555
+but was fun to improve the emulator
+
+00:09:18.555 --> 00:09:21.760
+until, well, things worked good enough.
+
+00:09:21.760 --> 00:09:25.120
+I've learned a lot about how computers work at this level,
+
+00:09:25.120 --> 00:09:28.880
+so, maybe, maybe I'll in the future make another emulator,
+
+00:09:28.880 --> 00:09:34.000
+but I'm not sure whether anything more advanced, like an Intel 8080 emulator,
+
+00:09:34.000 --> 00:09:36.560
+will actually run in Emacs fast enough,
+
+00:09:36.560 --> 00:09:37.839
+but it's still an interesting idea,
+
+00:09:37.839 --> 00:09:40.800
+because then you could actually have an OS inside Emacs
+
+00:09:40.800 --> 00:09:43.120
+and fulfill that one specific meme.
+
+00:09:43.120 --> 00:09:45.440
+But if I try to do most serious stuff,
+
+00:09:45.440 --> 00:09:47.040
+I'll probably use Chicken Scheme,
+
+00:09:47.040 --> 00:09:49.920
+which is my preferred language for serious projects,
+
+00:09:49.920 --> 00:09:53.279
+and write a NES game emulator.
+
+00:09:53.279 --> 00:09:57.839
+And that's it. Thank you.
diff --git a/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt b/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt
new file mode 100644
index 00000000..24c1910c
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt
@@ -0,0 +1,3187 @@
+WEBVTT
+
+00:00:08.559 --> 00:00:16.074
+CORWIN: Okay. So I'm gonna start with my demo Emacs here.
+
+00:00:16.074 --> 00:00:18.000
+Erik, we're ready.
+
+00:00:18.000 --> 00:00:31.840
+AMIN: We are live.
+
+00:00:31.840 --> 00:00:35.440
+ERIK: Okay, so you're starting then.
+
+00:00:35.440 --> 00:00:39.200
+CORWIN: I guess I'll start right now. Here we go.
+
+00:00:39.200 --> 00:00:43.440
+So I'm a Windows user, as we talked about yesterday.
+
+00:00:43.440 --> 00:00:47.440
+I'm going to try to start Emacs for you now.
+
+00:00:47.440 --> 00:00:49.360
+I've got it pinned to this thing,
+
+00:00:49.360 --> 00:00:52.879
+but mostly what I actually do
+
+00:00:52.879 --> 00:00:56.320
+is grab a file explorer and head to my desktop
+
+00:00:56.320 --> 00:01:00.559
+where I have all sorts of Emacs.
+
+00:01:00.559 --> 00:01:10.840
+Erik, can you make sure that your VLC is muted?
+
+00:01:10.840 --> 00:01:39.360
+ERIK: Okay, give me a second, please.
+
+00:01:39.360 --> 00:01:41.920
+CORWIN: I do. Okay. All right.
+
+00:01:41.920 --> 00:01:44.560
+We should be working again now. My apologies for that.
+
+00:01:44.560 --> 00:01:47.360
+All right. Handling technical problems in real-time
+
+00:01:47.360 --> 00:01:49.600
+is what Emacs is all about.
+
+00:01:49.600 --> 00:01:52.799
+As we're coding, we're constantly making errors, and fixing them,
+
+00:01:52.799 --> 00:01:54.880
+and learning from the kinds of errors that we make,
+
+00:01:54.880 --> 00:01:57.759
+and adjusting the editor to be easier to use.
+
+00:01:57.759 --> 00:02:02.640
+So today we'll try to build on some of the ideas we introduced yesterday
+
+00:02:02.640 --> 00:02:07.280
+around how a community can help us learn Emacs faster,
+
+00:02:07.280 --> 00:02:12.160
+and how we can think broadly about the people in our team
+
+00:02:12.160 --> 00:02:15.920
+when we decide how what kind of Emacs configuration
+
+00:02:15.920 --> 00:02:18.000
+we're going to have going for our project.
+
+00:02:18.000 --> 00:02:21.120
+So I'm just going to fire up my normal Emacs config now,
+
+00:02:21.120 --> 00:02:24.720
+so that we get hopefully a nice pretty demo
+
+00:02:24.720 --> 00:02:28.080
+or at least some slides.
+
+00:02:28.080 --> 00:02:30.720
+For safety, we're going to avoid the server,
+
+00:02:30.720 --> 00:02:33.360
+because I hate it when it crashes.
+
+00:02:33.360 --> 00:02:41.120
+It's a little less stable under Windows, I think.
+
+00:02:41.120 --> 00:02:43.200
+And well, while this starts up,
+
+00:02:43.200 --> 00:02:44.800
+I'll just briefly introduce
+
+00:02:44.800 --> 00:02:47.680
+my lifelong friend Erik Elmshauser
+
+00:02:47.680 --> 00:02:50.400
+who's hanging in the wings and waiting impatiently
+
+00:02:50.400 --> 00:02:54.400
+for us to be able to start our slides.
+
+00:02:54.400 --> 00:02:58.560
+ERIK: Hello, everybody. I'm Erik.
+
+00:02:58.560 --> 00:03:03.200
+CORWIN: So you've heard plenty from me already this conference,
+
+00:03:03.200 --> 00:03:09.120
+I suppose, so I'm just going to...
+
+00:03:09.120 --> 00:03:10.560
+So Erik and I have worked things out
+
+00:03:10.560 --> 00:03:12.400
+so that he'll do most of the talking today.
+
+00:03:12.400 --> 00:03:14.159
+I'll drive us through some code parts,
+
+00:03:14.159 --> 00:03:16.159
+but the hope is that we'll just focus
+
+00:03:16.159 --> 00:03:17.599
+a little more on the game.
+
+00:03:17.599 --> 00:03:19.360
+If you have questions about the game at all,
+
+00:03:19.360 --> 00:03:28.480
+please don't hesitate to ask those as well as your Emacs questions.
+
+00:03:28.480 --> 00:03:30.840
+I think we're starting out.
+
+00:03:30.840 --> 00:03:41.200
+Welcome. Let's cut away here so we can show some faces.
+
+00:03:41.200 --> 00:03:43.920
+I lost you, Erik.
+
+00:03:43.920 --> 00:03:45.040
+ERIK: Why would you do that?
+
+00:03:45.040 --> 00:03:48.319
+CORWIN: There he is.
+
+00:03:48.319 --> 00:03:50.000
+Let's just do one more thing
+
+00:03:50.000 --> 00:03:53.280
+because that's just kind of offensive.
+
+00:03:53.280 --> 00:03:55.439
+I'm going to kill off that cute wallpaper
+
+00:03:55.439 --> 00:03:59.360
+we all were playing with yesterday,
+
+00:03:59.360 --> 00:04:02.640
+although that's not so bad anymore.
+
+00:04:02.640 --> 00:04:04.480
+Oh, that's terrible. It's got to come back.
+
+00:04:04.480 --> 00:04:11.120
+I'm sorry, everybody.
+
+00:04:11.120 --> 00:04:16.720
+Oh my dear. All right.
+
+00:04:16.720 --> 00:04:25.040
+We just opened Emacs, so I have to open my slideshow,
+
+00:04:25.040 --> 00:04:28.479
+and there we are.
+
+00:04:28.479 --> 00:04:32.560
+Okay, Erik, I think I'm about as ready as I get.
+
+00:04:32.560 --> 00:04:35.120
+ERIK: Cool. Well, let's begin here.
+
+00:04:35.120 --> 00:04:37.840
+Welcome to the dungeon, everybody.
+
+00:04:37.840 --> 00:04:38.320
+As you're aware, I'm Erik and this is Corwin,
+
+00:04:38.320 --> 00:04:43.040
+and this is the Dungeon project that we've been working on
+
+00:04:43.040 --> 00:04:45.120
+for about a year now.
+
+00:04:45.120 --> 00:04:52.000
+The Dungeon game is based on
+
+00:04:52.000 --> 00:04:53.360
+a tradition of gaming
+
+00:04:53.360 --> 00:04:55.520
+that came out of the University of Minnesota
+
+00:04:55.520 --> 00:04:57.520
+back in the 1950s,
+
+00:04:57.520 --> 00:05:00.320
+as far as we can tell.
+
+00:05:00.320 --> 00:05:03.360
+It is a predecessor, an ancestor of
+
+00:05:03.360 --> 00:05:05.199
+most of the commercial role-playing games
+
+00:05:05.199 --> 00:05:07.919
+that you have heard of or maybe tried out
+
+00:05:07.919 --> 00:05:11.919
+from various stores and friends, what have you.
+
+00:05:11.919 --> 00:05:14.800
+So one of the first things we want to talk about is:
+
+00:05:14.800 --> 00:05:17.039
+What is it that sets Dungeon apart?
+
+00:05:17.039 --> 00:05:19.680
+why is it... what is it about this game
+
+00:05:19.680 --> 00:05:22.479
+that makes us want to continue bringing it forward,
+
+00:05:22.479 --> 00:05:26.479
+when there are so many games already commercially available
+
+00:05:26.479 --> 00:05:28.479
+that are descended from it?
+
+00:05:28.479 --> 00:05:34.160
+Dungeon is kind of a simpler game.
+
+00:05:34.160 --> 00:05:40.400
+Like we don't do a lot of the mechanics that you think about.
+
+00:05:40.400 --> 00:05:44.560
+What is it that defines your character? Stats and skills and attributes?
+
+00:05:44.560 --> 00:05:48.080
+We just don't deal with it in Dungeon.
+
+00:05:48.080 --> 00:05:54.720
+But Dungeon... The simplicity of it allows it
+
+00:05:54.720 --> 00:06:01.840
+to be a vehicle for creativity more than just a numbers project.
+
+00:06:01.840 --> 00:06:04.240
+So that's kind of why we like it,
+
+00:06:04.240 --> 00:06:08.533
+but also it makes it a tricky problem
+
+00:06:08.533 --> 00:06:12.567
+when it comes to writing a computer game to mimic
+
+00:06:12.567 --> 00:06:16.400
+the game that we played with paper and dice around a table.
+
+00:06:16.400 --> 00:06:24.000
+CORWIN: So when we look at it as kind of a technology problem... Whoops...
+
+00:06:24.000 --> 00:06:27.919
+When we try to... Heyo. I'm sorry. I got ahead of us.
+
+00:06:27.919 --> 00:06:32.160
+I'll cut back.
+
+00:06:32.160 --> 00:06:35.520
+ERIK: I thought we were doing fine
+
+00:06:35.520 --> 00:06:40.319
+CORWIN: Okay, well then. I'll just... yeah. Either way.
+
+00:06:40.319 --> 00:06:43.360
+ERIK: So we've been friends since...
+
+00:06:43.360 --> 00:06:46.479
+It was our parents' idea, basically.
+
+00:06:46.479 --> 00:06:53.120
+Our parents are friends, and we learned this game from our parents.
+
+00:06:53.120 --> 00:07:02.479
+Specifically, I learned it from Corwin when I was 7 or 8.
+
+00:07:02.479 --> 00:07:06.400
+CORWIN: Yeah, that's where... that's my cue in, right?
+
+00:07:09.599 --> 00:07:14.560
+My folks and Erik's folks were really tight.
+
+00:07:14.560 --> 00:07:17.360
+They used to run science fiction conventions together.
+
+00:07:17.360 --> 00:07:22.400
+Our play featured imaginative role-playing.
+
+00:07:22.400 --> 00:07:28.639
+Usually we would find ways to work the computers into things.
+
+00:07:28.639 --> 00:07:35.000
+I don't know. I hardly have memories that precede Erik.
+
+00:07:35.000 --> 00:07:39.199
+ERIK: Also, it turns out we're both kind of nerds.
+
+00:07:39.199 --> 00:07:46.560
+I learned to program from my mother back in the early 80s,
+
+00:07:46.560 --> 00:07:49.039
+and for as long as we've been friends,
+
+00:07:49.039 --> 00:07:52.800
+basically we've also been into playing with computers.
+
+00:07:52.800 --> 00:07:56.720
+Over the years, we've worked with many, many different systems.
+
+00:07:56.720 --> 00:07:59.700
+We've played with Ataris, Apples, and Amigas
+
+00:07:59.700 --> 00:08:03.567
+for a long time before either of us got PC clones
+
+00:08:03.567 --> 00:08:07.967
+and Windows or DOS or Linux or any of those systems.
+
+00:08:07.967 --> 00:08:11.360
+We went through all of them, and kinda liked them.
+
+00:08:11.360 --> 00:08:17.919
+So we also always thought, like,
+
+00:08:17.919 --> 00:08:22.639
+how is it that we can use these cool computers that we're into
+
+00:08:22.639 --> 00:08:25.967
+to build this Dungeon game that we're into?
+
+00:08:25.967 --> 00:08:28.319
+'Cause that's what you do, right?
+
+00:08:28.319 --> 00:08:32.080
+CORWIN: That's certainly what we did.
+
+00:08:32.080 --> 00:08:35.039
+So after some decades of bike-shedding
+
+00:08:35.039 --> 00:08:39.039
+where we saw really a lot of changes in the technology field,
+
+00:08:39.039 --> 00:08:40.159
+cell phones were invented,
+
+00:08:40.159 --> 00:08:41.919
+smartphones were invented...
+
+00:08:41.919 --> 00:08:45.360
+Text messaging in particular had a dramatic impact
+
+00:08:45.360 --> 00:08:49.519
+on what we thought Dungeon would have to be able to do to be more fun
+
+00:08:49.519 --> 00:08:54.720
+than scribbling in graph paper.
+
+00:08:54.720 --> 00:08:58.480
+Yeah, either way.
+
+00:08:58.480 --> 00:09:01.519
+ERIK: We've been using Linux since the mid 90s
+
+00:09:01.519 --> 00:09:06.160
+I don't remember exactly when I did my first Linux install,
+
+00:09:06.160 --> 00:09:11.200
+but I really liked it from the get-go,
+
+00:09:11.200 --> 00:09:17.267
+and I think it was shortly after I
+installed it on a 486,
+
+00:09:17.267 --> 00:09:18.900
+I went over to Corwin's house
+
+00:09:18.900 --> 00:09:23.360
+and we spent a couple of months screwing around with it.
+
+00:09:23.360 --> 00:09:28.800
+CORWIN: I'll add, I remember the day that I learned about the formation of GNU.
+
+00:09:28.800 --> 00:09:33.440
+It had a life. I mean, I read lots of licenses.
+
+00:09:33.440 --> 00:09:38.480
+I think a lot of us have written our own SWAG license code
+
+00:09:38.480 --> 00:09:42.080
+and I definitely credit the formation of GNU
+
+00:09:42.080 --> 00:09:48.640
+to my being interested in thinking about that.
+
+00:09:48.640 --> 00:09:50.720
+Right. I am working the slides here. Okay.
+
+00:09:50.720 --> 00:09:54.800
+Well. So yeah, this is your turn.
+
+00:09:54.800 --> 00:09:57.360
+I already mentioned Jeff yesterday,
+
+00:09:57.360 --> 00:10:00.399
+so your turn to take it for a few slides.
+
+00:10:00.399 --> 00:10:07.600
+ERIK: Along with learning Linux, we started learning the various tools
+
+00:10:07.600 --> 00:10:11.680
+that were available through the GNU free software movement.
+
+00:10:11.680 --> 00:10:16.560
+It didn't take very long before we got into using Emacs.
+
+00:10:16.560 --> 00:10:21.839
+When we were working as software developers back in the 90s,
+
+00:10:21.839 --> 00:10:25.200
+we both were using Emacs in an office environment
+
+00:10:25.200 --> 00:10:28.959
+with some other developers.
+
+00:10:28.959 --> 00:10:32.367
+It was obviously a very powerful tool,
+
+00:10:32.367 --> 00:10:40.560
+and we have really enjoyed using it for a couple of decades since then.
+
+00:10:40.560 --> 00:10:48.880
+CORWIN: I'm not going to go on at length about my love for Emacs here.
+
+00:10:48.880 --> 00:10:52.480
+So we put together a project.
+
+00:10:52.480 --> 00:10:54.033
+Each time we rehearse this,
+
+00:10:54.033 --> 00:10:56.320
+Erik introduces it with it's my story to tell,
+
+00:10:56.320 --> 00:10:58.000
+but since our flow is already to hell
+
+00:10:58.000 --> 00:11:00.880
+and we're just having a conversation with you today,
+
+00:11:00.880 --> 00:11:05.920
+I'll just jump in and say from a project standpoint,
+
+00:11:05.920 --> 00:11:08.160
+the project owes its inception
+
+00:11:08.160 --> 00:11:10.320
+to a tremendous number of people in fandom
+
+00:11:10.320 --> 00:11:15.680
+that encouraged us to just do crazy projects.
+
+00:11:15.680 --> 00:11:17.760
+In this case, to our friends
+
+00:11:17.760 --> 00:11:20.640
+that were hanging out with us on Discord all the time
+
+00:11:20.640 --> 00:11:22.560
+while we played different games.
+
+00:11:22.560 --> 00:11:25.200
+And through that, and while I was
+
+00:11:25.200 --> 00:11:26.640
+fooling with Emacs,
+
+00:11:26.640 --> 00:11:34.000
+generally other people played games,
+
+00:11:34.000 --> 00:11:35.519
+the pieces fell into place.
+
+00:11:35.519 --> 00:11:37.279
+We were all there, so we could talk about it,
+
+00:11:37.279 --> 00:11:39.760
+and the idea got exciting again.
+
+00:11:39.760 --> 00:11:41.920
+We started going back to all the places
+
+00:11:41.920 --> 00:11:44.160
+that we had had trouble with it in the past.
+
+00:11:44.160 --> 00:11:45.760
+It really did seem to add up.
+
+00:11:45.760 --> 00:11:48.880
+We built proof of concepts to do hard stuff quickly.
+
+00:11:48.880 --> 00:11:54.880
+I guess we'll probably head into that that area now.
+
+00:11:54.880 --> 00:11:59.300
+ERIK: This slide mentions: Why build a role-playing game in Emacs?
+
+00:11:59.300 --> 00:12:03.360
+I was watching the last presentation
+
+00:12:03.360 --> 00:12:08.167
+and there was a slide about all of the
+problems
+
+00:12:08.167 --> 00:12:10.333
+that Emacs poses for retro gaming,
+
+00:12:10.333 --> 00:12:14.100
+where it interrupts the game loops and
+it waits for user input.
+
+00:12:14.100 --> 00:12:17.667
+That was a whole list of reasons why
+
+00:12:17.667 --> 00:12:21.233
+Emacs actually does exactly what we want in our project
+
+00:12:21.233 --> 00:12:31.360
+and why Dungeon is a natural fit for Emacs.
+
+00:12:31.360 --> 00:12:36.480
+CORWIN: Hey there. Yeah, go ahead and continue.
+
+00:12:36.480 --> 00:12:38.639
+I just got a phone call, I think from Leo,
+
+00:12:38.639 --> 00:12:40.639
+so I'm going to mute.
+
+00:12:40.639 --> 00:12:47.279
+ERIK: So what we did in the project was basically
+
+00:12:47.279 --> 00:12:49.680
+come up with our minimum play-testable candidate.
+
+00:12:49.680 --> 00:12:50.959
+We listed all of the things
+
+00:12:50.959 --> 00:12:54.240
+that we need to be able to make the project do
+
+00:12:54.240 --> 00:12:59.519
+in order to recreate the Dungeon experience that we had
+
+00:12:59.519 --> 00:13:01.279
+with paper and dice sitting around a
+
+00:13:01.279 --> 00:13:05.600
+table when we were kids.
+
+00:13:02.160 --> 00:13:12.570
+And, I mean, we've, you know, it took a while for us to kind of
+
+00:13:12.570 --> 00:13:15.870
+tease apart the problem in a way where we could actually
+
+00:13:15.870 --> 00:13:19.370
+list out all of the features, like, what are the problems
+
+00:13:19.370 --> 00:13:22.160
+we have to solve and how do we solve them?
+
+00:13:27.160 --> 00:13:31.050
+So, creating any free software, any self-organizing free
+
+00:13:31.050 --> 00:13:34.740
+software project is challenging to start with, and we're
+
+00:13:34.740 --> 00:13:38.530
+generally people with a bunch of other responsibilities by
+
+00:13:38.530 --> 00:13:43.570
+the time we get to it. So, it's not just, hey, you know,
+
+00:13:43.570 --> 00:13:48.350
+the general herding cats, it's, you know, trying to make it
+
+00:13:48.350 --> 00:13:50.160
+a part of your life, too.
+
+00:13:52.160 --> 00:13:56.570
+That being kind of a, you know, challenging battle, we kind
+
+00:13:56.570 --> 00:14:00.580
+of aligned on some principles that we wanted to adhere to
+
+00:14:00.580 --> 00:14:04.160
+once we started taking the project seriously.
+
+00:14:04.160 --> 00:14:10.640
+Like, you know, particularly recognizing GNU in specific as
+
+00:14:10.640 --> 00:14:14.160
+we focus on giving back to the community.
+
+00:14:15.160 --> 00:14:19.830
+Taking what we learned as Perl programmers and, you know,
+
+00:14:19.830 --> 00:14:23.920
+bringing that spirit forward into our work and maybe
+
+00:14:23.920 --> 00:14:28.830
+specifically support, making sure that we can, you know,
+
+00:14:28.830 --> 00:14:34.160
+write functions for the game in Perl if we want to.
+
+00:14:35.160 --> 00:14:40.250
+And then to use the game as a vehicle to make people look
+
+00:14:40.250 --> 00:14:45.510
+beyond the typically open source – sorry, typically nom
+
+00:14:45.510 --> 00:14:50.290
+inally open source at best, generally pretty closed world of
+
+00:14:50.290 --> 00:14:52.160
+computer gaming.
+
+00:14:52.160 --> 00:14:55.260
+A lot of Windows users out there, a lot of non-free
+
+00:14:55.260 --> 00:14:58.670
+communication tools, and a lot of, you know, a lot of
+
+00:14:58.670 --> 00:15:02.160
+ground to cover from a free software perspective.
+
+00:15:03.160 --> 00:15:08.160
+So what can Emacs do from a gaming standpoint to open that up?
+
+00:15:08.160 --> 00:15:12.960
+And not to mention the hubris of the, you know, the two of
+
+00:15:12.960 --> 00:15:17.600
+us with a few friends basically deciding to take on what
+
+00:15:17.600 --> 00:15:20.160
+amounts to a huge project.
+
+00:15:20.160 --> 00:15:24.080
+You know, we're essentially a year in now and we haven't
+
+00:15:24.080 --> 00:15:29.160
+really gotten over halfway to our minimum play testable candidate.
+
+00:15:30.160 --> 00:15:34.160
+It's a work in progress. We've got a long road to go.
+
+00:15:34.160 --> 00:15:37.310
+There's at least 50 items on the things that we think are
+
+00:15:37.310 --> 00:15:40.390
+critical to be able to introduce it to my younger kids, for
+
+00:15:40.390 --> 00:15:41.160
+example.
+
+00:15:41.160 --> 00:15:48.650
+Okay, so we're in the accomplishments section. So we're
+
+00:15:48.650 --> 00:15:51.700
+supposed to be talking about the things that we have
+
+00:15:51.700 --> 00:15:54.160
+succeeded in doing in our first year.
+
+00:15:55.160 --> 00:15:59.580
+We have succeeded in working with data in org documents,
+
+00:15:59.580 --> 00:16:04.030
+using org mode tables to store the data that we're going to
+
+00:16:04.030 --> 00:16:07.160
+use in the various parts of our game.
+
+00:16:07.160 --> 00:16:14.440
+And we've had a lot of success with svg.el. It started with
+
+00:16:14.440 --> 00:16:18.130
+drawing maps and we have another talk about our mapping
+
+00:16:18.130 --> 00:16:20.160
+specifically coming up next.
+
+00:16:21.160 --> 00:16:25.160
+So we'll put off some of that discussion for a separate talk.
+
+00:16:25.160 --> 00:16:30.050
+But we've also succeeded in getting into a bunch of
+
+00:16:30.050 --> 00:16:36.770
+different elements of the game where we're, you know,
+
+00:16:36.770 --> 00:16:39.340
+making a lot of progress using this drawing engine we
+
+00:16:39.340 --> 00:16:43.360
+developed to also draw this other thing and also draw this
+
+00:16:43.360 --> 00:16:45.160
+other thing and also draw this other thing.
+
+00:16:46.160 --> 00:16:46.160
+And we kind of backed into, we've got this aesthetic
+
+00:16:46.161 --> 00:16:54.750
+and we're using it to draw interfaces for all of the different
+
+00:16:54.750 --> 00:16:56.160
+parts of the game.
+
+00:16:56.160 --> 00:17:08.160
+So let's talk a little bit about what works now.
+
+00:17:11.160 --> 00:17:15.330
+First of all, there's the mapping part that Erik mentioned
+
+00:17:15.330 --> 00:17:19.040
+and we'll jump here into, we'll start opening up some files
+
+00:17:19.040 --> 00:17:20.160
+and looking around.
+
+00:17:20.160 --> 00:17:25.060
+But then also later we'll fire up an IELM and look at some
+
+00:17:25.060 --> 00:17:28.160
+of the other proofs of concept.
+
+00:17:28.160 --> 00:17:31.350
+So hopefully we can pivot the second talk more toward the
+
+00:17:31.350 --> 00:17:34.520
+demos as we skip some of the interactive stuff that might
+
+00:17:34.520 --> 00:17:37.160
+be mentioned in the slides that we go by.
+
+00:17:37.160 --> 00:17:38.160
+Okay.
+
+00:17:38.160 --> 00:17:48.160
+So, maps, visual battleboard.
+
+00:17:48.160 --> 00:17:51.160
+The battleboard...
+
+00:17:51.160 --> 00:17:55.160
+I'm just going to skip it Erik, we'll hit it in the next one.
+
+00:17:55.160 --> 00:17:57.160
+Okay.
+
+00:17:57.160 --> 00:18:03.160
+Hang on.
+
+00:18:05.160 --> 00:18:07.660
+Okay, so I'm just going to go ahead and open up maps and
+
+00:18:07.660 --> 00:18:12.490
+let you talk from the SVG process itself, because that's
+
+00:18:12.490 --> 00:18:15.160
+the interesting part to me.
+
+00:18:15.160 --> 00:18:21.160
+Okay.
+
+00:18:22.160 --> 00:18:26.350
+Talk about the SVG process, like what do you think exactly
+
+00:18:26.350 --> 00:18:31.310
+we want to talk about? How we turn our data into an image
+
+00:18:31.310 --> 00:18:34.160
+or what are you hoping for?
+
+00:18:34.160 --> 00:18:40.140
+Yeah, so I mean did you want to talk more from the hand-d
+
+00:18:40.140 --> 00:18:43.160
+rawn SVG graphics at all?
+
+00:18:43.160 --> 00:18:48.160
+I thought we were going to save that stuff for the pathing talk.
+
+00:18:48.160 --> 00:18:49.160
+Okay, that sounds fine.
+
+00:18:49.160 --> 00:18:50.160
+But we can go into it right now if you want.
+
+00:18:50.160 --> 00:18:54.640
+Yeah, so we've got about 10 minutes before the turn where
+
+00:18:54.640 --> 00:18:58.470
+we thought we would first take any questions that are
+
+00:18:58.470 --> 00:19:00.160
+hanging out there.
+
+00:19:00.160 --> 00:19:04.160
+I unfortunately closed the Etherpad, but I can open it again real quick.
+
+00:19:04.160 --> 00:19:09.850
+Or you can jump into the pathing stuff now, or I can just
+
+00:19:09.850 --> 00:19:14.160
+throw open an IELM and we can start the demos.
+
+00:19:15.160 --> 00:19:20.600
+So let me invite Amin or Sacha back in, or Leo, if any of
+
+00:19:20.600 --> 00:19:23.350
+you want to join the conversation and make a suggestion as
+
+00:19:23.350 --> 00:19:27.160
+to how we balance between the remaining time.
+
+00:19:27.160 --> 00:19:30.300
+The rest of what we have left starts in on toward the
+
+00:19:30.300 --> 00:19:34.250
+technical, so especially if there would be questions about
+
+00:19:34.250 --> 00:19:37.160
+the game right now, that would be awesome.
+
+00:19:37.160 --> 00:19:42.160
+And I'm going to get seated again.
+
+00:19:44.160 --> 00:19:48.870
+I'm not sure if I talk over the stream, if you'll hear it,
+
+00:19:48.870 --> 00:19:57.160
+because I'm just watching your stream, but I can try writing on IRC.
+
+00:20:01.160 --> 00:20:06.140
+Sure, yeah, questions would be cool. Or, yeah, well Erik,
+
+00:20:06.140 --> 00:20:08.980
+why don't you just go ahead and start walking us through
+
+00:20:08.980 --> 00:20:12.000
+the hand drawn SVG stuff just a little bit, because I think
+
+00:20:12.000 --> 00:20:14.950
+if that isn't interesting to people, we can just preempt
+
+00:20:14.950 --> 00:20:16.160
+for a question.
+
+00:20:17.160 --> 00:20:23.010
+Okay, so historically when we decided to actually start
+
+00:20:23.010 --> 00:20:27.080
+writing code, one of the very first things we wanted to do
+
+00:20:27.080 --> 00:20:30.990
+was the maps, because initially it seemed like the maps
+
+00:20:30.990 --> 00:20:34.750
+were going to be one of the biggest challenges in terms of
+
+00:20:34.750 --> 00:20:37.160
+how do we get a text editor to draw pictures for us.
+
+00:20:40.160 --> 00:20:44.350
+So, we pretty quickly decided we wanted to work with SVGs
+
+00:20:44.350 --> 00:20:48.370
+because it allowed us to leverage the power of Emacs as a
+
+00:20:48.370 --> 00:20:53.680
+text editor and a text manipulator to write text graphics
+
+00:20:53.680 --> 00:20:56.160
+with the SVG format.
+
+00:20:56.160 --> 00:20:59.770
+So we did some SVG graphics by hand, we went in and just
+
+00:20:59.770 --> 00:21:03.620
+started hand coding things that looked visually like the
+
+00:21:03.620 --> 00:21:07.300
+maps we used to draw by hand on graph paper when we were,
+
+00:21:07.300 --> 00:21:10.160
+you know, sitting around the table.
+
+00:21:10.160 --> 00:21:13.160
+Yep, absolutely.
+
+00:21:13.160 --> 00:21:17.610
+What emerged from that is as we started working on some of
+
+00:21:17.610 --> 00:21:22.140
+these files, this particular image is a test of some 20
+
+00:21:22.140 --> 00:21:25.910
+wide water with some beaches around it and a special
+
+00:21:25.910 --> 00:21:29.160
+chamber kind of off to the side called a clapper.
+
+00:21:29.160 --> 00:21:32.960
+And this was the way we would code is by sketching by hand
+
+00:21:32.960 --> 00:21:36.940
+all of these things to look right. And then we would take
+
+00:21:36.940 --> 00:21:40.810
+that code and we noticed it became real repetitive as we
+
+00:21:40.810 --> 00:21:45.160
+would go like chunk of water chunk of water chunk of water.
+
+00:21:45.160 --> 00:21:48.860
+And we're like okay so what we really need is to define a
+
+00:21:48.860 --> 00:21:52.620
+set of, we call it tiles, but like you can think of it as
+
+00:21:52.620 --> 00:21:56.660
+rubber stamps where we write this graphics code, and then
+
+00:21:56.660 --> 00:22:01.160
+we're able to repeat it in different places around the map.
+
+00:22:01.160 --> 00:22:05.680
+You want to flip over to code view and show that or do we
+
+00:22:05.680 --> 00:22:09.160
+want to move into. Sure.
+
+00:22:09.160 --> 00:22:10.160
+Code view.
+
+00:22:10.160 --> 00:22:14.700
+So, you know, you can see just really obviously here the
+
+00:22:14.700 --> 00:22:19.240
+only thing that's changing from chunk of water to chunk of
+
+00:22:19.240 --> 00:22:22.160
+water is the x and y coordinates.
+
+00:22:22.160 --> 00:22:26.990
+And, you know, we can skip getting into the SVG directives
+
+00:22:26.990 --> 00:22:31.640
+and how all of the path statements actually work, but you
+
+00:22:31.640 --> 00:22:36.230
+can trust us, all of these D equals and there's m's and h's
+
+00:22:36.230 --> 00:22:41.160
+and V's that turns out to be horizontal lines and vertical
+
+00:22:41.160 --> 00:22:42.160
+lines and cursor moves
+
+00:22:42.160 --> 00:22:46.900
+kind of like turtle graphics if anyone remembers that far
+
+00:22:46.900 --> 00:22:50.910
+back, and we're picking up our pen and dropping it and
+
+00:22:50.910 --> 00:22:54.160
+drawing lines around on our map.
+
+00:22:54.160 --> 00:22:58.090
+Okay, so we do have a few questions if you want to take
+
+00:22:58.090 --> 00:23:01.160
+them now otherwise we can also jump in.
+
+00:23:01.160 --> 00:23:05.160
+Let's get them while they're fresh. Okay, sounds good.
+
+00:23:05.160 --> 00:23:08.540
+So we'll probably shift to question and answer mode for up
+
+00:23:08.540 --> 00:23:12.490
+to 15 minutes here. So if you do have questions, maybe
+
+00:23:12.490 --> 00:23:15.740
+stack rank, go ahead and sort the questions a little for us
+
+00:23:15.740 --> 00:23:18.880
+or comment on them to let us know which ones you want to
+
+00:23:18.880 --> 00:23:21.540
+see us get here if we start getting a little long winded or
+
+00:23:21.540 --> 00:23:23.160
+not just a long, we'll take direction.
+
+00:23:23.160 --> 00:23:26.160
+But thanks for your questions.
+
+00:23:26.160 --> 00:23:30.050
+I'd like to see a demo as well we'll look at that with the
+
+00:23:30.050 --> 00:23:33.160
+remaining time after this question block.
+
+00:23:33.160 --> 00:23:38.000
+More about what the game is okay sure. So let's let's take
+
+00:23:38.000 --> 00:23:42.510
+our one minute each swing at what the game is, you want to
+
+00:23:42.510 --> 00:23:45.160
+go first, I called weapons.
+
+00:23:45.160 --> 00:23:47.160
+Okay.
+
+00:23:47.160 --> 00:23:52.180
+Dungeon is like role playing games, but you don't really do
+
+00:23:52.180 --> 00:23:56.990
+role playing like the, for me the thing the core of being a
+
+00:23:56.990 --> 00:24:01.400
+role playing game is you take on the role of being your
+
+00:24:01.400 --> 00:24:06.500
+character and you play your character and dungeons not like
+
+00:24:06.500 --> 00:24:08.160
+that dungeon.
+
+00:24:08.160 --> 00:24:11.160
+You can play.
+
+00:24:11.160 --> 00:24:14.660
+So, the dungeon party always has eight characters in it.
+
+00:24:14.660 --> 00:24:17.890
+There's four in the front row and four in the back row and
+
+00:24:17.890 --> 00:24:22.160
+you march through the dungeon, fighting, whatever you encounter.
+
+00:24:22.160 --> 00:24:25.700
+And if there's one player you play all eight characters.
+
+00:24:25.700 --> 00:24:29.180
+And depending on how many players you have you split up the
+
+00:24:29.180 --> 00:24:33.160
+party in whatever way seems fair and equitable to everybody.
+
+00:24:33.160 --> 00:24:36.010
+And similarly I said the dungeon is kind of a simple game
+
+00:24:36.010 --> 00:24:38.720
+like there's only three races and there's only three
+
+00:24:38.720 --> 00:24:42.160
+classes, all of your characters are either human elf dwarf.
+
+00:24:42.160 --> 00:24:45.680
+They're all a warrior, a priest or a wizard, and all of
+
+00:24:45.680 --> 00:24:49.400
+these characters have, you know, special properties and
+
+00:24:49.400 --> 00:24:52.820
+special talents, that is why they come together in this
+
+00:24:52.820 --> 00:24:54.160
+party of eight.
+
+00:24:54.160 --> 00:24:57.730
+So essentially dungeon is a game about making up all of
+
+00:24:57.730 --> 00:25:01.530
+these eight characters and stomping through the dungeon
+
+00:25:01.530 --> 00:25:04.160
+killing things taking their stuff.
+
+00:25:04.160 --> 00:25:08.120
+Well you're way over but I don't know how much I have to
+
+00:25:08.120 --> 00:25:12.160
+add to that. I will just add that if, if you're.
+
+00:25:12.160 --> 00:25:15.570
+If one's passion as a dungeon master is killing player
+
+00:25:15.570 --> 00:25:19.210
+characters this game is meant for you. You don't have to
+
+00:25:19.210 --> 00:25:23.050
+build your game like that. But that's definitely a thing
+
+00:25:23.050 --> 00:25:25.160
+that people do with this game.
+
+00:25:25.160 --> 00:25:28.430
+And then as Erik said, it just encourages you to put your
+
+00:25:28.430 --> 00:25:32.160
+creativity on the table to bring all the different elements.
+
+00:25:32.160 --> 00:25:35.830
+Hopefully, this may be clear in our slides since we were a
+
+00:25:35.830 --> 00:25:39.430
+little fumbling for the first few minutes of the talk
+
+00:25:39.431 --> 00:25:44.160
+but there's also a kind of a player's guide that I started a few years ago.
+
+00:25:44.160 --> 00:25:47.950
+That's not super complete, but does cover some
+
+00:25:47.950 --> 00:25:52.160
+of the high level basics of the game that Erik's been talking from.
+
+00:25:52.160 --> 00:25:55.800
+And I would add that some of the things that you know some
+
+00:25:55.800 --> 00:25:58.890
+of what makes dungeon great is that there's a lot of
+
+00:25:58.890 --> 00:26:02.950
+mystery about it, like the player's handbook doesn't tell
+
+00:26:02.950 --> 00:26:07.020
+you all of the rules, or like any really mystery and like
+
+00:26:07.020 --> 00:26:09.160
+there's mazes and there's puzzles,
+
+00:26:09.160 --> 00:26:12.650
+and you have to figure out how things work, and like we've
+
+00:26:12.650 --> 00:26:16.020
+got all of these treasure items in there that could help
+
+00:26:16.020 --> 00:26:20.160
+you deal with a particular monster if it occurs to you to use it.
+
+00:26:20.160 --> 00:26:24.160
+And, you know, like that. There's a lot of.
+
+00:26:24.160 --> 00:26:27.450
+You don't know what's going on you're dropped in the middle
+
+00:26:27.450 --> 00:26:30.680
+of this situation and you have to try and survive and level
+
+00:26:30.680 --> 00:26:33.750
+up and figure it out. And if you succeed in doing that for
+
+00:26:33.750 --> 00:26:36.520
+a long enough eventually you start realizing that there are
+
+00:26:36.520 --> 00:26:40.890
+big picture puzzles that there are, you know, there is more to this than just
+
+00:26:40.890 --> 00:26:43.160
+killing things and taking their stuff.
+
+00:26:43.160 --> 00:26:46.190
+And that's where the joy of designing these games comes in
+
+00:26:46.190 --> 00:26:48.890
+for me is like designing the mazes and designing the
+
+00:26:48.890 --> 00:26:51.890
+puzzles and like, oh yeah and then they're going to come
+
+00:26:51.890 --> 00:26:51.890
+out of this room and you know what they're going to do.
+
+00:26:51.891 --> 00:26:57.160
+They're wanting to go that way.
+
+00:26:57.160 --> 00:27:00.160
+So I'm going to put the trap right there.
+
+00:27:00.160 --> 00:27:00.160
+And I walk right into it every time.
+
+00:27:00.161 --> 00:27:00.161
+And then when the party does get in your map
+
+00:27:00.162 --> 00:27:00.162
+and they do exactly what you thought and they hit the trap
+
+00:27:00.163 --> 00:27:07.820
+it's just really satisfying
+
+00:27:07.820 --> 00:27:07.820
+to watch the look on their little faces
+
+00:27:07.821 --> 00:27:12.160
+as they squirm and struggle to stay alive.
+
+00:27:12.160 --> 00:27:14.580
+Yeah, that's, that's what I was trying to get at. Thanks.
+
+00:27:14.580 --> 00:27:18.160
+All right, that was perfect for me. All right.
+
+00:27:18.160 --> 00:27:21.360
+So so highlight your question for me if you think it's
+
+00:27:21.360 --> 00:27:24.800
+important we grab it here before we jump into demos,
+
+00:27:24.801 --> 00:27:28.160
+but otherwise I think it's time to try running some code.
+
+00:27:28.160 --> 00:27:30.160
+Let's say.
+
+00:27:30.160 --> 00:27:37.160
+Okay, I say do it. Okay, so you less less camera more more emacs now.
+
+00:27:37.160 --> 00:27:40.380
+And hopefully I could find the right emacs the right
+
+00:27:40.380 --> 00:27:43.160
+desktop. All right, there we are.
+
+00:27:43.160 --> 00:27:49.160
+So we'll try to fire up
+
+00:27:49.160 --> 00:27:59.160
+a command right now. And I usually like to do the full path to emacs.
+
+00:27:59.160 --> 00:28:07.160
+When I'm going to run it under minus q.
+
+00:28:07.160 --> 00:28:13.160
+All right.
+
+00:28:13.160 --> 00:28:17.160
+Let's have some IELM.
+
+00:28:17.160 --> 00:28:23.270
+All right, and then I'm also going to do a load file on the
+
+00:28:23.270 --> 00:28:29.790
+net script that you can find in the repository in the emacs
+
+00:28:29.790 --> 00:28:36.160
+user and it's init scripts
+
+00:28:36.160 --> 00:28:41.160
+users folder
+
+00:28:41.160 --> 00:28:48.160
+nice.
+
+00:28:48.160 --> 00:28:51.530
+And it's called init-dm because that happened to fit with
+
+00:28:51.531 --> 00:28:54.160
+my naming scheme, potentially terrible.
+
+00:28:54.160 --> 00:28:54.160
+All right, and with that loaded in theory some very basic stuff will work
+
+00:28:54.161 --> 00:28:54.161
+even without us doing anything in IELM
+
+00:28:54.162 --> 00:29:05.870
+so I think the last thing Erik was talking about
+
+00:29:05.871 --> 00:29:07.160
+was the SVG code behind the maps.
+
+00:29:07.160 --> 00:29:11.800
+There as kind of the technical thread so we'll just fire
+
+00:29:11.800 --> 00:29:15.160
+open the maps, pick a dungeon level.
+
+00:29:15.160 --> 00:29:17.160
+Let's pick a pretty one.
+
+00:29:17.160 --> 00:29:19.160
+Okay, if I show this.
+
+00:29:19.160 --> 00:29:23.160
+Yeah, whatever.
+
+00:29:23.160 --> 00:29:27.160
+Is that the surface. Yeah.
+
+00:29:27.160 --> 00:29:32.740
+And let's scale it here I think if I recall that fun like
+
+00:29:32.740 --> 00:29:36.820
+once, once we got the engine up and running a little bit.
+
+00:29:36.820 --> 00:29:40.870
+We decided to do some experimentation about seeing
+
+00:29:40.871 --> 00:29:47.160
+what we could do to push the limits of our tile engine.
+
+00:29:47.160 --> 00:29:54.450
+So we more or less on the surface map, I basically started
+
+00:29:54.450 --> 00:29:54.450
+with almost no tiles from below like the water
+
+00:29:54.451 --> 00:30:01.370
+and the beaches and the general store and the stairs were existing tiles
+
+00:30:01.371 --> 00:30:04.730
+but then we were like this is going to be surface maps.
+
+00:30:04.731 --> 00:30:07.160
+We're outdoors so I want hills
+
+00:30:07.160 --> 00:30:11.150
+and I want trees, and I want grass, and it took a little
+
+00:30:11.150 --> 00:30:15.430
+while playing with SVG to come up with some acceptable code,
+
+00:30:15.430 --> 00:30:19.610
+but once the like the grass gets tiled out, it kind of,
+
+00:30:19.610 --> 00:30:24.510
+you know, gives the illusion of grass, and, you know, these
+
+00:30:24.510 --> 00:30:25.160
+are all in my estimation
+
+00:30:25.160 --> 00:30:29.970
+of crude graphics, but we're at the proof of concept stage,
+
+00:30:29.970 --> 00:30:34.130
+and it definitely proves that we can use our graphics
+
+00:30:34.130 --> 00:30:38.490
+engine to decide what we want our maps to look like, and
+
+00:30:38.490 --> 00:30:42.970
+real quickly compose new map tiles and stamp out a bunch of
+
+00:30:42.970 --> 00:30:44.160
+new maps.
+
+00:30:44.160 --> 00:30:48.050
+So now I'll show off one of the other things. So the next
+
+00:30:48.050 --> 00:30:51.680
+thing we did once we once we had the maps doing, and we
+
+00:30:51.680 --> 00:30:56.040
+haven't gotten into the features of the maps we can we can
+
+00:30:56.040 --> 00:30:59.200
+appoint time to that or not, but there are a number of
+
+00:30:59.200 --> 00:31:01.160
+features there that we can look at.
+
+00:31:01.160 --> 00:31:06.310
+The, we then wanted to try to see if that could make other
+
+00:31:06.310 --> 00:31:11.550
+interfaces more appealing so we built stuff like, that's
+
+00:31:11.550 --> 00:31:14.160
+going to be the map again.
+
+00:31:14.160 --> 00:31:18.580
+I'll just run it here through I am so it's more obvious
+
+00:31:18.580 --> 00:31:20.160
+what I'm doing.
+
+00:31:20.160 --> 00:31:23.160
+So let's look next to the character sheet.
+
+00:31:23.160 --> 00:31:27.160
+Oops.
+
+00:31:27.160 --> 00:31:33.160
+And alt P doesn't work. Okay.
+
+00:31:33.160 --> 00:31:35.160
+That's a bummer.
+
+00:31:35.160 --> 00:31:38.160
+That is not auto loaded.
+
+00:31:38.160 --> 00:31:41.120
+So this, this project is a bit of a mess right now, y'all,
+
+00:31:41.120 --> 00:31:43.800
+it does some stuff that's really exciting to us but the
+
+00:31:43.800 --> 00:31:46.560
+code is terrible and we need all the help we can get being
+
+00:31:46.560 --> 00:31:49.160
+told what our problems are and how to fix them.
+
+00:31:49.160 --> 00:31:53.160
+So that is if you take nothing away from this talk.
+
+00:31:53.160 --> 00:32:00.160
+Take away from it that we could use your help.
+
+00:32:00.160 --> 00:32:03.692
+Yeah, that doubles back to when we were talking about
+
+00:32:03.693 --> 00:32:07.800
+Larry Wall's cardinal virtues of programming like we definitely
+
+00:32:07.800 --> 00:32:11.160
+took on some hubris, thinking we could do this.
+
+00:32:11.160 --> 00:32:14.300
+We might not be wrong, but we could do it easier with more
+
+00:32:14.300 --> 00:32:18.160
+hands, you know, many hands make light work. All right.
+
+00:32:18.160 --> 00:32:21.160
+I'll bite.
+
+00:32:21.160 --> 00:32:24.580
+Yeah, and the character she won't load for us today I had
+
+00:32:24.580 --> 00:32:27.880
+some problems with my version control I had to revert my
+
+00:32:27.880 --> 00:32:31.290
+thing I threw all my local changes in a stash and it's it's
+
+00:32:31.290 --> 00:32:35.160
+a terrible mess let's look at stuff I tested already today.
+
+00:32:35.160 --> 00:32:40.160
+Before you got the battle board available.
+
+00:32:40.160 --> 00:32:42.160
+Let's find out.
+
+00:32:42.160 --> 00:32:46.160
+First of all, the library.
+
+00:32:46.160 --> 00:32:57.160
+In fact, actually, your basic require should work.
+
+00:32:57.160 --> 00:32:59.160
+No.
+
+00:32:59.160 --> 00:33:03.490
+You can try a load library. You know what, let's, I'm just
+
+00:33:03.490 --> 00:33:07.350
+going to go ahead and give it to you as a lab beast, since
+
+00:33:07.350 --> 00:33:10.160
+that's probably more fun to watch.
+
+00:33:10.160 --> 00:33:16.570
+So we'll take it from my own and this is more likely to be
+
+00:33:16.570 --> 00:33:17.160
+healthy.
+
+00:33:17.160 --> 00:33:19.160
+Since only some of the time.
+
+00:33:19.160 --> 00:33:25.160
+First we have to control x, all the IDM.
+
+00:33:25.160 --> 00:33:30.360
+All right, and having then loaded the net control you have
+
+00:33:30.360 --> 00:33:35.550
+nine should give me the maps, and we can verify things work
+
+00:33:35.550 --> 00:33:39.160
+in a basic way just by changing level.
+
+00:33:39.160 --> 00:33:44.160
+Let's look at something else.
+
+00:33:44.160 --> 00:33:49.380
+I mentioned, there were a number of bindings, show them
+
+00:33:49.380 --> 00:33:50.160
+briefly.
+
+00:33:50.160 --> 00:33:55.820
+We wrote our own functions to handle movement. Some of
+
+00:33:55.820 --> 00:34:00.872
+those in SVG dot el the left, left and right movements
+
+00:34:00.873 --> 00:34:07.160
+didn't seem to work quite quite likely coding, of course.
+
+00:34:07.160 --> 00:34:10.160
+Um, all right, enough.
+
+00:34:10.160 --> 00:34:13.160
+So let's, let's see if battle board works now.
+
+00:34:13.160 --> 00:34:16.160
+I really thought that was on F7.
+
+00:34:16.160 --> 00:34:19.160
+Up that's the character sheet suite.
+
+00:34:19.160 --> 00:34:25.160
+Okay, how to use your bindings.
+
+00:34:25.160 --> 00:34:28.160
+So that looks a little better.
+
+00:34:28.160 --> 00:34:34.160
+So let's talk about the character sheet.
+
+00:34:34.160 --> 00:34:36.160
+Yeah.
+
+00:34:36.160 --> 00:34:40.570
+So the character sheet was our first big repurposing of the
+
+00:34:40.570 --> 00:34:45.160
+engine that we couldn't do the battle board program that.
+
+00:34:45.160 --> 00:34:54.160
+Let's see if that runs now to.
+
+00:34:54.160 --> 00:35:01.160
+It's not interactive if it does.
+
+00:35:01.160 --> 00:35:05.160
+Good.
+
+00:35:05.160 --> 00:35:09.160
+So,
+
+00:35:09.160 --> 00:35:12.360
+try smex guess? No joy. All right, I'm not sure what's
+
+00:35:12.360 --> 00:35:14.160
+up with the battle board Erik.
+
+00:35:14.160 --> 00:35:17.190
+We haven't messed with that one for a while in fact we had
+
+00:35:17.190 --> 00:35:20.270
+discussed using its code as an example so maybe we'll debug
+
+00:35:20.270 --> 00:35:21.160
+it with you.
+
+00:35:21.160 --> 00:35:24.160
+I'll certainly check for questions first.
+
+00:35:24.160 --> 00:35:29.740
+Um, the. So the character sheet which is not scaling
+
+00:35:29.740 --> 00:35:31.160
+ideally here.
+
+00:35:31.160 --> 00:35:36.160
+See if reloading it does anything.
+
+00:35:36.160 --> 00:35:37.160
+Nope.
+
+00:35:37.160 --> 00:35:40.660
+As far as I can tell, assuming you don't have this
+
+00:35:40.660 --> 00:35:43.160
+implemented character sheet.
+
+00:35:43.160 --> 00:35:49.800
+That's right, there's everything in scale, it take in order
+
+00:35:49.800 --> 00:35:54.160
+to get what you were looking at there.
+
+00:35:54.160 --> 00:35:56.160
+All right.
+
+00:35:56.160 --> 00:36:03.201
+This, this whole thing is hard coded, basically to the
+
+00:36:03.202 --> 00:36:08.160
+gills, except for things like this.
+
+00:36:08.160 --> 00:36:11.780
+This program represents a re implementation of the drawing
+
+00:36:11.780 --> 00:36:17.420
+engine using all of the same things. Let's see that
+
+00:36:17.420 --> 00:36:20.160
+selected so
+
+00:36:20.160 --> 00:36:23.160
+we'll just try bringing up a map again.
+
+00:36:23.160 --> 00:36:27.180
+There's one and you'll notice DM map doesn't know anything
+
+00:36:27.180 --> 00:36:31.240
+about the new draw engine, and there are a couple of places
+
+00:36:31.240 --> 00:36:35.160
+where the new draw engine is still hooked in to the.
+
+00:36:35.160 --> 00:36:38.250
+For example, particularly the sizing of the graph paper
+
+00:36:38.250 --> 00:36:43.160
+background. So I've started the work in DM draw.
+
+00:36:44.160 --> 00:36:47.950
+Of trying to show how exactly we did this removing the, how
+
+00:36:47.950 --> 00:36:51.040
+did we get data out of org mode that I talked about
+
+00:36:51.040 --> 00:36:56.410
+yesterday with our ETL flows, and just focusing on what how
+
+00:36:56.410 --> 00:37:00.580
+did we solve the problem of predicated drawing, which I
+
+00:37:00.580 --> 00:37:04.290
+realized we didn't really talk about so should I jump into
+
+00:37:04.290 --> 00:37:05.160
+that.
+
+00:37:05.160 --> 00:37:06.160
+Yeah, I guess.
+
+00:37:06.160 --> 00:37:09.160
+How are we on time, we have time for detours.
+
+00:37:09.160 --> 00:37:12.450
+Um, yeah, it looks like we could spend two or three minutes
+
+00:37:12.450 --> 00:37:15.160
+on that and then come back for the questions.
+
+00:37:15.160 --> 00:37:18.160
+Cool.
+
+00:37:18.160 --> 00:37:21.440
+And I'm just going to peek into my org mode into my chat
+
+00:37:21.440 --> 00:37:24.970
+conference and I don't see anybody talking to me from the
+
+00:37:24.970 --> 00:37:29.160
+organizer channel, so I'm gonna assume that's a good guess.
+
+00:37:29.160 --> 00:37:33.700
+All right, so let's go ahead and play with the map a
+
+00:37:33.700 --> 00:37:38.170
+little then that is pretty fun and so much fun that we
+
+00:37:38.170 --> 00:37:42.640
+had to curtail play sessions in order to keep working on
+
+00:37:42.640 --> 00:37:44.160
+the project.
+
+00:37:44.160 --> 00:37:52.160
+So, I'll, I'll do the.
+
+00:37:52.160 --> 00:37:58.516
+Um, we'll try to find something different from any gift
+
+00:37:58.517 --> 00:38:01.160
+I've shared here right.
+
+00:38:01.160 --> 00:38:06.160
+So here we are in a random. Go ahead, Erik, you feel.
+
+00:38:06.160 --> 00:38:10.660
+Okay, so what we're, what Corwin is doing here is he's
+
+00:38:10.660 --> 00:38:15.380
+about to put the map into play mode, which is going to turn
+
+00:38:15.380 --> 00:38:17.160
+on the fog of war.
+
+00:38:17.160 --> 00:38:21.100
+And then we're going to use the fog of war and the, the
+
+00:38:21.100 --> 00:38:25.230
+play mode to kind of reveal the map, one square at a time
+
+00:38:25.230 --> 00:38:28.160
+like we would during a play session.
+
+00:38:28.160 --> 00:38:32.350
+So we'll just drop the party randomly somewhere onto this
+
+00:38:32.350 --> 00:38:36.160
+map looks like we're on alpha maze level three here.
+
+00:38:36.160 --> 00:38:46.160
+And then we'll walk around a little.
+
+00:38:46.160 --> 00:38:52.280
+Okay, so we're halfway there. I'll have to, I'll have to do
+
+00:38:52.280 --> 00:38:55.540
+a full redraw the sketch the sketching stuff has has has
+
+00:38:55.540 --> 00:38:58.980
+broken things here like I said, the two aren't separated
+
+00:38:58.980 --> 00:39:01.910
+once I run them in the same instance, they're not
+
+00:39:01.910 --> 00:39:03.160
+predictable.
+
+00:39:03.160 --> 00:39:08.060
+Okay, so let me elaborate here when he says the sketching
+
+00:39:08.060 --> 00:39:12.960
+stuff. The current focus of our work is to turn all of this
+
+00:39:12.960 --> 00:39:17.940
+map stuff we've got into a basically a WYSIWYG map editor,
+
+00:39:17.940 --> 00:39:22.330
+where we can get into the tiles, and we'll be able to
+
+00:39:22.330 --> 00:39:24.160
+select the tile and basically rubber
+
+00:39:24.160 --> 00:39:30.510
+stamp it into a map graphically, and then save the map file
+
+00:39:30.510 --> 00:39:36.470
+out and load it back in later, so that we're able to just
+
+00:39:36.470 --> 00:39:40.160
+pound out these maps real fast.
+
+00:39:40.160 --> 00:39:44.480
+Using a graphical editor rather than having to hand code
+
+00:39:44.480 --> 00:39:48.160
+every symbol and every square of the tables.
+
+00:39:48.160 --> 00:39:51.160
+So the process of doing that.
+
+00:39:51.160 --> 00:39:56.190
+I hate them on things are a mess we've got covers off those
+
+00:39:56.190 --> 00:40:03.160
+wires hanging out different stuff works on different days.
+
+00:40:03.160 --> 00:40:06.860
+Well, I will say in our defense this is exactly why we
+
+00:40:06.860 --> 00:40:10.880
+staged a complicated thing, and probably we should have
+
+00:40:10.880 --> 00:40:14.510
+just gone with that instead of trying to give you the
+
+00:40:14.510 --> 00:40:18.460
+experience of, of what it's like to use Emacs to do this
+
+00:40:18.460 --> 00:40:21.160
+which is sort of the last
+
+00:40:21.160 --> 00:40:26.450
+thought there and my apologies for that if that's made it
+
+00:40:26.450 --> 00:40:31.650
+harder to follow the thread. Let's check back now for
+
+00:40:31.650 --> 00:40:37.160
+questions and see if anybody wants to redirect at all.
+
+00:40:37.160 --> 00:40:41.438
+Oh yep, this. So what you're looking at all uses
+
+00:40:41.439 --> 00:40:46.860
+progrmamatic SVG generation for question number four there,
+
+00:40:46.860 --> 00:40:52.160
+have you played with generating SVGs programmatically in Emacs.
+
+00:40:52.160 --> 00:40:58.160
+That is what the maps are doing in terms of
+
+00:40:58.160 --> 00:41:01.860
+being more explicit about that we started hand coding
+
+00:41:01.860 --> 00:41:05.650
+things and once we got the, the idea of what the code was
+
+00:41:05.650 --> 00:41:10.160
+going to look like we switched to doing it programmatically.
+
+00:41:10.160 --> 00:41:13.330
+So, we were going to open up maybe now we've got time we
+
+00:41:13.330 --> 00:41:16.910
+can get into the tileset real quick. Sure, we definitely
+
+00:41:16.910 --> 00:41:19.820
+didn't do any of the pathing slides and so now we've
+
+00:41:19.820 --> 00:41:23.160
+skipped over some stuff we were going to present.
+
+00:41:23.160 --> 00:41:27.030
+Yeah, that's right we skipped a whole bunch of slides and I
+
+00:41:27.030 --> 00:41:31.160
+can certainly go back to them they're open here obviously.
+
+00:41:31.160 --> 00:41:34.110
+I'm right I was just showing off the sketching tool,
+
+00:41:34.110 --> 00:41:37.530
+briefly in that context but I think you're right, let's, we
+
+00:41:37.530 --> 00:41:40.800
+can jump over to the actually I should finish with this now
+
+00:41:40.800 --> 00:41:42.160
+having teased it.
+
+00:41:42.160 --> 00:41:46.970
+So let's do the same thing here Ctrl H M, and you'll see in
+
+00:41:46.970 --> 00:41:52.160
+this case there are very few key bindings that are set up.
+
+00:41:52.160 --> 00:41:57.320
+This shift delete has a terror or shift with a control
+
+00:41:57.320 --> 00:42:01.920
+delete, it would seem to be. So that has a couple obvious
+
+00:42:01.920 --> 00:42:06.590
+bugs with it right didn't pick it didn't pick up those
+
+00:42:06.590 --> 00:42:12.160
+control points until I reuse them not clearing that stack.
+
+00:42:12.160 --> 00:42:16.720
+I think we can also should probably think about whether the
+
+00:42:16.720 --> 00:42:21.060
+origin should return and hey marking that origin would be
+
+00:42:21.060 --> 00:42:25.370
+nice. So there's a tremendous amount to do here this is
+
+00:42:25.370 --> 00:42:30.090
+just showing that it is possible to use, essentially like a
+
+00:42:30.090 --> 00:42:31.160
+touch input to,
+
+00:42:31.160 --> 00:42:40.730
+yeah, and then also we can switch over to our place tool,
+
+00:42:40.730 --> 00:42:46.830
+and hopefully we can get a nice big menu of all the tiles that
+
+00:42:46.830 --> 00:42:50.160
+Erik prepared for the game maps.
+
+00:42:50.160 --> 00:42:55.160
+That was probably a terrible choice but there you have just
+
+00:42:55.160 --> 00:42:57.160
+a bit of corridor right.
+
+00:42:57.160 --> 00:43:01.160
+That looks.
+
+00:43:01.160 --> 00:43:03.160
+And even the click.
+
+00:43:03.160 --> 00:43:06.870
+Yep, and this click action here is the last thing I
+
+00:43:06.870 --> 00:43:10.510
+was working on before I dropped everything to build the
+
+00:43:10.510 --> 00:43:14.160
+decks that we will soon share for this conference.
+
+00:43:14.160 --> 00:43:20.160
+So okay, back to the tile sets.
+
+00:43:20.160 --> 00:43:24.130
+So the way we approached drawing it programmatically is we
+
+00:43:24.130 --> 00:43:28.160
+broke our code up into little snippets we called tiles.
+
+00:43:28.160 --> 00:43:31.240
+And so this is where I was going to open up the tiles out
+
+00:43:31.240 --> 00:43:34.610
+here, basically each tile has a name, and then with that
+
+00:43:34.610 --> 00:43:38.160
+name we place data into different layers of the image.
+
+00:43:38.160 --> 00:43:43.290
+Some of the layers are just SVG paths, and the data is just
+
+00:43:43.290 --> 00:43:48.430
+SVG commands, like we saw in that handwritten code, and
+
+00:43:48.430 --> 00:43:53.560
+some of it is compositions of other tiles, so a tile can be
+
+00:43:53.560 --> 00:43:56.160
+made up of other tiles.
+
+00:43:56.160 --> 00:44:00.270
+Furthermore, some of these tiles have conditional code in
+
+00:44:00.270 --> 00:44:04.460
+it, where like some of this stuff is talking about elf and
+
+00:44:04.460 --> 00:44:05.160
+bang elf.
+
+00:44:05.160 --> 00:44:09.540
+So the map is going to be drawn differently depending on
+
+00:44:09.540 --> 00:44:13.160
+whether or not there's elves in the party.
+
+00:44:13.160 --> 00:44:17.160
+So, and that's the demo they broke.
+
+00:44:17.160 --> 00:44:20.160
+So the engine has to make all those decisions.
+
+00:44:20.160 --> 00:44:22.887
+And that's what we're calling predicated drawing. Oh, there's
+
+00:44:22.888 --> 00:44:26.810
+a special room here. Do you have any elves? You do. So I
+
+00:44:26.810 --> 00:44:33.160
+draw it the "there is elves" way.
+
+00:44:33.160 --> 00:44:37.440
+Yeah, so we built up the set of tiles, and then we
+
+00:44:37.440 --> 00:44:42.450
+basically made map files, which take our map and break it
+
+00:44:42.450 --> 00:44:46.840
+up into XY grids, and then we drop these tiles into
+
+00:44:46.840 --> 00:44:49.160
+positions on the map.
+
+00:44:49.160 --> 00:44:52.060
+So we can use the same tile square after square after
+
+00:44:52.060 --> 00:44:55.470
+square. When there's a corridor north-south, it's the same
+
+00:44:55.470 --> 00:44:59.980
+tile over and over again. And that makes it easy to reuse
+
+00:44:59.980 --> 00:45:01.160
+the code.
+
+00:45:01.160 --> 00:45:12.370
+And also, when we go to present the -- what am I trying to
+
+00:45:12.370 --> 00:45:16.180
+say -- the drawing in fog of war mode, as we move down the
+
+00:45:16.180 --> 00:45:20.280
+corridor, we can just add the necessary code one bit at a
+
+00:45:20.280 --> 00:45:24.160
+time to the visible image, so that what we're displaying
+
+00:45:24.160 --> 00:45:28.160
+doesn't contain any data except what the party has already
+
+00:45:28.160 --> 00:45:30.160
+discovered.
+
+00:45:30.160 --> 00:45:34.720
+And thus we have kind of spoiler-rich documents sitting on
+
+00:45:34.720 --> 00:45:39.120
+the GM server, and then less -- and spoiler-free data that
+
+00:45:39.120 --> 00:45:43.160
+flows down to the org mode files on the player system.
+
+00:45:43.160 --> 00:45:47.660
+And the only real challenge is making sure that nothing
+
+00:45:47.660 --> 00:45:52.230
+that the game does can mess with the users -- the players'
+
+00:45:52.230 --> 00:45:56.610
+data file, in case they might have their own notes and
+
+00:45:56.610 --> 00:46:03.800
+things in it. That would be the one, you know, number one
+
+00:46:03.800 --> 00:46:06.160
+thing to avoid.
+
+00:46:06.160 --> 00:46:09.200
+Another thing we can talk about here is that there are
+
+00:46:09.200 --> 00:46:12.350
+layers. You can see this table at the bottom has tile and
+
+00:46:12.350 --> 00:46:16.860
+overlay. The overlay column is just going to contain some
+
+00:46:16.860 --> 00:46:19.160
+actual SVG XML style tags.
+
+00:46:19.160 --> 00:46:23.100
+So that's where we can add whatever text elements or other
+
+00:46:23.100 --> 00:46:27.120
+SVG, like raw SVG tags we want. Whereas a lot of the other
+
+00:46:27.120 --> 00:46:30.980
+layers are going to be like path layers, we've got water
+
+00:46:30.980 --> 00:46:33.160
+layers and beach layers.
+
+00:46:33.160 --> 00:46:36.370
+And our plan was to have a style sheet that defines how
+
+00:46:36.370 --> 00:46:39.790
+each of those layers are represented. So like when the
+
+00:46:39.790 --> 00:46:43.140
+water gets drawn blue and it's got arrows on it giving it
+
+00:46:43.140 --> 00:46:47.140
+direction, all of that can be customized with a style sheet
+
+00:46:47.140 --> 00:46:50.160
+to change the water to be whatever you want.
+
+00:46:50.160 --> 00:46:53.430
+And like we have beaches as yellow, but maybe you like
+
+00:46:53.430 --> 00:46:56.160
+beaches as red or, you know, whatever.
+
+00:46:56.160 --> 00:47:03.570
+So we also built some test programs and various -- I'm not
+
+00:47:03.570 --> 00:47:05.900
+sure what kind of shape we're going to find these in, but
+
+00:47:05.900 --> 00:47:07.160
+we can try running them.
+
+00:47:07.160 --> 00:47:13.950
+Here, for example, is just a very basic -- using the same
+
+00:47:13.950 --> 00:47:21.160
+file to define the tiles and then the layout, so to speak.
+
+00:47:21.160 --> 00:47:25.160
+Oh, look at that.
+
+00:47:25.160 --> 00:47:29.160
+There's the layout. Okay, so that actually looks fine. Tile.
+
+00:47:29.160 --> 00:47:33.430
+And it's path. So this is defining a tile named "seas" and
+
+00:47:33.430 --> 00:47:37.160
+it's going to have a list of tiles defined above.
+
+00:47:37.160 --> 00:47:41.120
+And you'll notice also that we can just sort of freely
+
+00:47:41.120 --> 00:47:44.750
+define and redefine and it sort of figures out, oh, this
+
+00:47:44.750 --> 00:47:47.160
+must still be part of the B row.
+
+00:47:47.160 --> 00:48:00.160
+We could also have done this.
+
+00:48:00.160 --> 00:48:08.160
+Okay, so this would work as would this.
+
+00:48:08.160 --> 00:48:11.930
+>> Early on in development when we were talking about
+
+00:48:11.930 --> 00:48:16.520
+getting data in and out of these org tables, it was kind of
+
+00:48:16.520 --> 00:48:22.160
+a priority to us to leave the way the data is organized
+
+00:48:22.160 --> 00:48:25.160
+open to the users and to the dungeon masters.
+
+00:48:25.160 --> 00:48:30.860
+So while we set our tile set apart from our map sets, this
+
+00:48:30.860 --> 00:48:36.430
+clearly shows that you can cram a tile set and a map into a
+
+00:48:36.430 --> 00:48:38.160
+single file.
+
+00:48:38.160 --> 00:48:41.170
+So in situations like the surface where we're using
+
+00:48:41.170 --> 00:48:44.610
+different tiles from other maps, maybe it makes sense to
+
+00:48:44.610 --> 00:48:47.890
+move, you know, those tiles just into the file with your
+
+00:48:47.890 --> 00:48:49.160
+map.
+
+00:48:49.160 --> 00:48:51.880
+But we also wanted to make sure, like, it's hard for us to
+
+00:48:51.880 --> 00:48:54.640
+predict how other people are going to want to use this when
+
+00:48:54.640 --> 00:48:56.160
+they design their games.
+
+00:48:56.160 --> 00:49:00.780
+So we wanted to leave it as versatile as possible about how
+
+00:49:00.780 --> 00:49:02.160
+you can use it.
+
+00:49:02.160 --> 00:49:04.810
+>> Where it matters, right? Not support every feature in
+
+00:49:04.810 --> 00:49:05.160
+the world.
+
+00:49:05.160 --> 00:49:08.560
+I can't count the number of times I said, Erik, Erik, Erik,
+
+00:49:08.560 --> 00:49:12.000
+hey, if we do it like this, people will be -- and he just,
+
+00:49:12.000 --> 00:49:14.160
+like, does it have to do that?
+
+00:49:14.160 --> 00:49:19.090
+Like, do we need it right away? Do you have to really
+
+00:49:19.090 --> 00:49:21.160
+rewrite everything so it can all do that?
+
+00:49:21.160 --> 00:49:26.160
+And a lot of those conversations, too.
+
+00:49:26.160 --> 00:49:30.160
+But the key flexibilities are really there.
+
+00:49:30.160 --> 00:49:32.160
+People might want to use a lot of different files.
+
+00:49:32.160 --> 00:49:34.160
+They might want to lay the tables out however they want.
+
+00:49:34.160 --> 00:49:37.590
+They have to be able to say, hey, this is a table that has
+
+00:49:37.590 --> 00:49:40.950
+data that's controlled by the game, and everything else in
+
+00:49:40.950 --> 00:49:43.160
+the file is not the game's problem.
+
+00:49:43.160 --> 00:49:45.980
+>> And our table, some of our tables started getting really
+
+00:49:45.980 --> 00:49:48.160
+wide, so we started striping the tables.
+
+00:49:48.160 --> 00:49:52.140
+We'll repeat the same table over and over and over again to
+
+00:49:52.140 --> 00:49:56.180
+get all of the columns in there without making it, you know,
+
+00:49:56.180 --> 00:49:58.160
+a million miles wide.
+
+00:49:58.160 --> 00:49:59.160
+>> Yeah.
+
+00:49:59.160 --> 00:50:02.450
+Do you want to -- should I go ahead and pull open, like, a
+
+00:50:02.450 --> 00:50:04.160
+level here, do you think?
+
+00:50:04.160 --> 00:50:05.160
+>> Sure.
+
+00:50:05.160 --> 00:50:06.160
+>> Just to have shown it.
+
+00:50:06.160 --> 00:50:08.750
+>> The file set's a great example of striped tables if you
+
+00:50:08.750 --> 00:50:11.160
+look down, like, in the level change feature.
+
+00:50:11.160 --> 00:50:18.160
+>> Oh, sure.
+
+00:50:18.160 --> 00:50:21.160
+>> Sorry, I'm not quite sitting well to my keyboard here.
+
+00:50:21.160 --> 00:50:30.160
+I can just readjust things real quick.
+
+00:50:30.160 --> 00:50:33.920
+So what, you know, you can see here, like, some of these
+
+00:50:33.920 --> 00:50:38.160
+tables got real wide when we're stuffing SVG tags into them.
+
+00:50:38.160 --> 00:50:44.160
+And what we -- oh, maybe it's not in these.
+
+00:50:44.160 --> 00:50:50.160
+I thought it was.
+
+00:50:50.160 --> 00:50:51.160
+It's special, probably.
+
+00:50:51.160 --> 00:50:52.160
+>> Yeah.
+
+00:50:52.160 --> 00:50:54.160
+No, there it is, yeah.
+
+00:50:54.160 --> 00:50:55.160
+It was in level change.
+
+00:50:55.160 --> 00:50:57.160
+It does the table key repeat.
+
+00:50:57.160 --> 00:50:58.160
+>> Okay, great.
+
+00:50:58.160 --> 00:50:59.720
+>> You were just scrolling up and down so fast I didn't
+
+00:50:59.720 --> 00:51:00.160
+realize.
+
+00:51:00.160 --> 00:51:04.270
+So this first table, we've got path and what is that,
+
+00:51:04.270 --> 00:51:05.160
+stairs?
+
+00:51:05.160 --> 00:51:09.010
+So the stairs level is one that draws in, like, a pink
+
+00:51:09.010 --> 00:51:13.160
+color to highlight places where you can change level.
+
+00:51:13.160 --> 00:51:16.120
+And then if we scroll down to the second half of this
+
+00:51:16.120 --> 00:51:19.380
+section, the second table is going to have all of these
+
+00:51:19.380 --> 00:51:24.000
+same tiles in it, but instead of path and stairs, we're
+
+00:51:24.000 --> 00:51:27.160
+going to have other columns.
+
+00:51:27.160 --> 00:51:31.160
+Can we see the next table?
+
+00:51:31.160 --> 00:51:32.160
+There we go.
+
+00:51:32.160 --> 00:51:35.610
+So the same tiles, only here we've got overlay,
+
+00:51:35.610 --> 00:51:38.160
+documentation, and behavior.
+
+00:51:38.160 --> 00:51:40.160
+And I guess we haven't talked about this at all.
+
+00:51:40.160 --> 00:51:44.920
+The behavior column was our concept of a way that we could
+
+00:51:44.920 --> 00:51:50.100
+attach functions, basically, to these different areas of
+
+00:51:50.100 --> 00:51:51.160
+the map.
+
+00:51:51.160 --> 00:51:55.920
+Because sometimes when you enter an area, we want it to do
+
+00:51:55.920 --> 00:51:57.160
+something.
+
+00:51:57.160 --> 00:52:00.880
+Like when you enter a stairs down, maybe we want it to
+
+00:52:00.880 --> 00:52:04.850
+change to the next level and draw the stairs up behind you
+
+00:52:04.850 --> 00:52:08.160
+and draw you where you are on the next level.
+
+00:52:08.160 --> 00:52:13.470
+So these are like hooks where we could attach functions or,
+
+00:52:13.470 --> 00:52:18.390
+you know, macros or whatever to make the map have these
+
+00:52:18.390 --> 00:52:23.160
+behaviors as we get further towards automation.
+
+00:52:23.160 --> 00:52:25.160
+Cool.
+
+00:52:25.160 --> 00:52:31.160
+So that's that should be pretty close to our time.
+
+00:52:31.160 --> 00:52:34.160
+Questions or just say goodbye.
+
+00:52:34.160 --> 00:52:38.160
+Yeah, so there's the I'm sorry we couldn't show it earlier.
+
+00:52:38.160 --> 00:52:41.160
+There is the battle board.
+
+00:52:41.160 --> 00:52:46.160
+And so this is used just to keep track of hit points.
+
+00:52:46.160 --> 00:52:50.540
+So with this example, battle board, dm battle board.el,
+
+00:52:50.540 --> 00:52:54.590
+there's there's a complete example of not only in a single
+
+00:52:54.590 --> 00:52:58.430
+file reaper, we filling out the tell the cells and the
+
+00:52:58.430 --> 00:53:03.720
+tiles, but then coming in and keeping the org mode file in
+
+00:53:03.720 --> 00:53:06.160
+sync with with clicks.
+
+00:53:06.160 --> 00:53:11.040
+So, and I can press the star key and set my damage to minus
+
+00:53:11.040 --> 00:53:14.160
+one and take the damage back off.
+
+00:53:14.160 --> 00:53:17.770
+I just haven't spent a lot of time building up fancy bind
+
+00:53:17.770 --> 00:53:21.620
+ings for this, you'll also find that the crew probably find
+
+00:53:21.620 --> 00:53:25.270
+how I figure out what was clicked on in the code hard, but
+
+00:53:25.270 --> 00:53:30.010
+if I just assign something recognizable for damage, and
+
+00:53:30.010 --> 00:53:33.160
+then come into.
+
+00:53:33.160 --> 00:53:39.030
+It will now have opened the org mode file behind the scenes
+
+00:53:39.030 --> 00:53:41.160
+because it's changing it.
+
+00:53:41.160 --> 00:53:48.340
+And we can then look at that file a little bit and
+
+00:53:48.340 --> 00:53:54.130
+hopefully that is on large enough you can kind of see there
+
+00:53:54.130 --> 00:53:57.160
+'s our 17 damage landed in armor.
+
+00:53:57.160 --> 00:54:04.200
+The logic that sits behind that to figure out the part of
+
+00:54:04.200 --> 00:54:10.160
+the screen is not necessarily our finest work.
+
+00:54:10.160 --> 00:54:12.960
+But it does work and that's one kind of stuff was used on
+
+00:54:12.960 --> 00:54:16.030
+the map a little bit too. We didn't really get to show that
+
+00:54:16.030 --> 00:54:18.970
+in the demo but as you're scrolling around there's like a
+
+00:54:18.970 --> 00:54:22.160
+highlighter that that, you know, we were drawing on.
+
+00:54:22.160 --> 00:54:26.160
+Oh sure, show you which square you've got selected.
+
+00:54:26.160 --> 00:54:30.300
+We were having trouble with that code. Initially, and we
+
+00:54:30.300 --> 00:54:33.160
+were sometimes revealing the wrong.
+
+00:54:33.160 --> 00:54:38.160
+Okay.
+
+00:54:38.160 --> 00:54:41.320
+And I don't know how we're set for time but I just saw a
+
+00:54:41.320 --> 00:54:45.240
+message from Trixie that she could jump on if we want her.
+
+00:54:45.240 --> 00:54:48.290
+Oh, that would be amazing. Yeah, go ahead and invite her in
+
+00:54:48.290 --> 00:54:51.160
+I'll just cut to the scene as soon as she's in.
+
+00:54:51.160 --> 00:54:54.160
+I think.
+
+00:54:54.160 --> 00:54:58.080
+Yeah, so we're reaching the ask me anything portion of the
+
+00:54:58.080 --> 00:55:01.760
+program here with what, with what time we have left for
+
+00:55:01.760 --> 00:55:03.160
+your questions.
+
+00:55:03.160 --> 00:55:09.170
+Please correct me if we're still like 10 minutes, you know,
+
+00:55:09.170 --> 00:55:15.450
+if we're, if we're more than like 15 to 20 minutes from our
+
+00:55:15.450 --> 00:55:20.560
+time but I suspect we've left way left way less than that
+
+00:55:20.560 --> 00:55:25.160
+and out of respect for all the other presenters.
+
+00:55:25.160 --> 00:55:29.160
+I don't want to close that actually.
+
+00:55:29.160 --> 00:55:33.060
+I think I may have found an old version of my slides that
+
+00:55:33.060 --> 00:55:35.160
+can have some good stuff.
+
+00:55:35.160 --> 00:55:40.220
+It's been an event for a couple of weeks here I had a break
+
+00:55:40.220 --> 00:55:45.190
+in and my somebody got into our bank accounts and nasty
+
+00:55:45.190 --> 00:55:51.160
+business, just a lot going on over, over this whole year I think.
+
+00:55:51.160 --> 00:55:54.160
+Any more questions to share.
+
+00:55:54.160 --> 00:56:02.240
+Sure. So, I think there was at least one we deferred a
+
+00:56:02.240 --> 00:56:06.160
+little bit with the game is
+
+00:56:06.160 --> 00:56:08.990
+always eight characters that can be divided right that's so
+
+00:56:08.990 --> 00:56:11.660
+always eight characters that can be divided between the
+
+00:56:11.660 --> 00:56:14.540
+party is the classic formula, it actually works pretty well
+
+00:56:14.540 --> 00:56:16.160
+for a conversational group.
+
+00:56:16.160 --> 00:56:18.810
+I think the idea that role playing games are about talking
+
+00:56:18.810 --> 00:56:21.330
+to each other and being good at them is about taking
+
+00:56:21.330 --> 00:56:23.770
+excellent notes. So, when you're sitting around with a
+
+00:56:23.770 --> 00:56:26.070
+group of people and you're going to have to wait for them
+
+00:56:26.070 --> 00:56:29.410
+while they dig through their notes and listen to all of the
+
+00:56:29.410 --> 00:56:33.160
+things they find interesting to say, and try to reach an
+
+00:56:33.160 --> 00:56:35.160
+imaginative place that you can stay together.
+
+00:56:35.160 --> 00:56:38.800
+And when you're doing all that and working in dice and
+
+00:56:38.800 --> 00:56:43.250
+remembering the rules. It's actually a complicated activity,
+
+00:56:43.250 --> 00:56:47.340
+I liken it more to a bridge game, then to like, you know,
+
+00:56:47.340 --> 00:56:51.310
+part cheesy or perhaps even like risk or access and allies
+
+00:56:51.310 --> 00:56:55.620
+or other games that have have definitely the strategy to
+
+00:56:55.620 --> 00:56:57.160
+them but I don't.
+
+00:56:57.160 --> 00:57:01.160
+Erik, your thoughts.
+
+00:57:02.160 --> 00:57:05.160
+I think that's fair.
+
+00:57:05.160 --> 00:57:08.880
+You know yes definitely. The, the tradition is to always
+
+00:57:08.880 --> 00:57:12.600
+have eight characters in the party, and, you know, one of
+
+00:57:12.600 --> 00:57:16.320
+the great things about dungeon is that everybody who writes
+
+00:57:16.320 --> 00:57:19.730
+their own dungeon gets to write their own rules, and is
+
+00:57:19.730 --> 00:57:22.160
+free to change whatever you want.
+
+00:57:22.160 --> 00:57:26.700
+I've definitely seen people try to take on challenging that
+
+00:57:26.700 --> 00:57:30.160
+always eight characters in a party thing.
+
+00:57:30.160 --> 00:57:33.460
+I've seen people take approaches like every player gets two
+
+00:57:33.460 --> 00:57:36.570
+characters and then you can have a party ranging from two
+
+00:57:36.570 --> 00:57:40.130
+to 10, or there's always going to be 10 or there's, you
+
+00:57:40.130 --> 00:57:43.340
+know, this or that or people have tried stuff, and none of
+
+00:57:43.340 --> 00:57:47.170
+it has really worked out very satisfactorily we always seem
+
+00:57:47.170 --> 00:57:50.160
+to keep coming back to our party of eight.
+
+00:57:50.160 --> 00:57:55.710
+It's, it's one of the things that dungeon that you can't
+
+00:57:55.710 --> 00:57:59.290
+change when you write your own dungeon. And that's the
+
+00:57:59.290 --> 00:58:03.900
+reason it's so complicated as a, as a software project why
+
+00:58:03.900 --> 00:58:08.640
+it's taken us decades, because trying to model the data for
+
+00:58:08.640 --> 00:58:13.820
+example or really any attempt, quantify it in specific
+
+00:58:13.820 --> 00:58:16.160
+terms always falls to examples.
+
+00:58:16.160 --> 00:58:20.740
+You know dungeons usually have elves, elves, dwarves and
+
+00:58:20.740 --> 00:58:25.160
+humans. They have priests, wizards and warriors.
+
+00:58:25.160 --> 00:58:29.330
+They have eight characters in the party. The Balrogs are
+
+00:58:29.330 --> 00:58:34.160
+particularly nasty and live in a room of some specific shape.
+
+00:58:34.160 --> 00:58:57.160
+And they have spoilers.
+
+00:58:57.160 --> 00:59:00.900
+So let's touch on special power real quick since that's one
+
+00:59:00.900 --> 00:59:04.820
+of the things that is kind of unique to dungeon. And one of
+
+00:59:04.820 --> 00:59:08.710
+the things that is the biggest challenge to us and trying
+
+00:59:08.710 --> 00:59:12.160
+to code a system like this for automated play.
+
+00:59:12.160 --> 00:59:15.680
+And that's that every character gets a unique special power
+
+00:59:15.680 --> 00:59:19.300
+and traditionally you negotiate your special power with the
+
+00:59:19.300 --> 00:59:22.600
+dungeon master when you create your character, and
+
+00:59:22.600 --> 00:59:25.970
+occasionally throughout the course of the characters life
+
+00:59:25.970 --> 00:59:29.160
+their special power might change due to game circumstances,
+
+00:59:29.160 --> 00:59:34.160
+usually it improves but sometimes not.
+
+00:59:34.160 --> 00:59:37.180
+So those are the most fun conversations right sometimes we
+
+00:59:37.180 --> 00:59:39.820
+have fun gaming sessions where we barely get all the
+
+00:59:39.820 --> 00:59:42.800
+characters created and started, because we get off into
+
+00:59:42.800 --> 00:59:45.780
+arguing about the special powers no Zelda special powers
+
+00:59:45.780 --> 00:59:49.160
+obviously the candle Come on.
+
+00:59:49.160 --> 00:59:54.160
+Also that was like, not so.
+
+00:59:54.160 --> 01:00:02.160
+I still have my t shirt. Hey, there she is. Let's cut scene.
+
+01:00:02.160 --> 01:00:05.890
+I'm going to be working with fun filters today, because
+
+01:00:05.890 --> 01:00:12.250
+that's what we got going on over here. All right, I'm going
+
+01:00:12.250 --> 01:00:19.160
+to recut everybody hang on tight.
+
+01:00:19.160 --> 01:00:21.160
+All right, there's Erik.
+
+01:00:21.160 --> 01:00:24.160
+This is going to be Erik for a second home.
+
+01:00:24.160 --> 01:00:27.680
+No worries. And welcome to that welcome to the stream. Trix
+
+01:00:27.680 --> 01:00:29.160
+ie horror.
+
+01:00:29.160 --> 01:00:33.410
+Who is one of our project team members somebody who's
+
+01:00:33.410 --> 01:00:37.160
+learning Emacs as part of the project, and.
+
+01:00:37.160 --> 01:00:42.690
+Yeah, I particularly wanted to invite you on to talk about
+
+01:00:42.690 --> 01:00:47.700
+your experience learning Emacs I think you have run into
+
+01:00:47.700 --> 01:00:52.900
+places where it's a pain in the butt to learn Emacs and that
+
+01:00:52.900 --> 01:00:56.160
+this is a safe space to talk about that.
+
+01:00:56.160 --> 01:01:02.160
+I'll jump in by saying the Emacs cheat sheet.
+
+01:01:02.160 --> 01:01:07.160
+I think it's the one that can do puts out is a lifesaver.
+
+01:01:07.160 --> 01:01:12.030
+I think there's a little bit of a vocabulary disconnect,
+
+01:01:12.030 --> 01:01:16.050
+like, and this actually kind of comes up a lot in
+
+01:01:16.050 --> 01:01:21.080
+conversation with Corwin and Erik and I, but coffee paste
+
+01:01:21.080 --> 01:01:25.160
+versus what yank and w, whatever w killing yank.
+
+01:01:25.160 --> 01:01:28.160
+Yeah.
+
+01:01:28.160 --> 01:01:31.380
+Why would you even do that to us right where where were you
+
+01:01:31.380 --> 01:01:34.810
+when zeros park happened. No, I understand that makes sense.
+
+01:01:34.810 --> 01:01:39.160
+What else.
+
+01:01:39.160 --> 01:01:41.920
+I mean you don't have to sit here and rag on Emacs but we're
+
+01:01:41.920 --> 01:01:44.160
+here for that. That's all I'm saying.
+
+01:01:44.160 --> 01:01:48.250
+I think that's the biggest thing, like, I'm, I'm used to,
+
+01:01:48.250 --> 01:01:52.170
+like, just kind of the very binary nature of like, nope,
+
+01:01:52.170 --> 01:01:55.160
+that didn't work, try something else.
+
+01:01:55.160 --> 01:02:00.680
+So, as long as you're willing to try other stuff like Emacs
+
+01:02:00.680 --> 01:02:07.160
+will be fine. So, it's a tough cookie it can take it.
+
+01:02:07.160 --> 01:02:14.430
+The only thing that happens is you have to install it
+
+01:02:14.430 --> 01:02:21.160
+through your file that you hopefully have a backup of.
+
+01:02:21.160 --> 01:02:25.160
+Um, are there more questions in the hopper.
+
+01:02:25.160 --> 01:02:29.500
+If anybody does have any questions up there for hope for
+
+01:02:29.500 --> 01:02:34.210
+Erik or I so just to summarize, I've known Erik, I've known
+
+01:02:34.210 --> 01:02:38.640
+Erik, my whole life, I've known hope around a decade we
+
+01:02:38.640 --> 01:02:41.760
+work together on a project for, for a science fiction
+
+01:02:41.760 --> 01:02:42.160
+convention.
+
+01:02:42.160 --> 01:02:45.160
+Yeah.
+
+01:02:45.160 --> 01:02:49.360
+I've written a few conventions and then I also helped with
+
+01:02:49.360 --> 01:02:53.710
+I just wrote a bio. So this should like all theoretically
+
+01:02:53.710 --> 01:02:55.160
+be in my head right.
+
+01:02:55.160 --> 01:03:01.660
+I want to refer to my own bio project coordinator for
+
+01:03:01.660 --> 01:03:03.160
+dungeon mode.
+
+01:03:03.160 --> 01:03:07.160
+I was a bird assistant good credit.
+
+01:03:07.160 --> 01:03:13.160
+And family friend to the Bruce. Oh,
+
+01:03:13.160 --> 01:03:17.870
+yeah, we've gotten a ton of support from a lot of our
+
+01:03:17.870 --> 01:03:21.720
+lifelong friends people, and also people that we just met.
+
+01:03:21.720 --> 01:03:24.160
+Maybe that's a that's a great segue.
+
+01:03:24.160 --> 01:03:26.900
+Do throw your questions in there I'm going to fill for just
+
+01:03:26.900 --> 01:03:29.160
+a second and then we'll probably cut away.
+
+01:03:29.160 --> 01:03:35.970
+But, I'm thinking thematically actually, that's that's too
+
+01:03:35.970 --> 01:03:38.810
+abrupt so we need to go around the room, Erik you had hours
+
+01:03:38.810 --> 01:03:41.480
+and hours to rehearse hope kind of jumped in on the last
+
+01:03:41.480 --> 01:03:42.160
+minute.
+
+01:03:42.160 --> 01:03:47.050
+So let's let's, is it okay to pick on you or do you want me
+
+01:03:47.050 --> 01:03:48.160
+to get mine.
+
+01:03:48.160 --> 01:03:51.490
+What are you asking me to do what do you what do you want
+
+01:03:51.490 --> 01:03:55.280
+people to take away from this talk, you know, as we think
+
+01:03:55.280 --> 01:03:59.010
+about dungeon and sharing it's sharing its tradition, as we
+
+01:03:59.010 --> 01:04:03.160
+think about learning Emacs, and like making that awesome.
+
+01:04:03.160 --> 01:04:08.210
+And just, you know, generally what's up with free software
+
+01:04:08.210 --> 01:04:13.160
+and trying to make computers a tool to make people freer.
+
+01:04:13.160 --> 01:04:18.160
+Yeah, I'm going to ask like five questions. Yeah, so just
+
+01:04:18.160 --> 01:04:19.160
+jump in.
+
+01:04:19.160 --> 01:04:24.160
+I think that dungeon is a lot of fun. And, you know, I'm, I
+
+01:04:24.160 --> 01:04:29.260
+'ve played many commercial role playing games over the years
+
+01:04:29.260 --> 01:04:32.160
+, and I've enjoyed all of them.
+
+01:04:32.160 --> 01:04:36.500
+But there's very few of them that I've had as many belly
+
+01:04:36.500 --> 01:04:41.410
+laughs and as much just joy, playing as from dungeon. And I
+
+01:04:41.410 --> 01:04:44.500
+think, you know, the magic of it is, you know, like any
+
+01:04:44.500 --> 01:04:47.400
+game like the real magic is the people you play with and
+
+01:04:47.400 --> 01:04:50.160
+having fun with your friends.
+
+01:04:50.160 --> 01:04:53.780
+And what I would hope that people can take away from is
+
+01:04:53.780 --> 01:04:57.900
+that dungeon has the ability to be that magical thing. And
+
+01:04:57.900 --> 01:05:01.870
+hopefully we can get our project to the point where it gets
+
+01:05:01.870 --> 01:05:06.160
+out of the way and lets you have that fun with your friends.
+
+01:05:06.160 --> 01:05:12.180
+So I think there's a lot of work to do we could use some
+
+01:05:12.180 --> 01:05:19.330
+help. So if you're interested in having fun. Come help us
+
+01:05:19.330 --> 01:05:22.160
+build this fun tool.
+
+01:05:22.160 --> 01:05:25.370
+Alright so I just got the call that we've got just about
+
+01:05:25.370 --> 01:05:29.160
+two to three minutes left, and we should start our wrap up.
+
+01:05:29.160 --> 01:05:31.160
+Wrap up.
+
+01:05:31.160 --> 01:05:35.090
+Yeah, so I'll see if I can charge the room with some energy
+
+01:05:35.090 --> 01:05:38.160
+unless you're ready to have that at home.
+
+01:05:38.160 --> 01:05:43.160
+Here, here's, here's what I want people to take away.
+
+01:05:43.160 --> 01:05:47.160
+Were you like, No, okay.
+
+01:05:47.160 --> 01:05:54.160
+I'm not getting your audio hope.
+
+01:05:54.160 --> 01:05:57.160
+So my end, maybe I just need to speak up.
+
+01:05:57.160 --> 01:06:01.160
+Is this better, let me know when I'm coming through.
+
+01:06:01.160 --> 01:06:05.160
+Okay, cool.
+
+01:06:05.160 --> 01:06:07.160
+I was gonna say go ahead.
+
+01:06:07.160 --> 01:06:11.240
+I didn't. Okay. I mean I don't know that I know what I want
+
+01:06:11.240 --> 01:06:15.290
+to say either except a whole ton of thank you. So, I will,
+
+01:06:15.290 --> 01:06:19.160
+I will save those for the, for the literal end here.
+
+01:06:19.160 --> 01:06:26.630
+And instead, what I would say is, as we build our amazing
+
+01:06:26.630 --> 01:06:32.160
+innovations and explore our ideas in Emacs.
+
+01:06:32.160 --> 01:06:34.980
+We are fighting our own ego for the will to get them done,
+
+01:06:34.980 --> 01:06:37.740
+it's hard and we're not sure if they're going to be a good
+
+01:06:37.740 --> 01:06:39.960
+idea and will it excite people and part of our
+
+01:06:39.960 --> 01:06:42.780
+responsibility is to excite people so that they can feel
+
+01:06:42.780 --> 01:06:44.160
+good about liking them.
+
+01:06:44.160 --> 01:06:47.930
+If you come off and you're like hey this is a terrible idea
+
+01:06:47.930 --> 01:06:51.470
+it's really hard to be like, no I love that idea works
+
+01:06:51.470 --> 01:06:55.160
+theatrically but in larger groups may not scale.
+
+01:06:55.160 --> 01:07:00.160
+So that's a crucible for ideas and a crucible for teams.
+
+01:07:00.160 --> 01:07:05.280
+The first part is definitely healthy. The second part,
+
+01:07:05.280 --> 01:07:10.070
+there's a lot we can we can do, you know, having a front
+
+01:07:10.070 --> 01:07:15.160
+and and and good faith conversations on that subject.
+
+01:07:15.160 --> 01:07:19.600
+Anybody else want to want to wade in after that sorry that
+
+01:07:19.600 --> 01:07:23.160
+that was more of a calm down than a fire out.
+
+01:07:23.160 --> 01:07:25.160
+Okay.
+
+01:07:25.160 --> 01:07:27.160
+I think.
+
+01:07:27.160 --> 01:07:32.180
+The first part of this but I think we would be remiss not
+
+01:07:32.180 --> 01:07:35.860
+to highlight org mode, a little bit. Yeah, like, that's,
+
+01:07:35.860 --> 01:07:39.280
+that's our bread and butter. Yeah, our whole project is
+
+01:07:39.280 --> 01:07:40.160
+built on org mode.
+
+01:07:40.160 --> 01:07:44.580
+Right. And I'm just really excited because, like, I have, I
+
+01:07:44.580 --> 01:07:48.670
+don't have ADHD, but I have like something similar. And so,
+
+01:07:48.670 --> 01:07:52.230
+like to know that there's something that exists, that is
+
+01:07:52.230 --> 01:07:54.160
+like purely hierarchical.
+
+01:07:54.160 --> 01:07:59.170
+It's incredible, like I can just run a report, basically
+
+01:07:59.170 --> 01:08:03.550
+and get all of my like to do lists that I didn't have to
+
+01:08:03.550 --> 01:08:06.160
+put in one specific place.
+
+01:08:06.160 --> 01:08:13.190
+And, like, that's kind of been a complex issue for me of
+
+01:08:13.190 --> 01:08:16.680
+like, okay, I have all these to do lists, like in Google
+
+01:08:16.680 --> 01:08:19.160
+Keep or whatever like what do I do with them now.
+
+01:08:19.160 --> 01:08:24.160
+So being able to like pull them into one list.
+
+01:08:24.160 --> 01:08:27.160
+And then recycle through them is really incredible.
+
+01:08:27.160 --> 01:08:35.500
+And I think taking dungeon and like using it to like
+
+01:08:35.500 --> 01:08:40.160
+combining it with org mode basically really.
+
+01:08:40.160 --> 01:08:44.210
+I'm excited about it and I'm excited to see like what it
+
+01:08:44.210 --> 01:08:46.160
+can do for player groups.
+
+01:08:46.160 --> 01:08:49.190
+Especially now that quarantine like I was excited about
+
+01:08:49.190 --> 01:08:50.160
+dungeon mode.
+
+01:08:50.160 --> 01:08:54.040
+Before the pandemic and now like I'm only more enthusiastic.
+
+01:08:54.040 --> 01:08:57.940
+So, yeah, definitely the pandemic has been the greatest
+
+01:08:57.940 --> 01:09:01.720
+thing that happened to this game, terrible terrible as it
+
+01:09:01.720 --> 01:09:05.090
+is to say that it, if we needed a hobby and it turns out
+
+01:09:05.090 --> 01:09:11.160
+role playing games are are really good.
+
+01:09:11.160 --> 01:09:16.610
+So, so I think that's probably about our time. I'm guessing
+
+01:09:16.610 --> 01:09:21.160
+that's my call. And thank you very much.
+
+01:09:21.160 --> 01:09:24.970
+Thank you everybody will be around for discord and stuff
+
+01:09:24.970 --> 01:09:27.160
+later come catch us if you want to talk.
+
+01:09:27.160 --> 01:09:30.160
+Okay.
diff --git a/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt
new file mode 100644
index 00000000..183ea9f6
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--gabriele-bozzola-sbozzolo.vtt
@@ -0,0 +1,526 @@
+WEBVTT
+
+00:00:00.880 --> 00:00:03.760
+Hello and welcome to this talk.
+
+00:00:03.760 --> 00:00:06.080
+The title of this talk is a tour of vterm,
+
+00:00:06.080 --> 00:00:08.559
+a fast and fully featured terminal emulator
+
+00:00:08.559 --> 00:00:10.800
+inside GNU Emacs.
+
+00:00:10.801 --> 00:00:12.719
+So let's try to understand what we mean
+
+00:00:12.720 --> 00:00:14.559
+with "fast and fully featured."
+
+00:00:14.559 --> 00:00:16.800
+To do that we'll compare vterm
+
+00:00:16.801 --> 00:00:20.400
+with the packages which are built in Emacs,
+
+00:00:20.401 --> 00:00:22.400
+mainly, term.
+
+00:00:22.400 --> 00:00:25.039
+So let's jump into the vterm.
+
+00:00:25.040 --> 00:00:26.720
+So this is a vterm buffer
+
+00:00:26.720 --> 00:00:29.439
+and this is a ansi-term buffer.
+
+00:00:29.440 --> 00:00:30.720
+What I'm going to do now is
+
+00:00:30.721 --> 00:00:32.160
+first I'm going to prove to you
+
+00:00:32.160 --> 00:00:34.160
+what we mean by fast.
+
+00:00:34.161 --> 00:00:37.440
+To do that, let me open a large file display on screen--
+
+00:00:37.441 --> 00:00:40.239
+a large file, this is about one megabyte of data--
+
+00:00:40.239 --> 00:00:41.840
+and let me time that.
+
+00:00:41.841 --> 00:00:45.200
+It takes about 0.6 seconds with vterm.
+
+00:00:45.201 --> 00:00:48.320
+Let's do the same with with ansi-term.
+
+00:00:48.321 --> 00:00:51.520
+Well, we already see the difference.
+
+00:00:51.520 --> 00:00:53.039
+So I will use this time to tell you
+
+00:00:53.039 --> 00:00:56.320
+what's different, and what is vterm exactly.
+
+00:00:56.321 --> 00:00:58.399
+vterm is a terminal emulator
+
+00:00:58.400 --> 00:01:00.800
+built on top of an external library.
+
+00:01:00.801 --> 00:01:02.719
+The library is called libvterm,
+
+00:01:02.719 --> 00:01:05.519
+and is the same library used by Newton
+
+00:01:05.519 --> 00:01:07.200
+for their own terminal emulator.
+
+00:01:07.200 --> 00:01:10.799
+It's a C library, and this is what gives us
+
+00:01:10.799 --> 00:01:15.119
+a lot of good features. First, the speed.
+
+00:01:15.119 --> 00:01:17.119
+Time spent here, 0.6, is essentially
+
+00:01:17.120 --> 00:01:18.479
+the time that it takes to:
+
+00:01:18.479 --> 00:01:22.240
+1. convert the Emacs representation of text
+
+00:01:22.241 --> 00:01:25.040
+into the vterm representation of what is a string,
+
+00:01:25.041 --> 00:01:27.360
+and 2., into actually displaying that,
+
+00:01:27.361 --> 00:01:29.520
+and that can take time
+
+00:01:29.520 --> 00:01:32.240
+if there's fontification involved.
+
+00:01:32.241 --> 00:01:34.240
+So these are the 0.6 seconds there.
+
+00:01:34.240 --> 00:01:38.479
+As we say, in ansi-term, that's much more time.
+
+00:01:38.480 --> 00:01:40.720
+It's much slower. So the terminal will feel
+
+00:01:40.721 --> 00:01:42.880
+much snappier, much faster.
+
+00:01:42.880 --> 00:01:46.720
+But that's not the main benefit or the only benefit
+
+00:01:46.721 --> 00:01:49.759
+of using this external library vterm.
+
+00:01:49.760 --> 00:01:53.040
+The second big benefit is that
+
+00:01:53.041 --> 00:01:56.560
+vterm has support for all the escape codes
+
+00:01:56.560 --> 00:01:58.320
+that xterm has support for,
+
+00:01:58.321 --> 00:02:01.119
+so vterm is essentially as running xterm
+
+00:02:01.119 --> 00:02:03.600
+inside an Emacs buffer. So let's see that.
+
+00:02:03.600 --> 00:02:05.759
+For example, let's start by looking
+
+00:02:05.760 --> 00:02:08.239
+at the support for colors.
+
+00:02:08.239 --> 00:02:10.319
+We have support for all the colors out of the box.
+
+00:02:10.320 --> 00:02:11.840
+We don't have to do anything.
+
+00:02:11.840 --> 00:02:14.720
+And if we did the same here, well,
+
+00:02:14.721 --> 00:02:16.800
+we have only 20 colors.
+
+00:02:16.801 --> 00:02:18.239
+There's a way to get all the colors,
+
+00:02:18.240 --> 00:02:19.680
+but it's much more involved.
+
+00:02:19.680 --> 00:02:23.040
+But this is not where vterm shines.
+
+00:02:23.040 --> 00:02:27.200
+We can run all the commands that we want.
+
+00:02:27.200 --> 00:02:31.440
+htop, ncdu, everything runs here.
+
+00:02:31.441 --> 00:02:35.519
+Also this title, it's a fairly complicated
+
+00:02:35.520 --> 00:02:37.920
+manipulation of the window
+
+00:02:37.921 --> 00:02:40.879
+and it will not work here.
+
+00:02:40.879 --> 00:02:42.000
+It just doesn't work actually.
+
+00:02:42.001 --> 00:02:46.160
+Now the terminal is probably messed up. Yes.
+
+00:02:46.161 --> 00:02:48.400
+So using this external library
+
+00:02:48.400 --> 00:02:50.959
+removes the burden from the developers
+
+00:02:50.959 --> 00:02:52.319
+of having to implement support
+
+00:02:52.320 --> 00:02:53.280
+for all the escape codes.
+
+00:02:53.281 --> 00:02:55.360
+We just use those.
+
+00:02:55.360 --> 00:02:58.480
+So in many ways, running vterm
+
+00:02:58.480 --> 00:03:01.760
+is running xterm inside Emacs,
+
+00:03:01.760 --> 00:03:04.159
+but it's better than that because,
+
+00:03:04.160 --> 00:03:05.840
+since this is an Emacs buffer,
+
+00:03:05.840 --> 00:03:09.760
+we can enjoy a lot of features from Emacs
+
+00:03:09.760 --> 00:03:11.360
+as well as a tighter integration
+
+00:03:11.361 --> 00:03:13.200
+with Emacs itself.
+
+00:03:13.200 --> 00:03:15.840
+For example, as you see here,
+
+00:03:15.841 --> 00:03:20.239
+the title of my buffer is from the directory I'm in.
+
+00:03:20.240 --> 00:03:21.760
+So let's go to my tmp.
+
+00:03:21.760 --> 00:03:23.440
+The title will change.
+
+00:03:23.441 --> 00:03:25.920
+So there's information being exchanged
+
+00:03:25.921 --> 00:03:28.000
+between vterm and Emacs.
+
+00:03:28.000 --> 00:03:30.000
+And of course, the title is not the only place
+
+00:03:30.001 --> 00:03:32.000
+where information is exchanged.
+
+00:03:32.000 --> 00:03:35.920
+I can find a file and I will be in the directory
+
+00:03:35.920 --> 00:03:37.680
+where my terminal is.
+
+00:03:37.681 --> 00:03:40.000
+This feature is also available in ansi-term,
+
+00:03:40.000 --> 00:03:41.360
+and it works also on vterm,
+
+00:03:41.361 --> 00:03:43.440
+and it follows me. So if I go to tmp,
+
+00:03:43.441 --> 00:03:44.720
+I'll get the tmp.
+
+00:03:44.720 --> 00:03:47.120
+If I ssh to a remote server,
+
+00:03:47.121 --> 00:03:50.239
+it will work also on remote servers as well,
+
+00:03:50.240 --> 00:03:53.920
+which is a very nice way to edit files remotely
+
+00:03:53.920 --> 00:03:55.599
+while we're working on a shell.
+
+00:03:55.600 --> 00:03:59.280
+And second, while vterm is not an Elisp interpreter
+
+00:03:59.281 --> 00:04:01.200
+like eshell, what we can do is
+
+00:04:01.201 --> 00:04:04.720
+we can still run Emacs functions.
+
+00:04:04.721 --> 00:04:06.080
+So for example...
+
+00:04:06.081 --> 00:04:08.000
+that requires some configuration.
+
+00:04:08.001 --> 00:04:11.599
+vterm command (message "hi")
+
+00:04:11.600 --> 00:04:13.120
+as you see there's a "hi" here.
+
+00:04:13.121 --> 00:04:14.959
+So what I'm doing is I'm executing
+
+00:04:14.960 --> 00:04:16.239
+the Elisp function hi.
+
+00:04:16.239 --> 00:04:18.959
+I can drop that and turn it around,
+
+00:04:18.960 --> 00:04:21.600
+hash function to run Elisp functions.
+
+00:04:21.601 --> 00:04:24.880
+Or another one, find-file, same.
+
+00:04:24.880 --> 00:04:27.360
+We call this feature "message passing,"
+
+00:04:27.361 --> 00:04:30.000
+and it requires some configuration
+
+00:04:30.001 --> 00:04:32.000
+on the Emacs side as well as in the shell side.
+
+00:04:32.000 --> 00:04:33.440
+It's important to stress
+
+00:04:33.441 --> 00:04:35.360
+what's the nature of vterm.
+
+00:04:35.360 --> 00:04:37.919
+For instance, every time I'm sending a key binding,
+
+00:04:37.920 --> 00:04:40.000
+it's not immediately clear if my intention is
+
+00:04:40.001 --> 00:04:41.840
+to send it to the shell or to Emacs.
+
+00:04:41.841 --> 00:04:44.320
+So vterm implements some reasonable defaults,
+
+00:04:44.320 --> 00:04:46.800
+but at the moment it's mainly packaged
+
+00:04:46.800 --> 00:04:49.120
+to display characters on a screen.
+
+00:04:49.120 --> 00:04:50.720
+So for example, if you're using evil,
+
+00:04:50.721 --> 00:04:52.639
+the editing commands in evil
+
+00:04:52.640 --> 00:04:54.080
+will not work immediately.
+
+00:04:54.081 --> 00:04:55.759
+There's some work to be done
+
+00:04:55.759 --> 00:04:58.160
+and integration can be improved on that side,
+
+00:04:58.161 --> 00:05:00.240
+but sometimes we really want this to behave
+
+00:05:00.240 --> 00:05:02.240
+exactly like a Emacs buffer.
+
+00:05:02.240 --> 00:05:03.680
+We want to be able to search.
+
+00:05:03.681 --> 00:05:06.639
+If I try to get it to search,
+
+00:05:06.640 --> 00:05:07.280
+it will not work.
+
+00:05:07.281 --> 00:05:08.400
+I will send it to the shell.
+
+00:05:08.401 --> 00:05:11.919
+So to do that, we enabled vterm copy mode.
+
+00:05:11.920 --> 00:05:14.720
+As you see, copy mode, and now this buffer
+
+00:05:14.721 --> 00:05:17.039
+is essentially a fundamental buffer.
+
+00:05:17.039 --> 00:05:21.120
+I can move around. I can search.
+
+00:05:21.120 --> 00:05:25.520
+So it must have... I can do everything I want.
+
+00:05:25.521 --> 00:05:26.479
+And there are additional features.
+
+00:05:26.480 --> 00:05:30.560
+For example, I can jump around all the prompts.
+
+00:05:30.561 --> 00:05:32.639
+I find this extremely useful,
+
+00:05:32.639 --> 00:05:35.039
+because I can copy updates from my programs.
+
+00:05:35.040 --> 00:05:38.320
+What I always have to do is
+
+00:05:38.321 --> 00:05:41.520
+I have to Google some errors.
+
+00:05:41.521 --> 00:05:43.120
+So what I do is I select that
+
+00:05:43.120 --> 00:05:45.120
+and I have my keybinding in Emacs conf,
+
+00:05:45.121 --> 00:05:48.479
+and I'm Googling what I have to Google.
+
+00:05:48.480 --> 00:05:51.120
+So this is very nice and if I...
+
+00:05:51.121 --> 00:05:52.639
+now that I have selected something,
+
+00:05:52.640 --> 00:05:53.840
+if I just press return,
+
+00:05:53.841 --> 00:05:56.400
+I will go back to my normal editing mode
+
+00:05:56.401 --> 00:06:00.160
+with the text copied, so I can paste it back.
+
+00:06:00.161 --> 00:06:02.720
+So it's a quick way to interact with copy
+
+00:06:02.721 --> 00:06:05.840
+and interact with the output of a buffer.
+
+00:06:05.841 --> 00:06:09.120
+So finally, let's discuss how to actually use vterm.
+
+00:06:09.121 --> 00:06:10.560
+Let's circle back, let's go,
+
+00:06:10.560 --> 00:06:12.400
+and let's look at the GitHub repo
+
+00:06:12.400 --> 00:06:14.000
+where development is happening.
+
+00:06:14.001 --> 00:06:15.520
+vterm is available in MELPA,
+
+00:06:15.520 --> 00:06:17.759
+but since it's leveraging the power
+
+00:06:17.760 --> 00:06:18.960
+of an external module,
+
+00:06:18.960 --> 00:06:20.479
+you must have Emacs compiled
+
+00:06:20.480 --> 00:06:22.000
+with support for modules,
+
+00:06:22.000 --> 00:06:25.600
+and many distros like Ubuntu, Debian,
+
+00:06:25.600 --> 00:06:26.880
+that's not there. So you have to
+
+00:06:26.881 --> 00:06:29.199
+get Emacs with support for modules:
+
+00:06:29.200 --> 00:06:31.360
+compiling or getting images somewhere else.
+
+00:06:31.361 --> 00:06:33.840
+And also, the first time you are going to use this,
+
+00:06:33.840 --> 00:06:38.960
+which works only on Mac or GNU Linux systems,
+
+00:06:38.961 --> 00:06:41.759
+Emacs will try to find and compile this module,
+
+00:06:41.759 --> 00:06:44.240
+so it's important. This requirement is important.
+
+00:06:44.241 --> 00:06:46.400
+If you're using Windows, well,
+
+00:06:46.401 --> 00:06:49.199
+it's not available and will not work.
+
+00:06:49.199 --> 00:06:53.440
+So to conclude, I want to just advertise this page.
+
+00:06:53.440 --> 00:06:56.240
+If you have problems, look at the issues
+
+00:06:56.240 --> 00:06:58.240
+and open an issue in case.
+
+00:06:58.241 --> 00:06:59.199
+We'll try to help you.
+
+00:06:59.200 --> 00:07:00.800
+We are very excited about vterm,
+
+00:07:00.800 --> 00:07:02.639
+and I think it's a transformative
+
+00:07:02.639 --> 00:07:10.319
+terminal experience inside GNU Emacs.
diff --git a/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt
new file mode 100644
index 00000000..c9477c2d
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--30-a-tour-of-vterm--questions--gabriele-bozzola-sbozzolo-autogen.vtt
@@ -0,0 +1,385 @@
+WEBVTT
+
+00:00:01.520 --> 00:00:03.360
+okay I mean can you hear me yep I can
+
+00:00:03.360 --> 00:00:05.279
+hear you can you hear me
+
+00:00:05.279 --> 00:00:07.200
+yes perfect so gabrielle uh if you want
+
+00:00:07.200 --> 00:00:08.480
+to start answering questions and by the
+
+00:00:08.480 --> 00:00:09.280
+way people for the
+
+00:00:09.280 --> 00:00:10.880
+for the stream I'm actually on a phone
+
+00:00:10.880 --> 00:00:12.400
+call right now so the quality might be a
+
+00:00:12.400 --> 00:00:13.360
+little bad
+
+00:00:13.360 --> 00:00:17.199
+but we're trying our best
+
+00:00:17.199 --> 00:00:20.480
+hello uh thanks for attending my talk
+
+00:00:20.480 --> 00:00:22.800
+I see four questions on the user product
+
+00:00:22.800 --> 00:00:24.000
+I'm going to answer
+
+00:00:24.000 --> 00:00:27.039
+them okay so the first one is
+
+00:00:27.039 --> 00:00:29.039
+can you put your test space from up
+
+00:00:29.039 --> 00:00:31.119
+somewhere uh yes they're very simple
+
+00:00:31.119 --> 00:00:31.840
+skips
+
+00:00:31.840 --> 00:00:33.680
+uh I'll find a way to distribute them
+
+00:00:33.680 --> 00:00:35.520
+somehow
+
+00:00:35.520 --> 00:00:37.600
+that's so that's an easy one the second
+
+00:00:37.600 --> 00:00:38.800
+one is more difficult it's more
+
+00:00:38.800 --> 00:00:40.559
+difficult it's the differences between
+
+00:00:40.559 --> 00:00:44.320
+e shell and v term so I did very basic
+
+00:00:44.320 --> 00:00:47.360
+level the main difference is that v
+
+00:00:47.360 --> 00:00:50.399
+term is implemented with
+
+00:00:50.399 --> 00:00:52.800
+as a bridge between Emacs and an
+
+00:00:52.800 --> 00:00:53.840
+external library
+
+00:00:53.840 --> 00:00:56.079
+which means that most of the code base
+
+00:00:56.079 --> 00:00:57.039
+is actually c
+
+00:00:57.039 --> 00:01:00.320
+it's not easy uh this is is a critical
+
+00:01:00.320 --> 00:01:01.280
+difference
+
+00:01:01.280 --> 00:01:03.760
+uh in terms of performance in terms of
+
+00:01:03.760 --> 00:01:04.320
+speed
+
+00:01:04.320 --> 00:01:06.960
+and all the other uh features that we
+
+00:01:06.960 --> 00:01:07.360
+can
+
+00:01:07.360 --> 00:01:10.400
+inherit from this library so vterm
+
+00:01:10.400 --> 00:01:13.119
+is similar to a real terminal it's not
+
+00:01:13.119 --> 00:01:13.600
+as
+
+00:01:13.600 --> 00:01:15.840
+uh it's not like a shell it's a real
+
+00:01:15.840 --> 00:01:17.040
+terminal emulator
+
+00:01:17.040 --> 00:01:19.600
+that can actually uh display but
+
+00:01:19.600 --> 00:01:20.479
+manipulate the
+
+00:01:20.479 --> 00:01:22.960
+terminal in pretty much any way whereas
+
+00:01:22.960 --> 00:01:23.520
+isha
+
+00:01:23.520 --> 00:01:25.759
+is simply a way to interact with your
+
+00:01:25.759 --> 00:01:26.640
+system
+
+00:01:26.640 --> 00:01:29.680
+in the data page we have a more
+
+00:01:29.680 --> 00:01:31.840
+complete discussion about this topic and
+
+00:01:31.840 --> 00:01:33.520
+where we compare v-terms with e-shell
+
+00:01:33.520 --> 00:01:34.799
+with shell with nc
+
+00:01:34.799 --> 00:01:38.720
+term as well I think so
+
+00:01:38.720 --> 00:01:40.640
+I think just to conclude this I think
+
+00:01:40.640 --> 00:01:42.000
+eshell and v term
+
+00:01:42.000 --> 00:01:44.079
+are somehow orthogonal in the sense that
+
+00:01:44.079 --> 00:01:45.280
+v3 is before a
+
+00:01:45.280 --> 00:01:46.880
+full complete terminal experience
+
+00:01:46.880 --> 00:01:49.439
+whereas isil is more for specific tasks
+
+00:01:49.439 --> 00:01:50.240
+of this
+
+00:01:50.240 --> 00:01:53.280
+uh which are not like terminal uh
+
+00:01:53.280 --> 00:01:55.759
+interfaces you know like page stock this
+
+00:01:55.759 --> 00:01:56.799
+kind of stuff
+
+00:01:56.799 --> 00:01:59.759
+uh the next question is uh is there a
+
+00:01:59.759 --> 00:02:01.200
+plan to avoid compilation of the initial
+
+00:02:01.200 --> 00:02:02.560
+completion steps
+
+00:02:02.560 --> 00:02:05.759
+so since the term is based on again
+
+00:02:05.759 --> 00:02:08.000
+on an external module we need to combine
+
+00:02:08.000 --> 00:02:08.800
+this module
+
+00:02:08.800 --> 00:02:10.800
+and we're using the dynamic module
+
+00:02:10.800 --> 00:02:11.920
+system to
+
+00:02:11.920 --> 00:02:13.920
+be able to interface with this module
+
+00:02:13.920 --> 00:02:16.239
+and this requires
+
+00:02:16.239 --> 00:02:18.879
+us to compile the module at least the
+
+00:02:18.879 --> 00:02:20.160
+very first time you start
+
+00:02:20.160 --> 00:02:23.920
+the I don't think we can do
+
+00:02:23.920 --> 00:02:26.720
+without that in the near future we need
+
+00:02:26.720 --> 00:02:28.480
+to compile this
+
+00:02:28.480 --> 00:02:31.599
+and we must there's no way around
+
+00:02:31.599 --> 00:02:33.360
+if we cannot simply distribute the
+
+00:02:33.360 --> 00:02:37.440
+module um
+
+00:02:37.440 --> 00:02:39.519
+if you want to think very long term
+
+00:02:39.519 --> 00:02:40.480
+maybe
+
+00:02:40.480 --> 00:02:42.959
+uh but I think there's no current plan
+
+00:02:42.959 --> 00:02:43.599
+to
+
+00:02:43.599 --> 00:02:45.760
+avoid the compilation as the very first
+
+00:02:45.760 --> 00:02:47.280
+step the first time you
+
+00:02:47.280 --> 00:02:50.400
+uh run vtor however all the subsequent
+
+00:02:50.400 --> 00:02:50.959
+times
+
+00:02:50.959 --> 00:02:54.720
+you will not have to compile peter um
+
+00:02:54.720 --> 00:02:57.840
+so for question four it's uh I have a
+
+00:02:57.840 --> 00:02:58.720
+nice looking problem
+
+00:02:58.720 --> 00:03:01.920
+thanks uh and if
+
+00:03:01.920 --> 00:03:04.159
+there's a git repo where you can see it
+
+00:03:04.159 --> 00:03:05.599
+or something like that
+
+00:03:05.599 --> 00:03:08.560
+so if you go to my github repo I have
+
+00:03:08.560 --> 00:03:09.760
+adobe files
+
+00:03:09.760 --> 00:03:12.560
+repo but look at that it's terrible it's
+
+00:03:12.560 --> 00:03:13.840
+super updated
+
+00:03:13.840 --> 00:03:16.800
+so I've been meaning to polish it for
+
+00:03:16.800 --> 00:03:17.519
+like years
+
+00:03:17.519 --> 00:03:20.080
+and I haven't got it so don't look at it
+
+00:03:20.080 --> 00:03:21.760
+my font is actually extremely simple
+
+00:03:21.760 --> 00:03:25.200
+I think it's the pure prompt from uh zsh
+
+00:03:25.200 --> 00:03:26.640
+or fish depending
+
+00:03:26.640 --> 00:03:28.799
+uh and I think I didn't do anything but
+
+00:03:28.799 --> 00:03:30.640
+like maybe tweaking the colors a little
+
+00:03:30.640 --> 00:03:31.360
+bit
+
+00:03:31.360 --> 00:03:33.280
+okay gabriel just sorry to interject if
+
+00:03:33.280 --> 00:03:35.519
+you could just take one more question
+
+00:03:35.519 --> 00:03:37.120
+yes the last question is already the
+
+00:03:37.120 --> 00:03:39.440
+answer which is uh will it work with
+
+00:03:39.440 --> 00:03:42.480
+e max terminal so minus and w and answer
+
+00:03:42.480 --> 00:03:44.480
+yes it works without any problem with
+
+00:03:44.480 --> 00:03:46.239
+imax terminal so you can run a terminal
+
+00:03:46.239 --> 00:03:47.760
+inside image inside of terminal
+
+00:03:47.760 --> 00:03:49.680
+and you can continue paying up as much
+
+00:03:49.680 --> 00:03:51.200
+as you want okay
+
+00:03:51.200 --> 00:03:53.920
+I think that's it explain the question
+
+00:03:53.920 --> 00:03:56.239
+oh sorry thank you
+
+00:03:56.239 --> 00:03:59.760
+thanks for attending this talk
+
+00:03:59.760 --> 00:04:01.519
+well thank you so much for giving it so
+
+00:04:01.519 --> 00:04:03.360
+I'm in back to you
+
+00:04:03.360 --> 00:04:07.280
+you are now unmuted thank you very much
+
+00:04:07.280 --> 00:04:09.519
+to gabrielle for the awesome talk and
+
+00:04:09.519 --> 00:04:11.200
+for taking live questions
+
+00:04:11.200 --> 00:04:14.319
+and also many thanks to leo for getting
+
+00:04:14.319 --> 00:04:15.200
+through to gabriel
+
+00:04:15.200 --> 00:04:18.720
+via phone in the face of gabriel having
+
+00:04:18.720 --> 00:04:20.720
+technical difficulties
+
+00:04:20.720 --> 00:04:24.160
+with using big blue button
diff --git a/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt b/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt
new file mode 100644
index 00000000..b3feac2d
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt
@@ -0,0 +1,859 @@
+WEBVTT
+
+00:00:10.480 --> 00:00:11.519
+hello relatives
+
+00:00:11.519 --> 00:00:15.040
+grant shangri is what they call me
+
+00:00:15.040 --> 00:00:18.960
+and all of you I gladly take your hand
+
+00:00:18.960 --> 00:00:22.160
+and shake it um
+
+00:00:22.160 --> 00:00:26.240
+greetings everyone
+
+00:00:26.240 --> 00:00:28.560
+today I'm going to talk about lakota
+
+00:00:28.560 --> 00:00:30.480
+language and Emacs and how
+
+00:00:30.480 --> 00:00:33.680
+free software and Emacs empowered me to
+
+00:00:33.680 --> 00:00:36.000
+write on the computer in the language of
+
+00:00:36.000 --> 00:00:39.520
+my ancestors
+
+00:00:39.520 --> 00:00:42.640
+um start off the look with the story of
+
+00:00:42.640 --> 00:00:45.760
+lakotiappi the lakota language
+
+00:00:45.760 --> 00:00:48.800
+the lakota dakota dialect area
+
+00:00:48.800 --> 00:00:52.160
+for those of you who you don't know
+
+00:00:52.160 --> 00:00:55.600
+the lakota dakota people are also known
+
+00:00:55.600 --> 00:00:56.840
+as the sioux
+
+00:00:56.840 --> 00:00:59.760
+and the tribes cover an
+
+00:00:59.760 --> 00:01:03.120
+area of roughly 10 us states and parts
+
+00:01:03.120 --> 00:01:05.199
+of canada and so this language is
+
+00:01:05.199 --> 00:01:08.479
+spoken over a wide range of of
+
+00:01:08.479 --> 00:01:11.520
+area
+
+00:01:11.520 --> 00:01:14.400
+however the us government policy
+
+00:01:14.400 --> 00:01:16.640
+directly tried to silence this language
+
+00:01:16.640 --> 00:01:18.640
+my father was taken to a boarding school
+
+00:01:18.640 --> 00:01:20.960
+and was punished for speaking
+
+00:01:20.960 --> 00:01:23.280
+his native language and so he didn't
+
+00:01:23.280 --> 00:01:25.119
+teach it to his children
+
+00:01:25.119 --> 00:01:28.880
+several generations of lakota and dakota
+
+00:01:28.880 --> 00:01:29.600
+people
+
+00:01:29.600 --> 00:01:31.600
+and other tribes all over the country
+
+00:01:31.600 --> 00:01:32.640
+lost
+
+00:01:32.640 --> 00:01:34.560
+lost their first language their native
+
+00:01:34.560 --> 00:01:38.320
+language so today only around 2000
+
+00:01:38.320 --> 00:01:41.040
+first first language native speakers are
+
+00:01:41.040 --> 00:01:43.119
+speaking lakota
+
+00:01:43.119 --> 00:01:44.960
+however there's language recovery
+
+00:01:44.960 --> 00:01:47.600
+projects that are empowering
+
+00:01:47.600 --> 00:01:49.759
+second language learners like myself to
+
+00:01:49.759 --> 00:01:51.720
+teach it to the new generation of
+
+00:01:51.720 --> 00:01:54.479
+children um
+
+00:01:54.479 --> 00:01:57.119
+which brings me to my story um I grew up
+
+00:01:57.119 --> 00:01:58.000
+without knowing
+
+00:01:58.000 --> 00:02:00.880
+my heritage um I didn't know who my
+
+00:02:00.880 --> 00:02:01.520
+father was
+
+00:02:01.520 --> 00:02:04.719
+both my parents were white um
+
+00:02:04.719 --> 00:02:07.119
+I discovered my biological family in
+
+00:02:07.119 --> 00:02:08.720
+around 2015
+
+00:02:08.720 --> 00:02:12.160
+was kind of a shock to me up until that
+
+00:02:12.160 --> 00:02:13.840
+point probably the only time I'd heard
+
+00:02:13.840 --> 00:02:15.520
+the lakota language was in
+
+00:02:15.520 --> 00:02:18.720
+the movie dances with wolves possibly
+
+00:02:18.720 --> 00:02:20.720
+some other times
+
+00:02:20.720 --> 00:02:24.160
+around nebraska I'd heard it um but
+
+00:02:24.160 --> 00:02:27.200
+even myself growing up you know pretty
+
+00:02:27.200 --> 00:02:28.319
+close to
+
+00:02:28.319 --> 00:02:30.560
+to lakota people and other native
+
+00:02:30.560 --> 00:02:32.239
+american people
+
+00:02:32.239 --> 00:02:34.560
+american indian people I kind of thought
+
+00:02:34.560 --> 00:02:36.640
+it was just dead I thought the language
+
+00:02:36.640 --> 00:02:39.760
+was not alive anymore um
+
+00:02:39.760 --> 00:02:42.000
+but in 2016 my daughter began her
+
+00:02:42.000 --> 00:02:43.920
+journey into this world and I
+
+00:02:43.920 --> 00:02:46.720
+I was doing a lot of searching to find
+
+00:02:46.720 --> 00:02:48.239
+out like what could I do
+
+00:02:48.239 --> 00:02:50.560
+you know not knowing my family not
+
+00:02:50.560 --> 00:02:51.920
+knowing my culture
+
+00:02:51.920 --> 00:02:54.080
+what could I do to try to bring that
+
+00:02:54.080 --> 00:02:55.280
+into our life
+
+00:02:55.280 --> 00:02:58.640
+um and so I found out about these
+
+00:02:58.640 --> 00:03:00.720
+lakota classes that were happening I
+
+00:03:00.720 --> 00:03:02.720
+went up to standing rock
+
+00:03:02.720 --> 00:03:04.560
+in north dakota and attended the lakota
+
+00:03:04.560 --> 00:03:06.640
+summer institute for three weeks
+
+00:03:06.640 --> 00:03:08.480
+and began my journey to learn the
+
+00:03:08.480 --> 00:03:09.680
+language so I can
+
+00:03:09.680 --> 00:03:13.120
+try to pass it on so
+
+00:03:13.120 --> 00:03:16.560
+this brings us to Emacs
+
+00:03:16.560 --> 00:03:19.200
+I could talk a lot more about my story
+
+00:03:19.200 --> 00:03:20.959
+I'm sure there's a lot to say
+
+00:03:20.959 --> 00:03:24.640
+but we're here to talk about Emacs um
+
+00:03:24.640 --> 00:03:26.319
+I was already a free software user at
+
+00:03:26.319 --> 00:03:29.040
+the time and at the lakota language
+
+00:03:29.040 --> 00:03:31.440
+uh institute they they were they're
+
+00:03:31.440 --> 00:03:33.280
+giving us software there's a dictionary
+
+00:03:33.280 --> 00:03:34.879
+you could get on android
+
+00:03:34.879 --> 00:03:37.360
+um there was a keyboard for android that
+
+00:03:37.360 --> 00:03:38.560
+you could type with
+
+00:03:38.560 --> 00:03:41.760
+they had keyboard input methods for mac
+
+00:03:41.760 --> 00:03:44.959
+and windows but I'm a linux user free
+
+00:03:44.959 --> 00:03:46.720
+software user
+
+00:03:46.720 --> 00:03:49.280
+so I didn't have access to those things
+
+00:03:49.280 --> 00:03:49.760
+as
+
+00:03:49.760 --> 00:03:53.120
+as easily as I could and I do a lot of
+
+00:03:53.120 --> 00:03:55.280
+my thinking and note taking in Emacs and
+
+00:03:55.280 --> 00:03:57.280
+in org mode
+
+00:03:57.280 --> 00:04:01.200
+and so being able to to write this
+
+00:04:01.200 --> 00:04:04.640
+to to um to write things down to type
+
+00:04:04.640 --> 00:04:07.680
+on my own computer uh was was pretty
+
+00:04:07.680 --> 00:04:08.720
+important to me
+
+00:04:08.720 --> 00:04:11.360
+and I wasn't much of an emax hacker yet
+
+00:04:11.360 --> 00:04:12.799
+at the time I had
+
+00:04:12.799 --> 00:04:15.519
+barely done anything mostly just you
+
+00:04:15.519 --> 00:04:16.720
+know hacked on my
+
+00:04:16.720 --> 00:04:20.479
+config file but this was a real
+
+00:04:20.479 --> 00:04:23.600
+chance for me to experience
+
+00:04:23.600 --> 00:04:27.280
+the the benefits of free software first
+
+00:04:27.280 --> 00:04:30.400
+hand and not just to benefit myself but
+
+00:04:30.400 --> 00:04:34.080
+to potentially benefit
+
+00:04:34.080 --> 00:04:36.080
+everyone anyone interested in learning
+
+00:04:36.080 --> 00:04:39.120
+this language
+
+00:04:39.120 --> 00:04:42.880
+so Emacs and
+
+00:04:42.880 --> 00:04:44.880
+that free software philosophy really
+
+00:04:44.880 --> 00:04:47.520
+empowered me so I began digging in
+
+00:04:47.520 --> 00:04:49.840
+um I looked I began reading the the
+
+00:04:49.840 --> 00:04:51.520
+manual more closely
+
+00:04:51.520 --> 00:04:53.680
+as an american I'm I'm sad to say
+
+00:04:53.680 --> 00:04:55.440
+there's not a lot of
+
+00:04:55.440 --> 00:04:58.479
+other languages spoken or written where
+
+00:04:58.479 --> 00:05:00.160
+I'm from
+
+00:05:00.160 --> 00:05:02.240
+so it's not common that I that I have to
+
+00:05:02.240 --> 00:05:04.720
+think about this with computers
+
+00:05:04.720 --> 00:05:07.600
+I know international people you know
+
+00:05:07.600 --> 00:05:09.120
+have had to come up with
+
+00:05:09.120 --> 00:05:11.280
+with interesting ways to to enter their
+
+00:05:11.280 --> 00:05:12.160
+text
+
+00:05:12.160 --> 00:05:14.800
+and Emacs is probably a pioneer in that
+
+00:05:14.800 --> 00:05:16.320
+I I'd like to know more about the
+
+00:05:16.320 --> 00:05:17.520
+history of this but
+
+00:05:17.520 --> 00:05:19.840
+there's a whole section in the manual on
+
+00:05:19.840 --> 00:05:22.160
+international Emacs
+
+00:05:22.160 --> 00:05:23.840
+and I began reading this and I was
+
+00:05:23.840 --> 00:05:25.440
+talking about
+
+00:05:25.440 --> 00:05:28.000
+different input methods and and how many
+
+00:05:28.000 --> 00:05:29.759
+different languages were supported and
+
+00:05:29.759 --> 00:05:31.680
+how you could enter the text and how it
+
+00:05:31.680 --> 00:05:33.680
+supports the different characters and so
+
+00:05:33.680 --> 00:05:34.560
+on
+
+00:05:34.560 --> 00:05:36.639
+um I even noticed a few languages
+
+00:05:36.639 --> 00:05:38.880
+support several input methods
+
+00:05:38.880 --> 00:05:41.840
+that became important for me later on as
+
+00:05:41.840 --> 00:05:43.440
+I was working on this
+
+00:05:43.440 --> 00:05:45.280
+many many languages are already
+
+00:05:45.280 --> 00:05:46.720
+supported so
+
+00:05:46.720 --> 00:05:48.479
+those of you who haven't looked into
+
+00:05:48.479 --> 00:05:50.080
+this yet if you press
+
+00:05:50.080 --> 00:05:52.639
+control backslash it will open up a
+
+00:05:52.639 --> 00:05:53.680
+selection menu
+
+00:05:53.680 --> 00:05:57.039
+for you to to select um
+
+00:05:57.039 --> 00:05:59.120
+your input method and you can there's
+
+00:05:59.120 --> 00:06:01.440
+207 listed here
+
+00:06:01.440 --> 00:06:03.120
+that's including the two that I've
+
+00:06:03.120 --> 00:06:04.639
+contributed
+
+00:06:04.639 --> 00:06:09.199
+um so 205 on on a vanilla Emacs
+
+00:06:09.199 --> 00:06:11.120
+so that's a lot of languages supported
+
+00:06:11.120 --> 00:06:13.840
+by emac Emacs but there's so many more
+
+00:06:13.840 --> 00:06:17.440
+that could be um and since Emacs is free
+
+00:06:17.440 --> 00:06:19.280
+software and it is what it is I knew
+
+00:06:19.280 --> 00:06:20.000
+that defining
+
+00:06:20.000 --> 00:06:22.639
+a new input method was surely possible
+
+00:06:22.639 --> 00:06:23.039
+um
+
+00:06:23.039 --> 00:06:25.440
+unfortunately the the manual didn't
+
+00:06:25.440 --> 00:06:27.120
+describe it directly or at least I
+
+00:06:27.120 --> 00:06:28.800
+didn't pick it up so
+
+00:06:28.800 --> 00:06:30.960
+um you know the new emax hacker that I
+
+00:06:30.960 --> 00:06:32.319
+was I
+
+00:06:32.319 --> 00:06:34.880
+I timidly dove down into the source code
+
+00:06:34.880 --> 00:06:37.360
+and discovered the quail package
+
+00:06:37.360 --> 00:06:40.479
+um so back in the day apparently there
+
+00:06:40.479 --> 00:06:40.960
+was
+
+00:06:40.960 --> 00:06:44.560
+mule which is like the
+
+00:06:44.560 --> 00:06:47.360
+multi I don't I don't know it stood for
+
+00:06:47.360 --> 00:06:48.000
+something about
+
+00:06:48.000 --> 00:06:50.160
+language environments and and it has
+
+00:06:50.160 --> 00:06:51.759
+evolved
+
+00:06:51.759 --> 00:06:54.960
+and at some point um some japanese
+
+00:06:54.960 --> 00:06:58.000
+uh coders created an input method called
+
+00:06:58.000 --> 00:06:59.039
+tamago
+
+00:06:59.039 --> 00:07:03.599
+which means egg in japanese and uh
+
+00:07:03.599 --> 00:07:06.720
+tamago evolved into quail and they
+
+00:07:06.720 --> 00:07:08.800
+in the comments you can see they talk
+
+00:07:08.800 --> 00:07:10.720
+about how the quail egg is eaten in
+
+00:07:10.720 --> 00:07:12.800
+japan it's a smaller thing and
+
+00:07:12.800 --> 00:07:15.280
+the quail mode is like a nicer version
+
+00:07:15.280 --> 00:07:16.960
+of tamago I guess and
+
+00:07:16.960 --> 00:07:19.039
+there's a pun saying they hoped it would
+
+00:07:19.039 --> 00:07:22.639
+egg people on to create more input modes
+
+00:07:22.639 --> 00:07:26.240
+and quail is quite nice I looked into it
+
+00:07:26.240 --> 00:07:28.479
+and there's basically two things you use
+
+00:07:28.479 --> 00:07:30.720
+quail defined package and quail define
+
+00:07:30.720 --> 00:07:32.240
+rules
+
+00:07:32.240 --> 00:07:36.080
+so quail defined package
+
+00:07:36.080 --> 00:07:38.960
+you can see here is a function it's
+
+00:07:38.960 --> 00:07:41.759
+probably a macro that takes a name
+
+00:07:41.759 --> 00:07:43.599
+a language a title and some optional
+
+00:07:43.599 --> 00:07:44.879
+stuff which
+
+00:07:44.879 --> 00:07:48.319
+I didn't really have to deal with
+
+00:07:48.319 --> 00:07:50.479
+define name is a new quail package for
+
+00:07:50.479 --> 00:07:52.400
+input language title is a string to be
+
+00:07:52.400 --> 00:07:52.879
+split
+
+00:07:52.879 --> 00:07:54.400
+at the mode line to indicate this
+
+00:07:54.400 --> 00:07:57.120
+package
+
+00:07:57.120 --> 00:08:00.879
+so I began trying to do lakota input now
+
+00:08:00.879 --> 00:08:03.039
+this is a whole thing on its own because
+
+00:08:03.039 --> 00:08:04.240
+the lakota language
+
+00:08:04.240 --> 00:08:07.680
+was never written um
+
+00:08:07.680 --> 00:08:10.800
+pre-contact and post contact
+
+00:08:10.800 --> 00:08:12.879
+like there's several attempts at writing
+
+00:08:12.879 --> 00:08:14.800
+it and different orthographies
+
+00:08:14.800 --> 00:08:16.960
+and there's drama around all of this
+
+00:08:16.960 --> 00:08:19.360
+stuff
+
+00:08:19.360 --> 00:08:21.120
+it's pretty common to have drama going
+
+00:08:21.120 --> 00:08:24.160
+on in any american indian stuff
+
+00:08:24.160 --> 00:08:26.560
+going on so as I was doing this I
+
+00:08:26.560 --> 00:08:28.479
+started with the suggested lakota
+
+00:08:28.479 --> 00:08:29.680
+orthography which
+
+00:08:29.680 --> 00:08:32.880
+is actually called by its authors the
+
+00:08:32.880 --> 00:08:35.680
+the standard lakota orthography but its
+
+00:08:35.680 --> 00:08:36.959
+authors are
+
+00:08:36.959 --> 00:08:40.880
+um are european
+
+00:08:40.880 --> 00:08:43.039
+um the main author is a man named jan
+
+00:08:43.039 --> 00:08:45.040
+ulrich and I appreciate all his work and
+
+00:08:45.040 --> 00:08:46.160
+I'm grateful for
+
+00:08:46.160 --> 00:08:49.360
+the materials he's made available but um
+
+00:08:49.360 --> 00:08:51.040
+it's a little bit problematic because
+
+00:08:51.040 --> 00:08:54.160
+it's not an orthography created by
+
+00:08:54.160 --> 00:08:56.720
+our people by lakota people so there's
+
+00:08:56.720 --> 00:08:57.920
+another one called the white hat
+
+00:08:57.920 --> 00:09:00.080
+orthography which is created by albert
+
+00:09:00.080 --> 00:09:01.839
+whitehat who's a teacher
+
+00:09:01.839 --> 00:09:04.480
+um from the chichanguk tribe so I
+
+00:09:04.480 --> 00:09:05.360
+created two
+
+00:09:05.360 --> 00:09:08.640
+and thankfully emax lets me do that so
+
+00:09:08.640 --> 00:09:10.720
+it's pretty simple quail defined package
+
+00:09:10.720 --> 00:09:11.680
+I just
+
+00:09:11.680 --> 00:09:13.279
+say the package I want and then all
+
+00:09:13.279 --> 00:09:15.360
+these nils and t's for options I don't
+
+00:09:15.360 --> 00:09:16.480
+actually know what they mean but it
+
+00:09:16.480 --> 00:09:18.240
+works
+
+00:09:18.240 --> 00:09:20.240
+I could look it up and then quail define
+
+00:09:20.240 --> 00:09:22.640
+rules just defines mappings from ascii
+
+00:09:22.640 --> 00:09:23.600
+keys to
+
+00:09:23.600 --> 00:09:26.640
+the the text you want to put in so
+
+00:09:26.640 --> 00:09:29.680
+for this one there's a nasal n and then
+
+00:09:29.680 --> 00:09:33.600
+a dot and a macron like a wedge shape
+
+00:09:33.600 --> 00:09:36.640
+for marking up the consonants
+
+00:09:36.640 --> 00:09:39.839
+so that one's pretty easy and then the
+
+00:09:39.839 --> 00:09:41.760
+suggested lakota orthography is a little
+
+00:09:41.760 --> 00:09:43.040
+bit more difficult
+
+00:09:43.040 --> 00:09:45.600
+but still pretty easy I just map a
+
+00:09:45.600 --> 00:09:46.800
+sequence of keys
+
+00:09:46.800 --> 00:09:49.760
+a followed by the apostrophe makes the
+
+00:09:49.760 --> 00:09:51.760
+accented vowels so all of those
+
+00:09:51.760 --> 00:09:53.519
+and then again we have the hot checks
+
+00:09:53.519 --> 00:09:55.839
+for the guttural sounds of the language
+
+00:09:55.839 --> 00:09:58.399
+and the nasal end so that's it basically
+
+00:09:58.399 --> 00:09:59.120
+these two
+
+00:09:59.120 --> 00:10:02.480
+definitions allow me to type
+
+00:10:02.480 --> 00:10:06.560
+lakota language in Emacs um
+
+00:10:06.560 --> 00:10:09.279
+and it's great it works great publishing
+
+00:10:09.279 --> 00:10:09.920
+it
+
+00:10:09.920 --> 00:10:11.760
+is another problematic thing I wanted to
+
+00:10:11.760 --> 00:10:13.839
+use free software to do that
+
+00:10:13.839 --> 00:10:16.079
+so the first thing I did was I I posted
+
+00:10:16.079 --> 00:10:17.600
+on sourcehut
+
+00:10:17.600 --> 00:10:19.440
+which is great it's a good alternative
+
+00:10:19.440 --> 00:10:20.959
+for a git forge
+
+00:10:20.959 --> 00:10:22.880
+and I got it published on melba so the
+
+00:10:22.880 --> 00:10:24.000
+lakota input
+
+00:10:24.000 --> 00:10:25.760
+package is available if you'd like to
+
+00:10:25.760 --> 00:10:27.760
+try it out
+
+00:10:27.760 --> 00:10:29.839
+and bandali one of our hosts for the
+
+00:10:29.839 --> 00:10:31.680
+conference is helping me now
+
+00:10:31.680 --> 00:10:33.200
+through the process of committing the
+
+00:10:33.200 --> 00:10:35.279
+code to Emacs
+
+00:10:35.279 --> 00:10:37.120
+because I would like to do that I would
+
+00:10:37.120 --> 00:10:39.279
+like it to be available to everyone
+
+00:10:39.279 --> 00:10:41.680
+through Emacs itself so that anyone who
+
+00:10:41.680 --> 00:10:43.279
+wants to use it just has to download
+
+00:10:43.279 --> 00:10:43.920
+Emacs
+
+00:10:43.920 --> 00:10:46.240
+and there you go you can type lakota
+
+00:10:46.240 --> 00:10:47.120
+language
+
+00:10:47.120 --> 00:10:50.160
+so uh pila maya thank you
+
+00:10:50.160 --> 00:10:53.279
+all for listening and
+
+00:10:53.279 --> 00:10:55.920
+I hope to see you around in our Emacs
+
+00:10:55.920 --> 00:10:58.320
+community
+
+00:10:58.320 --> 00:11:04.720
+uh day
diff --git a/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt b/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt
new file mode 100644
index 00000000..164d8d8d
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--questions--grant-shangreaux-autogen.vtt
@@ -0,0 +1,412 @@
+WEBVTT
+
+00:00:05.120 --> 00:00:05.680
+hello
+
+00:00:05.680 --> 00:00:10.080
+can you hear me yes I can awesome
+
+00:00:10.080 --> 00:00:12.400
+all right so we have a couple minutes
+
+00:00:12.400 --> 00:00:13.200
+and
+
+00:00:13.200 --> 00:00:15.200
+uh it seems a couple questions as well
+
+00:00:15.200 --> 00:00:17.680
+so take it away
+
+00:00:17.680 --> 00:00:20.000
+okay I won't share my screen unless
+
+00:00:20.000 --> 00:00:22.640
+needed um
+
+00:00:22.640 --> 00:00:25.439
+looks like question one advantages
+
+00:00:25.439 --> 00:00:27.599
+advantages of using Emacs input methods
+
+00:00:27.599 --> 00:00:31.119
+over something like x compose
+
+00:00:31.119 --> 00:00:32.559
+well there's a there's a couple things
+
+00:00:32.559 --> 00:00:34.320
+there one is
+
+00:00:34.320 --> 00:00:37.360
+um Emacs is cross platform so
+
+00:00:37.360 --> 00:00:39.520
+writing this input mode for Emacs means
+
+00:00:39.520 --> 00:00:41.520
+if I do end up using
+
+00:00:41.520 --> 00:00:44.559
+a non-free operating system I can still
+
+00:00:44.559 --> 00:00:46.480
+use Emacs I can still type
+
+00:00:46.480 --> 00:00:49.920
+in the way that I would like to um
+
+00:00:49.920 --> 00:00:52.800
+I did look in I don't I actually don't
+
+00:00:52.800 --> 00:00:54.640
+know what x compose is
+
+00:00:54.640 --> 00:00:56.719
+I tried looking for it on my system I
+
+00:00:56.719 --> 00:00:59.680
+could not find it anywhere
+
+00:00:59.680 --> 00:01:02.399
+I did actually go and figure out how to
+
+00:01:02.399 --> 00:01:02.879
+write a
+
+00:01:02.879 --> 00:01:06.080
+x11 keyboard layout so that's also
+
+00:01:06.080 --> 00:01:07.040
+available
+
+00:01:07.040 --> 00:01:09.840
+in the repository that has the Emacs
+
+00:01:09.840 --> 00:01:11.920
+package as well
+
+00:01:11.920 --> 00:01:14.720
+and it is handy to be able to have that
+
+00:01:14.720 --> 00:01:15.920
+so I can type in
+
+00:01:15.920 --> 00:01:21.200
+other applications besides Emacs
+
+00:01:21.200 --> 00:01:24.479
+but the main advantages for Emacs was it
+
+00:01:24.479 --> 00:01:25.119
+was actually
+
+00:01:25.119 --> 00:01:27.439
+much easier to discover and much easier
+
+00:01:27.439 --> 00:01:28.560
+to
+
+00:01:28.560 --> 00:01:31.439
+manipulate and get feedback you know as
+
+00:01:31.439 --> 00:01:33.040
+I was developing it like I could just
+
+00:01:33.040 --> 00:01:35.360
+evaluate the coil package
+
+00:01:35.360 --> 00:01:37.200
+try it out and see if it works when I
+
+00:01:37.200 --> 00:01:39.680
+was trying to do the x11 inputs I'd have
+
+00:01:39.680 --> 00:01:40.560
+to log out
+
+00:01:40.560 --> 00:01:42.799
+read and and relog in again to get
+
+00:01:42.799 --> 00:01:43.759
+things read and
+
+00:01:43.759 --> 00:01:46.240
+it was you know it doesn't have that
+
+00:01:46.240 --> 00:01:46.799
+beautiful
+
+00:01:46.799 --> 00:01:50.560
+interactivity the way that Emacs does so
+
+00:01:50.560 --> 00:01:53.040
+for me it was a good place to start um
+
+00:01:53.040 --> 00:01:54.960
+especially because
+
+00:01:54.960 --> 00:01:56.640
+I had never done anything like this
+
+00:01:56.640 --> 00:01:58.079
+before like developing
+
+00:01:58.079 --> 00:02:00.079
+something that felt low level you know
+
+00:02:00.079 --> 00:02:04.320
+like a keyboard input
+
+00:02:04.320 --> 00:02:06.399
+I hope that answers your question
+
+00:02:06.399 --> 00:02:08.479
+question two can you give us a demo of
+
+00:02:08.479 --> 00:02:09.280
+you typing in
+
+00:02:09.280 --> 00:02:12.400
+either lakota and input method sure
+
+00:02:12.400 --> 00:02:19.599
+um share my screen now
+
+00:02:19.599 --> 00:02:21.520
+of course I always have to select which
+
+00:02:21.520 --> 00:02:32.239
+one
+
+00:02:32.239 --> 00:02:36.560
+okay so control backslash opens the
+
+00:02:36.560 --> 00:02:37.840
+input modes
+
+00:02:37.840 --> 00:02:40.000
+although when you've selected one you
+
+00:02:40.000 --> 00:02:41.920
+have it already so
+
+00:02:41.920 --> 00:02:45.680
+uh yeah wash day
+
+00:02:45.680 --> 00:02:48.319
+that's it is good washed it so this is
+
+00:02:48.319 --> 00:02:50.000
+the suggested lakota
+
+00:02:50.000 --> 00:02:53.360
+orthography or otherwise known as the
+
+00:02:53.360 --> 00:02:56.560
+standard lakota orthography
+
+00:02:56.560 --> 00:02:58.800
+another benefit of doing it in Emacs is
+
+00:02:58.800 --> 00:03:00.640
+that I now get
+
+00:03:00.640 --> 00:03:06.800
+completion on lakota words so
+
+00:03:06.800 --> 00:03:08.800
+so I'm you know it's a second language
+
+00:03:08.800 --> 00:03:10.560
+for me and as I'm trying to learn it
+
+00:03:10.560 --> 00:03:11.440
+it's actually
+
+00:03:11.440 --> 00:03:13.760
+quite useful to have company mode as a
+
+00:03:13.760 --> 00:03:15.599
+bonus um
+
+00:03:15.599 --> 00:03:19.680
+for typing things
+
+00:03:19.680 --> 00:03:22.239
+I can show the other orthography so to
+
+00:03:22.239 --> 00:03:23.599
+to get another one you do
+
+00:03:23.599 --> 00:03:27.200
+the universal input control u backslash
+
+00:03:27.200 --> 00:03:30.560
+and I can try the white hat orthography
+
+00:03:30.560 --> 00:03:36.239
+oh yeah lost
+
+00:03:36.239 --> 00:03:39.760
+what's the command for that you are now
+
+00:03:39.760 --> 00:03:41.440
+unmuted
+
+00:03:41.440 --> 00:03:44.720
+yeah okay you are now muted
+
+00:03:44.720 --> 00:03:48.000
+thank you
+
+00:03:48.000 --> 00:03:52.080
+you are now unmuted you are now muted
+
+00:03:52.080 --> 00:03:55.680
+oops not quite as slick as that other
+
+00:03:55.680 --> 00:03:58.879
+demo we saw the other day
+
+00:03:58.879 --> 00:04:02.799
+okay so control u control backslash I
+
+00:04:02.799 --> 00:04:04.239
+can select a different
+
+00:04:04.239 --> 00:04:07.200
+input method um from the default so if I
+
+00:04:07.200 --> 00:04:10.560
+select white hat I can type
+
+00:04:10.560 --> 00:04:14.480
+wash day like that
+
+00:04:14.480 --> 00:04:18.000
+so it's a different orthography here um
+
+00:04:18.000 --> 00:04:19.919
+I won't go too deeply into that it's
+
+00:04:19.919 --> 00:04:21.440
+hard to think and talk and type all at
+
+00:04:21.440 --> 00:04:23.120
+the same time
+
+00:04:23.120 --> 00:04:26.320
+um I hope that's good
+
+00:04:26.320 --> 00:04:28.560
+I'm happy to do more maybe I'll put up a
+
+00:04:28.560 --> 00:04:31.840
+video of of demonstrating that sometimes
+
+00:04:31.840 --> 00:04:36.479
+why did I just go ahead
+
+00:04:36.479 --> 00:04:39.520
+um time about for like one more question
+
+00:04:39.520 --> 00:04:42.880
+okay on live yeah thank you
+
+00:04:42.880 --> 00:04:45.280
+um well real quick did I write the
+
+00:04:45.280 --> 00:04:46.240
+company back end
+
+00:04:46.240 --> 00:04:48.880
+no that's just the automatic company
+
+00:04:48.880 --> 00:04:50.639
+completion based on other things I've
+
+00:04:50.639 --> 00:04:51.280
+typed
+
+00:04:51.280 --> 00:04:55.440
+why did I decide on the the input method
+
+00:04:55.440 --> 00:04:58.080
+that's a good question um I just did it
+
+00:04:58.080 --> 00:04:58.880
+based on
+
+00:04:58.880 --> 00:05:03.120
+my experience um in the x input mode you
+
+00:05:03.120 --> 00:05:04.000
+type it first
+
+00:05:04.000 --> 00:05:06.160
+and honestly I would love any input on
+
+00:05:06.160 --> 00:05:07.120
+what's more
+
+00:05:07.120 --> 00:05:09.280
+usual for these type of combining
+
+00:05:09.280 --> 00:05:10.960
+letters
+
+00:05:10.960 --> 00:05:13.919
+and really what I would like to do is
+
+00:05:13.919 --> 00:05:15.360
+kind of confer with other
+
+00:05:15.360 --> 00:05:17.600
+people from the tribe and talk to elders
+
+00:05:17.600 --> 00:05:19.440
+and see
+
+00:05:19.440 --> 00:05:21.440
+what feels right what what is the best
+
+00:05:21.440 --> 00:05:23.600
+way to go about this
+
+00:05:23.600 --> 00:05:24.800
+I don't think that it should be an
+
+00:05:24.800 --> 00:05:26.960
+individual decision and in this case it
+
+00:05:26.960 --> 00:05:27.919
+is because
+
+00:05:27.919 --> 00:05:30.880
+I created it for myself but now that
+
+00:05:30.880 --> 00:05:32.320
+I've released it to the world I think
+
+00:05:32.320 --> 00:05:34.639
+there's more to think about
+
+00:05:34.639 --> 00:05:37.680
+okay I guess I have to go now so we can
+
+00:05:37.680 --> 00:05:38.800
+get to the next talk
+
+00:05:38.800 --> 00:05:42.320
+thank you for listening okay
+
+00:05:42.320 --> 00:05:44.320
+thank you very much grant for your
+
+00:05:44.320 --> 00:05:45.759
+awesome talk and for
+
+00:05:45.759 --> 00:05:50.720
+the questions and answers
diff --git a/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt b/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt
new file mode 100644
index 00000000..55af2c4c
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt
@@ -0,0 +1,2164 @@
+WEBVTT
+
+00:00:01.839 --> 00:00:04.160
+Hello, EmacsConf!
+
+00:00:04.160 --> 00:00:05.279
+Thanks very much, first of all,
+
+00:00:05.280 --> 00:00:07.200
+to the organizers of the conference
+
+00:00:07.200 --> 00:00:08.800
+and to the audience,
+
+00:00:08.801 --> 00:00:10.480
+who I hope is out there somewhere,
+
+00:00:10.480 --> 00:00:11.679
+for giving me this chance
+
+00:00:11.680 --> 00:00:12.880
+to talk about Emacs
+
+00:00:12.881 --> 00:00:16.240
+and some of my poking around with Emacs Lisp.
+
+00:00:16.241 --> 00:00:17.680
+My name is Eric Abrahamsen.
+
+00:00:17.681 --> 00:00:20.480
+I'm not a professional programmer,
+
+00:00:20.481 --> 00:00:23.039
+but I use Emacs all day, every day,
+
+00:00:23.040 --> 00:00:24.800
+for writing, for translating,
+
+00:00:24.800 --> 00:00:26.160
+for project management,
+
+00:00:26.160 --> 00:00:27.920
+and most importantly, for email,
+
+00:00:27.921 --> 00:00:30.640
+which will be the subject of my talk today.
+
+00:00:30.641 --> 00:00:32.880
+So I'm talking about
+
+00:00:32.881 --> 00:00:34.160
+object-oriented code
+
+00:00:34.161 --> 00:00:38.320
+in Emacs' most famous, possibly oldest,
+
+00:00:38.320 --> 00:00:39.520
+definitely most notorious
+
+00:00:39.521 --> 00:00:42.800
+news reader / email client,
+
+00:00:42.801 --> 00:00:44.000
+so, in particular,
+
+00:00:44.001 --> 00:00:46.000
+object-oriented code in Gnus.
+
+00:00:46.001 --> 00:00:50.239
+Why object-oriented code?
+
+00:00:50.239 --> 00:00:51.199
+The way Gnus works is
+
+00:00:51.200 --> 00:00:52.480
+it started off as a news reader,
+
+00:00:52.481 --> 00:00:55.920
+so for accessing NNTP servers
+
+00:00:55.921 --> 00:00:57.600
+and later on grew a whole bunch
+
+00:00:57.601 --> 00:00:59.760
+of new functionality as a mail client,
+
+00:00:59.761 --> 00:01:02.079
+so it can talk to IMAP servers,
+
+00:01:02.079 --> 00:01:04.320
+Maildir directories,
+
+00:01:04.321 --> 00:01:05.360
+folders on your file system,
+
+00:01:05.361 --> 00:01:06.640
+all kinds of stuff,
+
+00:01:06.640 --> 00:01:08.320
+but it presents a unified interface
+
+00:01:08.321 --> 00:01:08.960
+to all those things,
+
+00:01:08.961 --> 00:01:11.040
+so it's basically polymorphism,
+
+00:01:11.040 --> 00:01:14.560
+one of the the basic fundamental principles
+
+00:01:14.561 --> 00:01:15.680
+of object oriented code.
+
+00:01:15.681 --> 00:01:17.600
+So it's a good fit.
+
+00:01:17.601 --> 00:01:21.439
+Second reason is it already is object-oriented,
+
+00:01:21.440 --> 00:01:25.280
+and I'll get into what that means in a second.
+
+00:01:25.281 --> 00:01:28.479
+So the background that you should know
+
+00:01:28.480 --> 00:01:30.000
+is that most of this code
+
+00:01:30.001 --> 00:01:32.560
+was written in the 90s.
+
+00:01:32.560 --> 00:01:34.880
+Emacs Lisp has only grown sort of
+
+00:01:34.881 --> 00:01:38.640
+official object orientation support libraries
+
+00:01:38.640 --> 00:01:41.200
+over the past 10 years or so,
+
+00:01:41.200 --> 00:01:42.799
+from about 2010 to the present.
+
+00:01:42.800 --> 00:01:45.920
+So what does Gnus do?
+
+00:01:45.921 --> 00:01:49.520
+So the basics of object orientation
+
+00:01:49.521 --> 00:01:50.560
+in most languages are:
+
+00:01:50.560 --> 00:01:53.439
+you define a class of some sort,
+
+00:01:53.440 --> 00:01:55.040
+and then you instantiate that class.
+
+00:01:55.041 --> 00:01:57.920
+These class instances have two things:
+
+00:01:57.921 --> 00:02:00.719
+they have data attributes (or slots,
+
+00:02:00.720 --> 00:02:01.680
+or members, or whatever
+
+00:02:01.681 --> 00:02:02.640
+you're going to call them),
+
+00:02:02.641 --> 00:02:05.600
+and they have methods
+
+00:02:05.601 --> 00:02:08.399
+which operate on individual instances.
+
+00:02:08.399 --> 00:02:10.239
+So you could say that
+
+00:02:10.240 --> 00:02:11.840
+you create or instantiate
+
+00:02:11.841 --> 00:02:12.800
+an instance of a class,
+
+00:02:12.801 --> 00:02:14.800
+and that instance owns two things.
+
+00:02:14.801 --> 00:02:17.120
+That owns its set of attributes,
+
+00:02:17.120 --> 00:02:19.520
+and it owns some methods,
+
+00:02:19.521 --> 00:02:23.280
+which also work on the instance.
+
+00:02:23.280 --> 00:02:25.680
+Both in Gnus' existing code
+
+00:02:25.681 --> 00:02:28.560
+and in the more standard object-oriented
+
+00:02:28.561 --> 00:02:31.680
+Emacs Lisp libraries, this relationship
+
+00:02:31.681 --> 00:02:34.080
+is turned on its head a little bit,
+
+00:02:34.080 --> 00:02:39.599
+in that data slots and instance methods
+
+00:02:39.600 --> 00:02:41.760
+are defined outside of the class
+
+00:02:41.761 --> 00:02:42.959
+or the instances themselves.
+
+00:02:42.959 --> 00:02:45.040
+They are top-level definitions.
+
+00:02:45.040 --> 00:02:46.879
+We'll get to what that means
+
+00:02:46.879 --> 00:02:48.720
+in the newer libraries in a bit,
+
+00:02:48.721 --> 00:02:49.920
+but first I want to talk about
+
+00:02:49.921 --> 00:02:51.280
+how Gnus does this.
+
+00:02:51.281 --> 00:02:52.160
+In order to do that,
+
+00:02:52.161 --> 00:02:54.319
+we are going to go deep into
+
+00:02:54.319 --> 00:02:55.760
+the darkest corner
+
+00:02:55.761 --> 00:02:58.080
+of the Gnus source code tree
+
+00:02:58.081 --> 00:03:01.440
+to a library called nnoo.el,
+
+00:03:01.441 --> 00:03:04.080
+very cryptically-titled library,
+
+00:03:04.081 --> 00:03:06.800
+and when we open it up, we find
+
+00:03:06.800 --> 00:03:09.280
+a library with no code comments
+
+00:03:09.281 --> 00:03:11.040
+and almost no doc strings.
+
+00:03:11.040 --> 00:03:12.800
+Almost as if Lars was a little ashamed--
+
+00:03:12.800 --> 00:03:14.159
+not ashamed, but knew he was doing
+
+00:03:14.159 --> 00:03:16.000
+something a little bit crazy
+
+00:03:16.000 --> 00:03:18.080
+and didn't want anyone to see.
+
+00:03:18.081 --> 00:03:20.560
+So this file contains
+
+00:03:20.561 --> 00:03:22.400
+the object-oriented mechanism
+
+00:03:22.400 --> 00:03:23.920
+whereby you can define
+
+00:03:23.921 --> 00:03:25.760
+different kinds of backends for Gnus,
+
+00:03:25.760 --> 00:03:26.799
+and then those backends
+
+00:03:26.800 --> 00:03:30.879
+can be instantiated as individual servers.
+
+00:03:30.880 --> 00:03:32.480
+As you define these backends,
+
+00:03:32.480 --> 00:03:34.319
+you're supposed to use two macros,
+
+00:03:34.320 --> 00:03:35.680
+which you can see here.
+
+00:03:35.681 --> 00:03:37.280
+One is called defvoo,
+
+00:03:37.281 --> 00:03:39.440
+and one is called deffoo.
+
+00:03:39.441 --> 00:03:40.400
+If you look at the definitions,
+
+00:03:40.401 --> 00:03:41.920
+the definitions look pretty simple.
+
+00:03:41.921 --> 00:03:45.440
+Here, defvoo basically turns into a defvar
+
+00:03:45.440 --> 00:03:49.040
+and foo turns into a defun.
+
+00:03:49.040 --> 00:03:52.239
+Along with those basic definitions,
+
+00:03:52.239 --> 00:03:55.760
+the library also does some registration,
+
+00:03:55.760 --> 00:03:58.720
+memoization, caching of those variables.
+
+00:03:58.720 --> 00:04:00.879
+It saves them in the structure for later use,
+
+00:04:00.880 --> 00:04:03.360
+so that we know that those are meant to be
+
+00:04:03.360 --> 00:04:04.799
+attributes and methods
+
+00:04:04.800 --> 00:04:06.640
+that are used with instances,
+
+00:04:06.640 --> 00:04:07.519
+with server instances.
+
+00:04:07.520 --> 00:04:08.159
+But you can see that
+
+00:04:08.160 --> 00:04:10.000
+there's no server instance definition here.
+
+00:04:10.001 --> 00:04:12.159
+There's no, like, no nothing.
+
+00:04:12.160 --> 00:04:14.799
+These are top-level definitions,
+
+00:04:14.800 --> 00:04:20.239
+so really, data attributes for new servers
+
+00:04:20.240 --> 00:04:23.040
+and methods or functions
+
+00:04:23.041 --> 00:04:24.639
+that operate on those instances
+
+00:04:24.640 --> 00:04:27.840
+are completely separate mechanisms.
+
+00:04:27.841 --> 00:04:29.040
+They don't really have anything to do
+
+00:04:29.041 --> 00:04:29.520
+with each other.
+
+00:04:29.521 --> 00:04:31.680
+They don't belong to the same data structures.
+
+00:04:31.680 --> 00:04:34.080
+So how do they work?
+
+00:04:34.081 --> 00:04:37.120
+Follow me. deffoo and defvoo,
+
+00:04:37.120 --> 00:04:38.960
+aka methods and attributes,
+
+00:04:38.961 --> 00:04:41.360
+these are all the things I just said.
+
+00:04:41.360 --> 00:04:50.240
+So when you define a a backend type in Gnus,
+
+00:04:50.241 --> 00:04:52.400
+what you get is this: a definition, a list.
+
+00:04:52.400 --> 00:04:55.520
+It'll say, there is such a backend as nnml,
+
+00:04:55.520 --> 00:04:58.880
+and these are its data attributes
+
+00:04:58.880 --> 00:05:01.039
+that any given instance can have,
+
+00:05:01.040 --> 00:05:04.720
+and then these are the functions or methods
+
+00:05:04.721 --> 00:05:06.880
+that are defined to operate on
+
+00:05:06.880 --> 00:05:08.240
+an instance of this backend,
+
+00:05:08.241 --> 00:05:09.600
+so a server that belongs to
+
+00:05:09.601 --> 00:05:12.160
+the nnml backend.
+
+00:05:12.161 --> 00:05:13.600
+So at least we have this data here.
+
+00:05:13.601 --> 00:05:16.080
+That's handy. We don't really touch that.
+
+00:05:16.081 --> 00:05:19.600
+That's, like, very, very, very deep Gnus code
+
+00:05:19.601 --> 00:05:20.560
+that doesn't really come up
+
+00:05:20.560 --> 00:05:25.199
+even as a bug squasher or whatever.
+
+00:05:25.200 --> 00:05:26.160
+We don't touch that very often,
+
+00:05:26.161 --> 00:05:26.800
+but there they are,
+
+00:05:26.801 --> 00:05:29.199
+and that's how they work.
+
+00:05:29.200 --> 00:05:31.039
+Now the next thing that obviously
+
+00:05:31.040 --> 00:05:32.080
+you want to know is, okay,
+
+00:05:32.080 --> 00:05:33.759
+where are... if I've started up Gnus,
+
+00:05:33.760 --> 00:05:35.039
+where are my servers?
+
+00:05:35.039 --> 00:05:36.880
+Where are these server objects,
+
+00:05:36.881 --> 00:05:40.479
+since this is object-oriented programming?
+
+00:05:40.480 --> 00:05:41.520
+And the weird thing
+
+00:05:41.521 --> 00:05:43.759
+that you will eventually figure out
+
+00:05:43.760 --> 00:05:45.680
+(in some cases, after years of poking around)
+
+00:05:45.681 --> 00:05:46.880
+in the Gnus source code
+
+00:05:46.880 --> 00:05:48.880
+is that servers do not exist
+
+00:05:48.881 --> 00:05:51.360
+in an ontological, philosophical sense,
+
+00:05:51.361 --> 00:05:55.280
+as objects. The primary data structures of Gnus
+
+00:05:55.281 --> 00:05:58.160
+are groups, and in sort of
+
+00:05:58.161 --> 00:06:00.560
+an object-oriented hierarchical mindset,
+
+00:06:00.561 --> 00:06:03.039
+you'd think, well, groups belong to servers,
+
+00:06:03.040 --> 00:06:05.759
+so servers must exist, but they don't.
+
+00:06:05.759 --> 00:06:07.840
+Each group... And here you can see
+
+00:06:07.841 --> 00:06:09.360
+some examples of groups...
+
+00:06:09.360 --> 00:06:11.199
+These are basically the data structures
+
+00:06:11.199 --> 00:06:12.240
+that represent a group.
+
+00:06:12.241 --> 00:06:14.160
+Each group also has a little entry here
+
+00:06:14.161 --> 00:06:17.039
+that tells you what server it belongs to,
+
+00:06:17.039 --> 00:06:20.080
+and each group replicates that data,
+
+00:06:20.081 --> 00:06:21.600
+saying which server it belongs to.
+
+00:06:21.601 --> 00:06:24.000
+So when Gnus is going through
+
+00:06:24.001 --> 00:06:25.280
+doing its business,
+
+00:06:25.281 --> 00:06:27.039
+trying to figure out updating mail
+
+00:06:27.040 --> 00:06:28.479
+from the groups or whatever,
+
+00:06:28.480 --> 00:06:30.960
+almost every time, it will cycle through
+
+00:06:30.961 --> 00:06:32.960
+all the list of groups.
+
+00:06:32.960 --> 00:06:34.960
+It'll look at all the server definitions,
+
+00:06:34.960 --> 00:06:38.160
+and it will categorize the groups by server,
+
+00:06:38.160 --> 00:06:40.000
+which is just weird,
+
+00:06:40.001 --> 00:06:41.680
+because you're sort of looking for...
+
+00:06:41.681 --> 00:06:42.720
+okay, where does the server exist?
+
+00:06:42.721 --> 00:06:43.440
+It doesn't exist.
+
+00:06:43.441 --> 00:06:46.240
+It's put together every time
+
+00:06:46.241 --> 00:06:50.400
+out of code elsewhere in the Gnus code base,
+
+00:06:50.400 --> 00:06:53.599
+specifically from these group definitions.
+
+00:06:53.600 --> 00:06:54.479
+So this is very odd,
+
+00:06:54.480 --> 00:06:56.319
+because in some sense...
+
+00:06:56.320 --> 00:06:59.360
+Like here, this one, its server is nnml
+
+00:06:59.361 --> 00:07:01.680
+and an empty string,
+
+00:07:01.681 --> 00:07:02.880
+so there's a certain sense here
+
+00:07:02.881 --> 00:07:04.720
+in which this server is not really
+
+00:07:04.721 --> 00:07:06.160
+an object at all. What it is
+
+00:07:06.161 --> 00:07:07.120
+is a set of instructions
+
+00:07:07.121 --> 00:07:08.560
+for how to find messages,
+
+00:07:08.560 --> 00:07:10.319
+and this set of instructions is:
+
+00:07:10.320 --> 00:07:12.000
+go to the default place
+
+00:07:12.001 --> 00:07:14.000
+where the user might have their mail
+
+00:07:14.001 --> 00:07:16.319
+and expect to find messages there
+
+00:07:16.320 --> 00:07:18.479
+in an nnml format, which is basically
+
+00:07:18.480 --> 00:07:21.759
+just one message per file.
+
+00:07:21.760 --> 00:07:22.720
+Any number of groups could have
+
+00:07:22.721 --> 00:07:24.400
+those same instructions, but they're not...
+
+00:07:24.401 --> 00:07:25.440
+It's not really a thing.
+
+00:07:25.440 --> 00:07:26.720
+It's really just a...
+
+00:07:26.720 --> 00:07:28.639
+It's more of a procedural instruction.
+
+00:07:28.639 --> 00:07:30.160
+On the other end of the spectrum,
+
+00:07:30.161 --> 00:07:32.240
+you might have an nnimap server,
+
+00:07:32.241 --> 00:07:33.280
+which very much is a thing.
+
+00:07:33.281 --> 00:07:36.160
+It has its own server, its own port,
+
+00:07:36.161 --> 00:07:38.960
+its own authentication system.
+
+00:07:38.961 --> 00:07:40.639
+So some of the servers are more like things,
+
+00:07:40.640 --> 00:07:42.400
+some of the servers are more like instructions.
+
+00:07:42.400 --> 00:07:45.520
+As Gnus works right now,
+
+00:07:45.520 --> 00:07:47.280
+most of the servers are treated like
+
+00:07:47.280 --> 00:07:48.879
+just instruction sets,
+
+00:07:48.879 --> 00:07:50.879
+and there's no place where you can
+
+00:07:50.880 --> 00:07:51.840
+go and find them.
+
+00:07:51.841 --> 00:07:53.680
+There's no one central variable
+
+00:07:53.681 --> 00:07:56.160
+that defines them all. So how do the...
+
+00:07:56.160 --> 00:07:57.759
+We'll talk about the methods in a second.
+
+00:07:57.760 --> 00:07:59.520
+How do the data attributes work?
+
+00:07:59.520 --> 00:08:02.639
+Put very crudely,
+
+00:08:02.639 --> 00:08:04.479
+your servers, when they're put together,
+
+00:08:04.479 --> 00:08:06.879
+they are kept in a variable,
+
+00:08:06.880 --> 00:08:08.080
+and it's called nnoo
+
+00:08:08.080 --> 00:08:08.960
+nno
+
+00:08:08.960 --> 00:08:11.120
+state a list and there's a concept to
+
+00:08:11.120 --> 00:08:12.960
+this of the current server
+
+00:08:12.960 --> 00:08:16.560
+so when we go here let's go back to
+
+00:08:16.560 --> 00:08:19.039
+our nnno definition a list so when we
+
+00:08:19.039 --> 00:08:20.560
+have an nnml
+
+00:08:20.560 --> 00:08:22.240
+server say we have one here and it's
+
+00:08:22.240 --> 00:08:24.400
+just this blank string
+
+00:08:24.400 --> 00:08:26.639
+these are all when you define that in
+
+00:08:26.639 --> 00:08:28.879
+your own uh server definition code
+
+00:08:28.879 --> 00:08:31.919
+you can put in different values for all
+
+00:08:31.919 --> 00:08:32.399
+of these
+
+00:08:32.399 --> 00:08:35.760
+various attributes and when noose comes
+
+00:08:35.760 --> 00:08:37.039
+when it comes time for news to operate
+
+00:08:37.039 --> 00:08:38.959
+on this server in particular ask it to
+
+00:08:38.959 --> 00:08:40.640
+you know open a group or get new mail
+
+00:08:40.640 --> 00:08:42.080
+what it will do is it will take
+
+00:08:42.080 --> 00:08:45.360
+that particular server's data from these
+
+00:08:45.360 --> 00:08:45.920
+symbols
+
+00:08:45.920 --> 00:08:47.600
+and it will copy all that information
+
+00:08:47.600 --> 00:08:49.600
+into the global devfars
+
+00:08:49.600 --> 00:08:51.760
+so for the time that you are operating
+
+00:08:51.760 --> 00:08:53.120
+on this particular server
+
+00:08:53.120 --> 00:08:55.920
+its individual data becomes the values
+
+00:08:55.920 --> 00:08:56.800
+of these global
+
+00:08:56.800 --> 00:08:59.360
+variables which when you realize what's
+
+00:08:59.360 --> 00:09:00.560
+happening is sort of terrifying you
+
+00:09:00.560 --> 00:09:02.080
+think oh my god
+
+00:09:02.080 --> 00:09:04.480
+but at the same time it's actually kind
+
+00:09:04.480 --> 00:09:05.760
+of impressive and it's amazing that it
+
+00:09:05.760 --> 00:09:07.279
+works as well as it does
+
+00:09:07.279 --> 00:09:09.120
+I'm actually a little bit in awe of the
+
+00:09:09.120 --> 00:09:10.880
+of the code in this in this library I
+
+00:09:10.880 --> 00:09:12.560
+think it's pretty impressive
+
+00:09:12.560 --> 00:09:15.760
+so as you nno change server
+
+00:09:15.760 --> 00:09:18.320
+uh this function here these values get
+
+00:09:18.320 --> 00:09:20.080
+copied into the global value into the
+
+00:09:20.080 --> 00:09:21.440
+global variables and then as you go on
+
+00:09:21.440 --> 00:09:22.399
+the next server
+
+00:09:22.399 --> 00:09:24.000
+that gets you know cleaned out and
+
+00:09:24.000 --> 00:09:26.399
+recopied there are a few
+
+00:09:26.399 --> 00:09:29.680
+um a few other slot types
+
+00:09:29.680 --> 00:09:32.000
+or attribute types which do because all
+
+00:09:32.000 --> 00:09:33.440
+of these attributes see they all start
+
+00:09:33.440 --> 00:09:34.720
+with the nml
+
+00:09:34.720 --> 00:09:37.920
+or in this case and in folder prefix
+
+00:09:37.920 --> 00:09:40.560
+but there are a few slot types that all
+
+00:09:40.560 --> 00:09:41.760
+servers need for
+
+00:09:41.760 --> 00:09:43.279
+for instance their most recent status
+
+00:09:43.279 --> 00:09:45.920
+message a status symbol like open denied
+
+00:09:45.920 --> 00:09:46.640
+whatever
+
+00:09:46.640 --> 00:09:48.080
+and that data is sort of scattered
+
+00:09:48.080 --> 00:09:49.680
+around the rest of the news
+
+00:09:49.680 --> 00:09:51.200
+code base in various variables or
+
+00:09:51.200 --> 00:09:53.440
+various places
+
+00:09:53.440 --> 00:09:55.440
+so that's that sort of just contributes
+
+00:09:55.440 --> 00:09:56.560
+to the confusion when you're trying to
+
+00:09:56.560 --> 00:09:57.360
+figure out why
+
+00:09:57.360 --> 00:10:00.720
+things are going wrong so that is our
+
+00:10:00.720 --> 00:10:03.839
+um nnoo which is and
+
+00:10:03.839 --> 00:10:05.440
+sort of how the attributes and these
+
+00:10:05.440 --> 00:10:07.360
+global variables work
+
+00:10:07.360 --> 00:10:09.120
+if we want to talk about defu and the
+
+00:10:09.120 --> 00:10:10.480
+methods we
+
+00:10:10.480 --> 00:10:20.800
+go to
+
+00:10:20.800 --> 00:10:23.200
+and so this is the place where all the
+
+00:10:23.200 --> 00:10:25.600
+server level methods are defined
+
+00:10:25.600 --> 00:10:27.200
+and what we have here are things like
+
+00:10:27.200 --> 00:10:29.279
+here's an example there's closed server
+
+00:10:29.279 --> 00:10:32.640
+this closed server is given a
+
+00:10:32.640 --> 00:10:36.320
+a server as a an argument
+
+00:10:36.320 --> 00:10:38.079
+it looks at the server and basically it
+
+00:10:38.079 --> 00:10:40.560
+finds the proper function to call on
+
+00:10:40.560 --> 00:10:42.079
+this particular server
+
+00:10:42.079 --> 00:10:45.120
+using the function new skip function by
+
+00:10:45.120 --> 00:10:45.600
+taking
+
+00:10:45.600 --> 00:10:48.959
+the sort of latter half of this function
+
+00:10:48.959 --> 00:10:49.760
+symbol
+
+00:10:49.760 --> 00:10:52.079
+and pasting it together with the symbol
+
+00:10:52.079 --> 00:10:53.440
+that represents the back end so
+
+00:10:53.440 --> 00:10:56.800
+if you were calling this on an nni map
+
+00:10:56.800 --> 00:10:59.600
+server your skip function would look at
+
+00:10:59.600 --> 00:11:01.279
+your imap server look at closed server I
+
+00:11:01.279 --> 00:11:02.240
+knew what
+
+00:11:02.240 --> 00:11:07.839
+it would come up with
+
+00:11:07.839 --> 00:11:10.240
+server sure enough there's an imac close
+
+00:11:10.240 --> 00:11:11.920
+server and it'll call this code and then
+
+00:11:11.920 --> 00:11:12.240
+it'll
+
+00:11:12.240 --> 00:11:14.000
+it'll go and do its other bookkeeping
+
+00:11:14.000 --> 00:11:15.279
+another sort of
+
+00:11:15.279 --> 00:11:18.320
+surrounding code and so that's not that
+
+00:11:18.320 --> 00:11:19.279
+actually works pretty well
+
+00:11:19.279 --> 00:11:22.640
+uh as as things go uh defu
+
+00:11:22.640 --> 00:11:24.959
+makes a record that this this function
+
+00:11:24.959 --> 00:11:26.800
+exists and nus gets function get
+
+00:11:26.800 --> 00:11:28.320
+function looks on that cache finds the
+
+00:11:28.320 --> 00:11:29.600
+function and calls it
+
+00:11:29.600 --> 00:11:30.959
+now what's particularly confusing is
+
+00:11:30.959 --> 00:11:32.560
+that you don't actually even have to use
+
+00:11:32.560 --> 00:11:33.360
+defu
+
+00:11:33.360 --> 00:11:35.519
+so whoever wrote and then mail gear
+
+00:11:35.519 --> 00:11:38.399
+which is a weird library
+
+00:11:38.399 --> 00:11:39.920
+said to heck with you I'm not using any
+
+00:11:39.920 --> 00:11:41.600
+of these
+
+00:11:41.600 --> 00:11:43.120
+any of this machinery I'm going to do it
+
+00:11:43.120 --> 00:11:45.839
+myself so we have
+
+00:11:45.839 --> 00:11:49.680
+def structs to hold uh the instance
+
+00:11:49.680 --> 00:11:52.320
+data and then we have just plain old
+
+00:11:52.320 --> 00:11:53.040
+defense
+
+00:11:53.040 --> 00:11:55.680
+for things like animal your close server
+
+00:11:55.680 --> 00:11:57.279
+request close all of these
+
+00:11:57.279 --> 00:11:59.279
+these server level uh variables and it
+
+00:11:59.279 --> 00:12:00.320
+just turns out that
+
+00:12:00.320 --> 00:12:03.360
+news in its belt and suspenders
+
+00:12:03.360 --> 00:12:05.839
+approach to uh to coding it'll actually
+
+00:12:05.839 --> 00:12:07.279
+just go out if it can't find
+
+00:12:07.279 --> 00:12:10.320
+the memoized function it'll just go out
+
+00:12:10.320 --> 00:12:12.160
+and say has anybody defined a function
+
+00:12:12.160 --> 00:12:14.240
+that looks like this pattern and then
+
+00:12:14.240 --> 00:12:16.000
+and then melder says yes I did and then
+
+00:12:16.000 --> 00:12:17.920
+we call it and then we go so it's just
+
+00:12:17.920 --> 00:12:19.920
+it's fine it works it just adds to the
+
+00:12:19.920 --> 00:12:21.440
+confusion why
+
+00:12:21.440 --> 00:12:24.240
+why does it work we don't know sometimes
+
+00:12:24.240 --> 00:12:25.440
+the only thing worse than not knowing
+
+00:12:25.440 --> 00:12:26.880
+why something doesn't work is
+
+00:12:26.880 --> 00:12:30.000
+not knowing why something does work um
+
+00:12:30.000 --> 00:12:30.560
+and then
+
+00:12:30.560 --> 00:12:31.920
+a last little bit I want to touch on
+
+00:12:31.920 --> 00:12:33.680
+here is inheritance which is another
+
+00:12:33.680 --> 00:12:35.440
+sort of cornerstone of object-oriented
+
+00:12:35.440 --> 00:12:38.480
+coding as far as I can tell only uh
+
+00:12:38.480 --> 00:12:40.160
+the only inheritance that goes on is in
+
+00:12:40.160 --> 00:12:41.920
+something called nn male
+
+00:12:41.920 --> 00:12:45.519
+which provides sort of common functions
+
+00:12:45.519 --> 00:12:48.399
+for back ends that keep their mail on
+
+00:12:48.399 --> 00:12:49.360
+your
+
+00:12:49.360 --> 00:12:52.000
+local machine and you can spool it you
+
+00:12:52.000 --> 00:12:53.680
+can delete it you can you know you own
+
+00:12:53.680 --> 00:12:55.440
+the messages it's not like an nntp
+
+00:12:55.440 --> 00:12:56.160
+server
+
+00:12:56.160 --> 00:12:59.040
+and so a lot of those male deer nnml
+
+00:12:59.040 --> 00:13:00.160
+whatever
+
+00:13:00.160 --> 00:13:02.959
+a lot of those have sort of similar code
+
+00:13:02.959 --> 00:13:04.079
+which they
+
+00:13:04.079 --> 00:13:07.600
+which they share via this nn mail
+
+00:13:07.600 --> 00:13:09.600
+you call it an abstract parent class I
+
+00:13:09.600 --> 00:13:12.959
+guess so if you have something like nnml
+
+00:13:12.959 --> 00:13:15.440
+it has a request scan uh when it goes
+
+00:13:15.440 --> 00:13:16.720
+into request scan
+
+00:13:16.720 --> 00:13:18.800
+it ends up calling nnmail.newmail and it
+
+00:13:18.800 --> 00:13:21.760
+says I am calling this as an nml server
+
+00:13:21.760 --> 00:13:23.279
+and here are some of my callback
+
+00:13:23.279 --> 00:13:24.959
+functions and my variables that I would
+
+00:13:24.959 --> 00:13:26.000
+like you to use
+
+00:13:26.000 --> 00:13:28.000
+when you are getting your email so in
+
+00:13:28.000 --> 00:13:30.120
+this way the code is sort of you know
+
+00:13:30.120 --> 00:13:33.120
+inter-interleaved between the the child
+
+00:13:33.120 --> 00:13:35.680
+class and the parent class even though
+
+00:13:35.680 --> 00:13:37.120
+we're not talking in terms of classes
+
+00:13:37.120 --> 00:13:39.440
+here at all really
+
+00:13:39.440 --> 00:13:42.160
+so that's how noose works right now I
+
+00:13:42.160 --> 00:13:42.959
+hope that's clear
+
+00:13:42.959 --> 00:13:45.519
+it certainly wasn't to me and I still
+
+00:13:45.519 --> 00:13:46.560
+have to go refresh my
+
+00:13:46.560 --> 00:13:48.079
+memory I'd like to talk a little bit
+
+00:13:48.079 --> 00:13:50.079
+about sort of the newer
+
+00:13:50.079 --> 00:13:51.600
+libraries that are available now for
+
+00:13:51.600 --> 00:13:54.240
+doing object-oriented code
+
+00:13:54.240 --> 00:13:56.959
+uh as I mentioned I think earlier nno
+
+00:13:56.959 --> 00:13:59.279
+the copyright headers for 1996 so that's
+
+00:13:59.279 --> 00:14:00.320
+pretty venerable
+
+00:14:00.320 --> 00:14:02.639
+coincidentally around the same time eric
+
+00:14:02.639 --> 00:14:05.519
+ludlum started developing e-I-e-I-o
+
+00:14:05.519 --> 00:14:08.320
+which is a which is sort of inspired by
+
+00:14:08.320 --> 00:14:09.360
+a common lisp's
+
+00:14:09.360 --> 00:14:12.720
+common lisp object system um I got a
+
+00:14:12.720 --> 00:14:14.240
+very good introduction to that from this
+
+00:14:14.240 --> 00:14:14.959
+book
+
+00:14:14.959 --> 00:14:16.399
+practical common lisp which I would
+
+00:14:16.399 --> 00:14:18.000
+encourage you to look at if you haven't
+
+00:14:18.000 --> 00:14:20.079
+which you probably have anyway
+
+00:14:20.079 --> 00:14:22.320
+e-I-e-I-o was incorporated into Emacs in
+
+00:14:22.320 --> 00:14:23.920
+2010
+
+00:14:23.920 --> 00:14:27.839
+so that yeah e-I-e-I-o provides um
+
+00:14:27.839 --> 00:14:30.240
+the deaf class statements it provides
+
+00:14:30.240 --> 00:14:32.079
+deaf generics deaf methods all that sort
+
+00:14:32.079 --> 00:14:32.639
+of stuff
+
+00:14:32.639 --> 00:14:34.800
+sort of a common lisp object-oriented
+
+00:14:34.800 --> 00:14:36.320
+code
+
+00:14:36.320 --> 00:14:38.399
+at some point stephan monier's money
+
+00:14:38.399 --> 00:14:39.760
+money another name I haven't pronounced
+
+00:14:39.760 --> 00:14:41.199
+it all out
+
+00:14:41.199 --> 00:14:43.839
+started either cleaning up that code or
+
+00:14:43.839 --> 00:14:45.120
+for one reason or another writing a
+
+00:14:45.120 --> 00:14:46.959
+re-implementation of generic functions
+
+00:14:46.959 --> 00:14:48.000
+which was added
+
+00:14:48.000 --> 00:14:51.440
+uh in 2015 and then throughout this time
+
+00:14:51.440 --> 00:14:51.920
+another
+
+00:14:51.920 --> 00:14:54.639
+sort of object-oriented style
+
+00:14:54.639 --> 00:14:55.760
+declaration is
+
+00:14:55.760 --> 00:14:58.160
+defstruct which started off in the cl
+
+00:14:58.160 --> 00:15:00.000
+libraries
+
+00:15:00.000 --> 00:15:01.600
+implemented with vectors later was
+
+00:15:01.600 --> 00:15:02.959
+implemented with records so they're
+
+00:15:02.959 --> 00:15:04.639
+easier to target
+
+00:15:04.639 --> 00:15:06.720
+anyway that's another option so how
+
+00:15:06.720 --> 00:15:08.399
+would we this is I'm probably out of
+
+00:15:08.399 --> 00:15:09.279
+time already but
+
+00:15:09.279 --> 00:15:13.839
+we're only getting to the part
+
+00:15:13.839 --> 00:15:15.760
+the whole point of this is how would we
+
+00:15:15.760 --> 00:15:17.920
+rewrite someone news's code to use these
+
+00:15:17.920 --> 00:15:19.920
+newer libraries
+
+00:15:19.920 --> 00:15:21.760
+if we didn't have to support third party
+
+00:15:21.760 --> 00:15:23.839
+libraries this wouldn't be that hard
+
+00:15:23.839 --> 00:15:26.639
+but out there noose is really up on uh
+
+00:15:26.639 --> 00:15:28.160
+you know backwards compatibility and not
+
+00:15:28.160 --> 00:15:30.240
+breaking people's stuff and you know
+
+00:15:30.240 --> 00:15:33.040
+multi-decade support for things so there
+
+00:15:33.040 --> 00:15:34.240
+are people out there who have written
+
+00:15:34.240 --> 00:15:35.759
+third-party libraries
+
+00:15:35.759 --> 00:15:38.480
+um defining new backends for you can use
+
+00:15:38.480 --> 00:15:40.000
+like hacker news or whatever as
+
+00:15:40.000 --> 00:15:41.759
+a as a server so we want to be able to
+
+00:15:41.759 --> 00:15:43.199
+support those if you didn't have to
+
+00:15:43.199 --> 00:15:44.240
+support those it'd be fine you'd
+
+00:15:44.240 --> 00:15:46.079
+re-implement you'd use generic functions
+
+00:15:46.079 --> 00:15:47.440
+you'd use either structure classes
+
+00:15:47.440 --> 00:15:48.560
+whatever but we got a
+
+00:15:48.560 --> 00:15:51.040
+it's a little bit tricky to support
+
+00:15:51.040 --> 00:15:52.000
+these other people's
+
+00:15:52.000 --> 00:15:54.320
+libraries so one of the things we can do
+
+00:15:54.320 --> 00:15:56.079
+is rewrite the defu
+
+00:15:56.079 --> 00:15:59.279
+so if you remember defu is the thing
+
+00:15:59.279 --> 00:16:00.079
+that uh
+
+00:16:00.079 --> 00:16:03.120
+or sorry uh defu
+
+00:16:03.120 --> 00:16:04.800
+is the thing that defines methods that
+
+00:16:04.800 --> 00:16:07.040
+operate on object answers
+
+00:16:07.040 --> 00:16:10.160
+instances and we can uh rewrite that to
+
+00:16:10.160 --> 00:16:10.639
+use
+
+00:16:10.639 --> 00:16:13.440
+cldef generic and that's this is fairly
+
+00:16:13.440 --> 00:16:14.240
+fairly simple
+
+00:16:14.240 --> 00:16:15.440
+it looks like a lot of code it's not a
+
+00:16:15.440 --> 00:16:17.759
+lot of good for instance we have the
+
+00:16:17.759 --> 00:16:20.320
+new closed server code that we looked at
+
+00:16:20.320 --> 00:16:21.199
+earlier
+
+00:16:21.199 --> 00:16:22.720
+and we have this phone call and the new
+
+00:16:22.720 --> 00:16:24.560
+skip function so this would look
+
+00:16:24.560 --> 00:16:28.720
+like using generic functions and methods
+
+00:16:28.720 --> 00:16:30.240
+it would look like this we'd have
+
+00:16:30.240 --> 00:16:32.959
+a generic def generic which is just a
+
+00:16:32.959 --> 00:16:34.560
+sort of a declaration
+
+00:16:34.560 --> 00:16:36.320
+and a doc string and then we have those
+
+00:16:36.320 --> 00:16:37.680
+implementations
+
+00:16:37.680 --> 00:16:40.320
+so we can see what the original code
+
+00:16:40.320 --> 00:16:42.399
+does here is it first says okay what
+
+00:16:42.399 --> 00:16:44.720
+type is our our is our argument here and
+
+00:16:44.720 --> 00:16:45.839
+if it's a string
+
+00:16:45.839 --> 00:16:48.560
+then go and get the proper s the proper
+
+00:16:48.560 --> 00:16:50.160
+method definition
+
+00:16:50.160 --> 00:16:52.480
+from that string so the way we do that
+
+00:16:52.480 --> 00:16:53.920
+with methods is we
+
+00:16:53.920 --> 00:16:56.000
+we say if the server is a string so if
+
+00:16:56.000 --> 00:16:57.440
+it matches this type
+
+00:16:57.440 --> 00:16:58.720
+then what we're going to do is just
+
+00:16:58.720 --> 00:17:00.320
+recall we're going to call this function
+
+00:17:00.320 --> 00:17:02.160
+all over again
+
+00:17:02.160 --> 00:17:05.199
+using uh basically the same code here
+
+00:17:05.199 --> 00:17:06.400
+the same code that takes a string and
+
+00:17:06.400 --> 00:17:07.600
+gets the object so
+
+00:17:07.600 --> 00:17:10.640
+this does this can add extra function
+
+00:17:10.640 --> 00:17:11.600
+calls
+
+00:17:11.600 --> 00:17:12.880
+depending on how you've written the rest
+
+00:17:12.880 --> 00:17:14.880
+of your code um but this is sort of the
+
+00:17:14.880 --> 00:17:16.640
+canonical way of doing this
+
+00:17:16.640 --> 00:17:19.679
+uh using methods then our next part here
+
+00:17:19.679 --> 00:17:20.559
+is
+
+00:17:20.559 --> 00:17:22.000
+nishkit function we're going to get a
+
+00:17:22.000 --> 00:17:24.559
+function called closed server
+
+00:17:24.559 --> 00:17:26.079
+the difference here is that all these
+
+00:17:26.079 --> 00:17:27.360
+functions are all going to be called
+
+00:17:27.360 --> 00:17:28.000
+close
+
+00:17:28.000 --> 00:17:29.360
+news close server they're not going to
+
+00:17:29.360 --> 00:17:31.120
+be called news like nni my
+
+00:17:31.120 --> 00:17:32.799
+closed server and ntp close server
+
+00:17:32.799 --> 00:17:34.400
+they're all going to have the same name
+
+00:17:34.400 --> 00:17:36.160
+and what we do is uh we have an around
+
+00:17:36.160 --> 00:17:37.440
+method
+
+00:17:37.440 --> 00:17:40.640
+for any server that is a const which is
+
+00:17:40.640 --> 00:17:43.679
+which is as close as we care to get uh
+
+00:17:43.679 --> 00:17:45.520
+for you know zeroing in on the type that
+
+00:17:45.520 --> 00:17:46.799
+we're looking for
+
+00:17:46.799 --> 00:17:48.559
+we put in a round method on that so that
+
+00:17:48.559 --> 00:17:50.480
+we can call the next method which we'll
+
+00:17:50.480 --> 00:17:51.679
+call the more specific
+
+00:17:51.679 --> 00:17:53.440
+method and then we have our other
+
+00:17:53.440 --> 00:17:55.600
+bookkeeping code to clean up you know
+
+00:17:55.600 --> 00:17:57.280
+set up tear down code we'll go around
+
+00:17:57.280 --> 00:17:58.640
+that
+
+00:17:58.640 --> 00:18:00.080
+and then in one of the back-end
+
+00:18:00.080 --> 00:18:02.080
+definitions for instance in an imap
+
+00:18:02.080 --> 00:18:04.320
+we have another news closed server thing
+
+00:18:04.320 --> 00:18:05.760
+this looks at the server
+
+00:18:05.760 --> 00:18:08.880
+and it says is this server a list that
+
+00:18:08.880 --> 00:18:10.799
+starts with a symbol and an imap and if
+
+00:18:10.799 --> 00:18:12.480
+it is then we're almost guaranteed that
+
+00:18:12.480 --> 00:18:13.679
+this is what we wanted
+
+00:18:13.679 --> 00:18:15.840
+and then this is where we would insert
+
+00:18:15.840 --> 00:18:17.600
+all the rest of the code from anonymous
+
+00:18:17.600 --> 00:18:18.960
+closed server
+
+00:18:18.960 --> 00:18:20.799
+where we'd re-redefine that to look like
+
+00:18:20.799 --> 00:18:22.880
+this so it's not that hard
+
+00:18:22.880 --> 00:18:26.080
+theoretically so what we would do
+
+00:18:26.080 --> 00:18:28.720
+is take the defu macro macro and then
+
+00:18:28.720 --> 00:18:29.679
+rewrite that
+
+00:18:29.679 --> 00:18:32.240
+so that it actually defines a cl def
+
+00:18:32.240 --> 00:18:33.039
+method like
+
+00:18:33.039 --> 00:18:35.520
+one of these now there's a couple of
+
+00:18:35.520 --> 00:18:36.320
+these things
+
+00:18:36.320 --> 00:18:38.960
+unfortunately it's not that easy get rid
+
+00:18:38.960 --> 00:18:41.200
+of you
+
+00:18:41.200 --> 00:18:43.490
+a couple of these things
+
+00:18:43.490 --> 00:18:46.400
+[Music]
+
+00:18:46.400 --> 00:18:49.039
+that don't use their server as the first
+
+00:18:49.039 --> 00:18:49.919
+argument
+
+00:18:49.919 --> 00:18:52.400
+or any of the arguments or it's an
+
+00:18:52.400 --> 00:18:53.280
+optional argument
+
+00:18:53.280 --> 00:18:54.720
+and we need the server to be in there to
+
+00:18:54.720 --> 00:18:56.640
+dispatch on its type
+
+00:18:56.640 --> 00:18:58.799
+if the server doesn't show up as a as a
+
+00:18:58.799 --> 00:19:00.080
+required
+
+00:19:00.080 --> 00:19:01.760
+argument we're not going to be able to
+
+00:19:01.760 --> 00:19:03.600
+locate the the proper
+
+00:19:03.600 --> 00:19:07.440
+function call so in the case of
+
+00:19:07.440 --> 00:19:10.640
+noose request group here we start with
+
+00:19:10.640 --> 00:19:12.080
+the group it's the group that matters
+
+00:19:12.080 --> 00:19:12.720
+and we get
+
+00:19:12.720 --> 00:19:14.960
+the newscommand method as an optional
+
+00:19:14.960 --> 00:19:16.240
+argument
+
+00:19:16.240 --> 00:19:18.559
+so that's not cool we don't want that so
+
+00:19:18.559 --> 00:19:20.480
+what we need instead is something that
+
+00:19:20.480 --> 00:19:21.360
+looks like this
+
+00:19:21.360 --> 00:19:23.840
+what we're going to do with uh this is
+
+00:19:23.840 --> 00:19:25.360
+gonna be just terrible terrible code but
+
+00:19:25.360 --> 00:19:26.640
+hopefully it won't get used very often
+
+00:19:26.640 --> 00:19:28.160
+it's gonna be really embarrassing
+
+00:19:28.160 --> 00:19:30.559
+um defu what's what definitely was gonna
+
+00:19:30.559 --> 00:19:31.520
+have to do is
+
+00:19:31.520 --> 00:19:33.200
+say okay is this a function that doesn't
+
+00:19:33.200 --> 00:19:34.559
+have the server as the first argument
+
+00:19:34.559 --> 00:19:35.360
+and if it does
+
+00:19:35.360 --> 00:19:36.960
+it's gonna say oh it's news request
+
+00:19:36.960 --> 00:19:38.400
+group what happens has to happen with
+
+00:19:38.400 --> 00:19:39.280
+news request group
+
+00:19:39.280 --> 00:19:40.799
+is we take the news command method and
+
+00:19:40.799 --> 00:19:43.200
+we're going to move it up to the front
+
+00:19:43.200 --> 00:19:46.240
+to the first argument here and it's
+
+00:19:46.240 --> 00:19:47.520
+either going to be
+
+00:19:47.520 --> 00:19:48.720
+it's either going to be given or it's
+
+00:19:48.720 --> 00:19:50.840
+going to be nil because it's it is
+
+00:19:50.840 --> 00:19:52.080
+optional
+
+00:19:52.080 --> 00:19:54.320
+okay I briefly edited the space time
+
+00:19:54.320 --> 00:19:55.760
+continuum there to conceal the fact that
+
+00:19:55.760 --> 00:19:56.400
+I had
+
+00:19:56.400 --> 00:19:57.679
+actually not finished writing the code
+
+00:19:57.679 --> 00:19:59.440
+that I was supposed to write anyway
+
+00:19:59.440 --> 00:20:02.159
+um so now we have once we've reordered
+
+00:20:02.159 --> 00:20:02.960
+the
+
+00:20:02.960 --> 00:20:04.320
+the arguments to the function then we
+
+00:20:04.320 --> 00:20:05.760
+have to check our various possible
+
+00:20:05.760 --> 00:20:06.880
+values one is
+
+00:20:06.880 --> 00:20:08.640
+uh that the server was not passed in in
+
+00:20:08.640 --> 00:20:10.080
+which case we recall
+
+00:20:10.080 --> 00:20:12.400
+request group with the server um the
+
+00:20:12.400 --> 00:20:13.840
+other is that it's just a string in
+
+00:20:13.840 --> 00:20:15.360
+which case we do that and then this is
+
+00:20:15.360 --> 00:20:16.559
+sort of the the normal
+
+00:20:16.559 --> 00:20:18.559
+the normal case that we would expect to
+
+00:20:18.559 --> 00:20:20.720
+cons so that's not that bad it's not you
+
+00:20:20.720 --> 00:20:21.039
+know
+
+00:20:21.039 --> 00:20:23.760
+it's not beautiful um I would be sort of
+
+00:20:23.760 --> 00:20:24.480
+ashamed to
+
+00:20:24.480 --> 00:20:26.159
+let anybody see that particular macro
+
+00:20:26.159 --> 00:20:28.000
+but I think that it would work okay
+
+00:20:28.000 --> 00:20:30.640
+now the more difficult thing is going to
+
+00:20:30.640 --> 00:20:31.440
+be
+
+00:20:31.440 --> 00:20:34.640
+the data variables so
+
+00:20:34.640 --> 00:20:37.600
+the equivalent of def vu because our two
+
+00:20:37.600 --> 00:20:39.360
+options for defining classes here are
+
+00:20:39.360 --> 00:20:41.039
+def struct and def class both of which
+
+00:20:41.039 --> 00:20:41.919
+required you
+
+00:20:41.919 --> 00:20:45.280
+to define the slots inside this macro
+
+00:20:45.280 --> 00:20:46.960
+itself
+
+00:20:46.960 --> 00:20:49.039
+so defu is top level um how do we get
+
+00:20:49.039 --> 00:20:51.280
+the top level this top level macro
+
+00:20:51.280 --> 00:20:55.039
+uh to insert slot names into these
+
+00:20:55.039 --> 00:20:56.240
+definitions it's
+
+00:20:56.240 --> 00:20:58.960
+it's possible that it'll be um that I
+
+00:20:58.960 --> 00:21:00.240
+could monkey patch
+
+00:21:00.240 --> 00:21:03.039
+uh an existing struct or an existing
+
+00:21:03.039 --> 00:21:04.799
+class to add a new slot into it that
+
+00:21:04.799 --> 00:21:05.280
+sounds
+
+00:21:05.280 --> 00:21:07.760
+ugly the other option would be to give
+
+00:21:07.760 --> 00:21:09.600
+it a server variable slot which is just
+
+00:21:09.600 --> 00:21:11.520
+a generalized bucket
+
+00:21:11.520 --> 00:21:13.760
+that holds anything that gets defined
+
+00:21:13.760 --> 00:21:15.520
+via def loop
+
+00:21:15.520 --> 00:21:16.720
+I don't like either of those solutions
+
+00:21:16.720 --> 00:21:18.799
+but I'm I don't see any other
+
+00:21:18.799 --> 00:21:22.480
+any other way of doing that so we re
+
+00:21:22.480 --> 00:21:25.520
+rewrite the nno declare macro to either
+
+00:21:25.520 --> 00:21:27.440
+be a destructor or a def class
+
+00:21:27.440 --> 00:21:29.840
+and we rewrite the def boom macro to
+
+00:21:29.840 --> 00:21:31.039
+somehow
+
+00:21:31.039 --> 00:21:33.039
+associate that variable name the symbol
+
+00:21:33.039 --> 00:21:34.480
+with the with the resulting class
+
+00:21:34.480 --> 00:21:36.159
+definition
+
+00:21:36.159 --> 00:21:37.760
+then the last question is do we use
+
+00:21:37.760 --> 00:21:39.600
+structure classes
+
+00:21:39.600 --> 00:21:41.600
+they both got their their strengths and
+
+00:21:41.600 --> 00:21:43.200
+their weaknesses
+
+00:21:43.200 --> 00:21:46.480
+the nice thing is that I mean I've got
+
+00:21:46.480 --> 00:21:47.520
+how many servers you're going to have
+
+00:21:47.520 --> 00:21:49.600
+really I've got I think less than 10
+
+00:21:49.600 --> 00:21:51.919
+uh truly deranged mine might have as as
+
+00:21:51.919 --> 00:21:52.960
+many as
+
+00:21:52.960 --> 00:21:55.440
+50 let's double that to 100 100 of
+
+00:21:55.440 --> 00:21:56.480
+anything is not going to matter it
+
+00:21:56.480 --> 00:21:58.400
+doesn't matter what we use
+
+00:21:58.400 --> 00:22:00.159
+death structures are simpler they're
+
+00:22:00.159 --> 00:22:02.720
+lighter weight they're defined on top of
+
+00:22:02.720 --> 00:22:05.600
+the direct the c records so you know
+
+00:22:05.600 --> 00:22:06.960
+that's nice
+
+00:22:06.960 --> 00:22:08.559
+the slots don't carry very much
+
+00:22:08.559 --> 00:22:10.320
+information with them there's no type
+
+00:22:10.320 --> 00:22:11.760
+information there's no doc string for
+
+00:22:11.760 --> 00:22:14.480
+the slots themselves
+
+00:22:14.480 --> 00:22:16.559
+they can also only do single inheritance
+
+00:22:16.559 --> 00:22:17.919
+which some might say
+
+00:22:17.919 --> 00:22:21.120
+was an advantage def class each slot
+
+00:22:21.120 --> 00:22:22.640
+gets a lot more information associated
+
+00:22:22.640 --> 00:22:24.000
+with it with it which I think can be
+
+00:22:24.000 --> 00:22:24.480
+nice
+
+00:22:24.480 --> 00:22:27.120
+it can do multiple inheritance if you're
+
+00:22:27.120 --> 00:22:28.799
+going to go there
+
+00:22:28.799 --> 00:22:30.720
+they are heavier weight in particular
+
+00:22:30.720 --> 00:22:32.640
+their printed representation is gross
+
+00:22:32.640 --> 00:22:34.080
+it's enormous
+
+00:22:34.080 --> 00:22:35.840
+so if you see one show up in a back
+
+00:22:35.840 --> 00:22:37.520
+trace or in your messages buffer can
+
+00:22:37.520 --> 00:22:38.240
+really
+
+00:22:38.240 --> 00:22:39.520
+it can really blow that up and make it
+
+00:22:39.520 --> 00:22:41.360
+hard to read this of course won't be an
+
+00:22:41.360 --> 00:22:43.200
+issue because our code won't have any
+
+00:22:43.200 --> 00:22:46.240
+errors in it um my argument for multiple
+
+00:22:46.240 --> 00:22:48.320
+inheritance here is that I can imagine
+
+00:22:48.320 --> 00:22:51.280
+new servers falling into sort of like a
+
+00:22:51.280 --> 00:22:52.720
+little two by two matrix of
+
+00:22:52.720 --> 00:22:56.240
+of parent classes one being news versus
+
+00:22:56.240 --> 00:22:56.799
+mail
+
+00:22:56.799 --> 00:23:00.320
+so news the messages belong to somebody
+
+00:23:00.320 --> 00:23:00.720
+else
+
+00:23:00.720 --> 00:23:02.080
+you can't touch them you can't delete
+
+00:23:02.080 --> 00:23:03.840
+them mail meaning
+
+00:23:03.840 --> 00:23:06.000
+the messages are under your command
+
+00:23:06.000 --> 00:23:08.960
+either a local mail dealer a remote imap
+
+00:23:08.960 --> 00:23:11.039
+you're allowed to spool them copy them
+
+00:23:11.039 --> 00:23:12.640
+delete them at will
+
+00:23:12.640 --> 00:23:13.919
+and then the other sort of line of the
+
+00:23:13.919 --> 00:23:16.400
+matrix would be a local file system
+
+00:23:16.400 --> 00:23:19.760
+versus some kind of a you know server
+
+00:23:19.760 --> 00:23:20.559
+port
+
+00:23:20.559 --> 00:23:23.280
+remote access and that second the server
+
+00:23:23.280 --> 00:23:24.960
+port remote access thing might require
+
+00:23:24.960 --> 00:23:26.880
+authentication it might require a keep
+
+00:23:26.880 --> 00:23:28.559
+alive for a connection
+
+00:23:28.559 --> 00:23:30.159
+um it's there's going to be a process
+
+00:23:30.159 --> 00:23:31.600
+there rather than just file system
+
+00:23:31.600 --> 00:23:32.400
+commands
+
+00:23:32.400 --> 00:23:33.840
+so I could see if I was going to do
+
+00:23:33.840 --> 00:23:35.360
+multiple inheritance that's what I would
+
+00:23:35.360 --> 00:23:36.240
+do those two
+
+00:23:36.240 --> 00:23:39.039
+those two possible parent classes anyway
+
+00:23:39.039 --> 00:23:40.400
+that's as far as I've gotten
+
+00:23:40.400 --> 00:23:41.520
+I thought that I would be able to write
+
+00:23:41.520 --> 00:23:43.279
+more of this code before I did this talk
+
+00:23:43.279 --> 00:23:44.720
+but instead I spent the whole time
+
+00:23:44.720 --> 00:23:46.720
+messing with video codecs but that's
+
+00:23:46.720 --> 00:23:48.320
+where we're at and I'm going to cut
+
+00:23:48.320 --> 00:23:49.440
+myself off now
+
+00:23:49.440 --> 00:23:50.960
+I hope there are questions I hope I'm
+
+00:23:50.960 --> 00:23:53.440
+there to to answer your questions
+
+00:23:53.440 --> 00:23:55.919
+and thanks very much again to everyone
+
+00:23:55.919 --> 00:23:57.120
+involved
+
+00:23:57.120 --> 00:23:59.279
+bye
diff --git a/2020/subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt b/2020/subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt
new file mode 100644
index 00000000..6810a359
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--33-maxima-a-computer-algebra-system-in-emacs--fermin.vtt
@@ -0,0 +1,1708 @@
+WEBVTT
+
+00:00:01.680 --> 00:00:04.480
+you are now unmuted
+
+00:00:04.480 --> 00:00:08.000
+okay can you guys hear me yeah
+
+00:00:08.000 --> 00:00:11.280
+can you guys hear me sir yep I can and
+
+00:00:11.280 --> 00:00:14.480
+we're live so take it away okay
+
+00:00:14.480 --> 00:00:17.199
+so um hello everyone my name is ferming
+
+00:00:17.199 --> 00:00:18.400
+I'm a programmer
+
+00:00:18.400 --> 00:00:20.960
+a math student from spain I've been
+
+00:00:20.960 --> 00:00:22.400
+using me e-max for
+
+00:00:22.400 --> 00:00:24.960
+two years now more or less and today I'm
+
+00:00:24.960 --> 00:00:26.000
+going to talk about
+
+00:00:26.000 --> 00:00:28.320
+a maxima computer algebra system in 2
+
+00:00:28.320 --> 00:00:29.199
+max
+
+00:00:29.199 --> 00:00:32.239
+so let's talk about what is maxima
+
+00:00:32.239 --> 00:00:34.239
+well maxim is a system for manipulation
+
+00:00:34.239 --> 00:00:36.079
+of symbolic and numerical expression
+
+00:00:36.079 --> 00:00:37.920
+and it's similar in some regard to
+
+00:00:37.920 --> 00:00:39.440
+octave
+
+00:00:39.440 --> 00:00:42.160
+and it's also free software is derived
+
+00:00:42.160 --> 00:00:45.039
+from the maxima from the 60 from the m80
+
+00:00:45.039 --> 00:00:47.120
+and it's written in common lisp which is
+
+00:00:47.120 --> 00:00:48.320
+a language that I really
+
+00:00:48.320 --> 00:00:50.719
+like I enjoy writing it so for me it's a
+
+00:00:50.719 --> 00:00:51.600
+plus
+
+00:00:51.600 --> 00:00:55.039
+okay so let's talk about the initial
+
+00:00:55.039 --> 00:00:57.039
+support for maxima when I first started
+
+00:00:57.039 --> 00:00:59.280
+using it I looked for support into Emacs
+
+00:00:59.280 --> 00:01:00.320
+and I found that
+
+00:01:00.320 --> 00:01:03.120
+there's two major modes in the main
+
+00:01:03.120 --> 00:01:04.640
+repository of maxima
+
+00:01:04.640 --> 00:01:07.200
+for remax the first one is imaxima which
+
+00:01:07.200 --> 00:01:09.280
+I don't know too much about it
+
+00:01:09.280 --> 00:01:12.000
+and the second one is maxima dot l which
+
+00:01:12.000 --> 00:01:13.439
+is the one I took first
+
+00:01:13.439 --> 00:01:16.640
+and it was pretty nice has like a major
+
+00:01:16.640 --> 00:01:18.080
+mode a minor mode
+
+00:01:18.080 --> 00:01:21.280
+a nice ripple but it also has some
+
+00:01:21.280 --> 00:01:23.040
+disadvantage
+
+00:01:23.040 --> 00:01:25.040
+and the first one is that is quite
+
+00:01:25.040 --> 00:01:26.479
+outdated I think
+
+00:01:26.479 --> 00:01:29.600
+it was from the 2007
+
+00:01:29.600 --> 00:01:30.960
+so it's not tested with the current
+
+00:01:30.960 --> 00:01:33.280
+email version and the second one
+
+00:01:33.280 --> 00:01:35.520
+is that it doesn't use modern e-max
+
+00:01:35.520 --> 00:01:36.320
+capability
+
+00:01:36.320 --> 00:01:38.640
+I'm talking for example about the last
+
+00:01:38.640 --> 00:01:40.479
+or more latex preview
+
+00:01:40.479 --> 00:01:44.720
+from the last a max 27.1 I think
+
+00:01:44.720 --> 00:01:46.079
+and that's why is that they know
+
+00:01:46.079 --> 00:01:47.920
+integrated with common third party
+
+00:01:47.920 --> 00:01:49.600
+extension I'm talking about company for
+
+00:01:49.600 --> 00:01:51.520
+example third party
+
+00:01:51.520 --> 00:01:55.360
+yeah you know the alpa melba packages
+
+00:01:55.360 --> 00:01:57.280
+so uh this stock is going to be divided
+
+00:01:57.280 --> 00:01:58.719
+in two parts the first one is going to
+
+00:01:58.719 --> 00:02:00.799
+be how I maximize my date today
+
+00:02:00.799 --> 00:02:03.040
+in max exercise don't worry it's going
+
+00:02:03.040 --> 00:02:03.840
+to be
+
+00:02:03.840 --> 00:02:06.000
+quite easy and the second one is going
+
+00:02:06.000 --> 00:02:07.680
+to be why for the package
+
+00:02:07.680 --> 00:02:10.560
+and the list improvement that I did and
+
+00:02:10.560 --> 00:02:13.200
+a couple of things more maybe the future
+
+00:02:13.200 --> 00:02:14.480
+and where's the package right now if you
+
+00:02:14.480 --> 00:02:16.720
+can use it so
+
+00:02:16.720 --> 00:02:19.440
+let's talk about the workflow so right
+
+00:02:19.440 --> 00:02:21.360
+out of the box it has like an
+
+00:02:21.360 --> 00:02:23.040
+orimal support I didn't write this it
+
+00:02:23.040 --> 00:02:24.400
+was already
+
+00:02:24.400 --> 00:02:27.680
+in Emacs
+
+00:02:27.680 --> 00:02:30.319
+so that's pretty nice let's go with a
+
+00:02:30.319 --> 00:02:32.720
+simple example
+
+00:02:32.720 --> 00:02:34.480
+okay so this is an array of three
+
+00:02:34.480 --> 00:02:36.000
+equations and three variables
+
+00:02:36.000 --> 00:02:37.920
+so it's a system that can be solved and
+
+00:02:37.920 --> 00:02:39.840
+the solution is unique
+
+00:02:39.840 --> 00:02:42.560
+um so we're going to solve it right
+
+00:02:42.560 --> 00:02:44.120
+let's go
+
+00:02:44.120 --> 00:02:47.519
+solutions okay here's how you define a
+
+00:02:47.519 --> 00:02:48.080
+variable
+
+00:02:48.080 --> 00:02:52.640
+in it's called solve okay
+
+00:02:52.640 --> 00:02:56.480
+it's called implicit explicit
+
+00:02:56.480 --> 00:03:00.400
+sorry okay and now an array of
+
+00:03:00.400 --> 00:03:03.680
+our variables actually okay
+
+00:03:03.680 --> 00:03:05.760
+so first of all we have to send this
+
+00:03:05.760 --> 00:03:07.599
+variable to the maxima
+
+00:03:07.599 --> 00:03:10.400
+repo with we can do that with ctrl c
+
+00:03:10.400 --> 00:03:11.200
+control c
+
+00:03:11.200 --> 00:03:14.480
+or with the maxima send line
+
+00:03:14.480 --> 00:03:19.200
+okay so let's um let's put the maxima
+
+00:03:19.200 --> 00:03:20.560
+buffer right here
+
+00:03:20.560 --> 00:03:23.680
+okay let's so um
+
+00:03:23.680 --> 00:03:25.360
+right now we can get the solution like
+
+00:03:25.360 --> 00:03:27.040
+this so we call already
+
+00:03:27.040 --> 00:03:29.360
+uh we call this line right now control
+
+00:03:29.360 --> 00:03:30.239
+sequence to c
+
+00:03:30.239 --> 00:03:31.920
+as you can see we get like an array
+
+00:03:31.920 --> 00:03:33.440
+inside an array because
+
+00:03:33.440 --> 00:03:36.080
+uh let's see why we get this so we can
+
+00:03:36.080 --> 00:03:38.799
+call maxima
+
+00:03:38.799 --> 00:03:42.239
+help a point this will open a
+
+00:03:42.239 --> 00:03:44.879
+dock um buffer with all information
+
+00:03:44.879 --> 00:03:46.000
+about the
+
+00:03:46.000 --> 00:03:48.799
+solve function so we can see that this
+
+00:03:48.799 --> 00:03:51.360
+list of solution equations
+
+00:03:51.360 --> 00:03:54.560
+you can see it okay so but we no we know
+
+00:03:54.560 --> 00:03:56.640
+that this system only have one solution
+
+00:03:56.640 --> 00:03:58.239
+so we're only interested in the first
+
+00:03:58.239 --> 00:04:00.400
+one we can do this like pretty easily
+
+00:04:00.400 --> 00:04:02.080
+just to take the first one
+
+00:04:02.080 --> 00:04:05.120
+we can send it to the buffer so this is
+
+00:04:05.120 --> 00:04:06.640
+quite easy example as you can see
+
+00:04:06.640 --> 00:04:09.280
+they have to completion much of the help
+
+00:04:09.280 --> 00:04:10.400
+facilities that we have
+
+00:04:10.400 --> 00:04:12.319
+we can also get information about the
+
+00:04:12.319 --> 00:04:14.720
+symbol for example maxima
+
+00:04:14.720 --> 00:04:17.440
+symbol doc and we get in the and now you
+
+00:04:17.440 --> 00:04:17.840
+can see
+
+00:04:17.840 --> 00:04:19.840
+correctly in the mini buffer all the
+
+00:04:19.840 --> 00:04:20.959
+possible
+
+00:04:20.959 --> 00:04:24.080
+um parameter of the function
+
+00:04:24.080 --> 00:04:28.000
+right so let's continue
+
+00:04:28.000 --> 00:04:31.440
+okay so let's go to a more well
+
+00:04:31.440 --> 00:04:34.880
+complicated example to say oops
+
+00:04:34.880 --> 00:04:38.560
+okay so we have this
+
+00:04:38.560 --> 00:04:42.400
+equation and we want to go from -1 to 5
+
+00:04:42.400 --> 00:04:43.919
+I want to show in a nice
+
+00:04:43.919 --> 00:04:46.400
+graph right first of all we begin
+
+00:04:46.400 --> 00:04:47.759
+sending this line to the
+
+00:04:47.759 --> 00:04:51.759
+maxima ripple hold it button again
+
+00:04:51.759 --> 00:04:54.880
+okay um so this is not ideal if you want
+
+00:04:54.880 --> 00:04:56.960
+to write down this equation because
+
+00:04:56.960 --> 00:05:00.160
+it's quite messy what is when so
+
+00:05:00.160 --> 00:05:03.039
+uh what's thing are where so we can call
+
+00:05:03.039 --> 00:05:04.479
+the function maxima
+
+00:05:04.479 --> 00:05:07.520
+let's say insert form okay
+
+00:05:07.520 --> 00:05:10.240
+and this is more easy this basically put
+
+00:05:10.240 --> 00:05:11.280
+text behind
+
+00:05:11.280 --> 00:05:14.240
+and led or mode to render it and this is
+
+00:05:14.240 --> 00:05:15.120
+quite easy to
+
+00:05:15.120 --> 00:05:19.039
+write down you can use it like in every
+
+00:05:19.039 --> 00:05:22.560
+expression so um first we have to call a
+
+00:05:22.560 --> 00:05:23.199
+library
+
+00:05:23.199 --> 00:05:27.280
+let's load the library library draw
+
+00:05:27.280 --> 00:05:29.199
+we have also completion for local
+
+00:05:29.199 --> 00:05:31.520
+variable and local
+
+00:05:31.520 --> 00:05:35.039
+libraries sorry let me try to finish
+
+00:05:35.039 --> 00:05:38.240
+draw okay and we send the line
+
+00:05:38.240 --> 00:05:40.320
+so right now we have a leverage and we
+
+00:05:40.320 --> 00:05:42.240
+should even have auto completion for the
+
+00:05:42.240 --> 00:05:43.600
+library function
+
+00:05:43.600 --> 00:05:47.039
+okay we have let's call draw2d
+
+00:05:47.039 --> 00:05:50.400
+and now we can call implicit we should
+
+00:05:50.400 --> 00:05:51.199
+have
+
+00:05:51.199 --> 00:05:54.400
+okay and we can I mean put the variable
+
+00:05:54.400 --> 00:05:57.520
+of equations we put the first variable d
+
+00:05:57.520 --> 00:05:58.639
+minus
+
+00:05:58.639 --> 00:06:02.319
+five d five five
+
+00:06:02.319 --> 00:06:05.280
+the v variable the minus five and the
+
+00:06:05.280 --> 00:06:06.639
+five
+
+00:06:06.639 --> 00:06:09.680
+okay it should be all all good so let me
+
+00:06:09.680 --> 00:06:11.759
+try to send it
+
+00:06:11.759 --> 00:06:14.639
+okay you cannot see it right now because
+
+00:06:14.639 --> 00:06:16.639
+I'm just sharing the maxima screen let
+
+00:06:16.639 --> 00:06:19.360
+me try to change that
+
+00:06:19.360 --> 00:06:23.520
+okay um
+
+00:06:23.520 --> 00:06:31.520
+okay can you plot hello
+
+00:06:31.520 --> 00:06:33.919
+okay so this is basically the graph that
+
+00:06:33.919 --> 00:06:35.440
+I can upload generates
+
+00:06:35.440 --> 00:06:38.800
+uh right now it's not integrated into
+
+00:06:38.800 --> 00:06:41.039
+into the maximum package but it's a work
+
+00:06:41.039 --> 00:06:42.240
+in progress
+
+00:06:42.240 --> 00:06:46.000
+so let's go back to Emacs
+
+00:06:46.000 --> 00:06:50.160
+uh where are you okay there you are okay
+
+00:06:50.160 --> 00:06:53.520
+okay so um
+
+00:06:53.520 --> 00:06:56.639
+let's continue so uh this is some of the
+
+00:06:56.639 --> 00:06:57.759
+things that you can use
+
+00:06:57.759 --> 00:07:00.000
+for your day-to-day programming in
+
+00:07:00.000 --> 00:07:01.919
+maxima
+
+00:07:01.919 --> 00:07:05.759
+let's go now with the
+
+00:07:05.759 --> 00:07:07.360
+okay as you can see this is just text
+
+00:07:07.360 --> 00:07:08.880
+that is render
+
+00:07:08.880 --> 00:07:11.199
+okay let's go within a slide this is how
+
+00:07:11.199 --> 00:07:13.440
+I use maxima a simple example you don't
+
+00:07:13.440 --> 00:07:14.400
+want to
+
+00:07:14.400 --> 00:07:16.240
+talk too much about it because everyone
+
+00:07:16.240 --> 00:07:17.919
+use the package in a different way
+
+00:07:17.919 --> 00:07:19.680
+so right now I'm going to talk about the
+
+00:07:19.680 --> 00:07:21.039
+original package and
+
+00:07:21.039 --> 00:07:23.520
+the way I change it right so the
+
+00:07:23.520 --> 00:07:25.120
+documentation
+
+00:07:25.120 --> 00:07:27.840
+of the original was great but for me it
+
+00:07:27.840 --> 00:07:29.680
+wasn't embedded in the code
+
+00:07:29.680 --> 00:07:31.840
+it was something sometimes hard to read
+
+00:07:31.840 --> 00:07:33.599
+like it was like a big
+
+00:07:33.599 --> 00:07:36.319
+chunk of comment it gave me all the
+
+00:07:36.319 --> 00:07:37.039
+information
+
+00:07:37.039 --> 00:07:40.400
+like um for me that's too much I prefer
+
+00:07:40.400 --> 00:07:44.240
+a cohesive small comment and then a big
+
+00:07:44.240 --> 00:07:45.360
+redmi will order
+
+00:07:45.360 --> 00:07:47.759
+all the links and information so that's
+
+00:07:47.759 --> 00:07:48.960
+one of the first thing I
+
+00:07:48.960 --> 00:07:52.080
+change um then also completion I'm a big
+
+00:07:52.080 --> 00:07:52.560
+fan
+
+00:07:52.560 --> 00:07:55.759
+I'm used to slime so I'm I love
+
+00:07:55.759 --> 00:07:58.639
+great auto completion so um the first
+
+00:07:58.639 --> 00:08:00.160
+thing that I noticed that well
+
+00:08:00.160 --> 00:08:01.840
+it uses an absolute function I don't
+
+00:08:01.840 --> 00:08:04.479
+know if you can see correctly okay
+
+00:08:04.479 --> 00:08:07.039
+comment dynamic is deprecated and it
+
+00:08:07.039 --> 00:08:08.800
+also have like this
+
+00:08:08.800 --> 00:08:10.720
+variable which is maximus symbol which
+
+00:08:10.720 --> 00:08:12.720
+is basically a big
+
+00:08:12.720 --> 00:08:16.160
+list of all the possible completions so
+
+00:08:16.160 --> 00:08:19.280
+if I load the library it's not aware of
+
+00:08:19.280 --> 00:08:20.960
+the new symbols or even if I
+
+00:08:20.960 --> 00:08:23.039
+create a variable it's not loaded so
+
+00:08:23.039 --> 00:08:24.240
+it's not dynamic
+
+00:08:24.240 --> 00:08:26.160
+so I want the first thing I want is
+
+00:08:26.160 --> 00:08:28.319
+dynamic completion right
+
+00:08:28.319 --> 00:08:31.680
+so I improve it which wasn't that hard
+
+00:08:31.680 --> 00:08:34.159
+I first of all create maximum completion
+
+00:08:34.159 --> 00:08:36.080
+which we're going to see in a moment
+
+00:08:36.080 --> 00:08:38.479
+and then it changes completion region so
+
+00:08:38.479 --> 00:08:39.200
+this is the
+
+00:08:39.200 --> 00:08:41.039
+improved version but the good thing is
+
+00:08:41.039 --> 00:08:43.760
+like I decoupled the completion function
+
+00:08:43.760 --> 00:08:45.839
+so I make that you can use it on your
+
+00:08:45.839 --> 00:08:47.600
+own so you get a prefix
+
+00:08:47.600 --> 00:08:50.800
+which is um like
+
+00:08:50.800 --> 00:08:52.560
+the thing that you're going to also
+
+00:08:52.560 --> 00:08:55.040
+complete you get the inferior process
+
+00:08:55.040 --> 00:08:56.959
+which I'm going to talk about later but
+
+00:08:56.959 --> 00:08:58.959
+basically it's a maxima process you can
+
+00:08:58.959 --> 00:08:59.760
+work with
+
+00:08:59.760 --> 00:09:01.760
+and you get an optional argument which
+
+00:09:01.760 --> 00:09:03.040
+is fuzzy finding
+
+00:09:03.040 --> 00:09:06.399
+okay so you can easily send a block here
+
+00:09:06.399 --> 00:09:07.200
+what
+
+00:09:07.200 --> 00:09:10.399
+uh with the propos which is a maxima
+
+00:09:10.399 --> 00:09:11.440
+command that gets you
+
+00:09:11.440 --> 00:09:13.839
+all the auto completion and then you
+
+00:09:13.839 --> 00:09:14.959
+process the
+
+00:09:14.959 --> 00:09:18.240
+the output and you return a list
+
+00:09:18.240 --> 00:09:20.480
+of possible completion this function can
+
+00:09:20.480 --> 00:09:21.600
+be easily put into
+
+00:09:21.600 --> 00:09:24.800
+company as you can see you just
+
+00:09:24.800 --> 00:09:26.640
+get maximum auxiliary inferior process
+
+00:09:26.640 --> 00:09:28.560
+is a process that just
+
+00:09:28.560 --> 00:09:32.080
+uses sorry I have of
+
+00:09:32.080 --> 00:09:35.360
+all the apropos and the get that symbol
+
+00:09:35.360 --> 00:09:36.480
+it's like uh
+
+00:09:36.480 --> 00:09:39.440
+like you say auxiliary let's help me uh
+
+00:09:39.440 --> 00:09:41.360
+for that dirty stuff
+
+00:09:41.360 --> 00:09:43.680
+so and process manipulation let's talk
+
+00:09:43.680 --> 00:09:44.640
+about
+
+00:09:44.640 --> 00:09:46.959
+how the maxima process was in the
+
+00:09:46.959 --> 00:09:47.920
+beginning
+
+00:09:47.920 --> 00:09:50.720
+so at first it was just one process and
+
+00:09:50.720 --> 00:09:52.560
+you send all of the things there
+
+00:09:52.560 --> 00:09:54.560
+and you move the processor here and
+
+00:09:54.560 --> 00:09:56.320
+there and
+
+00:09:56.320 --> 00:09:58.160
+there was a global state right so all
+
+00:09:58.160 --> 00:09:59.600
+the function depends on
+
+00:09:59.600 --> 00:10:02.000
+variable global variables and I don't
+
+00:10:02.000 --> 00:10:05.120
+like that approach I prefer more like a
+
+00:10:05.120 --> 00:10:07.680
+shirt to say functional like you sense
+
+00:10:07.680 --> 00:10:09.519
+one of things and you return
+
+00:10:09.519 --> 00:10:12.000
+something so it's not like a void
+
+00:10:12.000 --> 00:10:13.440
+function so to say
+
+00:10:13.440 --> 00:10:16.399
+so I change it recipe uh well this is
+
+00:10:16.399 --> 00:10:18.079
+the maxima start function now
+
+00:10:18.079 --> 00:10:20.959
+let's just create a startup process with
+
+00:10:20.959 --> 00:10:22.560
+this function which is maxima make
+
+00:10:22.560 --> 00:10:23.680
+inferior
+
+00:10:23.680 --> 00:10:26.880
+so this function just gets a name
+
+00:10:26.880 --> 00:10:30.000
+and it return a process of maxima and
+
+00:10:30.000 --> 00:10:31.519
+you can then manipulate it the way you
+
+00:10:31.519 --> 00:10:32.240
+want
+
+00:10:32.240 --> 00:10:35.600
+let's see a better version so this is
+
+00:10:35.600 --> 00:10:36.800
+the opposite right this
+
+00:10:36.800 --> 00:10:39.200
+remove an inferior process and delete
+
+00:10:39.200 --> 00:10:41.760
+the process and kill the buffer
+
+00:10:41.760 --> 00:10:43.440
+right so let's give an example because
+
+00:10:43.440 --> 00:10:45.519
+this you can see pretty easily in this
+
+00:10:45.519 --> 00:10:46.399
+example
+
+00:10:46.399 --> 00:10:50.079
+so I want to go to the scratch buffer
+
+00:10:50.079 --> 00:10:51.519
+which I think you can see it better
+
+00:10:51.519 --> 00:10:54.399
+okay so this is the way you can get a
+
+00:10:54.399 --> 00:10:55.760
+process with your name
+
+00:10:55.760 --> 00:10:58.320
+and save it into a variable right let's
+
+00:10:58.320 --> 00:11:00.880
+execute this so as you can see well
+
+00:11:00.880 --> 00:11:02.880
+I don't know if you can see big you get
+
+00:11:02.880 --> 00:11:03.920
+a process
+
+00:11:03.920 --> 00:11:05.839
+let's go to it the process called my
+
+00:11:05.839 --> 00:11:07.040
+maxima
+
+00:11:07.040 --> 00:11:09.519
+as the buffer right and if we can you
+
+00:11:09.519 --> 00:11:10.079
+can send
+
+00:11:10.079 --> 00:11:12.240
+stuff to the process right we can call
+
+00:11:12.240 --> 00:11:14.959
+maximus in block get a block of valid
+
+00:11:14.959 --> 00:11:16.880
+maxima code and just pass the variable
+
+00:11:16.880 --> 00:11:17.760
+the process
+
+00:11:17.760 --> 00:11:20.800
+and we send code to the process right we
+
+00:11:20.800 --> 00:11:21.519
+can
+
+00:11:21.519 --> 00:11:23.440
+this is useful if you have some
+
+00:11:23.440 --> 00:11:25.760
+expensive computation that you want
+
+00:11:25.760 --> 00:11:28.480
+to process laser to say so the process
+
+00:11:28.480 --> 00:11:29.680
+can manage it
+
+00:11:29.680 --> 00:11:32.640
+and when you get the results correctly
+
+00:11:32.640 --> 00:11:33.920
+you can also get the result from the
+
+00:11:33.920 --> 00:11:34.399
+process
+
+00:11:34.399 --> 00:11:35.920
+I mean I don't put it here but quite
+
+00:11:35.920 --> 00:11:38.000
+easy and then you
+
+00:11:38.000 --> 00:11:41.200
+removed in favor which is the way to get
+
+00:11:41.200 --> 00:11:42.079
+rid of the process
+
+00:11:42.079 --> 00:11:43.600
+and the buffer so if we call this
+
+00:11:43.600 --> 00:11:45.279
+function we should get rid of the
+
+00:11:45.279 --> 00:11:48.399
+this process and it works the processing
+
+00:11:48.399 --> 00:11:49.920
+is no longer
+
+00:11:49.920 --> 00:11:54.160
+I'm happy to continue so um
+
+00:11:54.160 --> 00:11:56.160
+other things that improve the package on
+
+00:11:56.160 --> 00:11:57.680
+my commitment during time
+
+00:11:57.680 --> 00:11:59.760
+I'm going good okay another thing that I
+
+00:11:59.760 --> 00:12:01.360
+did to the package was to add
+
+00:12:01.360 --> 00:12:02.560
+continue integration and continue
+
+00:12:02.560 --> 00:12:04.959
+delivery right so the package didn't
+
+00:12:04.959 --> 00:12:06.320
+have any tests
+
+00:12:06.320 --> 00:12:09.440
+and the code was a little bit messy so
+
+00:12:09.440 --> 00:12:12.959
+I add integration a test
+
+00:12:12.959 --> 00:12:16.560
+and test with the test simple framework
+
+00:12:16.560 --> 00:12:19.519
+from rocky bursting the maintainer of
+
+00:12:19.519 --> 00:12:20.560
+real
+
+00:12:20.560 --> 00:12:23.279
+good which is a great package by the way
+
+00:12:23.279 --> 00:12:24.079
+um
+
+00:12:24.079 --> 00:12:25.920
+yeah this is one example of the process
+
+00:12:25.920 --> 00:12:28.079
+so right now because um
+
+00:12:28.079 --> 00:12:29.760
+the infrastructure of the process
+
+00:12:29.760 --> 00:12:31.680
+management is decoupled
+
+00:12:31.680 --> 00:12:33.680
+so I can test it pretty easily this is
+
+00:12:33.680 --> 00:12:35.200
+the test function of the
+
+00:12:35.200 --> 00:12:37.519
+inferior running so I can check if an
+
+00:12:37.519 --> 00:12:39.519
+inferior is running right now
+
+00:12:39.519 --> 00:12:41.440
+and I can just delete it after and get
+
+00:12:41.440 --> 00:12:43.200
+the results
+
+00:12:43.200 --> 00:12:45.279
+and I also did some integration with the
+
+00:12:45.279 --> 00:12:46.959
+party packages the first one company of
+
+00:12:46.959 --> 00:12:48.639
+course I love auto completion
+
+00:12:48.639 --> 00:12:50.880
+the second one was hormone that was
+
+00:12:50.880 --> 00:12:53.839
+already there and latex with the
+
+00:12:53.839 --> 00:12:56.880
+um or logic insert form
+
+00:12:56.880 --> 00:13:00.079
+and with poly mode because um let me
+
+00:13:00.079 --> 00:13:02.959
+evaluate this maxima can understand lisp
+
+00:13:02.959 --> 00:13:03.680
+code
+
+00:13:03.680 --> 00:13:06.959
+well more or less it has like a
+
+00:13:06.959 --> 00:13:10.000
+function so to say that you can send a
+
+00:13:10.000 --> 00:13:11.279
+list command to the
+
+00:13:11.279 --> 00:13:13.600
+maxima rebel and you can understand it
+
+00:13:13.600 --> 00:13:14.480
+in some way so
+
+00:13:14.480 --> 00:13:17.839
+we can go to the maxima poly
+
+00:13:17.839 --> 00:13:20.959
+only maxima right you enable polymaxima
+
+00:13:20.959 --> 00:13:22.800
+and it creates a polymode
+
+00:13:22.800 --> 00:13:25.519
+which this is lisp code and this is
+
+00:13:25.519 --> 00:13:26.399
+maxima code
+
+00:13:26.399 --> 00:13:28.639
+so we can send this to the maxima ripple
+
+00:13:28.639 --> 00:13:30.560
+we come to c control r which
+
+00:13:30.560 --> 00:13:34.240
+it sends the um the current
+
+00:13:34.240 --> 00:13:37.760
+um area region sorry
+
+00:13:37.760 --> 00:13:40.160
+and we define a variable which is called
+
+00:13:40.160 --> 00:13:41.839
+test and as we can see we have the
+
+00:13:41.839 --> 00:13:44.000
+variable test right here so you can
+
+00:13:44.000 --> 00:13:47.360
+program in lisp and you can send it to
+
+00:13:47.360 --> 00:13:48.079
+maxima
+
+00:13:48.079 --> 00:13:50.399
+so this is pretty good pretty nice um
+
+00:13:50.399 --> 00:13:51.920
+working integration with
+
+00:13:51.920 --> 00:13:55.040
+the slime mode and with swank so you can
+
+00:13:55.040 --> 00:13:57.120
+actually have a completion of
+
+00:13:57.120 --> 00:13:59.120
+a function inside the maximal list
+
+00:13:59.120 --> 00:14:00.959
+package but
+
+00:14:00.959 --> 00:14:02.800
+this is going to take quite a while
+
+00:14:02.800 --> 00:14:04.399
+because it's not trivial
+
+00:14:04.399 --> 00:14:07.360
+so um we're the feature of maxima right
+
+00:14:07.360 --> 00:14:09.440
+now well we have fonts highlighting
+
+00:14:09.440 --> 00:14:11.519
+smart indentation uh it was already in
+
+00:14:11.519 --> 00:14:14.480
+the package but now it's quite better
+
+00:14:14.480 --> 00:14:16.880
+great help functions right now I can
+
+00:14:16.880 --> 00:14:18.160
+find the recommendation quite
+
+00:14:18.160 --> 00:14:20.800
+fast and currently the menu integration
+
+00:14:20.800 --> 00:14:22.160
+this is quite basic it needs to be a
+
+00:14:22.160 --> 00:14:23.120
+little bit improved
+
+00:14:23.120 --> 00:14:25.199
+uh latex support also completion the
+
+00:14:25.199 --> 00:14:26.720
+company and maximizer process
+
+00:14:26.720 --> 00:14:28.480
+integration and mini buffer I didn't
+
+00:14:28.480 --> 00:14:29.120
+show you
+
+00:14:29.120 --> 00:14:32.880
+but basically if you call global maxima
+
+00:14:32.880 --> 00:14:34.639
+minor mode you have the minor mode you
+
+00:14:34.639 --> 00:14:36.720
+call maxima mini buffer
+
+00:14:36.720 --> 00:14:38.399
+how are you okay mini buffer you can
+
+00:14:38.399 --> 00:14:40.720
+basically just write simple maxima
+
+00:14:40.720 --> 00:14:42.720
+command and it will give you the result
+
+00:14:42.720 --> 00:14:45.920
+this is like a permanent version of um
+
+00:14:45.920 --> 00:14:48.959
+calc so you can do it you write the
+
+00:14:48.959 --> 00:14:50.560
+command and you get the output uh way
+
+00:14:50.560 --> 00:14:52.320
+more to come I have like a list
+
+00:14:52.320 --> 00:14:56.079
+of issues that I put enhancement a new
+
+00:14:56.079 --> 00:14:58.880
+feature that I'm going to develop
+
+00:14:58.880 --> 00:15:01.199
+so uh the future under presence of the
+
+00:15:01.199 --> 00:15:03.120
+package well the package is right now
+
+00:15:03.120 --> 00:15:06.880
+melpa a melba stable um
+
+00:15:06.880 --> 00:15:10.720
+in this 0.7.6 version
+
+00:15:10.720 --> 00:15:13.360
+and I'm planning to include into the
+
+00:15:13.360 --> 00:15:15.279
+known canoe alpha
+
+00:15:15.279 --> 00:15:16.720
+this is the url of the package by the
+
+00:15:16.720 --> 00:15:18.959
+way so you can if you go to metapod you
+
+00:15:18.959 --> 00:15:20.079
+put maxima and
+
+00:15:20.079 --> 00:15:22.160
+you can download it it doesn't have too
+
+00:15:22.160 --> 00:15:23.199
+much dependencies
+
+00:15:23.199 --> 00:15:26.639
+you aware of that um and thank you very
+
+00:15:26.639 --> 00:15:27.120
+much
+
+00:15:27.120 --> 00:15:28.720
+uh this is going to be my talk these are
+
+00:15:28.720 --> 00:15:30.959
+my uh information
+
+00:15:30.959 --> 00:15:33.519
+this is my gitlab this is my page which
+
+00:15:33.519 --> 00:15:34.000
+I don't
+
+00:15:34.000 --> 00:15:37.120
+love too much and this is my email
+
+00:15:37.120 --> 00:15:40.240
+so um thank you very much and I will be
+
+00:15:40.240 --> 00:15:41.839
+answering some questions right now
+
+00:15:41.839 --> 00:15:45.600
+and happy hacking
+
+00:15:45.600 --> 00:15:49.600
+you are now unmuted thank you very much
+
+00:15:49.600 --> 00:15:52.720
+vermin for the great talk um okay yeah
+
+00:15:52.720 --> 00:15:55.759
+let's see if you have any questions
+
+00:15:55.759 --> 00:15:58.800
+uh yeah I'm reading like this um
+
+00:15:58.800 --> 00:16:01.759
+so I'm a buddy october usually right now
+
+00:16:01.759 --> 00:16:04.560
+okay
+
+00:16:04.560 --> 00:16:06.880
+maxima over october yep there are a
+
+00:16:06.880 --> 00:16:08.639
+couple questions
+
+00:16:08.639 --> 00:16:11.519
+wow maxima we're okay I don't want to I
+
+00:16:11.519 --> 00:16:12.160
+don't know
+
+00:16:12.160 --> 00:16:13.940
+october that much um
+
+00:16:13.940 --> 00:16:15.680
+[Music]
+
+00:16:15.680 --> 00:16:17.839
+like I use it like a couple of times but
+
+00:16:17.839 --> 00:16:18.880
+I'm not happy
+
+00:16:18.880 --> 00:16:24.000
+and I found the octave packets to be
+
+00:16:24.000 --> 00:16:27.120
+quite a little bit harder to understand
+
+00:16:27.120 --> 00:16:31.519
+and also that
+
+00:16:31.519 --> 00:16:33.839
+it didn't have too much features like I
+
+00:16:33.839 --> 00:16:35.680
+prefer the maximum used to
+
+00:16:35.680 --> 00:16:37.839
+maybe octave is better I don't I'm not
+
+00:16:37.839 --> 00:16:38.880
+100 sure
+
+00:16:38.880 --> 00:16:40.800
+I know that you can use it for similar
+
+00:16:40.800 --> 00:16:42.079
+stuff but
+
+00:16:42.079 --> 00:16:47.120
+that's it so sorry
+
+00:16:47.120 --> 00:16:50.959
+okay I'm in a little bit of a rush sorry
+
+00:16:50.959 --> 00:16:54.079
+let me drink a little blue okay
+
+00:16:54.079 --> 00:17:00.639
+okay
+
+00:17:00.639 --> 00:17:05.280
+okay how does maxima compare to sagemath
+
+00:17:05.280 --> 00:17:08.959
+in imax
+
+00:17:08.959 --> 00:17:13.360
+I mean I don't know what is sage
+
+00:17:13.360 --> 00:17:17.439
+math I'm sorry um so I cannot answer
+
+00:17:17.439 --> 00:17:18.079
+your question
+
+00:17:18.079 --> 00:17:21.839
+with your question I think um
+
+00:17:21.839 --> 00:17:25.039
+sorry but I mean maxima is ready in
+
+00:17:25.039 --> 00:17:26.720
+combo list that's just a preference for
+
+00:17:26.720 --> 00:17:28.000
+me because I like
+
+00:17:28.000 --> 00:17:31.120
+lisp dialect and common lisp is
+
+00:17:31.120 --> 00:17:36.400
+interesting um
+
+00:17:36.400 --> 00:17:40.480
+yeah do you plan to
+
+00:17:40.480 --> 00:17:42.720
+I mean a maximum organization for maxima
+
+00:17:42.720 --> 00:17:43.840
+code block
+
+00:17:43.840 --> 00:17:47.360
+yes I want to improve the um
+
+00:17:47.360 --> 00:17:50.720
+of maxima package but I didn't have
+
+00:17:50.720 --> 00:17:52.000
+enough time and I want to
+
+00:17:52.000 --> 00:17:54.400
+clear a little bit of the code because
+
+00:17:54.400 --> 00:17:58.000
+still right now
+
+00:17:58.000 --> 00:18:00.080
+the code is quite messy in some areas
+
+00:18:00.080 --> 00:18:02.080
+because I pretty much implement first
+
+00:18:02.080 --> 00:18:03.520
+the base function I want to
+
+00:18:03.520 --> 00:18:05.600
+build on top of so right now it's quite
+
+00:18:05.600 --> 00:18:07.120
+usable but I still have something that I
+
+00:18:07.120 --> 00:18:07.919
+want to improve
+
+00:18:07.919 --> 00:18:11.120
+so when I finish that I will
+
+00:18:11.120 --> 00:18:14.799
+improve the normal version I think
+
+00:18:14.799 --> 00:18:16.640
+it's maximizing to get into into your
+
+00:18:16.640 --> 00:18:18.640
+opinion yes I
+
+00:18:18.640 --> 00:18:21.200
+I think that the creator of maxima like
+
+00:18:21.200 --> 00:18:21.919
+have this
+
+00:18:21.919 --> 00:18:26.640
+lisp mine and probably
+
+00:18:26.640 --> 00:18:29.520
+that they if you go to a symbol you get
+
+00:18:29.520 --> 00:18:30.559
+all the information
+
+00:18:30.559 --> 00:18:33.520
+and that reflects that you can actually
+
+00:18:33.520 --> 00:18:36.480
+write your program of maxima into
+
+00:18:36.480 --> 00:18:40.000
+um into lisp literally because they have
+
+00:18:40.000 --> 00:18:40.799
+a command
+
+00:18:40.799 --> 00:18:42.480
+so I think that is quite easy to get
+
+00:18:42.480 --> 00:18:44.880
+into some university use it for
+
+00:18:44.880 --> 00:18:48.240
+um first um
+
+00:18:48.240 --> 00:18:51.200
+years so it's quite easy and I think
+
+00:18:51.200 --> 00:18:53.039
+with my package you can use it
+
+00:18:53.039 --> 00:18:56.640
+like pretty pretty easily just create a
+
+00:18:56.640 --> 00:18:58.960
+file and you can start typing and
+
+00:18:58.960 --> 00:19:00.880
+maximize quite easy to install also
+
+00:19:00.880 --> 00:19:04.400
+so I think yeah it's crazy and
+
+00:19:04.400 --> 00:19:07.600
+the page should restart I don't know why
+
+00:19:07.600 --> 00:19:18.320
+sorry
+
+00:19:18.320 --> 00:19:22.559
+strict in fixed lisp syntax
+
+00:19:22.559 --> 00:19:25.440
+you're talking about the maxima itself
+
+00:19:25.440 --> 00:19:26.240
+syntax
+
+00:19:26.240 --> 00:19:27.760
+or I don't understand the question
+
+00:19:27.760 --> 00:19:32.240
+correctly
+
+00:19:32.240 --> 00:19:33.679
+well I'm going to go to the next
+
+00:19:33.679 --> 00:19:35.440
+question is there
+
+00:19:35.440 --> 00:19:37.360
+support for images in maximum mode not
+
+00:19:37.360 --> 00:19:38.880
+right now
+
+00:19:38.880 --> 00:19:45.280
+the way I want to implement some imax
+
+00:19:45.280 --> 00:19:49.120
+things uh is there support for
+
+00:19:49.120 --> 00:19:51.280
+but right now it doesn't have like a if
+
+00:19:51.280 --> 00:19:53.360
+you could want to have a new plot
+
+00:19:53.360 --> 00:19:55.600
+um inside you buffer right now it's not
+
+00:19:55.600 --> 00:19:56.720
+possible so
+
+00:19:56.720 --> 00:19:59.360
+that's the thing that I maximized that
+
+00:19:59.360 --> 00:20:01.200
+maxima.l still doesn't
+
+00:20:01.200 --> 00:20:03.520
+do which university you start to use
+
+00:20:03.520 --> 00:20:04.720
+maxima um
+
+00:20:04.720 --> 00:20:08.799
+in this aragosa university from spain
+
+00:20:08.799 --> 00:20:11.840
+they used to maximize the um thing in
+
+00:20:11.840 --> 00:20:12.640
+the engineer
+
+00:20:12.640 --> 00:20:16.400
+and in the math also so I'm 100 sure
+
+00:20:16.400 --> 00:20:18.320
+right now but when I started
+
+00:20:18.320 --> 00:20:19.679
+are you planning to option your package
+
+00:20:19.679 --> 00:20:22.559
+into maxima um I don't know about that
+
+00:20:22.559 --> 00:20:25.440
+because uh maybe can be a little bit
+
+00:20:25.440 --> 00:20:26.320
+messy
+
+00:20:26.320 --> 00:20:30.720
+um because the maxima ripple is more
+
+00:20:30.720 --> 00:20:32.960
+built around like maxima itself and they
+
+00:20:32.960 --> 00:20:33.360
+don't
+
+00:20:33.360 --> 00:20:37.600
+update the interfaces that much
+
+00:20:37.600 --> 00:20:42.240
+I have no problem like it's okay it just
+
+00:20:42.240 --> 00:20:45.360
+you have to um if you want to push you
+
+00:20:45.360 --> 00:20:46.320
+can push in other
+
+00:20:46.320 --> 00:20:48.480
+repository I mean it's just changed the
+
+00:20:48.480 --> 00:20:49.520
+file another way
+
+00:20:49.520 --> 00:20:52.880
+but also the test um is going to be a
+
+00:20:52.880 --> 00:20:54.080
+little bit harder because I think
+
+00:20:54.080 --> 00:20:55.200
+they're using
+
+00:20:55.200 --> 00:20:59.120
+search for and I'm using
+
+00:20:59.120 --> 00:21:01.200
+git lab continue integration within the
+
+00:21:01.200 --> 00:21:02.159
+jury
+
+00:21:02.159 --> 00:21:06.799
+so yeah I don't think that now unmuted
+
+00:21:06.799 --> 00:21:10.799
+yeah it will be nice
+
+00:21:10.799 --> 00:21:12.799
+okay um it's possible to include
+
+00:21:12.799 --> 00:21:14.840
+maximizing or false similar to jupiter
+
+00:21:14.840 --> 00:21:16.480
+notebooks
+
+00:21:16.480 --> 00:21:19.919
+um I mean you can uh use maximize your
+
+00:21:19.919 --> 00:21:23.280
+or files and you have maximum l mod
+
+00:21:23.280 --> 00:21:26.320
+integrated and you can like create put
+
+00:21:26.320 --> 00:21:31.520
+that code into a buffer and then
+
+00:21:31.520 --> 00:21:34.400
+uh edited correctly but it is now not it
+
+00:21:34.400 --> 00:21:36.159
+doesn't have like all the features like
+
+00:21:36.159 --> 00:21:37.679
+other languages because
+
+00:21:37.679 --> 00:21:40.480
+right now uh as my understanding is
+
+00:21:40.480 --> 00:21:42.320
+quite basic so I still have some
+
+00:21:42.320 --> 00:21:45.440
+still needs some some stuff some work
+
+00:21:45.440 --> 00:21:47.919
+around
+
+00:21:47.919 --> 00:21:52.320
+okay I think that's it
+
+00:21:52.320 --> 00:21:56.320
+you are now unmuted
+
+00:21:56.320 --> 00:21:59.600
+yep so that's it uh thank you very much
+
+00:21:59.600 --> 00:22:01.919
+fermin for your live talk and for you
+
+00:22:01.919 --> 00:22:04.640
+know the live q a
+
+00:22:04.640 --> 00:22:07.679
+thank you all amazing uh max conf
+
+00:22:07.679 --> 00:22:09.840
+cheers thank you it's thanks to you all
+
+00:22:09.840 --> 00:22:10.720
+you guys
+
+00:22:10.720 --> 00:22:16.840
+it's awesome okay thank you cheers bye
+
+00:22:16.840 --> 00:22:19.840
+bye
diff --git a/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt b/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt
new file mode 100644
index 00000000..cb262355
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--34-extend-emacs-to-modern-gui-applications-with-eaf--matthew-zeng.vtt
@@ -0,0 +1,1675 @@
+WEBVTT
+
+00:00:03.600 --> 00:00:04.560
+Hello.
+
+00:00:04.560 --> 00:00:06.720
+Hopefully everyone is staying safe and
+
+00:00:06.720 --> 00:00:08.000
+staying home,
+
+00:00:08.000 --> 00:00:10.000
+I feel very grateful to live in a world
+
+00:00:10.000 --> 00:00:12.000
+today that technology and free software
+
+00:00:12.000 --> 00:00:13.759
+can be leveraged to connect people in
+
+00:00:13.759 --> 00:00:16.080
+such disconnected and difficult times,
+
+00:00:16.080 --> 00:00:17.840
+and to have an online conference like
+
+00:00:17.840 --> 00:00:19.920
+this. Hopefully you've all
+
+00:00:19.920 --> 00:00:22.960
+enjoyed this year's EmacsConf so far.
+
+00:00:22.960 --> 00:00:24.720
+Many thanks to all the people that made
+
+00:00:24.720 --> 00:00:26.880
+this possible.
+
+00:00:26.880 --> 00:00:30.000
+Anyways, welcome to my talk "Extend Emacs
+
+00:00:30.000 --> 00:00:30.960
+to Modern GUI
+
+00:00:30.960 --> 00:00:34.079
+Applications with EAF, the Emacs
+
+00:00:34.079 --> 00:00:35.920
+Application Framework".
+
+00:00:35.920 --> 00:00:38.320
+This will be my first ever talk, so
+
+00:00:38.320 --> 00:00:39.840
+apologies for my
+
+00:00:39.840 --> 00:00:43.280
+inexperience, let us begin.
+
+00:00:43.280 --> 00:00:46.559
+About me: my name is Matthew Zeng, you can
+
+00:00:46.559 --> 00:00:47.840
+also call me MT
+
+00:00:47.840 --> 00:00:50.640
+or Mingde. I'm a Chinese Canadian living
+
+00:00:50.640 --> 00:00:51.440
+in Toronto,
+
+00:00:51.440 --> 00:00:54.239
+Ontario. Offline: I'm an undergrad
+
+00:00:54.239 --> 00:00:56.079
+studying mathematics at the University
+
+00:00:56.079 --> 00:00:57.760
+of Waterloo.
+
+00:00:57.760 --> 00:01:00.480
+Online: I'm one of the admins of the
+
+00:01:00.480 --> 00:01:03.039
+Emacs China
+
+00:01:03.039 --> 00:01:06.320
+— the largest Emacs forum in China. So,
+
+00:01:06.320 --> 00:01:08.080
+to all Chinese listening to my talk right
+
+00:01:08.080 --> 00:01:10.960
+now, feel free to check it out.
+
+00:01:10.960 --> 00:01:14.320
+And this is a link to my GitHub profile,
+
+00:01:14.320 --> 00:01:16.206
+(and) to my projects I'm involved in.
+
+00:01:16.206 --> 00:01:18.240
+One's M-EMACS which is
+
+00:01:18.240 --> 00:01:20.159
+I'm the author of — a user-friendly
+
+00:01:20.159 --> 00:01:21.840
+full-featured Emacs configuration
+
+00:01:21.840 --> 00:01:22.799
+distribution,
+
+00:01:22.799 --> 00:01:25.040
+it is what I'm using right now, as well
+
+00:01:25.040 --> 00:01:26.880
+as the Emacs Application Framework
+
+00:01:26.880 --> 00:01:29.119
+which I help to maintain along with the
+
+00:01:29.119 --> 00:01:30.400
+other author
+
+00:01:30.400 --> 00:01:33.040
+lazycat, which of course, is today's
+
+00:01:33.040 --> 00:01:35.759
+topic.
+
+00:01:35.759 --> 00:01:38.720
+So, as you all might have already
+
+00:01:38.720 --> 00:01:40.960
+noticed I'm currently using Emacs
+
+00:01:40.960 --> 00:01:43.600
+and opening navigating closing
+
+00:01:43.600 --> 00:01:45.360
+all these websites that are rendered
+
+00:01:45.360 --> 00:01:46.159
+properly
+
+00:01:46.159 --> 00:01:49.200
+all within Emacs, it's all thanks to the
+
+00:01:49.200 --> 00:01:51.840
+EAF project.
+
+00:01:51.840 --> 00:01:54.000
+So, we're living in a society that's
+
+00:01:54.000 --> 00:01:55.920
+heavily dependent on the internet
+
+00:01:55.920 --> 00:01:59.520
+and multimedia, it is unavoidable to run
+
+00:01:59.520 --> 00:02:01.200
+to some occasion that you need to
+
+00:02:01.200 --> 00:02:02.880
+open a fancy website that uses
+
+00:02:02.880 --> 00:02:04.799
+JavaScript and CSS,
+
+00:02:04.799 --> 00:02:08.239
+or you need to watch some videos. However,
+
+00:02:08.239 --> 00:02:11.120
+due to the nature and history of Emacs,
+
+00:02:11.120 --> 00:02:11.840
+it cannot
+
+00:02:11.840 --> 00:02:13.840
+render all these modern graphics
+
+00:02:13.840 --> 00:02:16.400
+effectively and efficiently.
+
+00:02:16.400 --> 00:02:19.360
+Emacs is solely a text-based editing
+
+00:02:19.360 --> 00:02:20.400
+environment,
+
+00:02:20.400 --> 00:02:23.520
+and I argue that this is not a bad thing,
+
+00:02:23.520 --> 00:02:25.680
+in fact, it is one of the reasons that me
+
+00:02:25.680 --> 00:02:27.760
+and I believe many of you as well
+
+00:02:27.760 --> 00:02:29.760
+are attracted to Emacs in the first
+
+00:02:29.760 --> 00:02:30.879
+place.
+
+00:02:30.879 --> 00:02:33.760
+Unfortunately, this results in us having
+
+00:02:33.760 --> 00:02:35.680
+to open a dedicated web browser to
+
+00:02:35.680 --> 00:02:37.040
+browse the internet,
+
+00:02:37.040 --> 00:02:38.879
+open a dedicated video player to watch
+
+00:02:38.879 --> 00:02:41.440
+some videos, or a PDF renderer to read some
+
+00:02:41.440 --> 00:02:42.640
+documents.
+
+00:02:42.640 --> 00:02:45.200
+So far Emacs cannot do all these tasks on
+
+00:02:45.200 --> 00:02:46.000
+its own
+
+00:02:46.000 --> 00:02:48.080
+but can only be achieved using other
+
+00:02:48.080 --> 00:02:51.519
+external applications.
+
+00:02:51.519 --> 00:02:55.840
+So, the other author manateelazycat,
+
+00:02:55.840 --> 00:02:58.640
+or lazycat in short, didn't want to use
+
+00:02:58.640 --> 00:03:00.560
+all these external applications,
+
+00:03:00.560 --> 00:03:03.120
+he wanted to have an uninterrupted Emacs
+
+00:03:03.120 --> 00:03:04.159
+experience,
+
+00:03:04.159 --> 00:03:07.280
+he wanted to truly live in Emacs.
+
+00:03:07.280 --> 00:03:10.080
+However, it would be a lot of work to
+
+00:03:10.080 --> 00:03:11.040
+build this
+
+00:03:11.040 --> 00:03:13.519
+modern application from scratch, there's
+
+00:03:13.519 --> 00:03:16.239
+simply no time or research to do that.
+
+00:03:16.239 --> 00:03:18.800
+So, lazycat thought of utilizing existing
+
+00:03:18.800 --> 00:03:20.400
+applications
+
+00:03:20.400 --> 00:03:22.319
+and to try to make it collaborate with
+
+00:03:22.319 --> 00:03:24.959
+Emacs, there are many solutions available,
+
+00:03:24.959 --> 00:03:26.000
+one of it
+
+00:03:26.000 --> 00:03:28.560
+is the Emacs X Windows Manager, and I'm
+
+00:03:28.560 --> 00:03:30.159
+sure a lot of you already know that —
+
+00:03:30.159 --> 00:03:33.360
+the EXWM. However, it didn't work for him,
+
+00:03:33.360 --> 00:03:35.200
+because although EXWM opens the
+
+00:03:35.200 --> 00:03:37.440
+door to use other applications within
+
+00:03:37.440 --> 00:03:38.239
+Emacs,
+
+00:03:38.239 --> 00:03:40.879
+it as a fine window manager cannot
+
+00:03:40.879 --> 00:03:41.519
+modify,
+
+00:03:41.519 --> 00:03:43.920
+customize, or extend other software from
+
+00:03:43.920 --> 00:03:45.040
+Emacs.
+
+00:03:45.040 --> 00:03:46.799
+For example, it cannot modify the
+
+00:03:46.799 --> 00:03:48.480
+behavior when you press a key in
+
+00:03:48.480 --> 00:03:49.599
+Chromium or
+
+00:03:49.599 --> 00:03:52.159
+PDF viewer, therefore it cannot utilize
+
+00:03:52.159 --> 00:03:54.000
+the rich Emacs ecosystem that's been
+
+00:03:54.000 --> 00:03:57.360
+growing for almost 40 years.
+
+00:03:57.360 --> 00:04:00.720
+On the other hand, in the EAF browser, so,
+
+00:04:00.720 --> 00:04:06.206
+if you M-x eaf-open-browser-with-history,
+
+00:04:06.206 --> 00:04:07.200
+you can see
+
+00:04:07.200 --> 00:04:09.840
+on the lower half of my screen — a list of
+
+00:04:09.840 --> 00:04:11.920
+histories sorted by my personal
+
+00:04:11.920 --> 00:04:14.560
+most visited sites, and you can search
+
+00:04:14.560 --> 00:04:16.560
+for a site that you've been
+
+00:04:16.560 --> 00:04:19.440
+to or search for some keyword in a
+
+00:04:19.440 --> 00:04:21.840
+search engine.
+
+00:04:21.840 --> 00:04:24.240
+So, this is all achieved by utilizing the
+
+00:04:24.240 --> 00:04:25.919
+popular completion framework in the
+
+00:04:25.919 --> 00:04:29.280
+Emacs ecosystem — ivy.
+
+00:04:29.280 --> 00:04:31.120
+So, lazycat decided to develop a
+
+00:04:31.120 --> 00:04:33.680
+solution of his own in 2018,
+
+00:04:33.680 --> 00:04:36.960
+namely the EAF project, so, I joined the
+
+00:04:36.960 --> 00:04:42.756
+development last year, 2019.
+
+00:04:42.756 --> 00:04:44.000
+EAF is
+
+00:04:44.000 --> 00:04:47.880
+a highly customizable and extensible
+
+00:04:47.880 --> 00:04:49.759
+GUI application framework that extends
+
+00:04:49.759 --> 00:04:52.056
+Emacs to graphical capabilities using
+
+00:04:52.056 --> 00:04:57.840
+PyQt5, and it is not a window manager.
+
+00:04:57.840 --> 00:05:02.479
+Alright. So, in the README, you can see a
+
+00:05:02.479 --> 00:05:03.440
+list of GIFs
+
+00:05:03.440 --> 00:05:05.600
+showcasing all the available EAF
+
+00:05:05.600 --> 00:05:06.720
+applications,
+
+00:05:06.720 --> 00:05:09.520
+a browser, a markdown previewer, a video
+
+00:05:09.520 --> 00:05:12.789
+player, a PDF viewer, and more.
+
+00:05:12.789 --> 00:05:14.240
+Today I don't have
+
+00:05:14.240 --> 00:05:16.160
+enough time to demonstrate each one of
+
+00:05:16.160 --> 00:05:16.560
+them,
+
+00:05:16.560 --> 00:05:18.720
+but I will select a couple applications
+
+00:05:18.720 --> 00:05:21.120
+to show you.
+
+00:05:21.120 --> 00:05:24.240
+So, since we are already using EAF browser,
+
+00:05:24.240 --> 00:05:27.840
+we'll start with this. Besides using the
+
+00:05:27.840 --> 00:05:29.600
+classic Control n (C-n), Control p (C-p)
+
+00:05:29.600 --> 00:05:32.000
+you can also use the Vim style hjkl to
+
+00:05:32.000 --> 00:05:33.840
+move up or down.
+
+00:05:33.840 --> 00:05:36.320
+Also, Meta Shift comma (M-<) or g (moves) to the
+
+00:05:36.320 --> 00:05:37.280
+beginning of page,
+
+00:05:37.280 --> 00:05:39.120
+Meta Shift period (M->) or capital g (moves) to
+
+00:05:39.120 --> 00:05:41.199
+the end of page.
+
+00:05:41.199 --> 00:05:45.306
+Vimium and Surfingkeys
+
+00:05:45.306 --> 00:05:46.479
+are popular keyboard-based
+
+00:05:46.479 --> 00:05:48.400
+browsing techniques in Chrome,
+
+00:05:48.400 --> 00:05:50.479
+and they've imported here as well. You
+
+00:05:50.479 --> 00:05:52.720
+can press f to toggle markers pointing
+
+00:05:52.720 --> 00:05:53.039
+to
+
+00:05:53.039 --> 00:05:55.280
+all the links in the current page, say, I
+
+00:05:55.280 --> 00:05:56.960
+want to visit the wiki —
+
+00:05:56.960 --> 00:05:59.680
+which comes very very handy when you
+
+00:05:59.680 --> 00:06:02.400
+want to configure EAF to your liking,
+
+00:06:02.400 --> 00:06:04.720
+so you see the marker on top of wiki is
+
+00:06:04.720 --> 00:06:05.440
+dd,
+
+00:06:05.440 --> 00:06:08.479
+press dd and Enter (RET), and now
+
+00:06:08.479 --> 00:06:10.240
+you are navigated to this link, so you
+
+00:06:10.240 --> 00:06:13.840
+don't need to use your mouse at all.
+
+00:06:13.840 --> 00:06:16.560
+So, a full list of key bindings can be
+
+00:06:16.560 --> 00:06:17.680
+found when you (press)
+
+00:06:17.680 --> 00:06:20.560
+Control h m (C-h m), just as any other Emacs major
+
+00:06:20.560 --> 00:06:21.199
+mode,
+
+00:06:21.199 --> 00:06:22.960
+so you don't have to remember everything…
+
+00:06:22.960 --> 00:06:25.600
+all the key bindings I said to you.
+
+00:06:25.600 --> 00:06:28.560
+So, this is a global binding application
+
+00:06:28.560 --> 00:06:30.960
+to every other EAF application as well.
+
+00:06:30.960 --> 00:06:36.720
+You can find it under the wiki in the
+
+00:06:36.720 --> 00:06:37.600
+keybindings
+
+00:06:37.600 --> 00:06:40.639
+section, so press f again and use
+
+00:06:40.639 --> 00:06:44.240
+ns, press Enter (RET), now you're in the
+
+00:06:44.240 --> 00:06:45.600
+keybindings web page.
+
+00:06:45.600 --> 00:06:47.520
+You can see all of the keybindings
+
+00:06:47.520 --> 00:06:49.280
+available in every
+
+00:06:49.280 --> 00:06:53.919
+EAF application, and you can try them out,
+
+00:06:53.919 --> 00:06:56.479
+and you can customize your key bindings
+
+00:06:56.479 --> 00:06:57.956
+using eaf-bind-key,
+
+00:06:57.956 --> 00:07:00.240
+you can customize Control n (C-n) as
+
+00:07:00.240 --> 00:07:02.960
+in the web page
+
+00:07:02.960 --> 00:07:05.759
+to scroll up in the EAF PDF viewer, or you
+
+00:07:05.759 --> 00:07:06.639
+can unbind
+
+00:07:06.639 --> 00:07:08.806
+an existing binding using
+
+00:07:08.806 --> 00:07:10.000
+eaf-bind-key,
+
+00:07:10.000 --> 00:07:14.840
+bind it to nil, so it doesn't bind to
+
+00:07:14.840 --> 00:07:16.160
+anything.
+
+00:07:16.160 --> 00:07:20.319
+Okay, so, here comes the important part,
+
+00:07:20.319 --> 00:07:22.479
+if you want to customize EAF, you should
+
+00:07:22.479 --> 00:07:25.440
+visit the customization page in the wiki.
+
+00:07:25.440 --> 00:07:28.840
+Now, I press Meta b to go back in
+
+00:07:28.840 --> 00:07:30.240
+history, and
+
+00:07:30.240 --> 00:07:32.960
+go to the customization page, press f,
+
+00:07:32.960 --> 00:07:34.080
+press ad,
+
+00:07:34.080 --> 00:07:36.639
+Enter, and now we're in the customization
+
+00:07:36.639 --> 00:07:37.360
+page.
+
+00:07:37.360 --> 00:07:39.280
+So, the first customization option you
+
+00:07:39.280 --> 00:07:42.639
+see is dark mode,
+
+00:07:42.639 --> 00:07:44.479
+let's say, if you want to turn on the dark
+
+00:07:44.479 --> 00:07:46.720
+mode for EAF browser,
+
+00:07:46.720 --> 00:07:48.479
+and you don't want to use your mouse to
+
+00:07:48.479 --> 00:07:49.919
+do all this stuff.
+
+00:07:49.919 --> 00:07:53.360
+You press c, and you can select
+
+00:07:53.360 --> 00:07:55.840
+c to toggle the caret browsing, you can
+
+00:07:55.840 --> 00:07:58.240
+see a lot of markers available,
+
+00:07:58.240 --> 00:08:01.280
+poped up again, but they're not
+
+00:08:01.280 --> 00:08:02.720
+on top of links but instead of
+
+00:08:02.720 --> 00:08:03.599
+paragraphs.
+
+00:08:03.599 --> 00:08:05.360
+You select the paragraph of your choice,
+
+00:08:05.360 --> 00:08:06.639
+in this case you want
+
+00:08:06.639 --> 00:08:10.240
+ls which comes here,
+
+00:08:10.240 --> 00:08:12.720
+and then you just move the
+
+00:08:12.720 --> 00:08:15.120
+cursor like what you always do
+
+00:08:15.120 --> 00:08:18.800
+in Emacs, and now you select everything
+
+00:08:18.800 --> 00:08:26.479
+and use Meta w (M-w) to copy the text.
+
+00:08:26.479 --> 00:08:29.199
+Now, we (run) Meta Shift colon (M-:) to evaluate
+
+00:08:29.199 --> 00:08:30.960
+what we just copied,
+
+00:08:30.960 --> 00:08:35.120
+and set that to true, and
+
+00:08:35.120 --> 00:08:38.320
+press r or F5 to refresh the page,
+
+00:08:38.320 --> 00:08:42.159
+voilà we have the dark mode enabled.
+
+00:08:42.159 --> 00:08:44.880
+So, there are…, well, let's toggle
+
+00:08:44.880 --> 00:08:46.160
+it back off for now.
+
+00:08:46.160 --> 00:08:49.360
+Now, we (run) Meta Shift colon (M-:) again,
+
+00:08:49.360 --> 00:08:51.600
+and we find the one we just used, and
+
+00:08:51.600 --> 00:08:53.519
+change it back to false,
+
+00:08:53.519 --> 00:08:56.880
+and refresh the page, back in the light
+
+00:08:56.880 --> 00:08:59.360
+mode.
+
+00:08:59.360 --> 00:09:02.160
+So, there are many other customization
+
+00:09:02.160 --> 00:09:03.680
+options available, you can either
+
+00:09:03.680 --> 00:09:05.920
+evaluate like what we just did or add it
+
+00:09:05.920 --> 00:09:08.000
+to your Emacs configuration file.
+
+00:09:08.000 --> 00:09:11.680
+So, in this wiki…,
+
+00:09:11.680 --> 00:09:14.399
+you can make the EAF browser to
+
+00:09:14.399 --> 00:09:16.320
+continue where you left off
+
+00:09:16.320 --> 00:09:20.160
+similar to the Chromium setting.
+
+00:09:20.160 --> 00:09:22.800
+You can make EAF the default browser
+
+00:09:22.800 --> 00:09:23.839
+(in) Emacs by
+
+00:09:23.839 --> 00:09:26.720
+aliasing browse-web to
+
+00:09:26.720 --> 00:09:27.680
+eaf-open-browser,
+
+00:09:27.680 --> 00:09:31.200
+or set the browse-url-browser-function to
+
+00:09:31.200 --> 00:09:33.519
+eaf-open-browser, there's just some tricks.
+
+00:09:33.519 --> 00:09:34.480
+And there (is) also
+
+00:09:34.480 --> 00:09:37.920
+an experimental adblocker currently
+
+00:09:37.920 --> 00:09:41.680
+in place, therefore it can
+
+00:09:41.680 --> 00:09:44.720
+block some elements but not all, so
+
+00:09:44.720 --> 00:09:47.279
+we really encourage people to help us
+
+00:09:47.279 --> 00:09:48.240
+test out and
+
+00:09:48.240 --> 00:09:51.440
+add more conditions in.
+
+00:09:51.440 --> 00:09:54.560
+So, you can…, the EAF Browser is able to
+
+00:09:54.560 --> 00:09:55.760
+download
+
+00:09:55.760 --> 00:09:57.680
+any files from the internet, and it will
+
+00:09:57.680 --> 00:10:04.000
+be downloaded using Aria2.
+
+00:10:04.000 --> 00:10:05.339
+You can also customize
+
+00:10:05.339 --> 00:10:07.200
+the eaf-browser-download-path
+
+00:10:07.200 --> 00:10:11.120
+using eaf-setq, it's a function that we
+
+00:10:11.120 --> 00:10:13.623
+defined similar to setq,
+
+00:10:13.623 --> 00:10:15.040
+the normal setq we know.
+
+00:10:15.040 --> 00:10:16.480
+So, by default the download file is
+
+00:10:16.480 --> 00:10:18.160
+stored in your home directory slash
+
+00:10:18.160 --> 00:10:19.600
+downloads,
+
+00:10:19.600 --> 00:10:20.800
+and you can change that whenever you
+
+00:10:20.800 --> 00:10:22.720
+want. You can also disable
+
+00:10:22.720 --> 00:10:26.079
+saving browsing history, so, remember
+
+00:10:26.079 --> 00:10:27.089
+when I press…,
+
+00:10:27.089 --> 00:10:28.959
+when I use M-x eaf-open-browser's
+
+00:10:28.959 --> 00:10:30.480
+history, I see all the
+
+00:10:30.480 --> 00:10:32.079
+histories here, but if you want more
+
+00:10:32.079 --> 00:10:33.680
+privacy, you don't want that to be
+
+00:10:33.680 --> 00:10:35.360
+available at all. You can turn it off
+
+00:10:35.360 --> 00:10:37.356
+easily with eaf-setq,
+
+00:10:37.356 --> 00:10:40.640
+and set that remember-history to false.
+
+00:10:40.640 --> 00:10:42.399
+You can also set your default search
+
+00:10:42.399 --> 00:10:43.839
+engine.
+
+00:10:43.839 --> 00:10:47.200
+Right now we have Google, although
+
+00:10:47.200 --> 00:10:50.480
+not really good but… Google and also
+
+00:10:50.480 --> 00:10:53.600
+DuckDuckGo which is a better search engine,
+
+00:10:53.600 --> 00:10:57.360
+well, yeah, ethically better search
+
+00:10:57.360 --> 00:10:59.360
+engine.
+
+00:10:59.360 --> 00:11:02.560
+So, you can also configure
+
+00:11:02.560 --> 00:11:05.040
+the zoom. The default zoom of your
+
+00:11:05.040 --> 00:11:07.600
+browser is 1.0, you can convert
+
+00:11:07.600 --> 00:11:10.000
+default-zoom to 1.25, so when
+
+00:11:10.000 --> 00:11:11.920
+you open any web page, it will be
+
+00:11:11.920 --> 00:11:17.360
+zoomed by default. You can
+
+00:11:17.360 --> 00:11:20.399
+also disable JavaScript, although I
+
+00:11:20.399 --> 00:11:22.240
+personally don't really suggest you to
+
+00:11:22.240 --> 00:11:23.440
+do, because it will
+
+00:11:23.440 --> 00:11:26.240
+basically break a lot of our features,
+
+00:11:26.240 --> 00:11:28.480
+because a lot of the browser
+
+00:11:28.480 --> 00:11:29.519
+related features
+
+00:11:29.519 --> 00:11:33.760
+must be implemented using JavaScript,
+
+00:11:33.760 --> 00:11:35.440
+but yeah, you can do it if you really
+
+00:11:35.440 --> 00:11:37.920
+want to. And there's also some
+
+00:11:37.920 --> 00:11:41.519
+customization on EAF Camera
+
+00:11:41.519 --> 00:11:47.760
+you can do as well.
+
+00:11:47.760 --> 00:11:52.399
+Let's move on to EAF PDF Viewer.
+
+00:11:52.399 --> 00:11:56.079
+Now, let's open
+
+00:11:56.079 --> 00:11:59.440
+the PDF file using EAF.
+
+00:11:59.440 --> 00:12:01.519
+So, that's one something already here, but
+
+00:12:01.519 --> 00:12:02.720
+let's open it here.
+
+00:12:02.720 --> 00:12:06.079
+So, eaf-open, and
+
+00:12:06.079 --> 00:12:08.160
+select "Introduction to Programming in
+
+00:12:08.160 --> 00:12:11.440
+Emacs Lisp".
+
+00:12:11.440 --> 00:12:13.760
+I have it already open, but it's okay.
+
+00:12:13.760 --> 00:12:17.040
+So, you have the file,
+
+00:12:17.040 --> 00:12:20.160
+you have other files displayed…
+
+00:12:20.160 --> 00:12:22.800
+you have all the pages display, sorry.
+
+00:12:23.200 --> 00:12:27.040
+There are 273 pages in total, but notice
+
+00:12:27.040 --> 00:12:29.279
+how fast it is to browse
+
+00:12:29.279 --> 00:12:31.440
+all the pages, it is blazingly fast,
+
+00:12:31.440 --> 00:12:33.519
+that's all thanks to Python and
+
+00:12:33.519 --> 00:12:37.040
+MuPDF which you don't really get from
+
+00:12:37.040 --> 00:12:40.880
+Emacs Lisp.
+
+00:12:40.880 --> 00:12:43.600
+So, let's say if I want to jump to page
+
+00:12:43.600 --> 00:12:48.639
+50. We press p and Enter 50.
+
+00:12:48.639 --> 00:12:53.279
+And here we are, we are at page 50.
+
+00:12:53.279 --> 00:12:55.440
+You can look at the lower right to
+
+00:12:55.440 --> 00:12:58.880
+verify the page you're on.
+
+00:12:58.880 --> 00:13:05.120
+You can use i to toggle dark mode
+
+00:13:05.120 --> 00:13:07.839
+as expected. Let's say you want to
+
+00:13:07.839 --> 00:13:08.240
+find
+
+00:13:08.240 --> 00:13:11.519
+table of contents, so use Control s —
+
+00:13:11.519 --> 00:13:15.680
+the Emacs default binding for I-search,
+
+00:13:15.680 --> 00:13:19.360
+and search for a "table of contents",
+
+00:13:19.360 --> 00:13:21.680
+here we are, it is highlighted for you,
+
+00:13:21.680 --> 00:13:23.120
+and you can Control s for more but
+
+00:13:23.120 --> 00:13:26.006
+there's only one match,
+
+00:13:26.006 --> 00:13:27.200
+you (press) Control g (C-g) to
+
+00:13:27.200 --> 00:13:28.800
+disable the highlight,
+
+00:13:28.800 --> 00:13:30.880
+and you see a lot of options for you to
+
+00:13:30.880 --> 00:13:32.320
+go.
+
+00:13:32.320 --> 00:13:35.040
+Okay. Let's say, if you want to go to the
+
+00:13:35.040 --> 00:13:36.240
+preface.
+
+00:13:36.240 --> 00:13:39.519
+That is, you press f which is
+
+00:13:39.519 --> 00:13:40.639
+also similar to
+
+00:13:40.639 --> 00:13:44.240
+EAF browser, you press f for Vimium,
+
+00:13:44.240 --> 00:13:47.760
+and you see the marker, now change to wn,
+
+00:13:47.760 --> 00:13:50.160
+press wn, and then you can go to the
+
+00:13:50.160 --> 00:13:51.279
+preface.
+
+00:13:51.279 --> 00:13:54.320
+Now, we are at the preface.
+
+00:13:54.320 --> 00:13:56.480
+So, now you finish reading, you want to
+
+00:13:56.480 --> 00:13:57.600
+save your progress?
+
+00:13:57.600 --> 00:13:59.440
+No worries, it is already saved for you
+
+00:13:59.440 --> 00:14:01.199
+by EAF. You can safely
+
+00:14:01.199 --> 00:14:04.240
+close the document using x,
+
+00:14:04.240 --> 00:14:07.519
+and opening again, eaf-open,
+
+00:14:07.519 --> 00:14:10.560
+and the file…, see you are at
+
+00:14:10.560 --> 00:14:14.000
+preface again. You're right at where
+
+00:14:14.000 --> 00:14:16.560
+you left of.
+
+00:14:16.560 --> 00:14:19.440
+You can also use M-x org-store-link, or
+
+00:14:19.440 --> 00:14:20.480
+Control c l (C-c l) —
+
+00:14:20.480 --> 00:14:23.279
+which I prefer, if you want to save a
+
+00:14:23.279 --> 00:14:24.480
+particular page in
+
+00:14:24.480 --> 00:14:28.240
+a Org mode file. Now,
+
+00:14:28.240 --> 00:14:30.320
+I go back to my presentation doc, I don't
+
+00:14:30.320 --> 00:14:31.760
+need this anymore.
+
+00:14:31.760 --> 00:14:35.600
+So, you just (press) Control c Control l (C-c C-l),
+
+00:14:35.600 --> 00:14:39.120
+or I think M-x org-insert-link.
+
+00:14:39.120 --> 00:14:41.040
+You can find the file right here, and
+
+00:14:41.040 --> 00:14:42.399
+you press Enter (RET),
+
+00:14:42.399 --> 00:14:44.320
+and you press Enter (RET) for the description
+
+00:14:44.320 --> 00:14:46.480
+again, and now it's right here,
+
+00:14:46.480 --> 00:14:50.720
+and Control c Control o (C-c C-o) to open it. Voilà!
+
+00:14:50.720 --> 00:14:54.000
+You're back.
+
+00:14:54.000 --> 00:14:57.120
+Let's now demonstrate the EAF Video
+
+00:14:57.120 --> 00:14:58.880
+Player.
+
+00:14:58.880 --> 00:15:02.639
+So, M-x eaf-open, you use eaf-open whenever
+
+00:15:02.639 --> 00:15:03.279
+you want to
+
+00:15:03.279 --> 00:15:06.079
+open some file. You use eaf-open-browser
+
+00:15:06.079 --> 00:15:07.279
+if you want to use some
+
+00:15:07.279 --> 00:15:09.920
+actual application that's not really
+
+00:15:09.920 --> 00:15:11.199
+related to a file.
+
+00:15:11.199 --> 00:15:14.800
+So, eaf-open, and select the video
+
+00:15:14.800 --> 00:15:15.600
+you want, so,
+
+00:15:15.600 --> 00:15:18.320
+video-demo, I already have a video
+
+00:15:18.320 --> 00:15:19.040
+demo
+
+00:15:19.040 --> 00:15:21.839
+ready, because I recorded a video of
+
+00:15:21.839 --> 00:15:22.720
+the demo
+
+00:15:22.720 --> 00:15:26.000
+of the EAF Camera, have a look.
+
+00:15:26.000 --> 00:15:28.079
+Let's move to the beginning, "Hello people
+
+00:15:28.079 --> 00:15:29.279
+from the future!
+
+00:15:29.279 --> 00:15:32.399
+This is a demo of the EAF Video Player
+
+00:15:32.399 --> 00:15:35.199
+that demos the EAF Camera feature,
+
+00:15:35.199 --> 00:15:37.440
+so, as you can see on the screen of me
+
+00:15:37.440 --> 00:15:38.639
+inside my camera,
+
+00:15:38.639 --> 00:15:40.959
+and the screen is actually with all
+
+00:15:40.959 --> 00:15:42.880
+within Emacs.
+
+00:15:42.880 --> 00:15:45.273
+(Right, the video itself is as well, haha.)
+
+00:15:45.273 --> 00:15:46.079
+You can open this
+
+00:15:46.079 --> 00:15:49.839
+using eaf-open-camera
+
+00:15:49.839 --> 00:15:53.040
+which I'm already into, and you can
+
+00:15:53.040 --> 00:15:53.600
+press
+
+00:15:53.600 --> 00:15:56.720
+p to capture a photo,
+
+00:15:56.720 --> 00:15:59.680
+so, the photo is by default stored at
+
+00:15:59.680 --> 00:16:02.773
+your $HOME/Downloads directory,
+
+00:16:02.773 --> 00:16:04.320
+and you can modify it
+
+00:16:04.320 --> 00:16:07.839
+freely. If you go here, and you can see
+
+00:16:07.839 --> 00:16:09.519
+the camera stored
+
+00:16:09.519 --> 00:16:13.759
+right here."
+
+00:16:13.759 --> 00:16:16.240
+So, you press Space (SPC) to pause, what I used
+
+00:16:16.240 --> 00:16:17.120
+here is
+
+00:16:17.120 --> 00:16:20.320
+the eaf-open-this-from-dired.
+
+00:16:20.320 --> 00:16:22.959
+Basically, in dired
+
+00:16:22.959 --> 00:16:23.839
+you select
+
+00:16:23.839 --> 00:16:26.959
+the file that should be opened by
+
+00:16:26.959 --> 00:16:30.320
+EAF, and I used that. It detects that
+
+00:16:30.320 --> 00:16:32.720
+it wants to use the EAF Image Viewer, so
+
+00:16:32.720 --> 00:16:35.839
+I accidentally tested EAF Image Viewer
+
+00:16:35.839 --> 00:16:40.240
+before I noticed. That gives the
+
+00:16:40.240 --> 00:16:43.680
+image of the photo I just took
+
+00:16:43.680 --> 00:16:47.040
+using EAF Camera. As you can see, you
+
+00:16:47.040 --> 00:16:47.360
+can
+
+00:16:47.360 --> 00:16:50.720
+use hl — the Vim binding to navigate
+
+00:16:50.720 --> 00:16:53.256
+in the timestamp in the video,
+
+00:16:53.256 --> 00:16:55.920
+and I can use
+
+00:16:55.920 --> 00:17:02.320
+jk to change the volumes of the video.
+
+00:17:02.320 --> 00:17:05.520
+Alright. Now, you've seen all the basic
+
+00:17:05.520 --> 00:17:06.160
+usages
+
+00:17:06.160 --> 00:17:08.720
+of the EAF project, it comes the question
+
+00:17:08.720 --> 00:17:11.600
+of what is the magic behind it.
+
+00:17:11.600 --> 00:17:14.559
+All right. Let's open the hacking page in
+
+00:17:14.559 --> 00:17:15.919
+the wiki,
+
+00:17:15.919 --> 00:17:20.400
+the design is laid out in a diagram here.
+
+00:17:20.400 --> 00:17:25.120
+Let's put it
+
+00:17:25.120 --> 00:17:27.839
+side by side along with my text, so
+
+00:17:27.839 --> 00:17:32.320
+we can follow through.
+
+00:17:32.320 --> 00:17:36.080
+Right, okay. Let me…,
+
+00:17:36.080 --> 00:17:42.320
+sorry, let me drink some water.
+
+00:17:42.320 --> 00:17:46.000
+This page in the wiki went into a lot
+
+00:17:46.000 --> 00:17:48.160
+of detail,
+
+00:17:48.160 --> 00:17:49.520
+due to the time constraint I will just
+
+00:17:49.520 --> 00:17:51.679
+rephrase some of the ideas here, so for
+
+00:17:51.679 --> 00:17:53.520
+anyone interested, please have a look at
+
+00:17:53.520 --> 00:17:55.600
+the wiki yourself.
+
+00:17:55.600 --> 00:17:58.160
+The easiest way to think about EAF is
+
+00:17:58.160 --> 00:17:58.720
+that
+
+00:17:58.720 --> 00:18:01.679
+the actual GUI application is started in
+
+00:18:01.679 --> 00:18:02.960
+the background,
+
+00:18:02.960 --> 00:18:04.960
+then the frame of the application is
+
+00:18:04.960 --> 00:18:07.120
+attached to the appropriate location on
+
+00:18:07.120 --> 00:18:07.679
+the
+
+00:18:07.679 --> 00:18:10.720
+Emacs window. So,
+
+00:18:10.720 --> 00:18:13.440
+EAF linked Qt5 with Emacs using
+
+00:18:13.440 --> 00:18:14.960
+Elisp and Python.
+
+00:18:14.960 --> 00:18:17.120
+On the Python side which is colored
+
+00:18:17.120 --> 00:18:18.640
+yellow in the image,
+
+00:18:18.640 --> 00:18:20.439
+we have QGraphicsView and
+
+00:18:20.439 --> 00:18:22.960
+QGraphicsScene objects.
+
+00:18:22.960 --> 00:18:25.039
+These are used to simulate the Emacs
+
+00:18:25.039 --> 00:18:26.640
+window buffer design
+
+00:18:26.640 --> 00:18:28.640
+where QGraphicsScene is similar to
+
+00:18:28.640 --> 00:18:29.840
+buffers in Emacs,
+
+00:18:29.840 --> 00:18:31.840
+it controls the state and the content
+
+00:18:31.840 --> 00:18:34.240
+details of the application
+
+00:18:34.240 --> 00:18:41.200
+where QGraphicsView is similar to Emacs
+
+00:18:41.200 --> 00:18:43.200
+window. It populates the buffer
+
+00:18:43.200 --> 00:18:45.919
+(QGraphicsScene) to the foreground at
+
+00:18:45.919 --> 00:18:46.960
+the appropriate
+
+00:18:46.960 --> 00:18:48.573
+position.
+
+00:18:48.573 --> 00:18:50.320
+Whenever an EAF mode buffer
+
+00:18:50.320 --> 00:18:57.679
+brings to a background….
+
+00:18:57.679 --> 00:18:59.679
+Whenever an EAF mode buffer brings to the
+
+00:18:59.679 --> 00:19:00.880
+foreground, sorry,
+
+00:19:00.880 --> 00:19:02.559
+a QGraphicsView instance is
+
+00:19:02.559 --> 00:19:05.120
+created, and whenever the buffer goes to
+
+00:19:05.120 --> 00:19:06.080
+the background
+
+00:19:06.080 --> 00:19:08.000
+the QGraphicsView instance is then
+
+00:19:08.000 --> 00:19:09.120
+deleted,
+
+00:19:09.120 --> 00:19:10.960
+while QGraphicsScene — the actual
+
+00:19:10.960 --> 00:19:12.480
+process — remains running in the
+
+00:19:12.480 --> 00:19:14.480
+background until the EAF mode buffer is
+
+00:19:14.480 --> 00:19:16.000
+killed.
+
+00:19:16.000 --> 00:19:18.320
+GPU compositing is used to ensure that
+
+00:19:18.320 --> 00:19:19.440
+QGraphicsView and
+
+00:19:19.440 --> 00:19:21.840
+QGraphicsScene is synchronized real time.
+
+00:19:21.840 --> 00:19:24.000
+Using QWindow::setParent function
+
+00:19:24.000 --> 00:19:25.679
+the QGraphicsView is attached to the
+
+00:19:25.679 --> 00:19:27.840
+appropriate location on the Emacs frame,
+
+00:19:27.840 --> 00:19:30.640
+so that although GUI applications are
+
+00:19:30.640 --> 00:19:32.400
+not running within Emacs,
+
+00:19:32.400 --> 00:19:36.160
+they look as if they were.
+
+00:19:36.160 --> 00:19:39.039
+When user types on the keyboard it is
+
+00:19:39.039 --> 00:19:41.039
+first received by the Emacs
+
+00:19:41.039 --> 00:19:43.520
+EAF mode buffer, and then Elisp sends
+
+00:19:43.520 --> 00:19:45.360
+the event to QGraphicsScene using
+
+00:19:45.360 --> 00:19:46.240
+D-Bus.
+
+00:19:46.240 --> 00:19:48.720
+When user clicks on the GUI application
+
+00:19:48.720 --> 00:19:50.799
+it is received by the QGraphicsView
+
+00:19:50.799 --> 00:19:53.280
+and processed in Python. Elisp can
+
+00:19:53.280 --> 00:19:55.200
+communicate with Python through D-Bus,
+
+00:19:55.200 --> 00:19:59.200
+in other words you can
+
+00:19:59.200 --> 00:20:01.360
+customize and extend Emacs not just
+
+00:20:01.360 --> 00:20:01.760
+using
+
+00:20:01.760 --> 00:20:04.480
+Elisp, and now you can use Python, this way
+
+00:20:04.480 --> 00:20:05.360
+one can leverage
+
+00:20:05.360 --> 00:20:07.039
+all the Python properties like
+
+00:20:07.039 --> 00:20:09.600
+multi-threading or some other stuff,
+
+00:20:09.600 --> 00:20:11.679
+the entire Python ecosystem can be
+
+00:20:11.679 --> 00:20:13.520
+utilized as well,
+
+00:20:13.520 --> 00:20:16.159
+such as the Qt web engine that is the
+
+00:20:16.159 --> 00:20:16.960
+basis for
+
+00:20:16.960 --> 00:20:20.640
+our EAF Browser, and PyMuPDF is the
+
+00:20:20.640 --> 00:20:23.360
+basis for the EAF PDF Viewer.
+
+00:20:23.360 --> 00:20:25.840
+This really opens the window to many
+
+00:20:25.840 --> 00:20:28.240
+many new possibilities to extend Emacs
+
+00:20:28.240 --> 00:20:32.720
+using EAF.
+
+00:20:32.720 --> 00:20:36.080
+All right, back here. We are always
+
+00:20:36.080 --> 00:20:37.760
+looking for people to join the
+
+00:20:37.760 --> 00:20:39.679
+development, there are many many
+
+00:20:39.679 --> 00:20:42.720
+more work that needs to be done,
+
+00:20:42.720 --> 00:20:44.640
+such as testing and debug EAF on
+
+00:20:44.640 --> 00:20:46.640
+more Linux distros and window managers
+
+00:20:46.640 --> 00:20:47.760
+such as i3
+
+00:20:47.760 --> 00:20:51.200
+and stuff, you can also add new EAF
+
+00:20:51.200 --> 00:20:52.080
+applications,
+
+00:20:52.080 --> 00:20:54.240
+or debug and enhance existing EAF
+
+00:20:54.240 --> 00:20:55.440
+applications,
+
+00:20:55.440 --> 00:20:58.000
+or you can port EAF to native Wayland
+
+00:20:58.000 --> 00:21:00.240
+which I just discussed with
+
+00:21:00.240 --> 00:21:03.840
+the emacs-webkit author
+
+00:21:03.840 --> 00:21:07.919
+Akira Kyle, and he told me that
+
+00:21:07.919 --> 00:21:11.200
+EAF doesn't really work on
+
+00:21:11.200 --> 00:21:14.320
+native Wayland, because it uses
+
+00:21:14.320 --> 00:21:16.799
+XWayland, so it doesn't work on the pgtk
+
+00:21:16.799 --> 00:21:18.159
+port of Emacs.
+
+00:21:18.159 --> 00:21:20.559
+And we also need people to port EAF to
+
+00:21:20.559 --> 00:21:22.080
+non-free operating systems
+
+00:21:22.080 --> 00:21:25.600
+including Windows and macOS,
+
+00:21:25.600 --> 00:21:28.480
+and that's because, like, D-Bus is a Linux
+
+00:21:28.480 --> 00:21:30.080
+specific feature, so it doesn't really
+
+00:21:30.080 --> 00:21:31.360
+work on other platform.
+
+00:21:31.360 --> 00:21:33.039
+We need to check, replace it with some
+
+00:21:33.039 --> 00:21:34.640
+alternative, and
+
+00:21:34.640 --> 00:21:36.720
+QGraphicsScene somehow doesn't really
+
+00:21:36.720 --> 00:21:38.640
+work on macOS,
+
+00:21:38.640 --> 00:21:40.320
+and there are many other to-do lists
+
+00:21:40.320 --> 00:21:42.880
+available, so please have a look
+
+00:21:42.880 --> 00:21:45.039
+and see if there is anything you want to
+
+00:21:45.039 --> 00:21:46.640
+work on.
+
+00:21:46.640 --> 00:21:49.039
+All right. So, since this is a
+
+00:21:49.039 --> 00:21:51.120
+pre-recorded talk I won't be able to do
+
+00:21:51.120 --> 00:21:53.520
+the Q & A real time in the video.
+
+00:21:53.520 --> 00:21:56.080
+However, I will be around on the
+
+00:21:56.080 --> 00:21:57.200
+collaborative pad
+
+00:21:57.200 --> 00:22:00.239
+and the IRC #emacsconf,
+
+00:22:00.239 --> 00:22:01.360
+#emacsconf-questions
+
+00:22:01.360 --> 00:22:04.139
+to answer any questions when it pops up,
+
+00:22:04.139 --> 00:22:05.760
+and you can also submit an issue
+
+00:22:05.760 --> 00:22:09.120
+on the repo, and you can check the wiki
+
+00:22:09.120 --> 00:22:12.640
+for some other guides and tricks.
+
+00:22:12.640 --> 00:22:15.039
+All right. Thank you guys, and hopefully
+
+00:22:15.039 --> 00:22:16.000
+you find
+
+00:22:16.000 --> 00:22:18.320
+this EAF project very interesting, and
+
+00:22:18.320 --> 00:22:24.320
+enjoy the rest of EmacsConf 2020.
diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt
new file mode 100644
index 00000000..c60bd115
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--questions--zachary-kanfer.vtt
@@ -0,0 +1,490 @@
+WEBVTT
+
+00:00:02.800 --> 00:00:09.200
+I can, yes.
+
+00:00:09.200 --> 00:00:13.120
+Okay, yeah, so I'm Zachary Kanfer,
+
+00:00:13.120 --> 00:00:14.920
+let's go to the
+
+00:00:14.920 --> 00:00:17.520
+questions. The first question, "Why
+
+00:00:17.520 --> 00:00:19.119
+do we go top to bottom for time
+
+00:00:19.119 --> 00:00:19.840
+progression,
+
+00:00:19.840 --> 00:00:23.920
+and left to right for low to high?"
+
+00:00:23.920 --> 00:00:27.279
+Interesting, I think…, so the initial
+
+00:00:27.279 --> 00:00:30.000
+thing I was copying, that initial app
+
+00:00:30.000 --> 00:00:35.280
+work this way, and
+
+00:00:35.280 --> 00:00:36.960
+yeah, I mean, certainly traditional music,
+
+00:00:36.960 --> 00:00:38.960
+you know, on a staff
+
+00:00:38.960 --> 00:00:43.040
+does go left to right like this.
+
+00:00:43.040 --> 00:00:46.000
+I mean, going top to bottom does make
+
+00:00:46.000 --> 00:00:47.440
+it easier to add more beats without
+
+00:00:47.440 --> 00:00:48.960
+having to wrap, but certainly that could
+
+00:00:48.960 --> 00:00:49.920
+be managed.
+
+00:00:49.920 --> 00:00:52.239
+Yeah, I had not really thought about
+
+00:00:52.239 --> 00:00:53.760
+it, but it is definitely something worth
+
+00:00:53.760 --> 00:00:55.199
+looking into.
+
+00:00:55.199 --> 00:01:02.480
+Yeah.
+
+00:01:02.480 --> 00:01:05.680
+Ah, good point, thank you. Let me go ahead
+
+00:01:05.680 --> 00:01:06.960
+and do that.
+
+00:01:06.960 --> 00:01:14.240
+The entire screen…
+
+00:01:14.240 --> 00:01:16.880
+Okay, so the screen share should be
+
+00:01:16.880 --> 00:01:18.320
+starting,
+
+00:01:18.320 --> 00:01:21.439
+there we go. Cool, all right.
+
+00:01:21.439 --> 00:01:24.880
+Two, "Will you play us another song?" Not
+
+00:01:24.880 --> 00:01:26.640
+now, I can make some recordings of
+
+00:01:26.640 --> 00:01:28.080
+it, or certainly you can try it.
+
+00:01:28.080 --> 00:01:30.720
+I couldn't quite get the
+
+00:01:30.720 --> 00:01:33.119
+microphone and the webcam and everything
+
+00:01:33.119 --> 00:01:37.040
+to work with the sound playing now. So,
+
+00:01:37.040 --> 00:01:40.079
+I can record some. Also, please…
+
+00:01:40.079 --> 00:01:43.520
+I have put a link at the… here in the
+
+00:01:43.520 --> 00:01:46.640
+Etherpad, zck.org/emacsconf2020 [updated],
+
+00:01:46.640 --> 00:01:48.479
+where you can go and get the source,
+
+00:01:48.479 --> 00:01:49.920
+and you can try it yourself. There's
+
+00:01:49.920 --> 00:01:51.920
+no dependencies needed, so it's just all
+
+00:01:51.920 --> 00:01:54.560
+in Emacs. So, please, you know, try it
+
+00:01:54.560 --> 00:01:57.040
+yourself.
+
+00:01:57.040 --> 00:02:00.079
+"Any chance for an Emacs tracker or mod
+
+00:02:00.079 --> 00:02:01.040
+player?"
+
+00:02:01.040 --> 00:02:03.680
+I don't really know what a mod player
+
+00:02:03.680 --> 00:02:04.479
+or tracker
+
+00:02:04.479 --> 00:02:08.000
+are, but I mean, I'm sure
+
+00:02:08.000 --> 00:02:09.679
+that would be cool, maybe there's one
+
+00:02:09.679 --> 00:02:11.599
+on now, but I don't know.
+
+00:02:11.599 --> 00:02:13.920
+My musical background. So, I've played
+
+00:02:13.920 --> 00:02:15.200
+various instruments since about the
+
+00:02:15.200 --> 00:02:15.840
+third grade.
+
+00:02:15.840 --> 00:02:18.160
+Started recorder, play cello, I play
+
+00:02:18.160 --> 00:02:19.520
+guitar now.
+
+00:02:19.520 --> 00:02:22.560
+But yeah, so just kind of random
+
+00:02:22.560 --> 00:02:23.680
+instruments, and
+
+00:02:23.680 --> 00:02:26.959
+I guess kind of some of those
+
+00:02:26.959 --> 00:02:27.280
+things
+
+00:02:27.280 --> 00:02:30.480
+influence how I think about music.
+
+00:02:33.519 --> 00:02:35.360
+"Are there any open source musical
+
+00:02:35.360 --> 00:02:36.640
+management sample libraries that could
+
+00:02:36.640 --> 00:02:37.840
+be used?"
+
+00:02:37.840 --> 00:02:41.200
+Good question, I'm sure there are, I
+
+00:02:41.200 --> 00:02:42.400
+don't know any of that integrate really
+
+00:02:42.400 --> 00:02:43.360
+well with Emacs.
+
+00:02:43.360 --> 00:02:44.560
+One of the cool things that I liked
+
+00:02:44.560 --> 00:02:45.680
+about this is that there are no
+
+00:02:45.680 --> 00:02:47.440
+dependencies,
+
+00:02:47.440 --> 00:02:49.360
+you know, you don't need any external
+
+00:02:49.360 --> 00:02:50.800
+program to
+
+00:02:50.800 --> 00:02:53.040
+generate the music. I mean, it does
+
+00:02:53.040 --> 00:02:54.160
+shell out to
+
+00:02:54.160 --> 00:02:57.280
+to play, but that
+
+00:02:57.280 --> 00:02:58.640
+should be able to be done on any
+
+00:02:58.640 --> 00:02:59.840
+operating system, as always, you have
+
+00:02:59.840 --> 00:03:03.519
+something that can play WAVE files,
+
+00:03:03.519 --> 00:03:05.599
+but yeah, it is interesting to kind of
+
+00:03:05.599 --> 00:03:10.000
+try the different sounds and different
+
+00:03:10.000 --> 00:03:12.239
+tones that you could get with
+
+00:03:12.239 --> 00:03:14.400
+different instruments.
+
+00:03:14.400 --> 00:03:16.959
+Have I written any actual songs?
+
+00:03:16.959 --> 00:03:21.040
+Nothing super
+
+00:03:21.040 --> 00:03:23.680
+well put together, I kind of just
+
+00:03:23.680 --> 00:03:25.519
+been playing around with this.
+
+00:03:25.519 --> 00:03:27.440
+It's kind of… making this was one of
+
+00:03:27.440 --> 00:03:29.040
+those things where once I made it, I
+
+00:03:29.040 --> 00:03:30.080
+was like, okay,
+
+00:03:30.080 --> 00:03:31.280
+now I can play with it, and I did a
+
+00:03:31.280 --> 00:03:32.720
+little bit, and was like, I don't know if
+
+00:03:32.720 --> 00:03:33.920
+I feel like it right now.
+
+00:03:33.920 --> 00:03:37.280
+You know, which I've found that to
+
+00:03:37.280 --> 00:03:38.720
+be the case with some things that I've
+
+00:03:38.720 --> 00:03:39.599
+implemented
+
+00:03:39.599 --> 00:03:41.360
+in Emacs where it's… I make it, and then
+
+00:03:41.360 --> 00:03:43.519
+it's the kind of some of the desire to
+
+00:03:43.519 --> 00:03:44.480
+use it all the time
+
+00:03:44.480 --> 00:03:46.879
+goes away, but I'm sure I'll circle back
+
+00:03:46.879 --> 00:03:47.760
+around
+
+00:03:47.760 --> 00:03:51.040
+at some point especially kind of maybe
+
+00:03:51.040 --> 00:03:52.400
+once I add in different tones or
+
+00:03:52.400 --> 00:03:54.640
+something.
+
+00:03:54.640 --> 00:03:56.400
+I guess a similar question for
+
+00:03:56.400 --> 00:03:57.840
+pre-recorded sounds. Yeah, I mean,
+
+00:03:57.840 --> 00:04:01.120
+if it's… part of what I did, what I wrote
+
+00:04:01.120 --> 00:04:02.080
+was a
+
+00:04:02.080 --> 00:04:04.720
+WAVE generation library, so, if you kind
+
+00:04:04.720 --> 00:04:06.720
+of have the data,
+
+00:04:06.720 --> 00:04:08.400
+you could use those and chop them
+
+00:04:08.400 --> 00:04:10.159
+up and take certain lengths of them
+
+00:04:10.159 --> 00:04:13.360
+and make a WAVE file, so it's not plug and
+
+00:04:13.360 --> 00:04:14.959
+play right now, but you could certainly
+
+00:04:14.959 --> 00:04:19.120
+add those notes to do it.
+
+00:04:19.120 --> 00:04:22.720
+"Any MIDI mapping possibilities?"
+
+00:04:22.720 --> 00:04:24.560
+I haven't looked into it, but I'm sure
+
+00:04:24.560 --> 00:04:26.160
+you definitely could output to MIDI
+
+00:04:26.160 --> 00:04:28.800
+which is another benefit of having
+
+00:04:28.800 --> 00:04:30.400
+that multiple layers with the top layer
+
+00:04:30.400 --> 00:04:31.520
+is just,
+
+00:04:31.520 --> 00:04:33.360
+you know, if the root note is this,
+
+00:04:33.360 --> 00:04:35.120
+we're just two semitones up or seven
+
+00:04:35.120 --> 00:04:36.560
+semitones up or whatever it is.
+
+00:04:36.560 --> 00:04:38.160
+It should be relatively simple to
+
+00:04:38.160 --> 00:04:40.720
+kind of switch out that layer underneath
+
+00:04:40.720 --> 00:04:44.479
+from WAVE to MIDI or other things.
+
+00:04:44.479 --> 00:04:45.759
+"What were some of the challenges with
+
+00:04:45.759 --> 00:04:47.520
+writing a special mode for Emacs?"
+
+00:04:47.520 --> 00:04:49.759
+Interested in getting into this, not
+
+00:04:49.759 --> 00:04:51.040
+sure where to start.
+
+00:04:51.040 --> 00:04:54.960
+There… yeah, it so…
+
+00:04:54.960 --> 00:04:57.120
+this isn't the first mode I've written,
+
+00:04:57.120 --> 00:04:58.320
+so that's right…,
+
+00:04:58.320 --> 00:05:01.759
+certainly that helps. I actually…
+
+00:05:01.759 --> 00:05:05.600
+I have a video that we recorded it
+
+00:05:05.600 --> 00:05:08.240
+as part of EmacsNYC on making a major
+
+00:05:08.240 --> 00:05:09.039
+mode.
+
+00:05:09.039 --> 00:05:10.720
+That's basically starts from
+
+00:05:10.720 --> 00:05:12.639
+nothing, and kind of builds up to
+
+00:05:12.639 --> 00:05:15.680
+an implementation of tic-tac-toe,
+
+00:05:15.680 --> 00:05:17.039
+but so it kind of goes into printing
+
+00:05:17.039 --> 00:05:19.600
+things out and buttons and making the
+
+00:05:19.600 --> 00:05:21.280
+mode.
+
+00:05:21.280 --> 00:05:22.800
+I mean, one of the best parts about Emacs
+
+00:05:22.800 --> 00:05:24.560
+is, because it's so
+
+00:05:24.560 --> 00:05:26.479
+configurable and so introspectible,
+
+00:05:26.479 --> 00:05:28.479
+you can start pretty simply,
+
+00:05:28.479 --> 00:05:30.320
+and just kind of ask Emacs about things,
+
+00:05:30.320 --> 00:05:32.320
+and then make one little
+
+00:05:32.320 --> 00:05:34.960
+change. It's really… it's not that bad,
+
+00:05:34.960 --> 00:05:39.039
+so, I'll try to throw a link up on that
+
+00:05:39.039 --> 00:05:40.560
+page I put up, or
+
+00:05:40.560 --> 00:05:42.000
+please email me for whoever asked this
+
+00:05:42.000 --> 00:05:44.479
+question to get a link to that video,
+
+00:05:44.479 --> 00:05:46.240
+or just look at the source
+
+00:05:46.240 --> 00:05:47.919
+code of this or any other major mode.
+
+00:05:47.919 --> 00:05:50.479
+Emacs makes it
+
+00:05:50.479 --> 00:05:52.880
+pretty easy to extend
+
+00:05:52.880 --> 00:05:56.479
+major modes. And I think that's
+
+00:05:56.479 --> 00:05:57.600
+the last question
+
+00:05:57.600 --> 00:06:00.240
+in the Etherpad, so, thanks so much
+
+00:06:00.240 --> 00:06:02.479
+everybody for coming.
+
+00:06:04.033 --> 00:06:06.720
+(Amin: Thank you so much
+
+00:06:06.720 --> 00:06:09.039
+to Zachary for your awesome talk,
+
+00:06:09.039 --> 00:06:12.960
+and for doing live questions.
+
+00:06:12.960 --> 00:06:19.840
+Thank you.) Thank you. (Amin: Cheers.)
diff --git a/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt
new file mode 100644
index 00000000..57837210
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--35-waveing-at-repetitive-repetitive-repetitive-music-zmusic--zachary-kanfer.vtt
@@ -0,0 +1,730 @@
+WEBVTT
+
+00:00:04.080 --> 00:00:04.960
+Hi.
+
+00:00:04.960 --> 00:00:08.559
+I'm Zachary Kanfer, and this is waving
+
+00:00:08.559 --> 00:00:11.679
+at repetitive repetitive repetitive
+
+00:00:11.679 --> 00:00:15.759
+music. Over quarantine, I've been bored,
+
+00:00:15.759 --> 00:00:18.400
+and I found this Android app that has a
+
+00:00:18.400 --> 00:00:19.680
+bunch of mini-games,
+
+00:00:19.680 --> 00:00:23.519
+one of which lets you compose music.
+
+00:00:23.519 --> 00:00:26.640
+And it works, but I
+
+00:00:26.640 --> 00:00:28.160
+want a little bit more functionality
+
+00:00:28.160 --> 00:00:30.720
+than it offers, it's not very flexible.
+
+00:00:30.720 --> 00:00:33.760
+So, I thought what if I made this,
+
+00:00:33.760 --> 00:00:35.360
+and what programs could I make this
+
+00:00:35.360 --> 00:00:37.760
+in that are really flexible, are really
+
+00:00:37.760 --> 00:00:40.320
+customizable.
+
+00:00:40.320 --> 00:00:44.239
+Emacs. So, I looked into it, and
+
+00:00:44.239 --> 00:00:46.320
+Emacs can play sounds, right? If you hit
+
+00:00:46.320 --> 00:00:47.840
+control g a couple of times, you'll hear
+
+00:00:47.840 --> 00:00:49.760
+like an error tone,
+
+00:00:49.760 --> 00:00:51.360
+and it turns out that, that is actually
+
+00:00:51.360 --> 00:00:54.559
+playing a WAVE file,
+
+00:00:54.559 --> 00:00:58.960
+but what's a WAVE file?
+
+00:00:58.960 --> 00:01:01.920
+Well, it turns out that WAVE is a musical
+
+00:01:01.920 --> 00:01:03.440
+file format,
+
+00:01:03.440 --> 00:01:07.840
+or really an annoying file format.
+
+00:01:07.840 --> 00:01:12.080
+So, data in it can be an unsigned integer
+
+00:01:12.080 --> 00:01:15.360
+or a signed integer, it's not consistent,
+
+00:01:15.360 --> 00:01:17.920
+and it's little-endian by default which
+
+00:01:17.920 --> 00:01:20.320
+is not the way I like to think about it.
+
+00:01:20.320 --> 00:01:21.600
+Now, you can
+
+00:01:21.600 --> 00:01:23.733
+set a WAVE file to be big-endian,
+
+00:01:23.733 --> 00:01:25.200
+but if you do that,
+
+00:01:25.200 --> 00:01:26.600
+Emacs can't play it.
+
+00:01:26.600 --> 00:01:30.479
+So, little-endian it is.
+
+00:01:30.479 --> 00:01:33.520
+There's also duplicate data fields.
+
+00:01:33.520 --> 00:01:35.360
+Here are some fields that are fine, but
+
+00:01:35.360 --> 00:01:36.960
+then there's a fourth field that's
+
+00:01:36.960 --> 00:01:38.960
+calculated based on multiplying two of
+
+00:01:38.960 --> 00:01:40.799
+the other ones together,
+
+00:01:40.799 --> 00:01:42.399
+and then there's another data field
+
+00:01:42.399 --> 00:01:44.880
+that's… you multiply those three ones
+
+00:01:44.880 --> 00:01:48.479
+together. So, it's just repetitive and
+
+00:01:48.479 --> 00:01:50.479
+unnecessary, but you have to do it, or
+
+00:01:50.479 --> 00:01:54.159
+it's not a valid WAVE file.
+
+00:01:54.159 --> 00:01:56.479
+Also, the last part of the file is
+
+00:01:56.479 --> 00:01:58.159
+described as data
+
+00:01:58.159 --> 00:02:01.759
+or as one website I found said,
+
+00:02:01.759 --> 00:02:05.200
+the actual sound data. Now,
+
+00:02:05.200 --> 00:02:06.960
+I don't know about you but when I see
+
+00:02:06.960 --> 00:02:09.039
+that, I think,
+
+00:02:09.039 --> 00:02:12.080
+what is data? It turns out
+
+00:02:12.080 --> 00:02:15.120
+that sound is just a wave, and
+
+00:02:15.120 --> 00:02:17.760
+the data is just a bunch of measurements
+
+00:02:17.760 --> 00:02:19.120
+of the height of that wave forming each
+
+00:02:19.120 --> 00:02:20.400
+sample.
+
+00:02:20.400 --> 00:02:24.480
+So, this wave starts at 8 goes 9, 11, 13,
+
+00:02:24.480 --> 00:02:27.840
+14, 15, and then back down. If you just
+
+00:02:27.840 --> 00:02:29.520
+take those measurements, those numbers,
+
+00:02:29.520 --> 00:02:30.700
+put them in a file,
+
+00:02:30.700 --> 00:02:35.200
+that's all your data is.
+
+00:02:35.200 --> 00:02:36.560
+All right. Let's go to a demo of my
+
+00:02:36.560 --> 00:02:38.959
+program.
+
+00:02:38.959 --> 00:02:41.920
+So, this is what zmusic looks like. The
+
+00:02:41.920 --> 00:02:44.080
+blue highlighted row is a single beat,
+
+00:02:44.080 --> 00:02:48.319
+there's 16 of them in this zmusic file,
+
+00:02:48.319 --> 00:02:52.000
+and each dash in the row
+
+00:02:52.000 --> 00:02:55.040
+is a single note increasing…, starting
+
+00:02:55.040 --> 00:02:57.920
+really low all the way on the left and
+
+00:02:57.920 --> 00:02:58.959
+going up
+
+00:02:58.959 --> 00:03:01.680
+as we go to the right. So, if we started
+
+00:03:01.680 --> 00:03:02.400
+playing,
+
+00:03:02.400 --> 00:03:05.040
+we won't hear anything, but we'll see the
+
+00:03:05.040 --> 00:03:06.400
+highlighted beat is the currently
+
+00:03:06.400 --> 00:03:07.680
+playing one,
+
+00:03:07.680 --> 00:03:09.833
+and we see that it loops.
+
+00:03:09.833 --> 00:03:12.720
+So, we can stop it,
+
+00:03:12.720 --> 00:03:20.633
+and now we can click to add some notes.
+
+00:03:20.633 --> 00:03:30.879
+[Music]
+
+00:03:30.879 --> 00:03:33.120
+Even more than one note at the same time
+
+00:03:33.120 --> 00:03:37.333
+works.
+
+00:03:37.333 --> 00:03:43.920
+[Music]
+
+00:03:43.920 --> 00:03:45.567
+And we can even add notes
+
+00:03:45.567 --> 00:03:56.160
+while it's playing.
+
+00:03:56.160 --> 00:04:08.239
+[Music]
+
+00:04:08.239 --> 00:04:10.480
+Okay, here are some other features that I
+
+00:04:10.480 --> 00:04:12.959
+didn't have time to demo.
+
+00:04:12.959 --> 00:04:16.000
+So, you can save the music to a file, and
+
+00:04:16.000 --> 00:04:18.239
+this is interesting because normally
+
+00:04:18.239 --> 00:04:20.880
+if there's no note in a beat, we just
+
+00:04:20.880 --> 00:04:22.800
+don't play that beat,
+
+00:04:22.800 --> 00:04:24.639
+but if you're writing to a file you have
+
+00:04:24.639 --> 00:04:25.919
+to put something in,
+
+00:04:25.919 --> 00:04:27.840
+so when it's playing it knows to not
+
+00:04:27.840 --> 00:04:31.360
+make a sound there.
+
+00:04:31.360 --> 00:04:33.800
+We can also use different scales.
+
+00:04:33.800 --> 00:04:36.240
+We're using the minor pentatonic
+
+00:04:36.240 --> 00:04:38.080
+in the demo, but you can use the major
+
+00:04:38.080 --> 00:04:39.680
+scale the minor scale
+
+00:04:39.680 --> 00:04:40.967
+or anything else.
+
+00:04:40.967 --> 00:04:43.367
+And there's also keyboard support,
+
+00:04:43.367 --> 00:04:45.199
+but it sounds really bad,
+
+00:04:45.199 --> 00:04:48.240
+and I'll explain why later.
+
+00:04:48.240 --> 00:04:50.800
+Here are some things I learned while
+
+00:04:50.800 --> 00:04:53.520
+writing zmusic.
+
+00:04:53.520 --> 00:04:56.479
+Emacs has buttons which are great as
+
+00:04:56.479 --> 00:04:58.240
+long
+
+00:04:58.240 --> 00:04:59.919
+as you don't put two of them right next
+
+00:04:59.919 --> 00:05:02.160
+to each other. So, if you do that,
+
+00:05:02.160 --> 00:05:04.400
+mousing over one of them highlights both
+
+00:05:04.400 --> 00:05:06.160
+of them.
+
+00:05:06.160 --> 00:05:07.919
+Now, that's because a button is really
+
+00:05:07.919 --> 00:05:10.080
+just a series of characters with a text
+
+00:05:10.080 --> 00:05:11.680
+property to highlight them.
+
+00:05:11.680 --> 00:05:15.120
+So, the fix is, you put another character
+
+00:05:15.120 --> 00:05:16.479
+between the two buttons,
+
+00:05:16.479 --> 00:05:18.080
+then mousing over one of them only
+
+00:05:18.080 --> 00:05:19.759
+highlights the one you want,
+
+00:05:19.759 --> 00:05:21.600
+but even this doesn't work really great
+
+00:05:21.600 --> 00:05:22.800
+for zmusic,
+
+00:05:22.800 --> 00:05:25.440
+because zmusic has a lot of very
+
+00:05:25.440 --> 00:05:27.120
+small buttons in a row.
+
+00:05:27.120 --> 00:05:29.840
+So, it's really easy to accidentally put
+
+00:05:29.840 --> 00:05:31.600
+your cursor over the space
+
+00:05:31.600 --> 00:05:34.639
+and click on that instead of the button.
+
+00:05:34.639 --> 00:05:37.120
+So, I looked into unicode, and I found
+
+00:05:37.120 --> 00:05:38.160
+this character called
+
+00:05:38.160 --> 00:05:40.800
+a zero-width space. So, we should be able
+
+00:05:40.800 --> 00:05:42.560
+to put that between buttons and not be
+
+00:05:42.560 --> 00:05:45.120
+able to accidentally click on it.
+
+00:05:45.120 --> 00:05:46.960
+Unfortunately, a zero-width space isn't
+
+00:05:46.960 --> 00:05:50.080
+actually zero width.
+
+00:05:50.080 --> 00:05:51.680
+If we put a hundred of them between two
+
+00:05:51.680 --> 00:05:53.759
+other characters, you can see there's
+
+00:05:53.759 --> 00:05:54.880
+space there,
+
+00:05:54.880 --> 00:05:56.240
+and I think what's happening is, the
+
+00:05:56.240 --> 00:05:58.160
+space is zero width
+
+00:05:58.160 --> 00:06:01.360
+but then Emacs `put` uses one pixel between
+
+00:06:01.360 --> 00:06:02.800
+each pair of characters
+
+00:06:02.800 --> 00:06:08.080
+for the cursor, so it's almost zero width.
+
+00:06:08.080 --> 00:06:09.919
+Some ways to play sound that don't quite
+
+00:06:09.919 --> 00:06:12.960
+work! `play-sound` plays music,
+
+00:06:12.960 --> 00:06:14.800
+but it blocks, you can't do things like,
+
+00:06:14.800 --> 00:06:17.280
+set other notes or even pause the music.
+
+00:06:17.280 --> 00:06:19.600
+And if you throw it into async.el, it's
+
+00:06:19.600 --> 00:06:21.600
+silent, and I don't know why.
+
+00:06:21.600 --> 00:06:24.479
+So, the solution I went with is taking
+
+00:06:24.479 --> 00:06:25.440
+that WAVE file,
+
+00:06:25.440 --> 00:06:27.039
+ran into the file system, and then
+
+00:06:27.039 --> 00:06:29.199
+shelling out to a native executable to
+
+00:06:29.199 --> 00:06:30.639
+play the sound.
+
+00:06:30.639 --> 00:06:32.880
+And that works fine as long as you only
+
+00:06:32.880 --> 00:06:34.240
+do it once,
+
+00:06:34.240 --> 00:06:36.080
+because if you do it a couple of times at
+
+00:06:36.080 --> 00:06:37.600
+the same time like if you have a chord,
+
+00:06:37.600 --> 00:06:38.639
+and you want to play three notes
+
+00:06:38.639 --> 00:06:40.000
+simultaneously,
+
+00:06:40.000 --> 00:06:42.319
+you get this weird interference, and
+
+00:06:42.319 --> 00:06:43.680
+that's actually why the keyboard from
+
+00:06:43.680 --> 00:06:46.319
+before didn't work.
+
+00:06:46.319 --> 00:06:49.199
+Also, side effects have this unexpected
+
+00:06:49.199 --> 00:06:50.240
+impact,
+
+00:06:50.240 --> 00:06:53.039
+when you saw the demo it was running
+
+00:06:53.039 --> 00:06:55.120
+pretty smoothly,
+
+00:06:55.120 --> 00:06:57.680
+but if I just add one message statement
+
+00:06:57.680 --> 00:06:58.479
+every beat for
+
+00:06:58.479 --> 00:07:00.960
+debugging purposes, I was getting lag and
+
+00:07:00.960 --> 00:07:03.759
+jitter.
+
+00:07:03.759 --> 00:07:05.440
+Here's the one thing I learned about
+
+00:07:05.440 --> 00:07:08.319
+music theory, music theory
+
+00:07:08.319 --> 00:07:11.599
+is not easy to program.
+
+00:07:11.599 --> 00:07:12.880
+I was looking around to see what
+
+00:07:12.880 --> 00:07:15.440
+concepts we can use to code the scales,
+
+00:07:15.440 --> 00:07:16.933
+to code the notes,
+
+00:07:16.933 --> 00:07:18.160
+the first thing that I saw is
+
+00:07:18.160 --> 00:07:20.240
+scale degrees,
+
+00:07:20.240 --> 00:07:23.360
+and this when I looked into it, you don't
+
+00:07:23.360 --> 00:07:26.319
+want to program in scale degrees.
+
+00:07:26.319 --> 00:07:28.240
+So, you see we have the first, second,
+
+00:07:28.240 --> 00:07:29.759
+third, fourth, fifth, sixth, seventh but
+
+00:07:29.759 --> 00:07:32.080
+then it wraps around. That octave up
+
+00:07:32.080 --> 00:07:33.919
+is also a first, and that's because both
+
+00:07:33.919 --> 00:07:36.000
+of those notes are C,
+
+00:07:36.000 --> 00:07:38.479
+so that didn't work, and also you
+
+00:07:38.479 --> 00:07:39.759
+couldn't really easily
+
+00:07:39.759 --> 00:07:43.599
+specify a flat or sharp. You could say
+
+00:07:43.599 --> 00:07:47.680
+a sharp third or
+
+00:07:47.680 --> 00:07:50.879
+you know, a flat seventh or whatever, but
+
+00:07:50.879 --> 00:07:52.319
+then you kind of have these two pieces
+
+00:07:52.319 --> 00:07:53.759
+of data that indicate the note, and I
+
+00:07:53.759 --> 00:07:55.840
+didn't love that.
+
+00:07:55.840 --> 00:07:57.440
+So, I looked again, and I
+
+00:07:57.440 --> 00:07:59.280
+found intervals,
+
+00:07:59.280 --> 00:08:01.120
+and then I thought about it, and you
+
+00:08:01.120 --> 00:08:02.080
+don't really want to program in
+
+00:08:02.080 --> 00:08:03.440
+intervals either.
+
+00:08:03.440 --> 00:08:05.520
+It fixes some of the problems with scale
+
+00:08:05.520 --> 00:08:07.039
+degrees, you see,
+
+00:08:07.039 --> 00:08:08.319
+all the way on the right you have an
+
+00:08:08.319 --> 00:08:10.319
+octave, so you wrap to 8, and you
+
+00:08:10.319 --> 00:08:13.039
+go 9, 10 and that works. But you solve the
+
+00:08:13.039 --> 00:08:14.319
+same problem, you see you have a major
+
+00:08:14.319 --> 00:08:16.400
+third but below we also have a minor
+
+00:08:16.400 --> 00:08:18.080
+third, so you saw that problem of having
+
+00:08:18.080 --> 00:08:20.160
+two pieces of information.
+
+00:08:20.160 --> 00:08:23.360
+So, I thought about it. Music is really
+
+00:08:23.360 --> 00:08:27.120
+frequencies. Like an A is 440 hertz.
+
+00:08:27.120 --> 00:08:28.400
+So, at a low level that's what we're
+
+00:08:28.400 --> 00:08:29.360
+going to do, we're just going to use
+
+00:08:29.360 --> 00:08:30.560
+frequencies.
+
+00:08:30.560 --> 00:08:32.800
+And then at the one level above that,
+
+00:08:32.800 --> 00:08:34.159
+that's a little bit easier for humans to
+
+00:08:34.159 --> 00:08:35.360
+think about,
+
+00:08:35.360 --> 00:08:37.039
+we're going to use semitones up from the
+
+00:08:37.039 --> 00:08:39.519
+root, which is kind of like scale degrees,
+
+00:08:39.519 --> 00:08:40.959
+but instead of just counting each note
+
+00:08:40.959 --> 00:08:42.880
+as one more, we're going to say how many
+
+00:08:42.880 --> 00:08:44.560
+semitones up it is.
+
+00:08:44.560 --> 00:08:47.200
+So, if there's a sharp between two notes,
+
+00:08:47.200 --> 00:08:48.480
+that's going to be two steps up instead
+
+00:08:48.480 --> 00:08:50.000
+of just one.
+
+00:08:50.000 --> 00:08:51.279
+And then we translate those two
+
+00:08:51.279 --> 00:08:54.160
+frequencies, so your A is 440 hertz,
+
+00:08:54.160 --> 00:08:56.920
+another note might be
+
+00:08:56.920 --> 00:08:58.480
+613.5,
+
+00:08:58.480 --> 00:09:00.720
+or whatever, and that's we use the low
+
+00:09:00.720 --> 00:09:02.959
+level to play.
+
+00:09:02.959 --> 00:09:05.200
+Some future work I have, I want to add
+
+00:09:05.200 --> 00:09:06.480
+some drums.
+
+00:09:06.480 --> 00:09:08.240
+I want to make that keyboard actually
+
+00:09:08.240 --> 00:09:09.680
+work,
+
+00:09:09.680 --> 00:09:12.399
+and computers and synthesizers are
+
+00:09:12.399 --> 00:09:14.320
+the only place you hear a pure sine wave
+
+00:09:14.320 --> 00:09:16.000
+like the one we have here,
+
+00:09:16.000 --> 00:09:17.680
+so I want to add overtones or other
+
+00:09:17.680 --> 00:09:19.440
+octaves above it just to make it
+
+00:09:19.440 --> 00:09:23.120
+sound a little bit more realistic.
+
+00:09:23.120 --> 00:09:25.360
+I've put notes references and the source
+
+00:09:25.360 --> 00:09:26.000
+code up
+
+00:09:26.000 --> 00:09:30.067
+at zck.org/emacsconf2020 [updated].
+
+00:09:30.067 --> 00:09:33.040
+I'm one of the organizers of EmacsNYC
+
+00:09:33.040 --> 00:09:36.080
+check that out. And if you take a look
+
+00:09:36.080 --> 00:09:38.240
+or have any thoughts, I'd love to hear
+
+00:09:38.240 --> 00:09:39.839
+them, and
+
+00:09:39.839 --> 00:09:46.160
+thanks so much for coming to my talk.
diff --git a/2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt b/2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt
new file mode 100644
index 00000000..43c39857
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--38-emacs-development-update--john-wiegley.vtt
@@ -0,0 +1,454 @@
+WEBVTT
+
+00:00:00.080 --> 00:00:03.040
+Hello EmacsConf! This is John Wiegley, I'm
+
+00:00:03.040 --> 00:00:04.960
+one of the co-maintainers of Emacs along
+
+00:00:04.960 --> 00:00:06.319
+with Eli Zaretskii
+
+00:00:06.319 --> 00:00:09.280
+and Lars Ingebrigtsen, and I wanted to
+
+00:00:09.280 --> 00:00:09.840
+give you
+
+00:00:09.840 --> 00:00:12.639
+a technical update on what has been
+
+00:00:12.639 --> 00:00:14.960
+happening
+
+00:00:14.960 --> 00:00:17.573
+with the Emacs in the last year.
+
+00:00:17.573 --> 00:00:20.640
+So, specifically we have a few notes that
+
+00:00:20.640 --> 00:00:21.600
+I've gotten from
+
+00:00:21.600 --> 00:00:24.480
+a call with Eli, he's been in charge of
+
+00:00:24.480 --> 00:00:25.840
+directing most of the
+
+00:00:25.840 --> 00:00:28.000
+technical contributions on the mailing
+
+00:00:28.000 --> 00:00:30.160
+list and monitoring all the patches.
+
+00:00:30.160 --> 00:00:33.200
+So, I'm more here just as a messenger.
+
+00:00:33.200 --> 00:00:35.840
+He says that we have good progress and
+
+00:00:35.840 --> 00:00:37.120
+support for Cairo,
+
+00:00:37.120 --> 00:00:39.040
+this is going to be enabled by default
+
+00:00:39.040 --> 00:00:40.320
+in Emacs 28,
+
+00:00:40.320 --> 00:00:42.480
+and Cairo plus HarfBuzz is going to be
+
+00:00:42.480 --> 00:00:44.800
+the preferred rendering combination.
+
+00:00:44.800 --> 00:00:46.879
+So, Cairo support is not new, but in the
+
+00:00:46.879 --> 00:00:48.719
+past there were a lot of bugs in the
+
+00:00:48.719 --> 00:00:51.440
+code, and so it was made experimental.
+
+00:00:51.440 --> 00:00:52.960
+Most of those bugs have been fixed
+
+00:00:52.960 --> 00:00:54.960
+recently, and now it becomes the default
+
+00:00:54.960 --> 00:00:56.320
+in the next major version,
+
+00:00:56.320 --> 00:00:58.320
+which will enable several good features
+
+00:00:58.320 --> 00:01:00.320
+such as color emojis, if you're looking
+
+00:01:00.320 --> 00:01:01.680
+forward to those.
+
+00:01:01.680 --> 00:01:04.720
+Xft, as a result is deprecated. There are
+
+00:01:04.720 --> 00:01:06.560
+bugs not getting fixed in that code, it
+
+00:01:06.560 --> 00:01:07.760
+doesn't appear to be very well
+
+00:01:07.760 --> 00:01:08.720
+maintained.
+
+00:01:08.720 --> 00:01:10.960
+It was the most advanced font backend
+
+00:01:10.960 --> 00:01:13.760
+in Emacs before Cairo became dependable.
+
+00:01:13.760 --> 00:01:15.920
+So, now that we have a more a better
+
+00:01:15.920 --> 00:01:17.840
+maintained and available solution in
+
+00:01:17.840 --> 00:01:19.360
+Cairo, we're going to go from that,
+
+00:01:19.360 --> 00:01:21.839
+go from Xft to that.
+
+00:01:21.839 --> 00:01:23.840
+Native compilation in Lisp
+
+00:01:23.840 --> 00:01:26.400
+will also be landing soon. It's currently
+
+00:01:26.400 --> 00:01:28.080
+on a branch, but there are several people
+
+00:01:28.080 --> 00:01:28.799
+using it,
+
+00:01:28.799 --> 00:01:31.040
+they say, they're very impressed. It does
+
+00:01:31.040 --> 00:01:32.479
+require live GCC
+
+00:01:32.479 --> 00:01:35.600
+JIT to be installed for it to work, and
+
+00:01:35.600 --> 00:01:37.439
+this means you have to have GCC 10
+
+00:01:37.439 --> 00:01:38.960
+installed.
+
+00:01:38.960 --> 00:01:41.040
+Execution of Emacs Lisp with native
+
+00:01:41.040 --> 00:01:42.240
+compilation on
+
+00:01:42.240 --> 00:01:45.280
+is about 2.5 times faster than the
+
+00:01:45.280 --> 00:01:46.159
+bytecode
+
+00:01:46.159 --> 00:01:48.399
+interpreter, we don't yet have any
+
+00:01:48.399 --> 00:01:49.439
+measurements on
+
+00:01:49.439 --> 00:01:51.600
+memory or how it affects resources
+
+00:01:51.600 --> 00:01:52.960
+besides CPU, so,
+
+00:01:52.960 --> 00:01:54.720
+we do look forward to having more
+
+00:01:54.720 --> 00:01:56.399
+numbers and analysis to see what the
+
+00:01:56.399 --> 00:01:58.320
+real impact of that is going to be,
+
+00:01:58.320 --> 00:02:01.360
+also, it may vary in compute advantage
+
+00:02:01.360 --> 00:02:02.799
+based on the type of workload that
+
+00:02:02.799 --> 00:02:04.320
+you're performing.
+
+00:02:04.320 --> 00:02:06.240
+A downside to the native compilation at
+
+00:02:06.240 --> 00:02:08.080
+the moment is that, it takes a long
+
+00:02:08.080 --> 00:02:10.720
+time to compile even when you're doing a
+
+00:02:10.720 --> 00:02:12.720
+16 core build of Emacs,
+
+00:02:12.720 --> 00:02:14.959
+it can still take 15 minutes to compile
+
+00:02:14.959 --> 00:02:15.760
+Emacs
+
+00:02:15.760 --> 00:02:17.840
+and all of its Lisp code
+
+00:02:17.840 --> 00:02:19.520
+with this enabled.
+
+00:02:19.520 --> 00:02:21.840
+Also, this is going to have to happen on
+
+00:02:21.840 --> 00:02:23.120
+every user's machine
+
+00:02:23.120 --> 00:02:25.360
+because we cannot distribute the native
+
+00:02:25.360 --> 00:02:27.520
+compilation products, they are specific
+
+00:02:27.520 --> 00:02:29.760
+to the processor that you might be
+
+00:02:29.760 --> 00:02:30.806
+running on.
+
+00:02:30.806 --> 00:02:33.920
+So, the Emacs distribution will remain much
+
+00:02:33.920 --> 00:02:35.680
+as it is now, but if you want to have the
+
+00:02:35.680 --> 00:02:37.760
+benefits of natively compiled
+
+00:02:37.760 --> 00:02:39.599
+core Lisp files, you're going to have to
+
+00:02:39.599 --> 00:02:41.519
+spend that time and have GCC 10
+
+00:02:41.519 --> 00:02:42.400
+available
+
+00:02:42.400 --> 00:02:45.840
+to get that compilation support.
+
+00:02:45.840 --> 00:02:48.959
+The GTK only build is being prepared
+
+00:02:48.959 --> 00:02:52.160
+for merging. What this does is, it
+
+00:02:52.160 --> 00:02:52.959
+throws away
+
+00:02:52.959 --> 00:02:55.120
+most of the other tool kits that Emacs
+
+00:02:55.120 --> 00:02:56.000
+was using
+
+00:02:56.000 --> 00:02:59.280
+and relies only on GTK, making Emacs
+
+00:02:59.280 --> 00:03:01.760
+much more of a GTK application than it
+
+00:03:01.760 --> 00:03:03.920
+has been.
+
+00:03:03.920 --> 00:03:06.480
+The main issue here is that we were
+
+00:03:06.480 --> 00:03:08.480
+abusing GTK in some ways that weren't
+
+00:03:08.480 --> 00:03:09.360
+really meant,
+
+00:03:09.360 --> 00:03:10.879
+and now we're going to be more of a
+
+00:03:10.879 --> 00:03:12.879
+first club…, GTK will be more of a first
+
+00:03:12.879 --> 00:03:14.080
+class citizen in the
+
+00:03:14.080 --> 00:03:17.440
+approach and the ways that we use it, and
+
+00:03:17.440 --> 00:03:19.280
+be using it in the ways that the GTK
+
+00:03:19.280 --> 00:03:21.200
+developers intended.
+
+00:03:21.200 --> 00:03:23.360
+There is going to be much more support
+
+00:03:23.360 --> 00:03:24.640
+for xt-mouse.
+
+00:03:24.640 --> 00:03:27.280
+So, xt-mouse allows you to use your mouse
+
+00:03:27.280 --> 00:03:29.120
+inside of a terminal window,
+
+00:03:29.120 --> 00:03:30.799
+which you could do before, but there were
+
+00:03:30.799 --> 00:03:33.120
+certain aspects such as menus
+
+00:03:33.120 --> 00:03:36.159
+that weren't supported. So, instead of
+
+00:03:36.159 --> 00:03:38.239
+having kind of partial support for mouse
+
+00:03:38.239 --> 00:03:40.473
+inside of an XTerm, with xt-mouse,
+
+00:03:40.473 --> 00:03:42.879
+you get full support. This is going
+
+00:03:42.879 --> 00:03:44.959
+to allow
+
+00:03:44.959 --> 00:03:46.720
+changes in the way that things can be
+
+00:03:46.720 --> 00:03:48.159
+bound, the ways that
+
+00:03:48.159 --> 00:03:51.200
+key bindings can…, the mouse events can
+
+00:03:51.200 --> 00:03:53.200
+be mapped to key bindings while in
+
+00:03:53.200 --> 00:03:56.879
+XTerms, and yeah, little by little
+
+00:03:56.879 --> 00:03:58.480
+this support is being extended even
+
+00:03:58.480 --> 00:03:59.040
+further,
+
+00:03:59.040 --> 00:04:01.599
+so we look forward to seeing that
+
+00:04:01.599 --> 00:04:04.080
+develop in the near term.
+
+00:04:04.080 --> 00:04:06.239
+Once this is merged by the way, also then
+
+00:04:06.239 --> 00:04:08.080
+Emacs will have mouse support in every
+
+00:04:08.080 --> 00:04:09.840
+one of its available configurations,
+
+00:04:09.840 --> 00:04:12.173
+which has not been true until now.
+
+00:04:12.173 --> 00:04:14.680
+Emacs 27 will be soon releasing
+
+00:04:14.680 --> 00:04:17.519
+27.2, and the pretest for that should
+
+00:04:17.519 --> 00:04:19.919
+begin sometime soon after EmacsConf is
+
+00:04:19.919 --> 00:04:20.880
+done.
+
+00:04:20.880 --> 00:04:23.360
+And finally Emacs 28 is going to get
+
+00:04:23.360 --> 00:04:24.800
+better emoji support,
+
+00:04:24.800 --> 00:04:26.479
+right now emojis are registered
+
+00:04:26.479 --> 00:04:29.120
+internally within Emacs as symbols
+
+00:04:29.120 --> 00:04:31.759
+which works in some ways but does not
+
+00:04:31.759 --> 00:04:33.759
+support some of the special features
+
+00:04:33.759 --> 00:04:37.360
+of emojis such as different
+
+00:04:37.360 --> 00:04:40.000
+skin tones for the hand emoji or face
+
+00:04:40.000 --> 00:04:41.120
+emojis.
+
+00:04:41.120 --> 00:04:43.280
+In Emacs 28, emojis are going to have
+
+00:04:43.280 --> 00:04:45.199
+their own support within the
+
+00:04:45.199 --> 00:04:47.199
+C code, and then this is going to allow
+
+00:04:47.199 --> 00:04:49.360
+those types of variations and other
+
+00:04:49.360 --> 00:04:51.439
+emoji specific font setups.
+
+00:04:51.439 --> 00:04:54.639
+So, that is everything for Emacs
+
+00:04:54.639 --> 00:04:56.720
+in the future, I don't have a timeline
+
+00:04:56.720 --> 00:04:59.120
+for you on when 28 will be available,
+
+00:04:59.120 --> 00:05:01.520
+but 27 is going to keep improving until
+
+00:05:01.520 --> 00:05:02.720
+we're ready to get there.
+
+00:05:02.720 --> 00:05:04.906
+So, have fun with the rest of EmacsConf,
+
+00:05:04.906 --> 00:05:06.479
+and I hope to see you there,
+
+00:05:06.479 --> 00:05:09.199
+Bye.
diff --git a/2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt
new file mode 100644
index 00000000..3588810e
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--questions--richard-stallman.vtt
@@ -0,0 +1,2707 @@
+WEBVTT
+
+00:00:00.640 --> 00:00:04.160
+Okay. So, the first question is, "What is an
+
+00:00:04.160 --> 00:00:08.800
+example of a package currently in
+
+00:00:08.800 --> 00:00:12.160
+a non-ELPA repo that does not work well
+
+00:00:12.160 --> 00:00:13.759
+with Emacs?"
+
+00:00:13.759 --> 00:00:18.000
+Well, one of them is s.el,
+
+00:00:18.000 --> 00:00:19.760
+and this is what made me aware that
+
+00:00:19.760 --> 00:00:21.920
+there was an issue here that caused
+
+00:00:21.920 --> 00:00:25.760
+problems. Well, s.el
+
+00:00:25.760 --> 00:00:29.439
+is a beautifully written package
+
+00:00:29.439 --> 00:00:31.279
+that appears to be very useful for
+
+00:00:31.279 --> 00:00:32.800
+people.
+
+00:00:32.800 --> 00:00:36.320
+And there's just one thing wrong with it.
+
+00:00:36.320 --> 00:00:39.520
+It gobbled up the name space
+
+00:00:39.520 --> 00:00:43.680
+of symbols starting with s dash.
+
+00:00:43.680 --> 00:00:47.039
+And I was shocked to discover that
+
+00:00:47.039 --> 00:00:49.440
+somebody who had not coordinated with
+
+00:00:49.440 --> 00:00:51.760
+the Emacs developers at all,
+
+00:00:51.760 --> 00:00:55.360
+had implemented a package using such a
+
+00:00:55.360 --> 00:00:56.800
+short prefix, which
+
+00:00:56.800 --> 00:00:58.723
+isn't the right way to do things.
+
+00:00:58.723 --> 00:01:01.520
+Oh, by the way, the questions have moved off the
+
+00:01:01.520 --> 00:01:04.000
+screen, this is no good. I can continue
+
+00:01:04.000 --> 00:01:05.360
+answering this one,
+
+00:01:05.360 --> 00:01:08.880
+but I'll be stuck when this one is over.
+
+00:01:08.880 --> 00:01:12.159
+Anyway, so…
+
+00:01:12.159 --> 00:01:15.040
+I was told that there was nothing I
+
+00:01:15.040 --> 00:01:16.560
+could do about it,
+
+00:01:16.560 --> 00:01:19.920
+that so many users, packages were using
+
+00:01:19.920 --> 00:01:22.960
+s.el and thus essentially using that
+
+00:01:22.960 --> 00:01:24.240
+definition
+
+00:01:24.240 --> 00:01:28.080
+of the s-* symbols,
+
+00:01:28.080 --> 00:01:31.360
+that any attempt to use them
+
+00:01:31.360 --> 00:01:34.720
+publicly or privately for anything else
+
+00:01:34.720 --> 00:01:38.079
+would lead to horrible problems.
+
+00:01:38.079 --> 00:01:41.680
+And I don't like that.
+
+00:01:41.680 --> 00:01:45.520
+I decided, I wanted to do something
+
+00:01:45.520 --> 00:01:49.040
+a) so that wouldn't happen again
+
+00:01:49.040 --> 00:01:52.320
+and b) to make it unhappen
+
+00:01:52.320 --> 00:01:55.119
+in that case. Well, the way to make it
+
+00:01:55.119 --> 00:01:57.840
+unhappen in that case is with a new
+
+00:01:57.840 --> 00:02:02.240
+symbol renaming feature. The idea is,
+
+00:02:02.240 --> 00:02:05.360
+you rename that file to something else,
+
+00:02:05.360 --> 00:02:09.119
+and then you define an s.el that
+
+00:02:09.119 --> 00:02:11.520
+sets up symbol renaming and then loads
+
+00:02:11.520 --> 00:02:13.040
+the something else.
+
+00:02:13.040 --> 00:02:15.590
+So, it actually runs the same code,
+
+00:02:15.590 --> 00:02:16.400
+it just
+
+00:02:16.400 --> 00:02:20.879
+doesn't globally define the symbols
+
+00:02:20.879 --> 00:02:23.920
+s dash whatever, but they
+
+00:02:23.920 --> 00:02:26.160
+appear to work for the programs that
+
+00:02:26.160 --> 00:02:32.640
+explicitly require s.el
+
+00:02:32.640 --> 00:02:36.000
+or the s package. So, this gets the same
+
+00:02:36.000 --> 00:02:38.080
+behavior for all the programs that are
+
+00:02:38.080 --> 00:02:40.239
+using that library
+
+00:02:40.239 --> 00:02:43.360
+and doesn't interfere
+
+00:02:43.360 --> 00:02:47.840
+with the global name space at all.
+
+00:02:47.840 --> 00:02:50.319
+However, to do that we need to have a
+
+00:02:50.319 --> 00:02:52.080
+package
+
+00:02:52.080 --> 00:02:55.360
+s.el, that isn't the same
+
+00:02:55.360 --> 00:02:57.760
+totally. A short one file that's totally
+
+00:02:57.760 --> 00:02:58.640
+different.
+
+00:02:58.640 --> 00:03:01.440
+Plus, we've got to have the file that
+
+00:03:01.440 --> 00:03:02.840
+normally is called
+
+00:03:02.840 --> 00:03:06.239
+s.el available, but
+
+00:03:06.239 --> 00:03:10.319
+under another name. Well,
+
+00:03:10.319 --> 00:03:13.040
+how are we going to do that? We can't put
+
+00:03:13.040 --> 00:03:18.879
+this into Emacs in a nice way that
+
+00:03:18.879 --> 00:03:24.560
+won't make the maintainer angry.
+
+00:03:24.560 --> 00:03:28.159
+(or the developer of that package.)
+
+00:03:28.159 --> 00:03:32.080
+But we can do it with NonGNU
+
+00:03:32.080 --> 00:03:34.640
+ELPA. We can put those two things into
+
+00:03:34.640 --> 00:03:36.239
+NonGNU ELPA
+
+00:03:36.239 --> 00:03:38.720
+without any difficulty. And this shows
+
+00:03:38.720 --> 00:03:40.720
+one of the advantages.
+
+00:03:40.720 --> 00:03:43.280
+We can put files, we can put packages
+
+00:03:43.280 --> 00:03:45.440
+into NonGNU ELPA
+
+00:03:45.440 --> 00:03:48.400
+and make changes in them. Now, in general
+
+00:03:48.400 --> 00:03:49.599
+we wouldn't
+
+00:03:49.599 --> 00:03:51.760
+go to the effort of making big changes.
+
+00:03:51.760 --> 00:03:54.319
+That's just too much to do
+
+00:03:54.319 --> 00:03:56.400
+unless something's really important. But
+
+00:03:56.400 --> 00:03:58.000
+small changes
+
+00:03:58.000 --> 00:04:01.120
+that help things fit in are
+
+00:04:01.120 --> 00:04:04.319
+easy to do.
+
+00:04:04.319 --> 00:04:07.120
+Okay, oh, so basically the recording
+
+00:04:07.120 --> 00:04:10.319
+didn't get anything until now. I just saw
+
+00:04:10.319 --> 00:04:13.439
+a note pop up, "this session is now being
+
+00:04:13.439 --> 00:04:14.319
+recorded".
+
+00:04:14.319 --> 00:04:16.320
+I hope it's been recorded all along. It
+
+00:04:16.320 --> 00:04:18.160
+would be a shame to
+
+00:04:18.160 --> 00:04:21.280
+spoil… Oh, good okay.
+
+00:04:21.280 --> 00:04:27.120
+So, that's one of the issues.
+
+00:04:27.120 --> 00:04:30.479
+"Does NonGNU ELPA already exist
+
+00:04:30.479 --> 00:04:33.840
+or is this a sort of "plan"?" I don't
+
+00:04:33.840 --> 00:04:35.360
+know why you have to
+
+00:04:35.360 --> 00:04:37.919
+put scare quotes around the word plan.
+
+00:04:37.919 --> 00:04:40.400
+It's sort of in between.
+
+00:04:40.400 --> 00:04:44.160
+The creation of it is started. You
+
+00:04:44.160 --> 00:04:45.440
+will find
+
+00:04:45.440 --> 00:04:48.160
+that there is an archive that it's
+
+00:04:48.160 --> 00:04:51.520
+possible to download packages from,
+
+00:04:51.520 --> 00:04:54.880
+and there is a repository to put them in,
+
+00:04:54.880 --> 00:04:57.120
+but that's not the way it's really
+
+00:04:57.120 --> 00:04:58.560
+supposed to work.
+
+00:04:58.560 --> 00:05:02.800
+This is not supposed to be like the
+
+00:05:02.800 --> 00:05:04.320
+GNU ELPA, where there's
+
+00:05:04.320 --> 00:05:07.280
+one repo for all the packages and thus
+
+00:05:07.280 --> 00:05:09.039
+anyone who wants to edit any of them,
+
+00:05:09.039 --> 00:05:11.199
+anyone that we want to have edit any of
+
+00:05:11.199 --> 00:05:11.680
+them,
+
+00:05:11.680 --> 00:05:13.280
+has got to have access to the whole
+
+00:05:13.280 --> 00:05:15.440
+thing for one thing.
+
+00:05:15.440 --> 00:05:18.560
+Some packages will make
+
+00:05:18.560 --> 00:05:21.840
+an arrangement with the developers,
+
+00:05:21.840 --> 00:05:25.120
+and they'll assure us that they will
+
+00:05:25.120 --> 00:05:27.039
+do things as things should be done, and
+
+00:05:27.039 --> 00:05:28.400
+then we'll
+
+00:05:28.400 --> 00:05:32.080
+have their repo copied automatically
+
+00:05:32.080 --> 00:05:35.919
+or in other cases, say,
+
+00:05:35.919 --> 00:05:38.160
+copied manually with a little checking
+
+00:05:38.160 --> 00:05:40.160
+every so often.
+
+00:05:40.160 --> 00:05:46.400
+In other cases we'll need to have our own
+
+00:05:46.400 --> 00:05:49.440
+repo for a particular package.
+
+00:05:49.440 --> 00:05:52.479
+But we shouldn't have a single repo for
+
+00:05:52.479 --> 00:05:54.400
+all the packages. We should have a repo
+
+00:05:54.400 --> 00:05:55.919
+for each package,
+
+00:05:55.919 --> 00:05:57.840
+so that the people working on that can
+
+00:05:57.840 --> 00:06:01.120
+get access to modify it.
+
+00:06:01.120 --> 00:06:04.319
+This has to be finished setting up,
+
+00:06:04.319 --> 00:06:06.080
+and we're still working out the
+
+00:06:06.080 --> 00:06:07.680
+procedures.
+
+00:06:07.680 --> 00:06:11.039
+For instance, for making the arrangements
+
+00:06:11.039 --> 00:06:14.400
+with the developers of a package so that
+
+00:06:14.400 --> 00:06:15.440
+we can,
+
+00:06:15.440 --> 00:06:18.840
+we hope, entrust its development to
+
+00:06:18.840 --> 00:06:24.800
+them and rely on them directly.
+
+00:06:24.800 --> 00:06:26.560
+And there may be more that needs to be
+
+00:06:26.560 --> 00:06:29.840
+worked on.
+
+00:06:29.840 --> 00:06:36.639
+Oh! There's so many questions.
+
+00:06:36.639 --> 00:06:39.280
+Well, I hope you… The third question is,
+
+00:06:39.280 --> 00:06:40.880
+what are the benefits?
+
+00:06:40.880 --> 00:06:43.680
+I hope that people now see the benefits.
+
+00:06:43.680 --> 00:06:46.240
+I've described them.
+
+00:06:46.240 --> 00:06:49.599
+Next question, "Is it possible to work
+
+00:06:49.599 --> 00:06:51.440
+with the MELPA team
+
+00:06:51.440 --> 00:06:54.720
+to integrate that into Emacs?"
+
+00:06:54.720 --> 00:06:59.440
+No, because the goal doesn't make sense.
+
+00:06:59.440 --> 00:07:03.759
+MELPA the way it's done, does not belong
+
+00:07:03.759 --> 00:07:07.199
+inside Emacs in any sense. Well, first of
+
+00:07:07.199 --> 00:07:08.560
+all, it can't literally be
+
+00:07:08.560 --> 00:07:11.280
+inside Emacs. We don't have copyright
+
+00:07:11.280 --> 00:07:13.280
+assignments for that code
+
+00:07:13.280 --> 00:07:18.160
+and to get it would be unfeasible,
+
+00:07:18.160 --> 00:07:20.560
+but we're not asking for copyright
+
+00:07:20.560 --> 00:07:21.520
+assignments for
+
+00:07:21.520 --> 00:07:25.280
+NonGNU ELPA so that's
+
+00:07:25.280 --> 00:07:27.599
+you might wonder could MELPA be merged
+
+00:07:27.599 --> 00:07:31.440
+with NonGNU ELPA? The problem is,
+
+00:07:31.440 --> 00:07:35.039
+MELPA doesn't modify the packages.
+
+00:07:35.039 --> 00:07:38.240
+It's just a place to find releases of
+
+00:07:38.240 --> 00:07:41.360
+packages wherever they happen to be,
+
+00:07:41.360 --> 00:07:44.800
+and they put packages in with
+
+00:07:44.800 --> 00:07:48.319
+only a little bit of checking.
+
+00:07:48.319 --> 00:07:51.520
+So, no. There are a lot of packages
+
+00:07:51.520 --> 00:07:51.919
+that are
+
+00:07:51.919 --> 00:07:55.280
+in MELPA that we'd like to get into
+
+00:07:55.280 --> 00:07:58.479
+NonGNU ELPA. I don't know the names of
+
+00:07:58.479 --> 00:08:00.800
+most of them, but I expect most of them
+
+00:08:00.800 --> 00:08:04.160
+would be fine to have. But they've got to
+
+00:08:04.160 --> 00:08:08.560
+be looked at one by one.
+
+00:08:08.560 --> 00:08:12.000
+There are some rules for NonGNU ELPA,
+
+00:08:12.000 --> 00:08:14.479
+and the only way to check them is to
+
+00:08:14.479 --> 00:08:18.000
+check them on one package at a time,
+
+00:08:18.000 --> 00:08:22.160
+and that's going to take effort.
+
+00:08:22.160 --> 00:08:25.039
+Now, with the people who work on MELPA
+
+00:08:25.039 --> 00:08:26.080
+want to get involved
+
+00:08:26.080 --> 00:08:29.440
+of this, that would be great.
+
+00:08:29.440 --> 00:08:32.800
+I haven't tried asking them. First we've
+
+00:08:32.800 --> 00:08:33.919
+got to get this thing
+
+00:08:33.919 --> 00:08:37.599
+set up. I doubt they would want to,
+
+00:08:37.599 --> 00:08:40.479
+but if they said yes, that would be
+
+00:08:40.479 --> 00:08:44.159
+wonderful.
+
+00:08:44.159 --> 00:08:48.399
+"Any thoughts of packages being
+
+00:08:48.399 --> 00:09:00.959
+added…" I'm afraid.
+
+00:09:05.440 --> 00:09:08.959
+Any thoughts of packages being added as
+
+00:09:08.959 --> 00:09:11.040
+some URL I don't know anything about, but
+
+00:09:11.040 --> 00:09:13.120
+it talks about open source,
+
+00:09:13.120 --> 00:09:17.680
+which means I'm very unlikely to have much
+
+00:09:17.680 --> 00:09:20.959
+in common with whatever they say about
+
+00:09:20.959 --> 00:09:24.080
+either licensing or
+
+00:09:24.080 --> 00:09:27.760
+what's right and wrong.
+
+00:09:27.760 --> 00:09:29.959
+But this seems to be something about
+
+00:09:29.959 --> 00:09:33.523
+disregarding licenses altogether.
+
+00:09:33.523 --> 00:09:35.680
+Well, that is basically
+
+00:09:35.680 --> 00:09:39.360
+asking to lose. There are reasons
+
+00:09:39.360 --> 00:09:43.360
+why we developed GNU licenses to release
+
+00:09:43.360 --> 00:09:46.490
+software, why we have criteria for which
+
+00:09:46.490 --> 00:09:49.519
+licenses make a program free software.
+
+00:09:49.519 --> 00:09:52.640
+If the program doesn't carry a license
+
+00:09:52.640 --> 00:09:55.057
+or if it carries a non-free license,
+
+00:09:55.057 --> 00:09:58.323
+that program is not free software.
+
+00:09:58.323 --> 00:10:01.857
+Now, you can maybe get away with
+
+00:10:01.857 --> 00:10:04.800
+disregarding that fact unless
+
+00:10:04.800 --> 00:10:08.959
+somebody, an author or publisher stops you.
+
+00:10:08.959 --> 00:10:11.360
+But we're not going to take… we're not
+
+00:10:11.360 --> 00:10:12.399
+basically going to
+
+00:10:12.399 --> 00:10:15.200
+disregard the question of whether the
+
+00:10:15.200 --> 00:10:16.399
+software we
+
+00:10:16.399 --> 00:10:19.040
+recommend to people, really is free
+
+00:10:19.040 --> 00:10:21.360
+software or not.
+
+00:10:21.360 --> 00:10:24.560
+That's basically
+
+00:10:24.560 --> 00:10:27.519
+blindfolding yourself to the legal
+
+00:10:27.519 --> 00:10:29.120
+situation of the software you're
+
+00:10:29.120 --> 00:10:33.519
+distributing, it's a terrible idea. If they
+
+00:10:33.519 --> 00:10:35.920
+disregard our licenses they will hear
+
+00:10:35.920 --> 00:10:38.640
+from us about it.
+
+00:10:38.640 --> 00:10:40.959
+And if you want to contribute to the
+
+00:10:40.959 --> 00:10:42.720
+free world
+
+00:10:42.720 --> 00:10:46.320
+put free licenses on your code
+
+00:10:46.320 --> 00:10:47.823
+and choose good ones.
+
+00:10:47.823 --> 00:10:50.000
+To get this information,
+
+00:10:50.000 --> 00:10:57.120
+look at gnu.org/licenses,
+
+00:10:57.120 --> 00:10:59.839
+and one page that's important
+
+00:10:59.839 --> 00:11:05.040
+is license-recommendations.html,
+
+00:11:05.040 --> 00:11:07.360
+that's where we advise you on what
+
+00:11:07.360 --> 00:11:09.279
+license we would recommend you use
+
+00:11:09.279 --> 00:11:11.360
+depending on the circumstances.
+
+00:11:11.360 --> 00:11:15.600
+There's also license-list.html
+
+00:11:15.600 --> 00:11:20.160
+which describes a lot of licenses and
+
+00:11:20.160 --> 00:11:22.160
+says which ones are free,
+
+00:11:22.160 --> 00:11:23.957
+which ones are compatible
+
+00:11:23.957 --> 00:11:26.160
+with the GNU GPL.
+
+00:11:26.160 --> 00:11:28.640
+It's really important to use only GPL
+
+00:11:28.640 --> 00:11:31.519
+compatible licenses
+
+00:11:31.519 --> 00:11:34.320
+so that the various programs can be
+
+00:11:34.320 --> 00:11:40.720
+combined together or linked.
+
+00:11:40.720 --> 00:11:43.120
+You can also get other information about
+
+00:11:43.120 --> 00:11:44.240
+GNU licenses
+
+00:11:44.240 --> 00:11:47.040
+and the reasons why they are written the
+
+00:11:47.040 --> 00:11:55.279
+way they are.
+
+00:11:55.279 --> 00:12:03.200
+Oh sorry, I don't see the next question.
+
+00:12:03.200 --> 00:12:07.519
+"Why do I insist on using per and pers?"
+
+00:12:07.519 --> 00:12:11.680
+I'm not happy with using
+
+00:12:11.680 --> 00:12:14.959
+they, which is a plural pronoun with a
+
+00:12:14.959 --> 00:12:17.440
+singular antecedent.
+
+00:12:17.440 --> 00:12:20.480
+It's bad because it causes
+
+00:12:20.480 --> 00:12:24.800
+confusion that is completely gratuitous.
+
+00:12:24.800 --> 00:12:28.639
+Many sentences become a lot of work
+
+00:12:28.639 --> 00:12:33.200
+to parse and understand if you
+
+00:12:33.200 --> 00:12:36.480
+add that ambiguity, that source of
+
+00:12:36.480 --> 00:12:39.839
+regular ambiguity. Now,
+
+00:12:39.839 --> 00:12:42.720
+I do not accept the demands of other
+
+00:12:42.720 --> 00:12:43.680
+people
+
+00:12:43.680 --> 00:12:47.519
+in regard to changing my grammar.
+
+00:12:47.519 --> 00:12:50.800
+You can try to convince me, but
+
+00:12:50.800 --> 00:12:54.240
+no one is entitled to give me orders
+
+00:12:54.240 --> 00:12:55.440
+about that
+
+00:12:55.440 --> 00:12:58.880
+or state their desires and expect
+
+00:12:58.880 --> 00:13:03.200
+obedience, not for me and not from you
+
+00:13:03.200 --> 00:13:06.560
+or anyone. We are all
+
+00:13:06.560 --> 00:13:09.839
+equally entitled to decide
+
+00:13:09.839 --> 00:13:13.200
+how we will speak and how we won't speak.
+
+00:13:13.200 --> 00:13:18.000
+I've spelled out all of these points
+
+00:13:18.000 --> 00:13:19.857
+in a file called
+
+00:13:19.857 --> 00:13:29.423
+stallman.org/articles/genderless-pronouns.html
+
+00:13:29.423 --> 00:13:31.600
+(corrected),
+
+00:13:31.600 --> 00:13:33.760
+of course, this is not a GNU project
+
+00:13:33.760 --> 00:13:36.000
+policy,
+
+00:13:36.000 --> 00:13:46.839
+it's my own personal ideas on the
+
+00:13:46.839 --> 00:13:53.920
+subject.
+
+00:13:53.920 --> 00:13:57.120
+If any of you feels offended
+
+00:13:57.120 --> 00:14:01.040
+by my referring to you with a singular
+
+00:14:01.040 --> 00:14:04.320
+gender-neutral pronoun, feel free
+
+00:14:04.320 --> 00:14:07.680
+to contact me privately
+
+00:14:07.680 --> 00:14:10.720
+and explain to me your reasons.
+
+00:14:10.720 --> 00:14:14.000
+I will pay attention to them, I'll
+
+00:14:14.000 --> 00:14:16.639
+think about them assuming that they're
+
+00:14:16.639 --> 00:14:18.399
+not something I've already
+
+00:14:18.399 --> 00:14:24.079
+considered and decided to dismiss before.
+
+00:14:24.079 --> 00:14:27.760
+But you must not speak to me as if I had
+
+00:14:27.760 --> 00:14:30.240
+no business not obeying you because
+
+00:14:30.240 --> 00:14:31.690
+that's rude,
+
+00:14:31.690 --> 00:14:34.320
+and it is not likely to convince me
+
+00:14:34.320 --> 00:14:40.720
+to change my mind.
+
+00:14:40.720 --> 00:14:44.240
+I believe it is not actually
+
+00:14:44.240 --> 00:14:48.320
+of stating offense to anyone,
+
+00:14:48.320 --> 00:14:50.560
+and the fact that somebody disagrees
+
+00:14:50.560 --> 00:14:52.880
+with me does not mean I'm wrong,
+
+00:14:52.880 --> 00:15:00.720
+but I always can be wrong.
+
+00:15:00.720 --> 00:15:02.560
+"When you wrote that you could add a
+
+00:15:02.560 --> 00:15:05.680
+package to NonGNU ELPA,
+
+00:15:05.680 --> 00:15:07.120
+are you implying that you would add
+
+00:15:07.120 --> 00:15:09.199
+packages with or without package
+
+00:15:09.199 --> 00:15:11.120
+maintainer's knowledge?"
+
+00:15:11.120 --> 00:15:15.279
+Of course, the packages we would
+
+00:15:15.279 --> 00:15:18.000
+distribute in this way are free
+
+00:15:18.000 --> 00:15:19.519
+software.
+
+00:15:19.519 --> 00:15:22.720
+Everyone is entitled to redistribute them
+
+00:15:22.720 --> 00:15:26.560
+and everyone is also entitled to modify
+
+00:15:26.560 --> 00:15:26.959
+them
+
+00:15:26.959 --> 00:15:29.199
+and redistribute them, that's part of the
+
+00:15:29.199 --> 00:15:31.680
+meaning of free software.
+
+00:15:31.680 --> 00:15:35.040
+I have been unable to understand
+
+00:15:35.040 --> 00:15:38.320
+how there came to be an idea
+
+00:15:38.320 --> 00:15:42.560
+that those who redistribute packages
+
+00:15:42.560 --> 00:15:49.360
+have some obligation to be mere mirrors
+
+00:15:49.360 --> 00:15:54.480
+and not modify things themselves.
+
+00:15:54.480 --> 00:15:58.560
+Well, if a package is
+
+00:15:58.560 --> 00:16:01.440
+being maintained by developers who are
+
+00:16:01.440 --> 00:16:03.440
+cooperating with us,
+
+00:16:03.440 --> 00:16:06.240
+we'll normally just leave it to them.
+
+00:16:06.240 --> 00:16:07.360
+After all,
+
+00:16:07.360 --> 00:16:09.590
+we have lots of other work to do.
+
+00:16:09.590 --> 00:16:12.390
+They are clearly experts on
+
+00:16:12.390 --> 00:16:15.600
+the packages they've developed,
+
+00:16:15.600 --> 00:16:18.399
+let's leave it to them if they make that
+
+00:16:18.399 --> 00:16:22.800
+sort of arrangement with us. But
+
+00:16:22.800 --> 00:16:26.480
+that's up to them, we can't insist that
+
+00:16:26.480 --> 00:16:29.120
+anyone make an arrangement with us,
+
+00:16:29.120 --> 00:16:30.720
+but since those programs are free
+
+00:16:30.720 --> 00:16:35.723
+software, anyone is free to redistribute them,
+
+00:16:35.723 --> 00:16:41.839
+and we will do that.
+
+00:16:41.839 --> 00:16:45.519
+"Have you ever used vi or vim or
+
+00:16:45.519 --> 00:16:52.079
+evil mode?" No.
+
+00:16:52.079 --> 00:16:53.920
+"Are there any plans to implement
+
+00:16:53.920 --> 00:16:56.800
+security considerations in NonGNU
+
+00:16:56.800 --> 00:16:58.657
+ELPA?"
+
+00:16:58.657 --> 00:17:01.890
+We probably should,
+
+00:17:01.890 --> 00:17:04.959
+and this will have to be implemented,
+
+00:17:04.959 --> 00:17:08.559
+but at the moment
+
+00:17:08.559 --> 00:17:12.000
+developer Emacs maintainers will copy
+
+00:17:12.000 --> 00:17:13.280
+packages
+
+00:17:13.280 --> 00:17:18.160
+into it, and so as long as they are
+
+00:17:18.160 --> 00:17:20.160
+verifying the packages and getting the
+
+00:17:20.160 --> 00:17:22.480
+packages from the right place
+
+00:17:22.480 --> 00:17:24.690
+that will take care of the security.
+
+00:17:24.690 --> 00:17:25.919
+Once there is…
+
+00:17:25.919 --> 00:17:30.160
+When with automatic copying in,
+
+00:17:30.160 --> 00:17:33.200
+will have to do something to
+
+00:17:33.200 --> 00:17:35.200
+make sure that we're fetching the
+
+00:17:35.200 --> 00:17:40.320
+packages securely.
+
+00:17:40.320 --> 00:17:44.000
+Some of you might be interested in
+
+00:17:44.000 --> 00:17:46.080
+helping to design and implement this
+
+00:17:46.080 --> 00:17:48.000
+system.
+
+00:17:48.000 --> 00:17:52.559
+"What distro do I use?"
+
+00:17:52.559 --> 00:17:56.720
+Well, which distro of GNU/Linux
+
+00:17:56.720 --> 00:17:58.000
+do I use?
+
+00:17:58.000 --> 00:18:03.520
+I use Trisquel,
+
+00:18:03.520 --> 00:18:07.200
+I haven't tried most of the free distros
+
+00:18:07.200 --> 00:18:10.080
+and the reason is, it's not crucial that
+
+00:18:10.080 --> 00:18:11.120
+I do so,
+
+00:18:11.120 --> 00:18:13.520
+we don't need me to rate the various
+
+00:18:13.520 --> 00:18:14.799
+free distros on
+
+00:18:14.799 --> 00:18:17.520
+practical questions because anyone can
+
+00:18:17.520 --> 00:18:20.000
+do that as well as I can.
+
+00:18:20.000 --> 00:18:24.400
+And so you can tell people what
+
+00:18:24.400 --> 00:18:27.760
+you think of using them. For me, what's
+
+00:18:27.760 --> 00:18:29.360
+important to me
+
+00:18:29.360 --> 00:18:32.400
+is to inform people of the difference
+
+00:18:32.400 --> 00:18:34.160
+between the free distros
+
+00:18:34.160 --> 00:18:36.799
+and the non-free distros, making sure
+
+00:18:36.799 --> 00:18:38.799
+people are aware that if you
+
+00:18:38.799 --> 00:18:42.000
+install a non-free GNU/Linux
+
+00:18:42.000 --> 00:18:45.600
+distro, you'll get a free operating
+
+00:18:45.600 --> 00:18:46.720
+system with
+
+00:18:46.720 --> 00:18:49.919
+non-free stuff in various quantities
+
+00:18:49.919 --> 00:18:54.160
+added, thus you will not reach freedom,
+
+00:18:54.160 --> 00:18:56.240
+although you'll make a lot of
+
+00:18:56.240 --> 00:18:57.520
+progress compared
+
+00:18:57.520 --> 00:19:01.039
+with using for instance, Windows or
+
+00:19:01.039 --> 00:19:03.919
+macOS or whatever vicious thing it
+
+00:19:03.919 --> 00:19:06.160
+might be.
+
+00:19:06.160 --> 00:19:09.760
+I'd like people to be aware
+
+00:19:09.760 --> 00:19:12.799
+of this next step towards
+
+00:19:12.799 --> 00:19:14.720
+getting freedom for yourself and your
+
+00:19:14.720 --> 00:19:16.160
+own computing,
+
+00:19:16.160 --> 00:19:24.480
+so that you can do that if you want to.
+
+00:19:29.039 --> 00:19:31.360
+"Who gets to make the final decision
+
+00:19:31.360 --> 00:19:35.157
+regarding NonGNU ELPA?"
+
+00:19:35.157 --> 00:19:38.690
+The Emacs maintainers are
+
+00:19:38.690 --> 00:19:40.960
+going to be in charge of this,
+
+00:19:40.960 --> 00:19:44.480
+because it's not
+
+00:19:44.480 --> 00:19:47.760
+just a technical decision it has with
+
+00:19:47.760 --> 00:19:51.360
+only technical consequences
+
+00:19:51.360 --> 00:19:54.960
+but in general unless there's some
+
+00:19:54.960 --> 00:19:57.760
+severe problem with the package we will
+
+00:19:57.760 --> 00:20:03.600
+want to put it in,
+
+00:20:03.600 --> 00:20:05.757
+and I expect most packages
+
+00:20:05.757 --> 00:20:07.440
+won't have a problem,
+
+00:20:07.440 --> 00:20:09.357
+and we can just put them in
+
+00:20:09.357 --> 00:20:11.679
+when we get to them.
+
+00:20:11.679 --> 00:20:15.919
+"Won't the ELPA link to non-free sites
+
+00:20:15.919 --> 00:20:17.600
+like GitHub?"
+
+00:20:17.600 --> 00:20:20.799
+It's a mistake to talk about a
+
+00:20:20.799 --> 00:20:25.760
+non-free site,
+
+00:20:25.760 --> 00:20:29.120
+because a site is not a program.
+
+00:20:29.120 --> 00:20:32.123
+A program is either free or non-free,
+
+00:20:32.123 --> 00:20:32.960
+and we have
+
+00:20:32.960 --> 00:20:36.480
+clearly stated criteria for that in
+
+00:20:36.480 --> 00:20:42.457
+gnu.org/philosophy/free-sw.html
+
+00:20:42.457 --> 00:20:45.360
+we have the free software definition,
+
+00:20:45.360 --> 00:20:51.919
+but a site, well, there're programs on it,
+
+00:20:51.919 --> 00:20:54.000
+but it doesn't make sense to ask whether
+
+00:20:54.000 --> 00:20:55.120
+the site is
+
+00:20:55.120 --> 00:20:58.000
+free or not, it's too simplistic a
+
+00:20:58.000 --> 00:20:58.880
+question
+
+00:20:58.880 --> 00:21:02.000
+to have a meaningful answer. Now, one
+
+00:21:02.000 --> 00:21:05.679
+thing you can ask about is, does the site
+
+00:21:05.679 --> 00:21:08.799
+send JavaScript to the user's machine,
+
+00:21:08.799 --> 00:21:11.760
+to the user's browser and if so, is that
+
+00:21:11.760 --> 00:21:12.960
+JavaScript
+
+00:21:12.960 --> 00:21:17.120
+non-free. Well, GitHub
+
+00:21:17.120 --> 00:21:19.919
+does send non-free JavaScript for some
+
+00:21:19.919 --> 00:21:21.200
+operations,
+
+00:21:21.200 --> 00:21:24.240
+so we consider it unsatisfactory as a
+
+00:21:24.240 --> 00:21:26.159
+repository,
+
+00:21:26.159 --> 00:21:29.600
+but that doesn't mean linking to it
+
+00:21:29.600 --> 00:21:33.360
+is a bad thing to do regardless of
+
+00:21:33.360 --> 00:21:34.720
+what the purpose is.
+
+00:21:34.720 --> 00:21:36.640
+For instance, if the purpose is to refer
+
+00:21:36.640 --> 00:21:38.240
+to some things
+
+00:21:38.240 --> 00:21:40.799
+that you can access without running the
+
+00:21:40.799 --> 00:21:42.880
+non-free JavaScript,
+
+00:21:42.880 --> 00:21:47.200
+then it's okay for that purpose.
+
+00:21:47.200 --> 00:21:50.480
+So, if now that you understand the
+
+00:21:50.480 --> 00:21:52.559
+details of this issue,
+
+00:21:52.559 --> 00:21:54.880
+you think that there is a problem with
+
+00:21:54.880 --> 00:22:00.080
+the link to caml…, there's,
+
+00:22:00.080 --> 00:22:03.679
+sorry, a link in caml.html,
+
+00:22:03.679 --> 00:22:08.823
+well, report it to bug-gnu-emacs,
+
+00:22:08.823 --> 00:22:10.880
+report it as an Emacs bug,
+
+00:22:10.880 --> 00:22:14.159
+but do think about the criteria I've
+
+00:22:14.159 --> 00:22:15.840
+just said because maybe it's not a
+
+00:22:15.840 --> 00:22:18.000
+problem.
+
+00:22:18.000 --> 00:22:21.840
+"Is it okay to use the GNU Affero GPL
+
+00:22:21.840 --> 00:22:24.559
+for Emacs packages?"
+
+00:22:24.559 --> 00:22:28.880
+Yes it is.
+
+00:22:28.880 --> 00:22:31.120
+"Which is your favorite programming
+
+00:22:31.120 --> 00:22:32.080
+language?
+
+00:22:32.080 --> 00:22:35.200
+If Lisp, which variant?"
+
+00:22:35.200 --> 00:22:38.400
+Well, I don't exactly have a
+
+00:22:38.400 --> 00:22:41.760
+favorite variant, but
+
+00:22:41.760 --> 00:22:45.120
+when I designed Emacs Lisp, I
+
+00:22:45.120 --> 00:22:47.520
+did the best thing I could think of at
+
+00:22:47.520 --> 00:22:48.799
+the time,
+
+00:22:48.799 --> 00:22:52.559
+subject to the need to keep it small.
+
+00:22:52.559 --> 00:22:55.520
+For the first few years it was important
+
+00:22:55.520 --> 00:22:56.960
+for GNU Emacs
+
+00:22:56.960 --> 00:22:59.840
+to run in a machine which could only
+
+00:22:59.840 --> 00:23:00.799
+give it half
+
+00:23:00.799 --> 00:23:04.480
+a meg of user space.
+
+00:23:04.480 --> 00:23:06.559
+So, there are a lot of constructs that
+
+00:23:06.559 --> 00:23:09.200
+clearly were desirable to include
+
+00:23:09.200 --> 00:23:12.320
+that I left out because we could
+
+00:23:12.320 --> 00:23:16.880
+make it work without them
+
+00:23:16.880 --> 00:23:18.960
+and then a lot of those have been added
+
+00:23:18.960 --> 00:23:20.640
+since because
+
+00:23:20.640 --> 00:23:23.200
+it's been a long time since we needed to
+
+00:23:23.200 --> 00:23:40.960
+keep Emacs so rigorously small.
+
+00:23:40.960 --> 00:23:44.240
+Someone is
+
+00:23:44.240 --> 00:23:47.679
+asking about the
+
+00:23:47.679 --> 00:23:51.360
+FSF's repository project. Well,
+
+00:23:51.360 --> 00:23:54.400
+we agreed that there would be another
+
+00:23:54.400 --> 00:23:55.440
+virtual machine
+
+00:23:55.440 --> 00:23:59.919
+running one of those for the GNU project,
+
+00:23:59.919 --> 00:24:15.840
+but that's as far as the discussion went.
+
+00:24:15.840 --> 00:24:20.480
+Question 17 is extremely insulting!
+
+00:24:20.480 --> 00:24:25.600
+I have not engaged in sexual harassment,
+
+00:24:25.600 --> 00:24:28.720
+don't expect me to plead guilty to such
+
+00:24:28.720 --> 00:24:32.640
+a nasty claim.
+
+00:24:32.640 --> 00:24:35.600
+People have been accusing me of many
+
+00:24:35.600 --> 00:24:36.799
+things,
+
+00:24:36.799 --> 00:24:39.919
+some of which are
+
+00:24:39.919 --> 00:24:43.120
+basically mole hills and some of which
+
+00:24:43.120 --> 00:24:44.423
+are false.
+
+00:24:44.423 --> 00:24:50.640
+So, I'm not going to give them
+
+00:24:50.640 --> 00:24:53.840
+anything, I have been bullied in a
+
+00:24:53.840 --> 00:24:59.679
+horrible way, that was wrong.
+
+00:24:59.679 --> 00:25:02.720
+I would like the bullies to apologize to
+
+00:25:02.720 --> 00:25:03.520
+me,
+
+00:25:03.520 --> 00:25:06.320
+and when I see that they're not bullying,
+
+00:25:06.320 --> 00:25:08.960
+I will forgive them.
+
+00:25:08.960 --> 00:25:11.279
+I would like to have conversations with
+
+00:25:11.279 --> 00:25:14.799
+them if any of the mole hills
+
+00:25:14.799 --> 00:25:17.840
+annoyed someone, I'm happy to talk
+
+00:25:17.840 --> 00:25:20.880
+with per and thus
+
+00:25:20.880 --> 00:25:31.120
+help resolve things with peace.
+
+00:25:31.120 --> 00:25:39.200
+And my opinion on "diversity" within
+
+00:25:39.200 --> 00:25:42.720
+Emacs. Well, Emacs is
+
+00:25:42.720 --> 00:25:45.679
+never going to be diverse, it is extended
+
+00:25:45.679 --> 00:25:49.760
+in one language, Emacs Lisp. ;-}
+
+00:25:49.760 --> 00:25:53.279
+Well, I don't know, we did have an idea
+
+00:25:53.279 --> 00:25:55.840
+of implementing extensibility using
+
+00:25:55.840 --> 00:25:58.400
+Scheme and the hope was that Guile
+
+00:25:58.400 --> 00:26:01.120
+could be integrated with Emacs, that
+
+00:26:01.120 --> 00:26:02.960
+turned out to be difficult, it may be
+
+00:26:02.960 --> 00:26:05.279
+impossible but in principle
+
+00:26:05.279 --> 00:26:07.520
+it might be a good thing, that would be a
+
+00:26:07.520 --> 00:26:11.039
+small amount of diversity,
+
+00:26:11.039 --> 00:26:14.960
+but it's not that important.
+
+00:26:14.960 --> 00:26:16.960
+What I think is really important for
+
+00:26:16.960 --> 00:26:18.880
+developing Emacs
+
+00:26:18.880 --> 00:26:22.799
+is to make it do word processing.
+
+00:26:22.799 --> 00:26:27.039
+I sometimes use LibreOffice,
+
+00:26:27.039 --> 00:26:30.080
+and yeah I can make it do things.
+
+00:26:30.080 --> 00:26:32.799
+It has features for WYSIWYG which are
+
+00:26:32.799 --> 00:26:34.880
+very nice,
+
+00:26:34.880 --> 00:26:38.000
+but it's in other regards,
+
+00:26:38.000 --> 00:26:40.400
+it's not Emacs, and it doesn't have the
+
+00:26:40.400 --> 00:26:42.400
+abilities of Emacs,
+
+00:26:42.400 --> 00:26:45.600
+and it should.
+
+00:26:45.600 --> 00:26:48.400
+So, I urge people to work on extending
+
+00:26:48.400 --> 00:26:49.039
+Emacs
+
+00:26:49.039 --> 00:26:51.600
+in that direction adding the features
+
+00:26:51.600 --> 00:27:13.600
+that a word processor has to have.
+
+00:27:13.600 --> 00:27:17.957
+The last question I can answer is 18.
+
+00:27:17.957 --> 00:27:21.679
+Yes, it's a very sad thing
+
+00:27:21.679 --> 00:27:24.960
+how many companies
+
+00:27:24.960 --> 00:27:28.399
+insist on using non-free software.
+
+00:27:28.399 --> 00:27:33.200
+Well, I would get a different kind of job,
+
+00:27:33.200 --> 00:27:36.799
+that's a decision I made many years ago
+
+00:27:36.799 --> 00:27:40.320
+early in the GNU project,
+
+00:27:40.320 --> 00:27:42.799
+I decided, I would not… first I would not
+
+00:27:42.799 --> 00:27:47.679
+get a job developing non-free software.
+
+00:27:47.679 --> 00:27:50.960
+And later on I decided,
+
+00:27:50.960 --> 00:27:54.880
+once I could stop using non-free
+
+00:27:54.880 --> 00:27:57.120
+software, that is once we had
+
+00:27:57.120 --> 00:28:00.799
+a GNU/Linux system that we could
+
+00:28:00.799 --> 00:28:08.320
+switch over to and…
+
+00:28:08.320 --> 00:28:11.679
+Oh, wait. I thought magic wand
+
+00:28:11.679 --> 00:28:16.240
+time meant it was time to stop,
+
+00:28:16.240 --> 00:28:21.039
+but now I rather ask the question.
+
+00:28:27.760 --> 00:28:32.480
+So, what do you do, well, if I were you,
+
+00:28:32.480 --> 00:28:35.679
+I'd probably not work for any of those
+
+00:28:35.679 --> 00:28:37.440
+companies.
+
+00:28:37.440 --> 00:28:39.679
+If I needed to make money, I'd get a job,
+
+00:28:39.679 --> 00:28:40.799
+but I get some
+
+00:28:40.799 --> 00:28:43.840
+other kind of job
+
+00:28:43.840 --> 00:28:48.080
+that didn't involve using software
+
+00:28:48.080 --> 00:28:51.039
+or that let me choose the
+
+00:28:51.039 --> 00:28:53.600
+software I would use.
+
+00:28:53.600 --> 00:28:56.880
+But I would live cheaply, you know, the
+
+00:28:56.880 --> 00:28:58.000
+less you spend,
+
+00:28:58.000 --> 00:29:00.640
+the less you need to make and the more
+
+00:29:00.640 --> 00:29:01.120
+time
+
+00:29:01.120 --> 00:29:04.720
+you can take away from your paid work
+
+00:29:04.720 --> 00:29:07.200
+and the more flexibility you have in
+
+00:29:07.200 --> 00:29:08.640
+which paid work
+
+00:29:08.640 --> 00:29:13.039
+you can do. Being in a position
+
+00:29:13.039 --> 00:29:16.399
+to say no to avoid being
+
+00:29:16.399 --> 00:29:23.679
+desperate to say yes
+
+00:29:23.679 --> 00:29:27.440
+strengthens your position,
+
+00:29:27.440 --> 00:29:31.200
+and you need that. One way you can help
+
+00:29:31.200 --> 00:29:33.279
+do that is by
+
+00:29:33.279 --> 00:29:36.559
+not having children. Now, that is a
+
+00:29:36.559 --> 00:29:38.960
+tangent, but it can't be denied that
+
+00:29:38.960 --> 00:29:41.760
+raising children is very expensive, I
+
+00:29:41.760 --> 00:29:42.399
+have heard
+
+00:29:42.399 --> 00:29:45.559
+many people say that they are
+
+00:29:45.559 --> 00:29:48.080
+uncomfortable with their jobs,
+
+00:29:48.080 --> 00:29:50.880
+but they have to do those jobs to make
+
+00:29:50.880 --> 00:29:52.240
+enough money
+
+00:29:52.240 --> 00:29:55.440
+to support their children.
+
+00:29:55.440 --> 00:29:59.120
+Well, think about that, be aware
+
+00:29:59.120 --> 00:30:01.520
+that's likely to happen to you, before
+
+00:30:01.520 --> 00:30:06.159
+you make that decision.
+
+00:30:06.159 --> 00:30:13.279
+"What would I change about free software?"
+
+00:30:13.279 --> 00:30:16.960
+Well, since this is
+
+00:30:16.960 --> 00:30:20.880
+magic, I would magically find
+
+00:30:20.880 --> 00:30:25.600
+a way of showing everyone why
+
+00:30:25.600 --> 00:30:28.000
+most free software needs to be copy
+
+00:30:28.000 --> 00:30:29.679
+lefted,
+
+00:30:29.679 --> 00:30:32.480
+so that our community would not
+
+00:30:32.480 --> 00:30:34.880
+basically
+
+00:30:34.880 --> 00:30:38.640
+submit to abuse by proprietary software
+
+00:30:38.640 --> 00:30:45.919
+developers.
+
+00:30:45.919 --> 00:30:49.760
+Of course, I could go further if I could
+
+00:30:49.760 --> 00:30:53.279
+magically recruit a hundred thousand
+
+00:30:53.279 --> 00:30:55.760
+good programmers to do lots of work
+
+00:30:55.760 --> 00:30:57.919
+improving free software.
+
+00:30:57.919 --> 00:31:01.039
+We might… Well, if we could do this 20
+
+00:31:01.039 --> 00:31:03.279
+years ago, we might have wiped out
+
+00:31:03.279 --> 00:31:06.559
+non-free systems, and then we wouldn't
+
+00:31:06.559 --> 00:31:07.200
+have had
+
+00:31:07.200 --> 00:31:10.320
+horrible things like
+
+00:31:10.320 --> 00:31:14.480
+World Wide Web DRM, that
+
+00:31:14.480 --> 00:31:18.000
+no one has the courage to resist
+
+00:31:18.000 --> 00:31:20.480
+if they're desperately trying to get
+
+00:31:20.480 --> 00:31:22.640
+money for anything,
+
+00:31:22.640 --> 00:31:26.240
+and if they need approval of companies,
+
+00:31:26.240 --> 00:31:29.519
+of the big companies that push for DRM,
+
+00:31:29.519 --> 00:31:32.960
+then they don't dare even resist as
+
+00:31:32.960 --> 00:31:38.240
+much as they can resist.
+
+00:31:38.240 --> 00:31:40.880
+And look what happened to the World Wide
+
+00:31:40.880 --> 00:31:43.200
+Web consortium,
+
+00:31:43.200 --> 00:31:47.279
+they surrendered blatantly
+
+00:31:47.279 --> 00:31:50.399
+and ignominiously by
+
+00:31:50.399 --> 00:31:55.760
+endorsing the DRM system.
+
+00:31:55.760 --> 00:31:59.600
+So what can you do? I don't have a magic
+
+00:31:59.600 --> 00:32:00.880
+wand,
+
+00:32:00.880 --> 00:32:04.720
+I'm a human being with the capabilities
+
+00:32:04.720 --> 00:32:09.919
+I have, but the advantage of
+
+00:32:09.919 --> 00:32:12.840
+great firmness in campaigning for free
+
+00:32:12.840 --> 00:32:14.000
+software,
+
+00:32:14.000 --> 00:32:18.240
+and this enables me to do things
+
+00:32:18.240 --> 00:32:27.679
+that no one else will do.
+
+00:32:27.679 --> 00:32:30.480
+"What tools from pre-UNIX days do you
+
+00:32:30.480 --> 00:32:31.519
+miss?"
+
+00:32:31.519 --> 00:32:34.240
+Well, I don't. I don't think about them
+
+00:32:34.240 --> 00:32:38.640
+with missing them actually.
+
+00:32:38.640 --> 00:32:42.080
+It was sort of nice to have
+
+00:32:42.080 --> 00:32:46.240
+ddt as your login shell.
+
+00:32:46.240 --> 00:32:49.600
+So, in using modern terminology,
+
+00:32:49.600 --> 00:32:52.640
+because that meant at any time you could
+
+00:32:52.640 --> 00:32:55.519
+stop a program, load its debugging symbols,
+
+00:32:55.519 --> 00:32:57.519
+and start examining the data in the
+
+00:32:57.519 --> 00:32:58.799
+instructions.
+
+00:32:58.799 --> 00:33:01.519
+You could debug it that way, and then you
+
+00:33:01.519 --> 00:33:03.039
+could even
+
+00:33:03.039 --> 00:33:06.720
+patch in instructions to continue
+
+00:33:06.720 --> 00:33:09.760
+running that job with the bug fixed,
+
+00:33:09.760 --> 00:33:11.600
+in fact, you could even do this with the
+
+00:33:11.600 --> 00:33:13.919
+system kernel,
+
+00:33:13.919 --> 00:33:16.423
+so that your jobs wouldn't get lost.
+
+00:33:16.423 --> 00:33:17.840
+I did that
+
+00:33:17.840 --> 00:33:20.559
+quite a few times, of course, sometimes I
+
+00:33:20.559 --> 00:33:22.720
+saw what was wrong, and I just had to
+
+00:33:22.720 --> 00:33:25.919
+fix a piece of data, but sometimes
+
+00:33:25.919 --> 00:33:28.240
+it took me a long time to figure out how
+
+00:33:28.240 --> 00:33:29.679
+to get the system to
+
+00:33:29.679 --> 00:33:32.480
+keep on going. But with the work I had
+
+00:33:32.480 --> 00:33:34.240
+done,
+
+00:33:34.240 --> 00:33:39.279
+I didn't want to lose that work,
+
+00:33:39.279 --> 00:33:41.600
+and, so one of the first features I put
+
+00:33:41.600 --> 00:33:43.039
+into GNU Emacs was
+
+00:33:43.039 --> 00:33:47.760
+auto save.
+
+00:33:47.760 --> 00:33:50.640
+I'm not going to try to figure out
+
+00:33:50.640 --> 00:33:54.320
+which packages I actually used.
+
+00:33:54.320 --> 00:33:56.480
+"If I knew, I would get hit by a bus
+
+00:33:56.480 --> 00:33:59.039
+tomorrow,
+
+00:33:59.039 --> 00:34:02.320
+say because of a fortune-teller."
+
+00:34:02.320 --> 00:34:05.039
+No, a fortune-teller doesn't give you any
+
+00:34:05.039 --> 00:34:06.240
+knowledge, it's just
+
+00:34:06.240 --> 00:34:10.159
+superstitious hand waving.
+
+00:34:10.159 --> 00:34:13.760
+So, assuming that I
+
+00:34:13.760 --> 00:34:16.480
+talked… that I got a reading from a
+
+00:34:16.480 --> 00:34:18.879
+fortune-teller, which is
+
+00:34:18.879 --> 00:34:23.119
+implausible enough to begin with,
+
+00:34:23.119 --> 00:34:25.040
+that wouldn't give me any knowledge
+
+00:34:25.040 --> 00:34:28.320
+about what was going to happen to me.
+
+00:34:28.320 --> 00:34:32.879
+Oh, by the way fortune-tellers generally
+
+00:34:32.879 --> 00:34:34.960
+play back to you facts that they've
+
+00:34:34.960 --> 00:34:36.879
+discovered about you
+
+00:34:36.879 --> 00:34:40.480
+together with cold reading, which means,
+
+00:34:40.480 --> 00:34:43.440
+they say things calculated to make it
+
+00:34:43.440 --> 00:34:44.639
+appear that they know
+
+00:34:44.639 --> 00:34:49.119
+more than they do or things that
+
+00:34:49.119 --> 00:34:52.399
+sound wise to anyone,
+
+00:34:52.399 --> 00:34:55.679
+so you can say the same thing to,
+
+00:34:55.679 --> 00:34:58.800
+say, 100 people
+
+00:34:58.800 --> 00:35:02.000
+and 80 or 90 of them will say, "boy that
+
+00:35:02.000 --> 00:35:06.480
+was really accurate".
+
+00:35:06.480 --> 00:35:15.119
+But what if for some reason…
+
+00:35:15.119 --> 00:35:17.440
+"What advice would I give for
+
+00:35:17.440 --> 00:35:18.560
+stewardship of
+
+00:35:18.560 --> 00:35:25.359
+Emacs?" Well, basically focus on
+
+00:35:25.359 --> 00:35:28.480
+keeping the community strong in
+
+00:35:28.480 --> 00:35:29.280
+defending
+
+00:35:29.280 --> 00:35:32.640
+freedom, if you have a choice between
+
+00:35:32.640 --> 00:35:34.400
+keeping the community strong in
+
+00:35:34.400 --> 00:35:36.079
+defending freedom
+
+00:35:36.079 --> 00:35:38.800
+and getting more people to participate
+
+00:35:38.800 --> 00:35:40.720
+in the development,
+
+00:35:40.720 --> 00:35:42.890
+you've got to choose the freedom.
+
+00:35:42.890 --> 00:35:44.400
+It is very
+
+00:35:44.400 --> 00:35:48.400
+easy for free software projects to
+
+00:35:48.400 --> 00:35:52.320
+subordinate freedom to other criteria,
+
+00:35:52.320 --> 00:35:55.359
+and once that happens, it's
+
+00:35:55.359 --> 00:35:58.079
+easy for those who don't care much about
+
+00:35:58.079 --> 00:35:58.720
+freedom,
+
+00:35:58.720 --> 00:36:00.800
+such as, sometimes companies that might
+
+00:36:00.800 --> 00:36:02.640
+offer you some money
+
+00:36:02.640 --> 00:36:08.160
+to purchase your soul,
+
+00:36:08.160 --> 00:36:10.560
+not that there are really things that
+
+00:36:10.560 --> 00:36:14.240
+exist called souls, it's a metaphor, but
+
+00:36:14.240 --> 00:36:16.560
+it's an important metaphor for something
+
+00:36:16.560 --> 00:36:18.800
+important.
+
+00:36:18.800 --> 00:36:20.880
+People in the community have to be
+
+00:36:20.880 --> 00:36:24.320
+thinking about freedom
+
+00:36:24.320 --> 00:36:27.280
+when they make decisions about what is
+
+00:36:27.280 --> 00:36:31.839
+wise to do.
+
+00:36:31.839 --> 00:36:36.480
+The decision to set up NonGNU ELPA
+
+00:36:36.480 --> 00:36:39.357
+has a drawback, it was a compromise.
+
+00:36:39.357 --> 00:36:41.520
+Now, a lot of people will
+
+00:36:41.520 --> 00:36:44.560
+tell you that I am uncompromising and
+
+00:36:44.560 --> 00:36:46.240
+say that, that's a flaw.
+
+00:36:46.240 --> 00:36:48.720
+Well, they're wrong. I make little
+
+00:36:48.720 --> 00:36:50.320
+compromises
+
+00:36:50.320 --> 00:36:53.040
+very often, and occasionally I make a
+
+00:36:53.040 --> 00:36:55.359
+medium-sized compromise.
+
+00:36:55.359 --> 00:36:58.880
+The compromise is, in the past we wanted
+
+00:36:58.880 --> 00:36:59.359
+to get
+
+00:36:59.359 --> 00:37:01.599
+copyright assignments for the packages
+
+00:37:01.599 --> 00:37:03.823
+in GNU ELPA,
+
+00:37:03.823 --> 00:37:06.240
+so that we could move them into
+
+00:37:06.240 --> 00:37:09.119
+core Emacs, and of course, sometimes we
+
+00:37:09.119 --> 00:37:11.200
+move packages in the other direction,
+
+00:37:11.200 --> 00:37:14.480
+that way where we distribute a
+
+00:37:14.480 --> 00:37:16.160
+given package,
+
+00:37:16.160 --> 00:37:18.160
+is something we can decide purely
+
+00:37:18.160 --> 00:37:20.880
+technically.
+
+00:37:20.880 --> 00:37:25.200
+And however make insisting on getting
+
+00:37:25.200 --> 00:37:26.800
+copyright assignments for all the
+
+00:37:26.800 --> 00:37:28.640
+packages in GNU ELPA
+
+00:37:28.640 --> 00:37:32.079
+meant that we had to say "sorry, no,
+
+00:37:32.079 --> 00:37:35.119
+we will not install that
+
+00:37:35.119 --> 00:37:38.560
+package in GNU ELPA, unless the
+
+00:37:38.560 --> 00:37:40.957
+authors sign copyright assignments".
+
+00:37:40.957 --> 00:37:44.079
+And sometimes that's a lot of trouble.
+
+00:37:44.079 --> 00:37:47.520
+Well, NonGNU ELPA
+
+00:37:47.520 --> 00:37:50.123
+won't require copyright assignments.
+
+00:37:50.123 --> 00:37:51.520
+If there's a free package,
+
+00:37:51.520 --> 00:37:54.560
+we can make whatever changes, presumably
+
+00:37:54.560 --> 00:37:57.200
+small, otherwise, we would probably say
+
+00:37:57.200 --> 00:38:00.560
+we don't have time, and then
+
+00:38:00.560 --> 00:38:04.560
+put it in. But it does have the drawback
+
+00:38:04.560 --> 00:38:05.599
+that,
+
+00:38:05.599 --> 00:38:07.680
+in general we won't be able to move
+
+00:38:07.680 --> 00:38:09.119
+those packages
+
+00:38:09.119 --> 00:38:12.960
+into core Emacs without
+
+00:38:12.960 --> 00:38:14.960
+getting the legal papers then that we
+
+00:38:14.960 --> 00:38:20.160
+didn't get before.
+
+00:38:20.160 --> 00:38:24.320
+"How do you see the future of GNU Emacs?"
+
+00:38:24.320 --> 00:38:27.599
+I don't see the future.
+
+00:38:27.599 --> 00:38:29.839
+I used to say that my crystal ball is
+
+00:38:29.839 --> 00:38:31.680
+cloudy today,
+
+00:38:31.680 --> 00:38:35.680
+unfortunately, that has another
+
+00:38:35.680 --> 00:38:38.423
+meaning which is quite ironic.
+
+00:38:38.423 --> 00:38:41.200
+We certainly don't want
+
+00:38:41.200 --> 00:38:44.800
+our lives to be
+
+00:38:44.800 --> 00:38:48.480
+somewhere in a cloud, because
+
+00:38:48.480 --> 00:38:51.119
+that clouds remind, and then people
+
+00:38:51.119 --> 00:38:51.599
+start
+
+00:38:51.599 --> 00:38:54.240
+cheating you and taking advantage of you,
+
+00:38:54.240 --> 00:38:56.880
+and it's horrible.
+
+00:38:56.880 --> 00:39:00.160
+But I don't see the future, I just
+
+00:39:00.160 --> 00:39:02.720
+can be sure from the past that there
+
+00:39:02.720 --> 00:39:03.839
+will be
+
+00:39:03.839 --> 00:39:07.599
+challenges where some of the people
+
+00:39:07.599 --> 00:39:10.720
+involved want to make a big compromise
+
+00:39:10.720 --> 00:39:12.960
+that isn't worth it,
+
+00:39:12.960 --> 00:39:16.880
+and they may even get the
+
+00:39:16.880 --> 00:39:18.079
+impression that it's
+
+00:39:18.079 --> 00:39:21.200
+up to them. Well, actually
+
+00:39:21.200 --> 00:39:24.480
+Emacs has appointed maintainers just as
+
+00:39:24.480 --> 00:39:27.440
+every GNU package does, and they are the
+
+00:39:27.440 --> 00:39:29.280
+ones in charge of developing that
+
+00:39:29.280 --> 00:39:30.480
+package,
+
+00:39:30.480 --> 00:39:34.400
+and this is for a good reason
+
+00:39:34.400 --> 00:39:38.200
+because the appointed maintainers take
+
+00:39:38.200 --> 00:39:39.760
+responsibility
+
+00:39:39.760 --> 00:39:42.240
+to carry out the GNU project policies,
+
+00:39:42.240 --> 00:39:44.079
+and most important of all
+
+00:39:44.079 --> 00:39:46.160
+are the ones that make the whole system
+
+00:39:46.160 --> 00:39:47.520
+work together,
+
+00:39:47.520 --> 00:39:52.640
+and the ethical standards
+
+00:39:52.640 --> 00:39:59.920
+to respect freedom and defend freedom.
+
+00:39:59.920 --> 00:40:02.240
+"Is there any plan to move more packages
+
+00:40:02.240 --> 00:40:04.960
+from core Emacs into ELPA?"
+
+00:40:04.960 --> 00:40:08.480
+I don't know
+
+00:40:08.480 --> 00:40:11.440
+whether there is a plan, I suppose if
+
+00:40:11.440 --> 00:40:12.720
+there's a plan,
+
+00:40:12.720 --> 00:40:15.680
+we probably would have done it. If there
+
+00:40:15.680 --> 00:40:16.960
+had been a plan,
+
+00:40:16.960 --> 00:40:18.657
+some have been moved.
+
+00:40:18.657 --> 00:40:20.319
+I don't see this as a
+
+00:40:20.319 --> 00:40:22.400
+fundamentally important issue, it's a
+
+00:40:22.400 --> 00:40:24.160
+matter of what's convenient for
+
+00:40:24.160 --> 00:40:26.640
+the users, and their advantages and
+
+00:40:26.640 --> 00:40:29.599
+disadvantages to each choice.
+
+00:40:29.599 --> 00:40:32.800
+"What is your opinion on higher education
+
+00:40:32.800 --> 00:40:35.760
+requiring non-free software, for
+
+00:40:35.760 --> 00:40:36.720
+instance…"
+
+00:40:36.720 --> 00:40:40.400
+Well, I wouldn't
+
+00:40:40.400 --> 00:40:43.440
+matriculate in a school which did that,
+
+00:40:43.440 --> 00:40:50.960
+unless I saw a way I could refuse.
+
+00:40:50.960 --> 00:40:54.960
+Now, of course, I do this
+
+00:40:54.960 --> 00:40:57.760
+because I can get away with it, and
+
+00:40:57.760 --> 00:41:00.240
+therefore my doing it is extremely
+
+00:41:00.240 --> 00:41:04.960
+important to show somebody does resist.
+
+00:41:04.960 --> 00:41:08.400
+I don't expect most people who support
+
+00:41:08.400 --> 00:41:09.359
+free school,
+
+00:41:09.359 --> 00:41:12.319
+who advocate free software to go that
+
+00:41:12.319 --> 00:41:13.599
+far.
+
+00:41:13.599 --> 00:41:17.760
+I published an article in the spring
+
+00:41:17.760 --> 00:41:21.040
+entitled saying no even once
+
+00:41:21.040 --> 00:41:24.640
+is helping, saying no to non-free
+
+00:41:24.640 --> 00:41:25.359
+software
+
+00:41:25.359 --> 00:41:29.040
+even once, because
+
+00:41:29.040 --> 00:41:32.240
+the more you do it, the more you help, but
+
+00:41:32.240 --> 00:41:34.640
+even doing it a little in a way that
+
+00:41:34.640 --> 00:41:36.640
+other people notice,
+
+00:41:36.640 --> 00:41:39.920
+is starting to help. So,
+
+00:41:39.920 --> 00:41:43.440
+please don't think that your choices
+
+00:41:43.440 --> 00:41:45.119
+are either
+
+00:41:45.119 --> 00:41:48.480
+be as firm and stubborn as I am
+
+00:41:48.480 --> 00:41:52.240
+or just give up and let yourself drift
+
+00:41:52.240 --> 00:41:56.240
+helplessly as if you had no volition.
+
+00:41:56.240 --> 00:41:58.079
+There are a lot of points in between
+
+00:41:58.079 --> 00:42:00.720
+there, and you can surely
+
+00:42:00.720 --> 00:42:04.079
+manage to say no some of the time
+
+00:42:04.079 --> 00:42:07.839
+and show people an example of saying no
+
+00:42:07.839 --> 00:42:11.040
+some of the time, for instance, you could
+
+00:42:11.040 --> 00:42:12.720
+say to people,
+
+00:42:12.720 --> 00:42:15.520
+"You know I hate the fact that my school
+
+00:42:15.520 --> 00:42:16.000
+makes me
+
+00:42:16.000 --> 00:42:20.400
+use Zoom, so whenever
+
+00:42:20.400 --> 00:42:22.240
+I'm not being forced, I'm not going to
+
+00:42:22.240 --> 00:42:25.760
+use it".
+
+00:42:25.760 --> 00:42:29.200
+Or "I hate the fact that the only way I
+
+00:42:29.200 --> 00:42:31.200
+can talk to that group of people
+
+00:42:31.200 --> 00:42:35.200
+is with Zoom,
+
+00:42:35.200 --> 00:42:38.400
+but for anything else I will feel better
+
+00:42:38.400 --> 00:42:40.079
+about myself if I don't".
+
+00:42:40.079 --> 00:42:42.880
+See, lots of ways to say no some of the
+
+00:42:42.880 --> 00:42:44.000
+time,
+
+00:42:44.000 --> 00:42:47.040
+and yield some of the time,
+
+00:42:47.040 --> 00:42:50.960
+and when you try saying no occasionally,
+
+00:42:50.960 --> 00:42:53.920
+you may just develop the ability to say
+
+00:42:53.920 --> 00:42:56.400
+no more often.
+
+00:42:56.400 --> 00:42:58.800
+Now, whether you would ever get to be as
+
+00:42:58.800 --> 00:43:00.640
+stubborn as I am?
+
+00:43:00.640 --> 00:43:04.480
+I don't know, but what I find is that
+
+00:43:04.480 --> 00:43:08.480
+I like the fact that I've never made
+
+00:43:08.480 --> 00:43:12.480
+this kind of compromise.
+
+00:43:12.480 --> 00:43:15.839
+I feel I have a reputation to maintain,
+
+00:43:15.839 --> 00:43:19.319
+nobody's forcing me, but I get
+
+00:43:19.319 --> 00:43:21.119
+satisfaction
+
+00:43:21.119 --> 00:43:24.319
+out of maintaining…, out of being able to
+
+00:43:24.319 --> 00:43:26.400
+continue to say
+
+00:43:26.400 --> 00:43:30.880
+I will not.
+
+00:43:30.880 --> 00:43:34.480
+And that also
+
+00:43:34.480 --> 00:43:40.480
+can happen at various different levels,
+
+00:43:40.480 --> 00:43:43.520
+so, you can get that satisfaction
+
+00:43:43.520 --> 00:43:46.640
+of fully maintaining a refusal
+
+00:43:46.640 --> 00:43:54.400
+that applies only to certain areas.
+
+00:43:54.400 --> 00:43:57.040
+(Amin: since it's noon already, let's maybe
+
+00:43:57.040 --> 00:43:58.880
+take one or two more questions and then
+
+00:43:58.880 --> 00:43:59.599
+break for
+
+00:43:59.599 --> 00:44:03.200
+the lunch break) Okay. (Amin: Thank you).
+
+00:44:03.200 --> 00:44:05.757
+"How often do you personally use Emacs?"
+
+00:44:05.757 --> 00:44:10.640
+is the lowest question now.
+
+00:44:10.640 --> 00:44:16.640
+Well, I use it most of the day.
+
+00:44:16.640 --> 00:44:18.880
+I occasionally do use other things, in
+
+00:44:18.880 --> 00:44:20.160
+fact, I occasionally edit with
+
+00:44:20.160 --> 00:44:21.599
+LibreOffice,
+
+00:44:21.599 --> 00:44:24.240
+I occasionally use media players,
+
+00:44:24.240 --> 00:44:32.480
+I occasionally ssh to a machine and type
+
+00:44:32.480 --> 00:44:34.000
+some commands on it,
+
+00:44:34.000 --> 00:44:35.440
+which occasionally includes running
+
+00:44:35.440 --> 00:44:42.319
+Emacs on it.
+
+00:44:42.319 --> 00:44:45.760
+I read PDF files a lot,
+
+00:44:45.760 --> 00:44:47.520
+would be nice if you could get those
+
+00:44:47.520 --> 00:44:49.599
+into Emacs, so that I could read them
+
+00:44:49.599 --> 00:44:52.240
+with Emacs commands,
+
+00:44:52.240 --> 00:44:55.040
+and I maybe even edit them with the Emacs
+
+00:44:55.040 --> 00:44:56.160
+commands
+
+00:44:56.160 --> 00:44:59.440
+when they can be edited. I use
+
+00:44:59.440 --> 00:45:02.960
+Xournal sometimes
+
+00:45:02.960 --> 00:45:10.079
+to write on a PDF file.
+
+00:45:10.079 --> 00:45:12.160
+"Are there any more interesting projects
+
+00:45:12.160 --> 00:45:13.760
+you have in mind over and above
+
+00:45:13.760 --> 00:45:18.400
+NonGNU ELPA?"
+
+00:45:18.400 --> 00:45:22.079
+I can't think of one right now, well,
+
+00:45:22.079 --> 00:45:25.520
+there are things that
+
+00:45:25.520 --> 00:45:27.119
+the GNU project needs
+
+00:45:27.119 --> 00:45:30.560
+doing, there are packages that don't have
+
+00:45:30.560 --> 00:45:32.319
+maintainers or could use
+
+00:45:32.319 --> 00:45:35.839
+more maintainers.
+
+00:45:35.839 --> 00:45:38.880
+Talk with maintainers@gnu.org,
+
+00:45:38.880 --> 00:45:42.000
+and the assistant GNUisances will
+
+00:45:42.000 --> 00:45:44.960
+help you find a package where you can do
+
+00:45:44.960 --> 00:45:48.400
+good.
+
+00:45:48.400 --> 00:45:50.560
+Not for beginners though,
+
+00:45:50.560 --> 00:45:52.079
+you got to learn
+
+00:45:52.079 --> 00:45:55.599
+a substantive substantial level of
+
+00:45:55.599 --> 00:45:58.160
+capacity to develop and debug programs
+
+00:45:58.160 --> 00:45:59.440
+before you can
+
+00:45:59.440 --> 00:46:00.823
+be a maintainer.
+
+00:46:00.823 --> 00:46:04.480
+"Have I ever looked at Magit?"
+
+00:46:04.480 --> 00:46:08.400
+No, I haven't,
+
+00:46:08.400 --> 00:46:11.920
+but I believe
+
+00:46:11.920 --> 00:46:14.880
+work is being done to get it put into
+
+00:46:14.880 --> 00:46:16.560
+Emacs,
+
+00:46:16.560 --> 00:46:22.240
+and at that point I'll give it a try.
+
+00:46:22.240 --> 00:46:25.200
+I do not want to share my configuration
+
+00:46:25.200 --> 00:46:29.520
+files they're personal.
+
+00:46:29.520 --> 00:46:33.599
+How about if we end this now?
+
+00:46:33.599 --> 00:46:36.880
+(Amin: sounds good to me,
+
+00:46:36.880 --> 00:46:38.880
+thank you very much Richard for joining
+
+00:46:38.880 --> 00:46:41.520
+in for live questions.)
+
+00:46:41.520 --> 00:46:43.839
+Okay.
diff --git a/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt
new file mode 100644
index 00000000..89dc142e
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--39-nongnu-elpa--richard-stallman.vtt
@@ -0,0 +1,400 @@
+WEBVTT
+
+00:00:00.320 --> 00:00:03.280
+Hello, I'm Richard Stallman,
+
+00:00:03.280 --> 00:00:07.816
+founder of the GNU project.
+
+00:00:07.816 --> 00:00:09.200
+In 1976, I developed the first
+
+00:00:09.200 --> 00:00:12.320
+Emacs editor with some help
+
+00:00:12.320 --> 00:00:13.440
+from Guy Steele.
+
+00:00:13.440 --> 00:00:15.839
+Then, shortly after starting to develop
+
+00:00:15.839 --> 00:00:19.119
+the GNU operating system in 1984,
+
+00:00:19.119 --> 00:00:22.240
+I wanted an Emacs editor for it.
+
+00:00:22.240 --> 00:00:29.519
+So I started writing GNU Emacs in
+September 1984.
+
+00:00:29.519 --> 00:00:32.640
+Several years ago we decided to move
+
+00:00:32.640 --> 00:00:35.920
+many of the Emacs Lisp packages outside
+
+00:00:35.920 --> 00:00:39.866
+the core Emacs distribution into
+
+00:00:39.866 --> 00:00:46.480
+a separate package archive that we call
+the Emacs Lisp package archive ELPA.
+
+00:00:46.480 --> 00:00:49.555
+There were two main reasons for this.
+
+00:00:49.555 --> 00:00:51.520
+One is to make the Emacs
+distribution smaller
+
+00:00:51.520 --> 00:00:54.870
+so every user wouldn't have to
+
+00:00:54.870 --> 00:00:55.680
+get all the packages
+
+00:00:55.680 --> 00:00:58.820
+and install all the packages.
+
+00:00:58.820 --> 00:01:00.480
+And the other reason was to make it
+possible to
+
+00:01:00.480 --> 00:01:03.485
+release individual packages
+
+00:01:03.485 --> 00:01:08.880
+separately from Emacs releases.
+
+00:01:08.880 --> 00:01:13.119
+Now, at that point somehow we decided to
+
+00:01:13.119 --> 00:01:17.040
+support loading packages from
+
+00:01:17.040 --> 00:01:21.119
+a variety of different Emacs Lisp
+package archives
+
+00:01:21.119 --> 00:01:25.520
+and ours would be called the GNU ELPA,
+
+00:01:25.520 --> 00:01:29.280
+but ELPA could be any other.
+
+00:01:29.280 --> 00:01:32.945
+Now, I think that naming was a mistake.
+
+00:01:32.945 --> 00:01:35.119
+We should have meant, we should have
+decided that ELPA
+
+00:01:35.119 --> 00:01:37.759
+referred to our package archive
+
+00:01:37.759 --> 00:01:39.297
+and any other package archive
+
+00:01:39.297 --> 00:01:42.479
+should be called some other name.
+
+00:01:42.479 --> 00:01:46.128
+Oh, well! Uh this is a mistake,
+
+00:01:46.128 --> 00:01:48.320
+I believe, because it leads
+
+00:01:48.320 --> 00:01:49.397
+to a lot of confusion.
+
+00:01:49.397 --> 00:01:51.119
+It would have been clearer
+
+00:01:51.119 --> 00:01:55.759
+if we had used the other naming.
+
+00:01:55.759 --> 00:01:59.812
+Because the difference between
+
+00:01:59.812 --> 00:02:04.159
+having a package in core Emacs and
+having it in GNU ELPA,
+
+00:02:04.159 --> 00:02:07.840
+is purely a practical convenience matter.
+
+00:02:07.840 --> 00:02:10.501
+Convenience of distribution
+
+00:02:10.501 --> 00:02:12.000
+and convenience of maintenance.
+
+00:02:12.000 --> 00:02:14.879
+We wanted to be able to move packages
+
+00:02:14.879 --> 00:02:16.800
+between the two
+
+00:02:16.800 --> 00:02:19.258
+whenever that was convenient.
+
+00:02:19.258 --> 00:02:21.200
+So, to make that possible
+
+00:02:21.200 --> 00:02:23.200
+we insisted on getting copyright
+
+00:02:23.200 --> 00:02:26.319
+assignments for packages in GNU ELPA
+
+00:02:26.319 --> 00:02:31.360
+just the same way we do for packages in
+core Emacs.
+
+00:02:31.360 --> 00:02:33.760
+Having the facility for installing
+
+00:02:33.760 --> 00:02:36.239
+packages from package archives,
+
+00:02:36.239 --> 00:02:39.440
+led to a tremendous boost in the
+
+00:02:39.440 --> 00:02:42.239
+development and release of Emacs packages.
+
+00:02:42.239 --> 00:02:44.879
+Unfortunately there was a problem with
+
+00:02:44.879 --> 00:02:46.560
+the way that was done.
+
+00:02:46.560 --> 00:02:50.000
+For the most part, the developers of
+these packages
+
+00:02:50.000 --> 00:02:52.218
+wouldn't even tell us about them.
+
+00:02:52.218 --> 00:02:56.027
+They posted them in another package
+archive
+
+00:02:56.027 --> 00:02:58.480
+where we didn't know about them
+
+00:02:58.480 --> 00:03:03.120
+and no attempt was made to
+try to fit them
+
+00:03:03.120 --> 00:03:06.560
+into Emacs so that they could make sense
+
+00:03:06.560 --> 00:03:10.879
+as parts of the Emacs distribution.
+
+00:03:10.879 --> 00:03:14.480
+This led to both moral problems,
+
+00:03:14.480 --> 00:03:16.375
+(packages that depended on
+
+00:03:16.375 --> 00:03:19.599
+non-free software in order to be usable)
+
+00:03:19.599 --> 00:03:21.354
+and technical problems,
+
+00:03:21.354 --> 00:03:24.877
+because the developers of those packages
+
+00:03:24.877 --> 00:03:26.159
+didn't coordinate with us
+
+00:03:26.159 --> 00:03:29.519
+about how to make it useful and
+
+00:03:29.519 --> 00:03:36.560
+convenient and clean to have them in
+Emacs.
+
+00:03:36.560 --> 00:03:41.120
+So, the idea of NonGNU ELPA
+
+00:03:41.120 --> 00:03:45.337
+is an effort to smooth these
+things out.
+
+00:03:45.337 --> 00:03:48.319
+The fundamental plan of
+
+00:03:48.319 --> 00:03:51.680
+NonGNU ELPA is that
+
+00:03:51.680 --> 00:03:54.480
+we won't ask for copyright assignments
+
+00:03:54.480 --> 00:03:56.159
+for those packages.
+
+00:03:56.159 --> 00:04:00.000
+So, we won't be able to put them into
+core Emacs;
+
+00:04:00.000 --> 00:04:03.550
+at least not easily,
+
+00:04:03.550 --> 00:04:09.519
+but we will have some control over how
+we distribute them.
+
+00:04:09.519 --> 00:04:14.691
+We can put any package into NonGNU ELPA
+
+00:04:14.691 --> 00:04:16.320
+as long as it's free software.
+
+00:04:16.320 --> 00:04:23.360
+If we like it, we can set up that way
+for users to get it.
+
+00:04:23.360 --> 00:04:26.720
+We could put the package in
+exactly as it is
+
+00:04:26.720 --> 00:04:29.919
+if there's no problem at all with it.
+
+00:04:29.919 --> 00:04:32.647
+We can make an arrangement
+
+00:04:32.647 --> 00:04:34.160
+with the package's developers
+
+00:04:34.160 --> 00:04:38.000
+to work on it with us and maintain it
+
+00:04:38.000 --> 00:04:42.560
+directly for distribution by NonGNU ELPA,
+
+00:04:42.560 --> 00:04:45.778
+but if they are not interested,
+
+00:04:45.778 --> 00:04:48.729
+we can put it in ourselves,
+
+00:04:48.729 --> 00:04:50.453
+and if we need to make any changes,
+
+00:04:50.453 --> 00:04:52.000
+we can do so.
+
+00:04:52.000 --> 00:04:58.688
+So, NonGNU ELPA is not meant to be
+
+00:04:58.688 --> 00:05:02.720
+just a way that others can distribute
+their packages.
+
+00:05:02.720 --> 00:05:04.336
+It's meant, at least in
+
+00:05:04.336 --> 00:05:07.574
+a minimal technical sense,
+
+00:05:07.574 --> 00:05:10.686
+to work with GNU Emacs,
+
+00:05:10.686 --> 00:05:12.305
+and we'll make changes if necessary,
+
+00:05:12.305 --> 00:05:17.928
+so that it works smoothly with Emacs.
+
+00:05:17.928 --> 00:05:25.365
+And this means that we're going to
+maintain it differently from GNU ELPA.
+
+00:05:25.365 --> 00:05:31.520
+Well, GNU ELPA is hosted in a way that
+is actually rather inconvenient.
+
+00:05:31.520 --> 00:05:35.600
+It is one single Git repository.
+
+00:05:35.600 --> 00:05:39.039
+And so anybody that has access
+to write it
+
+00:05:39.039 --> 00:05:41.239
+can write any part of it.
+
+00:05:41.239 --> 00:05:46.080
+There are many different packages in
+there, maintained by different people,
+
+00:05:46.080 --> 00:05:48.080
+and we have no way to give each one of
+
+00:05:48.080 --> 00:05:50.960
+them access to per own package
+
+00:05:50.960 --> 00:05:53.122
+and not to the others.
+
+00:05:53.122 --> 00:05:57.035
+Well, with NonGNU ELPA,
+we plan to fix that.
+
+00:05:57.035 --> 00:06:01.411
+The idea is to have
+a single Git repository
+
+00:06:01.411 --> 00:06:05.600
+where you can download various packages from.
+
+00:06:05.600 --> 00:06:08.400
+But they won't be maintained there.
+
+00:06:08.400 --> 00:06:10.800
+Each of those packages will be
+
+00:06:10.800 --> 00:06:15.280
+copied automatically from some other place.
+
+00:06:15.280 --> 00:06:18.311
+Probably some other repository
+
+00:06:18.311 --> 00:06:22.960
+where the right people have access to work on it.
+
+00:06:22.960 --> 00:06:26.375
+And this way we can avoid giving
+
+00:06:26.375 --> 00:06:28.160
+a gigantic number of people
+
+00:06:28.160 --> 00:06:32.240
+access to every part of it.
+
+00:06:32.240 --> 00:06:37.039
+So far NonGNU ELPA is just a plan,
+
+00:06:37.039 --> 00:06:40.479
+we need people to implement the plan.
+
+00:06:40.479 --> 00:06:43.825
+So, if you would like to help,
+
+00:06:43.825 --> 00:06:45.120
+please write to me.
+
+00:06:45.120 --> 00:06:49.520
+I think this is a very important step for progress
+
+00:06:49.520 --> 00:06:52.639
+and it's got to be implemented.
+
+00:06:52.639 --> 00:06:57.919
+Thanks and happy hacking!
diff --git a/2020/subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt b/2020/subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt
new file mode 100644
index 00000000..fd49bf4e
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--40-closing-remarks-part-1-autogen.vtt
@@ -0,0 +1,205 @@
+WEBVTT
+
+00:00:07.359 --> 00:00:09.519
+alrighty
+
+00:00:09.519 --> 00:00:19.840
+we're all set up waiting for corbin
+
+00:00:19.840 --> 00:00:22.960
+you are now muted
+
+00:00:22.960 --> 00:00:26.240
+oh it might be having a kid emergency so
+
+00:00:26.240 --> 00:00:28.080
+if you want we can get started with our
+
+00:00:28.080 --> 00:00:30.080
+closing remarks you are now unmuted and
+
+00:00:30.080 --> 00:00:31.199
+then we will
+
+00:00:31.199 --> 00:00:35.120
+um you know bring corwin in when when um
+
+00:00:35.120 --> 00:00:38.879
+things permit
+
+00:00:38.879 --> 00:00:42.840
+let me just share the closing remarks
+
+00:00:42.840 --> 00:00:44.160
+notes
+
+00:00:44.160 --> 00:00:46.879
+so that we can see what that's like
+
+00:00:46.879 --> 00:00:48.879
+actually
+
+00:00:48.879 --> 00:00:55.440
+um
+
+00:00:55.440 --> 00:00:58.399
+yeah sure I guess we can do the closing
+
+00:00:58.399 --> 00:01:00.719
+remarks
+
+00:01:00.719 --> 00:01:03.680
+okay not actually closing yet there
+
+00:01:03.680 --> 00:01:06.400
+might be another talk after this but
+
+00:01:06.400 --> 00:01:08.479
+since we have a little time before uh
+
+00:01:08.479 --> 00:01:09.680
+before
+
+00:01:09.680 --> 00:01:12.320
+uh cornbread comes well you know share
+
+00:01:12.320 --> 00:01:13.439
+some of the interesting things we've
+
+00:01:13.439 --> 00:01:14.799
+seen today
+
+00:01:14.799 --> 00:01:18.479
+so uh there have been about 12 20 talks
+
+00:01:18.479 --> 00:01:21.840
+21 out once once ong macros
+
+00:01:21.840 --> 00:01:25.360
+happens that's all today there's 16 more
+
+00:01:25.360 --> 00:01:26.159
+talks tomorrow
+
+00:01:26.159 --> 00:01:28.560
+so if you thought today was lots of fun
+
+00:01:28.560 --> 00:01:30.880
+be sure to tune in tomorrow as well
+
+00:01:30.880 --> 00:01:33.920
+uh for reference last year's EmacsConf
+
+00:01:33.920 --> 00:01:36.240
+had 30 talks many of which were lighting
+
+00:01:36.240 --> 00:01:37.600
+talks this year
+
+00:01:37.600 --> 00:01:39.680
+we had slightly longer talks and a lot
+
+00:01:39.680 --> 00:01:41.360
+more interactivities or a lot more
+
+00:01:41.360 --> 00:01:43.119
+question and answer sections
+
+00:01:43.119 --> 00:01:45.360
+they're worth more than there were about
+
+00:01:45.360 --> 00:01:47.040
+391 viewers
+
+00:01:47.040 --> 00:01:50.079
+on the main main stream
+
+00:01:50.079 --> 00:01:52.320
+and about 26 in the lower resolution
+
+00:01:52.320 --> 00:01:53.680
+stream
+
+00:01:53.680 --> 00:01:55.680
+last year's viewers were last year had
+
+00:01:55.680 --> 00:01:58.960
+about 270 viewers at the same time so
+
+00:01:58.960 --> 00:02:01.280
+the max clock is getting bigger and
+
+00:02:01.280 --> 00:02:02.719
+etherpad has been working out
+
+00:02:02.719 --> 00:02:05.360
+really really well uh people have been
+
+00:02:05.360 --> 00:02:07.280
+using that to pose their questions
+
+00:02:07.280 --> 00:02:08.800
+so I think at some point I saw there
+
+00:02:08.800 --> 00:02:11.120
+were 124 people working on it and we
+
+00:02:11.120 --> 00:02:12.640
+only managed to
+
+00:02:12.640 --> 00:02:17.440
+accidentally erase it once so yay us
+
+00:02:17.440 --> 00:02:19.599
+and yay everybody for helping thank you
+
+00:02:19.599 --> 00:02:24.319
+so much
+
+00:02:24.319 --> 00:02:27.920
+so yeah so the videos and other
+
+00:02:27.920 --> 00:02:29.200
+resources
+
+00:02:29.200 --> 00:02:31.840
+um we're planning to post uh sometime
+
+00:02:31.840 --> 00:02:33.680
+over the next few weeks
+
+00:02:33.680 --> 00:02:36.000
+um it actually took a couple weeks last
+
+00:02:36.000 --> 00:02:37.519
+year but this year
+
+00:02:37.519 --> 00:02:39.519
+I'm hoping that we can at least
+
+00:02:39.519 --> 00:02:41.040
+partially partially
+
+00:02:41.040 --> 00:02:44.160
+um release them much sooner um
+
+00:02:44.160 --> 00:02:45.440
+you know I might be able to get around
+
+00:02:45.440 --> 00:02:47.280
+to uploading some of the pre-recorded
+
+00:02:47.280 --> 00:02:48.160
+talks
+
+00:02:48.160 --> 00:02:53.360
+um later tonight after the conference
+
+00:02:53.360 --> 00:02:57.760
+so keep an eye on emacsconf.org/2020 for that
+
+00:02:57.760 --> 00:03:01.120
+Join our mailing lists which is
+
+00:03:01.120 --> 00:03:07.840
+a list that you know. https://lists.gnu.org/mailman/listinfo/emacsconf-discuss
diff --git a/2020/subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt b/2020/subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt
new file mode 100644
index 00000000..b7b770ac
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--40-closing-remarks-part-2-autogen.vtt
@@ -0,0 +1,1000 @@
+WEBVTT
+
+00:00:03.760 --> 00:00:04.480
+this is the
+
+00:00:04.480 --> 00:00:06.640
+closing remarks section where we get to
+
+00:00:06.640 --> 00:00:07.680
+again thank people
+
+00:00:07.680 --> 00:00:09.440
+and get people to share their lessons
+
+00:00:09.440 --> 00:00:10.800
+learned and whatnot
+
+00:00:10.800 --> 00:00:13.599
+but uh leo since you've stayed up to uh
+
+00:00:13.599 --> 00:00:14.080
+to
+
+00:00:14.080 --> 00:00:16.000
+say something let's let's let's turn it
+
+00:00:16.000 --> 00:00:17.520
+over to you
+
+00:00:17.520 --> 00:00:20.240
+oh what should I be saying I mean let me
+
+00:00:20.240 --> 00:00:22.640
+just turn on the webcam first
+
+00:00:22.640 --> 00:00:25.279
+and uh as you can see the day has
+
+00:00:25.279 --> 00:00:26.480
+progressed I'm not
+
+00:00:26.480 --> 00:00:28.640
+blasting light into my face I'm now
+
+00:00:28.640 --> 00:00:30.080
+sitting instead of
+
+00:00:30.080 --> 00:00:32.160
+you know standing so you can tell that
+
+00:00:32.160 --> 00:00:33.760
+it's getting quite late for europe right
+
+00:00:33.760 --> 00:00:38.239
+now
+
+00:00:38.239 --> 00:00:40.320
+but uh yeah I'm not sure if you want me
+
+00:00:40.320 --> 00:00:42.559
+to to go we've already done a little bit
+
+00:00:42.559 --> 00:00:44.800
+of our closing remarks anyway before uh
+
+00:00:44.800 --> 00:00:45.920
+colleen's talk
+
+00:00:45.920 --> 00:00:48.719
+so yeah what do you want me to add I
+
+00:00:48.719 --> 00:00:49.120
+mean we've
+
+00:00:49.120 --> 00:00:50.800
+all we've all been thanking one another
+
+00:00:50.800 --> 00:00:52.719
+we've been spanking the speakers
+
+00:00:52.719 --> 00:00:55.440
+uh you know nothing would have been
+
+00:00:55.440 --> 00:00:56.800
+possible without the efforts
+
+00:00:56.800 --> 00:00:59.359
+of you know all the other organizers in
+
+00:00:59.359 --> 00:01:01.280
+the team but also the speakers so
+
+00:01:01.280 --> 00:01:03.039
+I'll just reiterate what corwin has been
+
+00:01:03.039 --> 00:01:05.040
+telling you thank you so much for being
+
+00:01:05.040 --> 00:01:05.680
+so
+
+00:01:05.680 --> 00:01:07.920
+so many today I believe we've tripled
+
+00:01:07.920 --> 00:01:09.520
+the amount of viewers that we had for
+
+00:01:09.520 --> 00:01:11.360
+the previous imax conf
+
+00:01:11.360 --> 00:01:14.960
+and that's mind-boggling to have
+
+00:01:14.960 --> 00:01:17.600
+so many people have seen me to think
+
+00:01:17.600 --> 00:01:19.119
+that so many people have seen me spill
+
+00:01:19.119 --> 00:01:20.479
+water on myself
+
+00:01:20.479 --> 00:01:22.560
+and do a fool of myself for the entire
+
+00:01:22.560 --> 00:01:24.040
+day it is
+
+00:01:24.040 --> 00:01:26.320
+outstandingly stupid but still thank you
+
+00:01:26.320 --> 00:01:27.119
+so much
+
+00:01:27.119 --> 00:01:30.880
+it's fine yeah it's this one
+
+00:01:30.880 --> 00:01:32.640
+yeah this is this is going going really
+
+00:01:32.640 --> 00:01:34.240
+really well um
+
+00:01:34.240 --> 00:01:36.079
+but of course there's always ideas we
+
+00:01:36.079 --> 00:01:37.360
+can you can try to
+
+00:01:37.360 --> 00:01:39.439
+make it even even better so if you have
+
+00:01:39.439 --> 00:01:41.840
+any ideas or if you have any
+
+00:01:41.840 --> 00:01:43.280
+uh comments on the things that work
+
+00:01:43.280 --> 00:01:44.479
+really well that you'd like us to keep
+
+00:01:44.479 --> 00:01:45.600
+doing tomorrow
+
+00:01:45.600 --> 00:01:47.040
+please make sure to leave them in the
+
+00:01:47.040 --> 00:01:49.920
+other pad uh so the url is somewhere in
+
+00:01:49.920 --> 00:01:51.600
+all the different places we put it
+
+00:01:51.600 --> 00:01:53.200
+and there's a section all the way at the
+
+00:01:53.200 --> 00:01:55.439
+end where you people can drop in their
+
+00:01:55.439 --> 00:01:56.640
+general feedback
+
+00:01:56.640 --> 00:01:59.200
+and what went well what can be improved
+
+00:01:59.200 --> 00:02:01.040
+if you want to volunteer to help out
+
+00:02:01.040 --> 00:02:01.439
+with
+
+00:02:01.439 --> 00:02:04.240
+copying questions for example that might
+
+00:02:04.240 --> 00:02:05.439
+be great
+
+00:02:05.439 --> 00:02:08.879
+anyways it's all there uh and um
+
+00:02:08.879 --> 00:02:12.879
+that's that's my part
+
+00:02:12.879 --> 00:02:16.000
+um sorry
+
+00:02:16.000 --> 00:02:18.400
+so say that again uh it's been lots of
+
+00:02:18.400 --> 00:02:20.480
+fun and there's tomorrow oh my goodness
+
+00:02:20.480 --> 00:02:23.280
+you're still tomorrow that's tomorrow
+
+00:02:23.280 --> 00:02:26.720
+damn it
+
+00:02:26.720 --> 00:02:30.239
+yeah it's so it's been a lot of fun
+
+00:02:30.239 --> 00:02:31.680
+today
+
+00:02:31.680 --> 00:02:35.280
+um let's see so yeah I'm
+
+00:02:35.280 --> 00:02:38.080
+I guess we did go through the stats
+
+00:02:38.080 --> 00:02:39.280
+before but I'll
+
+00:02:39.280 --> 00:02:42.319
+also quickly add that um
+
+00:02:42.319 --> 00:02:44.879
+you know I've been looking a bit of an
+
+00:02:44.879 --> 00:02:45.680
+eye on the
+
+00:02:45.680 --> 00:02:47.920
+server's network bandwidth usage and you
+
+00:02:47.920 --> 00:02:49.280
+know today we've
+
+00:02:49.280 --> 00:02:51.920
+had about 1.3 terabytes of outbound
+
+00:02:51.920 --> 00:02:53.200
+traffic
+
+00:02:53.200 --> 00:02:56.319
+um which is definitely something
+
+00:02:56.319 --> 00:02:59.280
+and it's a record it's by by far you
+
+00:02:59.280 --> 00:03:00.800
+know shattered last year's numbers we
+
+00:03:00.800 --> 00:03:01.680
+had I think
+
+00:03:01.680 --> 00:03:04.959
+about like 400 viewers live um peaking
+
+00:03:04.959 --> 00:03:06.159
+at one point
+
+00:03:06.159 --> 00:03:09.280
+um and it's very humble
+
+00:03:09.280 --> 00:03:13.040
+humbling to see um like so many people
+
+00:03:13.040 --> 00:03:16.480
+um you know tune in to watch talks
+
+00:03:16.480 --> 00:03:18.080
+um about their favorite piece of
+
+00:03:18.080 --> 00:03:20.319
+software um about Emacs
+
+00:03:20.319 --> 00:03:23.760
+and um you know be part of the community
+
+00:03:23.760 --> 00:03:27.280
+and you know have us be be part of the
+
+00:03:27.280 --> 00:03:28.239
+community or
+
+00:03:28.239 --> 00:03:30.799
+I guess um you know run this sort of an
+
+00:03:30.799 --> 00:03:32.080
+event so it's been absolutely
+
+00:03:32.080 --> 00:03:35.680
+awesome um I guess I can quickly get to
+
+00:03:35.680 --> 00:03:36.319
+the
+
+00:03:36.319 --> 00:03:38.879
+thanks if you leo or sasha don't have
+
+00:03:38.879 --> 00:03:40.799
+anything else to add
+
+00:03:40.799 --> 00:03:44.000
+nope all good alrighty um
+
+00:03:44.000 --> 00:03:47.040
+yeah so let's see I'd like to thank the
+
+00:03:47.040 --> 00:03:48.400
+free software foundation
+
+00:03:48.400 --> 00:03:51.840
+especially the tech team um for
+
+00:03:51.840 --> 00:03:53.680
+for their general support for letting us
+
+00:03:53.680 --> 00:03:55.599
+use their big blue button
+
+00:03:55.599 --> 00:03:58.640
+um yeah thank you so much it's
+
+00:03:58.640 --> 00:04:00.640
+it's made a lot of difference this year
+
+00:04:00.640 --> 00:04:02.720
+um you know last year for EmacsConf
+
+00:04:02.720 --> 00:04:04.000
+2019 we used
+
+00:04:04.000 --> 00:04:07.040
+um jitsi meat um
+
+00:04:07.040 --> 00:04:10.799
+which was awesome but um
+
+00:04:10.799 --> 00:04:13.280
+you know we did run into some technical
+
+00:04:13.280 --> 00:04:15.599
+difficulties with it but this time
+
+00:04:15.599 --> 00:04:17.840
+um you know big blue button was for the
+
+00:04:17.840 --> 00:04:19.519
+most part smooth sailing
+
+00:04:19.519 --> 00:04:22.639
+um so yeah thank you very much to the
+
+00:04:22.639 --> 00:04:23.919
+free software foundation
+
+00:04:23.919 --> 00:04:25.520
+foundation for letting us use their
+
+00:04:25.520 --> 00:04:27.360
+weekly watson instance
+
+00:04:27.360 --> 00:04:29.199
+allow me to just interject for a second
+
+00:04:29.199 --> 00:04:31.280
+it was smooth sailing for absolutely
+
+00:04:31.280 --> 00:04:33.360
+every single speaker but myself
+
+00:04:33.360 --> 00:04:35.520
+well I managed to have three different
+
+00:04:35.520 --> 00:04:37.600
+problems with big blue buttons so
+
+00:04:37.600 --> 00:04:39.440
+I'll be fighting buggy pulse all night
+
+00:04:39.440 --> 00:04:42.000
+you can be sure of that
+
+00:04:42.000 --> 00:04:44.560
+please do um yeah that's that's the
+
+00:04:44.560 --> 00:04:46.000
+beauty of free software I guess
+
+00:04:46.000 --> 00:04:48.240
+is you know it it can be frustrating but
+
+00:04:48.240 --> 00:04:49.360
+at least you know there's
+
+00:04:49.360 --> 00:04:51.040
+multiple ways forward with you know
+
+00:04:51.040 --> 00:04:52.880
+reporting bugs and sending patches
+
+00:04:52.880 --> 00:04:55.840
+um and you know that's part of I guess
+
+00:04:55.840 --> 00:04:56.960
+the message that
+
+00:04:56.960 --> 00:04:59.360
+I'm I'm hoping that like you know people
+
+00:04:59.360 --> 00:05:01.680
+who take away from an event like this
+
+00:05:01.680 --> 00:05:04.560
+um around a community like this um you
+
+00:05:04.560 --> 00:05:05.440
+know Emacs
+
+00:05:05.440 --> 00:05:08.320
+you know being such an um long-standing
+
+00:05:08.320 --> 00:05:10.960
+piece of free software um
+
+00:05:10.960 --> 00:05:13.840
+and having this large of a community
+
+00:05:13.840 --> 00:05:15.840
+around it who who's been continuing to
+
+00:05:15.840 --> 00:05:17.520
+grow
+
+00:05:17.520 --> 00:05:20.160
+and mature with Emacs and you know every
+
+00:05:20.160 --> 00:05:23.199
+year we get new people in
+
+00:05:23.199 --> 00:05:26.240
+more and more people discover Emacs um
+
+00:05:26.240 --> 00:05:27.840
+you know join the community
+
+00:05:27.840 --> 00:05:31.520
+or communities I should say um
+
+00:05:31.520 --> 00:05:34.720
+it's just wonderful and
+
+00:05:34.720 --> 00:05:36.560
+a large part of it is possible because
+
+00:05:36.560 --> 00:05:38.800
+Emacs is free software um
+
+00:05:38.800 --> 00:05:42.560
+so I mean at the risk of spoiling my own
+
+00:05:42.560 --> 00:05:43.280
+talk
+
+00:05:43.280 --> 00:05:46.400
+uh-huh I I I
+
+00:05:46.400 --> 00:05:48.000
+I want to say that's that's what we're
+
+00:05:48.000 --> 00:05:50.000
+going to pivot to tomorrow that's that's
+
+00:05:50.000 --> 00:05:50.400
+what
+
+00:05:50.400 --> 00:05:52.800
+uh welcome to the dungeon talk is really
+
+00:05:52.800 --> 00:05:55.199
+about why it has to be free software
+
+00:05:55.199 --> 00:05:58.080
+and as you peel the project apart I
+
+00:05:58.080 --> 00:05:58.960
+think you'll see
+
+00:05:58.960 --> 00:06:02.000
+eric and I have for a long time that it
+
+00:06:02.000 --> 00:06:05.440
+is shameful to even think about trying
+
+00:06:05.440 --> 00:06:06.560
+to put
+
+00:06:06.560 --> 00:06:10.240
+some things outside of the public domain
+
+00:06:10.240 --> 00:06:14.639
+right yeah exactly and I think that's a
+
+00:06:14.639 --> 00:06:17.120
+good point to bring this up um this is a
+
+00:06:17.120 --> 00:06:18.240
+closing remark
+
+00:06:18.240 --> 00:06:19.919
+but it's only for today you know we've
+
+00:06:19.919 --> 00:06:22.319
+got tomorrow a long day of events
+
+00:06:22.319 --> 00:06:25.919
+um much like today um you know I say it
+
+00:06:25.919 --> 00:06:26.639
+long but
+
+00:06:26.639 --> 00:06:28.720
+in a way like thinking back it kind of
+
+00:06:28.720 --> 00:06:29.840
+like went by like this
+
+00:06:29.840 --> 00:06:34.160
+so um yeah it's gonna be a lot of fun
+
+00:06:34.160 --> 00:06:37.120
+much like today was so yeah definitely
+
+00:06:37.120 --> 00:06:38.800
+tune in tomorrow
+
+00:06:38.800 --> 00:06:41.039
+um we're going to be starting at the
+
+00:06:41.039 --> 00:06:43.240
+same time same place you know
+
+00:06:43.240 --> 00:06:45.919
+live.emacsconf.org
+
+00:06:45.919 --> 00:06:47.360
+for the specific mount points for
+
+00:06:47.360 --> 00:06:48.960
+example you know we'll be using
+
+00:06:48.960 --> 00:06:50.000
+main.webm
+
+00:06:50.000 --> 00:06:53.599
+and main dash 480p dot webm
+
+00:06:53.599 --> 00:06:57.680
+um I want to say thank you to sasha for
+
+00:06:57.680 --> 00:07:00.000
+setting that up and getting it running
+
+00:07:00.000 --> 00:07:00.800
+because
+
+00:07:00.800 --> 00:07:04.240
+I remember last year um
+
+00:07:04.240 --> 00:07:06.960
+you know we had a couple of people um
+
+00:07:06.960 --> 00:07:08.080
+requesting
+
+00:07:08.080 --> 00:07:11.280
+that you know a a lower resolution
+
+00:07:11.280 --> 00:07:14.000
+stream or mount point be made available
+
+00:07:14.000 --> 00:07:14.560
+um
+
+00:07:14.560 --> 00:07:18.000
+because of their limited bandwidth and
+
+00:07:18.000 --> 00:07:19.840
+it like when you have like free software
+
+00:07:19.840 --> 00:07:21.759
+tools it's not too hard
+
+00:07:21.759 --> 00:07:25.919
+um to get something like that going um
+
+00:07:25.919 --> 00:07:27.919
+I mean not impossible I should say it
+
+00:07:27.919 --> 00:07:29.199
+wasn't too easy
+
+00:07:29.199 --> 00:07:32.000
+we did have some difficulties with it
+
+00:07:32.000 --> 00:07:33.120
+today
+
+00:07:33.120 --> 00:07:34.800
+I'm learning more about ffmpeg and I
+
+00:07:34.800 --> 00:07:36.160
+expected to know at this point but it's
+
+00:07:36.160 --> 00:07:37.840
+great
+
+00:07:37.840 --> 00:07:41.599
+maybe it'll work tomorrow too yeah
+
+00:07:41.599 --> 00:07:44.720
+um yeah sasha can attest to it um
+
+00:07:44.720 --> 00:07:46.160
+you know there were still some king
+
+00:07:46.160 --> 00:07:47.759
+spitting iron out
+
+00:07:47.759 --> 00:07:51.039
+um and it's a process but you know we're
+
+00:07:51.039 --> 00:07:51.840
+all learning
+
+00:07:51.840 --> 00:07:54.879
+um each each of us in our own ways
+
+00:07:54.879 --> 00:07:58.000
+um yeah so there's that
+
+00:07:58.000 --> 00:08:00.400
+I'm very happy to have had that mount
+
+00:08:00.400 --> 00:08:02.800
+points to making banks conf accessible
+
+00:08:02.800 --> 00:08:03.599
+to people
+
+00:08:03.599 --> 00:08:06.560
+in um you know areas of the world where
+
+00:08:06.560 --> 00:08:08.160
+bandwidth may not be
+
+00:08:08.160 --> 00:08:10.160
+um you know as cheap or as readily
+
+00:08:10.160 --> 00:08:12.240
+available
+
+00:08:12.240 --> 00:08:13.680
+or just you know someone wanting to
+
+00:08:13.680 --> 00:08:15.280
+watch on their phone um
+
+00:08:15.280 --> 00:08:17.520
+even here um you know in the us and
+
+00:08:17.520 --> 00:08:18.560
+canada
+
+00:08:18.560 --> 00:08:20.160
+data plans are not exactly cheap or
+
+00:08:20.160 --> 00:08:21.919
+unlimited so
+
+00:08:21.919 --> 00:08:24.960
+um yeah that's great
+
+00:08:24.960 --> 00:08:29.520
+let's see yeah so
+
+00:08:29.520 --> 00:08:31.199
+we are already halfway through this
+
+00:08:31.199 --> 00:08:33.599
+one's uh network bandwidth usage for our
+
+00:08:33.599 --> 00:08:34.560
+server
+
+00:08:34.560 --> 00:08:38.839
+um for tomorrow we should save some for
+
+00:08:38.839 --> 00:08:41.360
+tomorrow
+
+00:08:41.360 --> 00:08:44.240
+all right yeah but for for tomorrow I'll
+
+00:08:44.240 --> 00:08:45.680
+probably try bumping up the server a
+
+00:08:45.680 --> 00:08:47.600
+little bit more to get us some bandwidth
+
+00:08:47.600 --> 00:08:50.959
+some more bandwidth um
+
+00:08:50.959 --> 00:08:54.399
+yeah um in terms of thank yous
+
+00:08:54.399 --> 00:08:56.320
+um can you scroll down a little bit
+
+00:08:56.320 --> 00:08:58.880
+please of course
+
+00:08:58.880 --> 00:09:02.000
+uh thank you
+
+00:09:02.000 --> 00:09:05.440
+right um yeah so the fsf and fsf tech
+
+00:09:05.440 --> 00:09:06.800
+team again for letting us use their
+
+00:09:06.800 --> 00:09:08.320
+picture button instance
+
+00:09:08.320 --> 00:09:11.839
+um volunteers and organizers
+
+00:09:11.839 --> 00:09:15.120
+um so there's there's me
+
+00:09:15.120 --> 00:09:17.519
+um there's valvin 192 there's david
+
+00:09:17.519 --> 00:09:19.279
+bremner david o'toole
+
+00:09:19.279 --> 00:09:22.399
+um corwin who
+
+00:09:22.399 --> 00:09:24.399
+both presented and also has been helping
+
+00:09:24.399 --> 00:09:26.399
+out um
+
+00:09:26.399 --> 00:09:30.240
+and especially um oops can you scroll
+
+00:09:30.240 --> 00:09:33.600
+up again in the past
+
+00:09:33.600 --> 00:09:36.959
+leo leo
+
+00:09:36.959 --> 00:09:40.240
+um right so sorry I got distracted by
+
+00:09:40.240 --> 00:09:45.680
+cool stuff
+
+00:09:45.680 --> 00:09:48.160
+sorry go ahead okay go no no go ahead I
+
+00:09:48.160 --> 00:09:48.880
+was just
+
+00:09:48.880 --> 00:09:52.480
+being distracted um yeah we'll have some
+
+00:09:52.480 --> 00:09:53.680
+time to check it out later
+
+00:09:53.680 --> 00:09:57.360
+after the event today um but yeah
+
+00:09:57.360 --> 00:10:00.399
+a special thank you um to to to you
+
+00:10:00.399 --> 00:10:02.160
+sasha and to you leo
+
+00:10:02.160 --> 00:10:05.839
+um you know for hanging out all day um
+
+00:10:05.839 --> 00:10:08.240
+and helping with like you know juggling
+
+00:10:08.240 --> 00:10:09.120
+everything
+
+00:10:09.120 --> 00:10:11.360
+me for the most part I was just you know
+
+00:10:11.360 --> 00:10:12.959
+running the stream and making sure that
+
+00:10:12.959 --> 00:10:13.920
+I joined the
+
+00:10:13.920 --> 00:10:17.360
+the right room um but you know a lot of
+
+00:10:17.360 --> 00:10:18.640
+it was um
+
+00:10:18.640 --> 00:10:21.680
+sasha um and leo doing a lot of stuff
+
+00:10:21.680 --> 00:10:23.120
+behind the scenes you know doing quick
+
+00:10:23.120 --> 00:10:24.240
+tech checks with
+
+00:10:24.240 --> 00:10:27.360
+with the speakers to to make sure um you
+
+00:10:27.360 --> 00:10:27.680
+know
+
+00:10:27.680 --> 00:10:29.120
+things are generally working pretty
+
+00:10:29.120 --> 00:10:31.120
+smoothly and
+
+00:10:31.120 --> 00:10:34.160
+you know I'm happy to say that of course
+
+00:10:34.160 --> 00:10:37.279
+except for um leo's bad luck a little
+
+00:10:37.279 --> 00:10:37.839
+bit with
+
+00:10:37.839 --> 00:10:41.040
+with big blue button um we didn't really
+
+00:10:41.040 --> 00:10:42.399
+have any technical issue
+
+00:10:42.399 --> 00:10:44.160
+other technical issues this year um
+
+00:10:44.160 --> 00:10:46.480
+which is awesome compared to last year
+
+00:10:46.480 --> 00:10:49.360
+um yeah and leo I do look forward to
+
+00:10:49.360 --> 00:10:50.640
+those bug reports too
+
+00:10:50.640 --> 00:10:53.760
+people watching you can make sure I'll
+
+00:10:53.760 --> 00:10:56.480
+cc you into them so don't worry about it
+
+00:10:56.480 --> 00:11:00.560
+please do um yes so
+
+00:11:00.560 --> 00:11:03.040
+I'll say briefly I very much like to
+
+00:11:03.040 --> 00:11:04.480
+thank our speakers
+
+00:11:04.480 --> 00:11:08.720
+and um our participants um the audience
+
+00:11:08.720 --> 00:11:12.560
+for hanging out with us watching and
+
+00:11:12.560 --> 00:11:14.160
+you know just being a part of this
+
+00:11:14.160 --> 00:11:16.480
+making Emacs conf20
+
+00:11:16.480 --> 00:11:18.160
+as awesome as it turned out as it's
+
+00:11:18.160 --> 00:11:19.920
+turned out to be and
+
+00:11:19.920 --> 00:11:22.160
+um I'm personally very much looking
+
+00:11:22.160 --> 00:11:24.160
+forward to an awesome tomorrow as well
+
+00:11:24.160 --> 00:11:27.360
+um and with that I'll basically speak
+
+00:11:27.360 --> 00:11:29.600
+less and pass it on to sasha and leo to
+
+00:11:29.600 --> 00:11:31.440
+conclude
+
+00:11:31.440 --> 00:11:33.040
+well you're just expecting us to have
+
+00:11:33.040 --> 00:11:34.770
+anything left to say after you
+
+00:11:34.770 --> 00:11:38.880
+[Laughter]
+
+00:11:38.880 --> 00:11:41.200
+but the fighter deals you're the lead
+
+00:11:41.200 --> 00:11:44.640
+organizer you get to have the last word
+
+00:11:44.640 --> 00:11:48.320
+most definitely yes
+
+00:11:48.320 --> 00:11:51.680
+come on um okay I mean
+
+00:11:51.680 --> 00:11:54.000
+if I start talking again if I start
+
+00:11:54.000 --> 00:11:55.200
+talking again
+
+00:11:55.200 --> 00:11:58.320
+also just ramp us right back up I have
+
+00:11:58.320 --> 00:12:00.079
+so much positive to say about this
+
+00:12:00.079 --> 00:12:02.160
+community um
+
+00:12:02.160 --> 00:12:04.000
+if I'm jumping back in again it's only
+
+00:12:04.000 --> 00:12:05.279
+to say thank you for
+
+00:12:05.279 --> 00:12:08.000
+uh running the show for closing the show
+
+00:12:08.000 --> 00:12:10.560
+for being in the show cheers
+
+00:12:10.560 --> 00:12:12.160
+absolutely I mean I couldn't say it
+
+00:12:12.160 --> 00:12:14.160
+better myself um
+
+00:12:14.160 --> 00:12:17.519
+yeah so on that great positive note we
+
+00:12:17.519 --> 00:12:19.839
+I guess we will conclude today and we'll
+
+00:12:19.839 --> 00:12:21.440
+catch you all at uh
+
+00:12:21.440 --> 00:12:24.880
+9am tomorrow by the way you can start
+
+00:12:24.880 --> 00:12:26.160
+placing beds to know which
+
+00:12:26.160 --> 00:12:30.560
+color my suit is going to be tomorrow
+
+00:12:30.560 --> 00:12:33.600
+sounds good bye alrighty
+
+00:12:33.600 --> 00:12:39.839
+bye guys bye
diff --git a/2020/subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt b/2020/subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt
new file mode 100644
index 00000000..8bbb4f17
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--41-opening-remarks-autogen.vtt
@@ -0,0 +1,1036 @@
+WEBVTT
+
+00:00:09.360 --> 00:00:10.719
+so we can't hear you right now just to
+
+00:00:10.719 --> 00:00:11.280
+make sure
+
+00:00:11.280 --> 00:00:15.120
+no now we can hello
+
+00:00:15.120 --> 00:00:18.560
+hello morning good morning
+
+00:00:18.560 --> 00:00:21.680
+good morning all right so looks like
+
+00:00:21.680 --> 00:00:25.039
+um you can hear me let's see if the um
+
+00:00:25.039 --> 00:00:28.240
+stream can hear me can someone in Emacs
+
+00:00:28.240 --> 00:00:28.880
+con
+
+00:00:28.880 --> 00:00:32.000
+confirm that they can hear me as well
+
+00:00:32.000 --> 00:00:35.920
+yes awesome yep apparently they can
+
+00:00:35.920 --> 00:00:39.520
+awesome okay great um
+
+00:00:39.520 --> 00:00:42.399
+alrighty let's get started do you guys
+
+00:00:42.399 --> 00:00:42.719
+wanna
+
+00:00:42.719 --> 00:00:45.840
+go ahead with the opening sure
+
+00:00:45.840 --> 00:00:48.160
+sasha do you want to start okay hello
+
+00:00:48.160 --> 00:00:50.160
+and welcome to the second day of Emacs
+
+00:00:50.160 --> 00:00:51.920
+con 2020
+
+00:00:51.920 --> 00:00:54.719
+and you could we've got a whole lot of
+
+00:00:54.719 --> 00:00:55.520
+uh
+
+00:00:55.520 --> 00:00:57.600
+of development talks and coding related
+
+00:00:57.600 --> 00:00:59.840
+talks scheduled for today so you can
+
+00:00:59.840 --> 00:01:02.160
+do a quick scan of the schedule again
+
+00:01:02.160 --> 00:01:04.559
+all the times are very approximate
+
+00:01:04.559 --> 00:01:07.200
+so if you happen to be earlier late for
+
+00:01:07.200 --> 00:01:08.320
+something that you wanted to
+
+00:01:08.320 --> 00:01:11.600
+see we'll figure it out uh we've got um
+
+00:01:11.600 --> 00:01:12.240
+we've got
+
+00:01:12.240 --> 00:01:14.560
+talks about the Emacs development itself
+
+00:01:14.560 --> 00:01:15.439
+as well as
+
+00:01:15.439 --> 00:01:18.799
+developing with Emacs uh and a couple of
+
+00:01:18.799 --> 00:01:19.439
+things that
+
+00:01:19.439 --> 00:01:21.200
+were more user talks but got moved to
+
+00:01:21.200 --> 00:01:22.960
+the second day for timing reasons
+
+00:01:22.960 --> 00:01:24.080
+because there's so much stuff on the
+
+00:01:24.080 --> 00:01:25.759
+first day
+
+00:01:25.759 --> 00:01:27.280
+that's uh that's our quick schedule
+
+00:01:27.280 --> 00:01:29.119
+overview the schedule page has more
+
+00:01:29.119 --> 00:01:31.680
+of course now how do you actually do all
+
+00:01:31.680 --> 00:01:32.479
+that uh
+
+00:01:32.479 --> 00:01:35.680
+leo you want to tell them yep so as
+
+00:01:35.680 --> 00:01:37.119
+yesterday if you want to participate
+
+00:01:37.119 --> 00:01:38.320
+well I suppose you're
+
+00:01:38.320 --> 00:01:40.159
+watching the stream right now so I won't
+
+00:01:40.159 --> 00:01:41.600
+go into detail as far as this is
+
+00:01:41.600 --> 00:01:42.399
+concerned
+
+00:01:42.399 --> 00:01:44.079
+but for the questions and for taking
+
+00:01:44.079 --> 00:01:46.000
+notes we are using an after pad
+
+00:01:46.000 --> 00:01:47.840
+where basically you just go onto the
+
+00:01:47.840 --> 00:01:49.360
+page and you add your questions
+
+00:01:49.360 --> 00:01:51.439
+under the topic which is being discussed
+
+00:01:51.439 --> 00:01:53.040
+at the moment so I'm sure the people
+
+00:01:53.040 --> 00:01:54.560
+will be putting the legs back in the
+
+00:01:54.560 --> 00:01:55.840
+chat I'm just going to do this real
+
+00:01:55.840 --> 00:01:57.280
+quick
+
+00:01:57.280 --> 00:02:00.880
+there we go so now it's in the chat sir
+
+00:02:00.880 --> 00:02:04.000
+we have on isc three rooms that you can
+
+00:02:04.000 --> 00:02:04.399
+use
+
+00:02:04.399 --> 00:02:05.840
+if you want to get in touch with us
+
+00:02:05.840 --> 00:02:07.439
+first if you want to discuss whatever is
+
+00:02:07.439 --> 00:02:08.959
+going on during this stream you can go
+
+00:02:08.959 --> 00:02:09.679
+on
+
+00:02:09.679 --> 00:02:12.560
+imax cont okay and that's where most of
+
+00:02:12.560 --> 00:02:13.760
+the discussion happens
+
+00:02:13.760 --> 00:02:16.319
+we also have #emacsconf-accessible
+
+00:02:16.319 --> 00:02:18.239
+for the people who either can't see or
+
+00:02:18.239 --> 00:02:19.920
+can't hear and you know they
+
+00:02:19.920 --> 00:02:21.520
+we have lovely volunteers who have been
+
+00:02:21.520 --> 00:02:22.720
+describing what has been going on
+
+00:02:22.720 --> 00:02:23.680
+yesterday
+
+00:02:23.680 --> 00:02:25.599
+uh and we really thank you for this
+
+00:02:25.599 --> 00:02:27.760
+because it's really great for getting
+
+00:02:27.760 --> 00:02:29.760
+you know more people giving the chance
+
+00:02:29.760 --> 00:02:31.120
+to more people to follow the conference
+
+00:02:31.120 --> 00:02:32.800
+so thank you so much for this
+
+00:02:32.800 --> 00:02:34.080
+and also if you want to get in touch
+
+00:02:34.080 --> 00:02:36.640
+with us the organizers either if you are
+
+00:02:36.640 --> 00:02:38.640
+a speaker or if you have anything that
+
+00:02:38.640 --> 00:02:40.319
+you'd like us to know about
+
+00:02:40.319 --> 00:02:42.400
+something like a streaming problem or
+
+00:02:42.400 --> 00:02:43.840
+audio problem or anything along those
+
+00:02:43.840 --> 00:02:45.599
+lines you know
+
+00:02:45.599 --> 00:02:46.959
+maybe other programs actually keep them
+
+00:02:46.959 --> 00:02:48.480
+in imax conf we are looking at both
+
+00:02:48.480 --> 00:02:49.280
+charts anyway
+
+00:02:49.280 --> 00:02:52.160
+but to get in touch Emacsconf that oh
+
+00:02:52.160 --> 00:02:52.560
+sorry
+
+00:02:52.560 --> 00:02:56.480
+dash.org and also we had I don't believe
+
+00:02:56.480 --> 00:02:57.120
+we have
+
+00:02:57.120 --> 00:02:58.720
+we had all that much of this yesterday
+
+00:02:58.720 --> 00:03:00.560
+but if you would like to continue the
+
+00:03:00.560 --> 00:03:01.680
+discussion
+
+00:03:01.680 --> 00:03:03.920
+with some of the speakers like you had a
+
+00:03:03.920 --> 00:03:05.360
+topic that you really liked and you'd
+
+00:03:05.360 --> 00:03:07.120
+like to continue talking with them
+
+00:03:07.120 --> 00:03:10.159
+well we invite you to go on jitsi and to
+
+00:03:10.159 --> 00:03:11.120
+create a room
+
+00:03:11.120 --> 00:03:13.040
+uh all together and to have a direct
+
+00:03:13.040 --> 00:03:15.280
+direct chat with the speaker
+
+00:03:15.280 --> 00:03:17.280
+or whichever people might be interested
+
+00:03:17.280 --> 00:03:18.560
+in the topic as well
+
+00:03:18.560 --> 00:03:20.640
+okay I believe that's me I'm not sure to
+
+00:03:20.640 --> 00:03:21.760
+whom I'm handing
+
+00:03:21.760 --> 00:03:23.360
+the rest of the presentation is it to
+
+00:03:23.360 --> 00:03:26.080
+you I mean um yeah sure I can take it
+
+00:03:26.080 --> 00:03:29.760
+um all right so hello everyone welcome
+
+00:03:29.760 --> 00:03:32.480
+to the second day of ux comp 2020 um
+
+00:03:32.480 --> 00:03:33.840
+thank you for being here
+
+00:03:33.840 --> 00:03:35.360
+today and for those of you who were
+
+00:03:35.360 --> 00:03:36.799
+around yesterday thank you for being
+
+00:03:36.799 --> 00:03:38.239
+around yesterday as well
+
+00:03:38.239 --> 00:03:40.959
+um it was an awesome day and you know
+
+00:03:40.959 --> 00:03:42.400
+like leo and sasha said
+
+00:03:42.400 --> 00:03:44.400
+today I think is also very much gonna be
+
+00:03:44.400 --> 00:03:46.560
+another awesome day of great talks
+
+00:03:46.560 --> 00:03:49.040
+um yeah so I'm very much looking forward
+
+00:03:49.040 --> 00:03:49.760
+to it
+
+00:03:49.760 --> 00:03:53.040
+um so yeah the schedule is up um
+
+00:03:53.040 --> 00:03:56.560
+at emacsconf.org/2020/schedule you
+
+00:03:56.560 --> 00:03:57.760
+gotta scroll down
+
+00:03:57.760 --> 00:04:00.959
+to the second day uh let's see people
+
+00:04:00.959 --> 00:04:02.640
+tell me that my mic is quiet
+
+00:04:02.640 --> 00:04:05.840
+um I guess I can on the stream
+
+00:04:05.840 --> 00:04:09.120
+um I think so yeah let me double check
+
+00:04:09.120 --> 00:04:09.599
+this
+
+00:04:09.599 --> 00:04:12.720
+real quick okay I can also try
+
+00:04:12.720 --> 00:04:14.959
+um like increasing the volume here a
+
+00:04:14.959 --> 00:04:17.919
+little bit
+
+00:04:17.919 --> 00:04:20.000
+okay it doesn't sound all that quiet to
+
+00:04:20.000 --> 00:04:21.440
+me just because we are
+
+00:04:21.440 --> 00:04:23.840
+I'm being very familiar right now so the
+
+00:04:23.840 --> 00:04:24.479
+volume
+
+00:04:24.479 --> 00:04:27.360
+must be quite high compared to you no
+
+00:04:27.360 --> 00:04:28.479
+yeah it's it's fine um
+
+00:04:28.479 --> 00:04:32.240
+okay I think it's better now um anyways
+
+00:04:32.240 --> 00:04:35.919
+let's see awesome yeah so yesterday
+
+00:04:35.919 --> 00:04:38.479
+um you know so the setup that I'm using
+
+00:04:38.479 --> 00:04:40.800
+this year for streaming the desktop
+
+00:04:40.800 --> 00:04:44.400
+and the talks is that I use the um
+
+00:04:44.400 --> 00:04:47.919
+script a a script by the fsf forks which
+
+00:04:47.919 --> 00:04:52.000
+they also used for liquor planet
+
+00:04:52.000 --> 00:04:54.400
+and so the thing with this script is
+
+00:04:54.400 --> 00:04:56.240
+that it only takes one audio source by
+
+00:04:56.240 --> 00:04:57.040
+default
+
+00:04:57.040 --> 00:04:59.120
+and so I have that set to the desktop
+
+00:04:59.120 --> 00:05:01.520
+audio so yesterday on the spot I had to
+
+00:05:01.520 --> 00:05:03.440
+improvise to how to get my own audio on
+
+00:05:03.440 --> 00:05:05.199
+the stream and I used mumbo
+
+00:05:05.199 --> 00:05:06.880
+but then that added a delay which was
+
+00:05:06.880 --> 00:05:08.720
+pretty annoying um
+
+00:05:08.720 --> 00:05:10.720
+but today this morning I figured I could
+
+00:05:10.720 --> 00:05:13.120
+use pulse audio's um monitor system to
+
+00:05:13.120 --> 00:05:14.240
+add myself
+
+00:05:14.240 --> 00:05:17.039
+um right on this machine um so that the
+
+00:05:17.039 --> 00:05:18.479
+delay is shorter and
+
+00:05:18.479 --> 00:05:19.840
+seems to be working well so I'm very
+
+00:05:19.840 --> 00:05:21.759
+happy about that um
+
+00:05:21.759 --> 00:05:24.080
+but anyways yeah so let's get on we have
+
+00:05:24.080 --> 00:05:24.960
+the schedule
+
+00:05:24.960 --> 00:05:26.880
+um I'm thanking again the free software
+
+00:05:26.880 --> 00:05:28.479
+foundation tech team
+
+00:05:28.479 --> 00:05:31.680
+um for um you know
+
+00:05:31.680 --> 00:05:33.600
+uh allowing us to use this very big
+
+00:05:33.600 --> 00:05:35.280
+button uh instance
+
+00:05:35.280 --> 00:05:38.720
+um that uh you know for live talks um
+
+00:05:38.720 --> 00:05:41.039
+let's see um I'd like to thank all the
+
+00:05:41.039 --> 00:05:42.240
+volunteers once again
+
+00:05:42.240 --> 00:05:45.680
+um you know uh bavin david bremner
+
+00:05:45.680 --> 00:05:48.240
+david dave o'toole who's been specially
+
+00:05:48.240 --> 00:05:49.280
+helping out a lot
+
+00:05:49.280 --> 00:05:51.360
+in the e-max imax conf dash accessible
+
+00:05:51.360 --> 00:05:53.120
+channel with describing what's going on
+
+00:05:53.120 --> 00:05:54.800
+at any given moment
+
+00:05:54.800 --> 00:05:58.000
+um of course corwin
+
+00:05:58.000 --> 00:06:01.039
+carl boyd and um the two folks that
+
+00:06:01.039 --> 00:06:02.639
+you're seeing right beside me right now
+
+00:06:02.639 --> 00:06:04.080
+uh leon sasha
+
+00:06:04.080 --> 00:06:06.479
+who's been doing so much this year um
+
+00:06:06.479 --> 00:06:08.240
+thank you all very much
+
+00:06:08.240 --> 00:06:12.479
+um yeah let's see oh and also of course
+
+00:06:12.479 --> 00:06:15.440
+our wonderful speakers and audience um
+
+00:06:15.440 --> 00:06:15.840
+which
+
+00:06:15.840 --> 00:06:18.000
+are basically the main thing that this
+
+00:06:18.000 --> 00:06:18.880
+conference
+
+00:06:18.880 --> 00:06:21.199
+is about and is centered about us people
+
+00:06:21.199 --> 00:06:23.280
+talking about their experiences
+
+00:06:23.280 --> 00:06:25.360
+um sharing the things they've learned or
+
+00:06:25.360 --> 00:06:26.880
+they find interesting and
+
+00:06:26.880 --> 00:06:29.840
+for everyone to discussing in chat um
+
+00:06:29.840 --> 00:06:31.440
+yeah so it's awesome
+
+00:06:31.440 --> 00:06:33.759
+uh if you scroll down a little bit on
+
+00:06:33.759 --> 00:06:34.880
+the page
+
+00:06:34.880 --> 00:06:37.600
+um I just want to plug the mailing list
+
+00:06:37.600 --> 00:06:38.319
+right
+
+00:06:38.319 --> 00:06:40.639
+yeah so we have the emacsconf-discuss
+
+00:06:40.639 --> 00:06:41.919
+mailing list
+
+00:06:41.919 --> 00:06:45.039
+once again um which you know is
+
+00:06:45.039 --> 00:06:47.600
+we use for discussions around the
+
+00:06:47.600 --> 00:06:48.240
+conference
+
+00:06:48.240 --> 00:06:51.039
+including announcements before and after
+
+00:06:51.039 --> 00:06:52.479
+it's a fairly quiet list
+
+00:06:52.479 --> 00:06:55.520
+um so if you do like to subscribe um you
+
+00:06:55.520 --> 00:06:55.840
+know
+
+00:06:55.840 --> 00:06:57.199
+you won't get bombarded with emails
+
+00:06:57.199 --> 00:06:59.440
+really um
+
+00:06:59.440 --> 00:07:01.759
+uh yeah so that's something to consider
+
+00:07:01.759 --> 00:07:02.880
+um for example you know
+
+00:07:02.880 --> 00:07:04.639
+after the conference we're gonna be
+
+00:07:04.639 --> 00:07:06.240
+posting all the videos
+
+00:07:06.240 --> 00:07:07.759
+and um that's where I'm gonna be
+
+00:07:07.759 --> 00:07:09.440
+announcing it um at least
+
+00:07:09.440 --> 00:07:12.880
+in in one place one of the places um
+
+00:07:12.880 --> 00:07:15.680
+yeah and I'd also like to draw attention
+
+00:07:15.680 --> 00:07:16.720
+to our
+
+00:07:16.720 --> 00:07:19.360
+conduct guidelines at emacsconf.org
+
+00:07:19.360 --> 00:07:21.199
+conduct
+
+00:07:21.199 --> 00:07:23.120
+which is a series of guidelines and
+
+00:07:23.120 --> 00:07:25.599
+suggestions to to help make the event
+
+00:07:25.599 --> 00:07:28.800
+you know enjoyable and um you know an
+
+00:07:28.800 --> 00:07:30.000
+awesome experience for everyone
+
+00:07:30.000 --> 00:07:33.280
+involved um I think um so I wasn't
+
+00:07:33.280 --> 00:07:34.639
+keeping a close eye on the chat
+
+00:07:34.639 --> 00:07:36.160
+yesterday because it was super busy but
+
+00:07:36.160 --> 00:07:36.880
+I think
+
+00:07:36.880 --> 00:07:38.479
+uh in general you know everything was
+
+00:07:38.479 --> 00:07:40.240
+going pretty well pretty smoothly
+
+00:07:40.240 --> 00:07:42.319
+um so thank you so much everyone for
+
+00:07:42.319 --> 00:07:44.319
+keeping these in mind
+
+00:07:44.319 --> 00:07:46.879
+and um yeah that's it for me let's see
+
+00:07:46.879 --> 00:07:48.479
+if lee or sasha would like to add
+
+00:07:48.479 --> 00:07:51.520
+anything
+
+00:07:51.520 --> 00:07:52.879
+no but if you're all good to go you've
+
+00:07:52.879 --> 00:07:54.319
+said everything and we've said
+
+00:07:54.319 --> 00:07:55.680
+everything
+
+00:07:55.680 --> 00:07:59.120
+have a great day awesome yeah um
+
+00:07:59.120 --> 00:08:02.000
+uh okay someone okay so dave is asking
+
+00:08:02.000 --> 00:08:03.280
+what is the hallway track
+
+00:08:03.280 --> 00:08:06.319
+uh slash on conference um do either of
+
+00:08:06.319 --> 00:08:07.520
+you want to explain that or should I
+
+00:08:07.520 --> 00:08:08.160
+take it
+
+00:08:08.160 --> 00:08:10.080
+uh basically we're gonna have our hands
+
+00:08:10.080 --> 00:08:12.400
+full keeping the keeping the main track
+
+00:08:12.400 --> 00:08:14.080
+running but of course
+
+00:08:14.080 --> 00:08:15.360
+people have all sorts of interesting
+
+00:08:15.360 --> 00:08:17.280
+conversation ideas and sometimes it's
+
+00:08:17.280 --> 00:08:18.879
+nice to do it in real time or with
+
+00:08:18.879 --> 00:08:20.960
+shared screens or things like that
+
+00:08:20.960 --> 00:08:23.360
+so if you're having a conversation and
+
+00:08:23.360 --> 00:08:24.639
+you want to have
+
+00:08:24.639 --> 00:08:28.000
+more of a webcam or screen sharing thing
+
+00:08:28.000 --> 00:08:31.039
+to enrich that discussion feel free to
+
+00:08:31.039 --> 00:08:32.800
+set up a web conference using any of
+
+00:08:32.800 --> 00:08:35.360
+your okay
+
+00:08:35.360 --> 00:08:36.880
+can you do time in practice later all
+
+00:08:36.880 --> 00:08:38.880
+right feel free to
+
+00:08:38.880 --> 00:08:41.760
+set up your own conference c type web
+
+00:08:41.760 --> 00:08:43.120
+conference thingy
+
+00:08:43.120 --> 00:08:46.080
+and um and go find the people who are
+
+00:08:46.080 --> 00:08:47.279
+interested in the same thing
+
+00:08:47.279 --> 00:08:49.839
+and I'll do all that stuff right
+
+00:08:49.839 --> 00:08:50.480
+absolutely
+
+00:08:50.480 --> 00:08:53.120
+thanks sasha yeah so basically the idea
+
+00:08:53.120 --> 00:08:53.760
+is that
+
+00:08:53.760 --> 00:08:55.360
+so you know because of the limited time
+
+00:08:55.360 --> 00:08:58.080
+we kind of have to um keep moving along
+
+00:08:58.080 --> 00:09:00.720
+uh from one talk to the next and you
+
+00:09:00.720 --> 00:09:02.240
+know sometimes there's a lot of awesome
+
+00:09:02.240 --> 00:09:04.080
+questions or discussions going on
+
+00:09:04.080 --> 00:09:05.760
+from for example you know in Emacs con
+
+00:09:05.760 --> 00:09:08.240
+for like for the questions on the pad
+
+00:09:08.240 --> 00:09:11.440
+um yeah so the I guess hallway track or
+
+00:09:11.440 --> 00:09:12.160
+unconference
+
+00:09:12.160 --> 00:09:15.360
+is basically a suggestion for those who
+
+00:09:15.360 --> 00:09:16.160
+are interested
+
+00:09:16.160 --> 00:09:19.120
+to for example set up a jutsu meet room
+
+00:09:19.120 --> 00:09:21.120
+and then you know I'll go join there
+
+00:09:21.120 --> 00:09:23.519
+and discuss the talk if you know if the
+
+00:09:23.519 --> 00:09:25.279
+speaker can join after their talk
+
+00:09:25.279 --> 00:09:26.240
+wonderful
+
+00:09:26.240 --> 00:09:29.519
+um but if not even um you know if if
+
+00:09:29.519 --> 00:09:31.519
+only like you know the audience and
+
+00:09:31.519 --> 00:09:34.000
+folks you know from the emax campfire c
+
+00:09:34.000 --> 00:09:35.760
+would like to join and discuss that
+
+00:09:35.760 --> 00:09:37.279
+definitely works too
+
+00:09:37.279 --> 00:09:40.320
+um yeah that's it um
+
+00:09:40.320 --> 00:09:42.000
+I think oh one other thing that we I
+
+00:09:42.000 --> 00:09:44.560
+guess wanted to mention possibly is that
+
+00:09:44.560 --> 00:09:46.560
+um yesterday I think I noticed that a
+
+00:09:46.560 --> 00:09:48.640
+lot of the questions were getting added
+
+00:09:48.640 --> 00:09:52.240
+um like top to bottom on the pad but um
+
+00:09:52.240 --> 00:09:54.560
+I think the suggestion is to put them
+
+00:09:54.560 --> 00:09:56.000
+like stack them up so like
+
+00:09:56.000 --> 00:09:58.000
+um add new at the new questions on the
+
+00:09:58.000 --> 00:09:59.360
+top um
+
+00:09:59.360 --> 00:10:01.600
+that might make it easier both for you
+
+00:10:01.600 --> 00:10:03.120
+know the people
+
+00:10:03.120 --> 00:10:05.760
+to who are typing the questions um but
+
+00:10:05.760 --> 00:10:07.120
+also for the speaker to
+
+00:10:07.120 --> 00:10:09.519
+sort of have a fixed I guess um point
+
+00:10:09.519 --> 00:10:10.720
+where they're looking at for new
+
+00:10:10.720 --> 00:10:11.760
+questions
+
+00:10:11.760 --> 00:10:13.839
+um so don't put your questions under
+
+00:10:13.839 --> 00:10:15.200
+somebody else's question
+
+00:10:15.200 --> 00:10:17.760
+put it at that top level sort of you
+
+00:10:17.760 --> 00:10:18.640
+know thing
+
+00:10:18.640 --> 00:10:21.519
+right get your own bullet points yeah
+
+00:10:21.519 --> 00:10:23.040
+and on the same topic yesterday some
+
+00:10:23.040 --> 00:10:24.480
+people were a little scared
+
+00:10:24.480 --> 00:10:26.959
+when all the colors were removed it was
+
+00:10:26.959 --> 00:10:27.839
+me basically
+
+00:10:27.839 --> 00:10:29.839
+in order to help the speakers know which
+
+00:10:29.839 --> 00:10:31.680
+is the section that should be looking at
+
+00:10:31.680 --> 00:10:33.680
+at the start of every presentation what
+
+00:10:33.680 --> 00:10:35.200
+I will do is that I will wipe all the
+
+00:10:35.200 --> 00:10:35.760
+colors
+
+00:10:35.760 --> 00:10:38.480
+so all the attributions of modifications
+
+00:10:38.480 --> 00:10:39.360
+to authors
+
+00:10:39.360 --> 00:10:41.600
+so that the streamer sorry the speaker
+
+00:10:41.600 --> 00:10:43.200
+has a little easier time finding their
+
+00:10:43.200 --> 00:10:44.480
+talk in the list
+
+00:10:44.480 --> 00:10:47.200
+right yeah so yeah for for speakers just
+
+00:10:47.200 --> 00:10:48.560
+keep scrolling down until you hit a
+
+00:10:48.560 --> 00:10:49.360
+colorful
+
+00:10:49.360 --> 00:10:52.079
+colorful section um with the author
+
+00:10:52.079 --> 00:10:52.640
+colors
+
+00:10:52.640 --> 00:10:55.600
+and um yeah double check that um that's
+
+00:10:55.600 --> 00:10:57.200
+you know it is your talk
+
+00:10:57.200 --> 00:11:00.560
+um yeah with that said I think that's
+
+00:11:00.560 --> 00:11:04.240
+all of it for our opening remarks right
+
+00:11:04.240 --> 00:11:07.760
+um okay awesome so in that case
+
+00:11:07.760 --> 00:11:12.320
+um we will start queuing up the talks
+
+00:11:12.320 --> 00:11:14.560
+next up right after this opening remark
+
+00:11:14.560 --> 00:11:16.959
+we have Emacs development updates by
+
+00:11:16.959 --> 00:11:18.880
+um one of the co-maintainers of Emacs
+
+00:11:18.880 --> 00:11:20.240
+john weekley
+
+00:11:20.240 --> 00:11:24.320
+um it is a pre-recording and um
+
+00:11:24.320 --> 00:11:27.519
+I don't think john is awake yet because
+
+00:11:27.519 --> 00:11:28.399
+of right he's
+
+00:11:28.399 --> 00:11:31.279
+probably uh still asleep but um he will
+
+00:11:31.279 --> 00:11:31.839
+be
+
+00:11:31.839 --> 00:11:33.920
+um looking taking a look at the
+
+00:11:33.920 --> 00:11:35.120
+questions on the pad
+
+00:11:35.120 --> 00:11:38.160
+later on um so yeah please keep posting
+
+00:11:38.160 --> 00:11:40.160
+your questions on the path for him to
+
+00:11:40.160 --> 00:11:43.279
+later look and try to answer awesome
+
+00:11:43.279 --> 00:11:48.800
+so see you guys in a bit
diff --git a/2020/subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt b/2020/subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt
new file mode 100644
index 00000000..db71c0cc
--- /dev/null
+++ b/2020/subtitles/emacsconf-2020--42-closing-remarks-autogen.vtt
@@ -0,0 +1,2905 @@
+WEBVTT
+
+00:00:02.240 --> 00:00:03.120
+all right
+
+00:00:03.120 --> 00:00:05.359
+in the meantime while waiting for corwin
+
+00:00:05.359 --> 00:00:06.399
+wow we did it
+
+00:00:06.399 --> 00:00:09.599
+look at that
+
+00:00:09.599 --> 00:00:12.799
+yeah it's I mean who would have thought
+
+00:00:12.799 --> 00:00:14.960
+right
+
+00:00:14.960 --> 00:00:17.279
+I mean I I surely didn't when we started
+
+00:00:17.279 --> 00:00:18.640
+no knowing how
+
+00:00:18.640 --> 00:00:20.560
+exhausted I was at the end of the first
+
+00:00:20.560 --> 00:00:22.000
+day I would have imagined
+
+00:00:22.000 --> 00:00:24.480
+to survive the second day of more of
+
+00:00:24.480 --> 00:00:29.279
+this same nonsense
+
+00:00:29.279 --> 00:00:32.320
+um yeah it's it's been fun
+
+00:00:32.320 --> 00:00:35.200
+it's been a lot of work um especially
+
+00:00:35.200 --> 00:00:36.880
+for you and sasha
+
+00:00:36.880 --> 00:00:39.680
+but um you know it's it's incredible I'm
+
+00:00:39.680 --> 00:00:41.040
+I'm very happy
+
+00:00:41.040 --> 00:00:43.520
+that um you know we managed to pull
+
+00:00:43.520 --> 00:00:44.399
+through
+
+00:00:44.399 --> 00:00:46.960
+um you know for two days straight not
+
+00:00:46.960 --> 00:00:48.800
+one day
+
+00:00:48.800 --> 00:00:52.320
+yeah well hey we did try
+
+00:00:52.320 --> 00:00:54.000
+well we actually did manage to accept
+
+00:00:54.000 --> 00:00:55.360
+all the top proposals
+
+00:00:55.360 --> 00:00:57.360
+so if you're thinking oh I could I could
+
+00:00:57.360 --> 00:00:59.039
+give an even better talk than the ones I
+
+00:00:59.039 --> 00:00:59.840
+heard today
+
+00:00:59.840 --> 00:01:01.680
+or yesterday please send us a talk
+
+00:01:01.680 --> 00:01:03.440
+proposal for next year
+
+00:01:03.440 --> 00:01:04.960
+we might be able to fit it's all in but
+
+00:01:04.960 --> 00:01:06.720
+we might have to declare an Emacs week I
+
+00:01:06.720 --> 00:01:09.840
+don't know
+
+00:01:09.840 --> 00:01:12.799
+yeah absolutely yeah it's it's funny
+
+00:01:12.799 --> 00:01:13.200
+like
+
+00:01:13.200 --> 00:01:15.360
+um I remember a little bit last year but
+
+00:01:15.360 --> 00:01:16.880
+also this year we kind of
+
+00:01:16.880 --> 00:01:19.439
+we're trying to set up um I guess sort
+
+00:01:19.439 --> 00:01:20.960
+of a procedure for
+
+00:01:20.960 --> 00:01:23.200
+accepting and rejecting talks but then
+
+00:01:23.200 --> 00:01:24.720
+you know we have got the actual
+
+00:01:24.720 --> 00:01:27.680
+submissions and oh my god so much
+
+00:01:27.680 --> 00:01:28.880
+awesome stuff
+
+00:01:28.880 --> 00:01:30.799
+um I mean I definitely wouldn't have
+
+00:01:30.799 --> 00:01:33.360
+been a movie
+
+00:01:33.360 --> 00:01:35.360
+how can you say not anything it's emad
+
+00:01:35.360 --> 00:01:36.720
+so you just throw it all in
+
+00:01:36.720 --> 00:01:38.159
+including the kitchen sink and then
+
+00:01:38.159 --> 00:01:40.640
+we'll sort it all out later
+
+00:01:40.640 --> 00:01:42.720
+so if you went through all this the
+
+00:01:42.720 --> 00:01:44.240
+entire conference and you missed some
+
+00:01:44.240 --> 00:01:46.079
+interesting talks because a we started
+
+00:01:46.079 --> 00:01:46.640
+early
+
+00:01:46.640 --> 00:01:48.240
+because you're very excited and didn't
+
+00:01:48.240 --> 00:01:50.399
+need the technical you know buffer time
+
+00:01:50.399 --> 00:01:53.119
+uh or b you really had to step away at
+
+00:01:53.119 --> 00:01:54.159
+some point so you must
+
+00:01:54.159 --> 00:01:55.840
+talk you really wanted to recordings
+
+00:01:55.840 --> 00:01:58.960
+will eventually be available
+
+00:01:58.960 --> 00:02:02.320
+yes absolutely um yeah I know
+
+00:02:02.320 --> 00:02:05.360
+so many people asked in the chat um you
+
+00:02:05.360 --> 00:02:06.000
+know
+
+00:02:06.000 --> 00:02:08.000
+is did I already miss the stock or are
+
+00:02:08.000 --> 00:02:09.200
+the pre-recordings up
+
+00:02:09.200 --> 00:02:12.319
+um yeah so they're not up yet but
+
+00:02:12.319 --> 00:02:15.280
+um you know especially with the
+
+00:02:15.280 --> 00:02:16.400
+pre-recordings that
+
+00:02:16.400 --> 00:02:18.560
+those are basically um ready to be
+
+00:02:18.560 --> 00:02:19.920
+uploaded so
+
+00:02:19.920 --> 00:02:22.879
+you know right after we finish this talk
+
+00:02:22.879 --> 00:02:23.760
+um
+
+00:02:23.760 --> 00:02:26.879
+I'm going to um start uploading them
+
+00:02:26.879 --> 00:02:29.599
+um because you know those are just ready
+
+00:02:29.599 --> 00:02:30.480
+we have them
+
+00:02:30.480 --> 00:02:32.720
+and then for the ones that were only
+
+00:02:32.720 --> 00:02:33.519
+live
+
+00:02:33.519 --> 00:02:36.879
+also as well as the live q a sessions um
+
+00:02:36.879 --> 00:02:40.080
+we will try to process them
+
+00:02:40.080 --> 00:02:43.440
+and get those up as well yes after
+
+00:02:43.440 --> 00:02:45.680
+you've had some sleep
+
+00:02:45.680 --> 00:02:49.040
+yeah after after some rest um
+
+00:02:49.040 --> 00:02:51.920
+yeah and I'm I'm just with us oh there
+
+00:02:51.920 --> 00:02:55.040
+you go hey corbin
+
+00:02:55.040 --> 00:02:57.280
+um yeah I don't think we have your sound
+
+00:02:57.280 --> 00:02:58.959
+yet so double check that
+
+00:02:58.959 --> 00:03:03.440
+but um hi how about now yes
+
+00:03:03.440 --> 00:03:05.920
+um yeah I'm just seeing the chatbot go
+
+00:03:05.920 --> 00:03:07.360
+by an EmacsConf and
+
+00:03:07.360 --> 00:03:09.360
+everyone is being so nice um it's just
+
+00:03:09.360 --> 00:03:12.239
+making me smile
+
+00:03:12.239 --> 00:03:14.159
+okay people want a question section so
+
+00:03:14.159 --> 00:03:15.360
+I'm gonna add a question
+
+00:03:15.360 --> 00:03:17.599
+thing and people can throw in their
+
+00:03:17.599 --> 00:03:18.720
+questions
+
+00:03:18.720 --> 00:03:22.159
+somewhere just telling you if you want
+
+00:03:22.159 --> 00:03:23.840
+three Emacs conference per year the
+
+00:03:23.840 --> 00:03:26.159
+answer is no judging by the amount of
+
+00:03:26.159 --> 00:03:28.159
+stress that we've accrued all together
+
+00:03:28.159 --> 00:03:28.959
+today
+
+00:03:28.959 --> 00:03:30.799
+we are not ready to do this three times
+
+00:03:30.799 --> 00:03:32.640
+every year the answer is
+
+00:03:32.640 --> 00:03:34.480
+you're welcome to organize it and we'll
+
+00:03:34.480 --> 00:03:36.000
+happily share our notes
+
+00:03:36.000 --> 00:03:38.159
+um and I will take a mention of it in my
+
+00:03:38.159 --> 00:03:39.040
+Emacs news
+
+00:03:39.040 --> 00:03:41.200
+so please feel free to go ahead and put
+
+00:03:41.200 --> 00:03:43.920
+things together yourselves
+
+00:03:43.920 --> 00:03:46.959
+yeah absolutely um you know for me I
+
+00:03:46.959 --> 00:03:48.400
+think once a year is
+
+00:03:48.400 --> 00:03:51.680
+quite enough but um if
+
+00:03:51.680 --> 00:03:55.040
+go ahead oh however if I if today leaves
+
+00:03:55.040 --> 00:03:56.080
+you wanting more
+
+00:03:56.080 --> 00:03:58.720
+there are emax meetups and I think there
+
+00:03:58.720 --> 00:04:00.000
+are a couple of a
+
+00:04:00.000 --> 00:04:02.239
+couple of them coming up in december so
+
+00:04:02.239 --> 00:04:04.319
+if you check back in my talk
+
+00:04:04.319 --> 00:04:06.560
+for Emacs news highlights I've linked to
+
+00:04:06.560 --> 00:04:08.080
+a couple that are coming up in the next
+
+00:04:08.080 --> 00:04:09.760
+couple of weeks
+
+00:04:09.760 --> 00:04:12.000
+nice yeah and I think zakariya mentioned
+
+00:04:12.000 --> 00:04:12.959
+that um
+
+00:04:12.959 --> 00:04:15.920
+he's either participating or he runs or
+
+00:04:15.920 --> 00:04:17.840
+is one of the people that runs the Emacs
+
+00:04:17.840 --> 00:04:19.120
+nyc meetup
+
+00:04:19.120 --> 00:04:22.079
+um yeah so definitely check that out and
+
+00:04:22.079 --> 00:04:23.759
+you know all the other ones that may be
+
+00:04:23.759 --> 00:04:24.639
+out there
+
+00:04:24.639 --> 00:04:29.120
+um yeah for sure uh
+
+00:04:29.120 --> 00:04:32.160
+yeah so so I'll jump in on there
+
+00:04:32.160 --> 00:04:34.720
+on that point too I I have a lot of
+
+00:04:34.720 --> 00:04:36.000
+energy for
+
+00:04:36.000 --> 00:04:39.840
+um for helping people get together um
+
+00:04:39.840 --> 00:04:43.440
+adam uh uh from melpa
+
+00:04:43.440 --> 00:04:46.880
+suggested uh I should do some twitch
+
+00:04:46.880 --> 00:04:48.880
+stuff I'll probably try that I have put
+
+00:04:48.880 --> 00:04:50.320
+a couple things out there and even a few
+
+00:04:50.320 --> 00:04:51.360
+people came by
+
+00:04:51.360 --> 00:04:53.919
+so I I think I would agree the interest
+
+00:04:53.919 --> 00:04:54.840
+is there
+
+00:04:54.840 --> 00:04:57.600
+and I definitely would love to spend
+
+00:04:57.600 --> 00:04:59.120
+that time talking to people that want to
+
+00:04:59.120 --> 00:05:00.000
+organize
+
+00:05:00.000 --> 00:05:01.759
+as well as people that are interested in
+
+00:05:01.759 --> 00:05:04.160
+just learning to use Emacs as an editor
+
+00:05:04.160 --> 00:05:07.120
+I think it's um I think it's a fantastic
+
+00:05:07.120 --> 00:05:08.880
+journey speaking for myself as somebody
+
+00:05:08.880 --> 00:05:10.560
+that um I don't
+
+00:05:10.560 --> 00:05:12.080
+always have the right keystrokes right
+
+00:05:12.080 --> 00:05:13.759
+at hand sometimes yeah
+
+00:05:13.759 --> 00:05:16.160
+my mentor in in computer programming is
+
+00:05:16.160 --> 00:05:17.840
+david dyer bennett and
+
+00:05:17.840 --> 00:05:21.440
+um I started uh apprenticing with him
+
+00:05:21.440 --> 00:05:24.800
+as when he was a freelancer um
+
+00:05:24.800 --> 00:05:28.160
+many decades ago now and
+
+00:05:28.160 --> 00:05:31.919
+you know he has a mantra that is uh
+
+00:05:31.919 --> 00:05:33.440
+you know I can do that in about five
+
+00:05:33.440 --> 00:05:35.280
+minutes if it's
+
+00:05:35.280 --> 00:05:37.840
+the right five minutes and and that's
+
+00:05:37.840 --> 00:05:39.919
+kind of the story of my life
+
+00:05:39.919 --> 00:05:43.360
+um and Emacs is just a tool to
+
+00:05:43.360 --> 00:05:45.759
+get the right five minutes more often no
+
+00:05:45.759 --> 00:05:46.560
+matter
+
+00:05:46.560 --> 00:05:48.720
+you know how can how cooperative the
+
+00:05:48.720 --> 00:05:49.600
+fingers are
+
+00:05:49.600 --> 00:05:52.400
+or or whether the ideas are free-flowing
+
+00:05:52.400 --> 00:05:52.800
+you know
+
+00:05:52.800 --> 00:05:55.680
+and getting that right environment is a
+
+00:05:55.680 --> 00:05:56.800
+lot of things for a lot of different
+
+00:05:56.800 --> 00:05:58.720
+people a lot of things to us on a
+
+00:05:58.720 --> 00:06:00.639
+different day
+
+00:06:00.639 --> 00:06:04.080
+um so yeah I have a ton of energy
+
+00:06:04.080 --> 00:06:08.400
+around you know hey let's talk more
+
+00:06:08.400 --> 00:06:11.919
+absolutely um yes so
+
+00:06:11.919 --> 00:06:14.560
+you know I think we are everyone's
+
+00:06:14.560 --> 00:06:15.600
+pretty energetic
+
+00:06:15.600 --> 00:06:18.080
+oh before I forget I know I will forget
+
+00:06:18.080 --> 00:06:18.639
+um
+
+00:06:18.639 --> 00:06:20.800
+to speakers uh those of you who are
+
+00:06:20.800 --> 00:06:22.400
+still watching right now
+
+00:06:22.400 --> 00:06:24.720
+um I would very much appreciate it if
+
+00:06:24.720 --> 00:06:26.240
+you could send us you know
+
+00:06:26.240 --> 00:06:27.520
+any of the materials you know for
+
+00:06:27.520 --> 00:06:29.919
+example the slides or any links and
+
+00:06:29.919 --> 00:06:31.600
+resources to us
+
+00:06:31.600 --> 00:06:34.880
+so we could add them to to the
+
+00:06:34.880 --> 00:06:38.880
+EmacsConf wiki
+
+00:06:38.880 --> 00:06:41.840
+or you can add them directly yourself if
+
+00:06:41.840 --> 00:06:43.759
+you go to Emacsconf.org
+
+00:06:43.759 --> 00:06:46.400
+edit there's instructions for basically
+
+00:06:46.400 --> 00:06:47.120
+anyone
+
+00:06:47.120 --> 00:06:50.800
+to edit the wiki if they like to um
+
+00:06:50.800 --> 00:06:54.000
+yes so now uh back to getting
+
+00:06:54.000 --> 00:06:57.039
+uh getting back to corwin's point um and
+
+00:06:57.039 --> 00:06:58.800
+also what sasha mentioned
+
+00:06:58.800 --> 00:07:01.520
+so um you know maybe one EmacsConf
+
+00:07:01.520 --> 00:07:02.800
+might be enough
+
+00:07:02.800 --> 00:07:06.319
+um for us for one year or for me but
+
+00:07:06.319 --> 00:07:09.840
+um in terms of Emacs related events
+
+00:07:09.840 --> 00:07:14.160
+um so this this conference was
+
+00:07:14.160 --> 00:07:17.360
+uh is like you know mainly about Emacs
+
+00:07:17.360 --> 00:07:20.960
+um but it's also in my opinion a
+
+00:07:20.960 --> 00:07:22.319
+showcase of
+
+00:07:22.319 --> 00:07:24.160
+um just how much you can do with free
+
+00:07:24.160 --> 00:07:27.440
+software Emacs itself is free software
+
+00:07:27.440 --> 00:07:30.800
+but um also all the tools that we used
+
+00:07:30.800 --> 00:07:34.400
+um these two days for like uh streaming
+
+00:07:34.400 --> 00:07:37.759
+for you know playing back to videos um
+
+00:07:37.759 --> 00:07:39.840
+yeah it's all free software and anyone
+
+00:07:39.840 --> 00:07:41.440
+can use and improve them
+
+00:07:41.440 --> 00:07:43.840
+so um one thing that I wanted to put out
+
+00:07:43.840 --> 00:07:45.440
+there before I forget
+
+00:07:45.440 --> 00:07:48.960
+is that um so we have these couple of
+
+00:07:48.960 --> 00:07:50.000
+servers set up
+
+00:07:50.000 --> 00:07:52.960
+for streaming for imax conf and I would
+
+00:07:52.960 --> 00:07:54.639
+be very much happy to
+
+00:07:54.639 --> 00:07:59.039
+um help any other group basically
+
+00:07:59.039 --> 00:08:00.319
+you know look into using our
+
+00:08:00.319 --> 00:08:03.199
+infrastructure for
+
+00:08:03.199 --> 00:08:06.720
+doing their own live event using only
+
+00:08:06.720 --> 00:08:09.360
+free software so if you are interested
+
+00:08:09.360 --> 00:08:10.080
+in that
+
+00:08:10.080 --> 00:08:12.639
+please feel free to ping me either in
+
+00:08:12.639 --> 00:08:14.879
+the max conf channel on freenode
+
+00:08:14.879 --> 00:08:17.840
+um where my nick is bandali or just
+
+00:08:17.840 --> 00:08:18.720
+email me at
+
+00:08:18.720 --> 00:08:21.440
+bandeli gnu.org um I would be happy to
+
+00:08:21.440 --> 00:08:22.800
+help you with that
+
+00:08:22.800 --> 00:08:29.199
+um yeah I'll defer to others
+
+00:08:29.199 --> 00:08:31.440
+we'll jump in and jump in there george I
+
+00:08:31.440 --> 00:08:34.080
+mean
+
+00:08:34.080 --> 00:08:35.760
+it's okay you've been you've been quiet
+
+00:08:35.760 --> 00:08:37.839
+for too long now I I have this I have to
+
+00:08:37.839 --> 00:08:39.279
+pick on people when there's more than
+
+00:08:39.279 --> 00:08:40.640
+three people in a group
+
+00:08:40.640 --> 00:08:42.000
+you know somehow that's the point of
+
+00:08:42.000 --> 00:08:44.000
+wait I'm afraid somebody gets shy
+
+00:08:44.000 --> 00:08:47.920
+and when it's not me I I you know
+
+00:08:47.920 --> 00:08:51.440
+um so you know I I
+
+00:08:51.440 --> 00:08:54.080
+uh yeah I can't thank you enough for the
+
+00:08:54.080 --> 00:08:55.360
+for all you've done I mean I have a
+
+00:08:55.360 --> 00:08:57.040
+whole list of thank yous here that I
+
+00:08:57.040 --> 00:08:58.320
+could just start reading
+
+00:08:58.320 --> 00:09:01.360
+uh but but they you know they start with
+
+00:09:01.360 --> 00:09:02.880
+you and that was the abbreviated list I
+
+00:09:02.880 --> 00:09:04.480
+gave at the beginning of the first talk
+
+00:09:04.480 --> 00:09:05.200
+right
+
+00:09:05.200 --> 00:09:06.800
+I just appreciate the sense of
+
+00:09:06.800 --> 00:09:08.399
+encouragement and
+
+00:09:08.399 --> 00:09:12.320
+openness that you bring to it I think
+
+00:09:12.320 --> 00:09:15.519
+you know we share uh
+
+00:09:15.519 --> 00:09:17.120
+taking inspiration from a lot of people
+
+00:09:17.120 --> 00:09:19.279
+in the community and want to give that
+
+00:09:19.279 --> 00:09:20.800
+back and that's a great thing to have in
+
+00:09:20.800 --> 00:09:21.440
+common
+
+00:09:21.440 --> 00:09:24.880
+around any any volunteer
+
+00:09:24.880 --> 00:09:27.920
+thank you it's a it's a pleasure um to
+
+00:09:27.920 --> 00:09:29.040
+be part of this
+
+00:09:29.040 --> 00:09:31.920
+awesome community around Emacs um this
+
+00:09:31.920 --> 00:09:33.600
+piece of free software that has been
+
+00:09:33.600 --> 00:09:36.800
+around for more than 40 years as
+
+00:09:36.800 --> 00:09:38.720
+impressive as that is I think more
+
+00:09:38.720 --> 00:09:41.440
+impressive is a community around it
+
+00:09:41.440 --> 00:09:44.720
+and all the people people around it
+
+00:09:44.720 --> 00:09:52.640
+um yeah definitely
+
+00:09:52.640 --> 00:09:54.560
+sorry I'm just smiling because I've
+
+00:09:54.560 --> 00:09:56.240
+managed to catch a glimpse of the first
+
+00:09:56.240 --> 00:09:57.760
+question that we have
+
+00:09:57.760 --> 00:10:00.560
+and I'm trying to suit myself literally
+
+00:10:00.560 --> 00:10:02.560
+to know how to answer this question
+
+00:10:02.560 --> 00:10:04.640
+and I'm not exactly sure how to do this
+
+00:10:04.640 --> 00:10:11.040
+to the best of my ability so
+
+00:10:11.040 --> 00:10:12.880
+I don't know I think this at this point
+
+00:10:12.880 --> 00:10:14.240
+we would like to remind all of our
+
+00:10:14.240 --> 00:10:15.680
+viewers of the
+
+00:10:15.680 --> 00:10:18.800
+conduct guidelines
+
+00:10:18.800 --> 00:10:22.800
+try not to objectify our speakers
+
+00:10:22.800 --> 00:10:24.959
+yeah that's a generally good point to
+
+00:10:24.959 --> 00:10:25.920
+remember
+
+00:10:25.920 --> 00:10:29.680
+um even in the closing remarks
+
+00:10:29.680 --> 00:10:31.680
+because that's that's a thing I do and I
+
+00:10:31.680 --> 00:10:34.000
+just wa I want to go on record saying I
+
+00:10:34.000 --> 00:10:34.320
+am
+
+00:10:34.320 --> 00:10:36.399
+ready to take it on any live stream any
+
+00:10:36.399 --> 00:10:38.880
+day of the week please call me on that
+
+00:10:38.880 --> 00:10:40.720
+it's always you it's always a new
+
+00:10:40.720 --> 00:10:42.320
+experience for somebody
+
+00:10:42.320 --> 00:10:44.399
+I've definitely been across lines that
+
+00:10:44.399 --> 00:10:46.160
+embarrass me before and
+
+00:10:46.160 --> 00:10:48.320
+I want to know about that thank you in
+
+00:10:48.320 --> 00:10:50.320
+advance
+
+00:10:50.320 --> 00:10:52.800
+okay so do you want to do like someone's
+
+00:10:52.800 --> 00:10:53.519
+official
+
+00:10:53.519 --> 00:10:55.760
+closing of people so closing up stuff
+
+00:10:55.760 --> 00:10:56.560
+just in case
+
+00:10:56.560 --> 00:10:58.000
+people want to know what the next steps
+
+00:10:58.000 --> 00:10:59.839
+are and then we can do all the fun
+
+00:10:59.839 --> 00:11:02.800
+questions and hanging out thing
+
+00:11:02.800 --> 00:11:07.040
+okay um right so yeah
+
+00:11:07.040 --> 00:11:09.680
+okay following up um emax meetups and
+
+00:11:09.680 --> 00:11:11.279
+mention those uh if you want to keep
+
+00:11:11.279 --> 00:11:12.640
+connecting with people you can do that
+
+00:11:12.640 --> 00:11:14.079
+throughout the year
+
+00:11:14.079 --> 00:11:16.240
+we'll figure out some kind of like list
+
+00:11:16.240 --> 00:11:18.399
+on Emacs wiki or whatever that will list
+
+00:11:18.399 --> 00:11:19.600
+the different meetups or you can just
+
+00:11:19.600 --> 00:11:21.839
+search for emats meetup in your area
+
+00:11:21.839 --> 00:11:23.360
+but of course since many of them have
+
+00:11:23.360 --> 00:11:25.680
+online meetups now um Emacs news will
+
+00:11:25.680 --> 00:11:27.600
+mention those whenever people remember
+
+00:11:27.600 --> 00:11:29.600
+to tell me in advance
+
+00:11:29.600 --> 00:11:31.920
+um okay so Emacs meetups that's the
+
+00:11:31.920 --> 00:11:33.440
+thing collaborative pad
+
+00:11:33.440 --> 00:11:36.160
+the either pad isn't great there is a
+
+00:11:36.160 --> 00:11:38.079
+meta discussion so if you want to add
+
+00:11:38.079 --> 00:11:40.000
+things that worked well or make notes of
+
+00:11:40.000 --> 00:11:41.760
+things that could work even better next
+
+00:11:41.760 --> 00:11:42.560
+year
+
+00:11:42.560 --> 00:11:44.880
+then write it while it's fresh we'll
+
+00:11:44.880 --> 00:11:46.720
+make a copy and we'll post it
+
+00:11:46.720 --> 00:11:49.440
+to the wiki somewhere like we did last
+
+00:11:49.440 --> 00:11:50.160
+year
+
+00:11:50.160 --> 00:11:52.000
+we can also copy and paste the links
+
+00:11:52.000 --> 00:11:53.680
+from the individual sections
+
+00:11:53.680 --> 00:11:56.079
+into top pages so you can follow the
+
+00:11:56.079 --> 00:11:58.240
+links from there
+
+00:11:58.240 --> 00:12:00.240
+and if you spoke at a conference and you
+
+00:12:00.240 --> 00:12:01.680
+would like to make it easier for people
+
+00:12:01.680 --> 00:12:02.880
+to follow up with you
+
+00:12:02.880 --> 00:12:04.560
+please let us know your follow-up
+
+00:12:04.560 --> 00:12:06.079
+information and we can add it to that
+
+00:12:06.079 --> 00:12:07.040
+page also
+
+00:12:07.040 --> 00:12:09.600
+or it's a wiki you can edit yourself if
+
+00:12:09.600 --> 00:12:11.120
+you have questions when the videos
+
+00:12:11.120 --> 00:12:12.079
+finally come out
+
+00:12:12.079 --> 00:12:13.519
+when you watch them after the videos
+
+00:12:13.519 --> 00:12:15.360
+have come out then you can look at the
+
+00:12:15.360 --> 00:12:17.120
+page for follow-up information
+
+00:12:17.120 --> 00:12:20.000
+and subscribe to the mailing list low
+
+00:12:20.000 --> 00:12:22.000
+traffic you can get updates like when we
+
+00:12:22.000 --> 00:12:24.480
+release the photos I release the videos
+
+00:12:24.480 --> 00:12:26.320
+and uh and they're ready for you to
+
+00:12:26.320 --> 00:12:28.800
+check out so that's what I got for
+
+00:12:28.800 --> 00:12:32.160
+next steps awesome
+
+00:12:32.160 --> 00:12:34.880
+thank you sasha um do one of you guys
+
+00:12:34.880 --> 00:12:35.680
+want to do
+
+00:12:35.680 --> 00:12:39.760
+the um the thanks or should I do them
+
+00:12:39.760 --> 00:12:42.800
+no read to you so good
+
+00:12:42.800 --> 00:12:44.480
+I was gonna I was gonna say the same
+
+00:12:44.480 --> 00:12:46.560
+thing you are so you go ahead
+
+00:12:46.560 --> 00:12:50.240
+okay
+
+00:12:50.240 --> 00:12:51.920
+thinking that that was an awesome thing
+
+00:12:51.920 --> 00:12:53.760
+for for ramen to do if you would be
+
+00:12:53.760 --> 00:12:57.360
+willing
+
+00:12:57.360 --> 00:12:59.120
+yeah you're the lead organizer you get
+
+00:12:59.120 --> 00:13:00.959
+stuck with other fun jobs
+
+00:13:00.959 --> 00:13:05.440
+all the difficult stuff yeah
+
+00:13:05.440 --> 00:13:07.360
+yeah you don't know dating upwards read
+
+00:13:07.360 --> 00:13:08.720
+my crap if you don't want to
+
+00:13:08.720 --> 00:13:12.320
+but um oh no that's
+
+00:13:12.320 --> 00:13:14.959
+I definitely want to read that corbin um
+
+00:13:14.959 --> 00:13:16.399
+yeah I'll pull it up
+
+00:13:16.399 --> 00:13:20.399
+but um yeah before we get into that um
+
+00:13:20.399 --> 00:13:23.279
+I want to read what we have here so uh
+
+00:13:23.279 --> 00:13:25.040
+thank you very much to the free software
+
+00:13:25.040 --> 00:13:26.079
+foundation
+
+00:13:26.079 --> 00:13:29.040
+especially the tech team for lending us
+
+00:13:29.040 --> 00:13:29.600
+allowing
+
+00:13:29.600 --> 00:13:31.760
+us to use this very big blue button
+
+00:13:31.760 --> 00:13:32.720
+instance
+
+00:13:32.720 --> 00:13:35.839
+that we've used for live calls and um
+
+00:13:35.839 --> 00:13:38.000
+live q a with so many of the speakers
+
+00:13:38.000 --> 00:13:39.199
+this year
+
+00:13:39.199 --> 00:13:42.959
+um thank you so much uh shout out to the
+
+00:13:42.959 --> 00:13:43.760
+tech team
+
+00:13:43.760 --> 00:13:47.040
+um especially reuben who does a lot
+
+00:13:47.040 --> 00:13:50.240
+especially with big blue button um
+
+00:13:50.240 --> 00:13:53.199
+and like streaming in general um but
+
+00:13:53.199 --> 00:13:53.680
+also
+
+00:13:53.680 --> 00:13:55.519
+the other members of the tech team like
+
+00:13:55.519 --> 00:13:57.360
+ian andrew and michael
+
+00:13:57.360 --> 00:14:01.519
+thank you all um next stop volunteers
+
+00:14:01.519 --> 00:14:05.920
+bobbin david bremner uh dave o'toole for
+
+00:14:05.920 --> 00:14:09.199
+taking um on basically writing
+
+00:14:09.199 --> 00:14:10.240
+descriptive text
+
+00:14:10.240 --> 00:14:15.279
+in our #emacsconf-accessible channel
+
+00:14:15.279 --> 00:14:18.480
+along with uh joe corneli and
+
+00:14:18.480 --> 00:14:21.920
+um sea bass or sea bass um
+
+00:14:21.920 --> 00:14:25.199
+basically for transcribing talks
+
+00:14:25.199 --> 00:14:27.950
+um in a way live um
+
+00:14:27.950 --> 00:14:29.120
+[Music]
+
+00:14:29.120 --> 00:14:32.320
+yes thank you to corwin of course
+
+00:14:32.320 --> 00:14:35.600
+uh thank you to carl voight uh thank you
+
+00:14:35.600 --> 00:14:35.920
+to
+
+00:14:35.920 --> 00:14:39.519
+sasha and leo very much um
+
+00:14:39.519 --> 00:14:42.639
+for all your hard work um this event
+
+00:14:42.639 --> 00:14:44.240
+literally wouldn't have been possible
+
+00:14:44.240 --> 00:14:45.680
+without all of your uh
+
+00:14:45.680 --> 00:14:49.279
+guys's helps um so thank you
+
+00:14:49.279 --> 00:14:51.760
+and as I told you in the chat you know
+
+00:14:51.760 --> 00:14:52.639
+you would have been
+
+00:14:52.639 --> 00:14:54.800
+really happy to one-man army the entire
+
+00:14:54.800 --> 00:14:58.160
+thing if we hadn't been there so
+
+00:14:58.160 --> 00:15:00.560
+I I don't know I may have been able to
+
+00:15:00.560 --> 00:15:01.839
+but I definitely would have been happy
+
+00:15:01.839 --> 00:15:02.320
+to
+
+00:15:02.320 --> 00:15:05.760
+I'm much more happier this way so um
+
+00:15:05.760 --> 00:15:07.600
+I guess it's the moment when we ask you
+
+00:15:07.600 --> 00:15:09.519
+uh your energy level is it at
+
+00:15:09.519 --> 00:15:12.560
+50 is it at 40 can you give us an
+
+00:15:12.560 --> 00:15:13.120
+estimate
+
+00:15:13.120 --> 00:15:16.399
+roughly um yeah which is what uh
+
+00:15:16.399 --> 00:15:19.120
+corbin had mentioned um I think I'm at a
+
+00:15:19.120 --> 00:15:19.519
+good
+
+00:15:19.519 --> 00:15:22.320
+like 50 or 60 percent um it's just
+
+00:15:22.320 --> 00:15:23.040
+blended
+
+00:15:23.040 --> 00:15:24.800
+yeah definitely more than I can say last
+
+00:15:24.800 --> 00:15:27.199
+for last year
+
+00:15:27.199 --> 00:15:30.320
+but yes thank you um
+
+00:15:30.320 --> 00:15:33.519
+thank you to um all of the
+
+00:15:33.519 --> 00:15:36.720
+our awesome audience members um everyone
+
+00:15:36.720 --> 00:15:39.279
+who participated in any way
+
+00:15:39.279 --> 00:15:42.880
+in the conference also
+
+00:15:42.880 --> 00:15:44.959
+of course a big thank you to all the
+
+00:15:44.959 --> 00:15:46.399
+awesome speakers
+
+00:15:46.399 --> 00:15:48.720
+for submitting all of these amazing
+
+00:15:48.720 --> 00:15:49.440
+talks
+
+00:15:49.440 --> 00:15:52.320
+um on a very wide range of topics from a
+
+00:15:52.320 --> 00:15:53.120
+wide
+
+00:15:53.120 --> 00:15:56.160
+range of backgrounds it was just awesome
+
+00:15:56.160 --> 00:15:59.680
+thank you um and now corbin do you want
+
+00:15:59.680 --> 00:16:03.600
+to read over your text or should I do it
+
+00:16:03.600 --> 00:16:07.759
+it's entirely up to you I mean I
+
+00:16:07.759 --> 00:16:09.920
+I would have to find it again but I will
+
+00:16:09.920 --> 00:16:11.759
+I just have to bring the right Emacs to
+
+00:16:11.759 --> 00:16:12.720
+the front here
+
+00:16:12.720 --> 00:16:16.240
+my story of today yeah sure go forward
+
+00:16:16.240 --> 00:16:18.959
+um I've already talked enough so I kind
+
+00:16:18.959 --> 00:16:20.480
+of like the idea of putting words in
+
+00:16:20.480 --> 00:16:20.880
+your mouth
+
+00:16:20.880 --> 00:16:23.600
+honestly if you feel good saying go go
+
+00:16:23.600 --> 00:16:25.440
+for it and that'll be good for me
+
+00:16:25.440 --> 00:16:27.759
+or if we want to segue into random next
+
+00:16:27.759 --> 00:16:29.680
+conversation I'm up for that too but I'm
+
+00:16:29.680 --> 00:16:30.720
+conscious of
+
+00:16:30.720 --> 00:16:33.839
+other people with uh um
+
+00:16:33.839 --> 00:16:35.600
+young friends wandering about the house
+
+00:16:35.600 --> 00:16:37.120
+and beginning to thump on things
+
+00:16:37.120 --> 00:16:39.360
+I got it I probably didn't what have you
+
+00:16:39.360 --> 00:16:41.440
+pasted me before
+
+00:16:41.440 --> 00:16:44.399
+right that one is that what you wanted
+
+00:16:44.399 --> 00:16:44.800
+yeah
+
+00:16:44.800 --> 00:16:46.399
+I saw the question in there about
+
+00:16:46.399 --> 00:16:48.399
+windows that's definitely a subject I'm
+
+00:16:48.399 --> 00:16:50.320
+happy to talk about I think others on
+
+00:16:50.320 --> 00:16:51.519
+the call have gotten
+
+00:16:51.519 --> 00:16:54.000
+uh gotten some of that in in as part of
+
+00:16:54.000 --> 00:16:55.600
+other conversations
+
+00:16:55.600 --> 00:16:58.800
+um in brief summary it's kind of a
+
+00:16:58.800 --> 00:16:59.839
+necessity thing
+
+00:16:59.839 --> 00:17:03.040
+it's um
+
+00:17:03.040 --> 00:17:06.160
+it's it's complicated you know it's but
+
+00:17:06.160 --> 00:17:09.280
+I I guess I I can say uh
+
+00:17:09.280 --> 00:17:11.760
+I'd ask you not to not to make free
+
+00:17:11.760 --> 00:17:13.280
+software purity tests right
+
+00:17:13.280 --> 00:17:17.439
+you know I um need windows right now
+
+00:17:17.439 --> 00:17:19.839
+and so that has to be fine because I
+
+00:17:19.839 --> 00:17:33.840
+want to be able to give back
+
+00:17:33.840 --> 00:17:35.360
+I'm looking at it I had the wrong part
+
+00:17:35.360 --> 00:17:48.799
+of the buffer open I think karen
+
+00:17:48.799 --> 00:17:56.799
+let me briefly say um
+
+00:17:56.799 --> 00:17:58.559
+we're using okay so I can I can talk
+
+00:17:58.559 --> 00:18:00.960
+about crdt we experimented with it um
+
+00:18:00.960 --> 00:18:04.320
+and I quite a bit and then eric and I
+
+00:18:04.320 --> 00:18:07.039
+significantly further we uh messed up
+
+00:18:07.039 --> 00:18:08.880
+some of our slides significantly getting
+
+00:18:08.880 --> 00:18:10.480
+a little too ambitious with having
+
+00:18:10.480 --> 00:18:12.080
+multiple people editing it
+
+00:18:12.080 --> 00:18:14.400
+and letting everybody go to work on the
+
+00:18:14.400 --> 00:18:15.360
+presentations
+
+00:18:15.360 --> 00:18:17.919
+so we wasted we found many different
+
+00:18:17.919 --> 00:18:19.679
+ways to use Emacs to waste time and
+
+00:18:19.679 --> 00:18:21.360
+preparing for emax conf
+
+00:18:21.360 --> 00:18:23.840
+but I'm pretty confident we have we have
+
+00:18:23.840 --> 00:18:25.520
+all the good parts saved and
+
+00:18:25.520 --> 00:18:28.480
+we'll just need to pull those together
+
+00:18:28.480 --> 00:18:28.880
+uh
+
+00:18:28.880 --> 00:18:30.720
+for you back into a single or more file
+
+00:18:30.720 --> 00:18:33.600
+that we can put up with those videos
+
+00:18:33.600 --> 00:18:36.000
+thanks again for bearing with us um
+
+00:18:36.000 --> 00:18:37.919
+hopefully my point about
+
+00:18:37.919 --> 00:18:54.640
+Emacs being there for you came across
+
+00:18:54.640 --> 00:18:56.480
+oh yes I can scroll I can scroll back
+
+00:18:56.480 --> 00:18:57.679
+down to your text if you like
+
+00:18:57.679 --> 00:19:04.320
+okay here we go
+
+00:19:04.320 --> 00:19:06.559
+uh we're figuring out carwin here's your
+
+00:19:06.559 --> 00:19:08.240
+text
+
+00:19:08.240 --> 00:19:10.080
+if you want to read it otherwise I'll be
+
+00:19:10.080 --> 00:19:11.600
+plenty happy to read it if you want me
+
+00:19:11.600 --> 00:19:12.480
+to
+
+00:19:12.480 --> 00:19:15.919
+take it all right
+
+00:19:15.919 --> 00:19:18.400
+obviously you had to ask the esl learner
+
+00:19:18.400 --> 00:19:20.480
+so english as a second language to read
+
+00:19:20.480 --> 00:19:24.000
+a chunk of text so thank you for this
+
+00:19:24.000 --> 00:19:28.960
+all right okay so uh this is my call win
+
+00:19:28.960 --> 00:19:32.400
+so Emacs is very very complicated
+
+00:19:32.400 --> 00:19:35.440
+and using computer is hard with Emacs we
+
+00:19:35.440 --> 00:19:37.200
+have an ideal opportunity to learn
+
+00:19:37.200 --> 00:19:40.160
+from our errors to take on hard work
+
+00:19:40.160 --> 00:19:41.600
+with diverse groups
+
+00:19:41.600 --> 00:19:44.160
+and to effect lasting solutions to make
+
+00:19:44.160 --> 00:19:44.960
+Emacs
+
+00:19:44.960 --> 00:19:47.600
+and thereby any word of software thing
+
+00:19:47.600 --> 00:19:48.320
+in practically
+
+00:19:48.320 --> 00:19:50.799
+any human and spoken language easier to
+
+00:19:50.799 --> 00:19:52.320
+learn and to use
+
+00:19:52.320 --> 00:19:55.520
+forever life doesn't come with warning
+
+00:19:55.520 --> 00:19:56.080
+labels
+
+00:19:56.080 --> 00:19:59.039
+or margin notes we have a blank map and
+
+00:19:59.039 --> 00:20:00.799
+an uncertain number of batteries for the
+
+00:20:00.799 --> 00:20:01.840
+torch
+
+00:20:01.840 --> 00:20:04.159
+but there's light in the darkness it's
+
+00:20:04.159 --> 00:20:05.200
+freedom
+
+00:20:05.200 --> 00:20:07.200
+it's the idea of giving to people
+
+00:20:07.200 --> 00:20:12.240
+something that cannot be taken away
+
+00:20:12.240 --> 00:20:14.320
+ultraman to say that that was very
+
+00:20:14.320 --> 00:20:15.440
+beautiful uh
+
+00:20:15.440 --> 00:20:21.120
+thank you corbin for writing that
+
+00:20:21.120 --> 00:20:26.960
+okay so uh are there any questions
+
+00:20:26.960 --> 00:20:32.159
+oh muted
+
+00:20:32.159 --> 00:20:34.240
+I still can't I'm muted I think I'm
+
+00:20:34.240 --> 00:20:36.400
+sorry
+
+00:20:36.400 --> 00:20:40.559
+um what I said was thank you uh
+
+00:20:40.559 --> 00:20:45.600
+just thanks
+
+00:20:45.600 --> 00:20:48.640
+I just this community has really been
+
+00:20:48.640 --> 00:20:49.760
+there for me it's
+
+00:20:49.760 --> 00:20:56.080
+hard to learn and need
+
+00:20:56.080 --> 00:20:58.080
+so yeah I keep laughing because I I see
+
+00:20:58.080 --> 00:21:00.000
+things coming through the chat and I do
+
+00:21:00.000 --> 00:21:01.600
+not know how to react visually
+
+00:21:01.600 --> 00:21:02.960
+I'm not used to getting those types of
+
+00:21:02.960 --> 00:21:04.640
+messages
+
+00:21:04.640 --> 00:21:08.000
+it is very upsetting I don't know which
+
+00:21:08.000 --> 00:21:11.120
+one to use I'm using my english as well
+
+00:21:11.120 --> 00:21:13.120
+I'm intentionally not looking over there
+
+00:21:13.120 --> 00:21:14.320
+because I'll just get dragged into
+
+00:21:14.320 --> 00:21:16.799
+conversation and then this we will be on
+
+00:21:16.799 --> 00:21:18.080
+live stream all night I don't know if
+
+00:21:18.080 --> 00:21:19.600
+you know me at all in fact I
+
+00:21:19.600 --> 00:21:21.679
+I my apologies you probably don't hi my
+
+00:21:21.679 --> 00:21:24.080
+name is corwin I like to talk
+
+00:21:24.080 --> 00:21:27.039
+I like to get you excited about ideas
+
+00:21:27.039 --> 00:21:28.720
+that I think we agree about
+
+00:21:28.720 --> 00:21:31.440
+so we can get somewhere solving an
+
+00:21:31.440 --> 00:21:33.200
+important problem and there's a lot of
+
+00:21:33.200 --> 00:21:35.520
+important problems in the world so
+
+00:21:35.520 --> 00:21:37.840
+I have been living in a devil's paradise
+
+00:21:37.840 --> 00:21:39.600
+throughout covet as people are sitting
+
+00:21:39.600 --> 00:21:40.159
+at home
+
+00:21:40.159 --> 00:21:42.799
+and really frustrated especially in the
+
+00:21:42.799 --> 00:21:44.480
+united states where I live
+
+00:21:44.480 --> 00:21:46.640
+about political and social justice
+
+00:21:46.640 --> 00:21:47.520
+issues you
+
+00:21:47.520 --> 00:21:49.760
+probably heard of the town where I live
+
+00:21:49.760 --> 00:21:50.799
+recently
+
+00:21:50.799 --> 00:21:54.559
+as a direct um
+
+00:21:54.559 --> 00:21:58.000
+uh kind of crucible there right
+
+00:21:58.000 --> 00:22:02.400
+um we are a troubled people
+
+00:22:02.400 --> 00:22:04.559
+we're arguing about freedom it's to the
+
+00:22:04.559 --> 00:22:06.320
+point where it's hard to put those words
+
+00:22:06.320 --> 00:22:07.280
+down
+
+00:22:07.280 --> 00:22:10.400
+without assuming people are gonna write
+
+00:22:10.400 --> 00:22:12.320
+you off as a shyster
+
+00:22:12.320 --> 00:22:15.600
+that's insanity we know exactly what
+
+00:22:15.600 --> 00:22:16.640
+that means
+
+00:22:16.640 --> 00:22:20.480
+especially in this community we uh
+
+00:22:20.480 --> 00:22:23.679
+we're here because we want to
+
+00:22:23.679 --> 00:22:26.640
+um because we want to make sure that
+
+00:22:26.640 --> 00:22:27.200
+some
+
+00:22:27.200 --> 00:22:29.280
+part of what the potential that
+
+00:22:29.280 --> 00:22:30.880
+technology offers
+
+00:22:30.880 --> 00:22:32.880
+is indelibly written out there that
+
+00:22:32.880 --> 00:22:34.320
+nobody can take away
+
+00:22:34.320 --> 00:22:36.799
+that's the bottom line on that that that
+
+00:22:36.799 --> 00:22:38.240
+closing thought I mean that's where I'd
+
+00:22:38.240 --> 00:22:40.240
+leave you at with Emacs conference
+
+00:22:40.240 --> 00:22:41.919
+you want to make stuff that other people
+
+00:22:41.919 --> 00:22:43.280
+can't take away because that's where
+
+00:22:43.280 --> 00:22:44.320
+freedom
+
+00:22:44.320 --> 00:22:48.320
+is hiding
+
+00:22:48.320 --> 00:22:51.360
+thank you and I agree there is something
+
+00:22:51.360 --> 00:22:52.799
+to be said about
+
+00:22:52.799 --> 00:22:55.039
+um you know this idea of having some
+
+00:22:55.039 --> 00:22:56.080
+piece of software
+
+00:22:56.080 --> 00:22:59.360
+or an art form to um
+
+00:22:59.360 --> 00:23:01.679
+setting it free to to live on
+
+00:23:01.679 --> 00:23:03.360
+indefinitely into the future and for
+
+00:23:03.360 --> 00:23:04.400
+everyone else
+
+00:23:04.400 --> 00:23:06.320
+um and for people who may have not
+
+00:23:06.320 --> 00:23:07.600
+already even been born
+
+00:23:07.600 --> 00:23:09.679
+to you know at some point someday
+
+00:23:09.679 --> 00:23:11.280
+discover it and
+
+00:23:11.280 --> 00:23:13.840
+um you know start using it and making it
+
+00:23:13.840 --> 00:23:15.039
+even better
+
+00:23:15.039 --> 00:23:18.880
+um yeah so I think on that note
+
+00:23:18.880 --> 00:23:21.120
+this might be a good note to conclude on
+
+00:23:21.120 --> 00:23:23.039
+what you folks think
+
+00:23:23.039 --> 00:23:24.720
+I always like to go around the room one
+
+00:23:24.720 --> 00:23:26.640
+time but again I'll keep everybody on
+
+00:23:26.640 --> 00:23:28.240
+the phone forever so don't
+
+00:23:28.240 --> 00:23:30.960
+don't don't use my definitely I have to
+
+00:23:30.960 --> 00:23:31.860
+be seconded
+
+00:23:31.860 --> 00:23:33.840
+[Laughter]
+
+00:23:33.840 --> 00:23:38.000
+okay um leo sasha
+
+00:23:38.000 --> 00:23:40.240
+uh I was just wondering if we'd answered
+
+00:23:40.240 --> 00:23:41.760
+as many questions as we could
+
+00:23:41.760 --> 00:23:43.840
+from the people because I believe we've
+
+00:23:43.840 --> 00:23:45.440
+answered some of them and sasha has been
+
+00:23:45.440 --> 00:23:47.520
+kind enough to answer them in line
+
+00:23:47.520 --> 00:23:49.360
+but maybe we wanted to take some of them
+
+00:23:49.360 --> 00:23:50.960
+live especially some of the later ones
+
+00:23:50.960 --> 00:23:52.080
+just to
+
+00:23:52.080 --> 00:23:54.320
+send people off with a feeling that we
+
+00:23:54.320 --> 00:23:56.240
+answered to the very last question that
+
+00:23:56.240 --> 00:23:58.640
+they had
+
+00:23:58.640 --> 00:24:01.360
+and until the sound over my head gets
+
+00:24:01.360 --> 00:24:03.360
+too loud and I have to mute I'll be here
+
+00:24:03.360 --> 00:24:04.400
+and then I'll uh
+
+00:24:04.400 --> 00:24:07.039
+be here if I can convince the loud ones
+
+00:24:07.039 --> 00:24:10.799
+to come watch with me
+
+00:24:10.799 --> 00:24:13.039
+so it's really up to you I mean we I'm
+
+00:24:13.039 --> 00:24:14.559
+the one crumbling right now you know I'm
+
+00:24:14.559 --> 00:24:15.200
+just
+
+00:24:15.200 --> 00:24:17.200
+it's pure showmanship that is keeping me
+
+00:24:17.200 --> 00:24:18.799
+up right now the energy that I've been
+
+00:24:18.799 --> 00:24:21.120
+accumulating over the last few days
+
+00:24:21.120 --> 00:24:22.799
+but what's going to happen basically
+
+00:24:22.799 --> 00:24:24.400
+when we finish this live stream
+
+00:24:24.400 --> 00:24:26.240
+firstly I'm going to turn off this light
+
+00:24:26.240 --> 00:24:27.840
+which has been blasting
+
+00:24:27.840 --> 00:24:30.000
+a very white light in my eyes and up
+
+00:24:30.000 --> 00:24:31.039
+until 11 pm
+
+00:24:31.039 --> 00:24:34.400
+every single day you see this very comfy
+
+00:24:34.400 --> 00:24:37.120
+uh you know so far what not I'm just
+
+00:24:37.120 --> 00:24:37.919
+going to
+
+00:24:37.919 --> 00:24:42.880
+crush on it right away so
+
+00:24:42.880 --> 00:24:45.440
+that sounds like a good plan to me um
+
+00:24:45.440 --> 00:24:47.279
+you know we've all worked hard
+
+00:24:47.279 --> 00:24:50.159
+especially you all um and definitely
+
+00:24:50.159 --> 00:24:51.360
+deserve some rest
+
+00:24:51.360 --> 00:24:54.640
+to um you know rejuvenate our job
+
+00:24:54.640 --> 00:24:58.159
+and get back into it again um
+
+00:24:58.159 --> 00:25:01.279
+yeah sasha did you want to add anything
+
+00:25:01.279 --> 00:25:05.919
+else
+
+00:25:05.919 --> 00:25:08.240
+you just muted yourself yes you've just
+
+00:25:08.240 --> 00:25:12.640
+muted yourself
+
+00:25:12.640 --> 00:25:14.799
+uh yeah just answering questions at the
+
+00:25:14.799 --> 00:25:15.780
+moment um
+
+00:25:15.780 --> 00:25:17.039
+[Music]
+
+00:25:17.039 --> 00:25:18.400
+at some point I will have to do two
+
+00:25:18.400 --> 00:25:20.320
+things but in the meantime I can do
+
+00:25:20.320 --> 00:25:25.520
+Emacs grown-up Emacs things wow
+
+00:25:25.520 --> 00:25:26.880
+what are you saying grown-up Emacs but
+
+00:25:26.880 --> 00:25:28.799
+we still had a talk by uh
+
+00:25:28.799 --> 00:25:32.400
+someone today who was uh 17 I believe
+
+00:25:32.400 --> 00:25:36.480
+so yeah I was very impressed by this
+
+00:25:36.480 --> 00:25:39.039
+yeah it's awesome just seeing the wide
+
+00:25:39.039 --> 00:25:40.320
+diversity and the wide
+
+00:25:40.320 --> 00:25:43.600
+age range of people um just getting into
+
+00:25:43.600 --> 00:25:45.200
+Emacs picking up
+
+00:25:45.200 --> 00:25:48.240
+for all sorts of different things um
+
+00:25:48.240 --> 00:25:49.840
+corbin and I had a bit of a chat about
+
+00:25:49.840 --> 00:25:51.440
+this about this
+
+00:25:51.440 --> 00:25:53.440
+piece of free software that is Emacs and
+
+00:25:53.440 --> 00:25:54.960
+all the freedoms
+
+00:25:54.960 --> 00:25:58.320
+freedoms that it grants us um but yeah
+
+00:25:58.320 --> 00:25:58.960
+we could
+
+00:25:58.960 --> 00:26:02.080
+go on forever and ever um yeah I really
+
+00:26:02.080 --> 00:26:02.559
+can
+
+00:26:02.559 --> 00:26:05.039
+and then and you know and it has to be
+
+00:26:05.039 --> 00:26:06.400
+about getting something done and that's
+
+00:26:06.400 --> 00:26:07.440
+where I think
+
+00:26:07.440 --> 00:26:11.679
+sasha your work and organization is so
+
+00:26:11.679 --> 00:26:15.679
+uh vital to us
+
+00:26:15.679 --> 00:26:18.799
+we uh you know we have to direct that
+
+00:26:18.799 --> 00:26:20.720
+energy into self-organizing
+
+00:26:20.720 --> 00:26:22.480
+and and that's where I'd like probably
+
+00:26:22.480 --> 00:26:24.159
+to focus my work
+
+00:26:24.159 --> 00:26:26.159
+over the probably the next several years
+
+00:26:26.159 --> 00:26:27.200
+is
+
+00:26:27.200 --> 00:26:31.120
+um is is putting that thought and some
+
+00:26:31.120 --> 00:26:32.000
+of the
+
+00:26:32.000 --> 00:26:34.720
+uh some of the ideas that are built into
+
+00:26:34.720 --> 00:26:35.600
+org mode and
+
+00:26:35.600 --> 00:26:37.200
+in fact some of the implementation
+
+00:26:37.200 --> 00:26:38.720
+that's built into org one and in fact
+
+00:26:38.720 --> 00:26:40.240
+probably org mode
+
+00:26:40.240 --> 00:26:43.440
+because hey there it is
+
+00:26:43.440 --> 00:26:46.159
+to work on that yeah you should see all
+
+00:26:46.159 --> 00:26:47.279
+the org scripts I wrote
+
+00:26:47.279 --> 00:26:50.320
+so cool not that other people but anyway
+
+00:26:50.320 --> 00:26:51.760
+we wrote this like fancy scheduling
+
+00:26:51.760 --> 00:26:52.000
+thing
+
+00:26:52.000 --> 00:26:52.799
+and you should check out the
+
+00:26:52.799 --> 00:26:55.360
+submissions.org to to try to use it
+
+00:26:55.360 --> 00:26:57.279
+because then if other people use it they
+
+00:26:57.279 --> 00:26:59.360
+can improve it and then I get to use the
+
+00:26:59.360 --> 00:27:00.720
+improvements next year
+
+00:27:00.720 --> 00:27:04.159
+also erc ux irc clients awesome
+
+00:27:04.159 --> 00:27:06.159
+so a lot of automation was a lot of fun
+
+00:27:06.159 --> 00:27:07.919
+to work on absolutely
+
+00:27:07.919 --> 00:27:10.400
+yeah sasha did a lot of cool automation
+
+00:27:10.400 --> 00:27:11.440
+stuff this year
+
+00:27:11.440 --> 00:27:13.200
+um you know around generating the
+
+00:27:13.200 --> 00:27:15.039
+schedules and everything the pages in
+
+00:27:15.039 --> 00:27:17.200
+the Emacs freaky with org mode
+
+00:27:17.200 --> 00:27:19.919
+um and you know for the calls with uh
+
+00:27:19.919 --> 00:27:21.039
+speakers
+
+00:27:21.039 --> 00:27:24.159
+and coordinating in imaxcom.org
+
+00:27:24.159 --> 00:27:26.720
+um or like you know updating the topics
+
+00:27:26.720 --> 00:27:27.600
+all this stuff
+
+00:27:27.600 --> 00:27:30.480
+she basically automated all of this um
+
+00:27:30.480 --> 00:27:32.240
+which is definitely very impressive and
+
+00:27:32.240 --> 00:27:34.480
+I know I'm gonna be looking into
+
+00:27:34.480 --> 00:27:37.600
+um yeah definitely check out um
+
+00:27:37.600 --> 00:27:40.720
+erc I'm a little biased um I
+
+00:27:40.720 --> 00:27:43.360
+started sort of maintaining it a little
+
+00:27:43.360 --> 00:27:44.320
+bit ago
+
+00:27:44.320 --> 00:27:47.760
+but um it's been there forever and
+
+00:27:47.760 --> 00:27:49.279
+you know I'm just following the
+
+00:27:49.279 --> 00:27:51.919
+footsteps of giants or standing on their
+
+00:27:51.919 --> 00:27:53.120
+shoulders
+
+00:27:53.120 --> 00:27:56.640
+so definitely check it out um yeah
+
+00:27:56.640 --> 00:27:59.919
+any uh last notes to add before we get
+
+00:27:59.919 --> 00:28:00.559
+back
+
+00:28:00.559 --> 00:28:03.120
+to um playing the last few demos that we
+
+00:28:03.120 --> 00:28:04.960
+have
+
+00:28:04.960 --> 00:28:07.600
+I just wanted to say that I'm really sad
+
+00:28:07.600 --> 00:28:08.480
+for the people
+
+00:28:08.480 --> 00:28:11.360
+uh viewing uh viewers right now who
+
+00:28:11.360 --> 00:28:12.000
+won't get
+
+00:28:12.000 --> 00:28:14.320
+the thrill of receiving a message by
+
+00:28:14.320 --> 00:28:16.080
+sasha at 3am telling
+
+00:28:16.080 --> 00:28:17.679
+oh I found a way to automate all the
+
+00:28:17.679 --> 00:28:18.960
+talks I found a way to have this
+
+00:28:18.960 --> 00:28:20.480
+schedule be generated automatically in
+
+00:28:20.480 --> 00:28:21.760
+an old mode file
+
+00:28:21.760 --> 00:28:23.520
+and you know I'm having my team in the
+
+00:28:23.520 --> 00:28:25.360
+morning I'm waking up I see an email
+
+00:28:25.360 --> 00:28:27.760
+which was unless three am and I say
+
+00:28:27.760 --> 00:28:31.039
+wow impressive
+
+00:28:31.039 --> 00:28:33.600
+that works like quite nicely for you um
+
+00:28:33.600 --> 00:28:34.159
+leo
+
+00:28:34.159 --> 00:28:36.000
+with like you know the times and time
+
+00:28:36.000 --> 00:28:37.360
+zones and everything
+
+00:28:37.360 --> 00:28:39.440
+and with sasha usually getting it on
+
+00:28:39.440 --> 00:28:40.480
+later at night
+
+00:28:40.480 --> 00:28:44.399
+um yeah you do get this bedtime right
+
+00:28:44.399 --> 00:28:45.919
+wait until bedtime and then up until
+
+00:28:45.919 --> 00:28:47.279
+like one or two because it's too much
+
+00:28:47.279 --> 00:28:49.200
+fun
+
+00:28:49.200 --> 00:28:52.559
+yeah exactly um yeah
+
+00:28:52.559 --> 00:28:56.240
+so uh on that note
+
+00:28:56.240 --> 00:28:59.919
+if uh there isn't much else to say then
+
+00:28:59.919 --> 00:29:03.200
+I will uh thank each and every one once
+
+00:29:03.200 --> 00:29:04.000
+again
+
+00:29:04.000 --> 00:29:07.039
+um who was in any way
+
+00:29:07.039 --> 00:29:10.240
+part of this um and helped with um
+
+00:29:10.240 --> 00:29:13.520
+any of this um basically
+
+00:29:13.520 --> 00:29:16.640
+um Emacs company anyway um and watched
+
+00:29:16.640 --> 00:29:17.039
+it
+
+00:29:17.039 --> 00:29:20.640
+helped whatever um submitted the talk um
+
+00:29:20.640 --> 00:29:22.960
+I very much thank you um this wouldn't
+
+00:29:22.960 --> 00:29:23.760
+have been
+
+00:29:23.760 --> 00:29:27.120
+what it has been without um all of
+
+00:29:27.120 --> 00:29:30.240
+you folks participation and help and
+
+00:29:30.240 --> 00:29:32.960
+um just being out there and spreading
+
+00:29:32.960 --> 00:29:34.720
+the gospel of Emacs
+
+00:29:34.720 --> 00:29:37.760
+um yeah so
+
+00:29:37.760 --> 00:29:40.799
+yep there we go leo
+
+00:29:40.799 --> 00:29:42.399
+sorry someone just asked me if I was
+
+00:29:42.399 --> 00:29:44.159
+still wearing jeans today so I just felt
+
+00:29:44.159 --> 00:29:46.799
+obligated to show it
+
+00:29:46.799 --> 00:29:50.320
+nice I never got my thanks in I I have
+
+00:29:50.320 --> 00:29:51.039
+to thank
+
+00:29:51.039 --> 00:29:54.399
+uh leo and uh
+
+00:29:54.399 --> 00:29:57.760
+and I'll just stare at you but I I won't
+
+00:29:57.760 --> 00:29:58.480
+say your name
+
+00:29:58.480 --> 00:30:01.520
+yet again um for the insane work that
+
+00:30:01.520 --> 00:30:02.000
+you do
+
+00:30:02.000 --> 00:30:06.320
+and and and sasha um
+
+00:30:06.320 --> 00:30:09.039
+you are an asset to our whole community
+
+00:30:09.039 --> 00:30:11.039
+with the vibrance that you bring and the
+
+00:30:11.039 --> 00:30:13.200
+the passion that you have for
+
+00:30:13.200 --> 00:30:16.720
+um for community itself uh
+
+00:30:16.720 --> 00:30:18.480
+I think a lot of us can say that you're
+
+00:30:18.480 --> 00:30:20.000
+you're driving a lot of our work
+
+00:30:20.000 --> 00:30:24.240
+in in certain ways um
+
+00:30:24.240 --> 00:30:25.919
+and then I I want to thank all the
+
+00:30:25.919 --> 00:30:28.480
+presenters for uh
+
+00:30:28.480 --> 00:30:30.399
+for working with us to get every
+
+00:30:30.399 --> 00:30:31.760
+everything scheduled
+
+00:30:31.760 --> 00:30:35.520
+and also my team and project
+
+00:30:35.520 --> 00:30:39.279
+um for helping uh get the project
+
+00:30:39.279 --> 00:30:41.200
+actually testable we had some
+
+00:30:41.200 --> 00:30:43.279
+interesting stuff to show
+
+00:30:43.279 --> 00:30:46.720
+and my family for uh all that they do
+
+00:30:46.720 --> 00:30:49.279
+to make it possible for me to give back
+
+00:30:49.279 --> 00:30:56.080
+to free software
+
+00:30:56.080 --> 00:30:57.679
+oh there's a question um someone's
+
+00:30:57.679 --> 00:30:59.440
+volunteering to help just get the stream
+
+00:30:59.440 --> 00:31:00.399
+recordings out
+
+00:31:00.399 --> 00:31:02.880
+so it's it's up to you yeah your call
+
+00:31:02.880 --> 00:31:03.600
+you want
+
+00:31:03.600 --> 00:31:05.760
+them out and then you have some time to
+
+00:31:05.760 --> 00:31:07.200
+prepare nice
+
+00:31:07.200 --> 00:31:09.600
+cut up versions or do you want everyone
+
+00:31:09.600 --> 00:31:11.120
+to hang on and then just link to like
+
+00:31:11.120 --> 00:31:12.960
+the EmacsConf website
+
+00:31:12.960 --> 00:31:16.159
+right right um I would very much
+
+00:31:16.159 --> 00:31:17.679
+appreciate help with that
+
+00:31:17.679 --> 00:31:20.880
+in fact um for last year's um live
+
+00:31:20.880 --> 00:31:21.919
+recordings
+
+00:31:21.919 --> 00:31:25.279
+we had someone to help us um
+
+00:31:25.279 --> 00:31:28.320
+uh andrew jordy in fact who also helped
+
+00:31:28.320 --> 00:31:30.159
+light a bunch of transcripts last year
+
+00:31:30.159 --> 00:31:32.559
+did an awesome job um
+
+00:31:32.559 --> 00:31:34.240
+yeah I really wanted to have him around
+
+00:31:34.240 --> 00:31:36.080
+this year but you know circumstances
+
+00:31:36.080 --> 00:31:36.720
+with
+
+00:31:36.720 --> 00:31:39.279
+um everything going on around around the
+
+00:31:39.279 --> 00:31:39.840
+world
+
+00:31:39.840 --> 00:31:42.880
+um just didn't work out but um yeah I
+
+00:31:42.880 --> 00:31:43.279
+could
+
+00:31:43.279 --> 00:31:46.240
+definitely use um help with cutting up
+
+00:31:46.240 --> 00:31:48.159
+the videos
+
+00:31:48.159 --> 00:31:49.679
+you know for the pre-recordings that's
+
+00:31:49.679 --> 00:31:51.519
+pretty trivial it's just me having to
+
+00:31:51.519 --> 00:31:52.640
+upload them
+
+00:31:52.640 --> 00:31:55.120
+and create the pages so I will do that
+
+00:31:55.120 --> 00:31:55.679
+but
+
+00:31:55.679 --> 00:31:58.320
+um to whoever asked the question if it's
+
+00:31:58.320 --> 00:31:59.279
+on the pad
+
+00:31:59.279 --> 00:32:01.200
+or if it's in irc sorry I missed it I
+
+00:32:01.200 --> 00:32:03.440
+will go I'll look back later
+
+00:32:03.440 --> 00:32:06.240
+um yeah just ping me message me or email
+
+00:32:06.240 --> 00:32:07.200
+me
+
+00:32:07.200 --> 00:32:10.080
+at vandalia gnu.org and um I would
+
+00:32:10.080 --> 00:32:17.840
+appreciate your help
+
+00:32:17.840 --> 00:32:20.159
+so have we finished the roundtable uh I
+
+00:32:20.159 --> 00:32:20.880
+believe we're
+
+00:32:20.880 --> 00:32:23.760
+doing the last thinking so colwin did it
+
+00:32:23.760 --> 00:32:24.640
+sasha did it
+
+00:32:24.640 --> 00:32:27.679
+should I go next
+
+00:32:27.679 --> 00:32:30.320
+so well as you can see I've lowered
+
+00:32:30.320 --> 00:32:31.200
+myself
+
+00:32:31.200 --> 00:32:33.360
+ever since the last time I've spoken so
+
+00:32:33.360 --> 00:32:34.399
+the dynasty started
+
+00:32:34.399 --> 00:32:36.640
+starting to set in but uh yeah I just
+
+00:32:36.640 --> 00:32:37.600
+wanted to
+
+00:32:37.600 --> 00:32:40.399
+um rejoin everyone and just say that
+
+00:32:40.399 --> 00:32:40.880
+thank you
+
+00:32:40.880 --> 00:32:42.320
+so much to all the organizers who have
+
+00:32:42.320 --> 00:32:44.640
+been helping us uh we've done a stellar
+
+00:32:44.640 --> 00:32:45.279
+job
+
+00:32:45.279 --> 00:32:47.279
+that I believe at least this year of
+
+00:32:47.279 --> 00:32:48.880
+keeping things on track
+
+00:32:48.880 --> 00:32:51.440
+and I hope that all of you have been
+
+00:32:51.440 --> 00:32:53.039
+able to enjoy this
+
+00:32:53.039 --> 00:32:56.240
+and yeah I don't have any anyone
+
+00:32:56.240 --> 00:32:58.480
+in particular to thank you know uh for
+
+00:32:58.480 --> 00:32:59.840
+me free software was
+
+00:32:59.840 --> 00:33:01.919
+for a very long time something I did in
+
+00:33:01.919 --> 00:33:02.960
+my bedroom
+
+00:33:02.960 --> 00:33:04.559
+on the side of my studies and generally
+
+00:33:04.559 --> 00:33:06.080
+when I was procrastinating
+
+00:33:06.080 --> 00:33:08.720
+from writing that one particular essay
+
+00:33:08.720 --> 00:33:10.559
+or that one particular thesis
+
+00:33:10.559 --> 00:33:13.120
+you know I did my old mood stuff in the
+
+00:33:13.120 --> 00:33:13.919
+background so
+
+00:33:13.919 --> 00:33:16.159
+just to be able to you know join the
+
+00:33:16.159 --> 00:33:17.440
+community
+
+00:33:17.440 --> 00:33:19.360
+when normally I got the chance to you
+
+00:33:19.360 --> 00:33:21.279
+know write some code for it and try to
+
+00:33:21.279 --> 00:33:23.600
+animate to community but also to be part
+
+00:33:23.600 --> 00:33:24.399
+of an event
+
+00:33:24.399 --> 00:33:28.480
+that is so genuine
+
+00:33:28.480 --> 00:33:30.960
+in its mission so genuine in the way
+
+00:33:30.960 --> 00:33:31.519
+that
+
+00:33:31.519 --> 00:33:34.799
+we got speakers together we had you know
+
+00:33:34.799 --> 00:33:36.399
+we had this excitement that we wanted to
+
+00:33:36.399 --> 00:33:38.000
+share and judging
+
+00:33:38.000 --> 00:33:39.360
+by the reactions we've had over the
+
+00:33:39.360 --> 00:33:41.200
+couple of days you know I I believe
+
+00:33:41.200 --> 00:33:41.840
+we've
+
+00:33:41.840 --> 00:33:44.799
+completely hit our target and as corwin
+
+00:33:44.799 --> 00:33:45.679
+said yesterday I
+
+00:33:45.679 --> 00:33:48.320
+am I guess I suppose a little humbled I
+
+00:33:48.320 --> 00:33:50.000
+know it might sound weird for me because
+
+00:33:50.000 --> 00:33:50.320
+I'm
+
+00:33:50.320 --> 00:33:52.240
+from britain all the time but when we're
+
+00:33:52.240 --> 00:33:53.760
+going to press stop
+
+00:33:53.760 --> 00:33:56.080
+to diet you know for the broadcast I
+
+00:33:56.080 --> 00:33:56.799
+think it's
+
+00:33:56.799 --> 00:33:59.840
+going to start slowly dawning slowly
+
+00:33:59.840 --> 00:34:02.880
+sorry french accent coming back slowly
+
+00:34:02.880 --> 00:34:06.480
+dawning on me what we've done and
+
+00:34:06.480 --> 00:34:08.320
+yeah it'll take me a couple of weeks to
+
+00:34:08.320 --> 00:34:09.520
+recover mentally
+
+00:34:09.520 --> 00:34:12.000
+spiritually physically and whatnot but I
+
+00:34:12.000 --> 00:34:13.599
+believe after I'll be able to enjoy what
+
+00:34:13.599 --> 00:34:15.599
+we've been able to do and for that
+
+00:34:15.599 --> 00:34:20.800
+thank you so much
+
+00:34:20.800 --> 00:34:24.480
+um yeah it's you're still you know kind
+
+00:34:24.480 --> 00:34:25.919
+of in the moment and
+
+00:34:25.919 --> 00:34:29.359
+um kind of maybe you haven't quite grabs
+
+00:34:29.359 --> 00:34:32.159
+grasped at all yet but yeah I think
+
+00:34:32.159 --> 00:34:33.359
+it'll
+
+00:34:33.359 --> 00:34:36.079
+start hitting us all individually at
+
+00:34:36.079 --> 00:34:37.599
+different points over the next couple of
+
+00:34:37.599 --> 00:34:39.119
+days or weeks
+
+00:34:39.119 --> 00:34:42.079
+um as we take some time to you know rest
+
+00:34:42.079 --> 00:34:43.599
+up and re-energize
+
+00:34:43.599 --> 00:34:47.359
+and you know keep going forward um
+
+00:34:47.359 --> 00:34:50.960
+yeah so on that note if um
+
+00:34:50.960 --> 00:34:53.839
+no one else has anything to add I will
+
+00:34:53.839 --> 00:34:54.320
+um
+
+00:34:54.320 --> 00:34:57.200
+[ __ ] you all farewell and thank you
+
+00:34:57.200 --> 00:34:59.680
+everyone once again for joining us
+
+00:34:59.680 --> 00:35:03.839
+and making an awesome amazing EmacsConf 2020.
+
+00:35:03.839 --> 00:35:06.079
+um just quickly say we weren't sure that
+
+00:35:06.079 --> 00:35:07.680
+we will be able to pull it off
+
+00:35:07.680 --> 00:35:09.599
+given all the madness going on around
+
+00:35:09.599 --> 00:35:10.720
+the world but
+
+00:35:10.720 --> 00:35:13.839
+for us to have broken um so many of our
+
+00:35:13.839 --> 00:35:14.880
+numbers and records
+
+00:35:14.880 --> 00:35:17.440
+for all of them basically um you know we
+
+00:35:17.440 --> 00:35:18.240
+just had
+
+00:35:18.240 --> 00:35:20.240
+just about like two and a half or three
+
+00:35:20.240 --> 00:35:22.320
+terabytes of streaming bandwidth usage
+
+00:35:22.320 --> 00:35:22.960
+so that's
+
+00:35:22.960 --> 00:35:25.520
+incredible and so many people join in so
+
+00:35:25.520 --> 00:35:26.400
+many talks
+
+00:35:26.400 --> 00:35:30.079
+so it's amazing thank you um
+
+00:35:30.079 --> 00:35:31.839
+yes I see a question coming will the
+
+00:35:31.839 --> 00:35:34.040
+ether pad be archived somewhere on
+
+00:35:34.040 --> 00:35:35.440
+imageconf.org
+
+00:35:35.440 --> 00:35:37.920
+um and the answer is yes I think sasha
+
+00:35:37.920 --> 00:35:38.960
+is answering
+
+00:35:38.960 --> 00:35:41.800
+um yes it will be linked under
+
+00:35:41.800 --> 00:35:43.200
+imanxconf.org
+
+00:35:43.200 --> 00:35:46.400
+2020 um that page will contain all the
+
+00:35:46.400 --> 00:35:47.680
+resources about
+
+00:35:47.680 --> 00:35:50.880
+everything um you know
+
+00:35:50.880 --> 00:35:54.880
+uh about imsgufton20 2020 sorry
+
+00:35:54.880 --> 00:35:57.599
+um yeah now you see some people saying
+
+00:35:57.599 --> 00:35:59.119
+early happy birthday to me
+
+00:35:59.119 --> 00:36:02.320
+um thank you so very much um I think
+
+00:36:02.320 --> 00:36:02.800
+this
+
+00:36:02.800 --> 00:36:05.760
+uh this conference was an incredible um
+
+00:36:05.760 --> 00:36:06.160
+I guess
+
+00:36:06.160 --> 00:36:09.200
+prelude to to my birthday um
+
+00:36:09.200 --> 00:36:12.880
+so thank you all and on that note
+
+00:36:12.880 --> 00:36:15.599
+I will end the stream and say goodbye
+
+00:36:15.599 --> 00:36:15.920
+and
+
+00:36:15.920 --> 00:36:19.680
+beat you very well bye
+
+00:36:19.680 --> 00:36:23.040
+bye everyone and then you're going to
+
+00:36:23.040 --> 00:36:23.839
+play the
+
+00:36:23.839 --> 00:36:27.119
+devils yep exactly okay
+
+00:36:27.119 --> 00:36:30.960
+bye bye
diff --git a/2020/subtitles/fix.py b/2020/subtitles/fix.py
new file mode 100644
index 00000000..5fc8fd4f
--- /dev/null
+++ b/2020/subtitles/fix.py
@@ -0,0 +1,9 @@
+import webvtt
+import sys
+filename = sys.argv[1]
+if (filename.find('sbv')):
+ vtt = webvtt.from_sbv(filename)
+length = len(vtt)
+for i in range(0, length - 1):
+ vtt[i].end = vtt[i + 1].start
+vtt.save()
diff --git a/2020/talk-details.md b/2020/talk-details.md
new file mode 100644
index 00000000..d0590623
--- /dev/null
+++ b/2020/talk-details.md
@@ -0,0 +1,44 @@
+<table><thead><th>Duration</th><th>Title</th><th>Speakers</th></thead><tbody><tr><td colspan="3">Talks</td></tr>
+<tr><td colspan="3">NOVEMBER 28 (Saturday)</td></tr>
+<tr><td>7:04</td><td><a href="/2020/talks/00">Day 1 opening remarks</a></td><td>Amin Bandali, Sacha Chua, Leo Vivier</td><tr>
+<tr><td>3:58</td><td><a href="/2020/talks/01">Emacs News Highlights</a></td><td>Sacha Chua</td><tr>
+<tr><td>24:15</td><td><a href="/2020/talks/02">An Emacs Developer Story: From User to Package Maintainer</a></td><td>Leo Vivier</td><tr>
+<tr><td>14:50</td><td><a href="/2020/talks/03">Idea to Novel Superstructure: Emacs for Writing</a></td><td>Bala Ramadurai</td><tr>
+<tr><td>8:26</td><td><a href="/2020/talks/04">Music in Plain Text</a></td><td>Jonathan Gregory</td><tr>
+<tr><td>29:50</td><td><a href="/2020/talks/05">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</a></td><td>Grant Shangreaux</td><tr>
+<tr><td>13:41</td><td><a href="/2020/talks/06">Trivial Emacs Kits</a></td><td>Corwin Brust (mplsCorwin)</td><tr>
+<tr><td>22:05</td><td><a href="/2020/talks/07">Beyond Vim and Emacs: A Scalable UI Paradigm</a></td><td>Sid Kasivajhula (countvajhula)</td><tr>
+<tr><td>17:19</td><td><a href="/2020/talks/08">Building reproducible Emacs</a></td><td>Andrew Tropin (abcdw)</td><tr>
+<tr><td>47:08</td><td><a href="/2020/talks/21">On why most of the best features in eev look like 5-minute hacks</a></td><td>Eduardo Ochs (edrx)</td><tr>
+<tr><td>14:09</td><td><a href="/2020/talks/09">Orgmode - your life in plain text</a></td><td>Rainer König</td><tr>
+<tr><td>8:18</td><td><a href="/2020/talks/10">Lead your future with Org</a></td><td>Andrea</td><tr>
+<tr><td>15:18</td><td><a href="/2020/talks/11">the org-gtd package: opinions about Getting Things Done</a></td><td>Aldric</td><tr>
+<tr><td>16:38</td><td><a href="/2020/talks/12">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</a></td><td>Leo Vivier</td><tr>
+<tr><td>12:05</td><td><a href="/2020/talks/13">Experience Report: Steps to "Emacs Hyper Notebooks"</a></td><td>Joseph Corneli, Raymond Puzio, and Cameron Ray Smith</td><tr>
+<tr><td>19:41</td><td><a href="/2020/talks/14">README-Driven Design</a></td><td>Adam Ard</td><tr>
+<tr><td>25:00</td><td><a href="/2020/talks/15">Moving from Jekyll to OrgMode, an experience report</a></td><td>Adolfo Villafiorita</td><tr>
+<tr><td>21:56</td><td><a href="/2020/talks/16">Org-roam: Presentation, Demonstration, and What's on the Horizon</a></td><td>Leo Vivier</td><tr>
+<tr><td>21:15</td><td><a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a></td><td>Noorah Alhasan</td><tr>
+<tr><td>21:26</td><td><a href="/2020/talks/18">Org-roam: Technical Presentation</a></td><td>Leo Vivier</td><tr>
+<tr><td>8:13</td><td><a href="/2020/talks/19">Sharing blogs (and more) with org-webring</a></td><td>Brett Gilio</td><tr>
+<tr><td>22:50</td><td><a href="/2020/talks/20">OMG Macros</a></td><td>Corwin Brust (mplsCorwin)</td><tr>
+<tr><td>15:47</td><td><a href="/2020/talks/40">Day 1 closing remarks</a></td><td>Amin Bandali, Sacha Chua, Leo Vivier, Corwin Brust</td><tr>
+<tr><td colspan="3">NOVEMBER 29 (Sunday)</td></tr>
+<tr><td>11:47</td><td><a href="/2020/talks/41">Day 2 opening remarks</a></td><td>Amin Bandali, Sacha Chua, Leo Vivier</td><tr>
+<tr><td>5:07</td><td><a href="/2020/talks/38">Emacs development update</a></td><td>John Wiegley</td><tr>
+<tr><td>29:06</td><td><a href="/2020/talks/22">Powering-up Special Blocks</a></td><td>Musa Al-hassy</td><tr>
+<tr><td>43:54</td><td><a href="/2020/talks/23">Incremental Parsing with emacs-tree-sitter</a></td><td>Tuấn-Anh Nguyễn</td><tr>
+<tr><td>20:46</td><td><a href="/2020/talks/24">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</a></td><td>Andrea</td><tr>
+<tr><td>9:52</td><td><a href="/2020/talks/25">Traverse complex JSON structures with live feedback</a></td><td>Zen Monk Alain M. Lafon</td><tr>
+<tr><td>53:38</td><td><a href="/2020/talks/39">NonGNU ELPA</a></td><td>Richard Stallman</td><tr>
+<tr><td>14:57</td><td><a href="/2020/talks/26">Emacs as a Highschooler: How It Changed My Life</a></td><td>Pierce Wang</td><tr>
+<tr><td>21:26</td><td><a href="/2020/talks/27">State of Retro Gaming in Emacs</a></td><td>Vasilij "wasamasa" Schneidermann</td><tr>
+<tr><td>1:09:00</td><td><a href="/2020/talks/28">Welcome To The Dungeon</a></td><td>Erik Elmshauser and Corwin Brust</td><tr>
+<tr><td>(combined with previous)</td><td><a href="/2020/talks/29">Pathing of Least Resistance</a></td><td>Erik Elmshauser and Corwin Brust (mplsCorwin)</td><tr>
+<tr><td>11:30</td><td><a href="/2020/talks/30">A tour of vterm</a></td><td>Gabriele Bozzola (@sbozzolo)</td><tr>
+<tr><td>16:50</td><td><a href="/2020/talks/31">Lakota Language and Emacs</a></td><td>Grant Shangreaux</td><tr>
+<tr><td>23:57</td><td><a href="/2020/talks/32">Object Oriented Code in the Gnus Newsreader</a></td><td>Eric Abrahamsen</td><tr>
+<tr><td>39:16</td><td><a href="/2020/talks/33">Maxima a computer algebra system in Emacs</a></td><td>Fermin MF</td><tr>
+<tr><td>22:22</td><td><a href="/2020/talks/34">Extend Emacs to Modern GUI Applications with EAF</a></td><td>Matthew Zeng</td><tr>
+<tr><td>16:02</td><td><a href="/2020/talks/35">WAVEing at Repetitive Repetitive Repetitive Music</a></td><td>Zachary Kanfer</td><tr>
+<tr><td>36:29</td><td><a href="/2020/talks/42">Day 2 closing remarks</a></td><td>Amin Bandali, Sacha Chua, Leo Vivier, Corwin Brust</td><tr></tbody></table>
diff --git a/2020/talks.md b/2020/talks.md
new file mode 100644
index 00000000..4813ab63
--- /dev/null
+++ b/2020/talks.md
@@ -0,0 +1,10 @@
+[[!meta title="Talks"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali and Sacha Chua"]]
+
+[Download an .m3u playlist](https://emacsconf.org/2020/emacsconf-2020.m3u)
+
+EmacsConf 2020 was on November 28 (Sat) and November 29 (Sun), 2020 from 9am-5pm Toronto/EST time; equivalently, 6am-2pm PST, 2pm-10pm UTC, 3pm-11pm Zurich/CET.
+
+Many of the talks include accompanying material such as slides, questions, and notes. When present, these material are included or linked to on the talk page.
+
+[[!inline pages="internal(2020/talk-details)" raw="yes"]]
diff --git a/2020/talks/00.md b/2020/talks/00.md
new file mode 100644
index 00000000..9d7a9c17
--- /dev/null
+++ b/2020/talks/00.md
@@ -0,0 +1,22 @@
+[[!meta title="Day 1 opening remarks"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, Leo Vivier"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Next: <a href="/2020/talks/01">Emacs News Highlights</a>
+
+
+[[!inline pages="internal(2020/info/00)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 9:00 AM - 9:30 AM EST
+Saturday, Nov 28 2020, ~ 6:00 AM - 6:30 AM PST
+Saturday, Nov 28 2020, ~ 2:00 PM - 2:30 PM UTC
+Saturday, Nov 28 2020, ~ 3:00 PM - 3:30 PM CET
+Saturday, Nov 28 2020, ~10:00 PM - 10:30 PM +08
+
+Back to the [[schedule]]
+Next: <a href="/2020/talks/01">Emacs News Highlights</a>
+
+
diff --git a/2020/talks/01.md b/2020/talks/01.md
new file mode 100644
index 00000000..0b2bdb3a
--- /dev/null
+++ b/2020/talks/01.md
@@ -0,0 +1,24 @@
+[[!meta title="Emacs News Highlights"]]
+[[!meta copyright="Copyright &copy; 2020 Sacha Chua"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/00">Day 1 opening remarks</a>
+Next: <a href="/2020/talks/02">An Emacs Developer Story: From User to Package Maintainer</a>
+
+
+[[!inline pages="internal(2020/info/01)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 9:33 AM - 9:37 AM EST
+Saturday, Nov 28 2020, ~ 6:33 AM - 6:37 AM PST
+Saturday, Nov 28 2020, ~ 2:33 PM - 2:37 PM UTC
+Saturday, Nov 28 2020, ~ 3:33 PM - 3:37 PM CET
+Saturday, Nov 28 2020, ~10:33 PM - 10:37 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/00">Day 1 opening remarks</a>
+Next: <a href="/2020/talks/02">An Emacs Developer Story: From User to Package Maintainer</a>
+
+
diff --git a/2020/talks/02.md b/2020/talks/02.md
new file mode 100644
index 00000000..2189192f
--- /dev/null
+++ b/2020/talks/02.md
@@ -0,0 +1,24 @@
+[[!meta title="An Emacs Developer Story: From User to Package Maintainer"]]
+[[!meta copyright="Copyright &copy; 2020 Leo Vivier"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/01">Emacs News Highlights</a>
+Next: <a href="/2020/talks/03">Idea to Novel Superstructure: Emacs for Writing</a>
+
+
+[[!inline pages="internal(2020/info/02)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 9:40 AM - 10:00 AM EST
+Saturday, Nov 28 2020, ~ 6:40 AM - 7:00 AM PST
+Saturday, Nov 28 2020, ~ 2:40 PM - 3:00 PM UTC
+Saturday, Nov 28 2020, ~ 3:40 PM - 4:00 PM CET
+Saturday, Nov 28 2020, ~10:40 PM - 11:00 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/01">Emacs News Highlights</a>
+Next: <a href="/2020/talks/03">Idea to Novel Superstructure: Emacs for Writing</a>
+
+
diff --git a/2020/talks/03.md b/2020/talks/03.md
new file mode 100644
index 00000000..8fe0e198
--- /dev/null
+++ b/2020/talks/03.md
@@ -0,0 +1,24 @@
+[[!meta title="Idea to Novel Superstructure: Emacs for Writing"]]
+[[!meta copyright="Copyright &copy; 2020 Bala Ramadurai"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/02">An Emacs Developer Story: From User to Package Maintainer</a>
+Next: <a href="/2020/talks/04">Music in Plain Text</a>
+
+
+[[!inline pages="internal(2020/info/03)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~10:03 AM - 10:13 AM EST
+Saturday, Nov 28 2020, ~ 7:03 AM - 7:13 AM PST
+Saturday, Nov 28 2020, ~ 3:03 PM - 3:13 PM UTC
+Saturday, Nov 28 2020, ~ 4:03 PM - 4:13 PM CET
+Saturday, Nov 28 2020, ~11:03 PM - 11:13 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/02">An Emacs Developer Story: From User to Package Maintainer</a>
+Next: <a href="/2020/talks/04">Music in Plain Text</a>
+
+
diff --git a/2020/talks/04.md b/2020/talks/04.md
new file mode 100644
index 00000000..bc5a79b2
--- /dev/null
+++ b/2020/talks/04.md
@@ -0,0 +1,24 @@
+[[!meta title="Music in Plain Text"]]
+[[!meta copyright="Copyright &copy; 2020 Jonathan Gregory"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/03">Idea to Novel Superstructure: Emacs for Writing</a>
+Next: <a href="/2020/talks/05">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</a>
+
+
+[[!inline pages="internal(2020/info/04)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~10:16 AM - 10:26 AM EST
+Saturday, Nov 28 2020, ~ 7:16 AM - 7:26 AM PST
+Saturday, Nov 28 2020, ~ 3:16 PM - 3:26 PM UTC
+Saturday, Nov 28 2020, ~ 4:16 PM - 4:26 PM CET
+Saturday, Nov 28 2020, ~11:16 PM - 11:26 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/03">Idea to Novel Superstructure: Emacs for Writing</a>
+Next: <a href="/2020/talks/05">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</a>
+
+
diff --git a/2020/talks/05.md b/2020/talks/05.md
new file mode 100644
index 00000000..4a8fc8b1
--- /dev/null
+++ b/2020/talks/05.md
@@ -0,0 +1,24 @@
+[[!meta title="Bard Bivou(m)acs - Building a bandcamp-like page for an album of music"]]
+[[!meta copyright="Copyright &copy; 2020 Grant Shangreaux"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/04">Music in Plain Text</a>
+Next: <a href="/2020/talks/06">Trivial Emacs Kits</a>
+
+
+[[!inline pages="internal(2020/info/05)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~10:29 AM - 10:45 AM EST
+Saturday, Nov 28 2020, ~ 7:29 AM - 7:45 AM PST
+Saturday, Nov 28 2020, ~ 3:29 PM - 3:45 PM UTC
+Saturday, Nov 28 2020, ~ 4:29 PM - 4:45 PM CET
+Saturday, Nov 28 2020, ~11:29 PM - 11:45 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/04">Music in Plain Text</a>
+Next: <a href="/2020/talks/06">Trivial Emacs Kits</a>
+
+
diff --git a/2020/talks/06.md b/2020/talks/06.md
new file mode 100644
index 00000000..9a539ee2
--- /dev/null
+++ b/2020/talks/06.md
@@ -0,0 +1,24 @@
+[[!meta title="Trivial Emacs Kits"]]
+[[!meta copyright="Copyright &copy; 2020 Corwin Brust (mplsCorwin)"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/05">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</a>
+Next: <a href="/2020/talks/07">Beyond Vim and Emacs: A Scalable UI Paradigm</a>
+
+
+[[!inline pages="internal(2020/info/06)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~10:48 AM - 10:58 AM EST
+Saturday, Nov 28 2020, ~ 7:48 AM - 7:58 AM PST
+Saturday, Nov 28 2020, ~ 3:48 PM - 3:58 PM UTC
+Saturday, Nov 28 2020, ~ 4:48 PM - 4:58 PM CET
+Saturday, Nov 28 2020, ~11:48 PM - 11:58 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/05">Bard Bivou(m)acs - Building a bandcamp-like page for an album of music</a>
+Next: <a href="/2020/talks/07">Beyond Vim and Emacs: A Scalable UI Paradigm</a>
+
+
diff --git a/2020/talks/07.md b/2020/talks/07.md
new file mode 100644
index 00000000..0d92eb76
--- /dev/null
+++ b/2020/talks/07.md
@@ -0,0 +1,24 @@
+[[!meta title="Beyond Vim and Emacs: A Scalable UI Paradigm"]]
+[[!meta copyright="Copyright &copy; 2020 Sid Kasivajhula (countvajhula)"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/06">Trivial Emacs Kits</a>
+Next: <a href="/2020/talks/08">Building reproducible Emacs</a>
+
+
+[[!inline pages="internal(2020/info/07)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~11:01 AM - 11:21 AM EST
+Saturday, Nov 28 2020, ~ 8:01 AM - 8:21 AM PST
+Saturday, Nov 28 2020, ~ 4:01 PM - 4:21 PM UTC
+Saturday, Nov 28 2020, ~ 5:01 PM - 5:21 PM CET
+Sunday, Nov 29 2020, ~12:01 AM - 12:21 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/06">Trivial Emacs Kits</a>
+Next: <a href="/2020/talks/08">Building reproducible Emacs</a>
+
+
diff --git a/2020/talks/08.md b/2020/talks/08.md
new file mode 100644
index 00000000..0ac1b59d
--- /dev/null
+++ b/2020/talks/08.md
@@ -0,0 +1,24 @@
+[[!meta title="Building reproducible Emacs"]]
+[[!meta copyright="Copyright &copy; 2020 Andrew Tropin (abcdw)"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/07">Beyond Vim and Emacs: A Scalable UI Paradigm</a>
+Next: <a href="/2020/talks/21">On why most of the best features in eev look like 5-minute hacks</a>
+
+
+[[!inline pages="internal(2020/info/08)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~11:24 AM - 11:44 AM EST
+Saturday, Nov 28 2020, ~ 8:24 AM - 8:44 AM PST
+Saturday, Nov 28 2020, ~ 4:24 PM - 4:44 PM UTC
+Saturday, Nov 28 2020, ~ 5:24 PM - 5:44 PM CET
+Sunday, Nov 29 2020, ~12:24 AM - 12:44 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/07">Beyond Vim and Emacs: A Scalable UI Paradigm</a>
+Next: <a href="/2020/talks/21">On why most of the best features in eev look like 5-minute hacks</a>
+
+
diff --git a/2020/talks/09.md b/2020/talks/09.md
new file mode 100644
index 00000000..c0592cb4
--- /dev/null
+++ b/2020/talks/09.md
@@ -0,0 +1,24 @@
+[[!meta title="Orgmode - your life in plain text"]]
+[[!meta copyright="Copyright &copy; 2020 Rainer König"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/21">On why most of the best features in eev look like 5-minute hacks</a>
+Next: <a href="/2020/talks/10">Lead your future with Org</a>
+
+
+[[!inline pages="internal(2020/info/09)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 1:03 PM - 1:13 PM EST
+Saturday, Nov 28 2020, ~10:03 AM - 10:13 AM PST
+Saturday, Nov 28 2020, ~ 6:03 PM - 6:13 PM UTC
+Saturday, Nov 28 2020, ~ 7:03 PM - 7:13 PM CET
+Sunday, Nov 29 2020, ~ 2:03 AM - 2:13 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/21">On why most of the best features in eev look like 5-minute hacks</a>
+Next: <a href="/2020/talks/10">Lead your future with Org</a>
+
+
diff --git a/2020/talks/10.md b/2020/talks/10.md
new file mode 100644
index 00000000..318dba21
--- /dev/null
+++ b/2020/talks/10.md
@@ -0,0 +1,24 @@
+[[!meta title="Lead your future with Org"]]
+[[!meta copyright="Copyright &copy; 2020 Andrea"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/09">Orgmode - your life in plain text</a>
+Next: <a href="/2020/talks/11">the org-gtd package: opinions about Getting Things Done</a>
+
+
+[[!inline pages="internal(2020/info/10)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 1:16 PM - 1:26 PM EST
+Saturday, Nov 28 2020, ~10:16 AM - 10:26 AM PST
+Saturday, Nov 28 2020, ~ 6:16 PM - 6:26 PM UTC
+Saturday, Nov 28 2020, ~ 7:16 PM - 7:26 PM CET
+Sunday, Nov 29 2020, ~ 2:16 AM - 2:26 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/09">Orgmode - your life in plain text</a>
+Next: <a href="/2020/talks/11">the org-gtd package: opinions about Getting Things Done</a>
+
+
diff --git a/2020/talks/11.md b/2020/talks/11.md
new file mode 100644
index 00000000..6de05dc2
--- /dev/null
+++ b/2020/talks/11.md
@@ -0,0 +1,24 @@
+[[!meta title="the org-gtd package: opinions about Getting Things Done"]]
+[[!meta copyright="Copyright &copy; 2020 Aldric"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/10">Lead your future with Org</a>
+Next: <a href="/2020/talks/12">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</a>
+
+
+[[!inline pages="internal(2020/info/11)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 1:29 PM - 1:49 PM EST
+Saturday, Nov 28 2020, ~10:29 AM - 10:49 AM PST
+Saturday, Nov 28 2020, ~ 6:29 PM - 6:49 PM UTC
+Saturday, Nov 28 2020, ~ 7:29 PM - 7:49 PM CET
+Sunday, Nov 29 2020, ~ 2:29 AM - 2:49 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/10">Lead your future with Org</a>
+Next: <a href="/2020/talks/12">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</a>
+
+
diff --git a/2020/talks/12.md b/2020/talks/12.md
new file mode 100644
index 00000000..413955e2
--- /dev/null
+++ b/2020/talks/12.md
@@ -0,0 +1,24 @@
+[[!meta title="One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!"]]
+[[!meta copyright="Copyright &copy; 2020 Leo Vivier"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/11">the org-gtd package: opinions about Getting Things Done</a>
+Next: <a href="/2020/talks/13">Experience Report: Steps to "Emacs Hyper Notebooks"</a>
+
+
+[[!inline pages="internal(2020/info/12)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 1:52 PM - 2:02 PM EST
+Saturday, Nov 28 2020, ~10:52 AM - 11:02 AM PST
+Saturday, Nov 28 2020, ~ 6:52 PM - 7:02 PM UTC
+Saturday, Nov 28 2020, ~ 7:52 PM - 8:02 PM CET
+Sunday, Nov 29 2020, ~ 2:52 AM - 3:02 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/11">the org-gtd package: opinions about Getting Things Done</a>
+Next: <a href="/2020/talks/13">Experience Report: Steps to "Emacs Hyper Notebooks"</a>
+
+
diff --git a/2020/talks/13.md b/2020/talks/13.md
new file mode 100644
index 00000000..b49c1172
--- /dev/null
+++ b/2020/talks/13.md
@@ -0,0 +1,24 @@
+[[!meta title="Experience Report: Steps to \"Emacs Hyper Notebooks\""]]
+[[!meta copyright="Copyright &copy; 2020 Joseph Corneli, Raymond Puzio, and Cameron Ray Smith"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/12">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</a>
+Next: <a href="/2020/talks/14">README-Driven Design</a>
+
+
+[[!inline pages="internal(2020/info/13)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 2:05 PM - 2:15 PM EST
+Saturday, Nov 28 2020, ~11:05 AM - 11:15 AM PST
+Saturday, Nov 28 2020, ~ 7:05 PM - 7:15 PM UTC
+Saturday, Nov 28 2020, ~ 8:05 PM - 8:15 PM CET
+Sunday, Nov 29 2020, ~ 3:05 AM - 3:15 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/12">One Big-ass Org File or multiple tiny ones? Finally, the End of the debate!</a>
+Next: <a href="/2020/talks/14">README-Driven Design</a>
+
+
diff --git a/2020/talks/14.md b/2020/talks/14.md
new file mode 100644
index 00000000..318cb3ae
--- /dev/null
+++ b/2020/talks/14.md
@@ -0,0 +1,24 @@
+[[!meta title="README-Driven Design"]]
+[[!meta copyright="Copyright &copy; 2020 Adam Ard"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/13">Experience Report: Steps to "Emacs Hyper Notebooks"</a>
+Next: <a href="/2020/talks/15">Moving from Jekyll to OrgMode, an experience report</a>
+
+
+[[!inline pages="internal(2020/info/14)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 2:18 PM - 2:38 PM EST
+Saturday, Nov 28 2020, ~11:18 AM - 11:38 AM PST
+Saturday, Nov 28 2020, ~ 7:18 PM - 7:38 PM UTC
+Saturday, Nov 28 2020, ~ 8:18 PM - 8:38 PM CET
+Sunday, Nov 29 2020, ~ 3:18 AM - 3:38 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/13">Experience Report: Steps to "Emacs Hyper Notebooks"</a>
+Next: <a href="/2020/talks/15">Moving from Jekyll to OrgMode, an experience report</a>
+
+
diff --git a/2020/talks/15.md b/2020/talks/15.md
new file mode 100644
index 00000000..3dbff0cb
--- /dev/null
+++ b/2020/talks/15.md
@@ -0,0 +1,24 @@
+[[!meta title="Moving from Jekyll to OrgMode, an experience report"]]
+[[!meta copyright="Copyright &copy; 2020 Adolfo Villafiorita"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/14">README-Driven Design</a>
+Next: <a href="/2020/talks/16">Org-roam: Presentation, Demonstration, and What's on the Horizon</a>
+
+
+[[!inline pages="internal(2020/info/15)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 2:41 PM - 2:51 PM EST
+Saturday, Nov 28 2020, ~11:41 AM - 11:51 AM PST
+Saturday, Nov 28 2020, ~ 7:41 PM - 7:51 PM UTC
+Saturday, Nov 28 2020, ~ 8:41 PM - 8:51 PM CET
+Sunday, Nov 29 2020, ~ 3:41 AM - 3:51 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/14">README-Driven Design</a>
+Next: <a href="/2020/talks/16">Org-roam: Presentation, Demonstration, and What's on the Horizon</a>
+
+
diff --git a/2020/talks/16.md b/2020/talks/16.md
new file mode 100644
index 00000000..13f67e26
--- /dev/null
+++ b/2020/talks/16.md
@@ -0,0 +1,24 @@
+[[!meta title="Org-roam: Presentation, Demonstration, and What's on the Horizon"]]
+[[!meta copyright="Copyright &copy; 2020 Leo Vivier"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/15">Moving from Jekyll to OrgMode, an experience report</a>
+Next: <a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a>
+
+[[!taglink CategoryOrgRoam]]
+
+[[!inline pages="internal(2020/info/16)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 2:54 PM - 3:14 PM EST
+Saturday, Nov 28 2020, ~11:54 AM - 12:14 PM PST
+Saturday, Nov 28 2020, ~ 7:54 PM - 8:14 PM UTC
+Saturday, Nov 28 2020, ~ 8:54 PM - 9:14 PM CET
+Sunday, Nov 29 2020, ~ 3:54 AM - 4:14 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/15">Moving from Jekyll to OrgMode, an experience report</a>
+Next: <a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a>
+
+
diff --git a/2020/talks/17.md b/2020/talks/17.md
new file mode 100644
index 00000000..cb6be4f5
--- /dev/null
+++ b/2020/talks/17.md
@@ -0,0 +1,25 @@
+[[!meta title="Org-mode and Org-Roam for Scholars and Researchers"]]
+[[!meta copyright="Copyright &copy; 2020 Noorah Alhasan"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/16">Org-roam: Presentation, Demonstration, and What's on the Horizon</a>
+Next: <a href="/2020/talks/18">Org-roam: Technical Presentation</a>
+
+[[!taglink CategoryOrgRoam]]
+
+[[!inline pages="internal(2020/info/17)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 3:17 PM - 3:37 PM EST
+Saturday, Nov 28 2020, ~12:17 PM - 12:37 PM PST
+Saturday, Nov 28 2020, ~ 8:17 PM - 8:37 PM UTC
+Saturday, Nov 28 2020, ~ 9:17 PM - 9:37 PM CET
+Sunday, Nov 29 2020, ~ 4:17 AM - 4:37 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/16">Org-roam: Presentation, Demonstration, and What's on the Horizon</a>
+Next: <a href="/2020/talks/18">Org-roam: Technical Presentation</a>
+
+
diff --git a/2020/talks/18.md b/2020/talks/18.md
new file mode 100644
index 00000000..2623a4cb
--- /dev/null
+++ b/2020/talks/18.md
@@ -0,0 +1,24 @@
+[[!meta title="Org-roam: Technical Presentation"]]
+[[!meta copyright="Copyright &copy; 2020 Leo Vivier"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a>
+Next: <a href="/2020/talks/19">Sharing blogs (and more) with org-webring</a>
+
+[[!taglink CategoryOrgRoam]]
+
+[[!inline pages="internal(2020/info/18)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 3:40 PM - 4:00 PM EST
+Saturday, Nov 28 2020, ~12:40 PM - 1:00 PM PST
+Saturday, Nov 28 2020, ~ 8:40 PM - 9:00 PM UTC
+Saturday, Nov 28 2020, ~ 9:40 PM - 10:00 PM CET
+Sunday, Nov 29 2020, ~ 4:40 AM - 5:00 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/17">Org-mode and Org-Roam for Scholars and Researchers</a>
+Next: <a href="/2020/talks/19">Sharing blogs (and more) with org-webring</a>
+
+
diff --git a/2020/talks/19.md b/2020/talks/19.md
new file mode 100644
index 00000000..92444dd0
--- /dev/null
+++ b/2020/talks/19.md
@@ -0,0 +1,24 @@
+[[!meta title="Sharing blogs (and more) with org-webring"]]
+[[!meta copyright="Copyright &copy; 2020 Brett Gilio"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/18">Org-roam: Technical Presentation</a>
+Next: <a href="/2020/talks/20">OMG Macros</a>
+
+
+[[!inline pages="internal(2020/info/19)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 4:03 PM - 4:13 PM EST
+Saturday, Nov 28 2020, ~ 1:03 PM - 1:13 PM PST
+Saturday, Nov 28 2020, ~ 9:03 PM - 9:13 PM UTC
+Saturday, Nov 28 2020, ~10:03 PM - 10:13 PM CET
+Sunday, Nov 29 2020, ~ 5:03 AM - 5:13 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/18">Org-roam: Technical Presentation</a>
+Next: <a href="/2020/talks/20">OMG Macros</a>
+
+
diff --git a/2020/talks/20.md b/2020/talks/20.md
new file mode 100644
index 00000000..b0421c26
--- /dev/null
+++ b/2020/talks/20.md
@@ -0,0 +1,24 @@
+[[!meta title="OMG Macros"]]
+[[!meta copyright="Copyright &copy; 2020 Corwin Brust (mplsCorwin)"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/19">Sharing blogs (and more) with org-webring</a>
+Next: <a href="/2020/talks/40">Day 1 closing remarks</a>
+
+
+[[!inline pages="internal(2020/info/20)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 4:16 PM - 4:36 PM EST
+Saturday, Nov 28 2020, ~ 1:16 PM - 1:36 PM PST
+Saturday, Nov 28 2020, ~ 9:16 PM - 9:36 PM UTC
+Saturday, Nov 28 2020, ~10:16 PM - 10:36 PM CET
+Sunday, Nov 29 2020, ~ 5:16 AM - 5:36 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/19">Sharing blogs (and more) with org-webring</a>
+Next: <a href="/2020/talks/40">Day 1 closing remarks</a>
+
+
diff --git a/2020/talks/21.md b/2020/talks/21.md
new file mode 100644
index 00000000..51f2987c
--- /dev/null
+++ b/2020/talks/21.md
@@ -0,0 +1,24 @@
+[[!meta title="On why most of the best features in eev look like 5-minute hacks"]]
+[[!meta copyright="Copyright &copy; 2020 Eduardo Ochs (edrx)"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/08">Building reproducible Emacs</a>
+Next: <a href="/2020/talks/09">Orgmode - your life in plain text</a>
+
+
+[[!inline pages="internal(2020/info/21)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~11:47 AM - 12:27 PM EST
+Saturday, Nov 28 2020, ~ 8:47 AM - 9:27 AM PST
+Saturday, Nov 28 2020, ~ 4:47 PM - 5:27 PM UTC
+Saturday, Nov 28 2020, ~ 5:47 PM - 6:27 PM CET
+Sunday, Nov 29 2020, ~12:47 AM - 1:27 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/08">Building reproducible Emacs</a>
+Next: <a href="/2020/talks/09">Orgmode - your life in plain text</a>
+
+
diff --git a/2020/talks/22.md b/2020/talks/22.md
new file mode 100644
index 00000000..6fd5b746
--- /dev/null
+++ b/2020/talks/22.md
@@ -0,0 +1,24 @@
+[[!meta title="Powering-up Special Blocks"]]
+[[!meta copyright="Copyright &copy; 2020 Musa Al-hassy"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/38">Emacs development update</a>
+Next: <a href="/2020/talks/23">Incremental Parsing with emacs-tree-sitter</a>
+
+
+[[!inline pages="internal(2020/info/22)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 9:33 AM - 9:53 AM EST
+Sunday, Nov 29 2020, ~ 6:33 AM - 6:53 AM PST
+Sunday, Nov 29 2020, ~ 2:33 PM - 2:53 PM UTC
+Sunday, Nov 29 2020, ~ 3:33 PM - 3:53 PM CET
+Sunday, Nov 29 2020, ~10:33 PM - 10:53 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/38">Emacs development update</a>
+Next: <a href="/2020/talks/23">Incremental Parsing with emacs-tree-sitter</a>
+
+
diff --git a/2020/talks/23.md b/2020/talks/23.md
new file mode 100644
index 00000000..1f0545a2
--- /dev/null
+++ b/2020/talks/23.md
@@ -0,0 +1,24 @@
+[[!meta title="Incremental Parsing with emacs-tree-sitter"]]
+[[!meta copyright="Copyright &copy; 2020 Tuấn-Anh Nguyễn"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/22">Powering-up Special Blocks</a>
+Next: <a href="/2020/talks/24">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</a>
+
+
+[[!inline pages="internal(2020/info/23)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 9:56 AM - 10:46 AM EST
+Sunday, Nov 29 2020, ~ 6:56 AM - 7:46 AM PST
+Sunday, Nov 29 2020, ~ 2:56 PM - 3:46 PM UTC
+Sunday, Nov 29 2020, ~ 3:56 PM - 4:46 PM CET
+Sunday, Nov 29 2020, ~10:56 PM - 11:46 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/22">Powering-up Special Blocks</a>
+Next: <a href="/2020/talks/24">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</a>
+
+
diff --git a/2020/talks/24.md b/2020/talks/24.md
new file mode 100644
index 00000000..53e366e1
--- /dev/null
+++ b/2020/talks/24.md
@@ -0,0 +1,24 @@
+[[!meta title="Analyze code quality through Emacs: a smart forensics approach and the story of a hack"]]
+[[!meta copyright="Copyright &copy; 2020 Andrea"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/23">Incremental Parsing with emacs-tree-sitter</a>
+Next: <a href="/2020/talks/25">Traverse complex JSON structures with live feedback</a>
+
+
+[[!inline pages="internal(2020/info/24)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~10:49 AM - 11:09 AM EST
+Sunday, Nov 29 2020, ~ 7:49 AM - 8:09 AM PST
+Sunday, Nov 29 2020, ~ 3:49 PM - 4:09 PM UTC
+Sunday, Nov 29 2020, ~ 4:49 PM - 5:09 PM CET
+Sunday, Nov 29 2020, ~11:49 PM - 12:09 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/23">Incremental Parsing with emacs-tree-sitter</a>
+Next: <a href="/2020/talks/25">Traverse complex JSON structures with live feedback</a>
+
+
diff --git a/2020/talks/25.md b/2020/talks/25.md
new file mode 100644
index 00000000..968a9357
--- /dev/null
+++ b/2020/talks/25.md
@@ -0,0 +1,24 @@
+[[!meta title="Traverse complex JSON structures with live feedback"]]
+[[!meta copyright="Copyright &copy; 2020 Zen Monk Alain M. Lafon"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/24">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</a>
+Next: <a href="/2020/talks/39">NonGNU ELPA</a>
+
+
+[[!inline pages="internal(2020/info/25)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~11:12 AM - 11:22 AM EST
+Sunday, Nov 29 2020, ~ 8:12 AM - 8:22 AM PST
+Sunday, Nov 29 2020, ~ 4:12 PM - 4:22 PM UTC
+Sunday, Nov 29 2020, ~ 5:12 PM - 5:22 PM CET
+Monday, Nov 30 2020, ~12:12 AM - 12:22 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/24">Analyze code quality through Emacs: a smart forensics approach and the story of a hack</a>
+Next: <a href="/2020/talks/39">NonGNU ELPA</a>
+
+
diff --git a/2020/talks/26.md b/2020/talks/26.md
new file mode 100644
index 00000000..dadd9afe
--- /dev/null
+++ b/2020/talks/26.md
@@ -0,0 +1,24 @@
+[[!meta title="Emacs as a Highschooler: How It Changed My Life"]]
+[[!meta copyright="Copyright &copy; 2020 Pierce Wang"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/39">NonGNU ELPA</a>
+Next: <a href="/2020/talks/27">State of Retro Gaming in Emacs</a>
+
+
+[[!inline pages="internal(2020/info/26)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 1:03 PM - 1:13 PM EST
+Sunday, Nov 29 2020, ~10:03 AM - 10:13 AM PST
+Sunday, Nov 29 2020, ~ 6:03 PM - 6:13 PM UTC
+Sunday, Nov 29 2020, ~ 7:03 PM - 7:13 PM CET
+Monday, Nov 30 2020, ~ 2:03 AM - 2:13 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/39">NonGNU ELPA</a>
+Next: <a href="/2020/talks/27">State of Retro Gaming in Emacs</a>
+
+
diff --git a/2020/talks/27.md b/2020/talks/27.md
new file mode 100644
index 00000000..73fe8bdd
--- /dev/null
+++ b/2020/talks/27.md
@@ -0,0 +1,24 @@
+[[!meta title="State of Retro Gaming in Emacs"]]
+[[!meta copyright="Copyright &copy; 2020 Vasilij "wasamasa" Schneidermann"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/26">Emacs as a Highschooler: How It Changed My Life</a>
+Next: <a href="/2020/talks/28">Welcome To The Dungeon</a>
+
+
+[[!inline pages="internal(2020/info/27)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 1:16 PM - 1:26 PM EST
+Sunday, Nov 29 2020, ~10:16 AM - 10:26 AM PST
+Sunday, Nov 29 2020, ~ 6:16 PM - 6:26 PM UTC
+Sunday, Nov 29 2020, ~ 7:16 PM - 7:26 PM CET
+Monday, Nov 30 2020, ~ 2:16 AM - 2:26 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/26">Emacs as a Highschooler: How It Changed My Life</a>
+Next: <a href="/2020/talks/28">Welcome To The Dungeon</a>
+
+
diff --git a/2020/talks/28.md b/2020/talks/28.md
new file mode 100644
index 00000000..bae5f837
--- /dev/null
+++ b/2020/talks/28.md
@@ -0,0 +1,29 @@
+[[!meta title="Welcome To The Dungeon"]]
+[[!meta copyright="Copyright &copy; 2020 Erik Elmshauser and Corwin Brust"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/27">State of Retro Gaming in Emacs</a>
+Next: <a href="/2020/talks/29">Pathing of Least Resistance</a>
+
+[[!template id="help" tags="help_with_main_captions"
+summary="main talk does not have captions"
+volunteer=""
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/help_with_main_captions)? You may be able to start with these
+[autogenerated captions](/2020/subtitles/emacsconf-2020--28-welcome-to-the-dungeon--erik-elmshauser-corwin-brust-autogen.vtt)."""]]
+
+[[!inline pages="internal(2020/info/28)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 1:29 PM - 2:19 PM EST
+Sunday, Nov 29 2020, ~10:29 AM - 11:19 AM PST
+Sunday, Nov 29 2020, ~ 6:29 PM - 7:19 PM UTC
+Sunday, Nov 29 2020, ~ 7:29 PM - 8:19 PM CET
+Monday, Nov 30 2020, ~ 2:29 AM - 3:19 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/27">State of Retro Gaming in Emacs</a>
+Next: <a href="/2020/talks/29">Pathing of Least Resistance</a>
+
+
diff --git a/2020/talks/29.md b/2020/talks/29.md
new file mode 100644
index 00000000..425a23f1
--- /dev/null
+++ b/2020/talks/29.md
@@ -0,0 +1,24 @@
+[[!meta title="Pathing of Least Resistance"]]
+[[!meta copyright="Copyright &copy; 2020 Erik Elmshauser and Corwin Brust (mplsCorwin)"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/28">Welcome To The Dungeon</a>
+Next: <a href="/2020/talks/30">A tour of vterm</a>
+
+
+[[!inline pages="internal(2020/info/29)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 2:22 PM - 2:42 PM EST
+Sunday, Nov 29 2020, ~11:22 AM - 11:42 AM PST
+Sunday, Nov 29 2020, ~ 7:22 PM - 7:42 PM UTC
+Sunday, Nov 29 2020, ~ 8:22 PM - 8:42 PM CET
+Monday, Nov 30 2020, ~ 3:22 AM - 3:42 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/28">Welcome To The Dungeon</a>
+Next: <a href="/2020/talks/30">A tour of vterm</a>
+
+
diff --git a/2020/talks/30.md b/2020/talks/30.md
new file mode 100644
index 00000000..1b6c41f4
--- /dev/null
+++ b/2020/talks/30.md
@@ -0,0 +1,23 @@
+[[!meta title="A tour of vterm"]]
+[[!meta copyright="Copyright &copy; 2020 Gabriele Bozzola (@sbozzolo)"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/29">Pathing of Least Resistance</a>
+Next: <a href="/2020/talks/31">Lakota Language and Emacs</a>
+
+[[!inline pages="internal(2020/info/30)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 2:45 PM - 2:55 PM EST
+Sunday, Nov 29 2020, ~11:45 AM - 11:55 AM PST
+Sunday, Nov 29 2020, ~ 7:45 PM - 7:55 PM UTC
+Sunday, Nov 29 2020, ~ 8:45 PM - 8:55 PM CET
+Monday, Nov 30 2020, ~ 3:45 AM - 3:55 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/29">Pathing of Least Resistance</a>
+Next: <a href="/2020/talks/31">Lakota Language and Emacs</a>
+
+
diff --git a/2020/talks/31.md b/2020/talks/31.md
new file mode 100644
index 00000000..4d6b308f
--- /dev/null
+++ b/2020/talks/31.md
@@ -0,0 +1,29 @@
+[[!meta title="Lakota Language and Emacs"]]
+[[!meta copyright="Copyright &copy; 2020 Grant Shangreaux"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/30">A tour of vterm</a>
+Next: <a href="/2020/talks/32">Object Oriented Code in the Gnus Newsreader</a>
+
+[[!template id="help" tags="help_with_main_captions"
+summary="main talk does not have captions"
+volunteer=""
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/help_with_main_captions)? You may be able to start with these
+[autogenerated captions](/2020/subtitles/emacsconf-2020--31-lakota-language-and-emacs--grant-shangreaux-autogen.vtt)."""]]
+
+[[!inline pages="internal(2020/info/31)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 2:58 PM - 3:14 PM EST
+Sunday, Nov 29 2020, ~11:58 AM - 12:14 PM PST
+Sunday, Nov 29 2020, ~ 7:58 PM - 8:14 PM UTC
+Sunday, Nov 29 2020, ~ 8:58 PM - 9:14 PM CET
+Monday, Nov 30 2020, ~ 3:58 AM - 4:14 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/30">A tour of vterm</a>
+Next: <a href="/2020/talks/32">Object Oriented Code in the Gnus Newsreader</a>
+
+
diff --git a/2020/talks/32.md b/2020/talks/32.md
new file mode 100644
index 00000000..ed6eaa81
--- /dev/null
+++ b/2020/talks/32.md
@@ -0,0 +1,29 @@
+[[!meta title="Object Oriented Code in the Gnus Newsreader"]]
+[[!meta copyright="Copyright &copy; 2020 Eric Abrahamsen"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/31">Lakota Language and Emacs</a>
+Next: <a href="/2020/talks/33">Maxima a computer algebra system in Emacs</a>
+
+[[!template id="help" tags="help_with_main_captions"
+summary="main talk does not have captions"
+volunteer="sachac"
+message="""This talk does not have captions yet. Would you like to help [caption this talk](/help_with_main_captions)? You may be able to start with these
+[autogenerated captions](/2020/subtitles/emacsconf-2020--32-object-oriented-code-in-the-gnus-newsreader--eric-abrahamsen-autogen.vtt)."""]]
+
+
+[[!inline pages="internal(2020/info/32)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 3:17 PM - 3:41 PM EST
+Sunday, Nov 29 2020, ~12:17 PM - 12:41 PM PST
+Sunday, Nov 29 2020, ~ 8:17 PM - 8:41 PM UTC
+Sunday, Nov 29 2020, ~ 9:17 PM - 9:41 PM CET
+Monday, Nov 30 2020, ~ 4:17 AM - 4:41 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/31">Lakota Language and Emacs</a>
+Next: <a href="/2020/talks/33">Maxima a computer algebra system in Emacs</a>
+
+
diff --git a/2020/talks/33.md b/2020/talks/33.md
new file mode 100644
index 00000000..6165bf37
--- /dev/null
+++ b/2020/talks/33.md
@@ -0,0 +1,24 @@
+[[!meta title="Maxima a computer algebra system in Emacs"]]
+[[!meta copyright="Copyright &copy; 2020 Fermin MF"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/32">Object Oriented Code in the Gnus Newsreader</a>
+Next: <a href="/2020/talks/34">Extend Emacs to Modern GUI Applications with EAF</a>
+
+
+[[!inline pages="internal(2020/info/33)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 3:44 PM - 4:04 PM EST
+Sunday, Nov 29 2020, ~12:44 PM - 1:04 PM PST
+Sunday, Nov 29 2020, ~ 8:44 PM - 9:04 PM UTC
+Sunday, Nov 29 2020, ~ 9:44 PM - 10:04 PM CET
+Monday, Nov 30 2020, ~ 4:44 AM - 5:04 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/32">Object Oriented Code in the Gnus Newsreader</a>
+Next: <a href="/2020/talks/34">Extend Emacs to Modern GUI Applications with EAF</a>
+
+
diff --git a/2020/talks/34.md b/2020/talks/34.md
new file mode 100644
index 00000000..9dafeb79
--- /dev/null
+++ b/2020/talks/34.md
@@ -0,0 +1,24 @@
+[[!meta title="Extend Emacs to Modern GUI Applications with EAF"]]
+[[!meta copyright="Copyright &copy; 2020 Matthew Zeng"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/33">Maxima a computer algebra system in Emacs</a>
+Next: <a href="/2020/talks/35">WAVEing at Repetitive Repetitive Repetitive Music</a>
+
+
+[[!inline pages="internal(2020/info/34)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 4:07 PM - 4:30 PM EST
+Sunday, Nov 29 2020, ~ 1:07 PM - 1:30 PM PST
+Sunday, Nov 29 2020, ~ 9:07 PM - 9:30 PM UTC
+Sunday, Nov 29 2020, ~10:07 PM - 10:30 PM CET
+Monday, Nov 30 2020, ~ 5:07 AM - 5:30 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/33">Maxima a computer algebra system in Emacs</a>
+Next: <a href="/2020/talks/35">WAVEing at Repetitive Repetitive Repetitive Music</a>
+
+
diff --git a/2020/talks/35.md b/2020/talks/35.md
new file mode 100644
index 00000000..f7ef9b6f
--- /dev/null
+++ b/2020/talks/35.md
@@ -0,0 +1,24 @@
+[[!meta title="WAVEing at Repetitive Repetitive Repetitive Music"]]
+[[!meta copyright="Copyright &copy; 2020 Zachary Kanfer"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/34">Extend Emacs to Modern GUI Applications with EAF</a>
+Next: <a href="/2020/talks/42">Day 2 closing remarks</a>
+
+
+[[!inline pages="internal(2020/info/35)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 4:33 PM - 4:43 PM EST
+Sunday, Nov 29 2020, ~ 1:33 PM - 1:43 PM PST
+Sunday, Nov 29 2020, ~ 9:33 PM - 9:43 PM UTC
+Sunday, Nov 29 2020, ~10:33 PM - 10:43 PM CET
+Monday, Nov 30 2020, ~ 5:33 AM - 5:43 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/34">Extend Emacs to Modern GUI Applications with EAF</a>
+Next: <a href="/2020/talks/42">Day 2 closing remarks</a>
+
+
diff --git a/2020/talks/38.md b/2020/talks/38.md
new file mode 100644
index 00000000..468783a8
--- /dev/null
+++ b/2020/talks/38.md
@@ -0,0 +1,24 @@
+[[!meta title="Emacs development update"]]
+[[!meta copyright="Copyright &copy; 2020 John Wiegley"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/41">Day 2 opening remarks</a>
+Next: <a href="/2020/talks/22">Powering-up Special Blocks</a>
+
+
+[[!inline pages="internal(2020/info/38)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 9:13 AM - 9:30 AM EST
+Sunday, Nov 29 2020, ~ 6:13 AM - 6:30 AM PST
+Sunday, Nov 29 2020, ~ 2:13 PM - 2:30 PM UTC
+Sunday, Nov 29 2020, ~ 3:13 PM - 3:30 PM CET
+Sunday, Nov 29 2020, ~10:13 PM - 10:30 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/41">Day 2 opening remarks</a>
+Next: <a href="/2020/talks/22">Powering-up Special Blocks</a>
+
+
diff --git a/2020/talks/39.md b/2020/talks/39.md
new file mode 100644
index 00000000..2e533c36
--- /dev/null
+++ b/2020/talks/39.md
@@ -0,0 +1,24 @@
+[[!meta title="NonGNU ELPA"]]
+[[!meta copyright="Copyright &copy; 2020 Richard Stallman"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/25">Traverse complex JSON structures with live feedback</a>
+Next: <a href="/2020/talks/26">Emacs as a Highschooler: How It Changed My Life</a>
+
+
+[[!inline pages="internal(2020/info/39)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~11:25 AM - 11:45 AM EST
+Sunday, Nov 29 2020, ~ 8:25 AM - 8:45 AM PST
+Sunday, Nov 29 2020, ~ 4:25 PM - 4:45 PM UTC
+Sunday, Nov 29 2020, ~ 5:25 PM - 5:45 PM CET
+Monday, Nov 30 2020, ~12:25 AM - 12:45 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/25">Traverse complex JSON structures with live feedback</a>
+Next: <a href="/2020/talks/26">Emacs as a Highschooler: How It Changed My Life</a>
+
+
diff --git a/2020/talks/40.md b/2020/talks/40.md
new file mode 100644
index 00000000..f828beb1
--- /dev/null
+++ b/2020/talks/40.md
@@ -0,0 +1,24 @@
+[[!meta title="Day 1 closing remarks"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, Leo Vivier, Corwin Brust"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/20">OMG Macros</a>
+Next: <a href="/2020/talks/41">Day 2 opening remarks</a>
+
+
+[[!inline pages="internal(2020/info/40)" raw="yes"]]
+
+Saturday, Nov 28 2020, ~ 4:30 PM - 5:00 PM EST
+Saturday, Nov 28 2020, ~ 1:30 PM - 2:00 PM PST
+Saturday, Nov 28 2020, ~ 9:30 PM - 10:00 PM UTC
+Saturday, Nov 28 2020, ~10:30 PM - 11:00 PM CET
+Sunday, Nov 29 2020, ~ 5:30 AM - 6:00 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/20">OMG Macros</a>
+Next: <a href="/2020/talks/41">Day 2 opening remarks</a>
+
+
diff --git a/2020/talks/41.md b/2020/talks/41.md
new file mode 100644
index 00000000..6866e26f
--- /dev/null
+++ b/2020/talks/41.md
@@ -0,0 +1,24 @@
+[[!meta title="Day 2 opening remarks"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, Leo Vivier"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/40">Day 1 closing remarks</a>
+Next: <a href="/2020/talks/38">Emacs development update</a>
+
+
+[[!inline pages="internal(2020/info/41)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 9:00 AM - 9:10 AM EST
+Sunday, Nov 29 2020, ~ 6:00 AM - 6:10 AM PST
+Sunday, Nov 29 2020, ~ 2:00 PM - 2:10 PM UTC
+Sunday, Nov 29 2020, ~ 3:00 PM - 3:10 PM CET
+Sunday, Nov 29 2020, ~10:00 PM - 10:10 PM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/40">Day 1 closing remarks</a>
+Next: <a href="/2020/talks/38">Emacs development update</a>
+
+
diff --git a/2020/talks/42.md b/2020/talks/42.md
new file mode 100644
index 00000000..399d635c
--- /dev/null
+++ b/2020/talks/42.md
@@ -0,0 +1,22 @@
+[[!meta title="Day 2 closing remarks"]]
+[[!meta copyright="Copyright &copy; 2020 Amin Bandali, Sacha Chua, Leo Vivier, Corwin Brust"]]
+
+<!-- To edit the talk information, change /2020/info/TALKID.md. Boilerplate automatically generated from submissions.org using conf/generate-schedule-files --->
+
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/35">WAVEing at Repetitive Repetitive Repetitive Music</a>
+
+
+[[!inline pages="internal(2020/info/42)" raw="yes"]]
+
+Sunday, Nov 29 2020, ~ 4:30 PM - 5:00 PM EST
+Sunday, Nov 29 2020, ~ 1:30 PM - 2:00 PM PST
+Sunday, Nov 29 2020, ~ 9:30 PM - 10:00 PM UTC
+Sunday, Nov 29 2020, ~10:30 PM - 11:00 PM CET
+Monday, Nov 30 2020, ~ 5:30 AM - 6:00 AM +08
+
+Back to the [[schedule]]
+Previous: <a href="/2020/talks/35">WAVEing at Repetitive Repetitive Repetitive Music</a>
+
+