summaryrefslogtreecommitdiffstats
path: root/2022/captions
diff options
context:
space:
mode:
Diffstat (limited to '2022/captions')
-rw-r--r--2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt411
-rw-r--r--2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt52
-rw-r--r--2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt874
-rw-r--r--2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt970
-rw-r--r--2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt40
-rw-r--r--2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt1505
-rw-r--r--2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt25
-rw-r--r--2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt424
-rw-r--r--2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt1004
-rw-r--r--2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt49
-rw-r--r--2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt890
-rw-r--r--2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt1691
-rw-r--r--2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt55
-rw-r--r--2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt1126
-rw-r--r--2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt1028
-rw-r--r--2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt34
-rw-r--r--2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt502
-rw-r--r--2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt53
-rw-r--r--2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt473
-rw-r--r--2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt489
-rw-r--r--2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt1184
-rw-r--r--2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt38
-rw-r--r--2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt739
-rw-r--r--2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt6638
-rw-r--r--2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt787
-rw-r--r--2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt791
-rw-r--r--2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt65
-rw-r--r--2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt1945
-rw-r--r--2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt815
-rw-r--r--2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt31
-rw-r--r--2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt323
-rw-r--r--2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt554
-rw-r--r--2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt117
-rw-r--r--2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt1354
-rw-r--r--2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt653
-rw-r--r--2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt56
-rw-r--r--2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt1261
-rw-r--r--2022/captions/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt1184
-rw-r--r--2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt467
-rw-r--r--2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt43
-rw-r--r--2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt1048
-rw-r--r--2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt1019
-rw-r--r--2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt29
-rw-r--r--2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt818
-rw-r--r--2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt464
-rw-r--r--2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt41
-rw-r--r--2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt792
-rw-r--r--2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt43
-rw-r--r--2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt826
-rw-r--r--2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt497
-rw-r--r--2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt726
-rw-r--r--2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt1002
-rw-r--r--2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt1046
-rw-r--r--2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt80
-rw-r--r--2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt1757
-rw-r--r--2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt44
-rw-r--r--2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt806
-rw-r--r--2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt56
-rw-r--r--2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt1192
-rw-r--r--2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt563
-rw-r--r--2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt82
-rw-r--r--2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt1321
-rw-r--r--2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt1322
-rw-r--r--2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt611
-rw-r--r--2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt34
-rw-r--r--2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt508
-rw-r--r--2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--answers.vtt2348
-rw-r--r--2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt80
-rw-r--r--2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt2258
-rw-r--r--2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt71
-rw-r--r--2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt1220
-rw-r--r--2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt852
-rw-r--r--2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt1133
-rw-r--r--2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt38
-rw-r--r--2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt1129
-rw-r--r--2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt56
-rw-r--r--2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt1736
-rw-r--r--2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt109
-rw-r--r--2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt2217
-rw-r--r--2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt32
-rw-r--r--2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt756
-rw-r--r--2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt73
-rw-r--r--2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt1315
-rw-r--r--2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt29
-rw-r--r--2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt273
-rw-r--r--2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt26
-rw-r--r--2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt383
-rw-r--r--2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt32
-rw-r--r--2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt1232
-rw-r--r--2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt55
-rw-r--r--2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt1153
-rw-r--r--2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt1535
-rw-r--r--2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt38
-rw-r--r--2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt1309
-rw-r--r--2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt68
-rw-r--r--2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt1614
-rw-r--r--2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt40
-rw-r--r--2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt727
-rw-r--r--2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt2153
-rw-r--r--2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt471
-rw-r--r--2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt23
-rw-r--r--2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt893
-rw-r--r--2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt77
-rw-r--r--2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt1309
104 files changed, 76330 insertions, 0 deletions
diff --git a/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt
new file mode 100644
index 00000000..3bccf8fb
--- /dev/null
+++ b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--answers.vtt
@@ -0,0 +1,411 @@
+WEBVTT
+
+NOTE
+Introduction
+
+00:00:00.000 --> 00:00:05.799
+[Amin]: All right. Hey, everyone. Thanks, Zach, for the great talk. Here is a live Q&A.
+
+00:00:05.800 --> 00:00:12.399
+People can start putting the questions onto the pad, and Zach will answer them.
+
+00:00:12.400 --> 00:00:15.007
+Zach, take it away. Thanks, Zach. Here is a live Q&A.
+
+00:00:15.008 --> 00:01:12.599
+[Zach]: Okay. So, first question. Let's see.
+
+NOTE Why did you choose an internal state versus many 'state buffers'?
+
+00:01:12.600 --> 00:01:16.039
+Okay. So, the first question is why did you choose an internal state
+
+00:01:16.040 --> 00:01:22.959
+versus many state buffers? So, the main reason was more control
+
+00:01:22.960 --> 00:01:29.599
+from the game perspective. I mean, if this was to be a tool,
+
+00:01:29.600 --> 00:01:35.519
+if this was to be a tool that perhaps was used for more, like,
+
+00:01:35.520 --> 00:01:41.479
+real-world applications where maybe you'd want users to be able to, like,
+
+00:01:41.480 --> 00:01:43.399
+use any of their preexisting
+
+00:01:43.400 --> 00:01:48.559
+— like, if you wanted to really make a grid of cells that would —
+
+00:01:48.560 --> 00:01:53.639
+so, then I think maybe using real buffers in that case
+
+00:01:53.640 --> 00:01:56.199
+would probably be the better thing since you wouldn't have to, like,
+
+00:01:56.200 --> 00:02:04.239
+redo everything. But I found that just, like, centralizing the state
+
+00:02:04.240 --> 00:02:10.719
+into one place for the game at least made it the easiest to implement.
+
+NOTE Do you have plans to port shenzhen.io to Emacs?
+
+00:02:10.720 --> 00:02:14.079
+Next one. Do you have plans to port Shenzhen I.O. to Emacs?
+
+00:02:14.080 --> 00:02:19.559
+Well, I was actually thinking about exopunks, perhaps,
+
+00:02:19.560 --> 00:02:26.599
+but Shenzhen I.O. would be pretty cool to add as well.
+
+00:02:26.600 --> 00:02:29.959
+So, this doesn't use any Wasm at all.
+
+NOTE Did this use WASM?
+
+00:02:29.960 --> 00:02:33.799
+So, the next question is, did this use Wasm?
+
+00:02:33.800 --> 00:02:41.999
+So, it's asking about, like, using Wasm Emacs. So, this actually —
+
+00:02:42.000 --> 00:02:45.239
+this doesn't use any Wasm under the hood.
+
+00:02:45.240 --> 00:02:49.639
+It's pretty much analogous to the game TIS 100 is to real assembly
+
+00:02:49.640 --> 00:02:59.799
+as this game is to web assembly. Slight resemblance, but, yeah, just a game.
+
+NOTE Why wasm rather than a more traditional Assembly dialect? It wouldn't be harder to implement, right?
+
+00:02:59.800 --> 00:03:06.039
+So, okay, so the next question is why Wasm
+
+00:03:06.040 --> 00:03:09.359
+rather than a more traditional assembly dialect?
+
+00:03:09.360 --> 00:03:11.799
+It wouldn't be harder to implement, right?
+
+00:03:11.800 --> 00:03:16.919
+So, it would actually probably have been easier, in all honesty, just because,
+
+00:03:16.920 --> 00:03:20.679
+you know, more traditional — like, TIS 100, for example.
+
+00:03:20.680 --> 00:03:24.599
+You have each of the — you have each instruction on a line,
+
+00:03:24.600 --> 00:03:29.519
+and it's pretty easy to, you know, syntax hiding just one line.
+
+00:03:29.520 --> 00:03:32.599
+So, this with the weird S expressions across the line, deeply nested,
+
+00:03:32.600 --> 00:03:37.239
+and then, like, the step debugger thing and these weird cell things.
+
+00:03:37.240 --> 00:03:40.239
+They made things really complicated, but I definitely wanted to, like —
+
+00:03:40.240 --> 00:03:47.559
+the main reason is I didn't — I wanted it to not — to look as least as —
+
+00:03:47.560 --> 00:03:52.919
+to look — to resemble TIS 100 as little as possible,
+
+00:03:52.920 --> 00:03:54.399
+even though it's still pretty much the same game.
+
+00:03:54.400 --> 00:04:44.439
+[Amin]: Thanks, Zach. I think we still have about, like, eight minutes or so.
+
+00:04:44.440 --> 00:04:46.159
+Or eight and a half minutes of Q&A time.
+
+00:04:46.160 --> 00:04:47.919
+So, folks, if you do have any other questions,
+
+00:04:47.920 --> 00:04:50.119
+please do keep them coming in the pad, and, yeah,
+
+00:04:50.120 --> 00:04:53.079
+Zach will continue answering them.
+
+00:04:53.080 --> 00:05:08.959
+[Zach]: Sounds good. Thank you.
+
+NOTE Any next projects on your mind?
+
+00:05:08.960 --> 00:05:11.399
+So, next question. Any next projects on your mind?
+
+00:05:11.400 --> 00:05:15.679
+Yeah, actually, I have a couple ideas for projects,
+
+00:05:15.680 --> 00:05:21.639
+and these would all be, hopefully, maybe more useful.
+
+00:05:21.640 --> 00:05:24.119
+I think TreeSitter is pretty
+
+00:05:24.120 --> 00:05:28.639
+cool. I think there's a lot of directions that I could go, like,
+
+00:05:28.640 --> 00:05:34.639
+there's a plugin in NeoVim called NeoGen, which generates documentation.
+
+00:05:34.640 --> 00:05:41.359
+That would be cool. I've been playing with this. What else?
+
+00:05:41.360 --> 00:05:45.559
+Yeah, I mean, hopefully, next year, at next the Emacs conference,
+
+00:05:45.560 --> 00:05:52.679
+I could be presenting something more useful.
+
+NOTE Does this work with any other paren-based editing packages?
+
+00:05:52.680 --> 00:05:57.479
+Next question. Does this work with any other paren-based editing packages?
+
+00:05:57.480 --> 00:06:02.759
+Not at all. Not at all. In fact, just because of the way the buffer was set up,
+
+00:06:02.760 --> 00:06:07.999
+how it's just, like, the illusion of a buffer, like, not even, like,
+
+00:06:08.000 --> 00:06:17.119
+the syntax parsing works correctly, because just because everything's, like,
+
+00:06:17.120 --> 00:06:19.239
+the way the grids are set up, like, you have, like,
+
+00:06:19.240 --> 00:06:23.839
+the other cells kind of interfering with the way that parse is.
+
+00:06:23.840 --> 00:06:29.799
+But the way it was architected, it's actually a really simple macro.
+
+00:06:29.800 --> 00:06:33.159
+There's a little macro called, like, run in buffer.
+
+00:06:33.160 --> 00:06:37.279
+You have, like, run in buffer, and then you put your elist code,
+
+00:06:37.280 --> 00:06:42.439
+and then it tries to create the illusion that it's actually running
+
+00:06:42.440 --> 00:06:46.919
+in a real buffer. So this macro kind of does all the configuration setup.
+
+NOTE What kind of tool could use this idea?
+
+00:06:46.920 --> 00:06:55.839
+So, I mean, maybe with, like, more configuration settings,
+
+00:06:55.840 --> 00:06:58.399
+maybe something like that could have been done.
+
+00:06:58.400 --> 00:07:04.239
+So next question. What kind of tool could you use this idea?
+
+00:07:04.240 --> 00:07:09.479
+Oh, going back to the next project on your mind.
+
+00:07:09.480 --> 00:07:12.639
+This actually came up to my mind as, like, a graphical.
+
+00:07:12.640 --> 00:07:21.359
+So, in terms of, like, there's a lot of graphing tools, like ASCII.
+
+00:07:21.360 --> 00:07:25.679
+So, like, you type in some text representation, it generates an ASCII document.
+
+00:07:25.680 --> 00:07:28.599
+I think it would be really cool to have, like,
+
+00:07:28.600 --> 00:07:31.079
+an Emacs package that sort of works, like,
+
+00:07:31.080 --> 00:07:35.519
+those online really slick graph drawing tools.
+
+00:07:35.520 --> 00:07:40.919
+So, like, you can just press tab, and it draws a new box with an ASCII arrow,
+
+00:07:40.920 --> 00:07:43.759
+and then, like, it can create these diagrams really easy.
+
+00:07:43.760 --> 00:07:46.359
+I think that would be a really cool project.
+
+00:07:46.360 --> 00:07:52.039
+And so, something like that, obviously, like, you have different cells.
+
+00:07:52.040 --> 00:07:56.279
+And so, that's actually another thing I think would be cool to work on.
+
+NOTE How did you go about designing the puzzles?
+
+00:07:56.280 --> 00:08:04.039
+So, designing puzzles. So, it's funny.
+
+00:08:04.040 --> 00:08:07.879
+If you listen to Zach Barth's talk about TS100,
+
+00:08:07.880 --> 00:08:12.759
+he goes into, like, you pretty just, like, you pretty just,
+
+00:08:12.760 --> 00:08:16.159
+it's just like you make up a puzzle you think could work,
+
+00:08:16.160 --> 00:08:18.279
+and chances are it does end up working.
+
+00:08:18.280 --> 00:08:23.959
+And that's how I roll, at least my custom puzzles in the game, just, like,
+
+00:08:23.960 --> 00:08:28.599
+come up with some random idea, think it probably should work,
+
+00:08:28.600 --> 00:08:35.839
+and then try to go implementing it. And usually, it's implementable.
+
+00:08:35.840 --> 00:08:39.319
+I mean, four by three boxes, you can do quite a bit.
+
+NOTE What are your favorite changes in the upcoming Emacs 29?
+
+00:08:39.320 --> 00:08:44.119
+And I don't put any restrictions on the cells, like, TS100.
+
+00:08:44.120 --> 00:08:47.719
+What are your favorite changes in the upcoming Emacs 29?
+
+00:08:47.720 --> 00:08:50.479
+So, definitely TreeSitter is pretty cool.
+
+00:08:50.480 --> 00:08:55.679
+Just because, like, you have syntax, you have access to that.
+
+00:08:55.680 --> 00:08:59.719
+You can build syntax-aware extensions.
+
+00:08:59.720 --> 00:09:03.559
+So, like, I was just I was playing around with it, and it's pretty cool.
+
+00:09:03.560 --> 00:09:07.479
+You can just, like, get the syntax tree and search for syntax patterns.
+
+NOTE Are there tools to add more puzzles?
+
+00:09:07.480 --> 00:09:25.199
+So, it's exciting to see what might be done with that.
+
+00:09:25.200 --> 00:09:28.879
+Are there tools to add more puzzles? So, there's not tools,
+
+00:09:28.880 --> 00:09:35.959
+but in the code itself, there's a file called azimbox puzzles.
+
+00:09:35.960 --> 00:09:39.079
+And it's pretty much just, like, you have a generator function.
+
+00:09:39.080 --> 00:09:43.079
+You configure it's just, like, you're pretty much defining a struct.
+
+00:09:43.080 --> 00:09:45.679
+So, I mean, if you're familiar with the Emax list,
+
+00:09:45.680 --> 00:09:47.959
+you can kind of define puzzles pretty easily.
+
+00:09:47.960 --> 00:09:54.279
+Define where your inputs are, generate a function to generate these inputs,
+
+00:09:54.280 --> 00:09:57.799
+and then a generator function to generate which outputs you want.
+
+00:09:57.800 --> 00:10:02.159
+So, it's pretty, I mean, code-wise, it's pretty self-contained.
+
+00:10:02.160 --> 00:10:10.239
+But yeah, maybe I could have done, like, a more streamlined job with that.
+
+00:10:10.240 --> 00:10:17.159
+Like, a binding to graph is? Oh, yeah, with the graph thing I was mentioning.
+
+00:10:17.160 --> 00:10:23.479
+So, that would also actually be pretty cool, too. But I was thinking more just,
+
+00:10:23.480 --> 00:10:31.119
+like, plain ASCII graphs. Just, like, you already have just, like, so,
+
+00:10:31.120 --> 00:10:33.439
+a tool I've seen recently is called Diagon.
+
+00:10:33.440 --> 00:10:38.079
+So, you basically type in, like, some really, like,
+
+00:10:38.080 --> 00:10:41.759
+a textual representation of the graph, like, A arrow B, B arrow C,
+
+00:10:41.760 --> 00:10:44.079
+and it generates, like, an ASCII diagram.
+
+00:10:44.080 --> 00:10:52.799
+So, something like that would be cool, like, so, like, you have, like,
+
+00:10:52.800 --> 00:11:01.839
+a grid of, like, little nodes, and control F maybe brings you to the next one,
+
+00:11:01.840 --> 00:11:07.279
+and maybe tab, maybe would create a new node with a new ASCII
+
+00:11:07.280 --> 00:11:20.879
+arrow to it. That would be a cool, that would be a really cool extension.
+
+00:11:20.880 --> 00:11:25.319
+But, yeah, I mean, obviously, graph is an amazing tool.
+
+00:11:25.320 --> 00:11:28.079
+So, a lot could be done with that as well.
+
+00:11:28.080 --> 00:12:49.679
+[Amin]: I think we have about, like, a minute or a minute and a half of live questions.
+
+00:12:49.680 --> 00:12:50.719
+We are opening the Q&A, this BB room for people to join.
+
+00:12:50.720 --> 00:12:51.759
+So, folks who want to do that are welcome to do so.
+
+00:12:51.760 --> 00:12:52.199
+And, yeah, after that, the stream will move on.
+
+00:12:52.200 --> 00:12:52.359
+But you can still come in this BB room or keep asking questions on the web.
+
+00:12:52.360 --> 00:12:53.439
+Okay. I think that's about all the time that we have on the stream.
+
+00:12:53.440 --> 00:12:55.079
+Thanks again, Zach, so much, and both for the Q&A and for your great talk,
+
+00:12:55.080 --> 00:12:57.319
+and see you all around. Thank you.
+
+00:12:57.320 --> 00:12:58.239
+Cheers.
+
+00:12:58.240 --> 00:12:58.359
+[Zach]: Thank you.
+
+00:12:58.360 --> 00:14:19.200
+You are currently the only person in this conference.
diff --git a/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt
new file mode 100644
index 00000000..6124054e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main--chapters.vtt
@@ -0,0 +1,52 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:30.680
+Introduction
+
+00:00:30.680 --> 00:00:44.960
+TIS-100
+
+00:00:44.960 --> 00:01:08.040
+WebAssembly
+
+00:01:08.040 --> 00:02:07.640
+Basic stack operations
+
+00:02:07.640 --> 00:02:44.680
+Numeric commands
+
+00:02:44.680 --> 00:03:21.400
+Boolean operations
+
+00:03:21.400 --> 00:04:00.240
+Port operations
+
+00:04:00.240 --> 00:05:15.720
+Control flow
+
+00:05:15.720 --> 00:06:14.480
+Modules
+
+00:06:14.480 --> 00:08:33.040
+Puzzle
+
+00:08:33.040 --> 00:09:35.200
+The game loop
+
+00:09:35.200 --> 00:11:25.880
+Tic-tac-toe
+
+00:11:25.880 --> 00:12:07.800
+Text properties
+
+00:12:07.800 --> 00:14:00.920
+Code cells
+
+00:14:00.920 --> 00:14:37.560
+Undo
+
+00:14:37.560 --> 00:14:52.360
+Parentheses
+
+00:14:52.360 --> 00:16:07.440
+Assembly text to executable code
diff --git a/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt
new file mode 100644
index 00000000..ef640bf3
--- /dev/null
+++ b/2022/captions/emacsconf-2022-asmblox--asmblox-a-game-based-on-webassembly-that-no-one-asked-for--zachary-romero--main.vtt
@@ -0,0 +1,874 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:03.800
+Hi, I'm Zach and today I'll be giving
+
+00:00:03.800 --> 00:00:05.320
+a presentation on asm-blox,
+
+00:00:05.320 --> 00:00:08.960
+a programming game inspired by WebAssembly.
+
+00:00:08.960 --> 00:00:10.840
+So programming games came into prominence
+
+00:00:10.840 --> 00:00:13.160
+about a decade ago and are loved for providing
+
+00:00:13.160 --> 00:00:14.760
+interesting programming challenges
+
+00:00:14.760 --> 00:00:17.160
+without all the messiness of real world programming.
+
+00:00:17.160 --> 00:00:19.960
+I wanted to make a programming game
+
+00:00:19.960 --> 00:00:24.880
+and I decided to base it off of TIS-100,
+
+00:00:24.880 --> 00:00:28.240
+having a pretty basic UI.
+
+00:00:28.240 --> 00:00:30.680
+It seemed pretty doable in Emacs.
+
+00:00:30.680 --> 00:00:33.160
+TIS 100 is a programming game
+
+00:00:33.160 --> 00:00:35.760
+where you write a fictional assembly language
+
+00:00:35.760 --> 00:00:37.280
+into a grid of cells which can each
+
+00:00:37.280 --> 00:00:39.480
+communicate with one another,
+
+00:00:39.480 --> 00:00:41.200
+you're tasked with solving
+
+00:00:41.200 --> 00:00:44.960
+fairly simple CS 101 like problems.
+
+00:00:44.960 --> 00:00:48.440
+To mix things up a bit I decided to base
+
+00:00:48.440 --> 00:00:49.800
+the language of asm-blox off of
+
+00:00:49.800 --> 00:00:52.520
+WebAssembly, which is stack based,
+
+00:00:52.520 --> 00:00:55.360
+as opposed to TIS-100 which is registered based.
+
+00:00:55.360 --> 00:00:59.200
+Here you can see the same program
+
+00:00:59.200 --> 00:01:01.680
+written in the game TIS-100,
+
+00:01:01.680 --> 00:01:03.960
+what it looks like in asm-blox,
+
+00:01:03.960 --> 00:01:08.040
+and the original WebAssembly that it's based off of.
+
+00:01:08.040 --> 00:01:10.640
+With that said, let's get into a demo.
+
+00:01:10.640 --> 00:01:12.240
+This is the game board.
+
+00:01:12.240 --> 00:01:14.120
+It's a 4 by 3 grid.
+
+00:01:14.120 --> 00:01:16.840
+Each cell has a stack of size 4.
+
+00:01:16.840 --> 00:01:20.280
+First off, I'll show some of the stack editing commands.
+
+00:01:20.280 --> 00:01:23.760
+We can add a value with the const function.
+
+00:01:23.760 --> 00:01:27.480
+Here we're adding two values to this stack
+
+00:01:27.480 --> 00:01:33.400
+to get added, and eventually the stack gets overflowed.
+
+00:01:33.400 --> 00:01:37.360
+We can fix that as follows with the clear command,
+
+00:01:37.360 --> 00:01:40.720
+so that clears the stack.
+
+00:01:40.720 --> 00:01:43.200
+We can duplicate values on the stack.
+
+00:01:43.200 --> 00:01:45.600
+This duplicates the item at the bottom of the stack.
+
+00:01:45.600 --> 00:01:48.880
+10 gets put on, 20 gets put on,
+
+00:01:48.880 --> 00:01:50.200
+then 10 will get duplicated
+
+00:01:50.200 --> 00:01:52.680
+and put on the top of the stack.
+
+00:01:52.680 --> 00:01:55.920
+We can increment. For example, this increments
+
+00:01:55.920 --> 00:01:58.760
+the second to bottom, the second to bottom
+
+00:01:58.760 --> 00:01:59.920
+from the stack.
+
+00:01:59.920 --> 00:02:04.400
+So 10, 20, increment that, clear.
+
+00:02:04.400 --> 00:02:07.640
+That's basic stack operations.
+
+00:02:07.640 --> 00:02:11.000
+Next up, we have numeric commands.
+
+00:02:11.000 --> 00:02:12.560
+For example, here, if we add "add",
+
+00:02:12.560 --> 00:02:14.680
+it pops two values off the stack,
+
+00:02:14.680 --> 00:02:17.080
+adds them, and pushes the result on.
+
+00:02:17.080 --> 00:02:20.680
+Another way we can write this is as follows.
+
+00:02:20.680 --> 00:02:22.480
+We can have the add here
+
+00:02:22.480 --> 00:02:26.400
+and then nest the two constants,
+
+00:02:26.400 --> 00:02:28.520
+and then this does the same thing.
+
+00:02:28.520 --> 00:02:31.720
+First, the inner constant operations run,
+
+00:02:31.720 --> 00:02:35.520
+and then the outer add operation runs.
+
+00:02:35.520 --> 00:02:40.280
+We can nest as deeply as we want.
+
+00:02:40.280 --> 00:02:44.680
+There's also subtraction, multiplication, and whatnot.
+
+00:02:44.680 --> 00:02:46.480
+Next up are Boolean operations.
+
+00:02:46.480 --> 00:02:49.080
+Zero counts as true.
+
+00:02:49.080 --> 00:02:51.720
+Anything else--sorry, zero counts as false.
+
+00:02:51.720 --> 00:02:52.760
+Anything else is true.
+
+00:02:52.760 --> 00:03:01.840
+For example, this would give us false and true,
+
+00:03:01.840 --> 00:03:04.040
+so that result should be false.
+
+00:03:04.040 --> 00:03:06.120
+Zero gets put on the stack,
+
+00:03:06.120 --> 00:03:08.160
+one gets put on, and then the "and" operation.
+
+00:03:08.160 --> 00:03:12.840
+So there's also or, not,
+
+00:03:12.840 --> 00:03:17.760
+and various numerical comparison operations
+
+00:03:17.760 --> 00:03:21.400
+like greater than and less than.
+
+00:03:21.400 --> 00:03:22.880
+Next up are the port operations.
+
+00:03:22.880 --> 00:03:27.320
+We can send values to other cells as follows.
+
+00:03:27.320 --> 00:03:29.600
+Here we create a value
+
+00:03:29.600 --> 00:03:33.640
+and then send it right.
+
+00:03:33.640 --> 00:03:35.040
+Let's run this.
+
+00:03:35.040 --> 00:03:37.480
+The 10 goes on the stack,
+
+00:03:37.480 --> 00:03:38.480
+and then it gets sent to the right.
+
+00:03:38.480 --> 00:03:41.360
+Here it's waiting for this cell to pick it up.
+
+00:03:41.360 --> 00:03:44.360
+It can pick it up just as follows.
+
+00:03:44.360 --> 00:03:47.480
+So left... and then why don't we have it
+
+00:03:47.480 --> 00:03:49.520
+drop that value after it gets it.
+
+00:03:49.520 --> 00:03:53.920
+So the 10 gets sent to the right.
+
+00:03:53.920 --> 00:04:00.240
+This one picks it up and drops it.
+
+00:04:00.240 --> 00:04:03.200
+Lastly, we have control flow,
+
+00:04:03.200 --> 00:04:04.280
+which is a bit tricky,
+
+00:04:04.280 --> 00:04:06.880
+but with this visual,
+
+00:04:06.880 --> 00:04:08.440
+it helps explain it.
+
+00:04:08.440 --> 00:04:12.280
+There are two block constructs, "block" and "loop",
+
+00:04:12.280 --> 00:04:16.880
+and there's two jumping constructs, "br" and "brif".
+
+00:04:16.880 --> 00:04:23.120
+So if "loop" is jumped to,
+
+00:04:23.120 --> 00:04:25.360
+the control flow goes to the beginning,
+
+00:04:25.360 --> 00:04:26.520
+the top of the loop.
+
+00:04:26.520 --> 00:04:28.640
+If a block is jumped to,
+
+00:04:28.640 --> 00:04:31.520
+it goes to the end of the block,
+
+00:04:31.520 --> 00:04:33.640
+and these various blocks
+
+00:04:33.640 --> 00:04:36.520
+are identified by their level of nestedness.
+
+00:04:36.520 --> 00:04:40.640
+From the point of view of this jump statement,
+
+00:04:40.640 --> 00:04:45.160
+this "br" statement, this is block level 0,
+
+00:04:45.160 --> 00:04:46.440
+this is 1, this is 2.
+
+00:04:46.440 --> 00:04:49.560
+So here, "br 1" would be referring to this loop.
+
+00:04:49.560 --> 00:04:51.080
+What this [br 1] would do is,
+
+00:04:51.080 --> 00:04:54.000
+it would jump to this loop right here.
+
+00:04:54.000 --> 00:04:57.360
+If we were to do this [br 2], what this would do is,
+
+00:04:57.360 --> 00:05:02.680
+this would jump past this block right here.
+
+00:05:02.680 --> 00:05:09.880
+So as another example, this right here,
+
+00:05:09.880 --> 00:05:15.720
+this is a loop that generates increasing numbers.
+
+00:05:15.720 --> 00:05:22.640
+Let's see. Next up, we have modules.
+
+00:05:22.640 --> 00:05:26.280
+This is an example of a stack module.
+
+00:05:26.280 --> 00:05:28.760
+In addition to stack, there's also heaps.
+
+00:05:28.760 --> 00:05:34.560
+What this does is it allows us to create
+
+00:05:34.560 --> 00:05:38.080
+an extra stack that we can push and pop items onto.
+
+00:05:38.080 --> 00:05:41.240
+This one can have as large size as we need.
+
+00:05:41.240 --> 00:05:43.800
+Here it has a size of 20.
+
+00:05:43.800 --> 00:05:46.400
+It's taking values from up
+
+00:05:46.400 --> 00:05:51.080
+and exposing those values on the left.
+
+00:05:51.080 --> 00:05:57.080
+This loop right here, it generates numbers,
+
+00:05:57.080 --> 00:05:59.160
+and it's putting them onto the stack.
+
+00:05:59.160 --> 00:06:00.920
+We can see here that those numbers
+
+00:06:00.920 --> 00:06:03.200
+are being exposed to this cell right here.
+
+00:06:03.200 --> 00:06:07.040
+It's just taking values, and eventually,
+
+00:06:07.040 --> 00:06:11.200
+it's going to overflow and cause an error.
+
+00:06:11.200 --> 00:06:14.480
+That finishes the basic commands.
+
+00:06:14.480 --> 00:06:16.480
+Why don't we try solving this puzzle.
+
+00:06:16.480 --> 00:06:21.320
+The puzzle description is right here.
+
+00:06:21.320 --> 00:06:23.280
+We want to read a value from I.
+
+00:06:23.280 --> 00:06:28.480
+Send 1 to G if I is greater than 0.
+
+00:06:28.480 --> 00:06:30.800
+Send 1 to E if it's equal to 0.
+
+00:06:30.800 --> 00:06:32.440
+Send 1 to L if it's less than 0.
+
+00:06:32.440 --> 00:06:35.360
+And then all the other ones, we send 0 to.
+
+00:06:35.360 --> 00:06:40.920
+First things first, let's send the value we get
+
+00:06:40.920 --> 00:06:44.400
+from the input down as follows.
+
+00:06:44.400 --> 00:06:49.680
+Let's send that value right.
+
+00:06:49.680 --> 00:06:51.240
+You get from up.
+
+00:06:51.240 --> 00:06:54.320
+Okay. So next, we're getting a value on the left.
+
+00:06:54.320 --> 00:06:58.040
+Now we want to compare if this number is greater than 0.
+
+00:06:58.040 --> 00:06:59.800
+If it's greater than 0, we send 1 to G.
+
+00:06:59.800 --> 00:07:03.280
+Let's perform the greater than operation
+
+00:07:03.280 --> 00:07:08.080
+on that item we just got, and we're comparing it to 0.
+
+00:07:08.080 --> 00:07:11.680
+Now that result, we're going to send down,
+
+00:07:11.680 --> 00:07:13.880
+and we're going to send this original value
+
+00:07:13.880 --> 00:07:16.880
+we got from here to the right.
+
+00:07:16.880 --> 00:07:19.000
+Here, we do a similar step.
+
+00:07:19.000 --> 00:07:20.240
+We get the value from the left,
+
+00:07:20.240 --> 00:07:22.920
+but this time, we have to do an equal operation.
+
+00:07:22.920 --> 00:07:25.760
+Is that number we got equal to 0?
+
+00:07:25.760 --> 00:07:28.960
+We send that result down,
+
+00:07:28.960 --> 00:07:32.880
+and then send this number to the right.
+
+00:07:32.880 --> 00:07:38.040
+Lastly, we get this number from the left.
+
+00:07:38.040 --> 00:07:42.400
+Here, we need to compare if it's less than 0.
+
+00:07:42.400 --> 00:07:45.640
+We send that result down,
+
+00:07:45.640 --> 00:07:50.280
+and now lastly, we drop that remaining value.
+
+00:07:50.280 --> 00:07:53.080
+Okay, let's--oh, and then lastly,
+
+00:07:53.080 --> 00:07:56.040
+we need to send down the value we get up.
+
+00:07:56.040 --> 00:08:02.560
+Send down, up, send down, up.
+
+00:08:02.560 --> 00:08:04.760
+Okay, so let's try running this.
+
+00:08:04.760 --> 00:08:08.920
+Let's see. We notice that
+
+00:08:08.920 --> 00:08:10.360
+the numbers are coming in from I.
+
+00:08:10.360 --> 00:08:14.200
+They're going through our various conditions
+
+00:08:14.200 --> 00:08:18.160
+and should be sending all the correct values.
+
+00:08:18.160 --> 00:08:23.560
+It looks like we're not getting any errors so far.
+
+00:08:23.560 --> 00:08:26.680
+Let's speed this up.
+
+00:08:26.680 --> 00:08:33.040
+That completes the puzzle.
+
+00:08:33.040 --> 00:08:42.000
+Now let's get into some of the implementation details.
+
+00:08:42.000 --> 00:08:46.320
+The first thing is the game loop.
+
+00:08:46.320 --> 00:08:50.560
+The game loop is... So this is actually extremely simple.
+
+00:08:50.560 --> 00:08:52.320
+All the state for the entire game
+
+00:08:52.320 --> 00:08:54.400
+is stored in just a few variables.
+
+00:08:54.400 --> 00:08:56.480
+There's one variable storing
+
+00:08:56.480 --> 00:09:01.400
+the text of each cell as a vector of strings.
+
+00:09:01.400 --> 00:09:06.280
+There's a single function
+
+00:09:06.280 --> 00:09:09.080
+that renders the entire game, the entire board.
+
+00:09:09.080 --> 00:09:11.120
+There's a single function that would render
+
+00:09:11.120 --> 00:09:13.920
+this entire screen based off of the state,
+
+00:09:13.920 --> 00:09:19.240
+and then the game waits for you to press a key.
+
+00:09:19.240 --> 00:09:24.120
+The key usually, depending on what action you perform,
+
+00:09:24.120 --> 00:09:27.040
+updates the state and causes a re-render.
+
+00:09:27.040 --> 00:09:29.360
+It's an extremely simple game loop,
+
+00:09:29.360 --> 00:09:32.800
+but it makes implementing it pretty easy.
+
+00:09:32.800 --> 00:09:35.200
+To demonstrate how this game loop works,
+
+00:09:35.200 --> 00:09:38.400
+I have a simple demo prepared.
+
+00:09:38.400 --> 00:09:41.880
+This is a game of tic-tac-toe.
+
+00:09:41.880 --> 00:09:44.800
+Let me show this real fast.
+
+00:09:44.800 --> 00:09:49.200
+It's an extremely simple implementation,
+
+00:09:49.200 --> 00:09:51.465
+but it follows the same principles
+
+00:09:51.466 --> 00:09:53.600
+that I used in asm-blox.
+
+00:09:53.600 --> 00:09:57.680
+First, we have the state defined in variables.
+
+00:09:57.680 --> 00:09:59.560
+Here we have two pieces of state.
+
+00:09:59.560 --> 00:10:01.600
+We have which player's turn it is
+
+00:10:01.600 --> 00:10:03.120
+and the state of the game board.
+
+00:10:03.120 --> 00:10:06.640
+The player turn can be nil if it's empty,
+
+00:10:06.640 --> 00:10:08.760
+the string "x" or the string "o".
+
+00:10:08.760 --> 00:10:14.240
+Then the game board is a list of nine board elements.
+
+00:10:14.240 --> 00:10:16.960
+So that's the state.
+
+00:10:16.960 --> 00:10:18.120
+Then we have a helper function.
+
+00:10:18.120 --> 00:10:19.440
+You can go into the details,
+
+00:10:19.440 --> 00:10:21.000
+but it just returns true
+
+00:10:21.000 --> 00:10:25.600
+if the board has a winning player.
+
+00:10:25.600 --> 00:10:30.040
+Part two is the rendering function.
+
+00:10:30.040 --> 00:10:32.800
+Only based off of the game state,
+
+00:10:32.800 --> 00:10:36.720
+we have a function that erases the buffer
+
+00:10:36.720 --> 00:10:40.280
+and draws this from scratch.
+
+00:10:40.280 --> 00:10:45.320
+That's this part right here.
+
+00:10:45.320 --> 00:10:46.720
+Lastly, we have the action.
+
+00:10:46.720 --> 00:10:51.920
+We have one action which is bound to RET,
+
+00:10:51.920 --> 00:10:55.840
+and it places a player token.
+
+00:10:55.840 --> 00:10:59.920
+Once it places a player token,
+
+00:10:59.920 --> 00:11:03.120
+it rerenders the board,
+
+00:11:03.120 --> 00:11:06.880
+and all the rerendering is handled by this function.
+
+00:11:06.880 --> 00:11:12.480
+Then we have just creating of the mode
+
+00:11:12.480 --> 00:11:14.680
+and initialization function.
+
+00:11:14.680 --> 00:11:16.680
+With these three steps
+
+00:11:16.680 --> 00:11:20.640
+it clearly separates out all of the state,
+
+00:11:20.640 --> 00:11:22.960
+the rendering, and the actions,
+
+00:11:22.960 --> 00:11:25.880
+and it makes implementing it very simple.
+
+00:11:25.880 --> 00:11:29.640
+One trick that's used here and that I use
+
+00:11:29.640 --> 00:11:32.382
+in my asm-blox game is that
+
+00:11:32.383 --> 00:11:33.316
+when I render the board,
+
+00:11:33.317 --> 00:11:40.800
+I propertize the text to contain extra information.
+
+00:11:40.800 --> 00:11:45.080
+For example, here, each cell has
+
+00:11:45.080 --> 00:11:49.400
+a tic-tac-toe index to indicate which number cell it is.
+
+00:11:49.400 --> 00:11:53.640
+This has index 0, 1, 2, all the way up to 8.
+
+00:11:53.640 --> 00:11:58.640
+That way, for placing, the only thing it has to do
+
+00:11:58.640 --> 00:12:01.200
+is just look at its position
+
+00:12:01.200 --> 00:12:04.960
+based off of the text property.
+
+00:12:04.960 --> 00:12:07.800
+It makes implementation extremely simple.
+
+00:12:07.800 --> 00:12:14.360
+Next up, we have the implementation of the code cells.
+
+00:12:14.360 --> 00:12:16.960
+If you notice, here it's kind of weird
+
+00:12:16.960 --> 00:12:21.000
+how it's like a buffer, but each cell kind of acts
+
+00:12:21.000 --> 00:12:25.760
+like its own buffer, and it has its own limits.
+
+00:12:25.760 --> 00:12:27.600
+All of the Emacs editing--
+
+00:12:27.600 --> 00:12:30.760
+well, some of the Emacs editing commands kind of work,
+
+00:12:30.760 --> 00:12:35.360
+like beginning-of-line, end-of-line, end-of-buffer.
+
+00:12:35.360 --> 00:12:38.240
+How is that done?
+
+00:12:38.240 --> 00:12:41.760
+Well, it's all just a trick, actually.
+
+00:12:41.760 --> 00:12:47.280
+Each cell has text properties of which line it's at
+
+00:12:47.280 --> 00:12:48.800
+and its cell coordinates.
+
+00:12:48.800 --> 00:12:54.360
+Whenever a key is pressed for editing, moving lines--
+
+00:12:54.360 --> 00:12:58.360
+there's even kind of more complicated things
+
+00:12:58.360 --> 00:13:00.600
+like switching cells around--
+
+00:13:00.600 --> 00:13:03.360
+so all of that,
+
+00:13:03.360 --> 00:13:05.200
+it knows which position it's in,
+
+00:13:05.200 --> 00:13:08.080
+it knows what cell it's in,
+
+00:13:08.080 --> 00:13:12.880
+and then it copies the text of the cell,
+
+00:13:12.880 --> 00:13:16.320
+because remember, the contents of the cell
+
+00:13:16.320 --> 00:13:18.360
+are stored in internal state.
+
+00:13:18.360 --> 00:13:23.000
+It copies that cell contents into a temporary buffer.
+
+00:13:23.000 --> 00:13:27.960
+It then moves the point to whichever line it was
+
+00:13:27.960 --> 00:13:31.160
+in the game board.
+
+00:13:31.160 --> 00:13:33.000
+It performs the action.
+
+00:13:33.000 --> 00:13:36.200
+It makes sure that the resulting text isn't
+
+00:13:36.200 --> 00:13:40.160
+longer than the cell width or the cell height.
+
+00:13:40.160 --> 00:13:42.040
+If everything checks out,
+
+00:13:42.040 --> 00:13:45.120
+it updates the state and calls a re-render.
+
+00:13:45.120 --> 00:13:48.440
+So there's nothing going on in here
+
+00:13:48.440 --> 00:13:51.080
+that's, like, actually inserting a letter A.
+
+00:13:51.080 --> 00:14:00.920
+It's all updating the state and causing a re-render.
+
+00:14:00.920 --> 00:14:03.640
+So this makes things like certain
+
+00:14:03.640 --> 00:14:06.480
+internal Emacs editing constructs
+
+00:14:06.480 --> 00:14:09.120
+pretty hard to use, like undoing.
+
+00:14:09.120 --> 00:14:12.200
+Normally the undoing construct
+
+00:14:12.200 --> 00:14:15.120
+works off the contents of the buffer.
+
+00:14:15.120 --> 00:14:17.840
+But if your buffer is actually just
+
+00:14:17.840 --> 00:14:20.080
+a reflection of the internal state,
+
+00:14:20.080 --> 00:14:21.440
+then how does undoing work?
+
+00:14:21.440 --> 00:14:24.880
+Well, it pretty much is kind of a hack.
+
+00:14:24.880 --> 00:14:27.040
+I mean, undoing is here,
+
+00:14:27.040 --> 00:14:32.680
+but it's pretty much redone
+
+00:14:32.680 --> 00:14:37.560
+in a not so configurable, not so modifiable way.
+
+00:14:37.560 --> 00:14:40.080
+Pretty much everything is like that,
+
+00:14:40.080 --> 00:14:42.440
+from these parentheses highlighting...
+
+00:14:42.440 --> 00:14:46.320
+Normally, parentheses highlighting
+
+00:14:46.320 --> 00:14:47.243
+would be kind of weird,
+
+00:14:47.244 --> 00:14:49.840
+with cross-line parentheses and everything.
+
+00:14:49.840 --> 00:14:52.360
+All of that had to be redone.
+
+00:14:52.360 --> 00:14:58.160
+Another point about how this is implemented
+
+00:14:58.160 --> 00:15:02.360
+is the assembly text to executable code.
+
+00:15:02.360 --> 00:15:05.800
+If you're familiar with WebAssembly
+
+00:15:05.800 --> 00:15:10.720
+you might have encountered a tool wat-wasm.
+
+00:15:10.720 --> 00:15:16.440
+It basically converts the WebAssembly text format
+
+00:15:16.440 --> 00:15:18.280
+to byte code.
+
+00:15:18.280 --> 00:15:22.440
+And what I do here... It goes through a similar process.
+
+00:15:22.440 --> 00:15:28.000
+Normally, when you're writing this text format,
+
+00:15:28.000 --> 00:15:30.360
+you can nest things as deeply as you want.
+
+00:15:30.360 --> 00:15:33.800
+Basically, what happens is it flattens out everything.
+
+00:15:33.800 --> 00:15:35.920
+It kind of knows the order
+
+00:15:35.920 --> 00:15:38.160
+that all these things are going to get executed,
+
+00:15:38.160 --> 00:15:40.680
+and then it puts it into one single line
+
+00:15:40.680 --> 00:15:44.120
+that it can just run through and execute.
+
+00:15:44.120 --> 00:15:48.360
+The same thing for the loops and blocks.
+
+00:15:48.360 --> 00:15:52.240
+It internally generates labels and jump statements.
+
+00:15:52.240 --> 00:15:58.640
+So that concludes this presentation.
+
+00:15:58.640 --> 00:15:59.666
+Thank you for listening,
+
+00:15:59.667 --> 00:16:07.440
+and I hope you enjoy the rest of the conference.
diff --git a/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt
new file mode 100644
index 00000000..b13e2c13
--- /dev/null
+++ b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--answers.vtt
@@ -0,0 +1,970 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.999
+[Amin]: Okay, so for folks, you can start asking your questions over IRC or the PAD,
+
+00:00:07.000 --> 00:00:10.839
+and after a minute or two, we'll also open up this big blue button room
+
+00:00:10.840 --> 00:00:14.799
+for those of you who would like to join here to ask these questions directly.
+
+00:00:14.800 --> 00:00:16.199
+Michael, take it away.
+
+00:00:16.200 --> 00:00:21.599
+[Michael]: Okay, cool. It looks like we've got two questions on the PAD.
+
+NOTE How does this approach compare to using tq.el, Emacs' built-in library for transaction queues?
+
+00:00:21.600 --> 00:00:26.039
+The first, how does this approach compare to using TQ.L,
+
+00:00:26.040 --> 00:00:29.279
+Emacs's built-in library for transaction queues?
+
+00:00:29.280 --> 00:00:31.759
+Yeah, that's actually a great question.
+
+00:00:31.760 --> 00:00:35.159
+I should have called out TQ in the talk
+
+00:00:35.160 --> 00:00:40.559
+because I actually took a hard look at it in terms of my implementation.
+
+00:00:40.560 --> 00:00:47.159
+You could absolutely build this using TQ.L. I chose not to because
+
+00:00:47.160 --> 00:00:51.199
+I didn't see any compelling benefits to pay the cost
+
+00:00:51.200 --> 00:00:58.199
+of adding another dependency and creating a buffer for each new connection.
+
+00:00:58.200 --> 00:01:04.679
+In the actual implementation, input is buffered into a variable connected
+
+00:01:04.680 --> 00:01:10.479
+to the connection object and just handled there.
+
+NOTE Have you considered using the aio.el library (written by Chris Wellons) that implements async/await for Emacs lisp using promises?
+
+00:01:10.480 --> 00:01:16.439
+Have you considered using the AIO.L library written by Chris Wellens,
+
+00:01:16.440 --> 00:01:22.239
+implements async await for Emacs Lisp using promises. Implemented
+
+00:01:22.240 --> 00:01:25.559
+using Elisp's record data structure turns the nested callbacks into
+
+00:01:25.560 --> 00:01:30.279
+regular-looking Elisp code without introducing new keywords. Cool. No,
+
+00:01:30.280 --> 00:01:34.959
+I didn't because I was not aware of the package. But the fact
+
+00:01:34.960 --> 00:01:40.519
+that it was written by Chris Wellens alone is enough to get me to take a look.
+
+00:01:40.520 --> 00:01:43.879
+So yeah, perhaps that could have been another implementation.
+
+00:01:43.880 --> 00:01:49.159
+But I don't know. This kind of code journey finally got me
+
+00:01:49.160 --> 00:02:03.919
+to understand Emacs Lisp. I don't regret anything else.
+
+00:02:03.920 --> 00:02:07.119
+[Amin]: I think your last sentence was a little cutting off, Michael.
+
+00:02:07.120 --> 00:02:09.199
+Maybe you were a little far from the mic.
+
+00:02:09.200 --> 00:02:13.199
+But yeah. Okay. All I was going to say is, yeah, I mean,
+
+00:02:13.200 --> 00:02:19.679
+leave it to Chris Wellens to solve the problem in all generality.
+
+00:02:19.680 --> 00:02:27.479
+All I noted at the end was given that this little project
+
+00:02:27.480 --> 00:02:34.079
+is what finally got me to understand Emacs macros or Lisp macros, you know,
+
+00:02:34.080 --> 00:02:42.719
+I kind of, I don't regret running down this implementation.
+
+00:02:42.720 --> 00:02:45.439
+We've got another question coming in.
+
+NOTE Are you aware that EMMS has an MPD client? There's also mpc.el built into Emacs.
+
+00:02:45.440 --> 00:02:49.399
+Am I aware that Ems has an MPD, I absolutely am.
+
+00:02:49.400 --> 00:02:54.399
+And there's actually another MPD client for Emacs called MPD-L.
+
+00:02:54.400 --> 00:03:05.399
+Yes, yes there is. So again, I probably should have talked about this in before,
+
+00:03:05.400 --> 00:03:10.759
+but I was pressed for time. I was not looking, yeah,
+
+00:03:10.760 --> 00:03:16.239
+I was not looking for a full-fledged MPD client. Sometimes MPD-L
+
+00:03:16.240 --> 00:03:22.839
+and MPC.L can give you a full UX within Emacs
+
+00:03:22.840 --> 00:03:27.599
+and I would absolutely recommend them if that's what you're looking for.
+
+00:03:27.600 --> 00:03:36.039
+I wanted to just add a few tweaks to my workflow.
+
+00:03:36.040 --> 00:03:41.039
+Now increase the volume while coding, put the track name and the mode line,
+
+00:03:41.040 --> 00:03:46.159
+things like that. So I felt like those were a little heavyweight.
+
+00:03:46.160 --> 00:03:53.439
+In fact, I ended up corresponding with the author of MPD-L.
+
+00:03:53.440 --> 00:04:00.679
+And kind of the analogy I came up with was if, you know, MPD-L is to MPD
+
+00:04:00.680 --> 00:04:03.959
+as good news is to email, I wanted to build mail utils.
+
+00:04:03.960 --> 00:04:07.039
+I just wanted a couple of very tight little utilities
+
+00:04:07.040 --> 00:04:12.879
+that would get me what I wanted. But yeah, actually
+
+00:04:12.880 --> 00:04:15.559
+that's also a great callout. Perhaps I should have included references
+
+00:04:15.560 --> 00:04:39.719
+to those clients. One thing I will mention is
+
+00:04:39.720 --> 00:04:42.559
+I think we've got plenty of time for questions.
+
+00:04:42.560 --> 00:04:47.879
+Maybe close to 25 minutes or half an hour, which is very interesting.
+
+00:04:47.880 --> 00:04:51.679
+I think in many cases it's been more than the actual length of the talks.
+
+00:04:51.680 --> 00:04:57.039
+And I think that's a side effect of sort of, I guess, going with two tracks,
+
+00:04:57.040 --> 00:05:01.879
+which is nicer. There's much more breathing room between the talks this year.
+
+00:05:01.880 --> 00:05:05.759
+So if there are questions, as long as there are questions coming in,
+
+00:05:05.760 --> 00:05:09.759
+or if you do also want to present anything extended, you know,
+
+00:05:09.760 --> 00:05:11.999
+more than what you covered in your talk, you're also welcome to do that
+
+00:05:12.000 --> 00:05:14.439
+and, like, stay here. So.
+
+00:05:14.440 --> 00:05:20.359
+Okay. Cool. Now I'm happy to hang out. This is an interesting question.
+
+NOTE Have you seen the Lonesome Pine Specials?
+
+00:05:20.360 --> 00:05:22.839
+Have I seen the Lonesome Pine specials?
+
+00:05:22.840 --> 00:05:28.079
+During the talk he saw my music library and figured I'd be interested.
+
+00:05:28.080 --> 00:05:32.279
+I have not. But oh, interesting. Bella Fleck. Cool.
+
+00:05:32.280 --> 00:06:10.359
+I will be checking out Lonesome Pine, thank you.
+
+00:06:10.360 --> 00:07:27.159
+Oh, that's an awesome, awesome tip. Cool.
+
+00:07:27.400 --> 00:07:29.999
+That's probably going to be it for the questions.
+
+00:07:30.000 --> 00:07:33.999
+Do we just, do we hang out for the balance of the time?
+
+00:07:34.000 --> 00:07:37.679
+Yeah, sure. I think there's actually one new question on the pad
+
+00:07:37.680 --> 00:07:40.999
+and I might have one to ask as well, but yeah, otherwise we can.
+
+00:07:41.000 --> 00:07:44.399
+Oh, apologies. Yeah, I needed to scroll down.
+
+NOTE Would using dynamic/special vars add anything interesting / easier to async elisp in your opinion?
+
+00:07:44.400 --> 00:07:49.679
+Would using dynamic special VARs add anything interesting,
+
+00:07:49.680 --> 00:07:55.239
+easier to async with? I'm not sure what you mean by
+
+00:07:55.240 --> 00:08:48.159
+dynamic or special variables. Can you say a little more?
+
+00:08:48.160 --> 00:08:54.999
+Okay, fair enough. I mean, certainly in the examples that I included,
+
+00:08:55.000 --> 00:09:21.919
+we could use variables at a larger scope. Yeah, yeah.
+
+00:09:21.920 --> 00:09:31.199
+Interesting. Good question. I would have to think on that one.
+
+00:09:31.200 --> 00:09:39.479
+To be honest, I went hard down the lexical binding path a few years ago
+
+00:09:39.480 --> 00:09:43.959
+when it was introduced to ELISP, precisely because I found dynamic binding
+
+00:09:43.960 --> 00:09:49.239
+so much more difficult to reason about. Possibly.
+
+00:09:49.240 --> 00:10:10.119
+[Amin]: So I guess one question I might have,
+
+00:10:10.120 --> 00:10:13.479
+prefixing it with the fact that I wasn't able to fully follow your talk
+
+00:10:13.480 --> 00:10:16.559
+because I've been basically behind the scenes.
+
+NOTE How does your project compare to some of the other MPD clients?
+
+00:10:16.560 --> 00:10:22.079
+But how would you say that your project compares to some of the other,
+
+00:10:22.080 --> 00:10:23.879
+I guess, MPD clients?
+
+00:10:23.880 --> 00:10:29.359
+[Michael]: Yeah, like a couple of years ago, I used to use ncmpcpp myself,
+
+00:10:29.360 --> 00:10:33.159
+and also I tried a bunch of different ones.
+
+00:10:33.160 --> 00:10:35.679
+I never quite got into using emms as one.
+
+00:10:35.680 --> 00:10:39.359
+[Amin]: I noticed that you mentioned that, for example, for some of the other ones,
+
+00:10:39.360 --> 00:10:43.079
+maybe like npc.l, yours may be much more lightweight.
+
+00:10:43.080 --> 00:10:47.279
+But yeah, I was wondering how you would compare them.
+
+00:10:47.280 --> 00:10:55.639
+[Michael]: Yeah, yeah. So those are what I would call full-fledged applications.
+
+00:10:55.640 --> 00:11:00.759
+You're familiar with ncmpcpp. You could swap that out as your daily driver
+
+00:11:00.760 --> 00:11:06.039
+for any of those. They show you the playlist. They let you browse.
+
+00:11:06.040 --> 00:11:15.079
+They let you set up saved playlists, et cetera, et cetera, et cetera.
+
+00:11:15.080 --> 00:11:19.479
+And this does none of that. This is basically a building block.
+
+00:11:19.480 --> 00:11:23.599
+These are building blocks for building up Emacs commands.
+
+00:11:23.600 --> 00:11:31.879
+So for instance, I actually have a little minor mode that holds the key cord.
+
+00:11:31.880 --> 00:11:36.079
+You can adjust the volume. You can skip to the next track.
+
+00:11:36.080 --> 00:11:44.439
+You can do a few things like that. But that's it.
+
+00:11:44.440 --> 00:11:48.839
+More of a tool kit than an application, I guess, is the way I would put it.
+
+00:11:48.840 --> 00:11:55.039
+[Amin]: Right, right. Makes a lot of sense.
+
+NOTE Can you share the code to the macro that creates the callback tree?
+
+00:11:55.040 --> 00:12:05.599
+Awesome. Another question. Can I share the code to the macro?
+
+00:12:05.600 --> 00:12:15.599
+Help a bit for folks.
+
+00:12:15.640 --> 00:12:22.519
+And it's on OPA. Let me share a link here. Or
+
+00:12:22.520 --> 00:12:26.879
+I guess maybe GitHub would be the better UX. I can do that right now.
+
+00:12:26.880 --> 00:12:27.599
+Let's see here.
+
+00:12:27.600 --> 00:12:32.559
+I'll put it in the pad.
+
+00:12:32.560 --> 00:12:34.199
+Don't judge me. It's my first list macro.
+
+00:12:34.240 --> 00:12:44.639
+OK. So I can do that. I can do that. I can do that. I can do that.
+
+00:12:44.640 --> 00:13:11.279
+I can do that. I can do that. I can do that. I can do that.
+
+00:13:11.280 --> 00:13:22.559
+[Amin]: I think we got all the questions. I think this is an interesting sort of,
+
+00:13:22.560 --> 00:13:26.399
+I guess, topic or thing that's come up today. I think multiple times,
+
+00:13:26.400 --> 00:13:30.919
+there was also partly mentioned in RMS's talk as part of the Q&A
+
+00:13:30.920 --> 00:13:33.679
+where he was sort of complaining a little bit or saying that
+
+00:13:33.680 --> 00:13:36.839
+how he would like to see some of org's features, I guess,
+
+00:13:36.840 --> 00:13:39.799
+be decoupled from org or org syntax
+
+00:13:39.800 --> 00:13:42.439
+and just be made available either as libraries
+
+00:13:42.440 --> 00:13:45.199
+or maybe as smaller minor modes that one could use then
+
+00:13:45.200 --> 00:13:49.279
+throughout anywhere else in Emacs. And I think I do agree,
+
+00:13:49.280 --> 00:13:53.559
+and especially now in the context of MPD and using it via Emacs,
+
+00:13:53.560 --> 00:13:57.639
+I think it's very important to also have libraries or toolkits,
+
+00:13:57.640 --> 00:14:02.519
+as you mentioned, to be able to build upon them however you wish. So kudos.
+
+00:14:02.520 --> 00:14:05.439
+Thanks so much for working on this. It's very kind of you.
+
+00:14:05.440 --> 00:14:09.359
+[Michael]: Yeah, I mean, there was a much remarked upon,
+
+00:14:09.360 --> 00:14:14.679
+perhaps even controversial talk at last year's EmacsConf by Carl Voigt,
+
+00:14:14.680 --> 00:14:20.879
+if memory serves, proposing that the org mode markup language be sort of
+
+00:14:20.880 --> 00:14:27.279
+hoisted out and given a specification, he wanted to call it org down.
+
+00:14:27.280 --> 00:14:30.599
+And I think some people, for reasons unclear to me,
+
+00:14:30.600 --> 00:14:32.039
+were highly resistant to this.
+
+00:14:32.040 --> 00:14:42.879
+But yeah, yeah, mm-hmm, yeah, interesting.
+
+NOTE There's another package (chuntaro?) in addition to wellon's aio that also implements a coroutine trampoline on the emacs event loop. any thoughts on the async/await paradigm generally red/blue functions, etc?
+
+00:14:42.880 --> 00:14:46.959
+There's another package, Taro, perhaps,
+
+00:14:46.960 --> 00:14:55.999
+pronouncing that phonetically, in addition to Welland's AIO
+
+00:14:56.000 --> 00:15:01.759
+that also implements a coroutine trampoline on the Emacs event loop.
+
+00:15:01.760 --> 00:15:03.439
+Interesting.
+
+NOTE Any thoughts on the async await paradigm generally, red-blue functions, etc.?
+
+00:15:03.440 --> 00:15:07.759
+Any thoughts on the async await paradigm generally, red-blue functions,
+
+00:15:07.760 --> 00:15:10.879
+et cetera? Oh, wow.
+
+00:15:10.880 --> 00:15:18.799
+What color are my functions could be the topic of another talk in and of itself.
+
+00:15:18.800 --> 00:15:24.239
+Yeah, that's sort of the problem with async, isn't it? It's like a virus
+
+00:15:24.240 --> 00:15:26.399
+that infects your code base once you start.
+
+00:15:26.400 --> 00:15:31.959
+And having spent a fair amount of time in the past year or two
+
+00:15:31.960 --> 00:15:36.959
+writing async rust, I guess I've kind of made my peace with it.
+
+00:15:36.960 --> 00:15:39.639
+I was highly resistant to it at first.
+
+00:15:39.640 --> 00:15:46.919
+But who is that venture capitalist that diagrammed
+
+00:15:46.920 --> 00:15:50.079
+the uptake of new technology? And at first,
+
+00:15:50.080 --> 00:15:53.919
+you sort of saw this exponential curve of enthusiasm,
+
+00:15:53.920 --> 00:15:57.079
+then a peak, and you called it the valley of despair,
+
+00:15:57.080 --> 00:16:00.439
+and then sort of a plateau of acceptance.
+
+00:16:00.440 --> 00:16:05.519
+I kind of feel like asynchronous programming is kind of the hot new topic,
+
+00:16:05.520 --> 00:16:12.239
+and everybody's diving in, including in scenarios
+
+00:16:12.240 --> 00:16:14.639
+where I'm not sure I see the benefit
+
+00:16:14.640 --> 00:16:16.919
+to the additional complexity to your program.
+
+00:16:16.920 --> 00:16:23.719
+So I did it here because, as I tried to demonstrate,
+
+00:16:23.720 --> 00:16:28.319
+response latency back to the MPD server
+
+00:16:28.320 --> 00:16:34.639
+can reach into the realm of human perception, depending on the query.
+
+00:16:34.640 --> 00:16:37.519
+And my use case was, I'm in a buffer coding.
+
+00:16:37.520 --> 00:16:42.279
+I just want to quick adjust the volume, and I didn't want any pauses.
+
+00:16:42.280 --> 00:16:48.279
+But in a lot of other scenarios, I just don't see the benefit to.
+
+00:16:48.280 --> 00:16:55.959
+So yeah, I mean, that's my two cents.
+
+00:16:55.960 --> 00:17:07.759
+Yeah, I think there's a lot of care to be taken, well,
+
+00:17:07.760 --> 00:17:12.599
+I guess in both in advance consideration, but also while implementation,
+
+00:17:12.600 --> 00:17:15.839
+if one is going to add asynchronicity to an existing code base
+
+00:17:15.840 --> 00:17:20.719
+and making sure to cover essentially as many as existing workflows
+
+00:17:20.720 --> 00:17:23.239
+and code paths as possible.
+
+00:17:23.240 --> 00:17:27.879
+Yeah, exactly, exactly.
+
+00:17:27.880 --> 00:17:31.799
+You know, I've certainly gotten myself into trouble writing asynchronous code
+
+00:17:31.800 --> 00:17:36.039
+and locked up the async runtime, and it's like, well, you know,
+
+00:17:36.040 --> 00:17:39.759
+is the benefit worth it? I mean, look, if you're building a socket server
+
+00:17:39.760 --> 00:17:51.399
+of some sort, like a web service, microservice type of thing, all
+
+00:17:51.400 --> 00:17:54.999
+of the famous 10k connection problem from the last decade,
+
+00:17:55.000 --> 00:18:01.319
+if you're writing a command line tool, you know, Klee,
+
+00:18:01.320 --> 00:19:17.759
+I'm not sure why you need to spin up anything to run time for that. Yeah,
+
+00:19:17.760 --> 00:19:44.399
+I mean, I'm not sure why you need to spin up anything to run time for that.
+
+00:19:44.400 --> 00:20:10.399
+Yeah. Yeah. Yeah. Yeah, I mean, I'm not sure why you need
+
+00:20:10.400 --> 00:20:14.239
+to spin up anything to run time for that. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah.
+
+00:20:14.240 --> 00:20:18.399
+Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah. Yeah.
+
+00:20:18.400 --> 00:20:20.919
+We'll definitely be checking. It's. So, Centauro appears to be the author.
+
+00:20:20.920 --> 00:20:24.999
+The package name is called Emacs Promise. Interesting. Okay,
+
+00:20:25.000 --> 00:20:29.039
+I see you reacting, I just wanted to check out if my mic is working.
+
+00:20:29.040 --> 00:20:30.999
+The talk, thank you for your interesting talk.
+
+00:20:31.000 --> 00:20:33.599
+That's a yak. I already shaved myself
+
+00:20:33.600 --> 00:20:36.639
+how to do async programming in Emacs.
+
+00:20:36.640 --> 00:20:39.679
+I found about the TQQ and I improved on it, too,
+
+00:20:39.680 --> 00:20:42.919
+and then I was thinking, okay, async programming.
+
+00:20:42.920 --> 00:20:49.079
+It wasn't how to do macros, but it was my whole into, yes,
+
+00:20:49.080 --> 00:20:51.679
+how to do async programming without callback hell.
+
+00:20:51.680 --> 00:20:54.719
+And as you said in your title, you did async before it was cool,
+
+00:20:54.720 --> 00:20:58.679
+because you often hear the opinion that Emacs doesn't do multithreading,
+
+00:20:58.680 --> 00:21:02.639
+it's just single threaded and therefore old and useless.
+
+00:21:02.640 --> 00:21:06.319
+Not like that, maybe.
+
+NOTE Do you think it's a viable future for Emacs to get out of callback hell?
+
+00:21:06.320 --> 00:21:10.599
+The solution you found, do you think it's a viable future
+
+00:21:10.600 --> 00:21:13.399
+for Emacs to get out of callback hell?
+
+00:21:13.400 --> 00:21:22.279
+I think so, but I would certainly, in the pad,
+
+00:21:22.280 --> 00:21:25.119
+somebody pointed out that Christopher Wellens
+
+00:21:25.120 --> 00:21:28.959
+came up with a general purpose async await library
+
+00:21:28.960 --> 00:21:32.839
+that I will definitely be taking a look at,
+
+00:21:32.840 --> 00:21:36.359
+because I think he used the phrase yak shaving
+
+00:21:36.360 --> 00:21:38.839
+and that's absolutely what I was doing here.
+
+00:21:38.840 --> 00:21:45.559
+So this solution is purpose-built to my little personal problem.
+
+00:21:45.560 --> 00:21:53.999
+It sounds like Wellens may have solved the problem in greater generality.
+
+00:21:54.000 --> 00:21:56.439
+But yeah, absolutely. I mean, periodically
+
+00:21:56.440 --> 00:22:00.999
+in the Emacs IRC channel or an Emacs devil, somebody will say, oh my God,
+
+00:22:01.000 --> 00:22:07.639
+I can't believe Emacs is single threaded, this is hopeless, and yeah, I think
+
+00:22:07.640 --> 00:22:10.159
+that here's another use case for asynchronous problem.
+
+00:22:10.160 --> 00:22:22.319
+It's interesting that you mentioned like the AIO from Christopher Wellens,
+
+00:22:22.320 --> 00:22:24.159
+because I had a look at it too.
+
+00:22:24.160 --> 00:22:28.919
+And if I remember correctly, he uses Emacs generators.
+
+00:22:28.920 --> 00:22:37.799
+I'm not really sure, I'm not sure anymore if that's the case. But yeah,
+
+00:22:37.800 --> 00:22:48.199
+that's another cool macro use to get out of callback Emacs generators.
+
+00:22:48.200 --> 00:22:55.399
+Did you see it already? I'm looking at it right now for the first time,
+
+00:22:55.400 --> 00:23:02.279
+oh gosh, look at this. And if you want, I can spare you a lot of time,
+
+00:23:02.280 --> 00:23:07.439
+because if you go down this road and you get the same direction as me,
+
+00:23:07.440 --> 00:23:10.599
+you'll find out like, okay, that's a cool solution.
+
+00:23:10.600 --> 00:23:13.519
+You already mentioned Go, the solution Go uses
+
+00:23:13.520 --> 00:23:15.799
+with the coroutines or green threads
+
+00:23:15.800 --> 00:23:22.359
+or whatever you name it. And I think, in my opinion, the best solution
+
+00:23:22.360 --> 00:23:28.159
+or the neatest solution of this problem in this plant or in general is Futures,
+
+00:23:28.160 --> 00:23:33.319
+no, not Futures, wrong name, host called, no, I just forgot.
+
+00:23:33.320 --> 00:23:41.839
+It's a guy's scheme, and it's from Andy Wingo. And he does it with fibers,
+
+00:23:41.840 --> 00:23:49.439
+not Futures, fibers, this is a really good solution for the problem of how
+
+00:23:49.440 --> 00:23:55.119
+to do async, how to do multi-color functions
+
+00:23:55.120 --> 00:23:57.719
+and say they have all functions the same name.
+
+00:23:57.720 --> 00:24:05.599
+And it's fundamentally based on concurrent ML, and yeah, fibers on top, this
+
+00:24:05.600 --> 00:24:09.079
+is cool. I would like to see this in the mix. Interesting.
+
+00:24:09.080 --> 00:24:13.559
+So I found this talk, Channels, Concurrency, and Cores,
+
+00:24:13.560 --> 00:24:16.679
+a New Concurrent ML Implementation.
+
+00:24:16.680 --> 00:24:18.439
+This one, yes.
+
+00:24:18.440 --> 00:24:34.719
+Okay, I will be taking a look at this, thank you.
+
+00:24:34.720 --> 00:24:35.759
+You're welcome.
+
+00:24:35.760 --> 00:24:39.319
+Maybe to expand on this, if you don't mind. Please.
+
+NOTE Generators
+
+00:24:39.320 --> 00:24:44.919
+The idea behind it is like Chris Wellon uses generators,
+
+00:24:44.920 --> 00:24:47.399
+generators like in Python generators,
+
+00:24:47.400 --> 00:24:49.599
+like you have some function, and it can yield,
+
+00:24:49.600 --> 00:24:54.279
+and you can start it again at this point, and so on and so on.
+
+00:24:54.280 --> 00:25:00.559
+It's an Emacs, and it's a hack. It uses a macro for the code processing,
+
+00:25:00.560 --> 00:25:02.879
+and then it's bits of callbacks, more or less.
+
+00:25:02.880 --> 00:25:07.759
+And it's a solution for like how do I specify callbacks
+
+00:25:07.760 --> 00:25:15.039
+without writing actually callbacks with writing synchronous looking one color.
+
+00:25:15.040 --> 00:25:20.759
+And the general solution, and that's the reason Andy Wingo can do it in Guile,
+
+00:25:20.760 --> 00:25:27.519
+for them is the limited continuations. You have a delimited continuation,
+
+00:25:27.520 --> 00:25:30.639
+that means you have a point in your program where you can yield,
+
+00:25:30.640 --> 00:25:35.639
+and it yields until a prompt, like it yields a part of your code.
+
+00:25:35.640 --> 00:25:38.839
+What that means is your code can stop
+
+00:25:38.840 --> 00:25:43.239
+and pass the rest of the computation to something else,
+
+00:25:43.240 --> 00:25:46.319
+and this something else can invoke the computation.
+
+00:25:46.320 --> 00:25:48.079
+That means you can have a scheduler.
+
+00:25:48.080 --> 00:25:56.839
+And How do you arrange for your continuation to be restarted or all can again?
+
+00:25:56.840 --> 00:26:04.119
+Good question. That's exactly the thing the Fibers does, like the scheduler.
+
+00:26:04.120 --> 00:26:08.559
+You could put it like an Apollo interface, even in Linux,
+
+00:26:08.560 --> 00:26:14.239
+which Apollo network connection or a file creation, something like that,
+
+00:26:14.240 --> 00:26:15.079
+or a socket.
+
+00:26:15.080 --> 00:26:17.119
+Interesting.
+
+00:26:17.120 --> 00:26:21.799
+This sounds not dissimilar from what I understand goes coroutines to be.
+
+00:26:21.800 --> 00:26:25.319
+This is coroutines, more or less.
+
+00:26:25.320 --> 00:26:26.079
+Right.
+
+00:26:26.080 --> 00:26:31.839
+These are the things you can do when you have
+
+00:26:31.840 --> 00:26:34.799
+like Andy Wingo can do it in Guile
+
+00:26:34.800 --> 00:26:36.919
+because he's got his fingers into the interpreter.
+
+00:26:36.920 --> 00:26:43.119
+Yes, he does. He sort of got inside knowledge.
+
+00:26:43.120 --> 00:26:49.639
+I don't know.
+
+00:26:49.640 --> 00:26:51.919
+Yeah, I think so, too.
+
+00:26:51.920 --> 00:26:53.919
+He implemented the delimited continuations,
+
+00:26:53.920 --> 00:26:59.759
+but yes, it was maybe my point I wanted to make.
+
+00:26:59.760 --> 00:27:01.359
+Like there's a neat solution.
+
+00:27:01.360 --> 00:27:04.719
+Sometimes you need these delimited continuations
+
+00:27:04.720 --> 00:27:12.279
+and function-wise you need like some kind of callback.
+
+00:27:12.280 --> 00:27:16.999
+Actually, you always need some kind of callback. You just hide it, well,
+
+00:27:17.000 --> 00:27:20.439
+and you call the delimited continuation.
+
+00:27:20.440 --> 00:27:20.639
+Right.
+
+00:27:20.640 --> 00:27:25.919
+I mean, if you've ever tried to do asynchronous programming,
+
+00:27:25.920 --> 00:27:33.679
+say, in C using EpoL, sort of wind up structuring your entire program
+
+00:27:33.680 --> 00:27:40.759
+around this event loop and kind of you sort of have this state
+
+00:27:40.760 --> 00:27:45.039
+that you move through as various things get signaled,
+
+00:27:45.040 --> 00:27:49.159
+whether data shows up on a file descriptor or a timer goes off, whatever.
+
+00:27:49.160 --> 00:27:52.159
+And it's kind of mind-bending.
+
+00:27:52.160 --> 00:27:53.559
+It's definitely, you know,
+
+00:27:53.560 --> 00:27:57.639
+humans seem to be most comfortable writing imperatively.
+
+00:27:57.640 --> 00:28:04.159
+And so whether it's Ruster or Golang or JavaScript, it all seems to be like,
+
+00:28:04.160 --> 00:28:07.119
+how can we wrap that state machine more ergonomically?
+
+00:28:07.120 --> 00:28:12.999
+Yes, exactly. How much more time do we have for Q&A?
+
+00:28:13.000 --> 00:28:31.119
+I think we have about seven and a half, eight more minutes.
+
+00:28:31.120 --> 00:28:37.439
+Yeah. We don't have to use all of it if there are no questions,
+
+00:28:37.440 --> 00:28:39.439
+but you're also welcome to hang out if you want.
+
+00:28:39.440 --> 00:28:41.519
+I'm happy to wait.
+
+00:28:41.520 --> 00:28:42.839
+Cool.
+
+00:28:42.840 --> 00:28:52.519
+And also, if there are no questions, I mean,
+
+00:28:52.520 --> 00:28:55.119
+one thing we could maybe do is to, if you
+
+00:28:55.120 --> 00:28:58.079
+like to maybe give a quick demo, like walk through some of the parts of,
+
+00:28:58.080 --> 00:29:00.999
+you know, your package, your code that could also work whichever,
+
+00:29:01.000 --> 00:29:02.239
+whatever you're more comfortable with.
+
+00:29:02.240 --> 00:29:07.879
+Honestly, I wasn't prepared for a live demo, so.
+
+00:29:07.880 --> 00:29:12.839
+Oh, yeah, sure. No worries. Sorry. Don't mean to put you on the spot.
+
+00:29:12.840 --> 00:29:15.439
+I'm going to steer clear of that.
+
+00:29:15.440 --> 00:29:16.999
+That's fair enough.
+
+00:29:17.000 --> 00:29:17.599
+Thank you.
+
+00:29:17.600 --> 00:29:25.199
+Okay. you
+
+00:29:25.200 --> 00:29:25.239
+
+
+00:29:25.240 --> 00:31:11.719
+questions maybe we can wrap it up sounds good
+
+00:31:11.720 --> 00:31:20.999
+I actually think I need to check in for my next talk soon
+
+00:31:21.000 --> 00:31:26.519
+oh yeah sure all right any last question before we wrap up folks
+
+00:31:26.520 --> 00:32:05.959
+all right I think in that case we can go ahead and wrap up
+
+00:32:05.960 --> 00:32:07.919
+thanks so much Michael for the great talk
+
+00:32:07.920 --> 00:32:10.359
+I very much look forward to checking out your work
+
+00:32:10.360 --> 00:32:11.999
+and yeah seeing what what could be done with it
+
+00:32:12.000 --> 00:32:14.719
+and using it as a building block and toolkit all right well
+
+00:32:14.720 --> 00:32:17.079
+thank you so much
+
+00:32:17.080 --> 00:32:20.079
+I feel like I learned as much through the Q&A
+
+00:32:20.080 --> 00:32:22.239
+as other people probably did from the talk
+
+00:32:22.240 --> 00:32:22.519
+wonderful
+
+00:32:22.520 --> 00:32:24.279
+yeah it's great it's a great way to get to know each other
+
+00:32:24.280 --> 00:32:24.839
+and get to know each other
+
+00:32:24.840 --> 00:32:25.759
+wonderful yeah it's great
+
+00:32:25.760 --> 00:32:29.999
+and yeah we were very lucky to be able to do these sort of live Q&A's
+
+00:32:30.000 --> 00:32:33.359
+and awesome speakers like yourself just being able to join in
+
+00:32:33.360 --> 00:32:35.439
+and yeah just teach and learn
+
+00:32:35.440 --> 00:32:37.999
+all right see you in a bit
+
+00:32:38.000 --> 00:32:47.040
+awesome yep see you in a little bit bye
diff --git a/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt
new file mode 100644
index 00000000..c5528717
--- /dev/null
+++ b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main--chapters.vtt
@@ -0,0 +1,40 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:47.200
+Asynchronous programming
+
+00:00:47.200 --> 00:01:42.600
+Automating my music player
+
+00:01:42.600 --> 00:03:22.080
+Working with the API
+
+00:03:22.080 --> 00:05:05.200
+make-network-process
+
+00:05:05.200 --> 00:05:57.920
+The sequence of events
+
+00:05:57.920 --> 00:07:50.480
+Queues
+
+00:07:50.480 --> 00:09:24.240
+Callbacks
+
+00:09:24.240 --> 00:11:48.080
+Client-side code
+
+00:11:48.080 --> 00:12:27.760
+Demo
+
+00:12:27.760 --> 00:13:15.520
+Logic
+
+00:13:15.520 --> 00:14:53.520
+Callback hell
+
+00:14:53.520 --> 00:16:46.400
+Lisp macros
+
+00:16:46.400 --> 00:17:47.880
+Conclusion
diff --git a/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt
new file mode 100644
index 00000000..eb25844e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-async--emacs-was-async-before-async-was-cool--michael-herstine--main.vtt
@@ -0,0 +1,1505 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:02.720
+Hey everyone, I'm Michael
+
+2
+00:00:02.720 --> 00:00:04.480
+and I'm going to be talking to you today
+
+3
+00:00:04.480 --> 00:00:07.640
+about asynchronous programming in Emacs Lisp.
+
+4
+00:00:07.640 --> 00:00:10.360
+I'm located in the San Francisco Bay Area
+
+5
+00:00:10.360 --> 00:00:12.040
+where I'm a developer as well as
+
+6
+00:00:12.040 --> 00:00:14.160
+a long time Emacs user.
+
+7
+00:00:14.160 --> 00:00:18.760
+You may have heard of async or asynchronous programming.
+
+8
+00:00:18.760 --> 00:00:21.360
+The idea has been around for decades
+
+9
+00:00:21.360 --> 00:00:24.400
+but it first gained widespread attention in JavaScript
+
+10
+00:00:24.400 --> 00:00:26.720
+back in the aughts.
+
+11
+00:00:26.720 --> 00:00:29.680
+Then in the teens it gained tremendous popularity
+
+12
+00:00:29.680 --> 00:00:31.720
+in the DevOps world with Golang.
+
+13
+00:00:31.720 --> 00:00:33.800
+And just in the last few years
+
+14
+00:00:33.800 --> 00:00:37.880
+support for async programming has landed in Rust.
+
+15
+00:00:37.880 --> 00:00:40.080
+Well it can be done in Emacs as well
+
+16
+00:00:40.080 --> 00:00:42.040
+and this talk will demonstrate that
+
+17
+00:00:42.040 --> 00:00:44.600
+by walking you through a little problem
+
+18
+00:00:44.600 --> 00:00:47.200
+that I actually solved for myself.
+
+19
+00:00:47.200 --> 00:00:49.040
+Like a lot of these stories
+
+20
+00:00:49.040 --> 00:00:51.920
+it begins with scratching a personal itch.
+
+21
+00:00:51.920 --> 00:00:55.320
+In my case automating my music server.
+
+22
+00:00:55.320 --> 00:00:58.240
+I use something called the music player daemon locally
+
+23
+00:00:58.240 --> 00:01:00.240
+and as the name suggests
+
+24
+00:01:00.240 --> 00:01:03.560
+it just kind of hangs out in the background.
+
+25
+00:01:03.560 --> 00:01:08.040
+Reads music files and talks to assorted sound drivers.
+
+26
+00:01:08.040 --> 00:01:09.640
+In fact it is so focused on
+
+27
+00:01:09.640 --> 00:01:12.440
+that mission that it doesn't even offer a user interface.
+
+28
+00:01:12.440 --> 00:01:14.400
+Instead it serves an API
+
+29
+00:01:14.400 --> 00:01:16.120
+and invites application developers
+
+30
+00:01:16.120 --> 00:01:19.360
+to build clients on top of that API.
+
+31
+00:01:19.360 --> 00:01:22.200
+Okay so let's hop into a vterm
+
+32
+00:01:22.200 --> 00:01:25.080
+and I'd like to show you the MPD client I use
+
+33
+00:01:25.080 --> 00:01:26.600
+for my daily driver.
+
+34
+00:01:26.600 --> 00:01:29.520
+Something called ncmpcpp.
+
+35
+00:01:29.520 --> 00:01:31.800
+Doesn't exactly roll off the tongue
+
+36
+00:01:31.800 --> 00:01:33.720
+but I've got a playlist.
+
+37
+00:01:33.720 --> 00:01:36.560
+I can browse the file system.
+
+38
+00:01:36.560 --> 00:01:39.240
+Looks like I can search my music library.
+
+39
+00:01:39.240 --> 00:01:40.000
+Yada yada yada.
+
+40
+00:01:40.000 --> 00:01:42.600
+It's got all the basic features.
+
+41
+00:01:42.600 --> 00:01:44.640
+The point that I want to make is that
+
+42
+00:01:44.640 --> 00:01:51.920
+ncmpcpp is a completely independent project of MPD.
+
+43
+00:01:51.920 --> 00:01:53.720
+Separate and distinct.
+
+44
+00:01:53.720 --> 00:01:55.680
+It does all of its work
+
+45
+00:01:55.680 --> 00:01:57.200
+by simply communicating with
+
+46
+00:01:57.200 --> 00:02:01.400
+the music player daemon over the API.
+
+47
+00:02:01.400 --> 00:02:03.440
+Well I wanted to program to that API
+
+48
+00:02:03.440 --> 00:02:05.840
+only from within Emacs.
+
+49
+00:02:05.840 --> 00:02:09.520
+Now there are already Emacs MPD clients out there
+
+50
+00:02:09.520 --> 00:02:11.560
+but I didn't really want a full blown client.
+
+51
+00:02:11.560 --> 00:02:14.320
+I just wanted a few small tweaks
+
+52
+00:02:14.320 --> 00:02:16.320
+over my current configuration.
+
+53
+00:02:16.320 --> 00:02:19.280
+A command to skip to the next song.
+
+54
+00:02:19.280 --> 00:02:22.360
+Maybe shove the current track into the mode line.
+
+55
+00:02:22.360 --> 00:02:24.160
+Things like this.
+
+56
+00:02:24.160 --> 00:02:28.560
+I needed an elisp API that would let me do this.
+
+57
+00:02:28.560 --> 00:02:32.000
+Okay well let's get out of ncmpcpp
+
+58
+00:02:32.000 --> 00:02:37.560
+and let's get into a netcat session
+
+59
+00:02:37.560 --> 00:02:39.400
+with my local MPD server.
+
+60
+00:02:39.400 --> 00:02:43.840
+As you can see we get a welcome string.
+
+61
+00:02:43.840 --> 00:02:46.800
+So it is a server goes first protocol.
+
+62
+00:02:46.800 --> 00:02:49.640
+But after that it's a very familiar
+
+63
+00:02:49.640 --> 00:02:53.960
+text based request response oriented protocol.
+
+64
+00:02:53.960 --> 00:02:56.240
+I can ask for the volume.
+
+65
+00:02:56.240 --> 00:02:58.160
+I can ask for the status.
+
+66
+00:02:58.160 --> 00:03:06.000
+But in particular I wanted an asynchronous API.
+
+67
+00:03:06.000 --> 00:03:07.800
+If I issue a command like
+
+68
+00:03:07.800 --> 00:03:11.840
+find every track in my library
+
+69
+00:03:11.840 --> 00:03:15.360
+that's going to produce a lot of data
+
+70
+00:03:15.360 --> 00:03:18.920
+that's a human perceptible pause
+
+71
+00:03:18.920 --> 00:03:22.080
+as Emacs processes all the input.
+
+72
+00:03:22.080 --> 00:03:25.560
+What I wanted was a style of programming
+
+73
+00:03:25.560 --> 00:03:28.080
+where I could fire off my command
+
+74
+00:03:28.080 --> 00:03:31.560
+have the Emacs command loop keep working
+
+75
+00:03:31.560 --> 00:03:33.440
+and only invoke some callback
+
+76
+00:03:33.440 --> 00:03:35.280
+when there was data available.
+
+77
+00:03:35.280 --> 00:03:39.560
+Well Emacs is famously single threaded
+
+78
+00:03:39.560 --> 00:03:41.840
+so it shouldn't come as a surprise
+
+79
+00:03:41.840 --> 00:03:44.080
+that it offers a rich set of primitives
+
+80
+00:03:44.080 --> 00:03:46.720
+that enable the sort of network programming
+
+81
+00:03:46.720 --> 00:03:49.320
+that I wanted to do.
+
+82
+00:03:49.320 --> 00:03:50.760
+In particular it offers
+
+83
+00:03:50.760 --> 00:03:53.280
+a function called make network process.
+
+84
+00:03:53.280 --> 00:03:57.800
+Now this method offers a bewildering variety of options.
+
+85
+00:03:57.800 --> 00:03:59.320
+But at the heart of the matter
+
+86
+00:03:59.320 --> 00:04:01.040
+it opens a network connection
+
+87
+00:04:01.040 --> 00:04:03.120
+to some endpoint out there
+
+88
+00:04:03.120 --> 00:04:06.640
+and we can configure it to be non blocking.
+
+89
+00:04:06.640 --> 00:04:09.840
+It returns a handle that you can use to refer to
+
+90
+00:04:09.840 --> 00:04:14.880
+this network connection with other methods.
+
+91
+00:04:14.880 --> 00:04:17.760
+Other methods such as process and string
+
+92
+00:04:17.760 --> 00:04:19.600
+which as the name suggests
+
+93
+00:04:19.600 --> 00:04:21.960
+allows you to send textual data
+
+94
+00:04:21.960 --> 00:04:26.320
+to the remote endpoint of your network connection.
+
+95
+00:04:26.320 --> 00:04:29.400
+You can also use it with set process filter
+
+96
+00:04:29.400 --> 00:04:32.160
+which allows you to associate a callback
+
+97
+00:04:32.160 --> 00:04:33.240
+with your network connection.
+
+98
+00:04:33.240 --> 00:04:35.920
+That callback will be invoked
+
+99
+00:04:35.920 --> 00:04:40.480
+when there is data available
+
+100
+00:04:40.480 --> 00:04:41.960
+in the processes read buffer.
+
+101
+00:04:41.960 --> 00:04:44.960
+In other words in a request response oriented protocol
+
+102
+00:04:44.960 --> 00:04:47.800
+like that of MPD you open your socket
+
+103
+00:04:47.800 --> 00:04:50.960
+with make network process
+
+104
+00:04:50.960 --> 00:04:53.760
+send your request via process send string
+
+105
+00:04:53.760 --> 00:04:56.360
+and life will just continue in emacs
+
+106
+00:04:56.360 --> 00:04:57.560
+until some data shows up
+
+107
+00:04:57.560 --> 00:05:00.720
+in the processes read buffer
+
+108
+00:05:00.720 --> 00:05:05.200
+at which point your callback will be invoked.
+
+109
+00:05:05.200 --> 00:05:07.560
+It turns out this was enough
+
+110
+00:05:07.560 --> 00:05:12.280
+for a purpose built async runtime.
+
+111
+00:05:12.280 --> 00:05:14.800
+Let's work through the sequence of events
+
+112
+00:05:14.800 --> 00:05:16.480
+when opening a connection
+
+113
+00:05:16.480 --> 00:05:18.720
+and firing off a few commands in this style.
+
+114
+00:05:18.720 --> 00:05:22.120
+So let's imagine a library
+
+115
+00:05:22.120 --> 00:05:25.520
+that offers a connection object of some sort
+
+116
+00:05:25.520 --> 00:05:28.720
+a caller and an MPD server out on the network.
+
+117
+00:05:28.720 --> 00:05:31.880
+The caller will presumably get themselves
+
+118
+00:05:31.880 --> 00:05:34.760
+a connection object by invoking some sort of
+
+119
+00:05:34.760 --> 00:05:38.080
+connect method on our library.
+
+120
+00:05:38.080 --> 00:05:41.160
+We can handle this through make network process
+
+121
+00:05:41.160 --> 00:05:45.360
+but we're going to invoke make network process
+
+122
+00:05:45.360 --> 00:05:47.200
+with no weight equal to true
+
+123
+00:05:47.200 --> 00:05:48.520
+in other words asynchronously.
+
+124
+00:05:48.520 --> 00:05:52.240
+That means the method is going to return immediately.
+
+125
+00:05:52.240 --> 00:05:56.320
+We won't even know if the connection is up
+
+126
+00:05:56.320 --> 00:05:57.920
+let alone what the response would be.
+
+127
+00:05:57.920 --> 00:06:01.560
+This has some implications.
+
+128
+00:06:01.560 --> 00:06:05.280
+At this point we've returned control to the caller
+
+129
+00:06:05.280 --> 00:06:09.400
+the emacs event loop is proceeding quite happily
+
+130
+00:06:09.400 --> 00:06:11.320
+and so the caller is free
+
+131
+00:06:11.320 --> 00:06:14.920
+to start using our connection object.
+
+132
+00:06:14.920 --> 00:06:17.640
+They might say issue a status command.
+
+133
+00:06:17.640 --> 00:06:20.600
+Okay well in our library
+
+134
+00:06:20.600 --> 00:06:22.680
+we don't have a connection yet.
+
+135
+00:06:22.680 --> 00:06:25.920
+How on earth are we going to service this?
+
+136
+00:06:25.920 --> 00:06:29.440
+Well we can simply give ourselves a queue
+
+137
+00:06:29.440 --> 00:06:33.360
+and note down the fact that we owe a status command.
+
+138
+00:06:33.360 --> 00:06:35.560
+That's pretty quick.
+
+139
+00:06:35.560 --> 00:06:38.120
+We've now returned control back to our caller
+
+140
+00:06:38.120 --> 00:06:40.640
+and they are again free to issue more commands.
+
+141
+00:06:40.640 --> 00:06:41.840
+Maybe they issue a play command.
+
+142
+00:06:41.840 --> 00:06:45.160
+Okay well we're going to go deeper into debt
+
+143
+00:06:45.160 --> 00:06:48.160
+and note that we also owe a play command.
+
+144
+00:06:48.160 --> 00:06:56.160
+At some point in the indeterminate future MPDU
+
+145
+00:06:56.160 --> 00:06:57.320
+is the connection will get up
+
+146
+00:06:57.320 --> 00:07:03.000
+MPDU will allocate resources to track a new client.
+
+147
+00:07:03.000 --> 00:07:06.160
+They will write the welcome string into the socket
+
+148
+00:07:06.160 --> 00:07:07.920
+and those bytes are going to show up
+
+149
+00:07:07.920 --> 00:07:10.360
+in the emacs process read buffer
+
+150
+00:07:10.360 --> 00:07:13.160
+at which point our callback will be invoked.
+
+151
+00:07:13.160 --> 00:07:17.440
+We can parse the welcome string maybe
+
+152
+00:07:17.440 --> 00:07:19.240
+note the version that connection object
+
+153
+00:07:19.240 --> 00:07:20.400
+that might come in handy
+
+154
+00:07:20.400 --> 00:07:21.720
+but the key point is
+
+155
+00:07:21.720 --> 00:07:24.080
+our callback needs to take a look at the queue
+
+156
+00:07:24.080 --> 00:07:25.240
+and notice
+
+157
+00:07:25.240 --> 00:07:27.200
+oh we owe a status command
+
+158
+00:07:27.200 --> 00:07:29.880
+and so we'll invoke process and string
+
+159
+00:07:29.880 --> 00:07:32.280
+and send the status command down the pipe.
+
+160
+00:07:32.280 --> 00:07:36.760
+Again at some indeterminate time in the future
+
+161
+00:07:36.760 --> 00:07:38.600
+some bytes are going to show up
+
+162
+00:07:38.600 --> 00:07:41.200
+in our processes read buffer
+
+163
+00:07:41.200 --> 00:07:43.160
+and our callback will again be invoked.
+
+164
+00:07:43.160 --> 00:07:48.560
+We've got volume is 75 plus a lot of other stuff
+
+165
+00:07:48.560 --> 00:07:50.480
+and here we come to the next problem.
+
+166
+00:07:50.480 --> 00:07:54.440
+If our caller invoked status
+
+167
+00:07:54.440 --> 00:07:56.960
+they probably wanted to know about the status
+
+168
+00:07:56.960 --> 00:07:59.880
+so how shall we get them to them?
+
+169
+00:07:59.880 --> 00:08:03.040
+Well there's really not a lot of options at this point
+
+170
+00:08:03.040 --> 00:08:04.280
+except the callback.
+
+171
+00:08:04.280 --> 00:08:09.000
+Okay so change of plan our queue
+
+172
+00:08:09.000 --> 00:08:11.720
+is no longer a queue of commands
+
+173
+00:08:11.720 --> 00:08:13.840
+it's going to be a queue of commands
+
+174
+00:08:13.840 --> 00:08:15.880
+with associated callbacks.
+
+175
+00:08:15.880 --> 00:08:20.280
+We read the response off the socket
+
+176
+00:08:20.280 --> 00:08:23.440
+invoke our caller supplied callback
+
+177
+00:08:23.440 --> 00:08:26.080
+and then pop the queue.
+
+178
+00:08:26.080 --> 00:08:28.920
+At this point our callback
+
+179
+00:08:28.920 --> 00:08:32.160
+the library callback needs to know
+
+180
+00:08:32.160 --> 00:08:34.040
+that we still have a pending command
+
+181
+00:08:34.040 --> 00:08:35.720
+we fire that off down the pipe
+
+182
+00:08:35.720 --> 00:08:38.520
+at some indeterminate time in the future
+
+183
+00:08:38.520 --> 00:08:40.360
+we get a call we get a response
+
+184
+00:08:40.360 --> 00:08:42.640
+our callback is invoked
+
+185
+00:08:42.640 --> 00:08:45.720
+we invoke the caller supplied callback
+
+186
+00:08:45.720 --> 00:08:47.240
+and we pop the queue.
+
+187
+00:08:47.240 --> 00:08:53.760
+The structure of such a program
+
+188
+00:08:53.760 --> 00:08:55.800
+is best viewed as a finite state machine
+
+189
+00:08:55.800 --> 00:08:57.640
+and this is typically where you end up
+
+190
+00:08:57.640 --> 00:08:59.200
+in asynchronous programming at least
+
+191
+00:08:59.200 --> 00:09:03.360
+when you don't have a runtime grafted onto your program
+
+192
+00:09:03.360 --> 00:09:04.960
+the way you do with Golang
+
+193
+00:09:04.960 --> 00:09:08.240
+or when you don't have sort of extensive library support
+
+194
+00:09:08.240 --> 00:09:09.680
+the way you do with Rust.
+
+195
+00:09:09.680 --> 00:09:14.480
+Your data structure exists in one of these states
+
+196
+00:09:14.480 --> 00:09:15.440
+at any given time
+
+197
+00:09:15.440 --> 00:09:18.960
+and when input shows up on your file descriptor
+
+198
+00:09:18.960 --> 00:09:24.240
+you transition along one of these edges to a new state.
+
+199
+00:09:24.240 --> 00:09:28.160
+Cool so let's take a look at some of the code
+
+200
+00:09:28.160 --> 00:09:29.480
+that flows from this.
+
+201
+00:09:29.480 --> 00:09:32.240
+Okay let's hop over to an Emacs
+
+202
+00:09:32.240 --> 00:09:33.920
+and take a look at how we might code this up.
+
+203
+00:09:33.920 --> 00:09:38.360
+If you recall the sequence diagrams I shared
+
+204
+00:09:38.360 --> 00:09:40.120
+we're going to be scribbling down the command
+
+205
+00:09:40.120 --> 00:09:42.160
+and the callback that will be invoking
+
+206
+00:09:42.160 --> 00:09:43.240
+upon its completion.
+
+207
+00:09:43.240 --> 00:09:45.440
+So the first thing I did was give myself
+
+208
+00:09:45.440 --> 00:09:47.400
+a little command struct
+
+209
+00:09:47.400 --> 00:09:52.280
+with that I was able to define the connection object.
+
+210
+00:09:52.280 --> 00:09:56.280
+We're going to be storing the handle to the connection.
+
+211
+00:09:56.280 --> 00:09:59.400
+We're going to write down the protocol version
+
+212
+00:09:59.400 --> 00:10:02.000
+that we harvest from the welcome message
+
+213
+00:10:02.000 --> 00:10:03.560
+and of course we'll be recording
+
+214
+00:10:03.560 --> 00:10:05.760
+the command queue as well.
+
+215
+00:10:05.760 --> 00:10:08.640
+And so I gave myself a little connection object
+
+216
+00:10:08.640 --> 00:10:10.960
+with a connection struct
+
+217
+00:10:10.960 --> 00:10:12.240
+with those three attributes.
+
+218
+00:10:12.240 --> 00:10:15.000
+With the data model squared away
+
+219
+00:10:15.000 --> 00:10:17.840
+it was really pretty easy to code up
+
+220
+00:10:17.840 --> 00:10:21.160
+the connect implementation.
+
+221
+00:10:21.160 --> 00:10:24.880
+I'm deleting some details for exposition purposes
+
+222
+00:10:24.880 --> 00:10:29.520
+but in the event it's really not that more complex
+
+223
+00:10:29.520 --> 00:10:30.520
+than what you see here.
+
+224
+00:10:30.520 --> 00:10:32.840
+We're going to unpack the arguments,
+
+225
+00:10:32.840 --> 00:10:35.040
+figure out where the MPD server is
+
+226
+00:10:35.040 --> 00:10:37.280
+to which you would like us to connect.
+
+227
+00:10:37.280 --> 00:10:39.920
+We'll connect via make network process.
+
+228
+00:10:39.920 --> 00:10:42.640
+We'll associate a library defined callback
+
+229
+00:10:42.640 --> 00:10:45.920
+with that connection via set process filter.
+
+230
+00:10:45.920 --> 00:10:48.440
+Then we'll instantiate the connection object
+
+231
+00:10:48.440 --> 00:10:50.120
+and return it to the caller.
+
+232
+00:10:50.120 --> 00:10:53.800
+Once the caller has a connection object
+
+233
+00:10:53.800 --> 00:10:56.880
+they're free to send commands down that connection.
+
+234
+00:10:56.880 --> 00:10:59.120
+So what we're doing here
+
+235
+00:10:59.120 --> 00:11:02.320
+is simply instantiating a command object
+
+236
+00:11:02.320 --> 00:11:05.200
+on the basis of the caller supplied arguments
+
+237
+00:11:05.200 --> 00:11:06.640
+and appending it to the queue.
+
+238
+00:11:06.640 --> 00:11:07.920
+And then the last thing we do
+
+239
+00:11:07.920 --> 00:11:11.040
+and I've just indicated this with a comment
+
+240
+00:11:11.040 --> 00:11:12.040
+is we kick the queue.
+
+241
+00:11:12.040 --> 00:11:14.560
+This kind of goes back to
+
+242
+00:11:14.560 --> 00:11:18.200
+the state transition diagram I laid out earlier.
+
+243
+00:11:18.200 --> 00:11:22.680
+What this means is the logic for saying well
+
+244
+00:11:22.680 --> 00:11:24.280
+if we're waiting the completion
+
+245
+00:11:24.280 --> 00:11:25.480
+of a previously sent command
+
+246
+00:11:25.480 --> 00:11:27.280
+there's really not much more to be done.
+
+247
+00:11:27.280 --> 00:11:31.000
+We're just going to push this command onto the queue
+
+248
+00:11:31.000 --> 00:11:31.600
+and return.
+
+249
+00:11:31.600 --> 00:11:33.120
+On the other hand
+
+250
+00:11:33.120 --> 00:11:37.120
+if the queue was empty on entry to LMPD send
+
+251
+00:11:37.120 --> 00:11:39.160
+there's no reason not to just
+
+252
+00:11:39.160 --> 00:11:43.400
+immediately send the command.
+
+253
+00:11:43.400 --> 00:11:44.680
+And this is an example of
+
+254
+00:11:44.680 --> 00:11:46.520
+the sort of client side code
+
+255
+00:11:46.520 --> 00:11:48.080
+that results from this API.
+
+256
+00:11:48.080 --> 00:11:51.360
+So you can see here we are giving ourselves
+
+257
+00:11:51.360 --> 00:11:54.240
+a connection to the MPD server on the local host
+
+258
+00:11:54.240 --> 00:11:56.600
+and we're going to send the get volume command
+
+259
+00:11:56.600 --> 00:11:58.160
+down that connection.
+
+260
+00:11:58.160 --> 00:12:02.840
+And if that command completes and all is well
+
+261
+00:12:02.840 --> 00:12:05.360
+we'll just send a message to Emacs.
+
+262
+00:12:05.360 --> 00:12:07.800
+Unfortunately you can't see my mini buffer
+
+263
+00:12:07.800 --> 00:12:10.960
+so I'll hop over to the messages buffer
+
+264
+00:12:10.960 --> 00:12:12.720
+and there's our result.
+
+265
+00:12:12.720 --> 00:12:15.160
+The volume is 43.
+
+266
+00:12:15.160 --> 00:12:17.960
+Great I thought.
+
+267
+00:12:17.960 --> 00:12:22.520
+Simple clean responsive easy to code to.
+
+268
+00:12:22.520 --> 00:12:27.760
+That is unfortunately not the end of the story.
+
+269
+00:12:27.760 --> 00:12:32.320
+Let's continue this example a little bit.
+
+270
+00:12:32.320 --> 00:12:33.560
+Let's imagine that
+
+271
+00:12:33.560 --> 00:12:35.920
+if the volume comes back from the server
+
+272
+00:12:35.920 --> 00:12:37.360
+and it is less than 50
+
+273
+00:12:37.360 --> 00:12:38.600
+we would like to set it to 50.
+
+274
+00:12:38.600 --> 00:12:41.560
+So this is interesting
+
+275
+00:12:41.560 --> 00:12:43.200
+because we have two commands
+
+276
+00:12:43.200 --> 00:12:45.840
+and whether or not we send the second command
+
+277
+00:12:45.840 --> 00:12:46.840
+is going to depend on
+
+278
+00:12:46.840 --> 00:12:48.560
+the response we get from the first.
+
+279
+00:12:48.560 --> 00:12:51.640
+Okay I thought well that's fine
+
+280
+00:12:51.640 --> 00:12:55.080
+I can simply put that logic in the callback
+
+281
+00:12:55.080 --> 00:12:57.920
+that I specified for the get volume command.
+
+282
+00:12:57.920 --> 00:13:01.560
+So here we are we check the return code
+
+283
+00:13:01.560 --> 00:13:04.400
+we parse the volume we compare it to 50
+
+284
+00:13:04.400 --> 00:13:08.360
+and if it's less we just invoke LMPD send again
+
+285
+00:13:08.360 --> 00:13:10.800
+from the first command's callback.
+
+286
+00:13:10.800 --> 00:13:13.440
+Okay I could live with that
+
+287
+00:13:13.440 --> 00:13:15.520
+it's not the worst thing I've ever seen.
+
+288
+00:13:15.520 --> 00:13:19.400
+Let's extend this example a little further
+
+289
+00:13:19.400 --> 00:13:21.480
+and this is contrived but bear with me.
+
+290
+00:13:21.480 --> 00:13:25.480
+Let us suppose that if we do set the volume to 50
+
+291
+00:13:25.480 --> 00:13:27.800
+we'd like to get the volume one more time
+
+292
+00:13:27.800 --> 00:13:30.640
+just to make sure that our change took on the server.
+
+293
+00:13:30.640 --> 00:13:33.560
+Okay we can play the same game.
+
+294
+00:13:33.560 --> 00:13:37.280
+We will put that logic in the callback
+
+295
+00:13:37.280 --> 00:13:39.520
+that we specified for the set volume command.
+
+296
+00:13:39.520 --> 00:13:43.480
+And here we are we check the return code
+
+297
+00:13:43.480 --> 00:13:45.480
+we send a message to Emacs
+
+298
+00:13:45.480 --> 00:13:49.200
+we send the get volume command again
+
+299
+00:13:49.200 --> 00:13:51.080
+along with its own callback
+
+300
+00:13:51.080 --> 00:13:55.280
+and at this point I think you know I hope it's clear
+
+301
+00:13:55.280 --> 00:13:57.520
+the problem that is emerging
+
+302
+00:13:57.520 --> 00:14:01.360
+and if it's not yet let's let me note that so far
+
+303
+00:14:01.360 --> 00:14:03.000
+we're only handling the happy path
+
+304
+00:14:03.000 --> 00:14:04.520
+in each of these callbacks.
+
+305
+00:14:04.520 --> 00:14:06.840
+We really ought to do something about the error path
+
+306
+00:14:06.840 --> 00:14:10.120
+for purposes of illustration let's just say
+
+307
+00:14:10.120 --> 00:14:12.120
+we send a message to Emacs
+
+308
+00:14:12.120 --> 00:14:14.320
+that means it would look like this
+
+309
+00:14:14.320 --> 00:14:16.560
+and it's at this point
+
+310
+00:14:16.560 --> 00:14:19.400
+that I really think it's impossible to deny
+
+311
+00:14:19.400 --> 00:14:23.280
+that this API is actually not that easy to program to
+
+312
+00:14:23.280 --> 00:14:27.160
+and if there are any JavaScript devs watching
+
+313
+00:14:27.160 --> 00:14:28.840
+you're probably chuckling right now
+
+314
+00:14:28.840 --> 00:14:30.720
+because I have discovered for myself
+
+315
+00:14:30.720 --> 00:14:33.880
+what they call callback hell.
+
+316
+00:14:33.880 --> 00:14:36.040
+If you are returning
+
+317
+00:14:36.040 --> 00:14:40.160
+the results of asynchronous function invocations
+
+318
+00:14:40.160 --> 00:14:42.200
+to their caller via callbacks
+
+319
+00:14:42.200 --> 00:14:45.640
+you pretty much inevitably end up in this sort of
+
+320
+00:14:45.640 --> 00:14:48.040
+deeply nested sequence of callbacks
+
+321
+00:14:48.040 --> 00:14:49.880
+that is difficult to write difficult to read
+
+322
+00:14:49.880 --> 00:14:53.520
+and difficult to reason about.
+
+323
+00:14:53.520 --> 00:14:57.480
+And yet when I was stuck in this situation
+
+324
+00:14:57.480 --> 00:15:00.080
+it just seemed like it really shouldn't be this bad.
+
+325
+00:15:00.080 --> 00:15:05.320
+If I give myself this sort of tabular data structure
+
+326
+00:15:05.320 --> 00:15:10.160
+I felt that this expressed precisely the same logic
+
+327
+00:15:10.160 --> 00:15:11.960
+just in a much easier to read manner.
+
+328
+00:15:11.960 --> 00:15:15.840
+I could in my mind's eye
+
+329
+00:15:15.840 --> 00:15:19.720
+see the code for transforming this data structure
+
+330
+00:15:19.720 --> 00:15:21.040
+which is really just a list
+
+331
+00:15:21.040 --> 00:15:25.600
+into the code that you just saw in the previous slide
+
+332
+00:15:25.600 --> 00:15:29.440
+and really if Lisp is good at anything
+
+333
+00:15:29.440 --> 00:15:31.080
+it is list processing right
+
+334
+00:15:31.080 --> 00:15:33.080
+and it was really at this point
+
+335
+00:15:33.080 --> 00:15:35.240
+that a little bit of enlightenment dawned.
+
+336
+00:15:35.240 --> 00:15:40.800
+I learned that Lisp is homo iconic
+
+337
+00:15:40.800 --> 00:15:46.040
+which is just means that the language itself
+
+338
+00:15:46.040 --> 00:15:49.360
+is a data structure in that language.
+
+339
+00:15:49.360 --> 00:15:53.160
+Lisp code is after all just a list
+
+340
+00:15:53.160 --> 00:15:57.160
+and the power of Lisp macros
+
+341
+00:15:57.160 --> 00:15:59.760
+is taking that data structure
+
+342
+00:15:59.760 --> 00:16:02.400
+some data structure that you've defined
+
+343
+00:16:02.400 --> 00:16:04.640
+and doing exactly what I wanted to do
+
+344
+00:16:04.640 --> 00:16:07.520
+transforming it from one list into another
+
+345
+00:16:07.520 --> 00:16:11.080
+the destination list being Lisp code.
+
+346
+00:16:11.080 --> 00:16:16.000
+So I got busy and I coded up my first Lisp macro
+
+347
+00:16:16.000 --> 00:16:19.160
+which I called LMPD chain
+
+348
+00:16:19.160 --> 00:16:21.600
+and that lengthy list of you know
+
+349
+00:16:21.600 --> 00:16:24.200
+three or four nested callbacks
+
+350
+00:16:24.200 --> 00:16:25.920
+gets turned into this
+
+351
+00:16:25.920 --> 00:16:29.520
+which I hope you'll agree is much simpler
+
+352
+00:16:29.520 --> 00:16:32.240
+much easier to read much easier to reason about.
+
+353
+00:16:32.240 --> 00:16:36.000
+And if you're morbidly curious
+
+354
+00:16:36.000 --> 00:16:40.160
+you can you can expand your macros
+
+355
+00:16:40.160 --> 00:16:44.200
+and this invocation of LMPD chain expands to this.
+
+356
+00:16:44.200 --> 00:16:46.400
+So that's my story.
+
+357
+00:16:46.400 --> 00:16:50.840
+In all fairness I should note that
+
+358
+00:16:50.840 --> 00:16:55.160
+the MPD protocol has some subtleties and complexities
+
+359
+00:16:55.160 --> 00:16:56.880
+that I didn't really get into
+
+360
+00:16:56.880 --> 00:16:58.360
+both due to time constraints
+
+361
+00:16:58.360 --> 00:17:00.520
+and because they're not terribly relevant
+
+362
+00:17:00.520 --> 00:17:02.000
+to the points I wanted to touch on
+
+363
+00:17:02.000 --> 00:17:05.360
+I should also note that there's
+
+364
+00:17:05.360 --> 00:17:07.720
+a fair amount of work in the library itself
+
+365
+00:17:07.720 --> 00:17:11.240
+around accumulating partial responses
+
+366
+00:17:11.240 --> 00:17:12.560
+as they show up in the buffer
+
+367
+00:17:12.560 --> 00:17:16.120
+and dispatching them piecemeal to the caller
+
+368
+00:17:16.120 --> 00:17:19.720
+that was really too complex to get into here.
+
+369
+00:17:19.720 --> 00:17:22.360
+If you would like to see the code
+
+370
+00:17:22.360 --> 00:17:25.080
+it's available on GitHub as well as Melpa.
+
+371
+00:17:25.080 --> 00:17:29.200
+I'll be putting a version of this talk
+
+372
+00:17:29.200 --> 00:17:30.480
+on my personal site
+
+373
+00:17:30.480 --> 00:17:33.720
+and you can always reach out to me personally
+
+374
+00:17:33.720 --> 00:17:36.960
+I hang out on IRC as SPIF
+
+375
+00:17:36.960 --> 00:17:41.920
+or you can just email me as SPIF at P.O.Box dot com.
+
+376
+00:17:41.920 --> 00:17:47.880
+Thank you very much.
diff --git a/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt b/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt
new file mode 100644
index 00000000..565d1168
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main--chapters.vtt
@@ -0,0 +1,25 @@
+WEBVTT
+
+00:00.000 --> 00:00:27.899
+Introduction
+
+00:27.900 --> 00:01:32.719
+Why Emacs Buddy?
+
+01:32.720 --> 00:02:17.039
+What can you expect?
+
+02:17.040 --> 00:02:58.959
+Why not just mailing lists or Reddit?
+
+02:58.960 --> 00:03:47.959
+How do you get in touch with a buddy?
+
+03:47.960 --> 00:04:14.759
+How did it go?
+
+04:14.760 --> 00:05:48.359
+Example
+
+05:48.360 --> 00:07:59.520
+What if you want to be a buddy?
diff --git a/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt b/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt
new file mode 100644
index 00000000..8d4b023c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buddy--the-emacs-buddy-initiative--andrea--main.vtt
@@ -0,0 +1,424 @@
+WEBVTT captioned by andrea
+
+00:00.000 --> 00:03.919
+Hello, welcome to my talk, the Emacs Buddy Initiative.
+
+00:03.920 --> 00:04.759
+Who am I?
+
+00:04.760 --> 00:06.999
+I'm Andrea. I work as a Clojure Software Engineer
+
+00:07.000 --> 00:08.999
+somewhere in the middle of the UK.
+
+00:09.000 --> 00:12.519
+And I started with Emacs during my PhD,
+
+00:12.520 --> 00:14.119
+thanks to my PhD supervisor
+
+00:14.120 --> 00:15.759
+that introduced me to this tool.
+
+00:15.760 --> 00:17.279
+And from now and from then,
+
+00:17.280 --> 00:20.319
+I am basically using it for everything.
+
+00:20.320 --> 00:22.159
+You can find more about this everything
+
+00:22.160 --> 00:26.519
+at ag91.github.io, that is my blog.
+
+00:26.520 --> 00:27.899
+So let's get into the talk.
+
+00:27.900 --> 00:29.479
+Why Emacs Buddy?
+
+00:29.480 --> 00:32.919
+Emacs Buddy is an initiative to bring us together.
+
+00:32.920 --> 00:36.559
+And the reason is because Emacs is a limitless tool.
+
+00:36.560 --> 00:38.799
+So you can keep learning about it,
+
+00:38.800 --> 00:41.039
+you can keep expanding it,
+
+00:41.040 --> 00:44.799
+and also takes time to get up to speed.
+
+00:44.800 --> 00:48.679
+So you may actually extend Emacs
+
+00:48.680 --> 00:50.619
+or you may actually get introduced,
+
+00:50.620 --> 00:52.319
+start using Emacs,
+
+00:52.320 --> 00:56.359
+but you could fall into all the traps
+
+00:56.360 --> 01:00.879
+or all the wasted times that other users have already gone through.
+
+01:00.880 --> 01:04.599
+And so, since there are a lot of amazing people
+
+01:04.600 --> 01:07.359
+in the Emacs community,
+
+01:07.360 --> 01:10.119
+why do every time redo the same error?
+
+01:10.120 --> 01:12.159
+So let's bring us together.
+
+01:12.160 --> 01:17.479
+And it would be amazing to get a one-to-one relation.
+
+01:17.480 --> 01:21.559
+So I have somebody that actually knows what you want to do,
+
+01:21.560 --> 01:23.399
+what you want to achieve with Emacs,
+
+01:23.400 --> 01:27.439
+and supports you because they have done a similar path to yours.
+
+01:27.440 --> 01:32.719
+And so they can remove some of the obstacles for you.
+
+01:32.720 --> 01:34.479
+So what can you expect?
+
+01:34.480 --> 01:37.879
+The main thing is guidance on your Emacs journey,
+
+01:37.880 --> 01:41.279
+because the Emacs journey is infinite, it doesn't really end.
+
+01:41.280 --> 01:44.079
+But the farther you go,
+
+01:44.080 --> 01:46.799
+the more value you get from this amazing tool.
+
+01:46.800 --> 01:50.359
+And that helps you save time.
+
+01:50.360 --> 01:54.279
+And at the same time, you can meet like-minded people.
+
+01:54.280 --> 01:59.079
+And so you can learn about Emacs or about your context,
+
+01:59.080 --> 02:02.919
+if they are in, for example, if you are a physicist,
+
+02:02.920 --> 02:07.559
+they are physicists or they are interested in the field.
+
+02:07.560 --> 02:09.159
+You may not only learn about Emacs,
+
+02:09.160 --> 02:11.879
+but you can learn also something about the field.
+
+02:11.880 --> 02:17.039
+And anyway, the idea is that you can move forward together.
+
+02:17.040 --> 02:20.399
+Somebody asked, why not just mailing lists or Reddit?
+
+02:20.400 --> 02:24.639
+Well, the point is that mailing list is many people
+
+02:24.640 --> 02:28.519
+can help you solve one issue that you have.
+
+02:28.520 --> 02:31.559
+And that naturally doesn't become a discussion
+
+02:31.560 --> 02:35.279
+of where you are from, what are you trying to achieve,
+
+02:35.280 --> 02:39.999
+and where you want to move forward with using this editor
+
+02:40.000 --> 02:42.279
+or using this tool.
+
+02:42.280 --> 02:45.639
+Instead, here, we want something more personal,
+
+02:45.640 --> 02:48.639
+something more like you tell your story.
+
+02:48.640 --> 02:53.879
+And if I can help you achieve what you need,
+
+02:53.880 --> 02:58.959
+I am also interested in your story as a buddy.
+
+02:58.960 --> 03:03.359
+So given that, how do you get in touch with a buddy?
+
+03:03.360 --> 03:04.679
+Well, the thing is easy.
+
+03:04.680 --> 03:12.719
+Just ping me at this email, andrea-dev@hotmail.com.
+
+03:12.720 --> 03:15.399
+And I can put you in touch with one of the buddies
+
+03:15.400 --> 03:16.759
+that are available.
+
+03:16.760 --> 03:20.199
+Or you can contact them personally, directly,
+
+03:20.200 --> 03:26.279
+because on the web page, on the Emacs Buddy web page,
+
+03:26.280 --> 03:32.559
+there are links to their material or their websites.
+
+03:32.560 --> 03:35.599
+And sometimes you can find the contact yourself.
+
+03:35.600 --> 03:37.159
+Anyway, I am a facilitator.
+
+03:37.160 --> 03:41.919
+So if you contact me, I will find the contact for the person
+
+03:41.920 --> 03:43.079
+that you want to get in touch.
+
+03:43.080 --> 03:44.479
+You can also get in touch with me.
+
+03:44.480 --> 03:47.959
+I'm a buddy myself.
+
+03:47.960 --> 03:49.599
+How did it go so far?
+
+03:49.600 --> 03:52.479
+Well, from when I started the initiative,
+
+03:52.480 --> 03:55.039
+more or less we had 10 buddies.
+
+03:55.040 --> 03:58.719
+We had 10 buddies that are available to help you
+
+03:58.720 --> 04:01.519
+with your Emacs journey.
+
+04:01.520 --> 04:04.879
+And I buddyed myself, or I got in touch
+
+04:04.880 --> 04:10.679
+with people that wanted a buddy, about eight people.
+
+04:10.680 --> 04:14.759
+Each of these conversations was quite interesting.
+
+04:14.760 --> 04:19.639
+I decided to paraphrase one.
+
+04:19.640 --> 04:23.519
+I had this user that got in touch and said:
+
+04:23.520 --> 04:25.559
+"I used Emacs for 10 years.
+
+04:25.560 --> 04:27.279
+I'm curious about the initiative,
+
+04:27.280 --> 04:32.359
+and here is my GitHub that I started writing recently,
+
+04:32.360 --> 04:37.679
+Elisp projects", projects in Elisp to extend Emacs.
+
+04:37.680 --> 04:40.839
+I looked at their code.
+
+04:40.840 --> 04:43.879
+I suggested, "Oh, why don't you use dash?
+
+04:43.880 --> 04:45.299
+It's something that I'm familiar with.
+
+04:45.300 --> 04:49.439
+Maybe you may like it as well."
+
+04:49.440 --> 04:51.719
+And then I started asking, "Oh, what do you do with Emacs?
+
+04:51.720 --> 04:55.999
+Have you tried a note taking tool like Org Roam?"
+
+04:56.000 --> 04:58.039
+And then the conversation started.
+
+04:58.040 --> 05:00.199
+So "yeah, I tried Org Roam version one.
+
+05:00.200 --> 05:01.199
+I use my own thing.
+
+05:01.200 --> 05:02.879
+But what is it...
+
+05:02.880 --> 05:04.239
+I'm curious about version two.
+
+05:04.240 --> 05:05.839
+Did you use it?
+
+05:05.840 --> 05:07.079
+Do you know about Luhmann?"
+
+05:07.080 --> 00:05:09.861
+That is the inspiration of Org Roam
+
+00:05:09.862 --> 00:05:13.239
+and the backlinking and stuff.
+
+05:13.240 --> 05:15.479
+And then I started the conversation about that.
+
+05:15.480 --> 05:18.359
+And we discussed about functional programming.
+
+05:18.360 --> 05:23.279
+We discussed a bit about philosophy and went on.
+
+05:23.280 --> 05:29.159
+And then this conversation is not currently going.
+
+05:29.160 --> 05:32.759
+So we arrived to a point in which it sort of died out.
+
+05:32.760 --> 05:36.679
+But if I want or if they want, they can ping me back.
+
+05:36.680 --> 05:37.439
+I can ping them.
+
+05:37.440 --> 05:40.799
+So it's sort of a reference of this person exists
+
+05:40.800 --> 05:44.439
+and is an interesting person to chat with when I have something
+
+05:44.440 --> 05:48.359
+to say to them.
+
+05:48.360 --> 05:50.479
+And what if you want to be a buddy?
+
+05:50.480 --> 05:54.279
+Well, if you want to be a buddy, it's easy as well.
+
+05:54.280 --> 06:02.279
+So basically, just open a PR on the Emacs buddy repository.
+
+06:02.280 --> 06:05.279
+That is something that I am maintaining at the moment.
+
+06:05.280 --> 06:07.759
+Or simply send me the information.
+
+06:07.760 --> 06:09.999
+Somebody just sent me an email with the information.
+
+06:10.000 --> 06:14.719
+I have created the commit to make it public available.
+
+06:14.720 --> 06:18.559
+The information is just your name, a summary,
+
+06:18.560 --> 06:21.559
+what kind of user you are so that you can attract
+
+06:21.560 --> 06:28.039
+the right people to you, and a link to your material
+
+06:28.040 --> 06:31.959
+so that if they are curious about your summary or about you,
+
+06:31.960 --> 06:35.559
+they can actually go and check and even contact you directly.
+
+06:35.560 --> 06:40.559
+If they contact via me, I will know your email anyway
+
+06:40.560 --> 06:44.319
+from the PR you open.
+
+06:44.320 --> 06:45.759
+So that is all.
+
+06:45.760 --> 06:53.039
+There are ideas to maybe... if... this is basically
+
+06:53.040 --> 06:54.759
+an advertisement for this initiative
+
+06:54.760 --> 06:57.639
+so that we can get people that want to be helped
+
+06:57.640 --> 07:01.199
+or people that want to help.
+
+07:01.200 --> 07:03.599
+It's building up organically, so no rush
+
+07:03.600 --> 07:08.639
+to make this thing grow, escalate enormously.
+
+07:08.640 --> 07:12.479
+But for example, there are ideas to join this with the meetup
+
+07:12.480 --> 07:15.719
+talk that is being happening in the conference.
+
+07:15.720 --> 07:19.519
+So for example, if you find out something very interesting,
+
+07:19.520 --> 07:22.199
+you can bring the discussion that you have with your buddy
+
+07:22.200 --> 07:27.559
+into a meetup so that the group with which you speak is bigger.
+
+07:27.560 --> 07:28.919
+There are ideas like that.
+
+07:28.920 --> 07:33.119
+But first of all, just get in touch if you want to find
+
+07:33.120 --> 07:36.599
+like-minded people that want to help you with your Emacs
+
+07:36.600 --> 07:38.919
+journey or if you want to help others.
+
+07:38.920 --> 07:39.799
+Thank you very much.
+
+07:39.800 --> 07:59.520
+Enjoy the rest of the talks and chat to you soon.
diff --git a/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt
new file mode 100644
index 00000000..5ade9186
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--answers.vtt
@@ -0,0 +1,1004 @@
+WEBVTT
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.799
+Yes. Okay. Hi, everyone. We are back now, and I'm with Mats. Hi, Mats.
+
+00:00:06.800 --> 00:00:09.559
+Hi. How are you doing?
+
+00:00:09.560 --> 00:00:11.879
+I'm fine. How are you?
+
+00:00:11.880 --> 00:00:15.239
+I'm doing great as well. As the talk goes by,
+
+00:00:15.240 --> 00:00:20.119
+I keep warming up, and this is a very nice feeling. I look absolutely big
+
+00:00:20.120 --> 00:00:23.639
+with this down jacket, but it works, and I'm not going to question it.
+
+00:00:23.640 --> 00:00:27.039
+You do know, for the people coming every year to AMX Conf, that I do try
+
+00:00:27.040 --> 00:00:30.999
+to look dashing, but I also need to be warm, because this year,
+
+00:00:31.000 --> 00:00:33.359
+we are doing it in December and not in November.
+
+00:00:33.360 --> 00:00:36.639
+Okay. So, Mats,
+
+00:00:36.640 --> 00:00:40.599
+how about you start reading questions? I believe you've got one already.
+
+NOTE So with one line of code you can create custom hyperbutton types that are live in any Emacs buffer. Is that right?
+
+00:00:40.600 --> 00:00:45.719
+I got one question already. Yes. The question is, so with one line of code,
+
+00:00:45.720 --> 00:00:50.279
+you can create custom hyper button types that are live in an AMX buffer.
+
+00:00:50.280 --> 00:00:55.959
+Is that right? Yes. The short answer is yes.
+
+00:00:55.960 --> 00:01:01.599
+Maybe I should use the presentation and go into here.
+
+00:01:01.600 --> 00:01:09.759
+Let's see if I can find it.
+
+00:01:09.760 --> 00:01:17.839
+No. Read it wrong. So, here, the field macro allows you, in principle, to,
+
+00:01:17.840 --> 00:01:22.759
+in one line, define a hyper button, starting with the starting delimiter
+
+00:01:22.760 --> 00:01:25.519
+and an end delimiter, and then there's this mapping
+
+00:01:25.520 --> 00:01:36.319
+to whatever functionality should sort of come out of pressing that button.
+
+00:01:36.320 --> 00:01:39.199
+So, that was significantly more than just a yes. Thank you.
+
+00:01:39.200 --> 00:01:42.479
+I'll be glad we put your screen up so that you can answer this.
+
+00:01:42.480 --> 00:01:45.479
+So, people, just to remind you, so we do have the pad to answer the pad
+
+00:01:45.480 --> 00:01:49.039
+to ask you questions over there. We are, let me check
+
+00:01:49.040 --> 00:01:54.799
+how much time we have for this Q&A. We have until 15 of the next hour,
+
+00:01:54.800 --> 00:02:00.719
+which leaves about 20 minutes, but right now we only have one question.
+
+00:02:00.720 --> 00:02:07.519
+So, people on ISE, if you could place questions in the pad. Right.
+
+00:02:07.520 --> 00:02:10.679
+Sorry, I'm managing multiple things at the same time.
+
+00:02:10.680 --> 00:02:12.839
+Is there anything else you wanted to talk about? Anything else?
+
+00:02:12.840 --> 00:02:16.479
+Because, you know, to let people know,
+
+00:02:16.480 --> 00:02:19.719
+we do ask speakers to submit pre-recordings to us
+
+00:02:19.720 --> 00:02:21.639
+because it makes our life much easier on the day
+
+00:02:21.640 --> 00:02:25.519
+of the recording at EmacsConf, on the day of the conference at EmacsConf,
+
+00:02:25.520 --> 00:02:29.479
+because this way we can get away with not having
+
+00:02:29.480 --> 00:02:33.559
+to worry about live presentation catching fires and not, oh,
+
+00:02:33.560 --> 00:02:36.039
+I cannot share my screen, my microphone is not working.
+
+00:02:36.040 --> 00:02:40.439
+So, not only is everything working today inside the BBBO room,
+
+00:02:40.440 --> 00:02:44.159
+but Matt also sent a pre-recording. So, that's great.
+
+00:02:44.160 --> 00:02:50.079
+I got another question. Oh yes, go, but please, I'm down in the background.
+
+00:02:50.080 --> 00:02:53.319
+Let me jump over to the second question.
+
+NOTE Is there a good way to share common patterns for links other than the ones that you shared? shall those be PRs to your repository?
+
+00:02:53.320 --> 00:02:56.639
+The second question is, is there a good way to share common patterns
+
+00:02:56.640 --> 00:03:00.399
+for links other than the ones that you shared?
+
+00:03:00.400 --> 00:03:05.599
+Shall those be pull requests to your repository?
+
+00:03:05.600 --> 00:03:16.919
+Okay, let me think. Those should not be pull requests to our repository
+
+00:03:16.920 --> 00:03:19.999
+because these are your patterns, your links.
+
+00:03:20.000 --> 00:03:23.959
+That's something you would share like that I'm showing here.
+
+00:03:23.960 --> 00:03:27.239
+Could even be like you're sharing maybe the pattern, how this
+
+00:03:27.240 --> 00:03:31.599
+button looks, but maybe the implementation could in principle be different.
+
+00:03:31.600 --> 00:03:36.359
+So, the one you're sharing with might put their information
+
+00:03:36.360 --> 00:03:41.719
+in some other storage that might be accessed using the same information,
+
+00:03:41.720 --> 00:03:46.439
+or maybe just placed in some other part of the file system.
+
+00:03:46.440 --> 00:03:53.239
+So, the only good way to share it would be like to send it over email
+
+00:03:53.240 --> 00:03:57.519
+or some other message to someone else. Share it some way.
+
+00:03:57.520 --> 00:04:02.639
+First question. I like the link to evaluate calc expressions.
+
+00:04:02.640 --> 00:04:07.879
+Any way to get the outcome into the buffer and not just in the message window?
+
+00:04:07.880 --> 00:04:13.999
+I mean, that will be up to the sort of the implementation of the function
+
+00:04:14.000 --> 00:04:19.519
+that you would use in the bottom. I mean, the function that
+
+00:04:19.520 --> 00:04:25.999
+is evaluated could do anything really. So, that was just an example
+
+00:04:26.000 --> 00:04:30.519
+to show that you could, you don't have to be a link that you actually go
+
+00:04:30.520 --> 00:04:34.399
+to some new place. It can just be some computation or whatever. So,
+
+00:04:34.400 --> 00:04:39.519
+that's just trying to show that you shouldn't be limiting yourself
+
+00:04:39.520 --> 00:04:44.399
+to just thinking about links. It can be computing anything.
+
+00:04:44.400 --> 00:04:49.959
+It's really the thing about Elisp really. It's just when people ask you,
+
+00:04:49.960 --> 00:04:53.439
+you know, when they come from outside of Emacs and they ask you,
+
+00:04:53.440 --> 00:04:56.759
+can your function do this? The answer is more often than not, yes.
+
+00:04:56.760 --> 00:04:59.159
+Can you write it in Elisp? Yeah, I might need
+
+00:04:59.160 --> 00:05:01.839
+to look at the documentation a little bit, but I'll be able to do it.
+
+00:05:01.840 --> 00:05:06.239
+And, you know, calc does have the ability to paste the result
+
+00:05:06.240 --> 00:05:10.879
+when you're not calc used as a library, but calc the node.
+
+00:05:10.880 --> 00:05:13.319
+When you type something in it and you press Y,
+
+00:05:13.320 --> 00:05:17.119
+it will paste it into the buffer, which means that there is the ability
+
+00:05:17.120 --> 00:05:19.799
+to communicate between calc and the buffer you're currently in. So,
+
+00:05:19.800 --> 00:05:24.439
+it's probably just a matter of doing Ctrl-H-K-Y inside the calc mode,
+
+00:05:24.440 --> 00:05:27.719
+checking which function is running, and just putting this at the end
+
+00:05:27.720 --> 00:05:29.319
+of the button, and voila, there you go.
+
+00:05:29.320 --> 00:05:34.079
+So, Matt, I don't think you have any questions at the moment.
+
+00:05:34.080 --> 00:05:37.559
+We're going to leave some time for people to gather more questions,
+
+00:05:37.560 --> 00:05:41.839
+but I think, if I'm not mistaken, I might be wrong with the,
+
+00:05:41.840 --> 00:05:42.919
+we changed the schedule a little bit,
+
+00:05:42.920 --> 00:05:46.719
+but you're the first Hyperbole talk for today,
+
+00:05:46.720 --> 00:05:52.319
+and as such, you are introducing people to the concept of buttons,
+
+00:05:52.320 --> 00:05:56.719
+which is very instrumental to Hyperbole. Hyperbole?
+
+00:05:56.720 --> 00:06:00.639
+I'm going to go with Hyperbole, actually.
+
+00:06:00.680 --> 00:06:03.919
+So, could you maybe, I know it's a big task,
+
+00:06:03.920 --> 00:06:07.639
+and you've also touched upon what Hyperbole was, but a lot
+
+00:06:07.640 --> 00:06:10.599
+of people always ask, you know, Hyperbole, Org Mode,
+
+00:06:10.600 --> 00:06:13.559
+I see both of them sometimes crop up at the top of the subreddit,
+
+00:06:13.560 --> 00:06:16.519
+and I'm not exactly sure which one is doing which.
+
+00:06:16.520 --> 00:06:22.239
+You're using the term links, and this speaks to me as someone who works
+
+00:06:22.240 --> 00:06:24.359
+in Zettelkasten Methods, so maybe
+
+00:06:24.360 --> 00:06:27.479
+could you, I'm asking you with a very difficult question now,
+
+NOTE Could you differentiate Hyperbole and Org?
+
+00:06:27.480 --> 00:06:32.359
+could you differentiate maybe Hyperbole and Org, or try your best,
+
+00:06:32.360 --> 00:06:38.119
+knowing that we'll have more Hyperbole talks later in the conference?
+
+00:06:38.120 --> 00:06:45.959
+Well, I will not try to get into that sort of wormhole,
+
+00:06:45.960 --> 00:06:56.919
+because I don't think they should be compared, they're more companions, so yeah.
+
+00:06:56.920 --> 00:07:00.479
+It's the best way you could have answered this question, and you know,
+
+00:07:00.480 --> 00:07:04.799
+I'm going to remove you from this tricky situation in which I put you,
+
+00:07:04.800 --> 00:07:08.999
+so yes, they are complementary tool, they do some of the same thing,
+
+00:07:09.000 --> 00:07:11.639
+they do have different philosophy, and at the end,
+
+00:07:11.640 --> 00:07:13.079
+if they allow you to take notes,
+
+00:07:13.080 --> 00:07:15.999
+if they allow you to relate notes in different places,
+
+00:07:16.000 --> 00:07:19.239
+you know, it's a good note-taking system. Let's put it at this,
+
+00:07:19.240 --> 00:07:23.519
+let's not concern ourselves with comparison, at least Org, you know,
+
+00:07:23.520 --> 00:07:26.559
+the best thing about comparing is cross-pollination,
+
+00:07:26.560 --> 00:07:29.639
+which is made all the more easier with something like Emacs,
+
+00:07:29.640 --> 00:07:33.399
+because ideas from one mode can be taken and applied in another mode.
+
+00:07:33.400 --> 00:07:36.799
+Now, maybe not straightforwardly between Hyperbole and Org,
+
+00:07:36.800 --> 00:07:39.439
+but the idea can be translated at the very least.
+
+00:07:39.440 --> 00:07:42.959
+You did have a question, I'll answer this one very quick,
+
+00:07:42.960 --> 00:07:44.639
+because it's a quick one.
+
+00:07:44.640 --> 00:07:46.919
+Yeah, yes, you want to take it?
+
+00:07:46.920 --> 00:07:51.079
+I just want to quickly follow up on what you said there,
+
+00:07:51.080 --> 00:07:56.399
+that, ah, now I lost, I lost it, maybe come back,
+
+00:07:56.400 --> 00:07:59.039
+so let's jump into the question instead,
+
+00:07:59.040 --> 00:08:08.239
+because I got an answer, so thank you for everybody who wrote the answer,
+
+00:08:08.240 --> 00:08:13.359
+great, and the next question was, this talk is really straightforward,
+
+00:08:13.360 --> 00:08:16.119
+so that's probably why there aren't many questions,
+
+00:08:16.120 --> 00:08:19.959
+maybe Mats could talk about Hyperbole in general, while he was, aha, okay,
+
+00:08:19.960 --> 00:08:24.279
+that's maybe what you were trying to do here, so maybe I should,
+
+00:08:24.280 --> 00:08:27.719
+and the last one is, second question, last question is,
+
+NOTE How did you present the right buffer with shortcuts at the right of your buffer?
+
+00:08:27.720 --> 00:08:30.719
+how did you present the lossage bar at the right of your buffer?
+
+00:08:30.720 --> 00:08:36.639
+A lot of people are wondering, the lossage bar, oh, well, you have
+
+00:08:36.640 --> 00:08:41.399
+to elaborate on what the lossage bar is. I can, although
+
+00:08:41.400 --> 00:08:45.199
+I do have a slight problem, my daily backup is running,
+
+00:08:45.200 --> 00:08:48.639
+so if my voice is crackly, I'm sorry, I can't do anything about it,
+
+00:08:48.640 --> 00:08:49.279
+can you hear me?
+
+00:08:49.280 --> 00:08:51.719
+Yeah, you're shopping up,
+
+00:08:51.720 --> 00:08:57.319
+but I can understand what you're saying, so that's great.
+
+00:08:57.320 --> 00:09:01.719
+So lossage is the stuff that you have on the right side of your screen,
+
+00:09:01.720 --> 00:09:05.399
+it's the commands that you're running and the key binding that you're using
+
+00:09:05.400 --> 00:09:08.719
+to run them, and yes, this is a mode that we ask,
+
+00:09:08.720 --> 00:09:12.159
+or that we provide Emacs on speakers with,
+
+00:09:12.160 --> 00:09:16.599
+and it's called interactive log mode, which is available on GitHub,
+
+00:09:16.600 --> 00:09:21.079
+which will allow you to have this pretty print on the right side of your screen,
+
+00:09:21.080 --> 00:09:22.279
+or whatever really, it's just a buffer.
+
+00:09:22.280 --> 00:09:30.159
+Yeah, and I haven't used it before doing this presentation, so it was a news
+
+00:09:30.160 --> 00:09:38.559
+to me, so I'm very new to using it, but it works. Well, if you move around,
+
+00:09:38.560 --> 00:09:40.199
+you see that, yeah.
+
+00:09:40.200 --> 00:09:46.519
+So for the people, we did open up the BBB chat room now,
+
+00:09:46.520 --> 00:09:50.199
+which means that again, if you go to the talk page for Matz,
+
+00:09:50.200 --> 00:09:56.839
+where this was Button, you will be able to join the BBB by clicking on the link,
+
+00:09:56.840 --> 00:09:59.199
+and you'll be able to ask questions right away to Matz.
+
+00:09:59.200 --> 00:10:03.439
+We've started a nice question about org hyperbole and stuff like this,
+
+00:10:03.440 --> 00:10:06.559
+but maybe we should, yes, I'm trying to save you here,
+
+00:10:06.560 --> 00:10:09.679
+maybe we should re-center on the buttons and what they can do,
+
+00:10:09.680 --> 00:10:13.679
+especially what we talked about Elisp, allowing buttons to be whatever,
+
+00:10:13.680 --> 00:10:17.839
+and since Matz, you have your Emacs available,
+
+00:10:17.840 --> 00:10:21.279
+it might be a good opportunity for you to show some of the buttons
+
+00:10:21.280 --> 00:10:24.119
+that you're using as well, maybe some different ones that you've presented.
+
+00:10:24.120 --> 00:10:27.199
+So if people want to join, that would be a great opportunity
+
+00:10:27.200 --> 00:10:32.359
+to ask your questions. We have about 20 more minutes of Q&A,
+
+00:10:32.360 --> 00:10:36.199
+and if we don't have any more people showing up
+
+00:10:36.200 --> 00:10:40.319
+and no more questions on the pad, we can also go on a little break,
+
+00:10:40.320 --> 00:10:44.719
+and I would appreciate this, but I'm also happy to stay.
+
+00:10:44.720 --> 00:10:52.479
+Yeah, I understand the interest, but there are more talks coming up
+
+00:10:52.480 --> 00:10:58.199
+in related to hyperbole, and I haven't prepared any cool stuff.
+
+NOTE Working with different support systems
+
+00:10:58.200 --> 00:11:02.639
+What I could mention that I think is cool, I will not demo that,
+
+00:11:02.640 --> 00:11:09.919
+but I work as a programmer, and then I have different support systems,
+
+00:11:09.920 --> 00:11:16.719
+which have these strings, identifiers that may be linked
+
+00:11:16.720 --> 00:11:23.799
+to different information, like a ticketing system, for instance,
+
+00:11:23.800 --> 00:11:29.199
+that would do bugs. It could be like a novel text string
+
+00:11:29.200 --> 00:11:38.639
+that identify your bug or your ticket, and it's an internal tool,
+
+00:11:38.640 --> 00:11:42.799
+so no one else can support that, but by using hyperbole,
+
+00:11:42.800 --> 00:11:46.839
+I can write my own interpretation of that string
+
+00:11:46.840 --> 00:11:49.999
+and get that to work as a button, so I can easily
+
+00:11:50.000 --> 00:11:56.279
+from the code or from some notes link directly into that ticketing system.
+
+00:11:56.280 --> 00:12:03.919
+So that's the point I'm trying to make with this talk is
+
+00:12:03.920 --> 00:12:07.839
+that it's useful for setting up your own environment
+
+00:12:07.840 --> 00:12:11.719
+that only you really know about and how you want to navigate
+
+00:12:11.720 --> 00:12:20.599
+with your information, and it's not about trying to force some type
+
+00:12:20.600 --> 00:12:25.719
+of work stream upon anybody. It's more like giving you the opportunity
+
+00:12:25.720 --> 00:12:28.319
+to streamline your own workflow instead.
+
+00:12:28.320 --> 00:12:33.479
+I think the remaining talks about hyperbole will be more focused
+
+00:12:33.480 --> 00:12:38.199
+on all the features. It's a multi-functional package
+
+00:12:38.200 --> 00:12:40.119
+with a lot of different stuff in it,
+
+00:12:40.120 --> 00:12:46.999
+so I could not give justice to it in just doing some quick demos.
+
+00:12:47.000 --> 00:12:49.119
+It won't show all the things you can do.
+
+00:12:49.120 --> 00:12:52.639
+Yeah, but I'm going to say for someone saying
+
+00:12:52.640 --> 00:12:54.839
+that you couldn't do justice to the topic,
+
+00:12:54.840 --> 00:12:58.079
+you've done a very fine job, so do not worry about this.
+
+00:12:58.080 --> 00:13:01.759
+It's funny, I was listening to you describe this, the
+
+00:13:01.760 --> 00:13:03.759
+buttons really, but when
+
+00:13:03.760 --> 00:13:06.839
+you think about it, you could have forgotten about the buttons
+
+00:13:06.840 --> 00:13:11.239
+and really remembered about Emacs and would make as much sense as well,
+
+00:13:11.240 --> 00:13:14.799
+because Emacs as a whole, the Elisp stuff behind it allows you
+
+00:13:14.800 --> 00:13:17.039
+to do whatever interface you want very easily,
+
+00:13:17.040 --> 00:13:23.759
+and the buttons really enshrines the interface type of things really,
+
+00:13:23.760 --> 00:13:26.399
+because you just have a button that is running code.
+
+00:13:26.400 --> 00:13:27.799
+It's no longer, oh, you need to go to
+
+00:13:27.800 --> 00:13:30.079
+the end of the parenthesis, the end of the sex,
+
+00:13:30.080 --> 00:13:32.879
+and you need to evaluate it. There's something more interactive about it,
+
+00:13:32.880 --> 00:13:35.879
+which feels closer to your user interface as a result to this,
+
+00:13:35.880 --> 00:13:37.959
+but I've already blabbered enough.
+
+00:13:37.960 --> 00:13:40.639
+We do have someone with a microphone in the VBB chat,
+
+00:13:40.640 --> 00:13:43.399
+so does this person want to unmute themselves
+
+00:13:43.400 --> 00:13:44.279
+and ask a question, maybe?
+
+00:13:44.280 --> 00:13:52.879
+I think I have some very knowledgeable person about hyperbole in the chat.
+
+00:13:52.880 --> 00:13:57.639
+Yes, I didn't want to spoil it, but I'm not sure if they're going
+
+00:13:57.640 --> 00:14:00.759
+to unmute themselves, so I don't want to put too much pressure on them.
+
+00:14:00.760 --> 00:14:03.519
+Can you guys hear me? We can, yes.
+
+00:14:03.520 --> 00:14:09.879
+Hi, Bob. Hi, long time fan of hyperbole.
+
+00:14:09.880 --> 00:14:12.919
+You might want to cue people in on a joke here,
+
+00:14:12.920 --> 00:14:14.599
+because I'm not sure if anyone knows who you are.
+
+NOTE Bob Weiner
+
+00:14:14.600 --> 00:14:19.879
+I wrote hyperbole, and Matt's my co-maintainer on it,
+
+00:14:19.880 --> 00:14:23.159
+so really exciting to have the first talk here.
+
+00:14:23.160 --> 00:14:26.879
+I think I just wanted to mention two things.
+
+00:14:26.880 --> 00:14:28.879
+Maybe you could show a little key series,
+
+00:14:28.880 --> 00:14:33.879
+just type one out dynamically and show how simple that is,
+
+00:14:33.880 --> 00:14:39.639
+and then talk about the UKIPA daily journal,
+
+00:14:39.640 --> 00:14:45.479
+right? Time-stamped journal that was originally org mode,
+
+00:14:45.480 --> 00:14:49.479
+and I think you're now using Hyperbole's K-outliner,
+
+00:14:49.480 --> 00:14:56.319
+so maybe mention doing that. Okay.
+
+00:14:56.320 --> 00:14:59.959
+Something that's more than one key sequence, please.
+
+00:14:59.960 --> 00:15:09.199
+Do a couple operations that you do a lot of or that are interesting,
+
+00:15:09.200 --> 00:15:10.839
+all in one.
+
+00:15:10.840 --> 00:15:15.719
+So the key series is like a keyboard macro,
+
+00:15:15.720 --> 00:15:20.879
+so it's not limited to one key sequence,
+
+00:15:20.880 --> 00:15:27.199
+but any series of key sequences can be strung together
+
+00:15:27.200 --> 00:15:28.879
+just like that with nothing else,
+
+00:15:28.880 --> 00:15:35.399
+and then you activate it the same way as any other button, right?
+
+00:15:35.400 --> 00:15:38.079
+Yes, but you're putting me on the spot here,
+
+00:15:38.080 --> 00:15:41.199
+because now I have to remember, actually, how to write these things.
+
+00:15:41.200 --> 00:15:46.079
+You just write it the way you would type it.
+
+00:15:46.080 --> 00:15:49.479
+Yeah, I see it.
+
+00:15:49.480 --> 00:16:00.079
+Okay, so let's see. So the key series is between these braces and...
+
+00:16:00.080 --> 00:16:05.159
+And you could leave out the quote marks if you don't...
+
+00:16:05.160 --> 00:16:07.639
+Maybe I can skip that as well.
+
+00:16:07.640 --> 00:16:09.559
+So here's the key series.
+
+00:16:09.560 --> 00:16:10.919
+Let's see what's happening.
+
+00:16:10.920 --> 00:16:12.999
+Do I go to the 10th folder or not?
+
+00:16:13.000 --> 00:16:16.119
+Boom, I got there. Yeah, it worked.
+
+00:16:16.120 --> 00:16:23.159
+Bob, great. So you can name them and then reuse them,
+
+00:16:23.160 --> 00:16:29.119
+and so it's sort of like you've got this toolkit that you can embed
+
+00:16:29.120 --> 00:16:31.919
+in all these different modes that you have in Emacs,
+
+00:16:31.920 --> 00:16:34.639
+and you just carry it with you.
+
+00:16:34.640 --> 00:16:38.759
+It's not like a whole mode unto itself that you always have to use.
+
+00:16:38.760 --> 00:16:46.599
+Yeah, so in this example here with the field, you can,
+
+00:16:46.600 --> 00:16:52.119
+instead of having like this path string here,
+
+00:16:52.120 --> 00:16:54.359
+you can have a key series as well.
+
+00:16:54.360 --> 00:17:01.399
+But to the other point, also, Elisp is available,
+
+00:17:01.400 --> 00:17:02.959
+but this is even more available
+
+00:17:02.960 --> 00:17:05.959
+because you don't even have to code using Elisp.
+
+00:17:05.960 --> 00:17:09.079
+So that's the point also with this, the fill and the file macros.
+
+00:17:09.080 --> 00:17:11.879
+You should make it even simpler.
+
+00:17:11.880 --> 00:17:15.519
+And if you just know how to type some command,
+
+00:17:15.520 --> 00:17:18.679
+you can use the key series together with this
+
+00:17:18.680 --> 00:17:21.359
+to get some functionality out of this.
+
+00:17:21.360 --> 00:17:26.399
+I think one of the things we've taken to saying about Hyperbole
+
+00:17:26.400 --> 00:17:31.239
+is it's kind of the lightest hypertext markup
+
+00:17:31.240 --> 00:17:35.159
+that you can have, as you saw there, right?
+
+00:17:35.160 --> 00:17:37.519
+I mean, there were just braces, and all of a sudden,
+
+00:17:37.520 --> 00:17:40.999
+it's a live hyper button. So we've tried to strip away
+
+00:17:41.000 --> 00:17:44.879
+having to write stuff like HTML or even all the drawers
+
+00:17:44.880 --> 00:17:47.519
+and stuff like that, and we've tried to make it so that you know,
+
+00:17:47.520 --> 00:17:51.439
+even all the like drawers and the property markup in org mode,
+
+00:17:51.440 --> 00:17:57.679
+and just provide very, very simple sort of syntactical things similar
+
+00:17:57.680 --> 00:18:01.679
+to what Elisp does, so that you can get a lot of power
+
+00:18:01.680 --> 00:18:07.999
+and put buttons everywhere, but not have to recognize a lot of syntax
+
+00:18:08.000 --> 00:18:11.639
+or use a whole bunch of keys on your buttons.
+
+00:18:11.640 --> 00:18:16.039
+It's pretty interesting,
+
+00:18:16.040 --> 00:18:16.679
+by the way.
+
+00:18:16.680 --> 00:18:17.959
+I'm sorry I have to do this,
+
+00:18:17.960 --> 00:18:20.519
+but we only have about five more minutes in the Q&A before we need
+
+00:18:20.520 --> 00:18:24.039
+to move on to the next talk. But don't worry, you've had a little test
+
+00:18:24.040 --> 00:18:27.079
+of Hyperbole right there, and you'll have more over the weekend.
+
+00:18:27.080 --> 00:18:30.319
+We've had a lot of Hyperbole talk this year, which is amazing.
+
+00:18:30.320 --> 00:18:33.559
+You know, we usually have a lot of talk about org, but this year
+
+00:18:33.560 --> 00:18:37.479
+is truly the one where we also have a similar amount of Hyperbole talk,
+
+00:18:37.480 --> 00:18:42.399
+which is amazing to see. Obviously, I am more of an org guy,
+
+00:18:42.400 --> 00:18:45.679
+but I see so many parallels between the two, so many bridges
+
+00:18:45.680 --> 00:18:50.319
+that could be built as well, and it's amazing to see the amount of passion
+
+00:18:50.320 --> 00:18:53.439
+that goes into this. Usually I deal with people who are passionate about org,
+
+00:18:53.440 --> 00:18:56.719
+but to see that there's a similar amount of passion on the Hyperbole side
+
+00:18:56.720 --> 00:18:58.279
+of things is truly amazing to me.
+
+00:18:58.280 --> 00:19:04.799
+I think we had one more question in the pad, if you can take it, Matt.
+
+NOTE Do the links/buttons created in hyperbole (like that one with the url) get exported on org-mode files too? (like when exported to html)
+
+00:19:04.800 --> 00:19:10.639
+Yeah, the last here is, does the links buttons create in Hyperbole,
+
+00:19:10.640 --> 00:19:16.159
+like the one with the URL get exported on org mode files too,
+
+00:19:16.160 --> 00:19:18.999
+like when exported to HTML?
+
+00:19:19.000 --> 00:19:21.039
+Oh, tricky question.
+
+00:19:21.040 --> 00:19:31.519
+I mean, these implicit buttons, they are just like the patterns.
+
+00:19:31.520 --> 00:19:35.319
+So the pattern will of course be exported to HTML,
+
+00:19:35.320 --> 00:19:37.439
+but you will not be able maybe
+
+00:19:37.440 --> 00:19:43.519
+to do something there unless you're watching the HTML within Emacs,
+
+00:19:43.520 --> 00:19:50.199
+so the sort of Hyperbole machinery would be available, if that makes sense.
+
+00:19:50.200 --> 00:19:58.359
+I mean, yeah, it's possible. It depends what the encoding is,
+
+00:19:58.360 --> 00:20:03.999
+what the encoding is, but we do have an outliner mode, the K outliner
+
+00:20:04.000 --> 00:20:10.439
+in Hyperbole as well, and that has a single command export to HTML.
+
+00:20:10.440 --> 00:20:13.879
+So if you've embedded URLs in there,
+
+00:20:13.880 --> 00:20:19.519
+you would see them just like if you embedded them in org mode,
+
+00:20:19.520 --> 00:20:25.559
+and potentially the org exporter, if you just write a raw URL,
+
+00:20:25.560 --> 00:20:30.119
+will also encode it for you when you export it.
+
+00:20:30.120 --> 00:20:35.039
+There's other Hyperbole buttons in there. Yeah, but the functionality that
+
+00:20:35.040 --> 00:20:38.159
+is by clicking on that button will not be exported.
+
+00:20:38.160 --> 00:20:44.079
+Well, it's like you can try printing the button, I'm not sure. No amount
+
+00:20:44.080 --> 00:20:46.479
+of clicking on it is actually going to trigger an action.
+
+00:20:46.480 --> 00:20:51.639
+I might be wrong though. Sorry, I mean printing on paper,
+
+00:20:51.640 --> 00:20:55.799
+it's a very confusing terminology that we're using right there, not printing
+
+00:20:55.800 --> 00:20:56.759
+in a terminal.
+
+00:20:56.760 --> 00:21:02.359
+One cool thing if you use the Hyperbole export to HTML is
+
+00:21:02.360 --> 00:21:07.519
+that you can expand and collapse your trees in the HTML.
+
+00:21:07.520 --> 00:21:10.439
+I don't think you can do that with the org export right now.
+
+00:21:10.440 --> 00:21:15.999
+But Bob, you're going to show something about that tomorrow, right?
+
+00:21:16.000 --> 00:21:21.319
+I don't think it's in this presentation because I'm- Oh, it's not
+
+00:21:21.320 --> 00:21:25.079
+in the presentation, okay. On the org side of the house this time,
+
+00:21:25.080 --> 00:21:32.879
+but it'll be in a different one about Hyperbole some other time. All right,
+
+00:21:32.880 --> 00:21:36.199
+so we have about two minutes until we need to go to the next talk,
+
+00:21:36.200 --> 00:21:38.479
+but thank you so much, Matz, and thank you so much, Bob,
+
+00:21:38.480 --> 00:21:41.839
+also for showing up and giving us a taste of what is probably going
+
+00:21:41.840 --> 00:21:44.759
+to follow up tomorrow. I can't remember, I think your talk is
+
+00:21:44.760 --> 00:21:51.599
+in the afternoon, right, Bob? Correct, about 1 p.m. EST. Yeah, so
+
+00:21:51.600 --> 00:21:56.959
+in about 22 hours, 23 hours. I'm trying my best to give you times
+
+00:21:56.960 --> 00:21:59.119
+which are time zone independence,
+
+00:21:59.120 --> 00:22:01.839
+so I'm sorry if I'm missing the mark a little bit,
+
+00:22:01.840 --> 00:22:04.679
+but hopefully this would be useful for many people. But otherwise,
+
+00:22:04.680 --> 00:22:07.719
+just check the schedule and you'll be able to get everything. All right, well,
+
+00:22:07.720 --> 00:22:09.999
+thank you so much, Matz, for answering so many questions
+
+00:22:10.000 --> 00:22:12.839
+and for your presentation as well. I feel like it was good
+
+00:22:12.840 --> 00:22:16.599
+to have your presentation before Bob's one tomorrow,
+
+00:22:16.600 --> 00:22:22.039
+because focusing on the one aspect of Hyperbole, the buttons, and linking it
+
+00:22:22.040 --> 00:22:26.119
+to Elisp, linking it to interactivity, linking it to UI, I think is going
+
+00:22:26.120 --> 00:22:29.239
+to prime people to then understand fully what Hyperbole,
+
+00:22:29.240 --> 00:22:34.319
+or what are the capabilities of Hyperbole, beyond this, or inspired by this.
+
+00:22:34.320 --> 00:22:37.199
+So thank you so much. Thanks, Matz. Thank you.
+
+00:22:37.200 --> 00:22:38.599
+Great.
+
+00:22:38.600 --> 00:22:42.519
+All right, and we are going live with the next talk in about 30 seconds.
+
+00:22:42.520 --> 00:22:45.519
+I think we're going to close the BBB room,
+
+00:22:45.520 --> 00:22:49.759
+because nobody has showed up otherwise. So I will see you both later.
+
+00:22:49.760 --> 00:22:50.599
+Bye-bye.
+
+00:22:50.600 --> 00:22:54.000
+Bye-bye.
diff --git a/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt
new file mode 100644
index 00000000..53204574
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main--chapters.vtt
@@ -0,0 +1,49 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:01:01.760
+Introduction
+
+26
+00:01:01.760 --> 00:01:29.920
+Implicit buttons
+
+37
+00:01:29.920 --> 00:02:37.080
+Filenames
+
+57
+00:02:37.080 --> 00:03:10.120
+Other built-in implicit buttons
+
+68
+00:03:10.120 --> 00:04:13.400
+Creating new implicit button types with defib, defil, and defal
+
+94
+00:04:13.400 --> 00:04:44.480
+Personal data
+
+106
+00:04:44.480 --> 00:07:10.720
+Defining an implicit button with defil
+
+154
+00:07:10.720 --> 00:07:54.520
+Types of link expressions
+
+171
+00:07:54.520 --> 00:08:32.200
+Another button example
+
+184
+00:08:32.200 --> 00:08:57.160
+Action buttons
+
+191
+00:08:57.160 --> 00:09:29.760
+The defal macro
+
+202
+00:09:29.760 --> 00:10:32.000
+Conclusion
diff --git a/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt
new file mode 100644
index 00000000..e7e58879
--- /dev/null
+++ b/2022/captions/emacsconf-2022-buttons--linking-personal-info-with-hyperbole-implicit-buttons--mats-lidell--main.vtt
@@ -0,0 +1,890 @@
+WEBVTT captioned by sachac
+
+1
+00:00:00.000 --> 00:00:06.280
+Hi everyone! I'm Mats Liddell.
+
+2
+00:00:06.280 --> 00:00:07.320
+In this talk, I will show
+
+3
+00:00:07.320 --> 00:00:09.040
+how you can link to personal data
+
+4
+00:00:09.040 --> 00:00:13.960
+using Hyperbole's support for implicit button types.
+
+5
+00:00:13.960 --> 00:00:16.040
+Before starting, a few words about me.
+
+6
+00:00:16.040 --> 00:00:18.000
+I work as a software engineer,
+
+7
+00:00:18.000 --> 00:00:19.200
+and in my spare time
+
+8
+00:00:19.200 --> 00:00:21.280
+I'm co-maintaining the Hyperbole package
+
+9
+00:00:21.280 --> 00:00:24.360
+together with the package author Bob Weiner.
+
+10
+00:00:24.360 --> 00:00:27.240
+Hyperbole dates back to 1993,
+
+11
+00:00:27.240 --> 00:00:29.680
+and have had some inactive years in the past,
+
+12
+00:00:29.680 --> 00:00:31.680
+but work is now active again.
+
+13
+00:00:31.680 --> 00:00:33.080
+The package is available
+
+14
+00:00:33.080 --> 00:00:36.160
+through the GNU ELPA package archive.
+
+15
+00:00:36.160 --> 00:00:37.960
+The talk will focus on
+
+16
+00:00:37.960 --> 00:00:39.600
+creation of implicit button types.
+
+17
+00:00:39.600 --> 00:00:41.480
+For more info on Hyperbole,
+
+18
+00:00:41.480 --> 00:00:43.120
+listen to other presentations
+
+19
+00:00:43.120 --> 00:00:46.360
+and check out the package documentation.
+
+20
+00:00:46.360 --> 00:00:50.000
+What I want you to take with you from this talk is
+
+21
+00:00:50.000 --> 00:00:51.640
+that the implicit button types
+
+22
+00:00:51.640 --> 00:00:54.440
+can make patterns in your files into buttons;
+
+23
+00:00:54.440 --> 00:00:56.600
+and that new implicit button types
+
+24
+00:00:56.600 --> 00:00:58.480
+can quickly be created by using
+
+25
+00:00:58.480 --> 00:01:01.760
+the `defil` and the `defal` macros.
+
+26
+00:01:01.760 --> 00:01:05.160
+So what is an implicit button type?
+
+27
+00:01:05.160 --> 00:01:06.800
+I think of it as a text pattern
+
+28
+00:01:06.800 --> 00:01:08.920
+that has some extended meaning.
+
+29
+00:01:08.920 --> 00:01:10.760
+When you see the pattern in the text,
+
+30
+00:01:10.760 --> 00:01:12.800
+you can think of it as a button type.
+
+31
+00:01:12.800 --> 00:01:13.880
+When you press the button,
+
+32
+00:01:13.880 --> 00:01:16.880
+something related to that meaning happens.
+
+33
+00:01:16.880 --> 00:01:19.000
+It can be jumping to some place,
+
+34
+00:01:19.000 --> 00:01:22.440
+opening an external tool, doing some computation.
+
+35
+00:01:22.440 --> 00:01:24.160
+So there can be some action
+
+36
+00:01:24.160 --> 00:01:29.920
+associated with the pattern.
+
+37
+00:01:29.920 --> 00:01:33.320
+To make it clear, let's look at some examples.
+
+38
+00:01:33.320 --> 00:01:36.080
+Let's start with something that is maybe so obvious
+
+39
+00:01:36.080 --> 00:01:39.600
+that you don't even think of it as a pattern: a file name.
+
+40
+00:01:39.600 --> 00:01:41.360
+When you see such a string in text,
+
+41
+00:01:41.360 --> 00:01:45.360
+you will naturally associate it with a file on disk,
+
+42
+00:01:45.360 --> 00:01:46.720
+and if you would click on it,
+
+43
+00:01:46.720 --> 00:01:52.680
+you would probably expect that file to open.
+
+44
+00:01:52.680 --> 00:01:55.120
+In the first sentence on the slide,
+
+45
+00:01:55.120 --> 00:01:56.840
+you might recognize the file name
+
+46
+00:01:56.840 --> 00:02:01.760
+for the bash initialization file, ~/.bashrc.
+
+47
+00:02:01.760 --> 00:02:03.840
+Hyperbole comes with built-in support
+
+48
+00:02:03.840 --> 00:02:06.520
+for recognizing files and directory path names
+
+49
+00:02:06.520 --> 00:02:08.680
+as implicit button types in text.
+
+50
+00:02:08.680 --> 00:02:11.760
+For Hyperbole to take action on the button type,
+
+51
+00:02:11.760 --> 00:02:13.440
+you move the cursor within the button
+
+52
+00:02:13.440 --> 00:02:16.320
+and press M-RET or use a mouse click.
+
+53
+00:02:16.320 --> 00:02:22.360
+So let's try that.
+
+54
+00:02:22.360 --> 00:02:27.720
+Similar for the path, /usr/local in the next sentence.
+
+55
+00:02:27.720 --> 00:02:29.520
+That will open the corresponding
+
+56
+00:02:29.520 --> 00:02:37.080
+directory using dired-mode.
+
+57
+00:02:37.080 --> 00:02:39.760
+Other examples of built-in implicit button types
+
+58
+00:02:39.760 --> 00:02:43.720
+that Hyperbole recognizes are email addresses,
+
+59
+00:02:43.720 --> 00:02:47.320
+web addresses, requests for comment documents
+
+60
+00:02:47.320 --> 00:02:50.120
+in the form of RFC followed by a number,
+
+61
+00:02:50.120 --> 00:02:53.040
+GNU debbugs issues, plus many more.
+
+62
+00:02:53.040 --> 00:02:55.360
+These are some examples
+
+63
+00:02:55.360 --> 00:02:58.080
+of implicit button types with built-in support.
+
+64
+00:02:58.080 --> 00:02:59.920
+I list them here to give you an idea
+
+65
+00:02:59.920 --> 00:03:02.480
+how the text pattern in itself is enough
+
+66
+00:03:02.480 --> 00:03:03.960
+for the system to recognize it
+
+67
+00:03:03.960 --> 00:03:10.120
+as something actionable.
+
+68
+00:03:10.120 --> 00:03:12.480
+So as shown, Hyperbole has built-in support
+
+69
+00:03:12.480 --> 00:03:14.040
+for implicit buttons.
+
+70
+00:03:14.040 --> 00:03:16.120
+There's only one problem here.
+
+71
+00:03:16.120 --> 00:03:17.920
+The behavior is predefined.
+
+72
+00:03:17.920 --> 00:03:20.240
+There is of course a trade off.
+
+73
+00:03:20.240 --> 00:03:21.560
+It is convenient to get
+
+74
+00:03:21.560 --> 00:03:23.480
+many button types out of the box
+
+75
+00:03:23.480 --> 00:03:25.520
+with likely good standard behavior
+
+76
+00:03:25.520 --> 00:03:27.680
+and that works in many places.
+
+77
+00:03:27.680 --> 00:03:29.360
+But what if you would want to create
+
+78
+00:03:29.360 --> 00:03:31.160
+your own completely new mapping,
+
+79
+00:03:31.160 --> 00:03:32.880
+possibly to your own data?
+
+80
+00:03:32.880 --> 00:03:38.120
+It is here that Hyperbole's support for creating
+
+81
+00:03:38.120 --> 00:03:41.280
+new implicit button types comes in.
+
+82
+00:03:41.280 --> 00:03:43.360
+For the full pattern matching button type,
+
+83
+00:03:43.360 --> 00:03:46.720
+like for the filename and examples we just looked at,
+
+84
+00:03:46.720 --> 00:03:48.754
+you need to define the implicit button
+
+00:03:48.755 --> 00:03:50.920
+using the macro, `defib`.
+
+85
+00:03:50.920 --> 00:03:53.280
+The downside of that is
+
+86
+00:03:53.280 --> 00:03:54.920
+you need to code at the elisp level.
+
+87
+00:03:54.920 --> 00:03:57.240
+However, if you are creating a new pattern
+
+88
+00:03:57.240 --> 00:03:59.120
+that has well-defined delimiters,
+
+89
+00:03:59.120 --> 00:04:01.360
+there is support for that in an easier way.
+
+90
+00:04:01.360 --> 00:04:03.800
+These support functions, or rather macros,
+
+91
+00:04:03.800 --> 00:04:06.240
+are `defil` and `defal`.
+
+92
+00:04:06.240 --> 00:04:08.440
+We will look at those macros soon,
+
+93
+00:04:08.440 --> 00:04:13.400
+but first, my definition of personal data.
+
+94
+00:04:13.400 --> 00:04:18.200
+I think of personal data as something
+
+95
+00:04:18.200 --> 00:04:19.680
+that you would like to link to,
+
+96
+00:04:19.680 --> 00:04:21.440
+but it's not necessarily in a form
+
+97
+00:04:21.440 --> 00:04:23.360
+supported by any known tool.
+
+98
+00:04:23.360 --> 00:04:26.920
+It might be stored on a web server, local storage,
+
+99
+00:04:26.920 --> 00:04:28.680
+or could even be some computation
+
+100
+00:04:28.680 --> 00:04:29.400
+rather than a link.
+
+101
+00:04:29.400 --> 00:04:32.200
+What all these cases have in common is that
+
+102
+00:04:32.200 --> 00:04:34.240
+you want to be able to reference it
+
+103
+00:04:34.240 --> 00:04:36.640
+in a short, and for you, descriptive way.
+
+104
+00:04:36.640 --> 00:04:38.960
+So when you write text, you can use
+
+105
+00:04:38.960 --> 00:04:44.480
+a new implicit type to create the connection.
+
+106
+00:04:44.480 --> 00:04:46.600
+This might be a bit abstract,
+
+107
+00:04:46.600 --> 00:04:48.080
+so let's look at an example.
+
+108
+00:04:48.080 --> 00:04:51.000
+Suppose you have a flat file structure
+
+109
+00:04:51.000 --> 00:04:52.760
+with some notes in each file.
+
+110
+00:04:52.760 --> 00:04:54.520
+It can look like this.
+
+111
+00:04:54.520 --> 00:04:57.400
+In the data folder, we have two files
+
+112
+00:04:57.400 --> 00:05:00.200
+that represents the notes we have taken.
+
+113
+00:05:00.200 --> 00:05:02.840
+We now want to be able to link to these notes
+
+114
+00:05:02.840 --> 00:05:07.120
+from outside of the data folder.
+
+115
+00:05:07.120 --> 00:05:08.960
+Let's make an implicit button type
+
+116
+00:05:08.960 --> 00:05:10.920
+that opens a file in this structure.
+
+117
+00:05:10.920 --> 00:05:13.520
+To make the pattern stand out in text,
+
+118
+00:05:13.520 --> 00:05:16.640
+we use double braces as start and stop delimiters.
+
+119
+00:05:16.640 --> 00:05:20.080
+An implicit button instance
+
+120
+00:05:20.080 --> 00:05:22.760
+would then look like this.
+
+121
+00:05:22.760 --> 00:05:27.680
+We can create that using the `defil` macro like this.
+
+122
+00:05:27.680 --> 00:05:31.840
+This invocation of the field
+
+123
+00:05:31.840 --> 00:05:34.480
+creates a button type "demo-link-to-file"
+
+124
+00:05:34.480 --> 00:05:37.280
+with the start delimiter of "{{"
+
+125
+00:05:37.280 --> 00:05:40.560
+and then delimiters of "}}",
+
+126
+00:05:40.560 --> 00:05:43.320
+the regular expression ".*" pattern
+
+127
+00:05:43.320 --> 00:05:45.640
+to match everything between the delimiters,
+
+128
+00:05:45.640 --> 00:05:48.800
+and finally, the action defined by the link expression.
+
+129
+00:05:48.800 --> 00:05:52.160
+Pattern substitution is performed
+
+130
+00:05:52.160 --> 00:05:54.440
+on the link expression before evaluation
+
+131
+00:05:54.440 --> 00:05:57.920
+so that the text that is in between the delimiters
+
+132
+00:05:57.920 --> 00:06:02.360
+is inserted where the "\\&" is in the link expression.
+
+134
+00:06:02.360 --> 00:06:07.560
+So all in all, implicit type instance will result in
+
+135
+00:06:07.560 --> 00:06:11.760
+the link expression of "~/data/FileA",
+
+136
+00:06:11.760 --> 00:06:14.520
+which we recognize as a file path.
+
+137
+00:06:14.520 --> 00:06:18.040
+With a single-line expression,
+
+138
+00:06:18.040 --> 00:06:21.040
+we have created our own hyperbutton syntax
+
+139
+00:06:21.040 --> 00:06:23.080
+that we can use in any Emacs buffer
+
+140
+00:06:23.080 --> 00:06:25.560
+to link to this custom set of data.
+
+141
+00:06:25.560 --> 00:06:30.960
+So let's evaluate the defil and use it.
+
+142
+00:06:30.960 --> 00:06:33.760
+I have prepared the files so that they already
+
+143
+00:06:33.760 --> 00:06:36.400
+contain some text and implicit links.
+
+144
+00:06:36.400 --> 00:06:43.760
+So from the presentation, we can go to FileA,
+
+145
+00:06:43.760 --> 00:06:48.720
+and from there to fileB.
+
+146
+00:06:48.720 --> 00:06:51.040
+Since the Hyperbole path expression
+
+147
+00:06:51.040 --> 00:06:53.640
+supports outline structures, we can,
+
+148
+00:06:53.640 --> 00:06:55.960
+as an extra bonus, reference directly
+
+149
+00:06:55.960 --> 00:06:57.560
+the headers in the files,
+
+150
+00:06:57.560 --> 00:07:00.160
+so we can, for example, link directly
+
+151
+00:07:00.160 --> 00:07:02.600
+to "More Notes" in FileB.
+
+152
+00:07:02.600 --> 00:07:10.720
+We have now created a simple info system.
+
+154
+00:07:10.720 --> 00:07:16.440
+Looking deeper at the link expression,
+
+155
+00:07:16.440 --> 00:07:19.840
+it can be of four different types:
+
+156
+00:07:19.840 --> 00:07:22.040
+A file path expression,
+
+157
+00:07:22.040 --> 00:07:23.520
+as we have already looked at;
+
+158
+00:07:23.520 --> 00:07:25.960
+a brace-delimited key series,
+
+159
+00:07:25.960 --> 00:07:27.960
+that is, a series of command keys
+
+160
+00:07:27.960 --> 00:07:29.480
+for performing some action,
+
+161
+00:07:29.480 --> 00:07:30.960
+much like a keyboard macro;
+
+162
+00:07:30.960 --> 00:07:36.240
+An URL; or a function that takes one argument,
+
+163
+00:07:36.240 --> 00:07:38.640
+which will be given the button text as input.
+
+164
+00:07:38.640 --> 00:07:42.880
+The URL link expression allows you
+
+165
+00:07:42.880 --> 00:07:44.480
+to link to web pages.
+
+166
+00:07:44.480 --> 00:07:46.560
+So if the data you want to link to
+
+167
+00:07:46.560 --> 00:07:48.640
+is accessible through the Web
+
+168
+00:07:48.640 --> 00:07:50.880
+and the URL can be constructed
+
+169
+00:07:50.880 --> 00:07:53.000
+from the button text in a meaningful way,
+
+170
+00:07:53.000 --> 00:07:54.520
+it is possible to do that.
+
+171
+00:07:54.520 --> 00:07:56.160
+Let's create the button type
+
+172
+00:07:56.160 --> 00:07:57.720
+that links to GNU software.
+
+173
+00:07:57.720 --> 00:08:01.088
+The URL to the GNU software catalog
+
+00:08:01.089 --> 00:08:04.680
+is www.gnu.org/software,
+
+174
+00:08:04.680 --> 00:08:07.440
+and with what we know about the field,
+
+175
+00:08:07.440 --> 00:08:09.640
+it is easy to create the button type for that.
+
+176
+00:08:09.640 --> 00:08:11.000
+It can look like this.
+
+177
+00:08:11.000 --> 00:08:16.200
+And here are two possible buttons
+
+178
+00:08:16.200 --> 00:08:19.320
+linking to Emacs and Hyperbole.
+
+179
+00:08:19.320 --> 00:08:24.200
+So let's again evaluate the defil and use it.
+
+180
+00:08:24.200 --> 00:08:28.120
+Please note that not all GNU software
+
+181
+00:08:28.120 --> 00:08:29.000
+is under that URL,
+
+182
+00:08:29.000 --> 00:08:31.000
+so this simple definition will not work
+
+183
+00:08:31.000 --> 00:08:32.200
+to link to everything.
+
+184
+00:08:32.200 --> 00:08:37.280
+To highlight the fact that the button action
+
+185
+00:08:37.280 --> 00:08:39.080
+does not have to be a link,
+
+186
+00:08:39.080 --> 00:08:40.600
+but can be any action,
+
+187
+00:08:40.600 --> 00:08:42.200
+let's look at a math example.
+
+188
+00:08:42.200 --> 00:08:44.800
+Here is the button type that does some math
+
+189
+00:08:44.800 --> 00:08:47.480
+and writes the result in the message area.
+
+190
+00:08:47.480 --> 00:08:57.160
+Let's evaluate and use it.
+
+191
+00:08:57.160 --> 00:08:59.760
+Before ending, I would like to mention
+
+192
+00:08:59.760 --> 00:09:00.760
+the defal macro.
+
+193
+00:09:00.760 --> 00:09:02.920
+It is similar to the defil macro,
+
+194
+00:09:02.920 --> 00:09:04.880
+but simpler, since it uses a form
+
+195
+00:09:04.880 --> 00:09:07.880
+of the implicit button type with no delimiters.
+
+196
+00:09:07.880 --> 00:09:14.800
+It is simply <TYPE LINK-EXPR>.
+
+197
+00:09:14.800 --> 00:09:17.920
+So the implicit button type contains the link type
+
+198
+00:09:17.920 --> 00:09:18.960
+in clear text.
+
+199
+00:09:18.960 --> 00:09:23.120
+Our recent FSF software button
+
+200
+00:09:23.120 --> 00:09:24.854
+would be created like this.
+
+00:09:24.855 --> 00:09:29.760
+And it would be instantiated in text like this.
+
+202
+00:09:29.760 --> 00:09:34.960
+I have shown how you,
+
+203
+00:09:34.960 --> 00:09:37.840
+with the help of the defil macro in Hyperbole,
+
+204
+00:09:37.840 --> 00:09:40.240
+quickly can create implicit buttons.
+
+205
+00:09:40.240 --> 00:09:41.480
+With those buttons, you can link
+
+206
+00:09:41.480 --> 00:09:43.160
+to your personal information
+
+207
+00:09:43.160 --> 00:09:44.160
+in the form it may have.
+
+208
+00:09:44.160 --> 00:09:47.200
+By the nature of the implicit buttons,
+
+209
+00:09:47.200 --> 00:09:49.880
+those can be used from any file in Emacs.
+
+210
+00:09:49.880 --> 00:09:52.640
+The button types can be
+
+211
+00:09:52.640 --> 00:09:54.640
+created to be used long term,
+
+212
+00:09:54.640 --> 00:09:57.680
+but even short term use within the session is possible,
+
+213
+00:09:57.680 --> 00:09:59.880
+since the creation is simple and quick.
+
+214
+00:09:59.880 --> 00:10:03.400
+Inspired by this, I hope you will find ways
+
+215
+00:10:03.400 --> 00:10:04.760
+to create implicit buttons
+
+216
+00:10:04.760 --> 00:10:07.360
+that will support you getting to your information.
+
+217
+00:10:07.360 --> 00:10:09.240
+For the simplest cases,
+
+218
+00:10:09.240 --> 00:10:11.400
+the field and the file macros might be enough.
+
+219
+00:10:11.400 --> 00:10:13.360
+For more complicated cases,
+
+220
+00:10:13.360 --> 00:10:15.760
+using a tailor-made function can be an option.
+
+221
+00:10:15.760 --> 00:10:19.480
+If you know Elisp, use the defib macro
+
+222
+00:10:19.480 --> 00:10:22.240
+which gives you full control over the button type.
+
+223
+00:10:22.240 --> 00:10:32.000
+Thank you.
diff --git a/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt
new file mode 100644
index 00000000..75b624a9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--answers.vtt
@@ -0,0 +1,1691 @@
+WEBVTT
+
+00:00.000 --> 00:02.600
+the recording button here.
+
+00:02.600 --> 00:03.600
+OK.
+
+00:03.600 --> 00:05.180
+Thank you again for the great talk,
+
+00:05.180 --> 00:06.680
+even though I haven't been able to catch most of it
+
+00:06.680 --> 00:08.560
+because I've been running around behind the scenes.
+
+00:08.560 --> 00:11.360
+But very much interested in DBUS and Emacs.
+
+00:11.360 --> 00:13.240
+I'm very much looking forward to watching it
+
+00:13.240 --> 00:14.080
+after the conference.
+
+00:14.080 --> 00:18.360
+But for folks who were able to and did catch the talk,
+
+00:18.360 --> 00:21.680
+please, now it's time to send in your questions.
+
+00:21.680 --> 00:24.820
+You can either ask away on IRC or put them on the pad.
+
+00:24.820 --> 00:28.300
+And we'll also open up this PBB room in a little bit
+
+00:28.300 --> 00:31.960
+if you'd like to join here directly on asking questions.
+
+00:31.960 --> 00:34.520
+So, Ian, please take it away.
+
+00:34.520 --> 00:35.280
+Hey, thanks.
+
+00:35.280 --> 00:38.580
+Yeah, going to wait for some questions to come in.
+
+00:38.580 --> 00:41.320
+But there's a couple of points I wanted to make.
+
+00:41.320 --> 00:46.840
+So I'm going to share my screen here for a minute.
+
+00:46.840 --> 00:50.880
+If you're interested in exploring more about DBUS,
+
+00:50.880 --> 00:54.080
+there is a graphical client called dfeat.
+
+00:54.080 --> 00:56.200
+That's d-feat.
+
+00:56.200 --> 00:59.960
+I guess puns are strong when it comes to DBUS software.
+
+00:59.960 --> 01:03.400
+And this just gives you a graphical overview
+
+01:03.400 --> 01:06.160
+of what's going on with your bus.
+
+01:06.160 --> 01:09.920
+So in the case that I was looking at in Emacs,
+
+01:09.920 --> 01:11.600
+you can look.
+
+01:11.600 --> 01:13.280
+Here's the hostname1 service.
+
+01:13.280 --> 01:18.360
+And here's you can change the chassis of it or read.
+
+01:18.360 --> 01:20.240
+I'm on a desktop here.
+
+01:20.240 --> 01:23.940
+So I think this is a really great tool
+
+01:23.940 --> 01:30.720
+for just understanding what is available and what DBUS can do.
+
+01:30.720 --> 01:33.720
+I think I didn't do a great job of setting out a vision.
+
+01:33.720 --> 01:37.000
+So I want to try to reiterate that here.
+
+01:37.000 --> 01:41.320
+Ever since I started using X1 several years ago,
+
+01:41.320 --> 01:46.480
+and before that even, once I was learning about LISP machines,
+
+01:46.480 --> 01:48.920
+one of the things that I really want out of my computing
+
+01:48.920 --> 01:52.720
+experience is a full LISP environment,
+
+01:52.720 --> 01:54.400
+like a modern LISP machine.
+
+01:54.400 --> 01:59.440
+And I think Emacs and X1 are the closest thing to that
+
+01:59.440 --> 02:01.800
+that you can get on a modern machine.
+
+02:01.800 --> 02:03.760
+But if you're thinking about what
+
+02:03.760 --> 02:07.680
+are the gaps between that and a full blown desktop environment,
+
+02:07.680 --> 02:10.800
+there is many of them that make it inconvenient
+
+02:10.800 --> 02:12.760
+in a variety of different ways.
+
+02:12.760 --> 02:17.600
+And my vision is really to have an Emacs desktop environment.
+
+02:17.600 --> 02:21.080
+And I think DBUS is really key to making that work.
+
+02:21.080 --> 02:24.760
+And I would love, on the one to two year horizon,
+
+02:24.760 --> 02:29.080
+I would really like to see common system tasks be
+
+02:29.080 --> 02:32.680
+able to get done seamlessly from inside of Emacs.
+
+02:32.680 --> 02:34.640
+And what I mean by that is things
+
+02:34.640 --> 02:37.440
+like pairing with a Bluetooth device,
+
+02:37.440 --> 02:41.440
+connecting to a Wi-Fi network, rebooting your computer
+
+02:41.440 --> 02:44.440
+or putting it into suspend, or any of those things
+
+02:44.440 --> 02:47.800
+that you might think of doing in a full blown desktop
+
+02:47.800 --> 02:51.320
+environment, whether it's Mac OS, or Windows, or GNOME, or KDE,
+
+02:51.320 --> 02:53.920
+or whatever, you should be able to do all that from Emacs.
+
+02:53.920 --> 02:56.840
+You should be able to manage everything
+
+02:56.840 --> 02:59.200
+without having to leave that environment.
+
+02:59.200 --> 03:02.160
+Because I really prefer the Emacs environment.
+
+03:02.160 --> 03:05.520
+I would like to do all of that from inside Emacs.
+
+03:05.520 --> 03:07.380
+And when it comes to integrating with all
+
+03:07.380 --> 03:11.960
+those different things, DBUS is really key to making it work.
+
+03:11.960 --> 03:20.560
+But I do think that offering the ability of integrating Emacs
+
+03:20.560 --> 03:23.160
+into the desktop for people who don't
+
+03:23.160 --> 03:26.720
+want to go that route of having a full blown Emacs desktop
+
+03:26.720 --> 03:30.880
+environment, I think that's also a path to some really
+
+03:30.880 --> 03:35.200
+interesting feature opportunity that
+
+03:35.200 --> 03:39.760
+has been difficult to explore in Emacs in years past.
+
+03:39.760 --> 03:44.160
+So I really think it's just a great space to be exploring.
+
+03:44.160 --> 03:46.280
+And I'm really excited to see what kind of stuff
+
+03:46.280 --> 03:48.520
+I can build in there, and what things other people
+
+03:48.520 --> 03:49.600
+start building in there.
+
+03:53.400 --> 03:54.160
+Sounds great.
+
+03:54.160 --> 03:57.640
+Yeah, and I think DBUS is kind of, I guess,
+
+03:57.640 --> 04:00.680
+one of those essential key pieces of software
+
+04:00.680 --> 04:03.120
+on GNU Linux where, I mean, if it's working,
+
+04:03.120 --> 04:05.240
+and when it's working, it's pretty much,
+
+04:05.240 --> 04:06.800
+I mean, you don't even notice it.
+
+04:06.800 --> 04:07.760
+It's behind the scenes.
+
+04:07.760 --> 04:09.600
+Everything seems to be working hand in hand.
+
+04:09.600 --> 04:11.880
+So yeah, I remember, for example,
+
+04:11.880 --> 04:14.600
+when I first switched to using a custom window manager,
+
+04:14.600 --> 04:16.760
+you pretty much lose all of that sort
+
+04:16.760 --> 04:20.200
+of integration and togetherness right away
+
+04:20.200 --> 04:22.440
+if there is no DBUS.
+
+04:22.440 --> 04:24.560
+And yeah, a lot of beginners, like myself at the time
+
+04:24.560 --> 04:27.480
+at least, don't even know what they're missing out on.
+
+04:27.480 --> 04:33.200
+So kudos for taking this on and having this vision of essentially
+
+04:33.200 --> 04:35.840
+moving towards that direction of being able to use Emacs
+
+04:35.840 --> 04:38.840
+as a potentially fully featured desktop environment.
+
+04:38.840 --> 04:40.680
+I think that's awesome.
+
+04:40.680 --> 04:42.560
+Yeah, thank you.
+
+04:42.560 --> 04:44.880
+Looks like I have some questions in the pad,
+
+04:44.880 --> 04:47.160
+so I will cover some of those.
+
+04:47.160 --> 04:48.720
+No, it's not Web3.
+
+04:48.720 --> 04:49.320
+Not funny.
+
+04:52.440 --> 04:54.840
+I'm sorry, the question was, so is this a Web3 approach?
+
+04:54.840 --> 04:56.840
+No, it isn't.
+
+04:56.840 --> 04:58.160
+I have another question.
+
+04:58.160 --> 04:59.960
+This is such a great overview of DBUS.
+
+04:59.960 --> 05:01.800
+I haven't been paying attention to this space
+
+05:01.800 --> 05:05.120
+because it seems to be in flux 10 or 15 years ago.
+
+05:05.120 --> 05:07.040
+How long has DBUS been around, and what
+
+05:07.040 --> 05:09.160
+was in place before that?
+
+05:09.160 --> 05:11.960
+So I covered this real briefly in the beginning of the talk,
+
+05:11.960 --> 05:15.400
+but DBUS dates from 2002-ish.
+
+05:15.400 --> 05:21.760
+And I would say since 2010, 2012, that time frame,
+
+05:21.760 --> 05:26.080
+it has been pretty stable and has seen wide adoption
+
+05:26.080 --> 05:28.600
+in multiple desktop environments.
+
+05:28.600 --> 05:30.800
+Before DBUS, there wasn't anything like it.
+
+05:30.800 --> 05:33.120
+It didn't replace a similar feature.
+
+05:33.120 --> 05:35.320
+And if you wanted to do the sorts of things
+
+05:35.320 --> 05:40.160
+that DBUS does, you were pretty limited.
+
+05:40.160 --> 05:42.600
+Those of you who have been around for a while
+
+05:42.600 --> 05:45.600
+might remember that a lot of GUI software for Linux
+
+05:45.600 --> 05:49.840
+in the 90s was some variant of a shell,
+
+05:49.840 --> 05:53.720
+like a graphical shell program that just called out
+
+05:53.720 --> 05:57.160
+to an existing binary on the system.
+
+05:57.160 --> 05:59.200
+Like you might have a disk formatter,
+
+05:59.200 --> 06:01.320
+and it lets you has a dropdown for the file
+
+06:01.320 --> 06:03.400
+and lists your devices and whatever.
+
+06:03.400 --> 06:04.960
+But it was doing all the work.
+
+06:04.960 --> 06:06.200
+All it was was the interface.
+
+06:06.200 --> 06:09.480
+All the work was happening by delegating it to a program.
+
+06:09.480 --> 06:12.000
+And essentially, what that's doing
+
+06:12.000 --> 06:16.480
+is that's turning the text user interface, the command line
+
+06:16.480 --> 06:19.880
+user interface, into an API because you're using a program
+
+06:19.880 --> 06:22.680
+to talk to it, but it's not really meant for that.
+
+06:22.680 --> 06:27.400
+And there's a lot of details in that interface that
+
+06:27.400 --> 06:29.240
+are not stable.
+
+06:29.240 --> 06:33.480
+Like anyone who's used a Mac after using a Linux machine
+
+06:33.480 --> 06:37.240
+has probably been surprised that the find command didn't
+
+06:37.240 --> 06:38.960
+work how they expected.
+
+06:38.960 --> 06:40.480
+And there's a lot of that.
+
+06:40.480 --> 06:43.000
+In order to make that stuff really reliable,
+
+06:43.000 --> 06:47.600
+you end up having to build a lot of special cases into it,
+
+06:47.600 --> 06:49.680
+but you're doing it at the wrong layer.
+
+06:49.680 --> 06:51.440
+And what DBUS does is it really lets
+
+06:51.440 --> 06:55.320
+you have a separate architecture where the service is what
+
+06:55.320 --> 06:59.200
+encapsulates all of the differences between kernels,
+
+06:59.200 --> 07:02.280
+distributions, flavors of tooling,
+
+07:02.280 --> 07:05.440
+and just abstracts all of that and gives you a proper API
+
+07:05.440 --> 07:06.400
+that you can use.
+
+07:06.400 --> 07:07.860
+And I think that's great because that
+
+07:07.860 --> 07:12.600
+lets you build these high-level interactive components
+
+07:12.600 --> 07:15.320
+at an abstract level where you don't necessarily
+
+07:15.320 --> 07:17.280
+need to care about the implementation details.
+
+07:17.280 --> 07:19.480
+I think that's really great.
+
+07:19.480 --> 07:21.400
+So that's really what was happening there.
+
+07:21.400 --> 07:23.680
+And when it comes to two-way stuff,
+
+07:23.680 --> 07:26.480
+it was like a fancy version of Unix pipes.
+
+07:26.480 --> 07:29.760
+You would run your program, and maybe if you were lucky,
+
+07:29.760 --> 07:32.360
+it had some sort of machine-readable output
+
+07:32.360 --> 07:33.960
+switch you could turn on so that you
+
+07:33.960 --> 07:37.480
+could have a progress bar or something like that.
+
+07:37.480 --> 07:38.600
+That was the sort of thing.
+
+07:38.600 --> 07:40.720
+But there wasn't really anything exactly like DBUS.
+
+07:45.240 --> 07:46.480
+I have another question.
+
+07:46.480 --> 07:48.360
+Forgive me if this question is silly.
+
+07:48.360 --> 07:53.320
+Why is everything DBUS prefixed with org dot?
+
+07:53.320 --> 07:57.800
+Not everything is, but most things are.
+
+07:57.800 --> 08:00.800
+Those identifiers are reverse FQDN.
+
+08:00.800 --> 08:03.560
+So if you think about the Java namespaces,
+
+08:03.560 --> 08:05.960
+that's what they're ripping off there.
+
+08:05.960 --> 08:09.680
+And it's org because most of it is written by nonprofits.
+
+08:09.680 --> 08:12.320
+So in particular, Free Desktop is
+
+08:12.320 --> 08:15.040
+what it sponsors development of DBUS.
+
+08:15.040 --> 08:17.320
+And so there is an inordinate number
+
+08:17.320 --> 08:22.480
+of org dot Free Desktop dot whatever services on DBUS
+
+08:22.480 --> 08:28.480
+just because they build so many of them.
+
+08:28.480 --> 08:32.680
+In your investigations, do most OS desktop environment window
+
+08:32.680 --> 08:35.360
+manager interop well over DBUS?
+
+08:35.360 --> 08:38.160
+Which ones have proven more challenging, if any?
+
+08:40.960 --> 08:45.280
+I'm not sure I quite understand this question.
+
+08:45.280 --> 08:49.720
+DBUS is fairly abstract, and those graphical programs
+
+08:49.720 --> 08:53.360
+can choose to use it or not.
+
+08:53.360 --> 08:58.440
+But you're not interacting with the desktop environment
+
+08:58.440 --> 08:59.040
+too much.
+
+08:59.040 --> 09:01.200
+You're interacting with a service.
+
+09:01.200 --> 09:03.720
+So what you're doing is you're taking any program
+
+09:03.720 --> 09:06.520
+and you're breaking it into a client server model.
+
+09:06.520 --> 09:09.680
+The DBUS service does all of the work,
+
+09:09.680 --> 09:12.360
+and then there's a graphical environment on top of it.
+
+09:12.360 --> 09:14.640
+So they're communicating back and forth.
+
+09:14.640 --> 09:16.320
+And if you want to do those same things,
+
+09:16.320 --> 09:18.080
+you want to communicate with the service,
+
+09:18.080 --> 09:22.400
+you don't need to communicate with the actual GUI program
+
+09:22.400 --> 09:25.000
+unless you want to control the program.
+
+09:25.000 --> 09:27.240
+If you want to do the same thing the program is doing,
+
+09:27.240 --> 09:28.680
+you can use a DBUS service.
+
+09:28.680 --> 09:30.960
+I guess in the case of something like a word processor,
+
+09:30.960 --> 09:32.720
+you might want to have a DBUS API that
+
+09:32.720 --> 09:35.720
+lets you add a heading or something like that.
+
+09:35.720 --> 09:39.160
+That's not an area I've explored too much.
+
+09:39.160 --> 09:40.760
+So I'm not sure how that works.
+
+09:40.760 --> 09:42.760
+Work done.
+
+09:46.120 --> 09:49.080
+Regarding using XWIM as a desktop environment,
+
+09:49.080 --> 09:55.040
+does XWIM provide a session manager daemon?
+
+09:55.040 --> 09:57.200
+Whoever wrote that, if you could add some more context,
+
+09:57.200 --> 09:58.080
+I would appreciate it.
+
+09:58.080 --> 10:01.000
+I'm not sure I can answer that as it is written.
+
+10:04.120 --> 10:07.560
+No, I don't know.
+
+10:07.560 --> 10:08.720
+Next question.
+
+10:08.720 --> 10:11.600
+There is a lot of criticism against DBUS out there.
+
+10:11.600 --> 10:13.280
+Why do you think that might be?
+
+10:13.280 --> 10:15.200
+Well, it's because it's not very good.
+
+10:18.600 --> 10:21.960
+I mean, I love what it unlocks feature wise,
+
+10:21.960 --> 10:25.240
+but I do think it is not the best implementation
+
+10:25.240 --> 10:28.240
+for doing what it does.
+
+10:28.240 --> 10:31.640
+But when in Rome, you want to do those things,
+
+10:31.640 --> 10:32.760
+I want to do those things, I don't
+
+10:32.760 --> 10:34.480
+want to rewrite everything in the way
+
+10:34.480 --> 10:36.960
+I think it should have been to get it done because I'll never
+
+10:36.960 --> 10:37.760
+get it done.
+
+10:37.760 --> 10:39.880
+The whole point is you just shove it in a corner,
+
+10:39.880 --> 10:41.600
+you don't have to care about it, and you
+
+10:41.600 --> 10:43.440
+use high level bindings.
+
+10:43.440 --> 10:46.040
+I would say the specific criticisms I've seen
+
+10:46.040 --> 10:54.720
+are using XML is something that is not popular these days.
+
+10:54.720 --> 10:58.260
+And if I had to criticize a thing about it,
+
+10:58.260 --> 11:02.240
+I would say it doesn't have strong guidelines
+
+11:02.240 --> 11:03.680
+for how to make a good API.
+
+11:03.680 --> 11:06.120
+And so the quality of one service to another
+
+11:06.120 --> 11:09.120
+can be extremely variable.
+
+11:09.120 --> 11:12.360
+And different services have different ways
+
+11:12.360 --> 11:14.440
+of doing very similar tasks.
+
+11:14.440 --> 11:16.960
+So I would love to see, if anything, a little more
+
+11:16.960 --> 11:19.960
+uniformity in those APIs.
+
+11:19.960 --> 11:22.840
+I generally could care less that it's sending XML around
+
+11:22.840 --> 11:23.760
+or whatever.
+
+11:23.760 --> 11:30.920
+I think people who are offended that XML is being used
+
+11:30.920 --> 11:37.560
+don't have their hearts in the right place, basically.
+
+11:37.560 --> 11:45.320
+Which system services come to mind
+
+11:45.320 --> 11:47.000
+when thinking about applications,
+
+11:47.000 --> 11:49.760
+be it at the OS desktop environment, window manager
+
+11:49.760 --> 11:50.440
+level?
+
+11:50.440 --> 11:53.520
+So the stuff that I am interested in using this for
+
+11:53.520 --> 11:56.600
+is, like I was saying, connecting to wireless networks,
+
+11:56.600 --> 11:59.360
+pairing with Bluetooth devices, that kind of stuff.
+
+11:59.360 --> 12:04.520
+Things that don't have a streamlined way of accomplishing
+
+12:04.520 --> 12:07.960
+it without using D-Bus and some graphical client.
+
+12:07.960 --> 12:09.360
+And I would just like to not have
+
+12:09.360 --> 12:11.360
+to deal with the client end of it.
+
+12:11.360 --> 12:14.160
+I would like the UI to be in Emacs.
+
+12:19.720 --> 12:21.160
+When it comes to managing devices,
+
+12:21.160 --> 12:23.760
+how are D-Bus and U-Dev related?
+
+12:23.760 --> 12:25.760
+U-Dev is a D-Bus service.
+
+12:25.760 --> 12:30.520
+So it is a daemon that is running at some point
+
+12:30.520 --> 12:31.760
+in the background.
+
+12:31.760 --> 12:33.520
+If it's not running, D-Bus will start it
+
+12:33.520 --> 12:35.040
+when you send it a message.
+
+12:35.040 --> 12:42.120
+And I'm sorry, I'm mistaking U-Dev for U-Disks.
+
+12:42.120 --> 12:46.640
+U-Dev is unrelated to D-Bus.
+
+12:46.640 --> 12:53.400
+U-Dev is a way of dynamically populating your devices
+
+12:53.400 --> 12:56.520
+and having triggers that run when they are plugged in
+
+12:56.520 --> 12:57.600
+or unplugged.
+
+12:57.600 --> 12:59.840
+They're orthogonal.
+
+12:59.840 --> 13:02.120
+D-Bus and U-Dev don't interact.
+
+13:02.120 --> 13:08.520
+But D-Bus, I suspect some of the D-Bus services, like U-Disks,
+
+13:08.520 --> 13:11.720
+too, probably need to talk to U-Dev in order
+
+13:11.720 --> 13:13.080
+to do their job.
+
+13:13.080 --> 13:16.200
+But this is a service by service thing,
+
+13:16.200 --> 13:27.400
+rather than D-Bus is integrated with U-Dev sort of thing.
+
+13:27.400 --> 13:29.320
+Skip one of these.
+
+13:29.320 --> 13:32.200
+If you want to do the kinds of things that D-Bus does,
+
+13:32.200 --> 13:33.280
+you're limited.
+
+13:33.280 --> 13:35.880
+What is something D-Bus does that you couldn't do before?
+
+13:35.880 --> 13:37.520
+What is a really cool use of D-Bus
+
+13:37.520 --> 13:39.880
+in a modern desktop environment?
+
+13:39.880 --> 13:43.680
+So again, I think that the hardware and dynamic refresh
+
+13:43.680 --> 13:47.520
+is the use case that I keep coming back to.
+
+13:47.520 --> 13:50.760
+You walk somewhere where there's a new Wi-Fi network
+
+13:50.760 --> 13:52.960
+or there's an open Wi-Fi network to connect to,
+
+13:52.960 --> 13:55.240
+and maybe you get a notification somewhere.
+
+13:55.240 --> 13:57.360
+You plug in some hardware and it shows up
+
+13:57.360 --> 13:59.880
+in some list or some user interface
+
+13:59.880 --> 14:01.880
+to make it easy to use.
+
+14:01.880 --> 14:03.600
+You unplug it, it goes away.
+
+14:03.600 --> 14:05.960
+Those are the things that I think are really interesting
+
+14:05.960 --> 14:10.600
+because when you use a full blown desktop environment,
+
+14:10.600 --> 14:14.240
+you have come to expect that kind of interactivity
+
+14:14.240 --> 14:17.760
+and that kind of integration from the low level
+
+14:17.760 --> 14:21.760
+of the hardware up to whatever graphical layer you're using.
+
+14:21.760 --> 14:26.440
+And Emacs doesn't have that, and I want it to have that.
+
+14:26.440 --> 14:32.000
+So I think that's the thing that D-Bus really gives me.
+
+14:32.000 --> 14:34.240
+I would say in particular, you plug in hardware
+
+14:34.240 --> 14:37.240
+and it shows up in a list, that's pretty damn cool.
+
+14:37.240 --> 14:40.640
+That's a thing that I don't remember seeing done
+
+14:40.640 --> 14:43.400
+without D-Bus, or the way it was done
+
+14:43.400 --> 14:47.240
+was not portable and very complicated.
+
+14:47.240 --> 14:50.320
+D-Bus allows you to build those types of interfaces
+
+14:50.320 --> 14:53.280
+with a lot less work, and I think that's pretty great.
+
+14:58.640 --> 14:59.680
+Let's see.
+
+14:59.680 --> 15:02.040
+As an average GNU slash Linux user,
+
+15:02.040 --> 15:05.320
+I've used signals and methods before but not properties.
+
+15:05.320 --> 15:07.600
+You gave an example involving properties,
+
+15:07.600 --> 15:08.880
+but it kind of flew by.
+
+15:08.880 --> 15:11.640
+Can you explain briefly what clients and services
+
+15:11.640 --> 15:13.960
+can do with properties?
+
+15:13.960 --> 15:20.880
+Sure, so let me share this screen real quick.
+
+15:20.880 --> 15:26.000
+So just looking at hostname1 because this
+
+15:26.000 --> 15:28.480
+is a pretty simple and straightforward.
+
+15:28.480 --> 15:32.920
+Actually, let me look at U disks.
+
+15:32.920 --> 15:36.720
+So here's a whole mess of disks that are connected,
+
+15:36.720 --> 15:39.360
+and you can see here's a block device
+
+15:39.360 --> 15:41.960
+and it has all of these different properties to it.
+
+15:41.960 --> 15:46.600
+So hit system will say, is this a system device?
+
+15:46.600 --> 15:48.680
+Is this a fixed device, something
+
+15:48.680 --> 15:50.400
+that the system is in control of mounting,
+
+15:50.400 --> 15:53.000
+or is this something that a user might want to interact with?
+
+15:53.000 --> 15:55.160
+That property is how you're going to know
+
+15:55.160 --> 15:56.600
+which one of those things are, and I
+
+15:56.600 --> 15:58.880
+think that's really important when you're building a UI.
+
+15:58.880 --> 16:00.480
+Maybe you want to hide the system disks
+
+16:00.480 --> 16:04.280
+because you can see them, but there's not much you can do.
+
+16:04.280 --> 16:07.440
+I can't unmount my root device without turning the computer
+
+16:07.440 --> 16:07.960
+off.
+
+16:07.960 --> 16:11.760
+So the things you might want to do
+
+16:11.760 --> 16:15.800
+at a graphical interactive level are pretty limited,
+
+16:15.800 --> 16:19.440
+and that property lets you figure that out.
+
+16:19.440 --> 16:22.400
+Here's a crypto vacuum device that read only
+
+16:22.400 --> 16:24.240
+what drives it's associated with.
+
+16:24.240 --> 16:28.280
+They really bundle up just a lot of metadata about the thing,
+
+16:28.280 --> 16:31.400
+and they have a lot of links in between the different objects.
+
+16:31.400 --> 16:36.480
+So looking at one thing, you can connect it up
+
+16:36.480 --> 16:39.560
+to other parts of it at different levels.
+
+16:39.560 --> 16:43.440
+There's the notion of a drive, which contains a block device,
+
+16:43.440 --> 16:45.560
+which can have some partition tables, which
+
+16:45.560 --> 16:49.200
+can have file systems, or maybe an encryption container that
+
+16:49.200 --> 16:50.800
+has more of those things.
+
+16:50.800 --> 16:57.160
+So it's really a tree, but it's a strangely modeled tree
+
+16:57.160 --> 17:00.880
+where you have to walk the different leaves.
+
+17:00.880 --> 17:03.200
+It's not a single tree that encapsulates everything.
+
+17:03.200 --> 17:07.360
+It is a tree of links into other bits of the tree,
+
+17:07.360 --> 17:07.960
+essentially.
+
+17:07.960 --> 17:11.920
+So they're important to use for that sort of thing.
+
+17:16.320 --> 17:17.680
+The other thing that properties do
+
+17:17.680 --> 17:24.440
+is the signals let you know when a property has been updated.
+
+17:24.440 --> 17:28.640
+So if your hostname changes, you can
+
+17:28.640 --> 17:30.600
+get a signal that says, hey, my hostname changed,
+
+17:30.600 --> 17:32.840
+and maybe give a notice.
+
+17:32.840 --> 17:35.440
+Or if your active network connection changes
+
+17:35.440 --> 17:39.320
+or disconnects, a signal is going to be what tells you that,
+
+17:39.320 --> 17:43.200
+and the change in property is what will drive the signal.
+
+17:43.200 --> 17:44.840
+So it's kind of related to that.
+
+17:49.920 --> 17:53.120
+Naive question, me not knowing much about D-Bus.
+
+17:53.120 --> 17:56.400
+Is there such a thing as a D-Bus reflection browser,
+
+17:56.400 --> 17:58.280
+maybe Emacs-based, that lets you discover
+
+17:58.280 --> 18:02.160
+all the behavior different D-Bus app participants provide?
+
+18:02.160 --> 18:04.160
+And actually, wait, I think you're showing it.
+
+18:04.160 --> 18:06.320
+Defeat is that.
+
+18:06.320 --> 18:11.440
+Definitely a to-do item is to build an Emacs Lisp interface
+
+18:11.440 --> 18:16.520
+that is akin to Defeat, but I have not done that.
+
+18:16.520 --> 18:17.760
+So pull requests, welcome.
+
+18:17.760 --> 18:25.920
+Next question, D-Bus seems great for extensibility,
+
+18:25.920 --> 18:28.240
+but then Emacs has no such mechanism
+
+18:28.240 --> 18:30.680
+and is fantastically more extensible.
+
+18:30.680 --> 18:31.960
+Why do you think this is so?
+
+18:34.680 --> 18:37.840
+I don't think I agree with the premise.
+
+18:37.840 --> 18:42.400
+D-Bus is not really that extensible in the way
+
+18:42.400 --> 18:46.560
+that you might think in the same context as Emacs.
+
+18:46.560 --> 18:49.360
+You can add new functionality by adding a new service,
+
+18:49.360 --> 18:51.080
+but you can't add new functionality
+
+18:51.080 --> 18:54.000
+to an existing service without changing it.
+
+18:54.000 --> 18:57.120
+So I'm not sure I would say that's
+
+18:57.120 --> 19:01.080
+extensible in the same way, whereas Emacs is very malleable
+
+19:01.080 --> 19:06.120
+and you can change how it works even while it's running.
+
+19:06.120 --> 19:12.120
+So I think it's a different kind of extensibility, really.
+
+19:12.120 --> 19:15.840
+And Emacs can participate on D-Bus,
+
+19:15.840 --> 19:21.080
+so Emacs has a superset of what D-Bus can do, really.
+
+19:25.200 --> 19:27.120
+Do you have any other cool D-Bus ideas?
+
+19:27.120 --> 19:29.480
+I think I have dropped them all.
+
+19:29.480 --> 19:32.600
+Definitely remote org capture is a thing
+
+19:32.600 --> 19:34.840
+that I have wanted a couple of times
+
+19:34.840 --> 19:38.160
+because if I'm browsing around somewhere,
+
+19:38.160 --> 19:40.520
+I'd really love to have a simple flow that
+
+19:40.520 --> 19:44.720
+allows me to turn a web page into an org capture.
+
+19:44.720 --> 19:47.640
+And I think D-Bus could be a good way of accomplishing that,
+
+19:47.640 --> 19:49.920
+although I haven't messed with the browser integration
+
+19:49.920 --> 19:50.400
+end of it.
+
+19:54.640 --> 19:57.920
+Are there buses besides system and session?
+
+19:57.920 --> 19:59.920
+Is there anything more to a bus besides a way
+
+19:59.920 --> 20:03.920
+to group objects?
+
+20:03.920 --> 20:09.920
+There are always at least a system bus and a session bus.
+
+20:09.920 --> 20:12.760
+And actually, that's maybe not completely true.
+
+20:12.760 --> 20:15.640
+There's always at least a system bus, session bus
+
+20:15.640 --> 20:19.800
+as long as there is at least one logged in session.
+
+20:19.800 --> 20:22.720
+And there's really more than one session bus.
+
+20:22.720 --> 20:26.800
+There's one bus per session so that you're not leaking stuff
+
+20:26.800 --> 20:28.880
+across sessions on the same computer
+
+20:28.880 --> 20:32.960
+because despite this being 2022, Unix
+
+20:32.960 --> 20:34.840
+is still a multi-user operating system
+
+20:34.840 --> 20:38.280
+and you have to think about that stuff.
+
+20:38.280 --> 20:43.640
+There are an unlimited number of D-Bus buses.
+
+20:43.640 --> 20:47.040
+You can create ones that have limited sets of services.
+
+20:47.040 --> 20:51.760
+You can connect to ones over a TCP socket.
+
+20:51.760 --> 20:55.320
+There are always generally at least system and session.
+
+20:55.320 --> 20:58.360
+There can additionally be other ones.
+
+20:58.360 --> 21:02.800
+But it is uncommon to have any other bus.
+
+21:02.800 --> 21:06.080
+Generally, well-behaved D-Bus services
+
+21:06.080 --> 21:10.000
+will attach to one or the other of those two buses.
+
+21:10.000 --> 21:13.760
+And in fact, PulseAudio is, it has D-Bus support
+
+21:13.760 --> 21:16.440
+but it is not a good D-Bus citizen
+
+21:16.440 --> 21:18.960
+because it does not use the session bus.
+
+21:18.960 --> 21:22.000
+It has, it's very weird actually.
+
+21:22.000 --> 21:25.240
+It has a D-Bus plug-in that hooks into the session bus
+
+21:25.240 --> 21:28.640
+but all it has is a method that returns the path to the Unix
+
+21:28.640 --> 21:31.560
+socket of the real D-Bus which you then
+
+21:31.560 --> 21:34.640
+have to connect to separately which strikes me
+
+21:34.640 --> 21:37.840
+as not the best way of doing that.
+
+21:41.800 --> 21:43.680
+Cool.
+
+21:43.680 --> 21:46.840
+All right, I think that is all of the questions.
+
+21:50.000 --> 21:52.520
+Cool, I think we still have about like six and a half
+
+21:52.520 --> 21:55.160
+or seven more minutes of Q&A on the stream.
+
+21:55.160 --> 21:57.920
+So if there are any more questions, folks,
+
+21:57.920 --> 21:59.480
+please feel free to post them on the pad
+
+21:59.480 --> 22:03.120
+or come up here, join us on BBB.
+
+22:03.120 --> 22:06.240
+Yeah, we can hang out here for a little bit longer.
+
+22:06.240 --> 22:07.960
+The stream will move on at some point
+
+22:07.960 --> 22:10.960
+but Ian, of course, and anyone else who is interested
+
+22:10.960 --> 22:14.280
+is welcome to hang out if Ian is around.
+
+22:14.280 --> 22:15.560
+Yeah.
+
+22:15.560 --> 22:16.960
+I will be around for a bit.
+
+22:16.960 --> 22:20.280
+I am on IRC all the time but I'm not always
+
+22:20.280 --> 22:21.280
+paying attention to it.
+
+22:21.280 --> 22:23.080
+You're welcome to reach out to me there.
+
+22:26.680 --> 22:32.160
+This is with almost all of my Emacs packages and stuff.
+
+22:32.160 --> 22:36.400
+This is in my Emacs Weirdware project on Codeburg.
+
+22:36.400 --> 22:40.360
+So codeburg.org slash Emacs dash weirdware
+
+22:40.360 --> 22:45.200
+has everything that I demoed and some other wonderful goodies
+
+22:45.200 --> 22:49.040
+that maybe you already know about and maybe you don't.
+
+22:49.040 --> 22:52.280
+I saw one other question from the chat, which
+
+22:52.280 --> 22:56.720
+is what do you use this for?
+
+22:56.720 --> 23:01.760
+Well, I mean, the main thing I use it for
+
+23:01.760 --> 23:07.600
+is discomfort for managing external devices.
+
+23:07.600 --> 23:13.040
+But this has been a really great research project
+
+23:13.040 --> 23:20.000
+just to understand D-Bus better, see what it can offer,
+
+23:20.000 --> 23:26.240
+and write some interesting code because what I really like
+
+23:26.240 --> 23:31.480
+is writing code that unlocks new possibilities
+
+23:31.480 --> 23:33.680
+to where people can look at it and say,
+
+23:33.680 --> 23:35.200
+oh, that gives me a great idea.
+
+23:35.200 --> 23:36.680
+I want to do this with it.
+
+23:36.680 --> 23:41.560
+And I see D-Base and this talk as really just pushing
+
+23:41.560 --> 23:43.360
+mindshare on this stuff.
+
+23:43.360 --> 23:47.160
+And really, the best result of this talk
+
+23:47.160 --> 23:50.960
+is for people to come out of it and say, wow, that was awesome.
+
+23:50.960 --> 23:55.120
+I can't wait to build something with it and go build new stuff.
+
+23:55.120 --> 23:57.120
+And just kind of building those platforms
+
+23:57.120 --> 24:00.600
+that other people can use and find helpful
+
+24:00.600 --> 24:03.120
+in whatever their programming journey is.
+
+24:03.120 --> 24:05.040
+That's the thing that I really like.
+
+24:05.040 --> 24:06.040
+That means a lot to me.
+
+24:06.040 --> 24:09.000
+So I hope that someone watches this
+
+24:09.000 --> 24:32.360
+and comes away with a good idea and goes and hacks on it.
+
+24:32.360 --> 24:34.360
+Looks like there's one more question.
+
+24:34.360 --> 24:38.520
+I'm not sure if we have time.
+
+24:38.520 --> 24:44.160
+I'll follow up in the pad if we end up over time on that.
+
+24:44.160 --> 24:45.840
+Yeah, we still have a couple more minutes,
+
+24:45.840 --> 25:12.480
+so it should be good.
+
+25:12.480 --> 25:15.040
+OK, so the last question is, it looks
+
+25:15.040 --> 25:19.400
+like D-Bus is mostly useful for Emacs to do IPC.
+
+25:19.400 --> 25:20.880
+If I understand correctly, this is
+
+25:20.880 --> 25:24.440
+how SIGTEX works when working with LaTeX docs.
+
+25:24.440 --> 25:26.960
+How does it compare with other ways of doing IPC,
+
+25:26.960 --> 25:29.360
+for example, communicating over a socket with MPD?
+
+25:32.960 --> 25:36.000
+So the main way that it's different
+
+25:36.000 --> 25:40.320
+is that MPD has its own protocol that you
+
+25:40.320 --> 25:46.280
+have to build support for in whatever your client is.
+
+25:46.280 --> 25:49.800
+D-Bus gives you a single, uniform way
+
+25:49.800 --> 25:52.520
+of talking to any service.
+
+25:52.520 --> 25:55.720
+So instead of having to reinvent that socket code
+
+25:55.720 --> 25:59.080
+and write the protocol support for MPD or whatever else,
+
+25:59.080 --> 26:02.280
+where you're taking the concrete, what
+
+26:02.280 --> 26:04.280
+are the bytes over the wire, and building
+
+26:04.280 --> 26:07.840
+an abstract programming interface that wraps that
+
+26:07.840 --> 26:12.360
+and drives those things, D-Bus already provides all of that.
+
+26:12.360 --> 26:15.240
+So you can say, here's a description of everything
+
+26:15.240 --> 26:18.760
+that I already do, and you can code gen stuff
+
+26:18.760 --> 26:20.800
+to do all of it.
+
+26:20.800 --> 26:24.840
+So I think that's the main difference between them.
+
+26:24.840 --> 26:26.840
+But it is over a socket.
+
+26:26.840 --> 26:31.040
+It's over a Unix socket for local stuff, TCP for remote.
+
+26:31.040 --> 26:33.000
+It is very similar.
+
+26:33.000 --> 26:34.480
+The main difference is that it is
+
+26:34.480 --> 26:37.080
+a framework for multiple applications
+
+26:37.080 --> 26:39.960
+rather than an application-specific mechanism,
+
+26:39.960 --> 26:42.200
+which makes it very easy to reuse
+
+26:42.200 --> 26:43.880
+in a variety of different contexts.
+
+26:43.880 --> 26:46.520
+And I think that's been key to its popularity
+
+26:46.520 --> 26:49.240
+over the last 10 years or so is the fact
+
+26:49.240 --> 26:52.880
+that it provides just enough opinion about how stuff should
+
+26:52.880 --> 26:56.400
+work that you don't have to think too hard about what
+
+26:56.400 --> 26:57.600
+should the protocol be.
+
+26:57.600 --> 26:58.640
+Should it be binary?
+
+26:58.640 --> 26:59.560
+Should it be text?
+
+26:59.560 --> 27:01.520
+Should it be S expressions?
+
+27:01.520 --> 27:02.640
+Should it be JSON?
+
+27:02.640 --> 27:05.080
+It's already done for you, and you can just think about,
+
+27:05.080 --> 27:06.880
+how do I connect it up?
+
+27:06.880 --> 27:08.840
+And I think that provides a lot of value.
+
+27:12.280 --> 27:14.440
+Yeah, and I can second that.
+
+27:14.440 --> 27:16.520
+It's been adopted by all sorts of different software
+
+27:16.520 --> 27:19.040
+projects, one of which I worked on.
+
+27:19.040 --> 27:21.560
+Jammy, people might know, GNU package
+
+27:21.560 --> 27:23.760
+for basically universal communication.
+
+27:23.760 --> 27:27.280
+It's basically a text messaging and also audio video calling
+
+27:27.280 --> 27:28.680
+and conferencing application.
+
+27:28.680 --> 27:31.400
+And it's Daemon, which runs in the background.
+
+27:31.400 --> 27:34.800
+It also supports D-Bus, so you can do all sorts of things,
+
+27:34.800 --> 27:38.280
+write little Python scripts or whatever,
+
+27:38.280 --> 27:40.480
+talk with it through D-Bus, give it commands
+
+27:40.480 --> 27:43.560
+to take calls from a particular point
+
+27:43.560 --> 27:46.920
+or just hang up calls or just do all sorts of things
+
+27:46.920 --> 27:48.080
+over D-Bus.
+
+27:48.080 --> 27:51.640
+And it is all, like you said, sort of application agnostic.
+
+27:51.640 --> 27:53.920
+It's not specific to, oh, how would I
+
+27:53.920 --> 27:58.520
+do this in a different way for each individual application?
+
+27:58.520 --> 27:59.200
+Yeah, exactly.
+
+27:59.200 --> 28:02.080
+It's the de facto way of doing that sort of stuff
+
+28:02.080 --> 28:04.680
+on Linux machines these days.
+
+28:04.680 --> 28:09.920
+And you can look back to some of the other message passing
+
+28:09.920 --> 28:13.920
+stuff in Windows and see it's drawn some inspiration
+
+28:13.920 --> 28:18.480
+from a variety of different places and different ways
+
+28:18.480 --> 28:21.560
+of doing that kind of interactivity.
+
+28:21.560 --> 28:24.080
+But it is, I mean, I don't think there was ever
+
+28:24.080 --> 28:26.240
+really a serious competitor to it,
+
+28:26.240 --> 28:28.080
+but it is the de facto standard if you
+
+28:28.080 --> 28:31.960
+want to do any kind of graphical program that
+
+28:31.960 --> 28:36.960
+manipulates your system or a batch program that
+
+28:36.960 --> 28:41.120
+drives an otherwise purely interactive graphical program.
+
+28:41.120 --> 28:42.720
+That's the tool.
+
+28:42.720 --> 28:47.880
+And there is not really any competitive landscape or reason
+
+28:47.880 --> 28:50.720
+to go reinventing it at this time.
+
+28:50.720 --> 28:51.480
+Sounds good.
+
+28:51.480 --> 28:52.760
+And I think that's all the time that we
+
+28:52.760 --> 28:53.720
+have on the live stream.
+
+28:53.720 --> 28:55.840
+Folks, you are welcome to stick around on IRC
+
+28:55.840 --> 28:58.160
+or come here on BBB and continue talking to Ian.
+
+28:58.160 --> 28:59.560
+Thank you, Ian.
+
+28:59.560 --> 29:00.080
+Wonderful.
+
+29:00.080 --> 29:01.240
+Thank you so much.
+
+29:01.240 --> 29:02.240
+Cheers.
+
+29:11.560 --> 29:12.040
+All right.
+
+29:12.040 --> 29:13.880
+I think the stream has moved on.
+
+29:13.880 --> 29:15.960
+Yeah, you're welcome to stay here, Ian, if you like,
+
+29:15.960 --> 29:18.080
+or just continue catching up with folks in IRC.
+
+29:20.840 --> 29:21.320
+Great.
+
+29:21.320 --> 29:22.960
+I will hang out here for a little bit
+
+29:22.960 --> 29:28.360
+in case someone wants to jump in and just write
+
+29:28.360 --> 29:30.560
+some stuff in the pad.
+
+29:30.560 --> 29:31.360
+Sounds good.
+
+29:31.360 --> 29:31.880
+Thank you.
+
+29:31.880 --> 29:34.680
+And I do see people are still writing or posting on the pad,
+
+29:34.680 --> 29:35.600
+so that's awesome.
+
+29:35.600 --> 29:36.720
+Yeah, sure thing.
+
+29:36.720 --> 29:37.240
+Awesome.
+
+29:37.240 --> 29:38.120
+Thank you so much.
+
+29:38.120 --> 29:38.600
+All right.
+
+29:38.600 --> 29:38.960
+Cheers.
+
+29:38.960 --> 29:39.480
+Welcome.
+
+29:39.480 --> 29:41.480
+And yeah, see you around on IRC.
+
+29:41.480 --> 29:42.880
+All right.
+
+29:42.880 --> 30:11.440
+All right.
+
diff --git a/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt
new file mode 100644
index 00000000..cc47a738
--- /dev/null
+++ b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main--chapters.vtt
@@ -0,0 +1,55 @@
+WEBVTT
+
+00:00:00.000 --> 00:01:07.879
+What is D-Bus?
+
+00:01:07.880 --> 00:01:45.359
+Why D-Bus?
+
+00:01:45.360 --> 00:02:55.359
+The D-Bus Model
+
+00:02:55.360 --> 00:03:19.999
+Well-known Busses
+
+00:03:20.000 --> 00:04:06.239
+Common interfaces
+
+00:04:06.240 --> 00:05:09.319
+Emacs Native D-Bus
+
+00:05:09.320 --> 00:05:23.879
+Debase
+
+00:05:23.880 --> 00:06:13.439
+Debase: Objects
+
+00:06:13.440 --> 00:06:51.079
+Debase: Retarget objects
+
+00:06:51.080 --> 00:07:12.479
+Debase: Object binding
+
+00:07:12.480 --> 00:07:29.399
+Debase: Raw binding
+
+00:07:29.400 --> 00:08:14.199
+Debase: Codegen
+
+00:08:14.200 --> 00:09:08.679
+Debase: Codegen example
+
+00:09:08.680 --> 00:09:44.479
+Debase: ObjectManager
+
+00:09:44.480 --> 00:11:01.479
+Demo: Discomfort
+
+00:11:01.480 --> 00:13:16.279
+Demo: Remote eval
+
+00:13:16.280 --> 00:14:11.879
+Demo: Remote Org capture
+
+00:14:11.880 --> 00:15:07.320
+Future directions
diff --git a/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt
new file mode 100644
index 00000000..c824d2db
--- /dev/null
+++ b/2022/captions/emacsconf-2022-dbus--the-wheels-on-dbus--ian-eure--main.vtt
@@ -0,0 +1,1126 @@
+WEBVTT captioned by sachac
+
+NOTE What is D-Bus?
+
+00:00:00.000 --> 00:00:04.879
+Welcome to my EmacsConf 2022 talk, The Wheels on D-Bus.
+
+00:00:04.880 --> 00:00:07.439
+In this talk, we'll cover what D-Bus is,
+
+00:00:07.440 --> 00:00:10.759
+why you might want to use it, and how to use it with Emacs.
+
+00:00:10.760 --> 00:00:13.679
+D-Bus is fundamentally based on passing messages
+
+00:00:13.680 --> 00:00:16.999
+in between processes, using the bus as a mediator.
+
+00:00:17.000 --> 00:00:20.599
+On top of this is built an RPC system with method invocation
+
+00:00:20.600 --> 00:00:22.799
+that has argument lists and return values,
+
+00:00:22.800 --> 00:00:25.479
+like you might find in any programming language.
+
+00:00:25.480 --> 00:00:27.839
+These are commonly used for verb-type actions
+
+00:00:27.840 --> 00:00:29.999
+like "restart my computer."
+
+00:00:30.000 --> 00:00:32.639
+You can also associate a collection of attributes
+
+00:00:32.640 --> 00:00:35.839
+with objects on the bus, and these are called properties.
+
+00:00:35.840 --> 00:00:39.839
+The properties can be read-only, write-only, or read-write.
+
+00:00:39.840 --> 00:00:43.159
+Signals are a way of notifying participants on the bus
+
+00:00:43.160 --> 00:00:45.999
+of updated state, and are the basis
+
+00:00:46.000 --> 00:00:47.799
+for building dynamic user interfaces
+
+00:00:47.800 --> 00:00:50.479
+that react to changes in the system.
+
+00:00:50.480 --> 00:00:52.759
+It has a static and strong type system,
+
+00:00:52.760 --> 00:00:55.359
+so if you send a message with the wrong type signature,
+
+00:00:55.360 --> 00:00:57.839
+it simply gets rejected instead of going through
+
+00:00:57.840 --> 00:00:59.599
+to the remote service.
+
+00:00:59.600 --> 00:01:02.319
+It also manages service life cycles,
+
+00:01:02.320 --> 00:01:04.399
+so you're not running services at all times.
+
+00:01:04.400 --> 00:01:07.879
+They can be started and stopped by D-Bus on demand.
+
+NOTE Why D-Bus?
+
+00:01:07.880 --> 00:01:10.519
+D-Bus has two major use cases.
+
+00:01:10.520 --> 00:01:13.359
+The first is acting as a lower-level substrate
+
+00:01:13.360 --> 00:01:14.679
+for higher-level programs,
+
+00:01:14.680 --> 00:01:16.919
+like a graphical desktop environment.
+
+00:01:16.920 --> 00:01:19.599
+For example, if you want to manage your network connectivity
+
+00:01:19.600 --> 00:01:21.239
+from your graphical environment,
+
+00:01:21.240 --> 00:01:23.919
+instead of having to build all of that from the ground up,
+
+00:01:23.920 --> 00:01:26.239
+you can rely on the D-Bus service to do that
+
+00:01:26.240 --> 00:01:28.679
+and only build the graphical component of it.
+
+00:01:28.680 --> 00:01:31.319
+This gives you consistency between desktop environments
+
+00:01:31.320 --> 00:01:33.799
+and reduces code duplication.
+
+00:01:33.800 --> 00:01:37.319
+Another application is automating desktop programs.
+
+00:01:37.320 --> 00:01:39.279
+If your program offers a D-Bus service,
+
+00:01:39.280 --> 00:01:40.959
+then it can be remote-controlled,
+
+00:01:40.960 --> 00:01:42.759
+and if all of your programs offer D-Bus,
+
+00:01:42.760 --> 00:01:45.359
+you can control your entire desktop.
+
+NOTE The D-Bus Model
+
+00:01:45.360 --> 00:01:48.559
+Let's look at the abstractions that D-Bus provides.
+
+00:01:48.560 --> 00:01:51.239
+The top level object is called a bus,
+
+00:01:51.240 --> 00:01:52.359
+and it's like a partition
+
+00:01:52.360 --> 00:01:54.919
+that messages get exchanged inside of.
+
+00:01:54.920 --> 00:01:57.279
+Messages don't cross buses.
+
+00:01:57.280 --> 00:01:59.559
+Inside of a bus are services.
+
+00:01:59.560 --> 00:02:03.159
+Services are normally identified in reverse FQDN order,
+
+00:02:03.160 --> 00:02:06.159
+so org.foobar.FooService.
+
+00:02:06.160 --> 00:02:08.599
+Each service provides some set of features
+
+00:02:08.600 --> 00:02:11.759
+related to a particular area of functionality.
+
+00:02:11.760 --> 00:02:14.439
+Inside of each service are objects.
+
+00:02:14.440 --> 00:02:16.599
+Objects use a path notation,
+
+00:02:16.600 --> 00:02:19.759
+and usually follow the same reverse FQDN format
+
+00:02:19.760 --> 00:02:21.959
+as the service identifier.
+
+00:02:21.960 --> 00:02:24.879
+Each object has one or more interfaces.
+
+00:02:24.880 --> 00:02:27.279
+An interface is like a facet that you can use
+
+00:02:27.280 --> 00:02:29.479
+to interact with an object,
+
+00:02:29.480 --> 00:02:32.239
+and inside of the interface are properties, methods,
+
+00:02:32.240 --> 00:02:33.999
+and signals, which we covered before.
+
+00:02:34.000 --> 00:02:37.039
+Properties are attributes that can be read or written.
+
+00:02:37.040 --> 00:02:40.239
+Methods are verbs that you can call to invoke an action,
+
+00:02:40.240 --> 00:02:43.319
+and a signal is something that's used to move state
+
+00:02:43.320 --> 00:02:47.239
+in between a service and another participant on the bus.
+
+00:02:47.240 --> 00:02:49.599
+There can be any number of interfaces on an object,
+
+00:02:49.600 --> 00:02:51.479
+any number of objects in a service,
+
+00:02:51.480 --> 00:02:53.439
+and any number of services on a bus,
+
+00:02:53.440 --> 00:02:55.359
+and any number of buses on a system.
+
+NOTE Well-known Busses
+
+00:02:55.360 --> 00:03:00.039
+There are two well-known busses,
+
+00:03:00.040 --> 00:03:02.359
+and these roughly map to those two use cases
+
+00:03:02.360 --> 00:03:03.639
+I mentioned before.
+
+00:03:03.640 --> 00:03:06.479
+The system bus is for interfacing with hardware
+
+00:03:06.480 --> 00:03:08.439
+and operating-system-level concerns
+
+00:03:08.440 --> 00:03:11.679
+like disks, networks, and so forth.
+
+00:03:11.680 --> 00:03:14.319
+The session bus is tied to a user login,
+
+00:03:14.320 --> 00:03:19.999
+and is more in the desktop automation use case.
+
+NOTE Common interfaces
+
+00:03:20.000 --> 00:03:21.919
+There are some common interfaces you'll find
+
+00:03:21.920 --> 00:03:23.959
+if you go exploring D-Bus.
+
+00:03:23.960 --> 00:03:25.999
+The Introspectable interface is the basis
+
+00:03:26.000 --> 00:03:27.919
+of a lot of the reflection features.
+
+00:03:27.920 --> 00:03:30.119
+It has a single method called introspect
+
+00:03:30.120 --> 00:03:32.239
+that returns the XML interface description
+
+00:03:32.240 --> 00:03:33.399
+of whatever you call it on.
+
+00:03:33.400 --> 00:03:36.559
+Peer is used for lower level connectivity,
+
+00:03:36.560 --> 00:03:39.679
+for example, pinging a service to see if it's running.
+
+00:03:39.680 --> 00:03:41.759
+And the Properties interface is the basis
+
+00:03:41.760 --> 00:03:43.119
+of the read-write properties,
+
+00:03:43.120 --> 00:03:45.799
+which are secretly method calls under the cover.
+
+00:03:45.800 --> 00:03:48.519
+Just about every object you interact with on D-Bus
+
+00:03:48.520 --> 00:03:51.399
+will support all three of these interfaces.
+
+00:03:51.400 --> 00:03:54.759
+Additionally, ObjectManager is used for services
+
+00:03:54.760 --> 00:03:56.759
+that manage collections of objects.
+
+00:03:56.760 --> 00:03:59.839
+For example, the disk service has an object
+
+00:03:59.840 --> 00:04:01.279
+for each disk that's attached,
+
+00:04:01.280 --> 00:04:02.799
+and the object manager allows you
+
+00:04:02.800 --> 00:04:06.239
+to enumerate all of those.
+
+NOTE Emacs Native D-Bus
+
+00:04:06.240 --> 00:04:10.359
+Emacs supports D-Bus natively since version 23.1.
+
+00:04:10.360 --> 00:04:12.119
+It's a combination of native bindings
+
+00:04:12.120 --> 00:04:14.639
+with a C library and dbus.el.
+
+00:04:14.640 --> 00:04:17.559
+While there are some ports of D-Bus
+
+00:04:17.560 --> 00:04:19.479
+to non-Linux operating systems,
+
+00:04:19.480 --> 00:04:22.039
+it's probably only available on Linux
+
+00:04:22.040 --> 00:04:24.439
+and almost certainly only usable on Linux.
+
+00:04:24.440 --> 00:04:28.919
+If you want to interact with D-Bus from Emacs,
+
+00:04:28.920 --> 00:04:30.079
+it's fairly straightforward.
+
+00:04:30.080 --> 00:04:33.199
+There's a collection of functions like dbus-get-property
+
+00:04:33.200 --> 00:04:35.039
+or dbus-call-method, et cetera,
+
+00:04:35.040 --> 00:04:37.639
+and they almost all take this same set
+
+00:04:37.640 --> 00:04:39.319
+of four arguments at the beginning:
+
+00:04:39.320 --> 00:04:42.119
+bus, service, path, and interface.
+
+00:04:42.120 --> 00:04:45.439
+In this case, it takes a single additional property,
+
+00:04:45.440 --> 00:04:46.599
+which is the one to read.
+
+00:04:46.600 --> 00:04:49.679
+And what we're calling is the hostname1 service,
+
+00:04:49.680 --> 00:04:51.519
+which gives you just a little bit of information
+
+00:04:51.520 --> 00:04:54.759
+about the system, like its hostname or its chassis.
+
+00:04:54.760 --> 00:04:56.199
+And in this case, you can see I'm running
+
+00:04:56.200 --> 00:04:57.719
+this presentation off my laptop.
+
+00:04:57.720 --> 00:05:00.959
+The problem with this and what I don't like about it
+
+00:05:00.960 --> 00:05:04.599
+is that all of these identifiers are very verbose
+
+00:05:04.600 --> 00:05:05.719
+and very repetitive.
+
+00:05:05.720 --> 00:05:07.679
+And if you end up calling these a lot,
+
+00:05:07.680 --> 00:05:09.319
+it gets old really quickly.
+
+NOTE Debase
+
+00:05:09.320 --> 00:05:12.999
+So I wrote a wrapper called Debase,
+
+00:05:13.000 --> 00:05:15.839
+which is convenience on top of the built-in functions.
+
+00:05:15.840 --> 00:05:18.839
+Most of the stock functions have Debase versions
+
+00:05:18.840 --> 00:05:21.519
+just by replacing "dbus" with "debase".
+
+00:05:21.520 --> 00:05:23.879
+And let's look how that works.
+
+NOTE Debase: Objects
+
+00:05:23.880 --> 00:05:27.999
+The fundamental idea of Debase is that you can bind together
+
+00:05:28.000 --> 00:05:30.319
+all of those arguments into a single object
+
+00:05:30.320 --> 00:05:31.559
+that represents the endpoint.
+
+00:05:31.560 --> 00:05:35.599
+This is an EIEIO class, and it takes keyword arguments,
+
+00:05:35.600 --> 00:05:36.879
+so there's never any chance
+
+00:05:36.880 --> 00:05:38.559
+of mixing up which thing is what.
+
+00:05:38.560 --> 00:05:41.479
+So this sets the endpoint to that object,
+
+00:05:41.480 --> 00:05:43.119
+calls debase-get-property on it,
+
+00:05:43.120 --> 00:05:45.039
+and you can see it works exactly the same.
+
+00:05:45.040 --> 00:05:47.359
+The thing that's really nice about this, though,
+
+00:05:47.360 --> 00:05:50.199
+is it knows that so many of these arguments
+
+00:05:50.200 --> 00:05:52.919
+are very similar that it can compute most of them
+
+00:05:52.920 --> 00:05:54.279
+if you don't provide them all.
+
+00:05:54.280 --> 00:05:57.159
+So if you just say service, it will assume
+
+00:05:57.160 --> 00:05:59.159
+that you want the same object that matches
+
+00:05:59.160 --> 00:06:00.879
+and the same interface that matches,
+
+00:06:00.880 --> 00:06:02.319
+and it works just the same.
+
+00:06:02.320 --> 00:06:04.879
+I find this very, very convenient.
+
+00:06:04.880 --> 00:06:07.239
+You can also reuse the object
+
+00:06:07.240 --> 00:06:09.159
+instead of having to repeat every argument
+
+00:06:09.160 --> 00:06:10.399
+with every function call,
+
+00:06:10.400 --> 00:06:13.439
+which is a really great improvement in ergonomics.
+
+NOTE Debase: Retarget objects
+
+00:06:13.440 --> 00:06:18.119
+Because so many objects have multiple interfaces,
+
+00:06:18.120 --> 00:06:20.319
+you often find yourself needing to look
+
+00:06:20.320 --> 00:06:22.479
+at a different aspect of that object.
+
+00:06:22.480 --> 00:06:26.599
+This is supported with the built-in EIEIO clone method,
+
+00:06:26.600 --> 00:06:28.279
+which takes an object
+
+00:06:28.280 --> 00:06:30.439
+and a set of keyword arguments to replace.
+
+00:06:30.440 --> 00:06:32.599
+So in this case, we can see we're calling
+
+00:06:32.600 --> 00:06:33.479
+the Properties method,
+
+00:06:33.480 --> 00:06:35.799
+but everything else on that endpoint is the same.
+
+00:06:35.800 --> 00:06:38.079
+And then we're gonna call the method GetAll
+
+00:06:38.080 --> 00:06:39.359
+on that Properties interface,
+
+00:06:39.360 --> 00:06:41.119
+and it's going to return all the properties
+
+00:06:41.120 --> 00:06:43.919
+of the org.freedesktop.hostname1 interface
+
+00:06:43.920 --> 00:06:45.199
+inside of that object.
+
+00:06:45.200 --> 00:06:48.199
+And if we run that, we can see there's the hostname
+
+00:06:48.200 --> 00:06:50.159
+and some other information about the laptop
+
+00:06:50.160 --> 00:06:51.079
+that I'm running this on.
+
+NOTE Debase: Object binding
+
+00:06:51.080 --> 00:06:54.399
+Debase also supports object binding.
+
+00:06:54.400 --> 00:06:58.559
+This creates a lexical context in which the Debase object
+
+00:06:58.560 --> 00:07:01.119
+is the implicit target of any D-Bus function.
+
+00:07:01.120 --> 00:07:03.279
+This is really convenient if you need
+
+00:07:03.280 --> 00:07:06.479
+to fetch multiple properties or otherwise interact
+
+00:07:06.480 --> 00:07:09.319
+with the same endpoint in multiple different ways.
+
+00:07:09.320 --> 00:07:11.359
+And you can see I'm still on a laptop
+
+00:07:11.360 --> 00:07:12.479
+and it's still named meson.
+
+NOTE Debase: Raw binding
+
+00:07:12.480 --> 00:07:16.319
+You can also, if you don't want to use the object,
+
+00:07:16.320 --> 00:07:18.239
+you can provide the raw argument list.
+
+00:07:18.240 --> 00:07:20.919
+Under the covers, this is basically an flet
+
+00:07:20.920 --> 00:07:23.279
+where you're currying all of these functions
+
+00:07:23.280 --> 00:07:25.439
+so they start with those argument lists.
+
+00:07:25.440 --> 00:07:27.799
+And you can see I'm running on a Linux machine,
+
+00:07:27.800 --> 00:07:29.399
+which should not be surprising.
+
+NOTE Debase: Codegen
+
+00:07:29.400 --> 00:07:34.079
+Debase also has an experimental code generation feature.
+
+00:07:34.080 --> 00:07:38.359
+It outputs EIEIO code with one class per D-Bus interface.
+
+00:07:38.360 --> 00:07:41.079
+This includes accessors for all of its properties
+
+00:07:41.080 --> 00:07:44.159
+with an in-process cache, so if you read one property,
+
+00:07:44.160 --> 00:07:46.399
+you don't have to go back to the bus to read it again.
+
+00:07:46.400 --> 00:07:50.119
+It also outputs generic functions and method implementations
+
+00:07:50.120 --> 00:07:52.199
+for the D-Bus interface methods.
+
+00:07:52.200 --> 00:07:54.279
+It includes name-mangling options,
+
+00:07:54.280 --> 00:07:56.879
+so you can control how everything is named.
+
+00:07:56.880 --> 00:07:58.639
+And you can generate the code either
+
+00:07:58.640 --> 00:08:00.279
+via introspecting a live system
+
+00:08:00.280 --> 00:08:02.639
+or providing an XML interface description,
+
+00:08:02.640 --> 00:08:04.279
+which is handy if you want to use it
+
+00:08:04.280 --> 00:08:05.919
+as part of a non-interactive build.
+
+00:08:05.920 --> 00:08:08.159
+I think this has a lot of promise,
+
+00:08:08.160 --> 00:08:09.679
+but it doesn't feel quite right yet,
+
+00:08:09.680 --> 00:08:14.199
+so any feedback or contributions are very welcome.
+
+NOTE Debase: Codegen example
+
+00:08:14.200 --> 00:08:16.919
+Let's generate some Elisp code
+
+00:08:16.920 --> 00:08:19.639
+for that hostname1 service we were interacting with before.
+
+00:08:19.640 --> 00:08:23.119
+debase-gen-class is the generation class,
+
+00:08:23.120 --> 00:08:26.079
+and it says to create a class that matches this interface,
+
+00:08:26.080 --> 00:08:28.999
+named "hostname1", and then the rest of these arguments
+
+00:08:29.000 --> 00:08:30.999
+are the same ones to target the endpoint,
+
+00:08:31.000 --> 00:08:32.919
+just like with debase-object,
+
+00:08:32.920 --> 00:08:34.759
+because it extends debase-object.
+
+00:08:34.760 --> 00:08:37.679
+debase-gen-code is a generic function
+
+00:08:37.680 --> 00:08:40.119
+that takes any debase-gen class.
+
+00:08:40.120 --> 00:08:42.279
+There are different classes for functions,
+
+00:08:42.280 --> 00:08:43.359
+properties, et cetera,
+
+00:08:43.360 --> 00:08:45.479
+and it creates all of the code for it.
+
+00:08:45.480 --> 00:08:48.279
+If we evaluate it, we can see the results
+
+00:08:48.280 --> 00:08:49.959
+look about like we would expect:
+
+00:08:49.960 --> 00:08:52.159
+creates a defclass named "hostname1",
+
+00:08:52.160 --> 00:08:53.879
+which extends debase-object,
+
+00:08:53.880 --> 00:08:56.639
+has all of the slots and accessors defined,
+
+00:08:56.640 --> 00:08:59.319
+and then methods that define everything
+
+00:08:59.320 --> 00:09:01.839
+that you might want to do with it, including documentation.
+
+00:09:01.840 --> 00:09:04.759
+This is based on introspecting a running system,
+
+00:09:04.760 --> 00:09:05.479
+but as I mentioned,
+
+00:09:05.480 --> 00:09:08.039
+you can provide an XML interface description instead,
+
+00:09:08.040 --> 00:09:08.679
+if you like.
+
+NOTE Debase: ObjectManager
+
+00:09:08.680 --> 00:09:12.279
+Debase also comes with "debase-objectmanager",
+
+00:09:12.280 --> 00:09:15.399
+which is convenience for the D-Bus ObjectManager interface.
+
+00:09:15.400 --> 00:09:17.999
+This is used in a lot of places in D-Bus,
+
+00:09:18.000 --> 00:09:20.279
+where an object manages other objects.
+
+00:09:20.280 --> 00:09:22.719
+For example, the NetworkManager object
+
+00:09:22.720 --> 00:09:25.159
+manages network hardware objects,
+
+00:09:25.160 --> 00:09:26.879
+and using the ObjectManager interface,
+
+00:09:26.880 --> 00:09:28.879
+you can enumerate all of the network hardware,
+
+00:09:28.880 --> 00:09:31.039
+and by subscribing to the signals,
+
+00:09:31.040 --> 00:09:32.999
+you can be notified when they change.
+
+00:09:33.000 --> 00:09:35.999
+"debase-objectmanager" keeps a local cache,
+
+00:09:36.000 --> 00:09:38.119
+and will fire a callback on any change.
+
+00:09:38.120 --> 00:09:41.239
+So it's the building block for that dynamic user interface,
+
+00:09:41.240 --> 00:09:43.119
+like you would see in a desktop system,
+
+00:09:43.120 --> 00:09:44.479
+but inside of Emacs.
+
+NOTE Demo: Discomfort
+
+00:09:44.480 --> 00:09:47.759
+Let's do some demos.
+
+00:09:47.760 --> 00:09:51.039
+Discomfort is an interface I wrote for UDisks2,
+
+00:09:51.040 --> 00:09:53.719
+which is what manages all of the block device hardware.
+
+00:09:53.720 --> 00:09:57.679
+And again, it has that dynamic desktop-like interactivity,
+
+00:09:57.680 --> 00:10:00.279
+and mostly will just do what you mean.
+
+00:10:00.280 --> 00:10:03.519
+This is definitely alpha state.
+
+00:10:03.520 --> 00:10:04.839
+It doesn't have all the features,
+
+00:10:04.840 --> 00:10:06.559
+but it's good enough that I use it daily.
+
+00:10:06.560 --> 00:10:08.879
+So here's Discomfort,
+
+00:10:08.880 --> 00:10:11.679
+and you can see it has a list of all your hardware,
+
+00:10:11.680 --> 00:10:13.639
+what type it is, and where it's mounted.
+
+00:10:13.640 --> 00:10:16.199
+I have a little USB extension cable here,
+
+00:10:16.200 --> 00:10:17.679
+and I'm gonna plug in a disc,
+
+00:10:17.680 --> 00:10:19.319
+just to show you how this works.
+
+00:10:19.320 --> 00:10:21.079
+You can see when I plug it in,
+
+00:10:21.080 --> 00:10:22.399
+just a moment later,
+
+00:10:22.400 --> 00:10:24.439
+it shows up in that list, automatically.
+
+00:10:24.440 --> 00:10:25.719
+I don't have to press any key,
+
+00:10:25.720 --> 00:10:27.759
+I don't have to refresh it, it's just there.
+
+00:10:27.760 --> 00:10:29.519
+If I unplug it, it's gone.
+
+00:10:29.520 --> 00:10:30.719
+Plug it back in,
+
+00:10:30.720 --> 00:10:33.399
+and there it is.
+
+00:10:33.400 --> 00:10:35.239
+And you can see it's an encrypted volume.
+
+00:10:35.240 --> 00:10:37.279
+So in order to do anything with this,
+
+00:10:37.280 --> 00:10:38.679
+I'm going to have to supply a password.
+
+00:10:38.680 --> 00:10:41.759
+Just pressing Enter goes into the "do what I mean" mode,
+
+00:10:41.760 --> 00:10:43.519
+and it asks for the password.
+
+00:10:43.520 --> 00:10:46.599
+In this case, I've chosen the very secure password
+
+00:10:46.600 --> 00:10:47.559
+of "password".
+
+00:10:47.560 --> 00:10:51.199
+I hit Enter, and it unlocks it, and it mounts it,
+
+00:10:51.200 --> 00:10:53.319
+and it opens "dired" looking at it.
+
+00:10:53.320 --> 00:10:54.439
+And here's a little README.
+
+00:10:54.440 --> 00:10:55.559
+Let's see what it says.
+
+00:10:55.560 --> 00:10:58.559
+"Hello, EmacsConf."
+
+00:10:58.560 --> 00:11:01.479
+So that's my demo of discomfort.
+
+NOTE Demo: Remote eval
+
+00:11:01.480 --> 00:11:05.839
+In addition to acting as a client for D-Bus,
+
+00:11:05.840 --> 00:11:09.359
+Emacs can also offer services to other D-Bus clients.
+
+00:11:09.360 --> 00:11:11.959
+This is a really interesting opportunity
+
+00:11:11.960 --> 00:11:14.119
+because it allows many different programs
+
+00:11:14.120 --> 00:11:15.279
+to integrate with Emacs
+
+00:11:15.280 --> 00:11:17.679
+in ways that were previously very difficult.
+
+00:11:17.680 --> 00:11:20.239
+You can use this as an alternative to Emacs.
+
+00:11:20.240 --> 00:11:23.199
+The difference is D-Bus provides a full API,
+
+00:11:23.200 --> 00:11:24.999
+so instead of emacsclient being
+
+00:11:25.000 --> 00:11:26.679
+a sort of fire-and-forget system,
+
+00:11:26.680 --> 00:11:30.119
+you can actually get results back from the remote operation.
+
+00:11:30.120 --> 00:11:31.999
+So here's some code.
+
+00:11:32.000 --> 00:11:35.679
+Here's a dbus-eval function, which takes a string,
+
+00:11:35.680 --> 00:11:37.359
+reads it, and evaluates it,
+
+00:11:37.360 --> 00:11:39.359
+and returns whatever that value is.
+
+00:11:39.360 --> 00:11:41.839
+Then we have a debase-bind block
+
+00:11:41.840 --> 00:11:44.799
+that sets up an object on the session bus.
+
+00:11:44.800 --> 00:11:46.839
+Again, that's my user login bus.
+
+00:11:46.840 --> 00:11:49.559
+It offers this D-Bus service Emacs.
+
+00:11:49.560 --> 00:11:53.399
+This is a constant inside of the dbus.el package.
+
+00:11:53.400 --> 00:11:55.439
+And again, the path is a constant in there.
+
+00:11:55.440 --> 00:11:57.159
+And we're gonna create this interface,
+
+00:11:57.160 --> 00:12:02.519
+org.gnu.Emacs.Eval, and then register a method called Eval
+
+00:12:02.520 --> 00:12:04.759
+that calls that dbus-eval function.
+
+00:12:04.760 --> 00:12:08.119
+Pretty straightforward, only a handful of lines of code.
+
+00:12:08.120 --> 00:12:12.399
+To test this out, we're going to use the dbus-send utility.
+
+00:12:12.400 --> 00:12:15.399
+This is a command line program that interacts with D-Bus.
+
+00:12:15.400 --> 00:12:18.079
+We're going to tell it to wait for and print the reply,
+
+00:12:18.080 --> 00:12:20.999
+that the message should be sent to the session bus,
+
+00:12:21.000 --> 00:12:22.599
+that we're going to talk
+
+00:12:22.600 --> 00:12:25.639
+to the org.gnu.Emacs service on that bus,
+
+00:12:25.640 --> 00:12:30.879
+and the /org/gnu/Emacs object inside that service.
+
+00:12:30.880 --> 00:12:33.039
+On that object, we're gonna interact
+
+00:12:33.040 --> 00:12:35.999
+with the org.gnu.Emacs.Eval interface
+
+00:12:36.000 --> 00:12:37.639
+and call its Eval method.
+
+00:12:37.640 --> 00:12:40.639
+We're gonna call that method with a single string argument,
+
+00:12:40.640 --> 00:12:42.639
+which is indicated by the string prefix,
+
+00:12:42.640 --> 00:12:44.999
+and then a form to evaluate.
+
+00:12:45.000 --> 00:12:46.999
+I actually have to run this from a shell,
+
+00:12:47.000 --> 00:12:49.399
+because if I try using it in Org, it wedges.
+
+00:12:49.400 --> 00:12:51.959
+org-babel blocks waiting on completion,
+
+00:12:51.960 --> 00:12:54.519
+which blocks the D-Bus service from responding.
+
+00:12:54.520 --> 00:12:57.399
+I really wish Emacs was multi-threaded.
+
+00:12:57.400 --> 00:12:59.919
+But let's try it out.
+
+00:12:59.920 --> 00:13:02.719
+So if we run this, we can see that we get a return,
+
+00:13:02.720 --> 00:13:05.239
+and that's an unsigned integer of 32 bits
+
+00:13:05.240 --> 00:13:06.439
+with a value of 3.
+
+00:13:06.440 --> 00:13:09.959
+So like I was saying, this is really a two-way API
+
+00:13:09.960 --> 00:13:11.719
+where you can communicate back and forth
+
+00:13:11.720 --> 00:13:13.399
+between Emacs and another program.
+
+00:13:13.400 --> 00:13:14.959
+It's not just fire-and-forget.
+
+00:13:14.960 --> 00:13:16.279
+I think that's really cool.
+
+NOTE Demo: Remote Org capture
+
+00:13:16.280 --> 00:13:18.519
+Let's try another demo.
+
+00:13:18.520 --> 00:13:20.599
+What about a remote org-capture?
+
+00:13:20.600 --> 00:13:22.999
+What if you could trigger an org-capture
+
+00:13:23.000 --> 00:13:24.679
+from any program on your desktop?
+
+00:13:24.680 --> 00:13:26.239
+I think that would be pretty cool.
+
+00:13:26.240 --> 00:13:30.239
+And we can see, there it is.
+
+00:13:30.240 --> 00:13:38.919
+All right, I think I've got that one covered.
+
+00:13:38.920 --> 00:13:42.319
+So I do want to say that remote eval is probably a bad idea
+
+00:13:42.320 --> 00:13:43.479
+from a security perspective,
+
+00:13:43.480 --> 00:13:46.759
+but the point of this is some quick and dirty demonstrations
+
+00:13:46.760 --> 00:13:49.799
+of what can happen and to get people's imaginations flowing,
+
+00:13:49.800 --> 00:13:51.719
+because I think this is something
+
+00:13:51.720 --> 00:13:54.079
+that offers a lot of promise for Emacs.
+
+00:13:54.080 --> 00:13:57.799
+I think having a full-blown Emacs desktop environment
+
+00:13:57.800 --> 00:13:59.879
+where it can do all the things that a GNOME
+
+00:13:59.880 --> 00:14:02.759
+or a KDE environment can do is very exciting.
+
+00:14:02.760 --> 00:14:06.439
+And if you want to have a traditional GUI with Emacs
+
+00:14:06.440 --> 00:14:08.679
+as a more integrated participant of it,
+
+00:14:08.680 --> 00:14:11.879
+its service mechanism offers a lot of ability to do that.
+
+NOTE Future directions
+
+00:14:11.880 --> 00:14:15.999
+In the micro sense, I think there's a lot of improvements
+
+00:14:16.000 --> 00:14:19.279
+that can be made to either dbus.el or to dbase.
+
+00:14:19.280 --> 00:14:21.639
+The main one is handling of the type system.
+
+00:14:21.640 --> 00:14:25.839
+Lisp's dynamic type system doesn't mesh particularly well
+
+00:14:25.840 --> 00:14:28.799
+with the static strong type system that D-bus offers,
+
+00:14:28.800 --> 00:14:31.359
+and having some convenience to assist that
+
+00:14:31.360 --> 00:14:32.639
+would be very helpful.
+
+00:14:32.640 --> 00:14:35.319
+There's also some weird interfaces.
+
+00:14:35.320 --> 00:14:38.119
+For example, some things return identifiers
+
+00:14:38.120 --> 00:14:40.919
+as an array of integer code points instead of a string,
+
+00:14:40.920 --> 00:14:43.719
+and there should be a common way of handling that.
+
+00:14:43.720 --> 00:14:46.159
+I also think that the service support could be improved.
+
+00:14:46.160 --> 00:14:48.039
+Even though I gave the demo service,
+
+00:14:48.040 --> 00:14:50.479
+it's not really a great D-bus citizen
+
+00:14:50.480 --> 00:14:53.079
+because it doesn't offer that introspection mechanism,
+
+00:14:53.080 --> 00:14:55.919
+and so the actual methods are pretty much invisible
+
+00:14:55.920 --> 00:14:56.919
+to other participants,
+
+00:14:56.920 --> 00:15:00.079
+unless they already know that you're using Emacs.
+
+00:15:00.080 --> 00:15:01.799
+That's my talk.
+
+00:15:01.800 --> 00:15:02.559
+Thank you.
+
+00:15:02.560 --> 00:15:07.320
+You can find me on mastodon.social or on libera.chat.
diff --git a/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt
new file mode 100644
index 00000000..7d9c7920
--- /dev/null
+++ b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--answers.vtt
@@ -0,0 +1,1028 @@
+WEBVTT
+
+00:00.000 --> 00:02.360
+Thank you for the great talk, Niklas.
+
+00:02.360 --> 00:05.040
+And yes, the Q&A is now open.
+
+00:05.040 --> 00:09.320
+Folks, feel free to post your questions on the pattern IRC.
+
+00:09.320 --> 00:10.900
+And after a minute or two, we'll also
+
+00:10.900 --> 00:12.680
+open up this big blue button for people
+
+00:12.680 --> 00:15.820
+who might prefer to come join Niklas here directly
+
+00:15.820 --> 00:17.680
+and ask the questions here.
+
+00:17.680 --> 00:20.240
+Niklas, take it away.
+
+00:20.240 --> 00:21.000
+All right.
+
+00:21.000 --> 00:21.720
+Thank you.
+
+00:21.720 --> 00:25.040
+And thanks for having me.
+
+00:25.040 --> 00:28.720
+Yeah, maybe I'll go ahead and read some questions
+
+00:28.720 --> 00:32.880
+that have popped up in the formula here then.
+
+00:32.880 --> 00:37.440
+So the first question is, can it replace SSH plus TMAX
+
+00:37.440 --> 00:42.280
+for persistent sessions on remote hosts?
+
+00:42.280 --> 00:46.440
+So currently, I would say it does not
+
+00:46.440 --> 00:49.720
+support that because it is designed
+
+00:49.720 --> 00:53.440
+to only run a single command inside a session.
+
+00:53.440 --> 00:59.920
+And when that finishes, it reports back.
+
+00:59.920 --> 01:01.640
+But I have played with the idea.
+
+01:01.640 --> 01:04.480
+I think it should be possible to do.
+
+01:04.480 --> 01:08.640
+But I wanted to start off and polish the experience
+
+01:08.640 --> 01:12.720
+with a single command first.
+
+01:12.720 --> 01:16.880
+And secondly, there is a question.
+
+01:16.880 --> 01:20.880
+I see integration with projectile in the README.
+
+01:20.880 --> 01:23.960
+Does it also integrate with project.io?
+
+01:28.400 --> 01:30.200
+Yeah, good question.
+
+01:30.200 --> 01:31.840
+It doesn't.
+
+01:31.840 --> 01:37.920
+I haven't added any explicit support for it
+
+01:37.920 --> 01:43.880
+because I typically run detached compiling in the project
+
+01:43.880 --> 01:49.160
+root with my own command using project behind the scenes.
+
+01:49.160 --> 01:51.880
+But I guess project has a command for it now.
+
+01:51.880 --> 02:21.840
+So yeah, it should be very easy to add support for that.
+
+02:21.840 --> 02:28.000
+And I could also mention that could be one thing related
+
+02:28.000 --> 02:31.480
+to the first questionnaire of using kind of persistent
+
+02:31.480 --> 02:37.560
+sessions, that it would be interesting to see if,
+
+02:37.560 --> 02:44.000
+for example, I occasionally run Python REPL in Emacs.
+
+02:44.000 --> 02:48.000
+And if I could get that one to launch using detach,
+
+02:48.000 --> 02:52.960
+so I could restart Emacs and reattach to the REPL
+
+02:52.960 --> 02:57.920
+or also use it for situations where I have used the REPL
+
+02:57.920 --> 03:02.000
+to, let's say, experiment with, I don't know,
+
+03:02.000 --> 03:04.720
+some NumPy function, how that works.
+
+03:04.720 --> 03:10.400
+And if I use detach for that, it would automatically
+
+03:10.400 --> 03:12.920
+log then the whole session.
+
+03:12.920 --> 03:15.360
+And I would have it accessible.
+
+03:15.360 --> 03:19.560
+So I could search for it in retrospect
+
+03:19.560 --> 03:23.880
+and retrieve the log and see, OK, I ran this command.
+
+03:23.880 --> 03:26.760
+This happened, or basically.
+
+03:32.680 --> 03:35.320
+So then there is a question.
+
+03:35.320 --> 03:36.600
+Can you?
+
+03:36.600 --> 03:37.360
+Oh, OK.
+
+03:37.360 --> 03:38.800
+I'll read the other one.
+
+03:38.800 --> 03:43.400
+No, there is two in there.
+
+03:46.920 --> 03:48.040
+It's ongoing.
+
+03:48.040 --> 03:51.240
+I'll wait for them.
+
+03:51.240 --> 03:52.920
+So the first question is, can you
+
+03:52.920 --> 03:56.520
+detach a session from shell mode and reattach
+
+03:56.520 --> 04:01.920
+from eshell vterm mode or start a compile in a shell mode
+
+04:01.920 --> 04:09.120
+and attach it from compilation mode?
+
+04:09.120 --> 04:16.240
+Yeah, so you can attach at the moment
+
+04:16.240 --> 04:20.400
+or reattach in shell mode, eshell vterm.
+
+04:20.400 --> 04:25.680
+That is no problem.
+
+04:25.680 --> 04:33.880
+Currently, I don't have support for attaching in compilation
+
+04:33.880 --> 04:34.720
+mode.
+
+04:34.720 --> 04:39.040
+So the way the package is built is
+
+04:39.040 --> 04:44.280
+that when the session is started,
+
+04:44.280 --> 04:51.240
+there is a variable that gets inserted into the session.
+
+04:51.240 --> 04:56.280
+And it describes how the session would handle,
+
+04:56.280 --> 05:01.720
+for example, attaching to it or viewing the output, et cetera.
+
+05:04.480 --> 05:12.560
+But these are the things that I want to primarily focus
+
+05:12.560 --> 05:17.680
+in the near future, so making it easier to, for example,
+
+05:17.680 --> 05:21.040
+have a buffer up where you're attached to a session.
+
+05:21.040 --> 05:25.680
+You could run a key binding to switch
+
+05:25.680 --> 05:29.000
+to the view mode of that session.
+
+05:29.000 --> 05:32.800
+You get the full output, and then you could view it.
+
+05:32.800 --> 05:37.200
+You can switch back to the attached version, which
+
+05:37.200 --> 05:40.560
+just shows a brief context and then continues on
+
+05:40.560 --> 05:45.120
+with the current output from the session.
+
+05:45.120 --> 05:50.640
+Question number four here is, how do you talk to detach?
+
+05:50.640 --> 05:54.480
+Could it be feasible to run a child emacs instead
+
+05:54.480 --> 05:56.360
+of detach?
+
+05:56.360 --> 05:58.800
+Would it make sense?
+
+05:58.800 --> 06:02.520
+Better communication, maybe.
+
+06:02.520 --> 06:08.560
+So the way the talk with detach is done
+
+06:08.560 --> 06:11.680
+is, I would say, very simple.
+
+06:11.680 --> 06:19.480
+Detach the program supports basic instructions
+
+06:19.480 --> 06:25.320
+like detach dash a to attach, or yeah, that's basically it.
+
+06:28.080 --> 06:32.760
+And that is all that's being used under the hood.
+
+06:32.760 --> 06:37.280
+And of course, it uses its C flag
+
+06:37.280 --> 06:47.240
+to create and attach when a session is started, or the dash
+
+06:47.240 --> 06:52.440
+n to start the session in kind of detached mode.
+
+06:52.440 --> 06:55.440
+So it runs without emacs being attached to it.
+
+06:58.240 --> 07:05.720
+Currently, I don't think I've seen any need for a child emacs
+
+07:05.720 --> 07:08.920
+need for better communication.
+
+07:08.920 --> 07:15.400
+But if people have ideas about what could be done,
+
+07:15.400 --> 07:19.280
+if it was added, yeah, that would be great.
+
+07:19.280 --> 07:20.960
+So maybe that could be a follow up
+
+07:20.960 --> 07:24.640
+if you got ideas on how to improve it.
+
+07:24.640 --> 07:33.160
+Yeah, so I'm not sure if the emacs child, yeah,
+
+07:33.160 --> 07:36.360
+I think if I got a better idea about what
+
+07:36.360 --> 07:39.120
+the person would like to achieve with it,
+
+07:39.120 --> 07:43.000
+then maybe I could understand the question better there.
+
+07:45.880 --> 07:49.480
+So another question is, how does it handle processes
+
+07:49.480 --> 07:52.560
+that require you to do that?
+
+07:52.560 --> 07:55.440
+So processes that require user input,
+
+07:55.440 --> 07:59.080
+usually type yes, no, et cetera.
+
+07:59.080 --> 08:05.600
+MetaX compiles great, but can't handle user input.
+
+08:05.600 --> 08:16.600
+Yeah, so it's very simple behind the scenes.
+
+08:16.600 --> 08:21.320
+It depends on what interface you use for attaching emacs
+
+08:21.320 --> 08:23.160
+to that process.
+
+08:23.160 --> 08:27.680
+So as the person says, if it's MetaX compiled,
+
+08:27.680 --> 08:32.160
+then probably it doesn't handle it.
+
+08:32.160 --> 08:40.080
+So in that case, I guess I would have started it
+
+08:40.080 --> 08:42.680
+from the shell.
+
+08:42.680 --> 08:46.960
+If there is a question, you need to type yes or no,
+
+08:46.960 --> 08:53.000
+then you can just type it and maybe detach from it.
+
+08:53.000 --> 08:56.400
+Or if you end up in a situation where
+
+08:56.400 --> 09:00.080
+you started with MetaX compile, but then it has the question,
+
+09:00.080 --> 09:04.400
+I guess you could always pop up a shell attached
+
+09:04.400 --> 09:07.080
+to the session, and you will get the question there.
+
+09:07.080 --> 09:11.480
+You press whatever answer you'd like,
+
+09:11.480 --> 09:20.000
+and then detach from that user interface.
+
+09:20.000 --> 09:23.480
+So another question is, can you rerun a command session,
+
+09:23.480 --> 09:25.880
+but in another directory?
+
+09:28.560 --> 09:33.360
+Yeah, you can't do that at the moment.
+
+09:33.360 --> 09:38.120
+I haven't really found a need for it.
+
+09:38.120 --> 09:46.000
+So typically, as I have been using detach,
+
+09:46.000 --> 09:52.680
+now when it has a persistent storage of the sessions,
+
+09:52.680 --> 09:57.040
+it becomes rather natural that once I've run it once,
+
+09:57.040 --> 10:07.120
+I can just rerun it later in the same directory.
+
+10:07.120 --> 10:11.400
+But maybe this is a feature that should be added.
+
+10:11.400 --> 10:16.840
+It's maybe a common use case.
+
+10:16.840 --> 10:22.120
+One thing that I added on top of the rerun
+
+10:22.120 --> 10:25.280
+is like an edit and rerun for those situations
+
+10:25.280 --> 10:30.240
+where I maybe run some compilation,
+
+10:30.240 --> 10:34.960
+but with the compilation flag set to opt,
+
+10:34.960 --> 10:37.680
+and then I want to rerun the exact same command
+
+10:37.680 --> 10:43.600
+in the same directory, but with it set to dbg instead
+
+10:43.600 --> 10:44.520
+for debugging.
+
+10:44.520 --> 10:48.600
+And then instead of pressing R to rerun, I press E.
+
+10:48.600 --> 10:53.400
+Then I get a prompt with the current command,
+
+10:53.400 --> 10:57.640
+and then I can add it, and it will rerun that.
+
+10:57.640 --> 11:00.920
+So maybe something similar for another directory
+
+11:00.920 --> 11:05.320
+could be added.
+
+11:22.720 --> 11:23.200
+Cool.
+
+11:23.200 --> 11:27.200
+I think we still have about 13 or 14 more minutes of live Q&A
+
+11:27.200 --> 11:29.840
+time on stream, so if folks do have more questions
+
+11:29.840 --> 11:32.440
+about this talk from Nicolas, please
+
+11:32.440 --> 11:33.960
+feel free to put them on the pad,
+
+11:33.960 --> 11:36.560
+or come join here on the big blue button and ask here.
+
+11:40.400 --> 11:41.320
+Yeah.
+
+11:41.320 --> 11:47.600
+And I also want to mention that if you realize later
+
+11:47.600 --> 11:50.000
+you have a question or a suggestion,
+
+11:50.000 --> 11:57.200
+feel free to contact me or create a new post
+
+11:57.200 --> 12:00.960
+on the mailing list for the project.
+
+12:00.960 --> 12:02.720
+That's much appreciated.
+
+12:07.160 --> 12:09.720
+Sounds good.
+
+12:09.720 --> 12:10.240
+Yeah.
+
+12:10.240 --> 12:22.880
+So then there is a question incoming.
+
+12:22.880 --> 12:30.320
+So what are some other places where this might be useful?
+
+12:30.320 --> 12:32.760
+And you, for me, fetching that question
+
+12:32.760 --> 12:40.480
+is, what are some other places where this might be useful?
+
+12:40.480 --> 12:46.320
+And you, for me, fetching mail, get processes started by magic.
+
+12:46.320 --> 12:48.880
+What things would you like to see working
+
+12:48.880 --> 12:52.560
+in a one to two-year time frame?
+
+12:55.040 --> 12:58.520
+Yeah, that's a good question.
+
+12:58.520 --> 13:01.800
+I think there are these situations.
+
+13:01.800 --> 13:04.800
+One of the things that I ran into yesterday
+
+13:04.800 --> 13:11.320
+was that I was trying to use EMMS to connect
+
+13:11.320 --> 13:14.560
+to the stream for Emacs Conv.
+
+13:14.560 --> 13:17.640
+And that was working fine.
+
+13:17.640 --> 13:22.040
+It was using MPV in the background.
+
+13:22.040 --> 13:25.280
+But then I did some modifications to my Emacs
+
+13:25.280 --> 13:30.120
+and wanted to restart it, and then the stream died.
+
+13:30.120 --> 13:35.600
+Kind of those situations where I found it valuable,
+
+13:35.600 --> 13:41.800
+I added support for the D-RED R-Sync package,
+
+13:41.800 --> 13:44.440
+for example, that I use occasionally
+
+13:44.440 --> 13:51.480
+to copy things to a remote server
+
+13:51.480 --> 13:52.960
+or from a remote server.
+
+13:52.960 --> 13:56.280
+And yeah, that was always something
+
+13:56.280 --> 14:00.240
+that I thought could benefit from it.
+
+14:00.240 --> 14:08.000
+So I would ideally like to see if it
+
+14:08.000 --> 14:13.080
+can be used for more of these processes.
+
+14:15.680 --> 14:21.600
+I guess maybe I should get in contact
+
+14:21.600 --> 14:27.480
+with some of the devs to see if they have ideas on how this
+
+14:27.480 --> 14:33.360
+could be incorporated better with Emacs.
+
+14:33.360 --> 14:36.440
+Because so far, it was kind of straightforward
+
+14:36.440 --> 14:41.000
+to get it to work with Shell or Compile.
+
+14:41.000 --> 14:47.360
+But it hacks around the current implementation
+
+14:47.360 --> 14:48.760
+to make it use Detach.
+
+14:48.760 --> 14:55.360
+And if I wanted it to be used in many more places,
+
+14:55.360 --> 14:58.560
+it feels like it would be maybe not the best way
+
+14:58.560 --> 15:07.440
+to have a lot of advices being added to the various functions.
+
+15:07.440 --> 15:12.720
+But yeah, definitely, it would be really cool
+
+15:12.720 --> 15:17.760
+if that could be worked on properly
+
+15:17.760 --> 15:22.880
+so that once I've managed to get the workflow
+
+15:22.880 --> 15:27.080
+for its current implementation a little bit more polished,
+
+15:27.080 --> 15:38.600
+I will try to look into this and also see what is possible.
+
+15:38.600 --> 15:42.080
+I don't know if there are any limitations
+
+15:42.080 --> 15:49.360
+with my current approach that I need some more expertise on.
+
+16:12.080 --> 16:39.760
+Yeah, so if there is no other questions, I'll
+
+16:39.760 --> 16:53.960
+OK, there is another question.
+
+16:53.960 --> 16:59.720
+OK, a general topic here.
+
+16:59.720 --> 17:02.520
+What are you currently excited about in Emacs?
+
+17:02.520 --> 17:15.520
+Well, I'm really excited about the TreeSitter
+
+17:15.520 --> 17:21.120
+that was just added to Emacs 29.
+
+17:21.120 --> 17:27.240
+I haven't gotten around to use that yet.
+
+17:27.240 --> 17:29.640
+But I think it looks very promising.
+
+17:29.640 --> 17:37.440
+And I'm a big fan of structural editing
+
+17:37.440 --> 17:39.040
+that you can use in Lisp.
+
+17:39.040 --> 17:42.600
+So if this opens up the possibility
+
+17:42.600 --> 17:47.880
+to be able to use that more in other languages,
+
+17:47.880 --> 17:49.000
+that would be really cool.
+
+17:49.000 --> 17:56.880
+Otherwise, I'm generally excited about how
+
+17:56.880 --> 18:01.880
+the program is developing.
+
+18:01.880 --> 18:05.040
+I think there has been a lot of great additions
+
+18:05.040 --> 18:11.720
+in these last couple of versions of the program.
+
+18:11.720 --> 18:13.680
+So it's cool to see.
+
+18:13.680 --> 18:22.640
+And also how the Emacs Conf has been continuing
+
+18:22.640 --> 18:27.760
+and being an annual thing and also growing,
+
+18:27.760 --> 18:33.280
+adding this new layout with the general track
+
+18:33.280 --> 18:34.280
+and development track.
+
+18:34.280 --> 18:35.080
+I think it's great.
+
+18:39.080 --> 18:39.560
+Thanks.
+
+18:39.560 --> 18:41.040
+Yeah, it's been interesting.
+
+18:41.040 --> 18:46.800
+Emacs itself, I feel like the Emacs-Devel mailing list
+
+18:46.800 --> 18:50.520
+has been growing in traffic over the years.
+
+18:50.520 --> 18:52.280
+I've been subscribed for a couple of years.
+
+18:52.280 --> 18:56.200
+And more recently, I'm just seeing more and more
+
+18:56.200 --> 18:57.600
+incoming emails from Emacs-Devel,
+
+18:57.600 --> 19:00.000
+which is always cool.
+
+19:00.000 --> 19:02.680
+Yeah, and like you said with Emacs Conf,
+
+19:02.680 --> 19:05.800
+yeah, we've been growing, thankfully.
+
+19:05.800 --> 19:07.680
+And this year, we've experimented
+
+19:07.680 --> 19:09.280
+with having two tracks, which I think
+
+19:09.280 --> 19:12.280
+has turned out pretty well, pretty great.
+
+19:12.280 --> 19:15.600
+Because we don't have to try to squeeze in all the talks
+
+19:15.600 --> 19:19.080
+so tightly and be able to give proper Q&A time,
+
+19:19.080 --> 19:20.960
+like this one, I think, which is pretty great.
+
+19:20.960 --> 19:23.280
+So yeah, very glad to hear and see it.
+
+19:27.400 --> 19:33.400
+Yeah, and maybe I should mention now
+
+19:33.400 --> 19:41.320
+that I know that the E-Shell talk is coming up by Howard,
+
+19:41.320 --> 19:45.880
+that I discovered there is a kind of a bug
+
+19:45.880 --> 19:50.320
+in the detached implementation.
+
+19:50.320 --> 19:56.320
+So it doesn't handle properly the way E-Shell
+
+19:56.320 --> 20:07.040
+seems to communicate when you quote some text in a shell
+
+20:07.040 --> 20:07.920
+command.
+
+20:07.920 --> 20:11.480
+If you have been using quotes, it
+
+20:11.480 --> 20:14.840
+seems to be added as text properties that
+
+20:14.840 --> 20:16.240
+gets into detached.
+
+20:16.240 --> 20:20.040
+And I didn't know about that, but detached
+
+20:20.040 --> 20:22.080
+is not picking that up.
+
+20:22.080 --> 20:28.040
+So if you try to run something similar to Echo
+
+20:28.040 --> 20:33.960
+and quotation marks, Niklas, then yeah, it will not
+
+20:33.960 --> 20:35.360
+run it with quotation marks.
+
+20:35.360 --> 20:38.200
+So I guess for Echo, it might work,
+
+20:38.200 --> 20:42.280
+but other commands, it can fail.
+
+20:42.280 --> 20:45.760
+So just be aware about that.
+
+20:45.760 --> 20:49.360
+I guess that's on the priority list to fix.
+
+20:49.360 --> 20:50.280
+Interesting.
+
+20:50.280 --> 20:51.960
+Yeah, for sure.
+
+20:51.960 --> 20:54.720
+I guess folks can look forward to that getting hopefully fixed
+
+20:54.720 --> 20:59.080
+in the near future or at some point.
+
+20:59.080 --> 21:05.640
+Yeah, and I could add that maybe something
+
+21:05.640 --> 21:15.240
+that is in between this request for persistent sessions
+
+21:15.240 --> 21:20.040
+is that currently, you can use detached in a way
+
+21:20.040 --> 21:23.360
+so it creates like it runs the session.
+
+21:23.360 --> 21:28.400
+And once that finish, you use its callback
+
+21:28.400 --> 21:32.920
+to generate a new session, which runs some other command.
+
+21:32.920 --> 21:41.240
+So you can chain detached sessions that way.
+
+21:41.240 --> 21:47.680
+I wanted to improve on how that has been implemented
+
+21:47.680 --> 21:55.040
+so that you can more easily start these changed sessions
+
+21:55.040 --> 21:58.520
+and that they would show up in the user interface.
+
+21:58.520 --> 22:05.120
+And maybe if you rerun the top of the chain,
+
+22:05.120 --> 22:12.720
+it will actually start all these sessions that way.
+
+22:12.720 --> 22:16.680
+I have some use cases personally where
+
+22:16.680 --> 22:22.200
+for the time being, before running an executable,
+
+22:22.200 --> 22:24.920
+I actually need to run a different build command
+
+22:24.920 --> 22:27.160
+than I normally do.
+
+22:27.160 --> 22:32.880
+And I keep forgetting that, and then that fails.
+
+22:32.880 --> 22:35.960
+And it would be great to just be able to.
+
+22:35.960 --> 22:40.440
+I mean, you could always have that first command
+
+22:40.440 --> 22:48.240
+and then and and the other one, but it doesn't look as nice.
+
+22:48.240 --> 22:53.960
+And it would be nice to be able to see that, OK, this has been
+
+22:53.960 --> 22:57.720
+this is currently running, but in the next once that's
+
+22:57.720 --> 23:02.080
+finished, it will keep on running this one.
+
+23:02.080 --> 23:05.440
+So that's something I plan to add support for.
+
+23:05.440 --> 23:09.360
+It sounds good.
+
+23:09.360 --> 23:10.120
+That would be nice.
+
+23:14.080 --> 23:17.200
+Yeah, I would like that as well.
+
+23:17.200 --> 23:21.360
+So I have an incentive.
+
+23:21.360 --> 23:41.720
+Yeah, also not to completely derail this,
+
+23:41.720 --> 23:45.120
+but I mean, I don't think there are any questions as of now.
+
+23:45.120 --> 23:46.800
+So I can maybe mention this.
+
+23:46.800 --> 23:48.320
+Someone pinged me on IRC.
+
+23:48.320 --> 23:50.640
+Well, someone, Shoushin, good friend.
+
+23:50.640 --> 23:53.920
+And the creator, actually, of the musics
+
+23:53.920 --> 23:56.400
+that we've been using at Emacs Conf between for our lunch
+
+23:56.400 --> 23:58.880
+breaks and here and there, he mentioned
+
+23:58.880 --> 24:01.080
+that he likes this FSF shirt.
+
+24:03.960 --> 24:05.720
+Yeah, it's nice.
+
+24:05.720 --> 24:06.200
+Thanks.
+
+24:06.200 --> 24:10.120
+Yeah, it's I think from a year or so ago.
+
+24:10.120 --> 24:14.200
+It was put up for FSF's 35th birthday.
+
+24:14.200 --> 24:17.160
+And yeah, it's also what it says, FSF 35.
+
+24:17.160 --> 24:20.280
+Yeah, I'm not sure if it's still available on their shop,
+
+24:20.280 --> 24:22.360
+but yeah, you might be able to find it there.
+
+24:25.880 --> 24:27.160
+Nice.
+
+24:27.160 --> 24:31.080
+So they have their own shop?
+
+24:31.080 --> 24:32.000
+Yeah, so there is.
+
+24:32.000 --> 24:33.520
+You can buy merch or?
+
+24:33.520 --> 24:34.480
+Yeah, exactly.
+
+24:34.480 --> 24:37.080
+There is shop.fsf.org, and they have
+
+24:37.080 --> 24:41.880
+a bunch of different goodies and things, merchandise.
+
+24:41.880 --> 24:44.440
+They have shirts like this one, but they also
+
+24:44.440 --> 24:45.920
+have a lot of other stuff.
+
+24:45.920 --> 24:47.960
+They have this one, but they also
+
+24:47.960 --> 24:51.200
+sell things like printed versions of the Emacs user
+
+24:51.200 --> 24:54.840
+manual, which is particularly relevant for us.
+
+24:54.840 --> 24:57.680
+Yeah, and Emacs stickers.
+
+24:57.680 --> 24:59.280
+I think also sell pins and such.
+
+24:59.280 --> 25:02.280
+So yeah, I mean, if you are interested in Emacs
+
+25:02.280 --> 25:06.200
+or new on FSF, it might be worth checking out.
+
+25:06.200 --> 25:08.680
+Yeah, thanks for the tip.
+
+25:08.680 --> 25:11.360
+Yeah.
+
+25:11.360 --> 25:14.520
+Cool, and I think we have about one more minute of live Q&A
+
+25:14.520 --> 25:17.880
+time if folks have any questions,
+
+25:17.880 --> 25:23.520
+any last-minute ones, you're welcome to send it in.
+
+25:23.520 --> 25:26.880
+I guess there is, uh-huh.
+
+25:26.880 --> 25:32.240
+OK, yeah, this one got added from Karfik.
+
+25:32.240 --> 25:32.740
+Yeah.
+
+25:38.600 --> 25:41.560
+Yeah, otherwise, if there's no further questions,
+
+25:41.560 --> 25:44.200
+maybe we wrap it up.
+
+25:44.200 --> 25:45.320
+Sure, sounds good.
+
+25:45.320 --> 25:46.880
+Yeah, I don't see any new questions.
+
+25:46.880 --> 25:49.560
+So yeah, thanks again, Nicholas, for the great talk
+
+25:49.560 --> 25:52.640
+and for sticking around and doing the live Q&A.
+
+25:52.640 --> 25:54.360
+It's much appreciated, and look forward
+
+25:54.360 --> 26:01.080
+to seeing the upcoming developments in Detached.
+
+26:01.080 --> 26:03.400
+Thank you, and thanks for having me.
+
+26:03.400 --> 26:06.760
+Cheers, very glad to see you around.
+
+26:06.760 --> 26:15.840
+See ya.
+
diff --git a/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt
new file mode 100644
index 00000000..63f883ff
--- /dev/null
+++ b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main--chapters.vtt
@@ -0,0 +1,34 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:27.120
+Intro
+
+00:00:27.120 --> 00:01:15.800
+The problem
+
+00:01:15.800 --> 00:02:30.840
+My solution: detached
+
+00:02:30.840 --> 00:03:30.800
+Shell
+
+00:03:30.800 --> 00:04:27.754
+Compile
+
+00:04:27.854 --> 00:05:21.440
+Detached list sessions
+
+00:05:21.440 --> 00:06:07.080
+Narrow criteria
+
+00:06:07.080 --> 00:06:34.040
+Diff sessions
+
+00:06:34.040 --> 00:07:04.421
+Rich interface with properties
+
+00:07:04.521 --> 00:07:44.988
+Annotation
+
+00:07:45.088 --> 00:10:10.760
+Searching through sessions
diff --git a/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt
new file mode 100644
index 00000000..09c4a9df
--- /dev/null
+++ b/2022/captions/emacsconf-2022-detached--getting-detached-from-emacs--niklas-eklund--main.vtt
@@ -0,0 +1,502 @@
+WEBVTT captioned by anush
+
+00:00:00.000 --> 00:00:04.354
+Hello, everyone! Welcome to my talk,
+
+00:00:04.454 --> 00:00:07.221
+"Getting detached from Emacs".
+
+00:00:07.321 --> 00:00:09.720
+When I started to use Emacs,
+
+00:00:09.720 --> 00:00:12.920
+I quickly gravitated towards using it
+
+00:00:12.920 --> 00:00:15.000
+as much as I could.
+
+00:00:15.000 --> 00:00:17.880
+Magit, Org, Dired,
+
+00:00:17.880 --> 00:00:21.360
+a lot of new possibilities opened up.
+
+00:00:21.360 --> 00:00:23.280
+However, there was a workflow
+
+00:00:23.280 --> 00:00:27.120
+that was difficult for me to replace.
+
+00:00:27.120 --> 00:00:30.120
+The problem for me was running shell commands
+
+00:00:30.120 --> 00:00:32.560
+in sub-processes of Emacs,
+
+00:00:32.560 --> 00:00:34.880
+which in some situations led me to stick to
+
+00:00:34.880 --> 00:00:38.000
+using an external terminal.
+
+00:00:38.000 --> 00:00:39.588
+These situations,
+
+00:00:39.688 --> 00:00:43.254
+often revolved around long-running shell commands,
+
+00:00:43.354 --> 00:00:46.054
+either on my local machine
+
+00:00:46.154 --> 00:00:48.600
+or on a remote host.
+
+00:00:48.600 --> 00:00:50.240
+When I was on a remote host,
+
+00:00:50.240 --> 00:00:52.800
+I would also rely on using the program tmux
+
+00:00:52.800 --> 00:00:57.280
+to be able to detach from the remote process.
+
+00:00:57.280 --> 00:00:59.521
+My main concern at the time
+
+00:00:59.621 --> 00:01:01.854
+was that I didn't want to having to avoid
+
+00:01:01.954 --> 00:01:03.440
+restarting Emacs,
+
+00:01:03.440 --> 00:01:07.800
+because I needed to wait for a process to complete.
+
+00:01:07.800 --> 00:01:11.200
+However, there was of course a lot of things
+
+00:01:11.200 --> 00:01:15.800
+I was missing out on by not using Emacs.
+
+00:01:15.800 --> 00:01:19.760
+Therefore, my solution to resolving
+
+00:01:19.760 --> 00:01:22.840
+the issue of occasionally having to leave Emacs
+
+00:01:22.840 --> 00:01:26.188
+led me down the path of developing the package
+
+00:01:26.188 --> 00:01:28.221
+Detached.
+
+00:01:28.321 --> 00:01:31.160
+The package allows Emacs to delegate
+
+00:01:31.160 --> 00:01:33.640
+the responsibility of creating processes
+
+00:01:33.640 --> 00:01:36.840
+to the program dtach.
+
+00:01:36.840 --> 00:01:39.021
+It also makes sure to write
+
+00:01:39.121 --> 00:01:44.321
+the output of the process to a file,
+
+00:01:44.421 --> 00:01:48.154
+which we will see later on how that is being used.
+
+00:01:48.254 --> 00:01:50.800
+The package makes Emacs capable of
+
+00:01:50.800 --> 00:01:53.120
+attaching to these processes
+
+00:01:53.120 --> 00:01:55.280
+as well as managing them.
+
+00:01:55.280 --> 00:01:58.880
+In the package, each process is called a session,
+
+00:01:58.880 --> 00:02:01.040
+and inside of Emacs that is just
+
+00:02:01.040 --> 00:02:02.560
+an object with properties
+
+00:02:02.560 --> 00:02:04.588
+such as what command is being run,
+
+00:02:04.688 --> 00:02:06.720
+what working directory is used,
+
+00:02:06.720 --> 00:02:10.240
+where the output is stored, etc.
+
+00:02:10.240 --> 00:02:12.480
+The important aspect is also that
+
+00:02:12.480 --> 00:02:16.840
+these objects are being persistent,
+
+00:02:16.840 --> 00:02:20.121
+so they are stored over time.
+
+00:02:20.221 --> 00:02:22.920
+Today, I'm going to walk you through
+
+00:02:22.920 --> 00:02:26.054
+how I use the package and what advantages
+
+00:02:26.154 --> 00:02:30.840
+there are of treating processes like text.
+
+00:02:30.840 --> 00:02:35.720
+I'm going to start by opening up M-x shell,
+
+00:02:35.720 --> 00:02:40.288
+and I will run a command
+
+00:02:40.388 --> 00:02:46.920
+to update my package manager.
+
+00:02:46.920 --> 00:02:48.254
+Instead of pressing return,
+
+00:02:48.354 --> 00:02:50.240
+I'll simply press shift return
+
+00:02:50.240 --> 00:02:52.600
+to let Emacs delegate the execution
+
+00:02:52.600 --> 00:02:54.920
+to the dtach program.
+
+00:02:54.920 --> 00:02:57.600
+Emacs will immediately attach itself to the process,
+
+00:02:57.600 --> 00:03:00.960
+and we therefore don't perceive any difference
+
+00:03:00.960 --> 00:03:04.480
+from when running the command as a subprocess.
+
+00:03:04.480 --> 00:03:06.488
+We now have the option though
+
+00:03:06.588 --> 00:03:09.800
+to detach from the session,
+
+00:03:09.800 --> 00:03:12.080
+and later on we can of course
+
+00:03:12.080 --> 00:03:17.054
+reattach Emacs to the session.
+
+00:03:17.154 --> 00:03:20.421
+For me, this addresses the core
+
+00:03:20.521 --> 00:03:23.800
+of the problem that I had.
+
+00:03:23.800 --> 00:03:25.040
+But let’s see what’s more
+
+00:03:25.040 --> 00:03:30.800
+the new workflow inside of Emacs can bring.
+
+00:03:30.800 --> 00:03:35.720
+The package supports multiple user interfaces
+
+00:03:35.720 --> 00:03:39.840
+such as Eshell and Compile.
+
+00:03:39.840 --> 00:03:43.360
+I will therefore switch to the Detached project,
+
+00:03:43.360 --> 00:03:49.440
+and I will run the build command that I use.
+
+00:03:49.440 --> 00:03:54.040
+I will run it with detached-compile
+
+00:03:54.040 --> 00:03:55.800
+with the difference that
+
+00:03:55.800 --> 00:03:59.800
+I can detach from the compilation.
+
+00:03:59.800 --> 00:04:05.000
+One benefit of this new workflow is that
+
+00:04:05.000 --> 00:04:08.680
+I can get a system notification shown up here
+
+00:04:08.680 --> 00:04:10.760
+once a session has finished.
+
+00:04:10.760 --> 00:04:15.520
+Previously, I was either forced to have
+
+00:04:15.520 --> 00:04:19.040
+the terminal open so I could see it or hiding it,
+
+00:04:19.040 --> 00:04:27.754
+but then risking having forgotten it.
+
+00:04:27.854 --> 00:04:32.560
+How do we then see the output of a session?
+
+00:04:32.560 --> 00:04:36.788
+Get the detached-list-sessions command,
+
+00:04:36.888 --> 00:04:42.854
+and here we see
+
+00:04:42.954 --> 00:04:45.600
+the command that we just built,
+
+00:04:45.600 --> 00:04:48.440
+and we see the guix pull with an asterisk
+
+00:04:48.440 --> 00:04:54.480
+indicating that it is continuously running.
+
+00:04:54.480 --> 00:05:01.421
+If I press enter,
+
+00:05:01.521 --> 00:05:04.440
+we will get the output of the session here.
+
+00:05:04.440 --> 00:05:07.200
+And since it was run using compile,
+
+00:05:07.200 --> 00:05:11.720
+we also have compilation mode enabled here,
+
+00:05:11.720 --> 00:05:14.188
+so we could navigate between
+
+00:05:14.288 --> 00:05:17.160
+potential warnings or errors.
+
+00:05:17.160 --> 00:05:21.440
+And we see that there is a warning here.
+
+00:05:21.440 --> 00:05:26.621
+One thing that
+
+00:05:26.721 --> 00:05:28.920
+I have prepared here is that
+
+00:05:28.920 --> 00:05:32.240
+if I open up the user interface,
+
+00:05:32.240 --> 00:05:35.760
+we only see two sessions,
+
+00:05:35.760 --> 00:05:38.988
+but that is because we applied a filter here.
+
+00:05:39.088 --> 00:05:43.160
+So, we have actually the only sessions
+
+00:05:43.160 --> 00:05:46.000
+that are created within the last 12 hours
+
+00:05:46.000 --> 00:05:47.360
+and that are considered unique.
+
+00:05:47.360 --> 00:05:50.600
+So, if I remove the uniqueness,
+
+00:05:50.600 --> 00:05:57.040
+we also see that we have a previous build
+
+00:05:57.040 --> 00:05:59.280
+running on the main branch.
+
+00:05:59.280 --> 00:06:02.760
+So, I think that's typically normal
+
+00:06:02.760 --> 00:06:07.080
+that you might have that.
+
+00:06:07.080 --> 00:06:10.920
+And since the sessions can be considered text,
+
+00:06:10.920 --> 00:06:14.760
+we can just mark these two and check,
+
+00:06:14.760 --> 00:06:18.880
+does this warning exist on the main branch or not?
+
+00:06:18.880 --> 00:06:22.720
+So, we can just diff these ones
+
+00:06:22.720 --> 00:06:27.454
+and we see that the warning is only present
+
+00:06:27.554 --> 00:06:34.040
+on the emacsconf branch.
+
+00:06:34.040 --> 00:06:37.520
+Now, another benefit, in my opinion,
+
+00:06:37.520 --> 00:06:41.840
+of the new way of working is that
+
+00:06:41.840 --> 00:06:43.240
+I have these properties being displayed
+
+00:06:43.240 --> 00:06:45.321
+in the user interface.
+
+00:06:45.421 --> 00:06:48.960
+I can quickly see which commands are still running,
+
+00:06:48.960 --> 00:06:51.360
+what hosts they are running on,
+
+00:06:51.360 --> 00:06:53.388
+where they are running,
+
+00:06:53.488 --> 00:06:58.121
+and for how long they have been running.
+
+00:06:58.221 --> 00:07:00.321
+And if they have run,
+
+00:07:00.421 --> 00:07:04.421
+how long did it take?
+
+00:07:04.521 --> 00:07:06.880
+Occasionally, though, there might be
+
+00:07:06.880 --> 00:07:16.880
+even more input needed to distinguish sessions.
+
+00:07:16.880 --> 00:07:19.600
+So, what I typically do then is
+
+00:07:19.600 --> 00:07:22.200
+press A to annotate the session,
+
+00:07:22.200 --> 00:07:28.988
+I would add a "Warning found at emacsconf"
+
+00:07:29.088 --> 00:07:32.854
+And then it will show up this annotation
+
+00:07:32.954 --> 00:07:44.988
+in the echo area when I select the session.
+
+00:07:45.088 --> 00:07:48.080
+Another great improvement of using these sessions
+
+00:07:48.080 --> 00:07:52.640
+and consider them being text is,
+
+00:07:52.640 --> 00:07:57.321
+now we also see the guix pull completed here.
+
+00:07:57.421 --> 00:08:00.921
+Then we can also select and see that, okay,
+
+00:08:01.021 --> 00:08:08.600
+there is a lot of updates in this command,
+
+00:08:08.600 --> 00:08:10.160
+but let's not look at it now.
+
+00:08:10.160 --> 00:08:17.554
+Let's instead remember that
+
+00:08:17.654 --> 00:08:19.840
+previously last week
+
+00:08:19.840 --> 00:08:21.640
+when I ran a guix pull,
+
+00:08:21.640 --> 00:08:27.680
+I saw an Emacs package that looks interesting.
+
+00:08:27.680 --> 00:08:30.040
+I rather don't remember its full name,
+
+00:08:30.040 --> 00:08:32.720
+but it has something to do with collection.
+
+00:08:32.720 --> 00:08:38.840
+So, what I then can do is
+
+00:08:38.840 --> 00:08:42.280
+remove the 12 hour narrowing criteria,
+
+00:08:42.280 --> 00:08:47.680
+and we can see here I got sessions ranging back
+
+00:08:47.680 --> 00:08:51.040
+even to 28th of October.
+
+00:08:51.040 --> 00:08:55.600
+Since these are just to be considered text,
+
+00:08:55.600 --> 00:08:58.654
+I can--
+
+00:08:58.754 --> 00:09:00.320
+now let's first narrow the sessions
+
+00:09:00.320 --> 00:09:05.188
+to only show the ones that run guix pull.
+
+00:09:05.288 --> 00:09:08.440
+Then I would narrow based on the output
+
+00:09:08.440 --> 00:09:11.280
+containing a regular expression.
+
+00:09:11.280 --> 00:09:14.400
+So, I remember it was something with collection.
+
+00:09:14.400 --> 00:09:19.988
+And we got one hit.
+
+00:09:20.088 --> 00:09:24.088
+Here it should be something with collection.
+
+00:09:24.188 --> 00:09:29.521
+It was emacs-flymake-collection.
+
+00:09:29.621 --> 00:09:34.721
+This is something that is a
+
+00:09:34.821 --> 00:09:38.400
+very nice feature to have.
+
+00:09:38.400 --> 00:09:42.160
+It doesn't create any overhead
+
+00:09:42.160 --> 00:09:45.280
+of having these old sessions lying around
+
+00:09:45.280 --> 00:09:47.400
+and occasionally, it can be interesting
+
+00:09:47.400 --> 00:09:49.680
+to search through them as well.
+
+00:09:49.680 --> 00:09:55.000
+So, for me, this is another example of
+
+00:09:55.000 --> 00:09:59.954
+when bringing workflows into Emacs,
+
+00:10:00.054 --> 00:10:05.021
+it often opens up new exciting possibilities.
+
+00:10:05.121 --> 00:10:10.760
+Thanks a lot for listening.
diff --git a/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt b/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt
new file mode 100644
index 00000000..be063a36
--- /dev/null
+++ b/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main--chapters.vtt
@@ -0,0 +1,53 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:19.320
+Introduction
+
+8
+00:00:19.320 --> 00:00:42.400
+Emacs 29 release cycle
+
+16
+00:00:42.400 --> 00:01:29.080
+Overlays
+
+36
+00:01:29.080 --> 00:01:46.480
+Eglot
+
+42
+00:01:46.480 --> 00:02:30.840
+Tree-sitter
+
+61
+00:02:30.840 --> 00:03:35.240
+Very long lines
+
+85
+00:03:35.240 --> 00:03:50.080
+SQLite
+
+90
+00:03:50.080 --> 00:04:11.320
+XInput
+
+97
+00:04:11.320 --> 00:04:24.640
+Pure GTK build
+
+101
+00:04:24.640 --> 00:04:31.400
+Drag and drop
+
+103
+00:04:31.400 --> 00:04:35.240
+Double-buffering on Microsoft Windows
+
+104
+00:04:35.240 --> 00:05:00.080
+Emoji input
+
+113
+00:05:00.080 --> 00:05:15.280
+End
diff --git a/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt b/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt
new file mode 100644
index 00000000..a55331b2
--- /dev/null
+++ b/2022/captions/emacsconf-2022-devel--emacs-development-updates--john-wiegley--main.vtt
@@ -0,0 +1,473 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:05.320
+Hello, it's time for another Emacs development update.
+
+2
+00:00:05.320 --> 00:00:07.800
+I want to thank the organizers of EmacsConf
+
+3
+00:00:07.800 --> 00:00:10.160
+for putting this together
+
+4
+00:00:10.160 --> 00:00:12.280
+and also the maintainers of Emacs
+
+5
+00:00:12.280 --> 00:00:14.240
+with a special thanks to Eli Zaretskii.
+
+6
+00:00:14.240 --> 00:00:16.560
+It's really he who gave me this information
+
+7
+00:00:16.560 --> 00:00:19.320
+so that I could pass it along to you.
+
+8
+00:00:19.320 --> 00:00:21.720
+The main thing to discuss this time
+
+9
+00:00:21.720 --> 00:00:25.880
+with regard to what's been going on with Emacs is Emacs 29.
+
+10
+00:00:25.880 --> 00:00:29.840
+The release cycle for Emacs 29 should begin in December
+
+11
+00:00:29.840 --> 00:00:32.720
+when a branch will be cut and the release work will start.
+
+12
+00:00:32.720 --> 00:00:36.640
+We should be seeing Emacs 29 coming out fairly soon.
+
+13
+00:00:36.640 --> 00:00:38.120
+Here's just a brief overview
+
+14
+00:00:38.120 --> 00:00:39.680
+of some of the things to look forward to
+
+15
+00:00:39.680 --> 00:00:42.400
+coming up in Emacs 29.
+
+16
+00:00:42.400 --> 00:00:45.680
+Overlays have been re-implemented.
+
+17
+00:00:45.680 --> 00:00:47.240
+If you haven't used them before,
+
+18
+00:00:47.240 --> 00:00:51.040
+overlays are a way to apply a set of properties
+
+19
+00:00:51.040 --> 00:00:53.680
+over a range of text so that
+
+20
+00:00:53.680 --> 00:00:55.840
+you can have things like mouse clicks
+
+21
+00:00:55.840 --> 00:00:57.920
+take on different behavior
+
+22
+00:00:57.920 --> 00:00:59.520
+depending on where it happens in the text.
+
+23
+00:00:59.520 --> 00:01:01.720
+This is different than text properties
+
+24
+00:01:01.720 --> 00:01:04.080
+which associate the properties with the text itself.
+
+25
+00:01:04.080 --> 00:01:07.200
+Overlays do not alter the text in any way
+
+26
+00:01:07.200 --> 00:01:09.320
+and they simply, as the name suggests,
+
+27
+00:01:09.320 --> 00:01:10.920
+overlay on the buffer.
+
+28
+00:01:10.920 --> 00:01:14.040
+Now previously, overlays were implemented as linear lists
+
+29
+00:01:14.040 --> 00:01:15.800
+which got very slow when there were
+
+30
+00:01:15.800 --> 00:01:17.840
+a lot of overlays in a buffer.
+
+31
+00:01:17.840 --> 00:01:19.880
+Now they're being re-implemented as trees,
+
+32
+00:01:19.880 --> 00:01:21.880
+so that searching should be very fast, and
+
+33
+00:01:21.880 --> 00:01:24.400
+in fact, comparable to text properties.
+
+34
+00:01:24.400 --> 00:01:26.520
+This is already on the master branch
+
+35
+00:01:26.520 --> 00:01:29.080
+and (more or less) is ready for release.
+
+36
+00:01:29.080 --> 00:01:32.200
+Eglot has been ported into Emacs.
+
+37
+00:01:32.200 --> 00:01:35.560
+Eglot is an LSP [Language Server Protocol] client for Emacs,
+
+38
+00:01:35.560 --> 00:01:38.480
+one of the two that are often used.
+
+39
+00:01:38.480 --> 00:01:40.840
+But now it's going to be included in core,
+
+40
+00:01:40.840 --> 00:01:42.800
+so it's considered official
+
+41
+00:01:42.800 --> 00:01:46.480
+and will be well integrated with other Emacs features.
+
+42
+00:01:46.480 --> 00:01:48.720
+There's going to be a Tree-sitter library.
+
+43
+00:01:48.720 --> 00:01:53.200
+Tree-sitter is a way of building fast incremental parsers.
+
+44
+00:01:53.200 --> 00:01:56.040
+There's a website on Tree-sitter if you Google for that.
+
+45
+00:01:56.040 --> 00:01:57.760
+This can be used for various features,
+
+46
+00:01:57.760 --> 00:01:59.760
+but first and foremost, it'll be used
+
+47
+00:01:59.760 --> 00:02:02.920
+for fontification and indentation in Emacs.
+
+48
+00:02:02.920 --> 00:02:05.600
+Instead of heuristics and regular expressions,
+
+49
+00:02:05.600 --> 00:02:07.400
+you can now build your fontifications
+
+50
+00:02:07.400 --> 00:02:08.720
+based on a parse tree.
+
+51
+00:02:08.720 --> 00:02:10.640
+There's a branch now that supports this
+
+52
+00:02:10.640 --> 00:02:13.600
+for several modes already, like Python, TypeScript,
+
+53
+00:02:13.600 --> 00:02:15.080
+and JavaScript.
+
+54
+00:02:15.080 --> 00:02:18.160
+We don't have anyone yet working on it for C mode
+
+55
+00:02:18.160 --> 00:02:20.480
+but Eli has challenged whether anyone
+
+56
+00:02:20.480 --> 00:02:21.960
+in the community is interested.
+
+57
+00:02:21.960 --> 00:02:25.960
+He would love to see Tree-sitter support added for C mode,
+
+58
+00:02:25.960 --> 00:02:27.880
+because this has been quite slow
+
+59
+00:02:27.880 --> 00:02:29.640
+when dealing with very, very large files
+
+60
+00:02:29.640 --> 00:02:30.840
+and Tree-sitter should help that.
+
+61
+00:02:30.840 --> 00:02:34.320
+There have been significant improvements
+
+62
+00:02:34.320 --> 00:02:36.560
+in dealing with very long lines.
+
+63
+00:02:36.560 --> 00:02:38.160
+This is something that has been
+
+64
+00:02:38.160 --> 00:02:40.480
+a long time frequent complaint.
+
+65
+00:02:40.480 --> 00:02:42.840
+Emacs becomes rather unusable
+
+66
+00:02:42.840 --> 00:02:45.560
+if you open a giant file that's a single long line.
+
+67
+00:02:45.560 --> 00:02:49.560
+Anyone who's ever tried to open a 30 megabyte JSON file
+
+68
+00:02:49.560 --> 00:02:52.200
+that's all on one line will know this pain.
+
+69
+00:02:52.200 --> 00:02:55.960
+Some modes, however, will have to adapt to this change,
+
+70
+00:02:55.960 --> 00:02:58.320
+because sometimes access to the whole buffer
+
+71
+00:02:58.320 --> 00:03:00.480
+is now forcefully restricted.
+
+72
+00:03:00.480 --> 00:03:04.400
+If the mode requires access to the entire buffer
+
+73
+00:03:04.400 --> 00:03:07.960
+at all times to work, then the developer of that mode
+
+74
+00:03:07.960 --> 00:03:10.240
+will need to devise some simplifications
+
+75
+00:03:10.240 --> 00:03:13.160
+so that they don't require that complete access.
+
+76
+00:03:13.160 --> 00:03:15.760
+For example, if a mode used to go way back
+
+77
+00:03:15.760 --> 00:03:16.880
+to the beginning of the buffer
+
+78
+00:03:16.880 --> 00:03:19.520
+in order to determine if there's an unbalanced parenthesis,
+
+79
+00:03:19.520 --> 00:03:23.160
+this won't work in the new long lines support mode,
+
+80
+00:03:23.160 --> 00:03:25.640
+because the entire buffer is not always available.
+
+81
+00:03:25.640 --> 00:03:27.680
+Emacs is sort of doing some
+
+82
+00:03:27.680 --> 00:03:29.920
+restricting of the buffer heuristically
+
+83
+00:03:29.920 --> 00:03:32.200
+in order to keep the visible range working
+
+84
+00:03:32.200 --> 00:03:35.240
+very, very quickly now.
+
+85
+00:03:35.240 --> 00:03:39.040
+Emacs can now build directly with SQLite.
+
+86
+00:03:39.040 --> 00:03:42.360
+This means that SQLite databases
+
+87
+00:03:42.360 --> 00:03:44.840
+can be directly accessible from Emacs.
+
+88
+00:03:44.840 --> 00:03:47.360
+Should be nice for anyone whose mode wants to
+
+89
+00:03:47.360 --> 00:03:50.080
+cache or store some queryable data.
+
+90
+00:03:50.080 --> 00:03:54.960
+The XInput extension is now up to version 2.
+
+91
+00:03:54.960 --> 00:03:58.160
+There are many extensions in this specification.
+
+92
+00:03:58.160 --> 00:03:59.600
+From the user's point of view,
+
+93
+00:03:59.600 --> 00:04:02.920
+it enables things like smooth scrolling and touch devices.
+
+94
+00:04:02.920 --> 00:04:06.320
+Emacs will now use this by default on all systems
+
+95
+00:04:06.320 --> 00:04:08.360
+where the library is installed.
+
+96
+00:04:08.360 --> 00:04:11.320
+It should be on every modern system that uses X.
+
+97
+00:04:11.320 --> 00:04:15.560
+There's also a pure GTK build in Emacs 29.
+
+98
+00:04:15.560 --> 00:04:17.560
+The purpose of this is to allow Emacs
+
+99
+00:04:17.560 --> 00:04:21.160
+on systems without X, such as Wayland or Broadway,
+
+100
+00:04:21.160 --> 00:04:24.640
+to be able to have a graphical build of Emacs.
+
+101
+00:04:24.640 --> 00:04:27.280
+There's also lots of improvements to drag and drop
+
+102
+00:04:27.280 --> 00:04:31.400
+on X systems, for people who like drag and drop.
+
+103
+00:04:31.400 --> 00:04:35.240
+And there's support for double buffering on Microsoft Windows.
+
+104
+00:04:35.240 --> 00:04:38.480
+The last of the headline features
+
+105
+00:04:38.480 --> 00:04:41.640
+coming for Emacs 29 is emoji input.
+
+106
+00:04:41.640 --> 00:04:43.520
+So there will now be a prefix key,
+
+107
+00:04:43.520 --> 00:04:47.320
+C-x 8 e for emoji input,
+
+108
+00:04:47.320 --> 00:04:50.240
+along with several new commands to insert emoji
+
+109
+00:04:50.240 --> 00:04:52.480
+by various forms of shorthand.
+
+110
+00:04:52.480 --> 00:04:54.360
+There will even be an input method
+
+111
+00:04:54.360 --> 00:04:57.600
+where you can write the plain English names of emojis
+
+112
+00:04:57.600 --> 00:05:00.080
+and have the symbol inserted.
+
+113
+00:05:00.080 --> 00:05:02.160
+So that rounds out some of the features
+
+114
+00:05:02.160 --> 00:05:03.680
+coming up for Emacs 29.
+
+115
+00:05:03.680 --> 00:05:05.680
+Sounds like an exciting release
+
+116
+00:05:05.680 --> 00:05:07.360
+and it should be headed your way soon.
+
+117
+00:05:07.360 --> 00:05:09.880
+I hope everybody has fun at the conference
+
+118
+00:05:09.880 --> 00:05:15.280
+and enjoy yourselves.
diff --git a/2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt b/2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..1e7ab934
--- /dev/null
+++ b/2022/captions/emacsconf-2022-eev--bidirectional-links-with-eev--eduardo-ochs--main.vtt
@@ -0,0 +1,489 @@
+WEBVTT captioned by eduardo
+Kind: captions:
+Language: en-GB
+
+00:00:00.000 --> 00:00:04.000
+Hi! My name is Eduardo Ochs. I'm the author
+
+00:00:04.000 --> 00:00:06.000
+of an Emacs package called eev, and the name
+
+00:00:06.000 --> 00:00:09.000
+of this presentation is: "Bidirectional links
+
+00:00:09.000 --> 00:00:10.000
+in eev".
+
+00:00:10.000 --> 00:00:13.000
+Let me present things in a weird order,
+
+00:00:13.000 --> 00:00:16.000
+starting by the new feature, and then I'm
+
+00:00:16.000 --> 00:00:20.000
+going to explain the whole context.
+
+00:00:20.000 --> 00:00:22.000
+One of the main features that we are
+
+00:00:22.000 --> 00:00:24.000
+going to see here is this function here,
+
+00:00:24.000 --> 00:00:27.000
+M-x kla, and kla is a mnemonic for "kill
+
+00:00:27.000 --> 00:00:31.000
+Link to Anchor". Let me explain... let me
+
+00:00:31.000 --> 00:00:33.000
+demonstrate how it works. This thing here
+
+00:00:33.000 --> 00:00:36.000
+with the green angle brackets is an
+
+00:00:36.000 --> 00:00:40.000
+anchor, this thing between the green
+
+00:00:40.000 --> 00:00:42.000
+angle brackets is a tag of an
+
+00:00:42.000 --> 00:00:46.000
+anchor, and if I type M-x kla here
+
+00:00:46.000 --> 00:00:49.000
+it highlights this tag for a second and
+
+00:00:49.000 --> 00:00:52.000
+it says "Copied to the kill ring: blah
+
+00:00:52.000 --> 00:00:54.000
+blah blah..." and this thing here is a link.
+
+00:00:54.000 --> 00:00:57.000
+I can insert the link here, I
+
+00:00:57.000 --> 00:01:00.000
+can insert the link in my notes...
+
+00:01:00.000 --> 00:01:03.000
+and if I execute this thing this link
+
+00:01:03.000 --> 00:01:10.000
+here it goes to this anchor in this file.
+
+00:01:10.000 --> 00:01:12.000
+If you have a recent version of eev
+
+00:01:12.000 --> 00:01:13.000
+installed then trying this feature
+
+00:01:13.000 --> 00:01:15.000
+should be very easy...
+
+00:01:15.000 --> 00:01:18.000
+you just need to open the this file here,
+
+00:01:18.000 --> 00:01:21.000
+in which everything is defined, and then
+
+00:01:21.000 --> 00:01:23.000
+go to this section at the beginning of
+
+00:01:23.000 --> 00:01:26.000
+the file, and then run the three blocks
+
+00:01:26.000 --> 00:01:28.000
+of tests that are there.
+
+00:01:28.000 --> 00:01:31.000
+This block corresponds roughly to what
+
+00:01:31.000 --> 00:01:33.000
+we have just done...
+
+00:01:33.000 --> 00:01:36.000
+this other block
+
+00:01:36.000 --> 00:01:40.000
+is slightly different because it shows
+
+00:01:40.000 --> 00:01:44.000
+some variants of kla... one is with `f`
+
+00:01:44.000 --> 00:01:48.000
+instead of an `a` here, let me
+
+00:01:48.000 --> 00:01:51.000
+show how it works... if we type
+
+00:01:51.000 --> 00:01:57.000
+`M-x eeklf` or just `M-x klf`
+
+00:01:57.000 --> 00:02:00.000
+we get a link to this file that does not
+
+00:02:00.000 --> 00:02:03.000
+point to an anchor, and if we type
+
+00:02:03.000 --> 00:02:07.000
+`M-x klt` we get another kind of link that
+
+00:02:07.000 --> 00:02:09.000
+is a link to an anchor in the same
+
+00:02:09.000 --> 00:02:11.000
+file...
+
+00:02:11.000 --> 00:02:16.000
+and the third block
+
+00:02:16.000 --> 00:02:18.000
+is more interesting because it lets
+
+00:02:18.000 --> 00:02:20.000
+people create links to files that
+
+00:02:20.000 --> 00:02:23.000
+are elsewhere, and that do not have
+
+00:02:23.000 --> 00:02:25.000
+anchors in them...
+
+00:02:25.000 --> 00:02:29.000
+let me execute this... this will
+
+00:02:29.000 --> 00:02:32.000
+run this sexp here and display the
+
+00:02:32.000 --> 00:02:35.000
+target at the window at the right...
+
+00:02:35.000 --> 00:02:41.000
+this is one of the source files of Emacs.
+
+00:02:41.000 --> 00:02:43.000
+Let's imagine that I want to create a
+
+00:02:43.000 --> 00:02:46.000
+link to this string here... then I can
+
+00:02:46.000 --> 00:02:51.000
+type `M-x klfs`, and this will create a
+
+00:02:51.000 --> 00:02:53.000
+link to a file and to a string in that
+
+00:02:53.000 --> 00:02:56.000
+file. So if I type ENTER here
+
+00:02:56.000 --> 00:02:59.000
+it says: "Copied to the kill ring: ...\
+
+00:02:59.000 --> 00:03:02.000
+and this is a link to this file here,
+
+00:03:02.000 --> 00:03:04.000
+and to the first occurrence of this
+
+00:03:04.000 --> 00:03:10.000
+string in this file.
+
+00:03:10.000 --> 00:03:14.000
+So: how does this work (inside)?...
+
+00:03:14.000 --> 00:03:16.000
+when I was trying to write the documentation
+
+00:03:16.000 --> 00:03:19.000
+of this I tried to write a summary of
+
+00:03:19.000 --> 00:03:21.000
+how the algorithm works, and I failed and
+
+00:03:21.000 --> 00:03:23.000
+I tried again, and I failed again,
+
+00:03:23.000 --> 00:03:26.000
+several times... and then I gave up and I
+
+00:03:26.000 --> 00:03:29.000
+decided to write an intro - a tutorial,
+
+00:03:29.000 --> 00:03:31.000
+this one -
+
+00:03:31.000 --> 00:03:34.000
+that explains everything with lots of
+
+00:03:34.000 --> 00:03:35.000
+details, and with lots of sections
+
+00:03:35.000 --> 00:03:39.000
+with "Try it!"s, that
+
+00:03:39.000 --> 00:03:41.000
+have examples that you you can run to
+
+00:03:41.000 --> 00:03:44.000
+understand things, to examine how some
+
+00:03:44.000 --> 00:03:48.000
+functions work, how the data
+
+00:03:48.000 --> 00:03:51.000
+structures work, and so on...
+
+00:03:51.000 --> 00:03:54.000
+the problem is that sometimes we have
+
+00:03:54.000 --> 00:03:56.000
+several hyperlinks that point to the to
+
+00:03:56.000 --> 00:04:00.000
+the same file. Let me give an example.
+
+00:04:00.000 --> 00:04:04.000
+In the configuration in which I am now,
+
+00:04:04.000 --> 00:04:07.000
+in this file here... the old way of
+
+00:04:07.000 --> 00:04:08.000
+generating hyperlinks to this file
+
+00:04:08.000 --> 00:04:10.000
+with `find-here-links`
+
+00:04:10.000 --> 00:04:13.000
+will generate a temporary buffer
+
+00:04:13.000 --> 00:04:15.000
+like this, and then I would have to
+
+00:04:15.000 --> 00:04:18.000
+choose which one of these hyperlinks I
+
+00:04:18.000 --> 00:04:21.000
+find best, which one I prefer, and then
+
+00:04:21.000 --> 00:04:25.000
+copy it to my notes... so instead
+
+00:04:25.000 --> 00:04:27.000
+of choosing a hyperlink this thing here
+
+00:04:27.000 --> 00:04:30.000
+shows all the options.
+
+00:04:30.000 --> 00:04:34.000
+And in the new way, in `M-x kla`
+
+00:04:34.000 --> 00:04:37.000
+and friends, there's an algorithm that
+
+00:04:37.000 --> 00:04:39.000
+chooses the best short hyperlink by
+
+00:04:39.000 --> 00:04:43.000
+itself, and this algorithm is a bit hard
+
+00:04:43.000 --> 00:04:46.000
+to explain... let me demonstrate it here.
+
+00:04:46.000 --> 00:04:50.000
+Again, we have all these options here, of
+
+00:04:50.000 --> 00:04:51.000
+hyperlinks to this file...
+
+00:04:51.000 --> 00:04:56.000
+and if I type `M-x klf`
+
+00:04:56.000 --> 00:04:58.000
+it chooses one of them.
+
+00:04:58.000 --> 00:05:01.000
+And of course I can copy it to my notes,
+
+00:05:01.000 --> 00:05:02.000
+it's going to work, it's going to point
+
+00:05:02.000 --> 00:05:05.000
+to here... and so on.
+
+00:05:05.000 --> 00:05:08.000
+Well, the title of this presentation was
+
+00:05:08.000 --> 00:05:11.000
+"Bidirectional links with eev"... let me
+
+00:05:11.000 --> 00:05:13.000
+show what I mean by bi-directional
+
+00:05:13.000 --> 00:05:15.000
+hyperlinks, and how we can use this thing
+
+00:05:15.000 --> 00:05:17.000
+to create bidirectional hyperlinks
+
+00:05:17.000 --> 00:05:19.000
+very quickly.
+
+00:05:19.000 --> 00:05:22.000
+I will have to use a smaller font... let
+
+00:05:22.000 --> 00:05:25.000
+me open these two files here. This one at
+
+00:05:25.000 --> 00:05:27.000
+the left is a program in Haskell, and
+
+00:05:27.000 --> 00:05:30.000
+this one is a file with my notes on
+
+00:05:30.000 --> 00:05:31.000
+Haskell.
+
+00:05:31.000 --> 00:05:35.000
+How do I create a link from...
+
+00:05:35.000 --> 00:05:39.000
+to this file in Haskell
+
+00:05:39.000 --> 00:05:42.000
+to put it in this file here? I can put
+
+00:05:42.000 --> 00:05:45.000
+the cursor here, in any position
+
+00:05:45.000 --> 00:05:48.000
+after this anchor here, and type
+
+00:05:48.000 --> 00:05:49.000
+`M-x kla`...
+
+00:05:49.000 --> 00:05:51.000
+it copies this link here to the kill
+
+00:05:51.000 --> 00:05:54.000
+ring and then I can can go here and
+
+00:05:54.000 --> 00:05:59.000
+either insert it with C-y (yank), or
+
+00:05:59.000 --> 00:06:06.000
+insert it with `M-k kli`, that adds a
+
+00:06:06.000 --> 00:06:07.000
+comment prefix here.
+
+00:06:07.000 --> 00:06:11.000
+So this is a way to create a link from
+
+00:06:11.000 --> 00:06:15.000
+here to there in which every
+
+00:06:15.000 --> 00:06:18.000
+comment has to be given explicitly...
+
+00:06:18.000 --> 00:06:21.000
+but I also implemented a way to
+
+00:06:21.000 --> 00:06:23.000
+create the two links at the same time.
+
+00:06:23.000 --> 00:06:25.000
+I don't use it much, it's mostly for
+
+00:06:25.000 --> 00:06:27.000
+demos, because it's impressive, I wanted
+
+00:06:27.000 --> 00:06:29.000
+to show that in this presentation...
+
+00:06:29.000 --> 00:06:33.000
+Anyway, let me show it here. Note that
+
+00:06:33.000 --> 00:06:36.000
+that in this file here the point is
+
+00:06:36.000 --> 00:06:40.000
+here, in this file the point is here...
+
+00:06:40.000 --> 00:06:43.000
+My trick is going to create a link to
+
+00:06:43.000 --> 00:06:47.000
+this anchor and put it in this file, and
+
+00:06:47.000 --> 00:06:49.000
+it's going to create a link to this
+
+00:06:49.000 --> 00:06:52.000
+anchor and put it in this file...
+
+00:06:52.000 --> 00:06:57.000
+So, here it goes: `M-x kla2`... ta-da!
+
+00:06:57.000 --> 00:07:01.000
+it highlighted the true anchors for a
+
+00:07:01.000 --> 00:07:03.000
+second, and it created these things here
+
+00:07:03.000 --> 00:07:06.000
+and inserted them with the
+
+00:07:06.000 --> 00:07:09.000
+right prefixes, I mean, the right
+
+00:07:09.000 --> 00:07:10.000
+comment prefixes.
+
+00:07:10.000 --> 00:07:15.000
+And that's it!
+
+00:07:15.000 --> 00:07:18.000
+So... that's it. If you found this thing
+
+00:07:18.000 --> 00:07:22.000
+interesting just
+
+00:07:22.000 --> 00:07:25.000
+install a recent version of eev and run
+
+00:07:25.000 --> 00:07:28.000
+the tutorial, either with this thing here,
+
+00:07:28.000 --> 00:07:30.000
+`M-x find-kla-intro`, or by running
+
+00:07:30.000 --> 00:07:35.000
+this sexp, or open this file here in the
+
+00:07:35.000 --> 00:07:37.000
+eev directory, and follow the
+
+00:07:37.000 --> 00:07:39.000
+tutorials...
+
+00:07:39.000 --> 00:07:42.000
+most things that there are well
+
+00:07:42.000 --> 00:07:46.000
+documented, but the thing that I don't
+
+00:07:46.000 --> 00:07:47.000
+use much and that is mostly for demos,
+
+00:07:47.000 --> 00:07:50.000
+which is the the thing that creates
+
+00:07:50.000 --> 00:07:52.000
+bi-directional hyperlinks, is not yet
+
+00:07:52.000 --> 00:07:55.000
+well documented, but the rest is.
+
+00:07:55.000 --> 00:07:57.000
+So: that's it! Bye! Have fun! =)
diff --git a/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt
new file mode 100644
index 00000000..ab7a4207
--- /dev/null
+++ b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--answers.vtt
@@ -0,0 +1,1184 @@
+WEBVTT
+
+00:00.000 --> 00:03.580
+Thanks, Howard, for the great talk.
+
+00:03.580 --> 00:05.580
+We have the Q&A now open.
+
+00:05.580 --> 00:09.740
+Folks are welcome to put their questions on the pad on IRC, and we might also open up
+
+00:09.740 --> 00:14.500
+this room in a few minutes if you might prefer to join Big Blue Button directly and ask your
+
+00:14.500 --> 00:16.300
+questions to Howard that way.
+
+00:16.300 --> 00:19.960
+Yeah, so Howard, take it away.
+
+00:19.960 --> 00:20.960
+Thank you, thank you.
+
+00:20.960 --> 00:24.020
+Yeah, I wasn't expecting to have a Q&A.
+
+00:24.020 --> 00:28.180
+Tried to condense it so fast because this was supposed to be a lightning talk, but hey,
+
+00:28.180 --> 00:31.280
+it's good to talk to everybody.
+
+00:31.280 --> 00:37.080
+So question on the Etherpad here is, do I fall back to vterm only when needing terminal
+
+00:37.080 --> 00:39.120
+emulation?
+
+00:39.120 --> 00:46.160
+And yeah, I kind of know when I'm going to need that based on the use case.
+
+00:46.160 --> 00:50.000
+Like right now, I'm doing a lot of building with Docker, and Docker just makes a mess
+
+00:50.000 --> 00:51.060
+out of everything.
+
+00:51.060 --> 00:56.460
+And so I can sometimes will like start up a vterm for that.
+
+00:56.460 --> 00:59.920
+But I don't like actually typing a lot of stuff in there as much.
+
+00:59.920 --> 01:06.400
+So actually, I wrote a little program to, you know, the compile command, I just send
+
+01:06.400 --> 01:10.560
+the compile over into it that I could see the output and then I could just and it pops
+
+01:10.560 --> 01:12.080
+right back to where I'm at.
+
+01:12.080 --> 01:17.920
+So I don't know, I think you kind of need to use a little bit of both.
+
+01:17.920 --> 01:22.280
+But yeah, it would be nice to kind of flip a window back and forth because there's some
+
+01:22.280 --> 01:26.700
+things about Eshell that I actually do like a lot.
+
+01:26.700 --> 01:34.240
+Now my Tramp suggestion, okay, I'll admit Tramp is, it's kind of fickle.
+
+01:34.240 --> 01:39.920
+I think we all get sometimes better use cases out of it than others.
+
+01:39.920 --> 01:45.200
+Uh oh, my headphones are out of batteries here.
+
+01:45.200 --> 01:48.640
+So we might have to flip here.
+
+01:48.640 --> 01:51.280
+But yeah, so the Tramp, I don't know.
+
+01:51.280 --> 01:56.320
+I think we have to kind of play with it and see how it goes.
+
+01:56.320 --> 02:02.480
+See another question is, have we thought about adding the Eshell manual?
+
+02:02.480 --> 02:10.340
+You know, after doing this talk and I'm realizing a lot of the half baked or almost good stuff
+
+02:10.340 --> 02:15.120
+with Eshell that we could just kind of fix a little bit and some of the, especially some
+
+02:15.120 --> 02:21.520
+of the docs, yeah, I'm kind of thinking that maybe, maybe I should hook up with somebody
+
+02:21.520 --> 02:27.120
+and we could try to do a little bit of extensions there, you know, like fix up the manual a
+
+02:27.120 --> 02:31.840
+little bit more, make it more of a tutorial, I think would help as well as fixing some
+
+02:31.840 --> 02:34.560
+of the little problems like that.
+
+02:34.560 --> 02:43.200
+Trying to be able to cat a buffer into the shell, I think is pretty useful.
+
+02:43.200 --> 02:46.160
+Let's see, do I know if Eshell can be used from Elisp?
+
+02:46.160 --> 02:48.160
+Yeah, I use that quite a bit.
+
+02:48.160 --> 02:52.920
+I actually have functions that call an Eshell command.
+
+02:52.920 --> 02:59.440
+That way I get all of the, you know, the benefits that you can get from an Eshell, like with
+
+02:59.440 --> 03:02.000
+the predicates and all that kind of thing.
+
+03:02.000 --> 03:06.480
+I can't remember who's been doing it, but lately I've been seeing a lot of the do what
+
+03:06.480 --> 03:13.400
+I mean shell commands that they're, they're building up a bunch of functions that do very
+
+03:13.400 --> 03:16.360
+specific things, what they need.
+
+03:16.360 --> 03:23.120
+And it seems like there's a lot of like special commands they're adding into it to like get
+
+03:23.120 --> 03:24.960
+the file name and that sort of thing.
+
+03:24.960 --> 03:29.680
+And I was thinking, Hey, that's a great idea, but let's do it with Eshell.
+
+03:29.680 --> 03:33.880
+So I've been doing something similar, but just calling out to Eshell itself.
+
+03:33.880 --> 03:39.800
+Let's see, next question, how does that interplay with my literate dellop bop approach?
+
+03:39.800 --> 03:41.760
+Yeah, the two are different.
+
+03:41.760 --> 03:48.600
+You know, when I'm doing my literate work, you know, I'm in an org file and I'm just
+
+03:48.600 --> 03:56.720
+writing commands, but yeah, sometimes it's just a little bit, you know, I'm not planning
+
+03:56.720 --> 03:57.720
+on keeping it.
+
+03:57.720 --> 04:02.720
+I'm just kind of investigating things and that's what rebels are really good for.
+
+04:02.720 --> 04:06.840
+And in that case, yeah, I'll pop over into Eshell, write things.
+
+04:06.840 --> 04:11.640
+If I see something good, that's where I was talking about my little engineering notebook,
+
+04:11.640 --> 04:17.080
+sending it out to a capture and then, and capturing it out or writing it into a buffer
+
+04:17.080 --> 04:19.600
+where I can do more things to it.
+
+04:19.600 --> 04:23.960
+I guess it's the flexibility I think we all kind of need because you don't know exactly
+
+04:23.960 --> 04:25.920
+where you're going until you're halfway there.
+
+04:25.920 --> 04:29.100
+And it's like, Oh, I don't want to start up a new app.
+
+04:29.100 --> 04:32.200
+That's why we're an Emacs.
+
+04:32.200 --> 04:33.200
+So yeah.
+
+04:33.200 --> 04:34.200
+Oh yeah.
+
+04:34.200 --> 04:35.200
+Thank you.
+
+04:35.200 --> 04:36.200
+Yeah.
+
+04:36.200 --> 04:37.200
+Alvaro Ramineers.
+
+04:37.200 --> 04:38.200
+Yeah.
+
+04:38.200 --> 04:40.880
+That's the stuff I've been reading a lot about.
+
+04:40.880 --> 04:41.880
+Let's see.
+
+04:41.880 --> 04:42.880
+Another question.
+
+04:42.880 --> 04:47.340
+Do I have a strategy for getting around Eshell's lack of support for input redirection?
+
+04:47.340 --> 04:50.520
+You know, it is what it is.
+
+04:50.520 --> 04:54.900
+I don't have any ideas at the moment.
+
+04:54.900 --> 04:56.480
+It's a good idea.
+
+04:56.480 --> 05:03.160
+Whenever, you know, we're so used to doing pipes and whenever you start doing a pipe
+
+05:03.160 --> 05:08.040
+at all, Eshell just immediately throws it into the shell.
+
+05:08.040 --> 05:11.280
+But then pulling it back in is kind of difficult.
+
+05:11.280 --> 05:15.480
+So that's why I just started writing them out to buffers and then pulling them back
+
+05:15.480 --> 05:16.480
+in.
+
+05:16.480 --> 05:21.720
+And I find that just a little bit more useful situation for what I'm doing.
+
+05:21.720 --> 05:27.040
+I don't know if other people will find it as useful as I do.
+
+05:27.040 --> 05:31.440
+But yeah, I'm getting a little tired of trying to get just the right command of piping everything
+
+05:31.440 --> 05:32.440
+together.
+
+05:32.440 --> 05:38.200
+And two years ago when I was talking about my little piper idea, this is kind of what
+
+05:38.200 --> 05:44.040
+it's morphed into was just using Eshell, running the commands, editing the stuff and then pulling
+
+05:44.040 --> 05:47.400
+it back in to send it to some other app.
+
+05:47.400 --> 05:54.720
+Or not even pulling it back in, just using it at that point and sending it off into emails.
+
+05:54.720 --> 06:02.400
+Yes, you can call elist functions, the commands.
+
+06:02.400 --> 06:05.560
+I was hoping this could be kind of clarified a little bit.
+
+06:05.560 --> 06:12.520
+But if you have any function, any emacs list function that starts with Eshell slash, that
+
+06:12.520 --> 06:14.880
+gets called first before any command.
+
+06:14.880 --> 06:18.800
+So you can override just about every shell command.
+
+06:18.800 --> 06:20.240
+That many of them are.
+
+06:20.240 --> 06:22.400
+So there is an Eshell slash ls.
+
+06:22.400 --> 06:27.560
+So if you type ls into your Eshell, it's actually calling that function.
+
+06:27.560 --> 06:32.540
+Now most of those functions will, if it runs into too many options that it doesn't know
+
+06:32.540 --> 06:40.040
+about or something like that, call out to whatever ls program you've got installed.
+
+06:40.040 --> 06:44.600
+But that's how it goes.
+
+06:44.600 --> 06:48.120
+So yes, buffers are superior pipes.
+
+06:48.120 --> 06:50.880
+Whoever is typing that, I think that's a great idea.
+
+06:50.880 --> 06:55.840
+I think that's kind of the concept that I'm realizing this year.
+
+06:55.840 --> 07:06.320
+Hold on one second while I switch headphones here.
+
+07:06.320 --> 07:08.640
+I suppose you can still hear me, right?
+
+07:08.640 --> 07:11.960
+Yep, I can still hear you.
+
+07:11.960 --> 07:18.760
+Well, nobody's talking yet.
+
+07:18.760 --> 07:20.800
+I can still hear you.
+
+07:20.800 --> 07:22.720
+OK, perfect, perfect.
+
+07:22.720 --> 07:23.720
+And I can hear you too.
+
+07:23.720 --> 07:26.800
+So that works well.
+
+07:26.800 --> 07:28.260
+Let's see.
+
+07:28.260 --> 07:30.280
+Any other questions in the IRC?
+
+07:30.280 --> 07:35.040
+Not seeing them mostly in the etherpad here.
+
+07:35.040 --> 07:42.600
+Do I have a preferred method for getting argument completion for shell commands?
+
+07:42.600 --> 07:46.120
+OK, that's a really good question.
+
+07:46.120 --> 07:53.720
+There is a function that I found in Eshell for getting options.
+
+07:53.720 --> 07:57.620
+And it's like, great, that's what I was expecting, something like a get ops.
+
+07:57.620 --> 08:02.040
+So I start playing around with it, and it's like almost there.
+
+08:02.040 --> 08:05.160
+The problem is it's not really as flexible as I would think.
+
+08:05.160 --> 08:08.320
+It either takes command line arguments or it doesn't.
+
+08:08.320 --> 08:13.880
+And it's kind of made for very simple commands only.
+
+08:13.880 --> 08:18.200
+So well, I ended up writing my own.
+
+08:18.200 --> 08:22.480
+So I wrote kind of a get ops like function, kind of behaves like it, where you can give
+
+08:22.480 --> 08:28.240
+it a list of single commands, a list of those long commands, some that take options and
+
+08:28.240 --> 08:30.280
+some that don't.
+
+08:30.280 --> 08:36.920
+And you'll see that in my, where I've got it here in the etherpad up on the full code.
+
+08:36.920 --> 08:41.200
+I also posted it up on Mastodon as well earlier.
+
+08:41.200 --> 08:44.240
+But I have a link to my configuration file.
+
+08:44.240 --> 08:45.240
+It's all literate.
+
+08:45.240 --> 08:50.200
+So you can just scroll down, search for get ops, and you'll see my function.
+
+08:50.200 --> 08:53.720
+I haven't fully tested out everything yet.
+
+08:53.720 --> 08:57.720
+Most of the code was actually written for this talk, I found.
+
+08:57.720 --> 09:01.200
+And so there will be bugs.
+
+09:01.200 --> 09:07.340
+But you know, you might find it interesting to grab some of the stuff and play around
+
+09:07.340 --> 09:08.340
+with it.
+
+09:08.340 --> 09:10.440
+If you find some bugs, please send them back to me.
+
+09:10.440 --> 09:14.320
+I'll discover them soon enough.
+
+09:14.320 --> 09:19.720
+So is it possible to get L.base completion for elist calls and eshell?
+
+09:19.720 --> 09:20.720
+Good question.
+
+09:20.720 --> 09:23.920
+I don't know.
+
+09:23.920 --> 09:28.160
+I have been switching from company mode to Corfu.
+
+09:28.160 --> 09:30.120
+Just try it all out.
+
+09:30.120 --> 09:37.080
+I'm getting some pretty good completions, but the EL doc based would be, that would
+
+09:37.080 --> 09:43.120
+be very lovely.
+
+09:43.120 --> 09:45.040
+A plan nine smart shell.
+
+09:45.040 --> 09:46.400
+Sorry, sorry.
+
+09:46.400 --> 09:47.400
+Oh, yes.
+
+09:47.400 --> 09:58.160
+I do remember reading Mickey Peterson's article on eshell and his plan nine idea.
+
+09:58.160 --> 10:04.240
+I was playing around with it for a little bit, but I don't know.
+
+10:04.240 --> 10:05.240
+Yeah.
+
+10:05.240 --> 10:11.720
+I couldn't get it quite working the way I thought I would want it to, so I didn't follow
+
+10:11.720 --> 10:12.720
+through.
+
+10:12.720 --> 10:18.600
+But I just got some good ideas there.
+
+10:18.600 --> 10:21.080
+Any other questions?
+
+10:21.080 --> 10:27.680
+But yes, I should, yeah, I should revisit Mickey Peterson's ideas.
+
+10:27.680 --> 10:28.680
+Say it again.
+
+10:28.680 --> 10:29.680
+Cool.
+
+10:29.680 --> 10:30.680
+Yeah, sorry.
+
+10:30.680 --> 10:32.720
+I guess I was just going to ask a question on the fly here.
+
+10:32.720 --> 10:33.720
+Sure.
+
+10:33.720 --> 10:38.040
+Yeah, which is, so you mentioned this sort of get up function or get up like function
+
+10:38.040 --> 10:39.040
+that you implemented.
+
+10:39.040 --> 10:43.840
+Would you consider maybe having that integrated in Emacs core itself so that it's available
+
+10:43.840 --> 10:46.880
+to all other eshell users?
+
+10:46.880 --> 10:54.040
+I think that'd be a great idea and I'm kind of thinking I need to kind of see what should
+
+10:54.040 --> 11:00.760
+go into eshell and what should maybe be like a side package like eshell ext kind of thing
+
+11:00.760 --> 11:07.200
+for getting some extra stuff because I don't know if everybody wants all of it.
+
+11:07.200 --> 11:13.800
+So having a side package might be a really good idea and then seeing, yeah.
+
+11:13.800 --> 11:15.760
+So yes, if you want to work on it with me.
+
+11:15.760 --> 11:16.760
+Yeah, sure.
+
+11:16.760 --> 11:17.760
+Sounds good.
+
+11:17.760 --> 11:18.760
+Why not?
+
+11:18.760 --> 11:19.760
+Sure.
+
+11:19.760 --> 11:20.760
+Sure.
+
+11:20.760 --> 11:23.840
+All right.
+
+11:23.840 --> 11:30.200
+Any other questions or good?
+
+11:30.200 --> 11:32.360
+I think we still have about, sorry.
+
+11:32.360 --> 11:33.360
+Go ahead.
+
+11:33.360 --> 11:36.760
+Oh, I was going to say I think we're out of questions.
+
+11:36.760 --> 11:37.760
+Right?
+
+11:37.760 --> 11:38.760
+Yeah.
+
+11:38.760 --> 11:39.760
+But we still are not out of time yet.
+
+11:39.760 --> 11:49.400
+So I think I've got more time for Q&A than I thought I had for the actual talk.
+
+11:49.400 --> 11:52.280
+Yeah, it's been interesting.
+
+11:52.280 --> 11:57.360
+So we were kind of debating on switching to two tracks like we have done this year or
+
+11:57.360 --> 12:01.240
+keeping or maintaining the same setup as the previous years, which was one track.
+
+12:01.240 --> 12:06.280
+But sort of all the talks were very like squeezing together and it was a last minute decision
+
+12:06.280 --> 12:07.280
+kind of.
+
+12:07.280 --> 12:10.000
+And we almost did end up going back to one track.
+
+12:10.000 --> 12:11.000
+But we're here.
+
+12:11.000 --> 12:14.760
+And I think that's the reason why some of the Q&As are sometimes longer than the talks
+
+12:14.760 --> 12:15.760
+themselves.
+
+12:15.760 --> 12:18.080
+Well, okay.
+
+12:18.080 --> 12:22.340
+So personally, I love the two track idea and I love all the breaks.
+
+12:22.340 --> 12:27.200
+It's made it a lot easier because last year it's like, oh, I can't even get up.
+
+12:27.200 --> 12:29.860
+Yeah, I feel you.
+
+12:29.860 --> 12:30.860
+And I feel the same too.
+
+12:30.860 --> 12:34.940
+Both, I mean, as someone who's been a little bit watching, but also as organizers, I mean,
+
+12:34.940 --> 12:39.360
+you couldn't catch a breath with like that one track rapid fire of talks one after another.
+
+12:39.360 --> 12:41.760
+So this is much better, I feel like.
+
+12:41.760 --> 12:42.760
+Yeah.
+
+12:42.760 --> 12:43.760
+Yeah.
+
+12:43.760 --> 12:44.760
+So let's keep it.
+
+12:44.760 --> 12:45.760
+Let's keep it going.
+
+12:45.760 --> 12:46.760
+Yeah.
+
+12:46.760 --> 12:48.760
+And next year, maybe I can do 15 minutes.
+
+12:48.760 --> 12:49.760
+Yes.
+
+12:49.760 --> 12:50.760
+Mal?
+
+12:50.760 --> 12:51.760
+Yes.
+
+12:51.760 --> 12:54.560
+Are you the maintainer of Eshell now?
+
+12:54.560 --> 12:56.560
+No, I'm not.
+
+12:56.560 --> 12:59.680
+Just an interested bystander.
+
+12:59.680 --> 13:03.200
+I think Eshell is still just part of Core.
+
+13:03.200 --> 13:09.260
+John Wiggly wrote it originally, but I think it's just part of the core.
+
+13:09.260 --> 13:13.540
+So I don't think anyone is maintaining it per se.
+
+13:13.540 --> 13:18.160
+It certainly is getting a little long in the tooth and we probably need to do some updatings
+
+13:18.160 --> 13:19.160
+on it.
+
+13:19.160 --> 13:21.720
+So maybe that's what we should do for version 30.
+
+13:21.720 --> 13:27.400
+Yeah, I've started to use it a little bit more just because of all the chatter on the
+
+13:27.400 --> 13:29.100
+various blogs, right?
+
+13:29.100 --> 13:31.240
+There is a lot of chatter lately.
+
+13:31.240 --> 13:38.080
+But it burned me recently for like half an hour because I was trying to SSH into a machine
+
+13:38.080 --> 13:39.080
+from Eshell.
+
+13:39.080 --> 13:45.240
+And usually, I use just regular shell mode.
+
+13:45.240 --> 13:53.160
+And for some reason, it just didn't connect up to the SSH agent or whatever.
+
+13:53.160 --> 13:57.840
+So I was thinking that everything's broken and stuff.
+
+13:57.840 --> 13:59.800
+I'm like running around trying to do stuff.
+
+13:59.800 --> 14:03.600
+Oh, it's just because I'm in Eshell trying to do this.
+
+14:03.600 --> 14:04.600
+Yes, yes.
+
+14:04.600 --> 14:07.600
+And if I know I'm going to be SSHing into a box, I don't.
+
+14:07.600 --> 14:10.280
+I just start up vterm and go.
+
+14:10.280 --> 14:12.280
+Then I know it's going to be pretty good.
+
+14:12.280 --> 14:16.240
+I've had a lot of good success in that regard with vterm.
+
+14:16.240 --> 14:21.360
+However, the problem is it's hard to pull that kind of stuff back.
+
+14:21.360 --> 14:25.040
+Like I'll find something interesting and it's like, oh, crap.
+
+14:25.040 --> 14:31.400
+Now I have to control C, control T, and then go up and collect it as opposed to shooting
+
+14:31.400 --> 14:37.040
+it out over into an org file with a redirection.
+
+14:37.040 --> 14:41.480
+That's why I've been kind of playing around with just using Tramp in Eshell as opposed
+
+14:41.480 --> 14:44.040
+to SSHing in.
+
+14:44.040 --> 14:46.040
+My knowledge may vary.
+
+14:46.040 --> 14:51.400
+I thought in the command interpreter, there's some stuff like...
+
+14:51.400 --> 14:52.400
+There is.
+
+14:52.400 --> 14:57.760
+It's supposed to be the visual commands.
+
+14:57.760 --> 15:02.200
+I think there's a list of them, and SSH is one of those.
+
+15:02.200 --> 15:11.920
+It's supposed to then start off as a shell mode, detached little process and feed stuff,
+
+15:11.920 --> 15:13.560
+but I don't know.
+
+15:13.560 --> 15:16.680
+I haven't had as much luck with it, so I haven't really bothered.
+
+15:16.680 --> 15:18.320
+I just jump.
+
+15:18.320 --> 15:21.400
+If I know I'm going to SSH, I'll just start a vterm and go.
+
+15:21.400 --> 15:29.240
+Well, I mean, aside from doing SSH, just using...
+
+15:29.240 --> 15:31.320
+I think there are a couple commands for...
+
+15:31.320 --> 15:38.720
+There's one for taking the command on the command line and putting it into the kill
+
+15:38.720 --> 15:44.880
+ring, and there's another one for flushing the buffer, flushing the last output of your
+
+15:44.880 --> 15:55.080
+buffer, and it works in many different shell or repl-type environments inside Emacs, but
+
+15:55.080 --> 16:00.520
+it doesn't put it into the kill ring, which was sort of confusing to me, so I'll have
+
+16:00.520 --> 16:07.000
+to dive into the Elisp at some point and figure out how to get what I want.
+
+16:07.000 --> 16:09.680
+I think that's the problem with this Eshell.
+
+16:09.680 --> 16:19.860
+There's a lot of interesting ideas, but there's a lot that's not quite baked yet.
+
+16:19.860 --> 16:26.280
+It's a combination of what we expect, because it's not a terminal emulator shell.
+
+16:26.280 --> 16:32.760
+It's not like Bash, it's different, but it's got some cool stuff, so there's expectation,
+
+16:32.760 --> 16:38.560
+and then there are just bugs and things that haven't been finished.
+
+16:38.560 --> 16:41.080
+I can't remember who started...
+
+16:41.080 --> 16:48.400
+I've got a link in my configuration file, but somebody was writing on how to get the
+
+16:48.400 --> 16:55.320
+output from the last command in shell, shell mode, and I thought, that's a great idea.
+
+16:55.320 --> 17:01.640
+I want that in Eshell, and then I found the source code that there's a double dollar sign
+
+17:01.640 --> 17:02.640
+that's already there.
+
+17:02.640 --> 17:03.640
+Great.
+
+17:03.640 --> 17:04.640
+Wait a minute.
+
+17:04.640 --> 17:05.640
+It doesn't work all the time?
+
+17:05.640 --> 17:10.640
+What the hell?
+
+17:10.640 --> 17:15.720
+When I saw that in your talk, I was like, oh, that's one of the things I've been looking
+
+17:15.720 --> 17:16.720
+for.
+
+17:16.720 --> 17:17.720
+It is, exactly.
+
+17:17.720 --> 17:22.640
+Now, I'll admit, the underpinnings are really good.
+
+17:22.640 --> 17:28.520
+It didn't take long to actually make that and fix it, and then make it even better.
+
+17:28.520 --> 17:32.800
+Like putting in a kill ring, it's like, now that is nice, so that I could just grab it
+
+17:32.800 --> 17:34.120
+as an array and go.
+
+17:34.120 --> 17:35.120
+That's really good.
+
+17:35.120 --> 17:37.600
+So, I think there's a lot of good stuff there.
+
+17:37.600 --> 17:42.200
+I think, yeah, let's just make some features.
+
+17:42.200 --> 17:48.000
+Let's make an extension, and let's assign the copyright to the BFSS.
+
+17:48.000 --> 17:53.080
+Yeah, maybe I'll start looking at Eshell after.
+
+17:53.080 --> 17:58.440
+I'm playing around with org-node right now, trying to catch up to some of the forks, but
+
+17:58.440 --> 18:02.840
+maybe Eshell is another, the next thing to sort of poke at.
+
+18:02.840 --> 18:05.840
+Aren't there so many fun things to do?
+
+18:05.840 --> 18:08.840
+It's terrible.
+
+18:08.840 --> 18:13.880
+Great, great, great.
+
+18:13.880 --> 18:17.960
+I got another question over here in the IRC, do you ever fall back to terminals and shells
+
+18:17.960 --> 18:20.160
+outside of Emacs?
+
+18:20.160 --> 18:32.260
+Okay, that, all right, confession time, yes, I sometimes use iterm.
+
+18:32.260 --> 18:37.920
+So when I, so when I first boot up, I do have to use a terminal before I start up Emacs
+
+18:37.920 --> 18:39.840
+because it's got to mount everything.
+
+18:39.840 --> 18:46.040
+So I do use iterm, and yeah, sometimes if it happens to be there, I'll type the command
+
+18:46.040 --> 18:51.040
+in there instead of running into Emacs.
+
+18:51.040 --> 18:56.440
+But I just find running those terminals to be pretty frustrating because most of them,
+
+18:56.440 --> 19:04.480
+you have to use a mouse to copy and select stuff.
+
+19:04.480 --> 19:08.480
+Yeah and actually I could maybe chime in here and say that yeah, exactly, not only for terminals
+
+19:08.480 --> 19:15.960
+but also for IRC clients, I feel like I've tried using a bunch of different ones, yeah,
+
+19:15.960 --> 19:20.880
+but it ultimately comes down to I can't just put the cursor up, you know, quickly grab
+
+19:20.880 --> 19:23.920
+something, kill it and paste it somewhere else or just use it.
+
+19:23.920 --> 19:28.040
+And yeah, that's, I feel like one of the killer features of Emacs or anything that's built
+
+19:28.040 --> 19:29.040
+into Emacs.
+
+19:29.040 --> 19:30.040
+Mm-hmm.
+
+19:30.040 --> 19:31.040
+Mm-hmm.
+
+19:31.040 --> 19:32.040
+Agreed.
+
+19:32.040 --> 19:39.320
+Lounge679 says, what are the less well oiled parts of Eshell and the edge cases?
+
+19:39.320 --> 19:45.960
+Yeah, that's a great phrasing, less well oiled parts.
+
+19:45.960 --> 19:51.760
+There's just a little friction and I think we need to figure out how to fix those things
+
+19:51.760 --> 19:54.360
+when we encounter them.
+
+19:54.360 --> 20:01.440
+Yeah, I should make a list of the things I found and hey, Mal, you give me a list too.
+
+20:01.440 --> 20:02.440
+And yeah.
+
+20:02.440 --> 20:09.040
+I think one of the problems with Eshell is that it's not based on comment, like shell
+
+20:09.040 --> 20:10.040
+and- It isn't.
+
+20:10.040 --> 20:17.400
+Yeah, and as a result, the other shells have like a uniform interface and uniform key bindings
+
+20:17.400 --> 20:19.040
+for doing things.
+
+20:19.040 --> 20:25.360
+And Eshell does things slightly differently, different enough that-
+
+20:25.360 --> 20:26.360
+That's right.
+
+20:26.360 --> 20:27.360
+Yeah.
+
+20:27.360 --> 20:28.360
+Yeah, exactly.
+
+20:28.360 --> 20:29.360
+And that's good and bad.
+
+20:29.360 --> 20:30.480
+It's doing something totally different.
+
+20:30.480 --> 20:35.280
+And if you know that it's just gonna be different and you'll treat it differently, at least that's
+
+20:35.280 --> 20:36.280
+how I found.
+
+20:36.280 --> 20:42.280
+So that's why I'm jumping between the vterm and Eshell, depending on what I'm trying to
+
+20:42.280 --> 20:43.340
+do.
+
+20:43.340 --> 20:48.760
+But I'm just finding there's a lot of interesting stuff in Eshell, but it changes how we run
+
+20:48.760 --> 20:49.760
+things.
+
+20:49.760 --> 20:56.240
+I think it's very similar to, well, I mean, if, okay, I'm not blaming names, but if you're
+
+20:56.240 --> 21:01.080
+a VI user, you're starting with a terminal and you're running commands.
+
+21:01.080 --> 21:04.400
+And then when you need to edit a file, you edit, you come back, but the shell is kind
+
+21:04.400 --> 21:05.400
+of your main focus.
+
+21:05.400 --> 21:10.160
+Well, we're all over here in Emacs and we just run commands from Emacs, right?
+
+21:10.160 --> 21:12.280
+That's just how we behave.
+
+21:12.280 --> 21:19.680
+And using Eshell is this way where don't go all the way, don't try to, but you can kind
+
+21:19.680 --> 21:22.300
+of pretend and do different things.
+
+21:22.300 --> 21:30.320
+So yeah, so that's why I say it kind of changes our behavior because it's doing things differently.
+
+21:30.320 --> 21:34.560
+So you can't look at it as another common.
+
+21:34.560 --> 21:43.600
+Wait, so when you say you're using vterm, does that mean you're using, that's a separate
+
+21:43.600 --> 21:49.920
+application outside of Emacs or is there a, oh, oh, yeah.
+
+21:49.920 --> 21:55.960
+So vterm is, I don't know when it came out, a couple of years ago, I don't know the details
+
+21:55.960 --> 22:02.960
+of it, but it's using a module library to do all the heavy lifting.
+
+22:02.960 --> 22:07.720
+So it's just a little better comment and I've just found it to be a lot, very reliable and
+
+22:07.720 --> 22:08.840
+pretty fast.
+
+22:08.840 --> 22:16.480
+So especially when I'm SSHing into another machine in my data centers and especially
+
+22:16.480 --> 22:21.200
+building all the Docker and some of the weird terminal stuff that I need to do in those
+
+22:21.200 --> 22:28.280
+shell environments using SSH, I just find vterm to be really good for what that does.
+
+22:28.280 --> 22:29.280
+Oh, okay.
+
+22:29.280 --> 22:30.280
+I see it now.
+
+22:30.280 --> 22:31.280
+It's on an alpha.
+
+22:31.280 --> 22:32.280
+All right.
+
+22:32.280 --> 22:33.280
+Yeah.
+
+22:33.280 --> 22:39.880
+It is in the, you're still in Emacs, but the key bindings are pretty good, but you do,
+
+22:39.880 --> 22:47.280
+you know, it has two modes, one for selecting text and then one for being a terminal.
+
+22:47.280 --> 22:50.280
+Maybe I'll try that out instead of metax-gel.
+
+22:50.280 --> 22:54.240
+Yes, I would, if you can.
+
+22:54.240 --> 22:59.200
+The problem that I think most people have is building that vterm library.
+
+22:59.200 --> 23:02.960
+I haven't had any problems on my work Mac.
+
+23:02.960 --> 23:04.480
+So it's been pretty good for me.
+
+23:04.480 --> 23:05.480
+Okay.
+
+23:05.480 --> 23:06.480
+All right.
+
+23:06.480 --> 23:12.240
+That's good to know about too, but that'll keep me from you like adopting Eshell.
+
+23:12.240 --> 23:13.240
+Sure.
+
+23:13.240 --> 23:17.720
+You know, that's a nice thing about choices.
+
+23:17.720 --> 23:18.720
+Yeah.
+
+23:18.720 --> 23:29.160
+You'll just find that vterm, I think behaves exactly like you expect a terminal to act.
+
+23:29.160 --> 23:31.560
+And so you won't have, you won't have to do much.
+
+23:31.560 --> 23:35.060
+I don't have much in the way of customizations.
+
+23:35.060 --> 23:41.160
+It's mostly my customizations is just starting a vterm running SSH automatically.
+
+23:41.160 --> 23:44.600
+So it's mostly about working with my external hosts.
+
+23:44.600 --> 23:51.600
+And if I may quickly jump in here, I think we have about another minute or so of live
+
+23:51.600 --> 23:55.760
+Q&A on the stream at which point then the stream will move on, but you folks are welcome
+
+23:55.760 --> 24:01.440
+to stay here or like continue the Q&A on the pad or whatever works best.
+
+24:01.440 --> 24:02.440
+Just staying in this room.
+
+24:02.440 --> 24:03.440
+Yeah.
+
+24:03.440 --> 24:04.440
+And continue talking.
+
+24:04.440 --> 24:05.440
+Lovely.
+
+24:05.440 --> 24:06.440
+Yeah.
+
+24:06.440 --> 24:12.120
+As Karthik has said vterm isn't distracting.
+
+24:12.120 --> 24:18.600
+It doesn't, you know, it's, it's just exactly what you expect.
+
+24:18.600 --> 24:20.480
+So it's not interesting either.
+
+24:20.480 --> 24:34.320
+No, I'm just, yeah, and so there's some good comments on the IRC.
+
+24:34.320 --> 24:35.320
+So yeah.
+
+24:35.320 --> 24:36.320
+Thanks everybody.
+
+24:36.320 --> 24:37.320
+It's been fun.
+
+24:37.320 --> 24:38.320
+All right.
+
+24:38.320 --> 24:39.320
+I'm going to jump off now.
+
+24:39.320 --> 24:40.320
+Nice talking to you, Howard.
+
+24:40.320 --> 24:41.320
+You too.
+
+24:41.320 --> 24:42.320
+All right.
+
+24:42.320 --> 24:43.320
+Thank you all.
+
+24:43.320 --> 24:46.800
+I think I'll drop off as well.
+
+24:46.800 --> 24:48.800
+All right.
+
+24:48.800 --> 24:50.800
+Thank you.
+
diff --git a/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt
new file mode 100644
index 00000000..e2ead1cc
--- /dev/null
+++ b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:28.999
+Introduction
+
+00:00:29.000 --> 00:00:48.599
+1. It’s an Emacs REPL
+
+00:00:48.600 --> 00:01:10.119
+2. It’s also a shell
+
+00:01:10.120 --> 00:03:27.559
+3. You can mix these two modes
+
+00:03:27.560 --> 00:04:36.079
+4. Emacs is better than shell
+
+00:04:36.080 --> 00:06:13.479
+5. Better regular expressions
+
+00:06:13.480 --> 00:07:39.639
+6. Loops are better with predicates
+
+00:07:39.640 --> 00:09:08.519
+7. Output of last command
+
+00:09:08.520 --> 00:10:26.879
+8. Redirection back to Emacs
+
+00:10:26.880 --> 00:12:28.399
+9. Using Emacs buffers
+
+00:12:28.400 --> 00:12:59.359
+10. cd to remote systems
+
+00:12:59.360 --> 00:14:01.920
+Summary
diff --git a/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt
new file mode 100644
index 00000000..62b813f3
--- /dev/null
+++ b/2022/captions/emacsconf-2022-eshell--top-10-reasons-why-you-should-be-using-eshell--howard-abrams--main.vtt
@@ -0,0 +1,739 @@
+WEBVTT captioned by howard
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.999
+I have 10 minutes to talk you into
+
+00:00:05.000 --> 00:00:07.879
+giving Eshell a second chance.
+
+00:00:07.880 --> 00:00:10.119
+Have the right perspective and expectation,
+
+00:00:10.120 --> 00:00:12.919
+and I think you’ll really enjoy it.
+
+00:00:12.920 --> 00:00:15.679
+Just remember eshell is a shell,
+
+00:00:15.680 --> 00:00:17.839
+not a terminal emulator.
+
+00:00:17.840 --> 00:00:20.279
+I use both Eshell and vterm.
+
+00:00:20.280 --> 00:00:23.479
+I’m going to talk and type fast,
+
+00:00:23.480 --> 00:00:28.999
+as I have 10 reasons for you to try Eshell again.
+
+NOTE 1. It’s an Emacs REPL
+
+00:00:29.000 --> 00:00:32.599
+1. It’s an Emacs REPL.
+
+00:00:32.600 --> 00:00:33.999
+I mean, check this out.
+
+00:00:34.000 --> 00:00:36.999
+Let’s start up Eshell here.
+
+00:00:37.000 --> 00:00:41.399
+Let’s just type a Lisp expression.
+
+00:00:41.400 --> 00:00:43.919
+It works.
+
+00:00:43.920 --> 00:00:48.599
+As a shell, the parens are kinda optional.
+
+NOTE 2. It’s also a shell
+
+00:00:48.600 --> 00:00:52.519
+2. It’s also a shell.
+
+00:00:52.520 --> 00:00:56.479
+While eshell may look like a shell, like Bash
+
+00:00:56.480 --> 00:00:58.559
+you should view it as a REPL
+
+00:00:58.560 --> 00:01:02.399
+with parenthesis-less s-expressions.
+
+00:01:02.400 --> 00:01:05.559
+This makes sense, because a shell command with options,
+
+00:01:05.560 --> 00:01:07.999
+like this ls command,
+
+00:01:08.000 --> 00:01:10.119
+looks like an s-expression.
+
+NOTE 3. You can mix these two modes
+
+00:01:10.120 --> 00:01:12.879
+3. You can mix these two modes.
+
+00:01:12.880 --> 00:01:14.959
+Shells can call subshells
+
+00:01:14.960 --> 00:01:17.919
+which return their output like a function call,
+
+00:01:17.920 --> 00:01:20.799
+like this Bash command.
+
+00:01:20.800 --> 00:01:22.759
+In this Eshell example,
+
+00:01:22.760 --> 00:01:24.639
+I use the output of a text file
+
+00:01:24.640 --> 00:01:27.959
+as command line arguments to ripgrep.
+
+00:01:27.960 --> 00:01:29.639
+Notice how I use braces
+
+00:01:29.640 --> 00:01:34.759
+to state that it is a call to an eshell expression.
+
+00:01:34.760 --> 00:01:40.039
+We can mix Lisp-expressions and Shell-expressions.
+
+00:01:40.040 --> 00:01:45.599
+Allow me a contrived example.
+
+00:01:45.600 --> 00:01:50.079
+Notice I use good ol' setq to create a variable.
+
+00:01:50.080 --> 00:01:54.919
+Yes, those are global Emacs variables available everywhere.
+
+00:01:54.920 --> 00:01:59.599
+In Eshell, the wildcard actually creates a list.
+
+00:01:59.600 --> 00:02:04.479
+This variable assignment doesn’t work as you might expect,
+
+00:02:04.480 --> 00:02:07.559
+as setq in Eshell is still setq,
+
+00:02:07.560 --> 00:02:10.319
+and it assigns variables in pairs.
+
+00:02:10.320 --> 00:02:17.119
+To make a list in Eshell, we use listify:
+
+00:02:17.120 --> 00:02:21.239
+Without parens, Eshell is in “shell mode”,
+
+00:02:21.240 --> 00:02:23.799
+which means that words are strings,
+
+00:02:23.800 --> 00:02:26.879
+and variables need to be prefixed with dollar signs.
+
+00:02:26.880 --> 00:02:32.399
+A command can have both Eshell and Lisp expressions.
+
+00:02:32.400 --> 00:02:34.559
+As you can see here,
+
+00:02:34.560 --> 00:02:37.119
+I have a call to ripgrep,
+
+00:02:37.120 --> 00:02:40.319
+but part of it is an s-expression.
+
+00:02:40.320 --> 00:02:42.239
+Remember the differences:
+
+00:02:42.240 --> 00:02:46.159
+With parens, eshell treats it as Lisp,
+
+00:02:46.160 --> 00:02:49.199
+like the last line in my example.
+
+00:02:49.200 --> 00:02:53.919
+With braces, eshell follows these shell-like rules:
+
+00:02:53.920 --> 00:02:57.159
+First, if it looks like a number, it's a number.
+
+00:02:57.160 --> 00:02:59.439
+Otherwise, eshell converts it to a string
+
+00:02:59.440 --> 00:03:03.679
+(quotes, like a shell, groups words).
+
+00:03:03.680 --> 00:03:07.519
+What about this mix between functions and executables
+
+00:03:07.520 --> 00:03:10.839
+for the first word?
+
+00:03:10.840 --> 00:03:15.439
+Functions that begin with eshell are called first.
+
+00:03:15.440 --> 00:03:19.079
+Next in priority are executables on your $PATH,
+
+00:03:19.080 --> 00:03:22.159
+then matching Lisp functions.
+
+00:03:22.160 --> 00:03:23.940
+You can actually switch this order
+
+00:03:23.941 --> 00:03:27.559
+with the `eshell-prefer-lisp-functions` variable.
+
+NOTE 4. Emacs is better than shell
+
+00:03:27.560 --> 00:03:31.759
+4. Emacs is actually better than shell.
+
+00:03:31.760 --> 00:03:35.199
+If the following works, why would you call
+
+00:03:35.200 --> 00:03:40.039
+expr or bc or dc, or any of those other calculators?
+
+00:03:40.040 --> 00:03:43.639
+You can just call a Lisp expression.
+
+00:03:43.640 --> 00:03:47.999
+Why call less or more when you could call view-file?
+
+00:03:48.000 --> 00:03:52.839
+Here, I’ve aliased less to view-file.
+
+00:03:52.840 --> 00:03:57.559
+Load it up, and it shows up in an Emacs mode.
+
+00:03:57.560 --> 00:04:01.519
+Just like with less, if you hit q,
+
+00:04:01.520 --> 00:04:05.759
+you go back to your Eshell terminal.
+
+00:04:05.760 --> 00:04:08.439
+I do have an improvement, though.
+
+00:04:08.440 --> 00:04:10.479
+The problem with view-file is
+
+00:04:10.480 --> 00:04:13.399
+it takes a single file as an argument.
+
+00:04:13.400 --> 00:04:15.719
+In a shell, we might want to view more than one.
+
+00:04:15.720 --> 00:04:18.719
+So let’s make a solution to that.
+
+00:04:18.720 --> 00:04:20.999
+This function will call the first function
+
+00:04:21.000 --> 00:04:22.159
+with the first argument,
+
+00:04:22.160 --> 00:04:26.679
+and the second function with each of the rest.
+
+00:04:26.680 --> 00:04:29.559
+This allows me to make a version of less
+
+00:04:29.560 --> 00:04:33.159
+that calls view-file on the first [argument] given,
+
+00:04:33.160 --> 00:04:36.079
+but open in another window for each additional file.
+
+NOTE 5. Better regular expressions
+
+00:04:36.080 --> 00:04:41.239
+5. Better regular expressions.
+
+00:04:41.240 --> 00:04:44.799
+Can’t remember regular expressions when calling
+
+00:04:44.800 --> 00:04:48.639
+grep or some other search function? Use the rx macro.
+
+00:04:48.640 --> 00:04:55.919
+Here I call ripgrep again, but this time,
+
+00:04:55.920 --> 00:05:00.679
+I’m using a Lisp expression calling the rx macro
+
+00:05:00.680 --> 00:05:04.719
+to look for UUIDs in the files in my current directory.
+
+00:05:04.720 --> 00:05:08.159
+But I have another improvement for this.
+
+00:05:08.160 --> 00:05:13.479
+While the rx macro is freaking cool for Emacs Lisp,
+
+00:05:13.480 --> 00:05:15.919
+it doesn’t always translate to regular expressions
+
+00:05:15.920 --> 00:05:20.079
+accepted by most commands.
+
+00:05:20.080 --> 00:05:25.199
+The (I have no idea how to pronounce this) pcre2el project
+
+00:05:25.200 --> 00:05:28.519
+can convert from a Lisp regular expression
+
+00:05:28.520 --> 00:05:31.359
+to Perl-compatible regular expressions (PCRE)
+
+00:05:31.360 --> 00:05:33.519
+acceptable by most search commands.
+
+00:05:33.520 --> 00:05:37.879
+I’ve created a new macro here, prx,
+
+00:05:37.880 --> 00:05:41.319
+that translates the output of the rx macro.
+
+00:05:41.320 --> 00:05:46.519
+This allows me to type something much more readable,
+
+00:05:46.520 --> 00:05:48.519
+and probably easier to remember.
+
+00:05:48.520 --> 00:05:54.679
+Certainly easier than this freaking regular expression.
+
+00:05:54.680 --> 00:05:59.439
+I’ve got an even better improvement.
+
+00:05:59.440 --> 00:06:03.559
+The rx macro with regular expression snippets
+
+00:06:03.560 --> 00:06:05.759
+can be assigned to key words
+
+00:06:05.760 --> 00:06:08.679
+that I can then take advantage of.
+
+00:06:08.680 --> 00:06:13.479
+Now our command would be much simpler to type.
+
+NOTE 6. Loops are better with predicates
+
+00:06:13.480 --> 00:06:16.159
+6. Loops are better with predicates.
+
+00:06:16.160 --> 00:06:18.759
+Let’s say you want to remove the execute bit
+
+00:06:18.760 --> 00:06:20.479
+from files that have it.
+
+00:06:20.480 --> 00:06:24.399
+In a shell like bash, you need both a for loop and an if,
+
+00:06:24.400 --> 00:06:26.599
+as you can see in this example.
+
+00:06:26.600 --> 00:06:31.559
+With eshell, use a predicate to combine into a simple loop.
+
+00:06:31.560 --> 00:06:34.359
+The paren x after a file glob
+
+00:06:34.360 --> 00:06:36.879
+filters for only files marked as executable.
+
+00:06:36.880 --> 00:06:43.559
+Now here is another improvement.
+
+00:06:43.560 --> 00:06:47.959
+Since we often type loops to execute on one command,
+
+00:06:47.960 --> 00:06:49.519
+what about creating a function
+
+00:06:49.520 --> 00:06:50.999
+that can do this all in one go?
+
+00:06:51.000 --> 00:06:57.599
+This do function splits the arguments on that double colon,
+
+00:06:57.600 --> 00:07:00.079
+where the left side is a single statement to run,
+
+00:07:00.080 --> 00:07:02.599
+and the right side is a list of files.
+
+00:07:02.600 --> 00:07:05.839
+I have to append and flatten it
+
+00:07:05.840 --> 00:07:07.639
+in order for it to work.
+
+00:07:07.640 --> 00:07:09.399
+It loops through each file,
+
+00:07:09.400 --> 00:07:12.079
+creating an eshell command with the file appended.
+
+00:07:12.080 --> 00:07:15.759
+With this, I can remove the execute bit
+
+00:07:15.760 --> 00:07:20.759
+on all CSV files that have it.
+
+00:07:20.760 --> 00:07:24.319
+I see that my example wasn’t too good, as most commands
+
+00:07:24.320 --> 00:07:29.039
+like chmod accept multiple files, but you get the idea.
+
+00:07:29.040 --> 00:07:33.159
+In my final, larger form on my website,
+
+00:07:33.160 --> 00:07:35.279
+I don’t assume the command expression accepts
+
+00:07:35.280 --> 00:07:36.719
+a file as a final argument,
+
+00:07:36.720 --> 00:07:39.639
+as I can also replace underscores with the filename.
+
+NOTE 7. Output of last command
+
+00:07:39.640 --> 00:07:45.399
+7. Output of last command.
+
+00:07:45.400 --> 00:07:48.799
+Most shells have a special variable
+
+00:07:48.800 --> 00:07:52.839
+like $? for the exit code of the last command.
+
+00:07:52.840 --> 00:07:55.919
+While reading through the source code,
+
+00:07:55.920 --> 00:07:58.799
+I noticed that the $$ refers to
+
+00:07:58.800 --> 00:08:00.599
+the output of the last command.
+
+00:08:00.600 --> 00:08:05.799
+This seems pretty cool.
+
+00:08:05.800 --> 00:08:10.759
+However, Eshell returns true or nil
+
+00:08:10.760 --> 00:08:12.719
+when running external commands,
+
+00:08:12.720 --> 00:08:15.879
+so accessing the output from a call to ls
+
+00:08:15.880 --> 00:08:19.479
+doesn’t work as expected.
+
+00:08:19.480 --> 00:08:21.119
+But this is Emacs.
+
+00:08:21.120 --> 00:08:23.159
+We can fix that.
+
+00:08:23.160 --> 00:08:28.119
+After running any command, eshell sets these four variables.
+
+00:08:28.120 --> 00:08:33.519
+I can hook a function call after every Eshell command.
+
+00:08:33.520 --> 00:08:36.759
+Using buffer-substring,
+
+00:08:36.760 --> 00:08:39.279
+I store the output into a global variable,
+
+00:08:39.280 --> 00:08:43.599
+and extend Eshell’s special variables list.
+
+00:08:43.600 --> 00:08:46.519
+In my Emacs configuration,
+
+00:08:46.520 --> 00:08:48.479
+I turned this variable into a ring,
+
+00:08:48.480 --> 00:08:51.439
+so while $$ works,
+
+00:08:51.440 --> 00:08:54.399
+so does array sub-scripting on that variable.
+
+00:08:54.400 --> 00:08:58.399
+This allows me to run a command
+
+00:08:58.400 --> 00:09:02.279
+and use the output from that command more than once.
+
+00:09:02.280 --> 00:09:05.279
+The code for this is a bit longer,
+
+00:09:05.280 --> 00:09:08.519
+so you’ll need to see my Emacs configuration for details.
+
+NOTE 8. Redirection back to Emacs
+
+00:09:08.520 --> 00:09:13.439
+8. Redirection back to Emacs.
+
+00:09:13.440 --> 00:09:14.879
+Output of any command
+
+00:09:14.880 --> 00:09:18.519
+can go to kill-ring (or the clipboard).
+
+00:09:18.520 --> 00:09:21.079
+Think of the implications.
+
+00:09:21.080 --> 00:09:23.839
+You don’t have to go into text selection mode.
+
+00:09:23.840 --> 00:09:26.239
+Just grab the output.
+
+00:09:26.240 --> 00:09:30.279
+In fact, with our $$ improvement,
+
+00:09:30.280 --> 00:09:33.239
+we can always copy the output from the last command
+
+00:09:33.240 --> 00:09:34.079
+to the clipboard.
+
+00:09:34.080 --> 00:09:37.999
+Better yet, let’s write the output
+
+00:09:38.000 --> 00:09:39.399
+to our engineering notebook.
+
+00:09:39.400 --> 00:09:41.679
+Here’s my idea.
+
+00:09:41.680 --> 00:09:46.079
+First, create a capture template that takes a string,
+
+00:09:46.080 --> 00:09:48.199
+or if called interactively, the region,
+
+00:09:48.200 --> 00:09:51.879
+and that does an immediate-finish after inserting
+
+00:09:51.880 --> 00:09:53.879
+that string to the default notes file.
+
+00:09:53.880 --> 00:09:57.679
+Next, create a wrapper function
+
+00:09:57.680 --> 00:10:01.559
+to call org-capture-string to run that template.
+
+00:10:01.560 --> 00:10:07.639
+Finally, we add our new function to eshell-virtual-targets.
+
+00:10:07.640 --> 00:10:08.759
+Let’s see this in action.
+
+00:10:08.760 --> 00:10:15.707
+I have a CSV file of user information.
+
+00:10:15.708 --> 00:10:19.719
+I can use grep and cut to extract some of that
+
+00:10:19.720 --> 00:10:26.879
+and write it out to this month’s engineering notebook.
+
+NOTE 9. Using Emacs buffers
+
+00:10:26.880 --> 00:10:35.279
+9. Using Emacs buffers.
+
+00:10:35.280 --> 00:10:39.159
+Why leave the results of eshell commands
+
+00:10:39.160 --> 00:10:40.279
+in the *eshell* buffer?
+
+00:10:40.280 --> 00:10:44.119
+Send the output into a buffer where you can use it.
+
+00:10:44.120 --> 00:10:47.999
+Here’s a call to ripgrep
+
+00:10:48.000 --> 00:10:50.759
+that searches for lines with email addresses
+
+00:10:50.760 --> 00:10:53.519
+using a complicated regular expression
+
+00:10:53.520 --> 00:10:56.079
+that I added to my prx macro.
+
+00:10:56.080 --> 00:11:01.079
+When I switch to this almost-grep buffer,
+
+00:11:01.080 --> 00:11:03.319
+I can turn on grep-mode.
+
+00:11:03.320 --> 00:11:09.039
+Now I can jump around as if I just called grep directly.
+
+00:11:09.040 --> 00:11:14.759
+Perhaps I’m proficient with my prx macro
+
+00:11:14.760 --> 00:11:16.639
+to filter out entries,
+
+00:11:16.640 --> 00:11:19.279
+but not good with shell commands
+
+00:11:19.280 --> 00:11:23.999
+that I can use in pipes to extract just one…
+
+00:11:24.000 --> 00:11:26.039
+the address column, for instance?
+
+00:11:26.040 --> 00:11:28.959
+Let’s just extract it,
+
+00:11:28.960 --> 00:11:33.279
+send it to a buffer called email-list,
+
+00:11:33.280 --> 00:11:38.479
+and now I can use Emacs commands that I know and love
+
+00:11:38.480 --> 00:11:39.799
+to edit the data directly.
+
+00:11:39.800 --> 00:11:55.799
+We currently have an over-sight
+
+00:11:55.800 --> 00:11:58.839
+that the Eshell’s built-in cat command
+
+00:11:58.840 --> 00:12:02.719
+doesn’t pipe buffer contents as standard in.
+
+00:12:02.720 --> 00:12:07.919
+So I created a bcat, a buffer cat, function to do this.
+
+00:12:07.920 --> 00:12:09.879
+So this command works
+
+00:12:09.880 --> 00:12:14.599
+to grab my email addresses I just extracted
+
+00:12:14.600 --> 00:12:16.319
+and send them to another program.
+
+00:12:16.320 --> 00:12:20.959
+If you’re interested, I have a more elaborate
+
+00:12:20.960 --> 00:12:25.759
+and yet simpler workflow surrounding sending data
+
+00:12:25.760 --> 00:12:28.399
+back and forth from Eshell to Emacs buffers.
+
+NOTE 10. cd to remote systems
+
+00:12:28.400 --> 00:12:35.679
+10. Did I mention that you can cd to remote systems?
+
+00:12:35.680 --> 00:12:39.879
+This command uses SSH to jump to my host, goblin,
+
+00:12:39.880 --> 00:12:44.039
+start a root session, and jump to the etc directory.
+
+00:12:44.040 --> 00:12:47.719
+Remember that Tramp can be finicky
+
+00:12:47.720 --> 00:12:52.839
+if you start blinging your remote hosts with oh-my-zshell,
+
+00:12:52.840 --> 00:12:57.790
+and funky prompts and things like that,
+
+00:12:57.791 --> 00:12:59.359
+so your mileage may vary.
+
+NOTE Summary
+
+00:12:59.360 --> 00:13:03.959
+In summary: Use eshell if you want
+
+00:13:03.960 --> 00:13:07.319
+a quick way to run commands and Emacs functions as a REPL,
+
+00:13:07.320 --> 00:13:11.479
+or to run an OS program but process the output with Emacs.
+
+00:13:11.480 --> 00:13:15.919
+Keep in mind that Eshell has two types of subshells,
+
+00:13:15.920 --> 00:13:19.599
+and you can mix and match during a command call.
+
+00:13:19.600 --> 00:13:22.639
+The rx macro is really cool.
+
+00:13:22.640 --> 00:13:26.599
+Eshell loops are better with filters and predicates …
+
+00:13:26.600 --> 00:13:28.239
+if you can remember them.
+
+00:13:28.240 --> 00:13:30.959
+Take advantage of Emacs buffers
+
+00:13:30.960 --> 00:13:32.879
+to really enhance your shell experience.
+
+00:13:32.880 --> 00:13:36.039
+You’ve now seen that just like Emacs,
+
+00:13:36.040 --> 00:13:39.519
+I’ve crafted Eshell to be my own shell creation,
+
+00:13:39.520 --> 00:13:41.039
+tailored to my workflow.
+
+00:13:41.040 --> 00:13:44.799
+So, steal my spells, cast your own magic,
+
+00:13:44.800 --> 00:13:48.759
+but feel free to share your incantations back to me.
+
+00:13:48.760 --> 00:13:51.359
+I’ve gone over my time allotment, so we’ll have to
+
+00:13:51.360 --> 00:13:53.679
+continue this discussion on the intertubes.
+
+00:13:53.680 --> 00:13:57.159
+Why yes, I have joined the birdless diaspora,
+
+00:13:57.160 --> 00:13:59.199
+so toot me over there.
+
+00:13:59.200 --> 00:14:01.920
+Thanks.
diff --git a/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt b/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt
new file mode 100644
index 00000000..dbebe238
--- /dev/null
+++ b/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--answers.vtt
@@ -0,0 +1,6638 @@
+WEBVTT
+
+00:00.000 --> 00:10.040
+Okay, hi, we seem to be back. Sorry for the little interruption. John, you might not have
+
+00:10.040 --> 00:14.640
+realized, but I was supposed to send a broadcast message to the dev track and I submitted it
+
+00:14.640 --> 00:20.840
+to the gen track instead, so I spoke over you for 20 seconds. I apologize humbly, deeply,
+
+00:20.840 --> 00:26.440
+and sincerely. But John, I have to apologize now. I will say hi to you. How are you doing?
+
+00:26.440 --> 00:30.120
+Hello, I'm doing good. I know I'm saying you harmonized with me. You didn't talk over me,
+
+00:30.120 --> 00:31.120
+you talked with me.
+
+00:31.120 --> 00:36.280
+You know, as much as I would like to say yes, that is possible, the fact that I did not
+
+00:36.280 --> 00:40.200
+have the sounds on your talk makes it very difficult for me to harmonize. You know, it's
+
+00:40.200 --> 00:48.200
+like try to have a barbershop quartet and they cannot hear one another. Try to tell
+
+00:48.200 --> 00:50.320
+them to harmonize. I'm not sure if it's going to work.
+
+00:50.320 --> 00:54.840
+I sang, actually sang in a barbershop chorus for a while and I know the pain that you're
+
+00:54.840 --> 00:59.400
+talking about. But anyway, it's water under the bridge.
+
+00:59.400 --> 01:04.640
+Yes, what a serendipitous discussion. I wasn't expecting this. Okay, you have the pad open
+
+01:04.640 --> 01:07.600
+in front of you. Do you want me to read the question or do you want to take them on your
+
+01:07.600 --> 01:08.600
+own?
+
+01:08.600 --> 01:09.600
+I'd be glad to do it.
+
+01:09.600 --> 01:10.600
+Right.
+
+01:10.600 --> 01:14.760
+All right, I'm just going to go start from the top here. I have not only one config,
+
+01:14.760 --> 01:20.200
+but multiple configs in different locations..emacs.init.el and.emacs.init.el and different
+
+01:20.200 --> 01:23.520
+Python installs in different places. This is something I should take care of earlier
+
+01:23.520 --> 01:27.880
+rather than later. I need to pay someone to consult on my config. Is this an existing
+
+01:27.880 --> 01:32.440
+business? Is there a place to barter a screen share for something else, a value in exchange?
+
+01:32.440 --> 01:36.720
+In any case, thank you for giving permission to have fun without the need for too much
+
+01:36.720 --> 01:37.720
+structure.
+
+01:37.720 --> 01:45.960
+That's, and that's, yeah, I feel humbled being asked this. I don't know how much insightful
+
+01:45.960 --> 01:51.240
+answers I can give here other than the fact that I did notice one of the talks that I
+
+01:51.240 --> 01:56.360
+really wanted to catch and resonate with was the Emacs buddy initiative. That was actually
+
+01:56.360 --> 02:00.680
+one of the points that I wanted to include in my talk, but it turns out that 10 minutes
+
+02:00.680 --> 02:07.260
+goes by incredibly fast when you, when the ideas are flowing. And I think that that's,
+
+02:07.260 --> 02:13.600
+that's probably one of the best advice that it, to sources is to find some kind of buddy
+
+02:13.600 --> 02:17.800
+who probably would be a great, especially someone who is, who is maybe at a similar
+
+02:17.800 --> 02:24.320
+or, or even a different experience or comfort level may be able to, you know, be a good
+
+02:24.320 --> 02:29.400
+exchange of value there. But yeah, I mean, that's, and again, it's something I'll think
+
+02:29.400 --> 02:33.760
+about more. I might not come up with the most interesting answers live.
+
+02:33.760 --> 02:38.120
+Oh, it's fine. Don't worry. You know, you don't have to worry about making the most
+
+02:38.120 --> 02:42.000
+exhaustive answer. You know, the whole point of, sorry, let me move myself to the left.
+
+02:42.000 --> 02:47.760
+Okay. Nevermind. I'm trying my best to composite the shot live. Yeah. You don't have to worry
+
+02:47.760 --> 02:52.680
+about making very exhaustive answer right now. Also, we have about 11 minutes. We might
+
+02:52.680 --> 02:56.040
+open up the chat. So you have a lot of questions. So I think a lot of people are very interested.
+
+02:56.040 --> 03:01.560
+I think, you know, when you have the arguments that you're trying to valorize the box standard
+
+03:01.560 --> 03:05.720
+user of Emacs, I think everyone is feeling very invested into the talk and might want
+
+03:05.720 --> 03:10.120
+to ask questions. So I'm giving you a heads up people. If you now is the last chance you
+
+03:10.120 --> 03:14.920
+have, we are the last talk of the day, barring the closing remarks. If you have questions
+
+03:14.920 --> 03:18.800
+to ask, now is the time to join DBB. We'll be opening it in two minutes. And in the meantime,
+
+03:18.800 --> 03:22.120
+John, feel free to go back to the question and answer as many as you can.
+
+03:22.120 --> 03:26.480
+Thank you. And I would love to talk about this with people in the community forever.
+
+03:26.480 --> 03:31.760
+So this is not the last chance to talk about it. All right. How would you suggest Emacs
+
+03:31.760 --> 03:35.400
+developers, including package developers, interface with non-developer users and get
+
+03:35.400 --> 03:43.680
+their insights to help in shaping future Emacs functionality?
+
+03:43.680 --> 03:50.680
+You know, I think I've seen a lot of discussion on the mailing lists where this kind of exchange
+
+03:50.680 --> 03:55.880
+is wanted. You know, I think this is one of those things that may, it may always be difficult
+
+03:55.880 --> 04:00.960
+because I've, you know, I have some participation on both sides of this, if there are sides
+
+04:00.960 --> 04:06.860
+to it. And I think that most people agree that there's maybe could be a more tighter
+
+04:06.860 --> 04:13.800
+communication. So I don't think there's anybody out there who thinks that there's work to
+
+04:13.800 --> 04:18.040
+be done here. There's definitely effort that should be dedicated here. It seems to me like
+
+04:18.040 --> 04:22.320
+it's happening. I mean, this, you know, the Emacs survey was developed pretty closely
+
+04:22.320 --> 04:28.800
+from what I could see with the core maintainers. So I think that it's out there. I mean, perhaps
+
+04:28.800 --> 04:33.280
+the mailing list is a good place to start, the several ones of them. I think that you'll
+
+04:33.280 --> 04:38.480
+certainly get an answer and hopefully it will start a dialogue that can continue.
+
+04:38.480 --> 04:44.600
+All right. Next one. My impression that many common Emacs users are migrating to other
+
+04:44.600 --> 04:49.080
+editors in past years. The reasons cited are configurations growing out of control, general
+
+04:49.080 --> 04:53.240
+rough around the edges feel of Emacs, they've been putting up with for a while and maybe
+
+04:53.240 --> 04:59.960
+this isn't new. As a result, Emacs is becoming a smaller set of people. More invested, do
+
+04:59.960 --> 05:04.520
+you share this observation? So what do I think of the trend? And I'm sorry that I was talking
+
+05:04.520 --> 05:09.360
+over your editing there. I hope I didn't pressure you into stopping. I mean, my, my impression
+
+05:09.360 --> 05:13.680
+has been that that that's a thing of the past that was happening. My impression, I've been
+
+05:13.680 --> 05:19.480
+using Emacs for something like 25 to 14 to 15 years, depending on exactly when you start
+
+05:19.480 --> 05:24.160
+counting the time. It's been a long time for me and I haven't been very aware of things
+
+05:24.160 --> 05:28.440
+that whole time and become more and more aware and conscientious of the scene over the years
+
+05:28.440 --> 05:37.160
+recently. But those impressions are that it was getting less, less usage in past years,
+
+05:37.160 --> 05:43.260
+but it's, it's got, I think it's been increasing pretty quickly in recent years and increasing
+
+05:43.260 --> 05:52.120
+at a pretty high rate. So I don't, I don't necessarily disagree that there are different
+
+05:52.120 --> 05:56.640
+sets of people within the Emacs community who may, whose usages may be changing and
+
+05:56.640 --> 06:01.160
+maybe certain sets of within the community are shrinking and their investment levels
+
+06:01.160 --> 06:06.360
+are changing. But my, my, up until now, if you had asked me, it would have, I would have
+
+06:06.360 --> 06:14.080
+said that the Emacs user base was growing, changing and the usage of what they were,
+
+06:14.080 --> 06:18.080
+what they were counting on was, would, would have becoming, you know, more towards the
+
+06:18.080 --> 06:25.820
+popular, maybe away from what the core user base would have, would have focused on previous
+
+06:25.820 --> 06:32.020
+to that. But yeah, overall it seems to me like it's growing. And I think that where
+
+06:32.020 --> 06:38.120
+we are here and everyone who's gathered here today is, is evidence of that.
+
+06:38.120 --> 06:47.480
+And what do I think of that trend? I mean, I, I'm happy about it. I think, I mean, I,
+
+06:47.480 --> 06:53.240
+one of the things that I didn't have a chance to focus too much on in the talk was, was
+
+06:53.240 --> 07:00.120
+the power of that vanilla out of the box experience. I am a Viper, happy Viper user. I don't think
+
+07:00.120 --> 07:04.200
+there really are many others that I, at least ones that I know about and they may, they
+
+07:04.200 --> 07:08.520
+just may be the people that I was describing in my talk. They may be out there using Viper
+
+07:08.520 --> 07:13.760
+happily and they're, and they're dark matter. They're there and they make up maybe a huge
+
+07:13.760 --> 07:21.120
+amount of the universe, but you just maybe can't, it can't feel their effect. But, you
+
+07:21.120 --> 07:27.280
+know, I think that the, I'm glad that that usage is growing, if it is. But I also would
+
+07:27.280 --> 07:32.960
+hope that people continue to value that out of the box vanilla experience. Because I think
+
+07:32.960 --> 07:38.640
+that it gets, it's easy to overlook and I think it probably does get overlooked. And
+
+07:38.640 --> 07:41.840
+that may just be a necessary consequence of the fact that when things become popular,
+
+07:41.840 --> 07:47.720
+when things grow in popularity, they are, what gets focus and what gets coverage is
+
+07:47.720 --> 07:55.040
+those things that are more receptive and lend themselves better to, to popularity. And that's
+
+07:55.040 --> 08:00.760
+not necessarily the same as the things that are the most, it's not everything is really
+
+08:00.760 --> 08:05.480
+all I can say. There's more, there's always more to it than that. So I hope that as popularity
+
+08:05.480 --> 08:14.000
+grows, people won't forget those things and those things will stay, stay useful for everyone.
+
+08:14.000 --> 08:19.200
+Should I do the last one or should I stop? Oh, yeah, I might have some comments on this
+
+08:19.200 --> 08:22.720
+if no one shows up afterwards, but for now, yes, feel free to answer the last question.
+
+08:22.720 --> 08:28.080
+Okay. Do you consider that using one of the starter packages, do me max, space max, etc.
+
+08:28.080 --> 08:31.820
+affect that learning process that you mentioned? Or is it a good thing from your perspective?
+
+08:31.820 --> 08:35.000
+You know, that was another thing I wanted to mention in a talk that I didn't, that my
+
+08:35.000 --> 08:39.240
+10 minutes didn't allow, or maybe just the way that I talk in those 10 minutes didn't
+
+08:39.240 --> 08:44.920
+allow. I wanted to just acknowledge the fact that I don't have experience with them. I've
+
+08:44.920 --> 08:52.560
+been using GNU Emacs since, since I started using Emacs. I think they solve a problem
+
+08:52.560 --> 08:59.480
+for people. I think they have a place. But, you know, I think, I think some of the thoughts
+
+08:59.480 --> 09:04.560
+that I had been forming that I wasn't able to put in there about these was that you need
+
+09:04.560 --> 09:10.220
+to start wherever gets comfortable for you. And I think that no matter what you use, whatever
+
+09:10.220 --> 09:17.900
+you start with, I think you, you always get to the point where you feel like you've entrenched
+
+09:17.900 --> 09:25.920
+yourself in mindset or a set of habits that you use and you think it's, you want to change,
+
+09:25.920 --> 09:29.960
+you know that you should be able to change and grow, but you've just become accustomed
+
+09:29.960 --> 09:41.520
+to what you do. And I think that if, if using a starter package, if using a starter package
+
+09:41.520 --> 09:46.680
+gets you over that initial, you know, gets you into the things, if you feel like it's,
+
+09:46.680 --> 09:49.720
+it's going to limit your growth later on, I don't think it's necessarily because of
+
+09:49.720 --> 09:53.000
+what you chose. It's just, that's, that's just the feeling that everybody's going to
+
+09:53.000 --> 10:01.080
+feel eventually. Yeah.
+
+10:01.080 --> 10:05.080
+So sorry, John, I was talking with production. Are we, are you finished with the questions?
+
+10:05.080 --> 10:07.080
+It seems that you are, yeah.
+
+10:07.080 --> 10:11.760
+Yes, I believe I am. And I will, again, I will add better thoughts to these later on
+
+10:11.760 --> 10:12.760
+the pad.
+
+10:12.760 --> 10:18.040
+Yeah, but that's fine. I think you did a bang up. I'm French. I don't know if a bang up
+
+10:18.040 --> 10:20.200
+job is a good job. Can you confirm it for me?
+
+10:20.200 --> 10:22.040
+Yes, thank you. I appreciate that.
+
+10:22.040 --> 10:27.000
+Cool. Thank you. So it seems like we have Bob on for a question. So Bob was the speaker
+
+10:27.000 --> 10:31.600
+for the HyperOrc talk earlier today. So Bob, can you hear us?
+
+10:31.600 --> 10:34.120
+Yes, I can hear you great.
+
+10:34.120 --> 10:36.520
+And we can hear you as well.
+
+10:36.520 --> 10:39.040
+Can you see me? Let's see if...
+
+10:39.040 --> 10:41.040
+We cannot see you yet though.
+
+10:41.040 --> 10:47.880
+Okay. Yeah. I just started, start sharing. So I wanted to ask you, I mean, one of the
+
+10:47.880 --> 10:58.960
+things we really suffer from hyperbole, we have this issue that we try to make things
+
+10:58.960 --> 11:06.560
+as easy to use as possible, right? Just point and click, press this button and the magic
+
+11:06.560 --> 11:12.700
+happens. But because we are dealing with a domain that has a lot of complexity to it,
+
+11:12.700 --> 11:20.480
+we find, like you're saying, people have always done something a certain way. They bring whatever
+
+11:20.480 --> 11:28.440
+processes with them that they've used before. So it feels like there's a much heavier barrier
+
+11:28.440 --> 11:34.440
+to get regular users on board than there really should be from what we think we're producing
+
+11:34.440 --> 11:41.920
+in the software. So I wanted to get your perspective about what you think that might be and, you
+
+11:41.920 --> 11:47.080
+know, ways we could pursue tackling that.
+
+11:47.080 --> 11:51.640
+And by regular users, you mean ones who have already had a lot of time and...
+
+11:51.640 --> 11:57.760
+Emacs users who are not developers, not just not Emacs developers, but maybe they're non-technical
+
+11:57.760 --> 12:06.280
+at all. But they have to manage everyday information. They do emails, they do memos and whatever
+
+12:06.280 --> 12:10.720
+else they're processing.
+
+12:10.720 --> 12:20.840
+I'm not sure if... I don't know. This might not answer things to your satisfaction, but
+
+12:20.840 --> 12:28.760
+I'll, you know, be glad to keep the conversation going. But I wonder if... One of the things
+
+12:28.760 --> 12:33.680
+I was thinking of is that it's very easy to generate, I think, a lot of psychic baggage
+
+12:33.680 --> 12:40.040
+with Emacs as you use it over time because you get... I think I mentioned this in the
+
+12:40.040 --> 12:46.600
+talk. It's very... It's hard to use it and not be aware of all the different cool functionalities
+
+12:46.600 --> 12:49.960
+that it's built on and the things that you can take advantage of. And part of that is
+
+12:49.960 --> 12:57.400
+that as you develop your own workflows, you are not only developing them, but you're,
+
+12:57.400 --> 13:02.000
+for pragmatic reasons, rejecting other things. But you don't, you know, you're still aware
+
+13:02.000 --> 13:05.280
+that you've done that and you're aware of all the different possibilities that you've
+
+13:05.280 --> 13:08.880
+kind of left behind, at least temporarily.
+
+13:08.880 --> 13:15.320
+I wonder... I think at some point that baggage can impede you. Definitely can. It can make
+
+13:15.320 --> 13:24.680
+you less open and feel less safe to try new things out. Especially if those things are...
+
+13:24.680 --> 13:30.320
+I think sometimes it scales with the more useful and exciting and maybe even... Oh,
+
+13:30.320 --> 13:34.920
+that's pretty... If it's going to be exciting and useful and significantly change things,
+
+13:34.920 --> 13:40.520
+you could maybe feel extra resistant to try them out because you're not sure that you
+
+13:40.520 --> 13:46.280
+want to deal with all that excitement. And sometimes, again, the more useful it is, maybe
+
+13:46.280 --> 13:49.200
+the more resistant you are.
+
+13:49.200 --> 13:55.000
+In the programming environment, you might consider the difference between Smalltalk
+
+13:55.000 --> 14:03.400
+and C. And Smalltalk has all this, like Lisp, all this great interactive capability, but
+
+14:03.400 --> 14:07.840
+you have the baggage of carrying this big image around that people didn't want many
+
+14:07.840 --> 14:14.280
+years ago when it was popular. And C had nothing and still largely has nothing, right? Except
+
+14:14.280 --> 14:22.040
+you've got Unix there. And so people stare at a blank screen. They have no dynamic support.
+
+14:22.040 --> 14:29.960
+Maybe they have tags, but very little tooling. And yet, C dominates over Smalltalk. So I
+
+14:29.960 --> 14:36.280
+think we're talking about a similar kind of problem that maybe the leap is so far for
+
+14:36.280 --> 14:42.400
+people that you need to give them a series in between to transition them from their very
+
+14:42.400 --> 14:48.480
+weak initial environment to something much, much stronger.
+
+14:48.480 --> 14:55.240
+Yeah, that's a good point. And that's actually something that I think of for myself and thus
+
+14:55.240 --> 15:01.480
+something I was thinking about in regards to my talk. When you know that you want to...
+
+15:01.480 --> 15:05.480
+Let's consider the kind of user that you're talking about and hyperbole. And by the way,
+
+15:05.480 --> 15:10.160
+I enjoyed your hyperbole talk, your hyper-org talk, but up until now I hadn't been familiar
+
+15:10.160 --> 15:14.720
+with it. So I may say things that don't make any sense. But let's say this user that you're
+
+15:14.720 --> 15:20.520
+talking about who you want to become more comfortable with hyperbole. I'll start from
+
+15:20.520 --> 15:26.280
+the perspective of let's say they know they want to become more comfortable with it, but
+
+15:26.280 --> 15:34.520
+they also are having trouble getting comfortable with that process. And so that's certainly
+
+15:34.520 --> 15:40.720
+something I thought about building for myself and suggesting in this talk of when you know
+
+15:40.720 --> 15:43.560
+that you want to accomplish something, when you know that you want to change some of your
+
+15:43.560 --> 15:54.400
+habits to call them out and really put your habits on display for yourself. And rather
+
+15:54.400 --> 15:58.680
+than trying to remember them and ingrain them into your finger muscle memory and all that
+
+15:58.680 --> 16:04.560
+is to make some space to have your habits be public, not public necessarily, but just
+
+16:04.560 --> 16:10.280
+explicit in your environment and allow yourself to be uncomfortable with new habits for a
+
+16:10.280 --> 16:18.760
+while and that break out of the habitual space, give yourself some kind of mnemonic structure
+
+16:18.760 --> 16:25.900
+that lets you do these things habitually that will eventually kind of become that mold into
+
+16:25.900 --> 16:30.760
+which the habits will grow on top of rather than just trying to go from one set of habits
+
+16:30.760 --> 16:37.080
+to a new set of habits. And I think Emacs is one of those things that is great for that
+
+16:37.080 --> 16:43.120
+because it's the text, and especially what you demonstrated in hyperbole in that it seems
+
+16:43.120 --> 16:50.040
+like it's very easy to just write some text up that can generate for you a cheat sheet
+
+16:50.040 --> 16:54.480
+and say I've been using this on the left side, instead I want to use this on the right side
+
+16:54.480 --> 16:59.120
+and maybe two buffers or something. And you don't have to worry about what it's called,
+
+16:59.120 --> 17:04.080
+you don't have to worry about how to execute it or the key sequence or the function. When
+
+17:04.080 --> 17:08.240
+you find one day you find yourself using something on the left side, I'd rather use this on the
+
+17:08.240 --> 17:19.000
+right. And maybe over time you can move away from that and try to make it be more automatic.
+
+17:19.000 --> 17:22.440
+But at least I think maybe the key there is just acknowledging that the things that are
+
+17:22.440 --> 17:34.520
+habitual or that you want to become habitual can start to give yourself training wheels.
+
+17:34.520 --> 17:40.880
+Right Jens, I'm very sorry I'm going to have to pause the conversation now. But don't leave
+
+17:40.880 --> 17:45.040
+quite yet, this was a very interesting discussion and I would love to participate a little more
+
+17:45.040 --> 17:48.440
+but we are actually preparing for the closing remarks in the background. But what I'm going
+
+17:48.440 --> 17:52.880
+to suggest, because I don't want you both to lose steam and the closing remarks, you
+
+17:52.880 --> 17:56.440
+can watch them in your own time, I'm just going to thank everyone really. So by all
+
+17:56.440 --> 18:00.400
+means if you want to continue the discussion, you can stay in the room, we are still going
+
+18:00.400 --> 18:04.360
+to be recording and if you want to continue the discussion for as long as you want, it's
+
+18:04.360 --> 18:08.800
+going to be all good for us. It just won't be streamed now but it will eventually be
+
+18:08.800 --> 18:29.760
+available. So if you want to join the discussion now,
+
+18:29.760 --> 18:34.640
+you only have to go to the talk page and you will be able to join there. I'm really sorry
+
+18:34.640 --> 18:38.720
+Bob, I'm going to have to end it off in 30 seconds because we need to move to the next
+
+18:38.720 --> 18:43.680
+room. So I'll leave you to say bye Bob if you want to.
+
+18:43.680 --> 18:48.680
+Okay, I will stay here and talk to whoever wants to talk.
+
+18:48.680 --> 18:54.120
+Great and Bob do you want to say bye? Bye, thanks John, I appreciate it.
+
+18:54.120 --> 19:01.120
+Okay see you in a bit, we'll be closing remarks in about one minute. Okay, really sorry for
+
+19:01.120 --> 19:04.720
+recording short, we are now off stream and you can keep talking and we are recording
+
+19:04.720 --> 19:07.960
+everything. Okay, see you in a bit, I have to rush.
+
+19:07.960 --> 19:10.720
+So yeah, again, I don't want to keep you from the closing remarks.
+
+19:10.720 --> 19:15.680
+No, I'm happy to talk to you. I think Leo just kept saying, well you can stay but I
+
+19:15.680 --> 19:21.360
+have to cut it off. So I guess he was just saying the recording. I don't care.
+
+19:21.360 --> 19:25.080
+Let me jump over to, there's another question that someone posted, I just want to make sure
+
+19:25.080 --> 19:28.240
+I don't ignore that and then I'll.
+
+19:28.240 --> 19:32.440
+The tip of the day package or some elaboration on that idea and Emacs help discovery for
+
+19:32.440 --> 19:36.160
+lay users, does that already exist?
+
+19:36.160 --> 19:40.960
+You know, I'm not, I can pretty, I don't know if the person who wrote this is, if it's
+
+19:40.960 --> 19:47.960
+plasma strike, but hopefully they'll see the recording later. I'm confident in saying that
+
+19:47.960 --> 19:52.840
+this does exist. I don't know what it is because I've never used it, I've never seen it, but
+
+19:52.840 --> 19:56.960
+I know that something like this must exist, so I'm confident in saying that it does.
+
+19:56.960 --> 20:01.280
+Yeah, I haven't seen it either.
+
+20:01.280 --> 20:07.000
+If not, I mean, it probably would be something that would be relatively easy to make. Not
+
+20:07.000 --> 20:12.480
+necessarily the person who wants this, but yeah, it's something that I could.
+
+20:12.480 --> 20:19.640
+That's kind of interesting. If you put an org or a high rollo file together of all these
+
+20:19.640 --> 20:27.440
+tips, it would be very easy to, yeah, have something on a timer that would just pop one
+
+20:27.440 --> 20:34.920
+up every so often or based on some action, but that's kind of an interesting learning
+
+20:34.920 --> 20:42.300
+technique. I certainly use that in some other packages where a lot of times you just X out
+
+20:42.300 --> 20:49.400
+of it right away, but for things that actually provide useful tips, you tend to read them
+
+20:49.400 --> 20:56.320
+and linger for a bit, right, before you move on, and that's a great way because, I mean,
+
+20:56.320 --> 21:04.000
+after decades of using Emacs, there's definitely packages in Emacs, libraries that I've never
+
+21:04.000 --> 21:11.040
+seen before, I didn't know were there, and that I sometimes find useful, so there's always
+
+21:11.040 --> 21:20.880
+a lot to discover, and that feature discovery is a difficult thing, because that's why we
+
+21:20.880 --> 21:26.220
+spend a lot of time documenting things, because like with the reference manual, hyperbole
+
+21:26.220 --> 21:34.080
+about 170 pages, I don't expect people to read the manual, but to use it in info and
+
+21:34.080 --> 21:39.380
+say I'm interested in the action button, okay, I'll just read that action button section,
+
+21:39.380 --> 21:47.020
+and that's really what it's intended for, and why we provide quick access. In fact,
+
+21:47.020 --> 21:55.800
+if you look at the menu structure, the pull-down menus for hyperbole, there's just one pull-down
+
+21:55.800 --> 22:05.660
+menu, but the submenus under there, each one has an about or a doc item, and when you click
+
+22:05.660 --> 22:10.600
+on that, it takes you exactly to the place in the manual, discussing the concept that's
+
+22:10.600 --> 22:18.120
+covered by that menu, so it makes it very easy for people, but I was wondering, you
+
+22:18.120 --> 22:26.200
+know, if you, I think you have a lot of good process-oriented thoughts, and I'll say, you
+
+22:26.200 --> 22:33.740
+know, if you know who Doug Engelbart is or was, I worked with him a bit, and he was always
+
+22:33.740 --> 22:40.560
+focused on you have to evolve your process while you evolve your technology, and clearly,
+
+22:40.560 --> 22:48.280
+a lot of the people in the Emacs developer community are sort of focused on the technology,
+
+22:48.280 --> 22:53.720
+which is common, right, even in corporations, and it's always sort of a struggle to get
+
+22:53.720 --> 23:00.160
+people to try to evolve both at the same time, so I'd be interested in sort of conversing
+
+23:00.160 --> 23:06.920
+along those lines about, you know, we've built, so we've built two levels, I think, in hyperbole,
+
+23:06.920 --> 23:12.280
+we've built the toolkit of primitives that you can build from, and customize to your
+
+23:12.280 --> 23:19.200
+own needs, but we haven't done a lot about, and people are always asking, well, what's
+
+23:19.200 --> 23:24.920
+the workflow that I should use to integrate it with, and we're like, you know, well, what's
+
+23:24.920 --> 23:30.280
+your knowledge workflow, you know, what sort of tasks do you have to do, and then we can
+
+23:30.280 --> 23:35.800
+tell you something, but it is one of those general kinds of things, you know, like I
+
+23:35.800 --> 23:43.240
+say, I use the K-outliner to capture requirements, because I want, when I share those requirements
+
+23:43.240 --> 23:49.360
+with people, I want them to say, you know, well, item 9a, let's edit this this way, because
+
+23:49.360 --> 23:53.760
+a lot of times, right, they can't interact with the document that directly, or they want
+
+23:53.760 --> 24:03.120
+me to maintain it, so I find that everything is numbered that way, in any sort of structured
+
+24:03.120 --> 24:14.560
+ideation process, to be extremely valuable, and so, but I think, you know, maybe, obviously,
+
+24:14.560 --> 24:19.180
+as you said, you haven't used that, but, and I've worked on a lot of other Emacs stuff,
+
+24:19.180 --> 24:27.480
+but I think it'd be valuable, you know, having some discussions with you, to talk about that,
+
+24:27.480 --> 24:34.720
+you know, perspective from somebody trying to grok something like this, or, you know,
+
+24:34.720 --> 24:45.680
+get deeper into Emacs, and I always feel like, like I'm developing some new software at work,
+
+24:45.680 --> 24:51.480
+and our company is kind of moving from being a more consulting company to a technology
+
+24:51.480 --> 24:58.720
+company, and I say, well, okay, we're doing this big, big set of applications, where's
+
+24:58.720 --> 25:03.860
+the market input? The business people kind of wave their hands and say, you know, we
+
+25:03.860 --> 25:11.900
+want something shiny, but we never get structured input from the actual clients that will be
+
+25:11.900 --> 25:17.120
+the users, until we build something and put it in their hands, and I'm like, that's too
+
+25:17.120 --> 25:25.760
+late, you know, and we need, so I think it's sort of true here, too, that it's very hard
+
+25:25.760 --> 25:32.400
+to just, you know, like if I said, let's just have 10 people who have never tried hyperbole,
+
+25:32.400 --> 25:37.360
+look at it, go through a process, and just write one page on their experience, you know,
+
+25:37.360 --> 25:42.320
+but I think that'd be very hard to get that set of people together in general, you know,
+
+25:42.320 --> 25:44.720
+without effort, significant effort.
+
+25:44.720 --> 25:50.520
+That's a good point, because the people that would be able to use it, i.e. people who are
+
+25:50.520 --> 25:56.920
+already Emacs users for the most part, they're probably either already familiar with it,
+
+25:56.920 --> 26:03.360
+or busy, too, or maybe they have their own ways that they don't, they might be competent
+
+26:03.360 --> 26:08.800
+enough to do it, but not comfortable enough to do it, or not interested enough to do it.
+
+26:08.800 --> 26:12.720
+Maybe you have the intersection of all the different properties, which might be pretty
+
+26:12.720 --> 26:13.720
+small.
+
+26:13.720 --> 26:22.360
+Yeah, but just having those ideas, I think it helps us, you know, to shape, and I feel
+
+26:22.360 --> 26:33.040
+like we can take what we have and meld it, like what, if you saw Carl Volt's talk on
+
+26:33.040 --> 26:39.200
+his bi-directional links, I think that's a super valuable thing that we, you know, we
+
+26:39.200 --> 26:44.960
+haven't really considered much, but people talk about a lot as a result of work, having
+
+26:44.960 --> 26:48.040
+given them that capability for a while.
+
+26:48.040 --> 26:52.080
+That was Eduardo Oakes, was that Eduardo Oakes, or?
+
+26:52.080 --> 26:54.640
+No, no, that was not Eduardo.
+
+26:54.640 --> 27:00.120
+He's an interesting fellow, you know, it's like clearly very bright, but he lives in
+
+27:00.120 --> 27:08.120
+this academic-like bubble that, like, he wants to understand everything from the atomic level
+
+27:08.120 --> 27:15.840
+up in order to use it, so, you know, imagine, like, personally, you're what?
+
+27:15.840 --> 27:21.000
+I identify with that mindset, so I, so yeah, if you wanted to use toilet paper, would you
+
+27:21.000 --> 27:24.400
+try to understand the atomic composition?
+
+27:24.400 --> 27:31.320
+I'm just saying, he takes an extreme view, which may be, for him, that's what he finds
+
+27:31.320 --> 27:37.760
+work, so, but some interesting things come out of that, which is his EEV kind of stuff,
+
+27:37.760 --> 27:40.920
+which is very, very explicit, right?
+
+27:40.920 --> 27:48.960
+Everything is laid out, so it's bulky in a sense, but it, but he's got some good ideas
+
+27:48.960 --> 27:55.240
+on, like, tutorials and stuff, and he seems like he's more a scientist than a developer,
+
+27:55.240 --> 28:01.920
+so, you know, when we were trying to, I said, you could, the things you want to do, Hyperbole
+
+28:01.920 --> 28:07.200
+has a toolkit for, so just use Hyperbole, and then we'll help you shape whatever you
+
+28:07.200 --> 28:14.480
+want to do, and that's where we were never able to do that, because he'd say, well, okay,
+
+28:14.480 --> 28:21.920
+you have a button type that does what I want it to do, but now explain to me all the activation
+
+28:21.920 --> 28:27.280
+process for that, and I'm like, well, then you'd have to understand the, you know, the
+
+28:27.280 --> 28:32.240
+key parts of the Hyperbole code base, and you don't really need to, to do what we're
+
+28:32.240 --> 28:37.400
+talking about, so we can't, you know, that would take a long time, so let's not do that,
+
+28:37.400 --> 28:43.960
+and that never worked for him, so he decided to just build his own stuff, but then you
+
+28:43.960 --> 28:49.520
+look into that stuff, and it's sort of what you described in your talk, is, you know,
+
+28:49.520 --> 28:56.440
+it's not structured, it's, it's messy, it's, it's just sort of, you know, cobbled together,
+
+28:56.440 --> 29:06.320
+so he's got the same, he's got the same issue that it's, he doesn't want to do it just for
+
+29:06.320 --> 29:12.360
+his personal need, he wants, he wants this to be somebody that, something that people
+
+29:12.360 --> 29:18.000
+use, and so he gives talks and things like that, and he, so he, he's got this way of
+
+29:18.000 --> 29:23.720
+thinking that's very different than other people, that keeps his stuff away from people,
+
+29:23.720 --> 29:30.640
+but that's not his intention, it's just, you know, sort of the operational mechanics of
+
+29:30.640 --> 29:35.920
+the way it is, and I'd love, you know, I'd love to help him with that, or do something,
+
+29:35.920 --> 29:41.840
+he's a very nice fellow, but I haven't gotten him past the, you know, there are other abstraction
+
+29:41.840 --> 29:49.200
+levels besides the atomic level, let's, let's work on some of those levels, for him, you
+
+29:49.200 --> 29:53.040
+know, there's some sort of barrier, I think, there, so you're saying you're a little like
+
+29:53.040 --> 29:59.760
+that too? You have to get your hands on everything? Yeah, and I think that's, and full disclosure,
+
+29:59.760 --> 30:04.680
+I don't, I didn't have a lot of time to write, or to get in, I didn't have a lot of, like,
+
+30:04.680 --> 30:09.120
+in those 10 minutes to say everything I wanted to say, like, I'm not, I don't want to give
+
+30:09.120 --> 30:14.000
+the impression that I'm not a technical person, I am, I am a programmer, and I've been, like
+
+30:14.000 --> 30:18.880
+I said, I've been using Emacs for a very long time, just that over time, I probably, you
+
+30:18.880 --> 30:24.600
+know, just kind of have stayed in my personal sphere, and kind of worked, carved out a little
+
+30:24.600 --> 30:31.360
+thing that works for me, so I, my perspective might be a little surprising, to come up,
+
+30:31.360 --> 30:35.040
+you know, to people who might think, well, a talk like that, you're, you know, you're
+
+30:35.040 --> 30:40.520
+still a beginner, or you're still on the fringes, I'm like, no, I don't think I'm, I'm neither,
+
+30:40.520 --> 30:43.840
+neither beginner, feel like I'm a beginner, nor am I on the fringes of anything, I've
+
+30:43.840 --> 30:50.680
+just, my path has taken me through a certain way that is, is personal, it just happens,
+
+30:50.680 --> 30:57.880
+you know, but I think what you're saying earlier, is that, to identify, is, is that, that is
+
+30:57.880 --> 31:02.760
+one tension, the tension you were just mentioning, of, want to do something, but the Emacs is
+
+31:02.760 --> 31:08.120
+just one of those platforms where, where it's so, can entice you to do things, it can be
+
+31:08.120 --> 31:12.200
+so interesting and enticing to do certain things that you, it can lead to a lot of pain,
+
+31:12.200 --> 31:17.520
+and that you can, and confusion, where you can really want to learn something, and think,
+
+31:17.520 --> 31:22.240
+in your head, I'm always, you know, I'm, you know, I'm always thinking of, it was a dialogue
+
+31:22.240 --> 31:26.700
+with, you know, a dozen people when I used Emacs, a dozen other people whose, whose work
+
+31:26.700 --> 31:33.800
+I've read about, and developers, I've, I've read their works and stuff, of, it's hard
+
+31:33.800 --> 31:37.600
+to be doing something, and not be thinking about making it available for somebody else
+
+31:37.600 --> 31:43.640
+to use, I think it's, it's both very personal, and it's also hard to have a personal barrier,
+
+31:43.640 --> 31:48.240
+because I'm always, you know, I'm always thinking about, how would I expose this functionality
+
+31:48.240 --> 31:53.000
+for general purposes, how would I, how would I publish this, and so I can identify with
+
+31:53.000 --> 31:58.760
+that, and also, also, I want, you, you want to know, both, maybe there's just certain
+
+31:58.760 --> 32:02.880
+personalities, and mine would be one of them, where you really want to know why things are
+
+32:02.880 --> 32:06.600
+happening the way that they're happening, and I think Emacs is one of those places where,
+
+32:06.600 --> 32:11.520
+when you come in, you come in on the ground floor, and you see, wow, I can go up so high,
+
+32:11.520 --> 32:15.360
+but also, you, you can look down and say, well, there's a hundred floors below me, and
+
+32:15.360 --> 32:18.040
+you get torn, you know.
+
+32:18.040 --> 32:25.280
+I would ask a question like, do you, do you tend to look at the way Lisp primitives are
+
+32:25.280 --> 32:32.880
+implemented in C, or do you just focus on the documentation of the Lisp function, and
+
+32:32.880 --> 32:38.160
+then work from there, in terms of your Emacs, how far down you go?
+
+32:38.160 --> 32:40.200
+Good question.
+
+32:40.200 --> 32:41.200
+It's changed recently.
+
+32:41.200 --> 32:47.040
+I'd say, up until a couple years ago, I was mostly focused on the, on inside, you know,
+
+32:47.040 --> 32:52.400
+inside the Lisp machine, and going up, but I've started getting a little more curious
+
+32:52.400 --> 32:55.160
+about the C layer below that.
+
+32:55.160 --> 32:59.000
+One of the things I started looking at was some of the way that the key maps have been
+
+32:59.000 --> 33:06.920
+handled, the key, the map lookups were handled at the C level, because of the, my Viper,
+
+33:06.920 --> 33:14.640
+sort of affinity, my affinity for Viper, because there's some, some functionality there that
+
+33:14.640 --> 33:20.680
+changed or was made a little bit, the implementation was made a little bit different.
+
+33:20.680 --> 33:24.800
+So I guess, I guess both, but I, but I could understand that, yeah, there's, I, I never
+
+33:24.800 --> 33:30.640
+felt like I had to understand anything below that level, but just, it's good that.
+
+33:30.640 --> 33:37.640
+And do you go up, do you spend a lot of time thinking about the user level and user experience,
+
+33:37.640 --> 33:43.920
+user interfaces in your other work even, or, you know, just to get an idea of the sort
+
+33:43.920 --> 33:49.880
+of problems you'd like to sink your teeth into, you know, how you might provide some
+
+33:49.880 --> 33:55.280
+feedback on the hyperbole side, if you were to?
+
+33:55.280 --> 34:01.960
+I think I'm, I, I, in terms of technical stuff, I do like to stay more, I get more satisfaction,
+
+34:01.960 --> 34:10.320
+I think, thinking about the, the problem solving, especially in Emacs, just how to build, how
+
+34:10.320 --> 34:18.440
+to solve a problem in general, just, you know, UI level stuff or user experience stuff, I
+
+34:18.440 --> 34:25.640
+think it's just, it's, it's harder, it can be harder to do it right, but I guess that's
+
+34:25.640 --> 34:31.840
+something that I don't, I just haven't, I guess I haven't put, I guess I put more of
+
+34:31.840 --> 34:38.560
+my energy towards the, the middle tier of things of kind of just building general solutions.
+
+34:38.560 --> 34:43.400
+But if, but if it comes, I mean, I, hyperbole is definitely high, if not on the top of my
+
+34:43.400 --> 34:49.480
+list now, coming out of today's presentation and hearing about it today, of things to look
+
+34:49.480 --> 34:50.480
+at no matter what.
+
+34:50.480 --> 34:57.120
+So, I mean, I'm, I'm eager to learn more about it and use it from, from wherever, wherever
+
+34:57.120 --> 35:00.440
+I end up kind of landing on, on that, that spectrum.
+
+35:00.440 --> 35:07.600
+Well, I'm wondering if you might have some time to, so we have, there's two other people
+
+35:07.600 --> 35:11.040
+who gave the two other talks who work with me.
+
+35:11.040 --> 35:18.360
+We do a Sunday meeting, Sunday morning, East coast time, you know, one guy's on the development
+
+35:18.360 --> 35:22.840
+and the other is Ramin, who is a writer.
+
+35:22.840 --> 35:28.200
+And I mean, he's an ML engineer too, but he's new to hyperbole.
+
+35:28.200 --> 35:33.120
+So he's kind of, you know, converting some of what he did in a word to hyperbole.
+
+35:33.120 --> 35:39.120
+So he's kind of a good feedback loop for us there too.
+
+35:39.120 --> 35:45.400
+Matt and I have been, you know, deep in it for many years, so we can't, we can't see
+
+35:45.400 --> 35:47.040
+it in an unbiased way.
+
+35:47.040 --> 35:52.960
+And I'm just thinking, you know, maybe if you have a bit of time, you may want to, you
+
+35:52.960 --> 35:58.680
+know, think about giving us some structured feedback or, you know, coming to one of those
+
+35:58.680 --> 36:01.320
+meetings chatting with us.
+
+36:01.320 --> 36:02.320
+Yeah.
+
+36:02.320 --> 36:08.040
+You know, so, and I'm happy to answer your questions too, because I think, I just feel
+
+36:08.040 --> 36:14.840
+like there's, I'll tell you, this is, so my background with Emacs, besides as a user,
+
+36:14.840 --> 36:22.240
+I built something called InfoDoc, which was an extensive IDE to try to bring out Emacs
+
+36:22.240 --> 36:24.240
+functionality.
+
+36:24.240 --> 36:30.000
+Many years ago, it was an extensive set of menus, popup menus, pull down menus, and fixing
+
+36:30.000 --> 36:36.280
+a lot of stuff like, like in our mail, the keys and the interface wasn't the same between
+
+36:36.280 --> 36:39.800
+the summary buffer and the main buffer.
+
+36:39.800 --> 36:42.920
+And I, I normalized all that fixed stuff in Dura.
+
+36:42.920 --> 36:50.400
+All of that was like all rolled into InfoDoc so that a lot of these warts that people talk
+
+36:50.400 --> 36:57.320
+about that still are there to this day, some of them I see got put together and that was
+
+36:57.320 --> 37:06.680
+just built to top Zmax, the fork, XZmax fork of, you know, when Jamie Zawinski was doing
+
+37:06.680 --> 37:07.680
+it.
+
+37:07.680 --> 37:12.480
+And so I, you know, I still use some of that with Gnuely Max, but I never took the time
+
+37:12.480 --> 37:14.280
+to repackage it and stuff like that.
+
+37:14.280 --> 37:15.800
+So that's sort of sitting out there.
+
+37:15.800 --> 37:21.880
+And then I built the OO browser, which was a small talk like a code browser for eight
+
+37:21.880 --> 37:24.680
+different object oriented languages.
+
+37:24.680 --> 37:30.320
+And that's sitting out there waiting for just a, I had it ready, largely ready except for
+
+37:30.320 --> 37:34.820
+some documentation and I have no time to work on it.
+
+37:34.820 --> 37:40.720
+So it's never been, the modern version hasn't been republished for people to use, but you
+
+37:40.720 --> 37:45.920
+know, it sort of tells you some of the areas that, that I've spent a lot of time in and
+
+37:45.920 --> 37:49.300
+I've built some pretty big things.
+
+37:49.300 --> 37:53.760
+So I've gotten to see, you know, what's absorbable and what's not.
+
+37:53.760 --> 37:59.640
+And, you know, there is a lot of people sort of staying down at that low level that I think
+
+37:59.640 --> 38:05.840
+you do tend to run into with Emacs users, but there was like people love people who
+
+38:05.840 --> 38:07.960
+use the OO browser.
+
+38:07.960 --> 38:13.400
+That was a very good user experience because it was just very smooth and it had multiple
+
+38:13.400 --> 38:16.320
+windows and, you know, did what people wanted.
+
+38:16.320 --> 38:21.360
+And it was very fast because I focused on the algorithms and there was nothing else
+
+38:21.360 --> 38:23.400
+that could do what it could do.
+
+38:23.400 --> 38:29.480
+Now, now that we have all these language server protocols, which I still think are not quite
+
+38:29.480 --> 38:34.640
+where they should be on the backend, but you know, it's nice that now they're integrating
+
+38:34.640 --> 38:35.640
+Eclot.
+
+38:35.640 --> 38:41.160
+So I'm not a big user of those yet, but I hope to get more leverage out of them if they,
+
+38:41.160 --> 38:47.120
+in fact, you know, can give them, satisfy the queries that I really need in my work.
+
+38:47.120 --> 38:51.440
+So yeah, I think you'll find, you'll definitely find some utility.
+
+38:51.440 --> 38:57.720
+I think, you know, once you grok a bit, and I don't think it'll take you that long to
+
+38:57.720 --> 39:04.360
+get enough of a sense of hyperbole to start building a couple types, button types yourself
+
+39:04.360 --> 39:08.360
+and tailoring it to whatever your needs are.
+
+39:08.360 --> 39:13.800
+But as you said, I'm kind of interested in your thoughts about what will make that easier
+
+39:13.800 --> 39:22.120
+for people maybe with, maybe with not as much technical knowledge as you have.
+
+39:22.120 --> 39:27.280
+And just, you know, that you're willing to put yourself in somebody else's shoes, I think
+
+39:27.280 --> 39:33.080
+is a very valuable kind of way to be and something I'd like to.
+
+39:33.080 --> 39:40.160
+Well, I certainly, I'm willing to, willing to try, can't promise what my mindset will
+
+39:40.160 --> 39:43.360
+end up producing, but I, you know, it's, let's put it this way.
+
+39:43.360 --> 39:47.240
+If I could, if I could benefit from what you've created, benefit from learning about it, and
+
+39:47.240 --> 39:53.200
+at the same time, potentially give some benefit back, you know, that seems like it's a win-win-win.
+
+39:53.200 --> 39:55.200
+So I'm happy.
+
+39:55.200 --> 40:02.440
+Well, I'd be very surprised if you can't, but we, we accept that kind of feedback too,
+
+40:02.440 --> 40:06.700
+is that, you know, there's too much of a barrier to entry for this reason here.
+
+40:06.700 --> 40:10.760
+I love to hear those things too, because, you know, there have been things that weren't
+
+40:10.760 --> 40:19.480
+there that we've built after, like there's a guy, Sean, Sean something, he's like a business
+
+40:19.480 --> 40:24.760
+user who runs his business on this custom database that he's built.
+
+40:24.760 --> 40:28.840
+And he uses hyperbole as a front end to that backend database.
+
+40:28.840 --> 40:33.200
+He calls it, I forget it's hyper or something.
+
+40:33.200 --> 40:38.200
+And he, he has a lot of deeper thoughts, you know, very specific, like he'll write it with
+
+40:38.200 --> 40:40.880
+just one issue that he's trying to do.
+
+40:40.880 --> 40:44.440
+And sometimes, you know, we'll implement things for him.
+
+40:44.440 --> 40:46.640
+And that seems to work pretty well.
+
+40:46.640 --> 40:51.360
+Sometimes he wants things that are further afield, you know, and we don't go there,
+
+40:51.360 --> 40:58.000
+but he's, he's a useful, one of the users on the very low traffic hyperbole mail list.
+
+40:58.000 --> 41:03.560
+So he's probably responsible for 80% of the traffic, right?
+
+41:03.560 --> 41:05.960
+He's the Pareto subscriber.
+
+41:05.960 --> 41:06.960
+Yeah.
+
+41:06.960 --> 41:07.960
+Yeah.
+
+41:07.960 --> 41:16.040
+So, but I look forward to it and I think you'd like Ramin and Matt, Matt is an engineer for
+
+41:16.040 --> 41:25.680
+Spotify and he has implemented 260 test cases for hyperbole that are run against the three
+
+41:25.680 --> 41:30.040
+major versions of Emacs every time we commit.
+
+41:30.040 --> 41:36.200
+And that's proven to be very successful because, you know, sometimes we're modifying things
+
+41:36.200 --> 41:43.080
+at the engine level and who knows what, what set of button types that affects.
+
+41:43.080 --> 41:50.520
+So it works really well when we're, and we've had very good success that we have very few,
+
+41:50.520 --> 41:58.480
+you know, bugs that we don't know about already being found by users once we make a release.
+
+41:58.480 --> 42:01.760
+It seems like PlasmaStrike wants to jump in.
+
+42:01.760 --> 42:02.760
+I'm sorry.
+
+42:02.760 --> 42:03.760
+I didn't, wasn't.
+
+42:03.760 --> 42:07.120
+I did see your link earlier possibly by the Emacs dashboard and I opened it, it looked
+
+42:07.120 --> 42:08.120
+pretty cool.
+
+42:08.120 --> 42:12.560
+Bob, you might, you might, yeah.
+
+42:12.560 --> 42:23.080
+I've been getting my partner into LogSec with org, which is kind of like org-roam for knowledge
+
+42:23.080 --> 42:24.080
+bases.
+
+42:24.080 --> 42:29.920
+And I've been using that, having my knowledge base on LogSec.
+
+42:29.920 --> 42:36.720
+He could look at it, it's getting synchronized with sync thing and he can see how I do the
+
+42:36.720 --> 42:37.720
+stuff.
+
+42:37.720 --> 42:39.480
+He can replicate it if he wants to.
+
+42:39.480 --> 42:45.640
+Then I'm thinking about putting CRDT with Emacs so that we could both edit the same
+
+42:45.640 --> 42:50.120
+document in real time.
+
+42:50.120 --> 42:55.920
+And that way I can get Emacs to work with the same data set as org-roam and that way
+
+42:55.920 --> 43:01.920
+he doesn't have to learn absolutely everything that Emacs has to offer.
+
+43:01.920 --> 43:07.800
+There's also, I can use all that stuff if I want to use it.
+
+43:07.800 --> 43:08.800
+That's cool.
+
+43:08.800 --> 43:16.120
+I, you know, I've heard of that, but not necessarily, didn't know anything about it.
+
+43:16.120 --> 43:21.080
+So that's, I'm looking, you know, all I guess all I can say at this point is that it looks
+
+43:21.080 --> 43:22.080
+really cool.
+
+43:22.080 --> 43:29.200
+It's, does it sounds like you're saying it's front, it's easy to, easy accessible, easily
+
+43:29.200 --> 43:30.200
+to get into.
+
+43:30.200 --> 43:32.360
+Well, you can also put it on your phone too.
+
+43:32.360 --> 43:39.360
+So it would probably be a really good way of doing that, even though it's harder to
+
+43:39.360 --> 43:48.160
+get Emacs on your phone and on iPhones as well.
+
+43:48.160 --> 43:52.400
+You got to figure out, that's what people were asking about, touchscreens.
+
+43:52.400 --> 43:55.640
+Have we thought about how to use touchscreens?
+
+43:55.640 --> 44:00.800
+I think it's an interesting challenge for Emacs, you know, you even talk about mouse
+
+44:00.800 --> 44:07.840
+buttons and people kind of freak out a lot of times because they're so keyboard driven.
+
+44:07.840 --> 44:14.200
+Well, one of the great things about Emacs is it's a keyboard is a first citizen and
+
+44:14.200 --> 44:19.200
+mouse can't be a first citizen because you're going to have to switch between it and all
+
+44:19.200 --> 44:21.200
+the time.
+
+44:21.200 --> 44:28.560
+If you go back to Engelbart's work, it was one hand on the mouse, one hand on the keyboard.
+
+44:28.560 --> 44:37.320
+And you know, we do miss some of that, that ability to point at things and make operations
+
+44:37.320 --> 44:38.320
+on them.
+
+44:38.320 --> 44:45.160
+We have things like Avi, I believe it is, right, for where you can move around across
+
+44:45.160 --> 44:47.720
+windows and buffers very rapidly.
+
+44:47.720 --> 44:53.400
+So you can get to like an exact point in a buffer much faster, and then you could act
+
+44:53.400 --> 44:55.120
+on it, you know, doing it that way.
+
+44:55.120 --> 44:57.720
+So it's kind of like a replacement for that.
+
+44:57.720 --> 45:03.300
+But it's amazing when you start to think a little differently like that.
+
+45:03.300 --> 45:07.720
+And certainly people have done that with split keyboards and they, some people only use half
+
+45:07.720 --> 45:09.600
+of the keyboard then.
+
+45:09.600 --> 45:12.920
+So and they have all the modifier keys, you know, that's what we're doing.
+
+45:12.920 --> 45:18.080
+In fact, Hyperbole has a module that isn't active, but it's sitting out there.
+
+45:18.080 --> 45:24.500
+And it turns the mouse keys into two modifier buttons.
+
+45:24.500 --> 45:28.720
+So it could be control and meta, or whatever have you.
+
+45:28.720 --> 45:34.400
+And so if you want to operate that way, you can emulate what Engelbart was doing with
+
+45:34.400 --> 45:38.440
+your regular keyboard and the mouse.
+
+45:38.440 --> 45:44.520
+Didn't that, didn't he have like a weird mouse where it had like more buttons on it?
+
+45:44.520 --> 45:47.520
+He was three buttons, actually, yeah.
+
+45:47.520 --> 45:50.080
+He had the chord keyboard you're thinking of.
+
+45:50.080 --> 45:56.840
+The keyboard was like five keys that you could press as chords.
+
+45:56.840 --> 46:02.120
+So you could press all five or three of them, and they would produce different character
+
+46:02.120 --> 46:03.120
+outputs.
+
+46:03.120 --> 46:05.880
+I mean, they had a lot of things that we don't have.
+
+46:05.880 --> 46:13.520
+You know, their file system was node based, and so everything could be hyperlinked to.
+
+46:13.520 --> 46:17.440
+And they had permanent IDs everywhere, and they had journals.
+
+46:17.440 --> 46:22.120
+And they had implemented almost all of this in assembly at first, and it was on a time
+
+46:22.120 --> 46:23.120
+shared machine.
+
+46:23.120 --> 46:26.800
+So everything was collaborative instead of individual.
+
+46:26.800 --> 46:30.680
+But you know, so we'll get there eventually.
+
+46:30.680 --> 46:36.320
+It's a lot of, a lot of things have changed that we've had to, you know, fight against
+
+46:36.320 --> 46:38.800
+separating people from collaborating.
+
+46:38.800 --> 46:44.760
+And now everybody's trying to get back to you and say, let's build collaborative software.
+
+46:44.760 --> 46:50.320
+Yeah, I noticed that's another, another one of those cycles that I noticed was the talk
+
+46:50.320 --> 46:57.080
+of, I forget who, it was the guy who did the SQLite thing and how he, how he was basically
+
+46:57.080 --> 47:03.720
+saying, hey, text is great, but these, these somewhat relational databases have a lot of
+
+47:03.720 --> 47:04.720
+things to offer.
+
+47:04.720 --> 47:07.200
+And I'm thinking, yeah, of course, I agree.
+
+47:07.200 --> 47:12.160
+But it's just funny how so much of the Emacs ethos has been, text can do so much, and they
+
+47:12.160 --> 47:13.160
+were right.
+
+47:13.160 --> 47:18.560
+And then now, like, this is, it's like a turning point to say, hey, text can't do all these
+
+47:18.560 --> 47:22.160
+things, but let's use Emacs to take advantage of all this non-text stuff too.
+
+47:22.160 --> 47:27.600
+That's just, that's just one of those, kind of those cyclical things of where we do what
+
+47:27.600 --> 47:31.360
+we can with text, and then someone notices that, hey, we, maybe we could do something
+
+47:31.360 --> 47:35.360
+without text, and then that, that balance might shift and just go back and forth.
+
+47:35.360 --> 47:39.560
+And it sounds like it's the same, like you're talking about with collaboration.
+
+47:39.560 --> 47:43.840
+Have you ever seen VisiData?
+
+47:43.840 --> 47:53.440
+It's a curses program that one guy has written that can manipulate any sort of tabular information.
+
+47:53.440 --> 48:00.360
+It's the, it's the Emacs of, like, you don't want to use a spreadsheet, and you want to
+
+48:00.360 --> 48:02.720
+do data analysis.
+
+48:02.720 --> 48:04.360
+It's pretty unbelievable what's in there.
+
+48:04.360 --> 48:06.560
+It's written in Python.
+
+48:06.560 --> 48:15.600
+But he has asynchronous slurping of super large CSVs that are compressed and encrypted.
+
+48:15.600 --> 48:17.600
+So it's basically like a Unix tool.
+
+48:17.600 --> 48:23.600
+You can use a command line wise, but then it gives you a curses interface, and you can
+
+48:23.600 --> 48:27.040
+slice and dice and get histograms.
+
+48:27.040 --> 48:28.040
+So it's kind of amazing.
+
+48:28.040 --> 48:30.680
+I tried, the key bindings were so different.
+
+48:30.680 --> 48:35.560
+I did some work to try to make it more Emacs-like in that.
+
+48:35.560 --> 48:40.600
+But he would have something that would be so valuable if it wasn't connected to the
+
+48:40.600 --> 48:41.600
+curses interface.
+
+48:41.600 --> 48:46.720
+You know, it was an API, and, but he likes it that way.
+
+48:46.720 --> 48:49.200
+And so he just keeps developing it.
+
+48:49.200 --> 48:55.440
+But it's really amazing if you have to process a lot of data and don't want to use Excel
+
+48:55.440 --> 48:56.440
+or something.
+
+48:56.440 --> 49:00.280
+That's with a Z, Visi or S, or?
+
+49:00.280 --> 49:02.280
+No, V-I-S-I-D-A-T-A.
+
+49:02.280 --> 49:05.160
+You'll find it.
+
+49:05.160 --> 49:12.000
+It's his name is Paul Swanson.
+
+49:12.000 --> 49:13.200
+It's not Swanson.
+
+49:13.200 --> 49:17.000
+It's something like that, though.
+
+49:17.000 --> 49:18.520
+I think it is.
+
+49:18.520 --> 49:22.640
+I think according to his website, according to the website, it says Saul Pwonson.
+
+49:22.640 --> 49:23.640
+So I'm guessing that.
+
+49:23.640 --> 49:24.640
+Yes, Saul Pwonson.
+
+49:24.640 --> 49:25.640
+I get it backwards.
+
+49:25.640 --> 49:26.640
+I was Paul Swanson.
+
+49:26.640 --> 49:31.640
+Yeah, he's a great guy.
+
+49:31.640 --> 49:32.640
+That's another thing on my list.
+
+49:32.640 --> 49:33.640
+It'll go.
+
+49:33.640 --> 49:34.640
+Yeah, check it out.
+
+49:34.640 --> 49:38.400
+Don't blow your mind what's in there.
+
+49:38.400 --> 49:43.960
+And again, it's like there's a small community, but it's like all these people that it's such
+
+49:43.960 --> 49:51.360
+a simple download, you know, it's a standalone executable, but largely, you know, people
+
+49:51.360 --> 49:52.440
+just don't know about it.
+
+49:52.440 --> 49:58.680
+I tripped over it and I'm like, my God, how do you get this far without me hearing about
+
+49:58.680 --> 49:59.680
+it?
+
+49:59.680 --> 50:01.240
+I think that's one of those.
+
+50:01.240 --> 50:06.840
+Maybe it's a case where if you don't get a lot of attention, you end up doing things
+
+50:06.840 --> 50:12.120
+in a way that you take things in the direction that you want to take them.
+
+50:12.120 --> 50:15.720
+And sometimes that leads to a bad place and sometimes it leads to a really interesting
+
+50:15.720 --> 50:16.720
+and good place.
+
+50:16.720 --> 50:23.120
+And it's probably somewhere in between that seems like he's taking this to a place.
+
+50:23.120 --> 50:28.360
+He had some usability issues and then he got like two other people on the team and they
+
+50:28.360 --> 50:34.360
+really helped him, I think with that, you know, he takes feedback pretty well and the
+
+50:34.360 --> 50:36.440
+team takes feedback well.
+
+50:36.440 --> 50:40.160
+So they've been evolving it, you know, from version one to like, I think they're on three
+
+50:40.160 --> 50:46.160
+now and you know, it's come a long way that way too.
+
+50:46.160 --> 50:52.120
+And now he's got a job, I believe, where he can work on it as well.
+
+50:52.120 --> 50:58.280
+So yeah, that should advance it a lot too.
+
+50:58.280 --> 51:03.960
+So yeah, there's so much good stuff going on, you know, and it's just what's not going
+
+51:03.960 --> 51:08.760
+on is sort of what we had long ago was the reusability.
+
+51:08.760 --> 51:13.560
+Nobody's really building libraries anymore, you know, that people can build on.
+
+51:13.560 --> 51:20.320
+It's all like, well, we got to wrap a web app around our API and that's it.
+
+51:20.320 --> 51:24.920
+And we're not going to make the code underlying the API shareable.
+
+51:24.920 --> 51:28.960
+You have to consume it, but that's all you can do.
+
+51:28.960 --> 51:35.160
+And so I think where everybody's rebuilding the same things again and again now, because
+
+51:35.160 --> 51:43.840
+sort of what Stallman talks about, that sharing culture has been snuffed out so broadly, you
+
+51:43.840 --> 51:49.520
+know, in terms of what people spend most of their waking hours on, right?
+
+51:49.520 --> 51:54.880
+As professional developers and, you know, you kind of miss it, right?
+
+51:54.880 --> 52:00.240
+From when you could, because having written that old browser, I mean, what I would do,
+
+52:00.240 --> 52:03.720
+what I remember doing is saying, okay, here's a thousand classes.
+
+52:03.720 --> 52:09.040
+I'll just run my browser over it and get to understand the interrelationships.
+
+52:09.040 --> 52:13.060
+And it's like, well, where are those like, you know, they're out there, there's still
+
+52:13.060 --> 52:18.540
+numerical libraries and things, but you just don't have the ecosystem because the energy
+
+52:18.540 --> 52:25.680
+is going somewhere else, you know, to the finished products, more than reusable building
+
+52:25.680 --> 52:26.680
+blocks.
+
+52:26.680 --> 52:27.680
+I think.
+
+52:27.680 --> 52:28.680
+Yeah.
+
+52:28.680 --> 52:30.480
+Have you heard of Glorious Toolkit?
+
+52:30.480 --> 52:35.680
+I think that's what it's called, but it's a continuation of Smalltalk and it has a lot
+
+52:35.680 --> 52:40.840
+of concepts like that where you have multiple representations of the same data.
+
+52:40.840 --> 52:46.480
+Like the, also that Mother of All Demos where Engelbarton was doing that.
+
+52:46.480 --> 52:47.480
+Yeah.
+
+52:47.480 --> 52:48.960
+I know, I've seen that many times.
+
+52:48.960 --> 52:53.560
+I got to work with Doug maybe for a year or so.
+
+52:53.560 --> 52:58.320
+By the way, Plasma Strike, I'm going to put that on my queue to watch because I've never
+
+52:58.320 --> 52:59.320
+actually watched.
+
+52:59.320 --> 53:00.320
+I know about it.
+
+53:00.320 --> 53:01.320
+Oh yeah.
+
+53:01.320 --> 53:02.320
+It's great.
+
+53:02.320 --> 53:03.320
+It's great.
+
+53:03.320 --> 53:05.040
+It's nice to see him as a young man too.
+
+53:05.040 --> 53:09.800
+Like that was 1968, he started like 1957 or something.
+
+53:09.800 --> 53:13.480
+The stuff they had before 1960 is incredible.
+
+53:13.480 --> 53:17.880
+There's also another spreadsheet, like what you're talking about, but an Emacs and that
+
+53:17.880 --> 53:23.240
+talk right there too, but yeah.
+
+53:23.240 --> 53:28.520
+All this, I mean, just those initial tips, you know, I was finding stuff that I need.
+
+53:28.520 --> 53:34.960
+So I like that idea, I think might do something with that if we can get a good database and
+
+53:34.960 --> 53:43.340
+link it into Hyperbole with some simple exposure that kind of gets people into some of this
+
+53:43.340 --> 53:48.880
+but I'll tell you what I really want that I can't find.
+
+53:48.880 --> 53:52.560
+There's so much effort at low code environments now.
+
+53:52.560 --> 54:01.120
+I want a low code environment for spinning up web apps inside a company where it's not
+
+54:01.120 --> 54:02.880
+your focus.
+
+54:02.880 --> 54:05.260
+It's just for an internal app, right?
+
+54:05.260 --> 54:11.520
+Like we want to do say time tracking for one small team and we want to build it ourselves.
+
+54:11.520 --> 54:16.380
+You know, that's not the real use case, but if you took something like that, so you don't
+
+54:16.380 --> 54:21.520
+have a lot of resources, you don't have a lot of time, you know how to program, but
+
+54:21.520 --> 54:28.040
+you want something that lets you operate like you're building a Python command line thing,
+
+54:28.040 --> 54:30.940
+but you want it to be a web app.
+
+54:30.940 --> 54:37.320
+There's a cool project I saw for that that would be, that was a peer-to-peer KISS web
+
+54:37.320 --> 54:42.560
+browser.
+
+54:42.560 --> 54:48.220
+Because I've looked at a lot of these, you know, there's no code DB.
+
+54:48.220 --> 54:57.640
+The best one that I came to but has been hard to set up internally was, it's like from a
+
+54:57.640 --> 55:04.940
+German company, it's like designed in Germany and implemented in China, a lot or pieces
+
+55:04.940 --> 55:09.260
+of it, and what is it called?
+
+55:09.260 --> 55:14.200
+I'll have to look at my database.
+
+55:14.200 --> 55:20.560
+There's like something like Seaborn or something like that.
+
+55:20.560 --> 55:33.720
+There's a couple of projects that are named that way, but let's see, Seaborn, low code.
+
+55:33.720 --> 56:01.320
+Let's see something, find it, but, oh, low code, so there's something, it's amazing to
+
+56:01.320 --> 56:11.560
+me, oh, C table, that's it, C table, SEA table, that's kind of one we've been trying to get
+
+56:11.560 --> 56:15.400
+to work, but there's still limits.
+
+56:15.400 --> 56:23.720
+There's an environment where like if Emacs could let you do the mock-up of your web app
+
+56:23.720 --> 56:33.480
+using Lisp and then could be fully deployable onto a web stack, that would be, I mean, we
+
+56:33.480 --> 56:41.200
+have a web server, it's just a question of, and we have like C-based fast web servers
+
+56:41.200 --> 56:49.480
+that you could interface to Lisp, so I don't think like the capacity is the problem, but
+
+56:49.480 --> 56:56.760
+nobody's gone from providing the web server to here's how you could program the front
+
+56:56.760 --> 57:00.840
+end and connect it to the back end all in Lisp.
+
+57:00.840 --> 57:08.960
+That's one of my biggest issues is like, and you see it in the hyperbole work, is I want
+
+57:08.960 --> 57:10.920
+simplicity and uniformity.
+
+57:10.920 --> 57:19.080
+I can't like program in three languages at the same time, so I can't use JavaScript on
+
+57:19.080 --> 57:25.840
+the front end and Python on the back end and then have to deal with CSS as well.
+
+57:25.840 --> 57:26.840
+And HTML.
+
+57:26.840 --> 57:27.840
+Yeah.
+
+57:27.840 --> 57:28.840
+And HTML.
+
+57:28.840 --> 57:34.840
+It's like my mind just cracks up and I'm like, why do, and even if you were brought up that
+
+57:34.840 --> 57:42.880
+way, like how can you be a 22-year-old and say, oh, this is so simple, because they do,
+
+57:42.880 --> 57:43.960
+they say that all the time.
+
+57:43.960 --> 57:47.240
+Well, this is a really simple thing to do.
+
+57:47.240 --> 57:54.560
+I mean, yeah, if you're copying and pasting all your code, which is apparently what has
+
+57:54.560 --> 58:01.040
+become common now, right, is I'll just use this template, then yeah, that's simple.
+
+58:01.040 --> 58:03.760
+But what about building it originally?
+
+58:03.760 --> 58:09.720
+It's like, there's just so much for your mind to process.
+
+58:09.720 --> 58:17.080
+And there was something called Meta HTML, which was really cool when HTML first came
+
+58:17.080 --> 58:21.800
+out, and you're not going to be able to find this or even a reference to it, probably.
+
+58:21.800 --> 58:30.600
+But this was two guys from MIT, and they said, okay, instead of programming at the HTML level,
+
+58:30.600 --> 58:39.720
+let's write a list-like interpreter that uses HTML syntax, but will give you all the higher
+
+58:39.720 --> 58:42.160
+level programming constructs you need.
+
+58:42.160 --> 58:47.840
+And so you could write stuff that looked like HTML, but you'd be processing lists of things
+
+58:47.840 --> 58:55.280
+and manipulating the DOM in these very abstract ways and very little code.
+
+58:55.280 --> 59:01.800
+And again, you didn't have to mix a different syntax in like you have to now.
+
+59:01.800 --> 59:09.940
+It was great, and it wasn't a lot of code, and it worked, and nobody cared.
+
+59:09.940 --> 59:11.280
+Nobody did anything with it.
+
+59:11.280 --> 59:12.880
+It died on the vine.
+
+59:12.880 --> 59:21.520
+Well, we didn't need to endlessly measure every little mouse movement and eyeball engagement
+
+59:21.520 --> 59:23.440
+and then monetize it and analyze it.
+
+59:23.440 --> 59:27.320
+So you could focus on just doing what you needed to do.
+
+59:27.320 --> 59:28.320
+Yeah.
+
+59:28.320 --> 59:29.320
+Well, that's right.
+
+59:29.320 --> 59:30.320
+Friction drives.
+
+59:30.320 --> 59:32.200
+That's what I love.
+
+59:32.200 --> 59:37.280
+I'm stuck in a Microsoft environment now where there's a little bit of Linux here and there,
+
+59:37.280 --> 59:40.480
+but I'm either a Mac user.
+
+59:40.480 --> 59:47.840
+I've always been a Unix user, so Windows is enormously painful despite the strides that
+
+59:47.840 --> 59:50.840
+they've made.
+
+59:50.840 --> 59:55.440
+I always look at it, and I say, well, it's a brilliant business perspective because they
+
+59:55.440 --> 01:00:02.280
+know they create so many problems for people, so much friction that it creates enormous
+
+01:00:02.280 --> 01:00:10.240
+economic opportunities for many, many people, and that's what they do.
+
+01:00:10.240 --> 01:00:11.640
+They have WSL.
+
+01:00:11.640 --> 01:00:13.720
+Do you know about that?
+
+01:00:13.720 --> 01:00:17.720
+The Windows System for Linux, yeah.
+
+01:00:17.720 --> 01:00:21.840
+They had a guy working on that who was leading it, and they were just making stride after
+
+01:00:21.840 --> 01:00:30.720
+stride, and apparently some high-level executive probably did not like seeing this, and so
+
+01:00:30.720 --> 01:00:35.740
+they moved this guy off, and now it's like Microsofty.
+
+01:00:35.740 --> 01:00:41.360
+So now all you see come out of there is like we've improved Windows Terminal, and the whole
+
+01:00:41.360 --> 01:00:47.000
+WSL thing moves at a snail's pace now, and you have to think that wasn't just like the
+
+01:00:47.000 --> 01:00:53.460
+guy got promoted, but that there was a strategic decision that this was helping people too
+
+01:00:53.460 --> 01:01:00.920
+much to live in a non-Windows environment in their mind, and we can't be supporting
+
+01:01:00.920 --> 01:01:01.920
+that.
+
+01:01:01.920 --> 01:01:13.440
+I was going to say, even though if you say, I want to use Kubernetes or in Azure, they
+
+01:01:13.440 --> 01:01:20.880
+say, okay, use Linux VMs, so they'll do that all day long and tell you not to use Windows,
+
+01:01:20.880 --> 01:01:26.800
+so there is still parts of the company that are like that and are open to it, but they
+
+01:01:26.800 --> 01:01:31.560
+have it pretty well locked down.
+
+01:01:31.560 --> 01:01:37.520
+I think it goes in line with the attention economy where they want to control the computing
+
+01:01:37.520 --> 01:01:43.520
+experience, and you want to use Microsoft apps, Microsoft Office.
+
+01:01:43.520 --> 01:01:49.240
+We don't want to make sure that you can reach out too easily into other ecosystems.
+
+01:01:49.240 --> 01:01:54.800
+Embrace, extend, extinguish, right?
+
+01:01:54.800 --> 01:01:55.800
+Is that the...
+
+01:01:55.800 --> 01:01:56.800
+Yep.
+
+01:01:56.800 --> 01:01:57.800
+That's it.
+
+01:01:57.800 --> 01:02:04.160
+An interesting Windows feature is you can update Windows, see that it's all the way
+
+01:02:04.160 --> 01:02:10.040
+up to date, reboot it, wait a day, or wait a day, and all of a sudden you have more updates
+
+01:02:10.040 --> 01:02:13.040
+for like a week or something along those lines.
+
+01:02:13.040 --> 01:02:17.600
+I don't know of any other operating system that does that.
+
+01:02:17.600 --> 01:02:24.900
+You only have two minutes until your reboot is done, and then it's like it comes back.
+
+01:02:24.900 --> 01:02:29.240
+Now it's an hour, and then another half an hour, right?
+
+01:02:29.240 --> 01:02:33.400
+They only give you a little snippet.
+
+01:02:33.400 --> 01:02:38.360
+Is PlasmaStrike, by the way, is that stack that you're describing with LogSec and syncing
+
+01:02:38.360 --> 01:02:39.360
+and everything?
+
+01:02:39.360 --> 01:02:41.400
+Is that something that you've published any examples?
+
+01:02:41.400 --> 01:02:46.080
+I saw you said something in the IRC, but I just lost track of what was going on in IRC,
+
+01:02:46.080 --> 01:02:49.080
+so I'm sorry if I missed that.
+
+01:02:49.080 --> 01:02:51.020
+No, I haven't.
+
+01:02:51.020 --> 01:02:58.880
+This is although now I'm thinking about just putting a whole bunch of some resources together
+
+01:02:58.880 --> 01:03:06.220
+of HyperBowl does a really good job of showing you a knowledge base, plus enough configuration
+
+01:03:06.220 --> 01:03:14.760
+to use an EEV does a really good job of showing you enough in-source documentation to play
+
+01:03:14.760 --> 01:03:19.840
+it out and see how it actually works in practice.
+
+01:03:19.840 --> 01:03:23.800
+Our Chrome needs something like that, so I don't know if I'll...
+
+01:03:23.800 --> 01:03:30.080
+But you need some minimal config to work with that, so you can look at the more philosophy
+
+01:03:30.080 --> 01:03:38.000
+plus packages combination.
+
+01:03:38.000 --> 01:03:44.560
+How do you guys like the HyperBorg term, if we use that?
+
+01:03:44.560 --> 01:03:48.200
+Does that strike you as a little...
+
+01:03:48.200 --> 01:03:50.080
+Was that what you were going for?
+
+01:03:50.080 --> 01:03:52.480
+Were you trying to conjure up the Borg?
+
+01:03:52.480 --> 01:03:53.480
+Well, yeah.
+
+01:03:53.480 --> 01:03:59.960
+Well, Sasha came up with HyperOrg for hyperbole and org, and then I thought, well, it'd be
+
+01:03:59.960 --> 01:04:09.160
+funnier if we called it HyperBorg, because it kind of is like Stalvan talks about org
+
+01:04:09.160 --> 01:04:16.580
+wants to take you into this environment, and hyperbole certainly does too, so if we put
+
+01:04:16.580 --> 01:04:21.240
+the two together, we would definitely have something like the Borg.
+
+01:04:21.240 --> 01:04:26.800
+My impression, and I said something to Kielaro, I don't know if I spoke wrong, but my impression
+
+01:04:26.800 --> 01:04:31.920
+was that this was not something that was going to be created, this was just a way, just like
+
+01:04:31.920 --> 01:04:32.920
+a...
+
+01:04:32.920 --> 01:04:33.920
+Oh, right.
+
+01:04:33.920 --> 01:04:34.920
+It's just a...
+
+01:04:34.920 --> 01:04:39.200
+Yeah, the music kind of term, but I do want to do more work.
+
+01:04:39.200 --> 01:04:45.080
+I've joined the org mail list, and I mean, just I did a lot of work for that presentation
+
+01:04:45.080 --> 01:04:53.840
+and that sort of struck me, and I said, there's a certain level of work we need to do.
+
+01:04:53.840 --> 01:05:00.760
+Years ago, we were thinking we'd put hyperbole into Emacs, now that org is...
+
+01:05:00.760 --> 01:05:07.600
+There's no reason not to, and were it to be there, there are things that there's namings
+
+01:05:07.600 --> 01:05:14.360
+that we would correct, and the interface points to org, we would want to do something about
+
+01:05:14.360 --> 01:05:17.920
+and work out with them, especially the made a return key.
+
+01:05:17.920 --> 01:05:23.080
+That's the main, if we could resolve that between the two packages better, and we've
+
+01:05:23.080 --> 01:05:28.180
+done a pretty good job just on hyperboles in, but we've never talked to the org people
+
+01:05:28.180 --> 01:05:29.180
+about it.
+
+01:05:29.180 --> 01:05:33.160
+It kind of seems like the term would work better the opposite way, because org wants
+
+01:05:33.160 --> 01:05:39.400
+to go around and doesn't have that modularity that your package has.
+
+01:05:39.400 --> 01:05:45.080
+So you're suggesting like, let them give the key over to us, and then we'll support some
+
+01:05:45.080 --> 01:05:46.080
+of their...
+
+01:05:46.080 --> 01:05:50.880
+Well, it's more reading the board taking over everything, because org mode comes and they
+
+01:05:50.880 --> 01:05:51.880
+take over...
+
+01:05:51.880 --> 01:06:02.040
+All their code works with org mode, not K outline or markdown mode or anything along
+
+01:06:02.040 --> 01:06:03.040
+those lines.
+
+01:06:03.040 --> 01:06:08.240
+Yeah, more, so the board part comes more from the hyperbole side, yeah.
+
+01:06:08.240 --> 01:06:12.520
+Well, but maybe it's fitting in the long run, because no matter...
+
+01:06:12.520 --> 01:06:18.600
+Perhaps if you provide a, or if hyperbole provides a very convenient enhancement on
+
+01:06:18.600 --> 01:06:23.320
+top of how people used to use org mode, it'll just become part of org mode eventually.
+
+01:06:23.320 --> 01:06:31.400
+Yeah, that's something I can see too, is that they just become one big thing that Stallman
+
+01:06:31.400 --> 01:06:36.880
+doesn't like, because we do have a bit of that in all of them.
+
+01:06:36.880 --> 01:06:42.280
+I mean, I totally get what he's saying and I buy it, I'm kind of like a functional programmer
+
+01:06:42.280 --> 01:06:49.800
+and I like bottom up development, but people ask us all the time, okay, if you have four
+
+01:06:49.800 --> 01:06:55.360
+or five things in hyperbole, why don't you separate them into separate packages?
+
+01:06:55.360 --> 01:06:57.200
+And it was the same thing for Engelbart.
+
+01:06:57.200 --> 01:07:02.840
+Well, one, it would be a lot more overhead just in separate manuals and dealing with
+
+01:07:02.840 --> 01:07:04.480
+separate communities.
+
+01:07:04.480 --> 01:07:09.840
+We want everyone who uses it to have the same baseline experience.
+
+01:07:09.840 --> 01:07:15.560
+And so even though, yes, you could separate out the button functionality from the K-outliner
+
+01:07:15.560 --> 01:07:23.880
+and the Rolodex, and the Rolodex originally was a separate thing by itself, we find putting
+
+01:07:23.880 --> 01:07:29.200
+them all together gives people the same thing that Emacs provides, it's sort of, you don't
+
+01:07:29.200 --> 01:07:34.680
+have to use all of the libraries, but having them there ensures you that when somebody
+
+01:07:34.680 --> 01:07:42.640
+references it, it works and you have a lot fewer of those kinds of, well, I only have
+
+01:07:42.640 --> 01:07:47.720
+the subsystem, so when I invoke your code, it breaks.
+
+01:07:47.720 --> 01:07:52.400
+Yeah, I think, and I think, I mean, I don't think there's any, I don't personally have
+
+01:07:52.400 --> 01:07:56.480
+like a preference as to what the right direction is, I just acknowledge that the downsides
+
+01:07:56.480 --> 01:08:00.880
+and upsides of each choice, but one thing I have noticed is I think something, I think
+
+01:08:00.880 --> 01:08:07.280
+it was McGit, that's how I say it, but, you know, initially it was one thing and now I
+
+01:08:07.280 --> 01:08:13.880
+think it's turned into a dozen or maybe even a couple dozen different packages.
+
+01:08:13.880 --> 01:08:19.320
+And I remember I went to update it once and they had to, you know, navigate a few different,
+
+01:08:19.320 --> 01:08:25.640
+like, what's the word, combinatorial, you know, they had to go two or three levels of
+
+01:08:25.640 --> 01:08:30.560
+dependencies deep in each level or introduce two dishes, yeah.
+
+01:08:30.560 --> 01:08:37.360
+So yeah, that can happen, there's situations where you can see those downsides, where the
+
+01:08:37.360 --> 01:08:42.000
+more, you know, splitting things apart is...
+
+01:08:42.000 --> 01:08:48.280
+We're fighting with that at work right now, it's like, do we create more repos so we can
+
+01:08:48.280 --> 01:08:54.880
+deliver microservices or, you know, how do we split things out on the containers and
+
+01:08:54.880 --> 01:09:00.500
+it's very, very complicated and even, you know, with years, we've got years of experience
+
+01:09:00.500 --> 01:09:08.640
+with our architects and we're all like going back and forth on how far to go because one
+
+01:09:08.640 --> 01:09:13.360
+of the people is very worried that we get into that dependency hell kind of thing with
+
+01:09:13.360 --> 01:09:16.120
+some of our new get packages.
+
+01:09:16.120 --> 01:09:23.920
+So yeah, I wish there were easier solutions and that's, again, for hyperbole, there's,
+
+01:09:23.920 --> 01:09:28.600
+you know, there's none of it, there's no external dependencies, it's just what version of Emacs
+
+01:09:28.600 --> 01:09:36.140
+you're using and people don't realize that, yeah, they say, oh, it's so big, like, it's
+
+01:09:36.140 --> 01:09:43.600
+dependent on all this other stuff, but it's not, it's just, you know, I mean, it will
+
+01:09:43.600 --> 01:09:48.640
+leverage stuff, again, that's in core Emacs, but it won't require you to load a third party
+
+01:09:48.640 --> 01:09:52.360
+package just because, you know, it's useful or interesting.
+
+01:09:52.360 --> 01:10:00.960
+I think Emacs does a really good job on this because unlike the normal GUI apps, if I want
+
+01:10:00.960 --> 01:10:07.520
+to change my theme in Emacs, I get to change everything to a dark theme or white theme
+
+01:10:07.520 --> 01:10:17.120
+or whatever and unlike, and you can't really do that very in any way that shares any of
+
+01:10:17.120 --> 01:10:24.200
+the code or the settings with all your GUI applications, but also with a terminal, you
+
+01:10:24.200 --> 01:10:34.960
+miss out on a whole bunch more stuff because, well, you don't get GUIs or unless you're
+
+01:10:34.960 --> 01:10:46.400
+talking about TUI apps, but they're not really CLI apps because they're like a half stepchild,
+
+01:10:46.400 --> 01:10:50.120
+they don't get near as good themes because they can't integrate into all the packages
+
+01:10:50.120 --> 01:10:59.000
+near as well, you know, mouse and all the various other things like that.
+
+01:10:59.000 --> 01:11:02.160
+Where are you guys located?
+
+01:11:02.160 --> 01:11:04.200
+I'm in, I'm in Virginia.
+
+01:11:04.200 --> 01:11:07.880
+Oh, I just had guests from West Virginia.
+
+01:11:07.880 --> 01:11:09.880
+I'm in Connecticut.
+
+01:11:09.880 --> 01:11:10.880
+Utah.
+
+01:11:10.880 --> 01:11:11.880
+Oh, wow.
+
+01:11:11.880 --> 01:11:12.880
+Utah.
+
+01:11:12.880 --> 01:11:17.160
+So we're almost spanning the entire continent, almost.
+
+01:11:17.160 --> 01:11:23.200
+If we round up, we can consider it to be the case.
+
+01:11:23.200 --> 01:11:29.400
+I work with a lot of people in India, so we've got like a 12 hour difference much of the
+
+01:11:29.400 --> 01:11:30.400
+year.
+
+01:11:30.400 --> 01:11:37.200
+That's fascinating to try to work through all the time, but on Hyperbole, we have one
+
+01:11:37.200 --> 01:11:44.240
+guy in Sweden and one guy in Japan, so we're all over the map too.
+
+01:11:44.240 --> 01:11:51.680
+Yeah, I was involved with a little hobby group for something unrelated and we were in various
+
+01:11:51.680 --> 01:11:56.400
+countries and it was always, the best thing that we could do was just find the time at
+
+01:11:56.400 --> 01:12:03.440
+which all of us would be the least miserable and the least tired and not, you know, there
+
+01:12:03.440 --> 01:12:07.720
+was no good time for a meeting, there was just the least bad time.
+
+01:12:07.720 --> 01:12:15.840
+Well, I was struggling to finish up my presentation and just, you know, I would like want to show
+
+01:12:15.840 --> 01:12:21.840
+an example and then I'm like, well, I need to change the code a little bit so I go and,
+
+01:12:21.840 --> 01:12:26.840
+you know, I'd add capability and Hyperbole and it was just a lot more work than I expected.
+
+01:12:26.840 --> 01:12:31.900
+So November 4th was the deadline to send in your video.
+
+01:12:31.900 --> 01:12:36.520
+That came and went and then I couldn't touch anything until the weekend and I get maybe
+
+01:12:36.520 --> 01:12:38.680
+half a day with the holidays and stuff.
+
+01:12:38.680 --> 01:12:43.720
+So comes to be last night, still haven't sent the video in.
+
+01:12:43.720 --> 01:12:49.240
+You know, I had told them though a week ago that I'll do it live if I can't get the video
+
+01:12:49.240 --> 01:12:53.360
+in, but I'm like, you know, it'd be nice to have it recorded and they do all this stuff
+
+01:12:53.360 --> 01:12:54.360
+to it.
+
+01:12:54.360 --> 01:13:04.600
+So I finished the video at 5.30 in the morning and I just, you know, no, I was dead so I
+
+01:13:04.600 --> 01:13:11.440
+just uploaded it and I figured, you know, I had tested snippets before of how I recorded.
+
+01:13:11.440 --> 01:13:17.560
+So I sent the two of them, I go to bed, I get up and I have a message waiting.
+
+01:13:17.560 --> 01:13:23.280
+The video cuts off at 18 minutes and it was 36 minutes long and I'm like, oh, come on,
+
+01:13:23.280 --> 01:13:28.560
+it must be the software, like just can't handle a file that size and it's stupid.
+
+01:13:28.560 --> 01:13:32.080
+But I play it back on my system and it plays perfectly fine.
+
+01:13:32.080 --> 01:13:36.560
+And they gave me the checksum of the file, the size of the file, those matched up.
+
+01:13:36.560 --> 01:13:38.360
+So we knew we had uploaded a good thing.
+
+01:13:38.360 --> 01:13:42.320
+So I just went back to them and said, no, it works here.
+
+01:13:42.320 --> 01:13:47.280
+And then they went and researched and found, you know, it was their software and they were
+
+01:13:47.280 --> 01:13:48.480
+able to make it work.
+
+01:13:48.480 --> 01:13:50.580
+So I was good.
+
+01:13:50.580 --> 01:13:53.760
+But you know, that's like right at the edge.
+
+01:13:53.760 --> 01:13:56.480
+It's like 5.30 this morning.
+
+01:13:56.480 --> 01:13:57.480
+Yeah.
+
+01:13:57.480 --> 01:14:00.440
+And you haven't, and then you got some sleep after that?
+
+01:14:00.440 --> 01:14:01.440
+Yeah.
+
+01:14:01.440 --> 01:14:07.080
+I got up at like 9.30 so I'm running on a little, not too much sleep, but no, I was
+
+01:14:07.080 --> 01:14:14.100
+very happy because I got to, I actually, like Rahman who did his and he sort of had his
+
+01:14:14.100 --> 01:14:23.200
+face behind an Emacs window, transparency through the Emacs window.
+
+01:14:23.200 --> 01:14:27.960
+He spent like at least 20 hours, like just on the video part or something.
+
+01:14:27.960 --> 01:14:30.680
+I literally did one recording.
+
+01:14:30.680 --> 01:14:35.120
+I mean, I had done samples a little bit, but I sat down, I said, I'm just going to try
+
+01:14:35.120 --> 01:14:37.800
+to run through the whole thing, no breaks.
+
+01:14:37.800 --> 01:14:44.680
+I did both my face, you know, they were separating their face video from their audio for some
+
+01:14:44.680 --> 01:14:45.680
+reason.
+
+01:14:45.680 --> 01:14:50.800
+And they did all these separate tracks, one recording and threw it over the wall.
+
+01:14:50.800 --> 01:14:53.800
+So it was pretty good.
+
+01:14:53.800 --> 01:14:58.800
+I think it's easier to do with a longer video because I was in much the same situation.
+
+01:14:58.800 --> 01:15:06.800
+And if any organizers are reviewing this recording, you know, I was a day ahead of you, Bob.
+
+01:15:06.800 --> 01:15:12.960
+I submitted it a day before you and I went to sleep, I think roughly 24 hours before
+
+01:15:12.960 --> 01:15:15.000
+you did.
+
+01:15:15.000 --> 01:15:21.120
+But you know, it's, so I was scrambling to do a lot of those things too, but you know,
+
+01:15:21.120 --> 01:15:22.120
+because of my own fault.
+
+01:15:22.120 --> 01:15:28.120
+And again, if any organizers are listening, I sincerely apologize and thank you and admire
+
+01:15:28.120 --> 01:15:32.920
+your saintly level of tolerance and patience there.
+
+01:15:32.920 --> 01:15:41.840
+And I hope that they spend a lot of time and energy just hitting things with baseball bats
+
+01:15:41.840 --> 01:15:47.880
+after this conference, because I think that they've probably suppressed a lot of negative
+
+01:15:47.880 --> 01:15:52.520
+energy from having to process things like that.
+
+01:15:52.520 --> 01:15:55.520
+They're incredible.
+
+01:15:55.520 --> 01:16:03.960
+I said thank you like an hour into the conference because it was so, I was looking at all the
+
+01:16:03.960 --> 01:16:09.240
+detail they had and you know, you see the way it's grown from year to year that you
+
+01:16:09.240 --> 01:16:13.840
+could just tell there was a tremendous amount of effort put in to have all these different
+
+01:16:13.840 --> 01:16:15.880
+formats and dealing with it.
+
+01:16:15.880 --> 01:16:21.480
+People have disabilities and you know, I mean, they're just very thoughtful all around and
+
+01:16:21.480 --> 01:16:23.480
+a great set of people.
+
+01:16:23.480 --> 01:16:26.760
+So I think every year they get better at it.
+
+01:16:26.760 --> 01:16:27.760
+Yeah.
+
+01:16:27.760 --> 01:16:33.400
+Yeah, they're clearly, I like they took a DevOps kind of approach to it, which you can
+
+01:16:33.400 --> 01:16:40.580
+also see, I guess they have some people, they're using Ansible to maintain some of their environments.
+
+01:16:40.580 --> 01:16:44.920
+So it's like, wow, that's a pretty advanced way to do it.
+
+01:16:44.920 --> 01:16:50.760
+And it shows they struggled in parts, you know, it's like, like this, they had trouble,
+
+01:16:50.760 --> 01:16:57.320
+you know, I was asking multiple times, it's like, is the video going to be playable?
+
+01:16:57.320 --> 01:16:59.360
+And there'd like be no answer.
+
+01:16:59.360 --> 01:17:03.440
+And then it's like, okay, don't worry, we're taking care of it.
+
+01:17:03.440 --> 01:17:08.080
+But they couldn't say because they hadn't converted it the way they wanted to yet.
+
+01:17:08.080 --> 01:17:12.720
+And then they finally got there and they like 20 minutes before the presentation is when
+
+01:17:12.720 --> 01:17:21.760
+I guess I got on with you, right, plasma strike, and we did prep before prep.
+
+01:17:21.760 --> 01:17:24.880
+So it was a good experience.
+
+01:17:24.880 --> 01:17:30.920
+But I have to know, yeah, I thought I would have it done, no problem, November 4.
+
+01:17:30.920 --> 01:17:37.480
+So I think that and I did get very busy at work, but you know, that tells you something
+
+01:17:37.480 --> 01:17:40.840
+just about and I'm not, I don't do videos much.
+
+01:17:40.840 --> 01:17:43.040
+So that was part of the problem.
+
+01:17:43.040 --> 01:17:45.600
+Yeah, it's Yeah.
+
+01:17:45.600 --> 01:17:50.360
+I mean, I'd say the most concrete lesson that I learned, maybe not even a lesson so much
+
+01:17:50.360 --> 01:17:57.940
+as a as a punishment is that if I dare to submit anything next year, I'll, I'll make
+
+01:17:57.940 --> 01:18:01.040
+sure that I'm done recording it before I even propose it.
+
+01:18:01.040 --> 01:18:07.880
+Because I wouldn't want to have them wonder, is he gonna wait until the very end?
+
+01:18:07.880 --> 01:18:11.660
+Like, I'm gonna, I'm sure I am.
+
+01:18:11.660 --> 01:18:15.600
+So I will, I will have it done in the summer of 2023.
+
+01:18:15.600 --> 01:18:19.080
+And I will include it, I will upload it before I even submit it to them.
+
+01:18:19.080 --> 01:18:21.480
+Did you not get that message?
+
+01:18:21.480 --> 01:18:23.000
+Sasha was so nice about it.
+
+01:18:23.000 --> 01:18:29.200
+She's like, you know, it's really not a problem if you don't have time, you know, we can just
+
+01:18:29.200 --> 01:18:30.200
+cancel.
+
+01:18:30.200 --> 01:18:36.320
+And I'm like, I've never canceled on a talk before, so I'm gonna get it done, even if
+
+01:18:36.320 --> 01:18:38.320
+I have to do it live.
+
+01:18:38.320 --> 01:18:43.680
+Yeah, you know, I got I got similar ones got go ahead.
+
+01:18:43.680 --> 01:18:44.680
+How would that work?
+
+01:18:44.680 --> 01:18:48.040
+If you didn't know exactly how much time that you'd have for the talk?
+
+01:18:48.040 --> 01:18:50.160
+If you're going to do it all in advance?
+
+01:18:50.160 --> 01:18:57.640
+Oh, oh, for you, because it Yeah, well, you can take a shot.
+
+01:18:57.640 --> 01:18:58.640
+Don't give me a slot.
+
+01:18:58.640 --> 01:19:01.360
+You say I have a 20 minute video ready to go.
+
+01:19:01.360 --> 01:19:02.360
+Yeah, yeah.
+
+01:19:02.360 --> 01:19:07.560
+Or, I mean, and plus, I think it's also it would be it doesn't necessarily indicate that
+
+01:19:07.560 --> 01:19:12.200
+it's the final product, but it could be the final product, you could say, Okay, here's,
+
+01:19:12.200 --> 01:19:14.720
+here's 10 minutes or 15 minutes.
+
+01:19:14.720 --> 01:19:16.680
+And I will try to iterate on this.
+
+01:19:16.680 --> 01:19:21.840
+But if I if I default on this loan, so to speak, it's it serves as collateral, maybe
+
+01:19:21.840 --> 01:19:24.280
+it's not, not necessarily the final product.
+
+01:19:24.280 --> 01:19:28.320
+But if it needs to be the final product, they could use it that way.
+
+01:19:28.320 --> 01:19:33.440
+I think the thing that they're most worried about was just having to having to process
+
+01:19:33.440 --> 01:19:39.880
+things at the last minute and having to run it live, if necessary.
+
+01:19:39.880 --> 01:19:49.000
+So I don't think they they, you know, care that much about changing, you know, changing
+
+01:19:49.000 --> 01:19:50.000
+the length or so.
+
+01:19:50.000 --> 01:19:51.000
+Well, maybe they would, I don't know.
+
+01:19:51.000 --> 01:19:53.000
+But I guess that that would mess up the schedule.
+
+01:19:53.000 --> 01:19:56.520
+Well, the the subtitles were really popular, I understand.
+
+01:19:56.520 --> 01:20:05.240
+So that's, that's a big thing that would have been nice to have, which I imagine you're
+
+01:20:05.240 --> 01:20:06.240
+gonna process.
+
+01:20:06.240 --> 01:20:13.640
+Yeah, yeah, I, I, hopefully, I can, I can help them with with subtitling some of the
+
+01:20:13.640 --> 01:20:16.160
+things that didn't have them yet.
+
+01:20:16.160 --> 01:20:20.960
+Because, yeah, there's still a lot of work that I think needs to be done even after after
+
+01:20:20.960 --> 01:20:21.960
+the fact.
+
+01:20:21.960 --> 01:20:26.800
+And, you know, with transcribing these sessions, even not all of them, but at least some of
+
+01:20:26.800 --> 01:20:28.800
+the questions and answers and things.
+
+01:20:28.800 --> 01:20:35.760
+PlasmaStrike, did you that I hear that I understand you say that you you were a volunteer for
+
+01:20:35.760 --> 01:20:37.320
+managing the this year?
+
+01:20:37.320 --> 01:20:42.320
+No, I just I was just asking the question.
+
+01:20:42.320 --> 01:20:43.320
+I got you.
+
+01:20:43.320 --> 01:20:44.320
+No, I thought I heard you.
+
+01:20:44.320 --> 01:20:45.320
+I might have misheard something you said earlier.
+
+01:20:45.320 --> 01:20:46.320
+Are you Corbin?
+
+01:20:46.320 --> 01:20:47.320
+Me?
+
+01:20:47.320 --> 01:20:48.320
+Yeah.
+
+01:20:48.320 --> 01:20:49.320
+No.
+
+01:20:49.320 --> 01:20:50.320
+No.
+
+01:20:50.320 --> 01:20:51.320
+No.
+
+01:20:51.320 --> 01:20:52.320
+No.
+
+01:20:52.320 --> 01:20:53.320
+Okay.
+
+01:20:53.320 --> 01:20:56.560
+I thought you sounded like Corbin.
+
+01:20:56.560 --> 01:20:57.680
+You know him?
+
+01:20:57.680 --> 01:20:58.680
+Maybe a little bit.
+
+01:20:58.680 --> 01:20:59.680
+I can hear it a little bit.
+
+01:20:59.680 --> 01:21:00.680
+Okay.
+
+01:21:00.680 --> 01:21:06.360
+But you use, PlasmaStrike, you were saying that you you do use a lot of theming and things
+
+01:21:06.360 --> 01:21:12.160
+like that in terms of like your like various applications, like color themes and things.
+
+01:21:12.160 --> 01:21:21.960
+I've used various, I've Solarize, Doom themes, I think there's a Tron theme that I use, but
+
+01:21:21.960 --> 01:21:26.800
+now I'm just using the Modus themes, just simple black and white that's done really
+
+01:21:26.800 --> 01:21:27.800
+well.
+
+01:21:27.800 --> 01:21:28.800
+Yeah.
+
+01:21:28.800 --> 01:21:29.800
+Yeah.
+
+01:21:29.800 --> 01:21:30.800
+Simplicity.
+
+01:21:30.800 --> 01:21:32.680
+That was actually going to be one of the things that I wanted to mention in my talk.
+
+01:21:32.680 --> 01:21:36.400
+But again, those 10 minutes were turned out to be brutal.
+
+01:21:36.400 --> 01:21:41.560
+I wanted to mention how how people like like us and when I say us, I just mean I don't
+
+01:21:41.560 --> 01:21:47.680
+mean necessarily you two, just people that I was speaking for, are maybe a little bit
+
+01:21:47.680 --> 01:21:48.680
+scared of themes.
+
+01:21:48.680 --> 01:21:52.400
+You know, like I was going to mention that we like I try to stay the heck away from fonts
+
+01:21:52.400 --> 01:21:58.600
+and colors and things because I just, it's, I don't know if I have the bandwidth to keep
+
+01:21:58.600 --> 01:21:59.600
+them.
+
+01:21:59.600 --> 01:22:02.840
+I kind of just declare advanced bankruptcy on those and say, you know what, whatever
+
+01:22:02.840 --> 01:22:06.320
+it looks like, I'm going to live with it.
+
+01:22:06.320 --> 01:22:13.040
+I just look at like 20 themes, pick one that suits my taste and then live with that.
+
+01:22:13.040 --> 01:22:21.600
+So I found one called Cream Soddy, like cream soda, but S-O-D-Y and that's what I use as
+
+01:22:21.600 --> 01:22:26.960
+a dark theme and I find it, you know, very appealing in general.
+
+01:22:26.960 --> 01:22:34.000
+So, but yeah, I was noticing like the org people have so much, tweaking the visuals,
+
+01:22:34.000 --> 01:22:36.200
+you know, it was kind of amazing.
+
+01:22:36.200 --> 01:22:42.080
+Some people's presentations, I'm like, I'm really not into that.
+
+01:22:42.080 --> 01:22:47.600
+But I do have a feature in hyperbole, which is kind of cool.
+
+01:22:47.600 --> 01:22:52.960
+So there's this subsystem called high control, which lets you control your windows and your
+
+01:22:52.960 --> 01:22:53.960
+frames interactively.
+
+01:22:53.960 --> 01:23:00.800
+So it's, it's kind of like you go into a mode and it stays live until you quit.
+
+01:23:00.800 --> 01:23:04.920
+And so you can use regular insertion keys to manipulate things.
+
+01:23:04.920 --> 01:23:12.800
+One of the things it has in conjunction with a package called Zoom Frame is you can change
+
+01:23:12.800 --> 01:23:20.560
+your default face across like all your frames with one key, grow it, shrink it.
+
+01:23:20.560 --> 01:23:25.960
+And I found that, and not just the default face, but all the related faces so that everything
+
+01:23:25.960 --> 01:23:28.840
+stays a consistent size.
+
+01:23:28.840 --> 01:23:34.560
+Every time I would try any of the built-in things, I would always end up changing a face
+
+01:23:34.560 --> 01:23:38.840
+or multiple and something else would stay tiny.
+
+01:23:38.840 --> 01:23:40.360
+And it just annoyed the hell out of me.
+
+01:23:40.360 --> 01:23:43.120
+So I implemented that.
+
+01:23:43.120 --> 01:23:44.880
+This was in high control or Zoom?
+
+01:23:44.880 --> 01:23:54.080
+Yeah, it's in high control, the Z keys, you use I guess capital Z for make it bigger and
+
+01:23:54.080 --> 01:23:56.320
+lowercase Z to make it smaller.
+
+01:23:56.320 --> 01:23:58.680
+So you're zooming both ways.
+
+01:23:58.680 --> 01:24:04.600
+And the neat thing is that what high control has is a persistent prefix argument.
+
+01:24:04.600 --> 01:24:10.920
+So say like you want to move a window, say you want to move a frame two pixels at a time.
+
+01:24:10.920 --> 01:24:14.920
+So you set the prefix argument to two, and then every time you hit your arrow key or
+
+01:24:14.920 --> 01:24:17.960
+whatever moves it, it moves by two pixels.
+
+01:24:17.960 --> 01:24:21.440
+You can change that to 20 and it'll move by 20 pixels.
+
+01:24:21.440 --> 01:24:26.840
+And the 20 will apply to every successive operation until you change it.
+
+01:24:26.840 --> 01:24:29.560
+And to change it, you just hit a decimal point.
+
+01:24:29.560 --> 01:24:34.280
+So you can say period one, zero, and then you get a 10.
+
+01:24:34.280 --> 01:24:38.920
+Or just set it to zero and then it's off.
+
+01:24:38.920 --> 01:24:40.240
+And so it's very rapid.
+
+01:24:40.240 --> 01:24:47.680
+So you're doing these single keys NPF dot one, zero.
+
+01:24:47.680 --> 01:24:51.960
+And so you can string these together in your key series too.
+
+01:24:51.960 --> 01:24:54.440
+And you get this incredible operation.
+
+01:24:54.440 --> 01:25:02.480
+It can place frames at any of the corners or the top center of the screen too.
+
+01:25:02.480 --> 01:25:10.680
+And on a Mac, it will account for the toolbar and only grow so it doesn't overlap that.
+
+01:25:10.680 --> 01:25:15.240
+All these kind of fit and finish things are just pre-programmed in there.
+
+01:25:15.240 --> 01:25:20.360
+So when you're actually doing it, I mean, don't you hate that?
+
+01:25:20.360 --> 01:25:26.520
+It's like you expand your window programmatically and then half of it's off screen, right?
+
+01:25:26.520 --> 01:25:27.520
+For no reason at all.
+
+01:25:27.520 --> 01:25:29.560
+And then you got to go manipulate it.
+
+01:25:29.560 --> 01:25:36.400
+So I don't know, there was one time when I decided to do this and I just thought of those
+
+01:25:36.400 --> 01:25:41.200
+pain points and I took care of them all in there.
+
+01:25:41.200 --> 01:25:45.360
+So that's kind of a useful thing.
+
+01:25:45.360 --> 01:25:54.640
+And one guy, his fingers, if you saw the presentation, he was losing carpal tunnel like problems
+
+01:25:54.640 --> 01:25:56.120
+but very severely.
+
+01:25:56.120 --> 01:26:03.520
+So he went to voice control and he was using Emacs and he discovered high control.
+
+01:26:03.520 --> 01:26:09.720
+And he said that was like a life changer because he always wanted to manipulate his windows,
+
+01:26:09.720 --> 01:26:10.720
+his frames.
+
+01:26:10.720 --> 01:26:14.800
+And now he didn't have a good way because he couldn't hit all these keystrokes.
+
+01:26:14.800 --> 01:26:25.880
+And now he can just say those key sequences and it does it all for him very rapidly.
+
+01:26:25.880 --> 01:26:33.360
+Another guy, years ago I was working with, there's this brilliant guy named, oh God,
+
+01:26:33.360 --> 01:26:35.320
+this is, what is his name?
+
+01:26:35.320 --> 01:26:40.160
+Works for Google now and it's an Indian name.
+
+01:26:40.160 --> 01:26:44.340
+I forget his name, but he's been blind since birth.
+
+01:26:44.340 --> 01:26:50.000
+And he got a PhD in computer science and he's worked before Google.
+
+01:26:50.000 --> 01:26:54.560
+He worked at like Sun and just all the major companies.
+
+01:26:54.560 --> 01:27:02.680
+And I guess a lot of his work is on making technology accessible to the blind or disabled.
+
+01:27:02.680 --> 01:27:13.080
+So he wrote a package called EmacsSpeed, yeah, Raman, Raman is his name, TV Raman.
+
+01:27:13.080 --> 01:27:22.920
+And so EmacsSpeak is another whole environment that lets a blind person utilize Emacs as
+
+01:27:22.920 --> 01:27:25.200
+an advanced screen reader.
+
+01:27:25.200 --> 01:27:31.000
+Instead of reading you the whole screen, it knows what your context is and it just reads
+
+01:27:31.000 --> 01:27:32.180
+you appropriate stuff.
+
+01:27:32.180 --> 01:27:35.360
+So like he can understand code very rapidly.
+
+01:27:35.360 --> 01:27:39.640
+Additionally, he can change the speed of the voice so he can listen to something at five
+
+01:27:39.640 --> 01:27:41.440
+times speed and absorb it.
+
+01:27:41.440 --> 01:27:44.700
+So he can actually get a picture of code and manipulate it.
+
+01:27:44.700 --> 01:27:54.740
+So he and I got together years ago and he integrated it with Hyperbole and he was using
+
+01:27:54.740 --> 01:27:59.320
+Hyperbole to give a macro kind of capability in a lot of stuff.
+
+01:27:59.320 --> 01:28:01.120
+So I thought that was very cool.
+
+01:28:01.120 --> 01:28:06.880
+And he was just a very cool guy out in Silicon Valley.
+
+01:28:06.880 --> 01:28:10.840
+So glad to see he's done so well all this time.
+
+01:28:10.840 --> 01:28:17.400
+He's got an example config in his package.
+
+01:28:17.400 --> 01:28:21.920
+I don't know if it has your package configured inside of it or...
+
+01:28:21.920 --> 01:28:22.920
+I don't know.
+
+01:28:22.920 --> 01:28:23.920
+I haven't.
+
+01:28:23.920 --> 01:28:27.600
+He's got some for using CSS.
+
+01:28:27.600 --> 01:28:34.120
+I think that he was talking, something I read is it would change how the tones and voices
+
+01:28:34.120 --> 01:28:37.320
+that the voice was using.
+
+01:28:37.320 --> 01:28:38.320
+Right.
+
+01:28:38.320 --> 01:28:45.080
+The funny thing is that he's so devoted to his seeing eye dogs, right?
+
+01:28:45.080 --> 01:28:48.060
+He's had to have a number of them through his life.
+
+01:28:48.060 --> 01:28:54.200
+So he writes these fake press releases every time he releases a version and they're all
+
+01:28:54.200 --> 01:28:59.240
+named after the dog and the dog is making the announcement.
+
+01:28:59.240 --> 01:29:07.860
+It's like so and so is proud to announce Emacs, the friendliest dog release in history.
+
+01:29:07.860 --> 01:29:10.520
+So they're kind of fun to read.
+
+01:29:10.520 --> 01:29:16.920
+I've seen his messages on the mailing lists, rather I've seen his subject lines on the
+
+01:29:16.920 --> 01:29:21.400
+mailing list because I usually don't have, I don't give myself the time to read a lot
+
+01:29:21.400 --> 01:29:22.400
+of those messages.
+
+01:29:22.400 --> 01:29:27.840
+But now that I have that context, I'll dig into his messages and see because it sounds
+
+01:29:27.840 --> 01:29:28.840
+very interesting.
+
+01:29:28.840 --> 01:29:29.840
+Yeah.
+
+01:29:29.840 --> 01:29:30.840
+I mean, it would be.
+
+01:29:30.840 --> 01:29:39.880
+And if you're like my son has no problem seeing, but he has a bit of trouble processing words
+
+01:29:39.880 --> 01:29:41.880
+when he's reading.
+
+01:29:41.880 --> 01:29:46.840
+So he uses audible while he reads and it's too slow for him.
+
+01:29:46.840 --> 01:29:53.720
+So he uses audible at like twice the speed and finds that that really helps him understand
+
+01:29:53.720 --> 01:29:54.720
+passages.
+
+01:29:54.720 --> 01:30:01.040
+So it may have utility for people without visual disabilities too.
+
+01:30:01.040 --> 01:30:02.520
+Good point.
+
+01:30:02.520 --> 01:30:03.520
+Yeah.
+
+01:30:03.520 --> 01:30:09.800
+That's probably so much there that doesn't really get thought about because just think
+
+01:30:09.800 --> 01:30:11.440
+this is what, how we have to do it.
+
+01:30:11.440 --> 01:30:15.880
+It's in front of you, consume it, consume it the same way everybody else consumes it.
+
+01:30:15.880 --> 01:30:18.600
+And if you have trouble, then it's on you.
+
+01:30:18.600 --> 01:30:24.680
+Well, here's an interesting usability to bit, Robin, a different Robin, the Robin who
+
+01:30:24.680 --> 01:30:32.040
+works on hyperbole was showing me his presentation and he had the text of the presentation there.
+
+01:30:32.040 --> 01:30:37.460
+And every time he would say something, the word that he was saying would be highlighted
+
+01:30:37.460 --> 01:30:38.460
+on the screen.
+
+01:30:38.460 --> 01:30:41.520
+And I'm like, wow, that's very impressive.
+
+01:30:41.520 --> 01:30:45.440
+And it followed his speaking perfectly.
+
+01:30:45.440 --> 01:30:48.520
+I'm like, how did you do that?
+
+01:30:48.520 --> 01:30:55.920
+And he said, Oh, I'm just highlighting each word manually.
+
+01:30:55.920 --> 01:30:56.920
+Wow.
+
+01:30:56.920 --> 01:31:01.760
+Now that it's, it's like being a drummer, you know, he had such perfect cadence that
+
+01:31:01.760 --> 01:31:07.200
+I couldn't tell that this wasn't automated, that he did it so beautifully while he was
+
+01:31:07.200 --> 01:31:14.520
+speaking or, or watching him self speak, played back.
+
+01:31:14.520 --> 01:31:20.040
+It would have been nice if it was an automated thing, but apparently it takes the human to
+
+01:31:20.040 --> 01:31:21.040
+do it.
+
+01:31:21.040 --> 01:31:25.460
+I had to rig something up when I was recording my video, cause I, I wrote, I did it, I scripted
+
+01:31:25.460 --> 01:31:26.460
+it all.
+
+01:31:26.460 --> 01:31:31.240
+Um, and I, I just couldn't, I wasn't, I didn't have the mental bandwidth to try to memorize
+
+01:31:31.240 --> 01:31:32.440
+it at that point.
+
+01:31:32.440 --> 01:31:37.840
+So I just split everything up into, into half paragraphs basically, and tried to get it
+
+01:31:37.840 --> 01:31:43.720
+up as close to my camera as I could, um, scroll my mouse wheel.
+
+01:31:43.720 --> 01:31:48.040
+Every time I came to the end of a paragraph, I had to scroll the script with one hand and
+
+01:31:48.040 --> 01:31:52.200
+my other hand was controlling the slot, the so-called slide show, which was just paging
+
+01:31:52.200 --> 01:31:54.400
+through my org, my org outline.
+
+01:31:54.400 --> 01:32:01.240
+Um, and I think about five to 10 times I had to stop recording it because I, I scrolled,
+
+01:32:01.240 --> 01:32:05.320
+I got off sync with, with either my script or my outline or both.
+
+01:32:05.320 --> 01:32:10.200
+And just, you know, with 10 minutes, like, Oh, I can't go back and I lost, I lost like
+
+01:32:10.200 --> 01:32:11.440
+5% of my time.
+
+01:32:11.440 --> 01:32:13.360
+I have to start over.
+
+01:32:13.360 --> 01:32:16.680
+So I can't imagine doing it on a word by word basis.
+
+01:32:16.680 --> 01:32:22.640
+It's strange we're still recording this, but we're getting into just the, you know, interesting
+
+01:32:22.640 --> 01:32:23.640
+story.
+
+01:32:23.640 --> 01:32:24.640
+Oh, it's the last thing.
+
+01:32:24.640 --> 01:32:29.880
+So, you know, this is just kind of like, I feel like this is the, the after party, right?
+
+01:32:29.880 --> 01:32:31.640
+Maybe they'll cut it off.
+
+01:32:31.640 --> 01:32:36.720
+So I work with a British guy, brilliant, uh, mathematician kind of guy.
+
+01:32:36.720 --> 01:32:44.520
+He's a financial guy and, uh, he, he has that, you know, often British kind of capability.
+
+01:32:44.520 --> 01:32:52.760
+He, he speaks beautifully, but he can speak off the cuff about anything he's working on,
+
+01:32:52.760 --> 01:32:56.500
+just like he has spent a week, uh, working on it.
+
+01:32:56.500 --> 01:33:02.040
+So he gets called on like, you know, the bigger bosses will say, we got to show this, do this
+
+01:33:02.040 --> 01:33:08.600
+demo for this client, literally like five minutes ahead of time, and he'll just go into
+
+01:33:08.600 --> 01:33:12.240
+it and there won't be an um, there won't be a pause.
+
+01:33:12.240 --> 01:33:14.840
+It'll just be this fluid sort of thing.
+
+01:33:14.840 --> 01:33:20.960
+And I'm like, man, if you could bottle that, uh, you know, because do it, what you're saying,
+
+01:33:20.960 --> 01:33:27.640
+doing, uh, you're on camera, doing a video thing, speaking, managing your thoughts, you
+
+01:33:27.640 --> 01:33:32.120
+know, keeping your context, it's, uh, super hard, I think.
+
+01:33:32.120 --> 01:33:37.120
+And, uh, when you see somebody who has that, like Steve Jobs, you know, he would practice
+
+01:33:37.120 --> 01:33:46.240
+I guess, but he had that ability that he could communicate anything, uh, beautifully.
+
+01:33:46.240 --> 01:33:47.820
+That's an art.
+
+01:33:47.820 --> 01:33:48.820
+Maybe not.
+
+01:33:48.820 --> 01:33:51.240
+Maybe it's just a personality trait.
+
+01:33:51.240 --> 01:33:56.360
+It's a, yeah, I don't, I don't think you can train, you can definitely improve, but I don't
+
+01:33:56.360 --> 01:34:02.360
+think you can train people if you're not born with that kind of silver tongue.
+
+01:34:02.360 --> 01:34:03.360
+Yeah.
+
+01:34:03.360 --> 01:34:04.360
+Right.
+
+01:34:04.360 --> 01:34:07.480
+And maybe it has to do with not being conscious of things.
+
+01:34:07.480 --> 01:34:13.520
+I think a lot of times it has, it's, you've never really thought about what, about what
+
+01:34:13.520 --> 01:34:19.000
+happens if you mess up or something just hasn't, you're blessed to not be able to worry about
+
+01:34:19.000 --> 01:34:20.000
+certain things.
+
+01:34:20.000 --> 01:34:21.000
+Yeah, that's true.
+
+01:34:21.000 --> 01:34:27.800
+That's why you see all the technical people that struggle, right, is, uh, but he's, you
+
+01:34:27.800 --> 01:34:29.800
+know, he has that too.
+
+01:34:29.800 --> 01:34:32.220
+He'll be very self-critical at times and stuff.
+
+01:34:32.220 --> 01:34:37.320
+But I think when, you know, like all of us, I mean, if I start out, I may be thinking
+
+01:34:37.320 --> 01:34:43.760
+about a bunch of things, but once I'm into it, you can see, you know, you sort of relax
+
+01:34:43.760 --> 01:34:50.040
+and you're just focused on that and all those other things kind of fade away, right?
+
+01:34:50.040 --> 01:34:51.320
+You can get into that zone.
+
+01:34:51.320 --> 01:34:52.600
+It's there for all of us.
+
+01:34:52.600 --> 01:34:59.640
+Well, as you become competent in things, the technology more and more disappears because
+
+01:34:59.640 --> 01:35:05.800
+I don't, as Emacs users, we don't think about what keyboards we, our touch typing is generally
+
+01:35:05.800 --> 01:35:11.200
+at another level because we split the windows without ever thinking about it.
+
+01:35:11.200 --> 01:35:12.200
+Muscle memory.
+
+01:35:12.200 --> 01:35:13.200
+Yeah.
+
+01:35:13.200 --> 01:35:14.600
+And that's what I'm saying.
+
+01:35:14.600 --> 01:35:19.680
+It's like, use that for like the value add and then, you know, literally have your muscles
+
+01:35:19.680 --> 01:35:26.280
+almost take care of the stuff that's silly, like, you know, opening a directory when it's
+
+01:35:26.280 --> 01:35:29.840
+part of a path, colon, separated, set of things.
+
+01:35:29.840 --> 01:35:31.080
+I don't want to think about that.
+
+01:35:31.080 --> 01:35:33.320
+I just want to point and go.
+
+01:35:33.320 --> 01:35:38.760
+And I don't want to know what the key binding is or any of that kind of stuff, so that we're
+
+01:35:38.760 --> 01:35:44.800
+definitely trying to like push it down to your unconscious and then see how far we can
+
+01:35:44.800 --> 01:35:49.120
+take that, you know, like what, how can you fly?
+
+01:35:49.120 --> 01:35:55.960
+Uh, I, you know, people sometimes have said there's some magic or that's why I mentioned
+
+01:35:55.960 --> 01:35:59.200
+that term today, but I think that's an important concept.
+
+01:35:59.200 --> 01:36:06.360
+You know, if it, if it seems like magic, then you've probably got it down to the right level
+
+01:36:06.360 --> 01:36:12.640
+that people don't have to think about it anymore and they're just, it's in their subconscious
+
+01:36:12.640 --> 01:36:18.120
+and they can move on to more interesting things, which is sort of why we build software in
+
+01:36:18.120 --> 01:36:19.120
+the first place.
+
+01:36:19.120 --> 01:36:20.120
+I think, right.
+
+01:36:20.120 --> 01:36:26.680
+It's to automate the mundane and let us keep adding value at another level.
+
+01:36:26.680 --> 01:36:27.680
+Yeah.
+
+01:36:27.680 --> 01:36:30.640
+Although it's very hard to remember that sometimes.
+
+01:36:30.640 --> 01:36:31.640
+Right.
+
+01:36:31.640 --> 01:36:36.560
+When you're, when you're saying, Oh, move this pixel over here.
+
+01:36:36.560 --> 01:36:37.560
+Right?
+
+01:36:37.560 --> 01:36:38.560
+Yeah.
+
+01:36:38.560 --> 01:36:43.840
+Like you were saying about front end development and how hard it can be sometimes that all
+
+01:36:43.840 --> 01:36:50.040
+the business people want to put their two cents in, it has to be, it has to be making
+
+01:36:50.040 --> 01:36:52.040
+somebody money at some point.
+
+01:36:52.040 --> 01:36:53.040
+Yeah.
+
+01:36:53.040 --> 01:36:59.160
+It's helpful, helpful when it does, but you know, not all you can build.
+
+01:36:59.160 --> 01:37:03.780
+You can spend a lot of money on things and they, I mean, look at, uh, look at what's
+
+01:37:03.780 --> 01:37:09.680
+happening to the tech companies now after billions of dollars invested and they're just
+
+01:37:09.680 --> 01:37:18.120
+throwing away thousands of people and all their knowledge bases and yeah, it's, it's
+
+01:37:18.120 --> 01:37:19.120
+competitive.
+
+01:37:19.120 --> 01:37:25.280
+I mean, you know, it's like, we don't need a thousand task management, commercial tools,
+
+01:37:25.280 --> 01:37:26.280
+right?
+
+01:37:26.280 --> 01:37:27.640
+Project management tools.
+
+01:37:27.640 --> 01:37:29.920
+So the market will shake out.
+
+01:37:29.920 --> 01:37:32.220
+There'll be three big ones maybe.
+
+01:37:32.220 --> 01:37:36.380
+And then everybody else is, if they exist, they're losing money.
+
+01:37:36.380 --> 01:37:40.980
+So what, you know, so are you going to be one of those three?
+
+01:37:40.980 --> 01:37:47.200
+That's that's the problem is that there's not enough room left for a lot of the things
+
+01:37:47.200 --> 01:37:49.200
+that people are trying to do.
+
+01:37:49.200 --> 01:37:51.680
+You talked about advancing things.
+
+01:37:51.680 --> 01:37:55.000
+It's like stuff like hyperbole or this mother of all demos.
+
+01:37:55.000 --> 01:38:01.800
+It's like sometimes we don't always have to move forward because all this mother of all
+
+01:38:01.800 --> 01:38:08.680
+demos is in a lot of ways, way ahead of anything we have now.
+
+01:38:08.680 --> 01:38:16.180
+And seems like it's ahead of hyperbole in a lot of ways and well, I've talked to a lot
+
+01:38:16.180 --> 01:38:20.520
+of non-technical people and they always say, you know, the problem I have is technology
+
+01:38:20.520 --> 01:38:21.520
+moves so fast.
+
+01:38:21.520 --> 01:38:22.520
+I can't keep up.
+
+01:38:22.520 --> 01:38:31.120
+And I say, well, actually in thinking about it over decades now that I've aged, uh, I
+
+01:38:31.120 --> 01:38:33.980
+see it as cycles much more, right?
+
+01:38:33.980 --> 01:38:40.000
+And like a sine wave that, uh, first of all, we, we do lose knowledge.
+
+01:38:40.000 --> 01:38:42.280
+We don't have a good way of capturing it.
+
+01:38:42.280 --> 01:38:47.180
+And I mean, I literally knew something about Engelbart's work and it was over a decade
+
+01:38:47.180 --> 01:38:53.140
+later that I rediscovered it and, and then got in touch and interacted with him.
+
+01:38:53.140 --> 01:38:58.480
+So, so we're definitely like forgetting about the past and get a new generation in.
+
+01:38:58.480 --> 01:39:00.380
+They don't know the lessons.
+
+01:39:00.380 --> 01:39:01.900
+They screwed things up.
+
+01:39:01.900 --> 01:39:06.720
+And eventually we rediscover that somebody already solved this and we can go and use
+
+01:39:06.720 --> 01:39:07.720
+it again.
+
+01:39:07.720 --> 01:39:11.800
+And then we start building on that and then the war happens and it gets destroyed.
+
+01:39:11.800 --> 01:39:15.080
+And then we got, so, so you actually get a lot of time, right?
+
+01:39:15.080 --> 01:39:16.680
+Like ethernet, right?
+
+01:39:16.680 --> 01:39:23.340
+To the masses from when it was invented to when it got deployed, uh, you know, hypertext.
+
+01:39:23.340 --> 01:39:30.880
+So let's say if Engelbart was showing it in 1968 and before that Ted Nelson was opining
+
+01:39:30.880 --> 01:39:37.640
+about it a ton, uh, so 1991 or two is when we got the web.
+
+01:39:37.640 --> 01:39:40.840
+So 25 years at least.
+
+01:39:40.840 --> 01:39:42.440
+And I think that's sort of cycles.
+
+01:39:42.440 --> 01:39:47.680
+I don't think there's a lot of technology cycles that are less than 10 years, uh, but
+
+01:39:47.680 --> 01:39:56.600
+you often see that the 10 to 15 to 20 year cycles from research to, you know, broad consumer
+
+01:39:56.600 --> 01:40:01.760
+adoption, uh, you've got about that amount of time to deal with it.
+
+01:40:01.760 --> 01:40:09.320
+So if you can have a research team that stays 10 years ahead of like what's out in the marketplace,
+
+01:40:09.320 --> 01:40:11.960
+you have lots of time to develop your product.
+
+01:40:11.960 --> 01:40:14.400
+It's not this, it's gotta be out yesterday.
+
+01:40:14.400 --> 01:40:17.480
+You only have two months or the market's going to close up.
+
+01:40:17.480 --> 01:40:23.580
+But it's very difficult to convince business people of that because there's so much chatter
+
+01:40:23.580 --> 01:40:29.420
+on the business side and people will show their, their mockups and their demos very
+
+01:40:29.420 --> 01:40:30.420
+broadly.
+
+01:40:30.420 --> 01:40:34.120
+And then they're like, they've got it, you know, it's like, what have they got?
+
+01:40:34.120 --> 01:40:36.000
+Well that I saw it, I saw it.
+
+01:40:36.000 --> 01:40:37.000
+Yeah.
+
+01:40:37.000 --> 01:40:41.120
+And what's behind that thing that you saw, you know, they just whipped it up right over
+
+01:40:41.120 --> 01:40:46.400
+a weekend and there's nothing, there's no database, there's no, uh, there's no user
+
+01:40:46.400 --> 01:40:47.400
+validation.
+
+01:40:47.400 --> 01:40:53.880
+So you kind of have to contend with that, which is probably why a lot of Emacs users
+
+01:40:53.880 --> 01:40:59.400
+are in academia and they don't want to deal with those issues.
+
+01:40:59.400 --> 01:41:00.400
+Yeah.
+
+01:41:00.400 --> 01:41:07.000
+It's kind of like also advanced by doing the, uh, doubling down on the stuff that works
+
+01:41:07.000 --> 01:41:12.160
+like for instance, uh, cars like, Oh look, the car's better.
+
+01:41:12.160 --> 01:41:14.440
+It's got a higher Bluetooth version.
+
+01:41:14.440 --> 01:41:15.540
+See it's better.
+
+01:41:15.540 --> 01:41:17.640
+But what about the gas mileage?
+
+01:41:17.640 --> 01:41:19.200
+How long does the motor last?
+
+01:41:19.200 --> 01:41:22.520
+But it's got a higher Bluetooth version.
+
+01:41:22.520 --> 01:41:28.580
+See it's, it's more technology and then, then the job is to create the need and the desire
+
+01:41:28.580 --> 01:41:30.600
+for that higher Bluetooth version.
+
+01:41:30.600 --> 01:41:31.600
+Right.
+
+01:41:31.600 --> 01:41:32.600
+Yeah.
+
+01:41:32.600 --> 01:41:38.480
+Well, haven't you bought like the same brand of car, even the same model, like a couple
+
+01:41:38.480 --> 01:41:41.760
+of years later and you're like, what did I just buy?
+
+01:41:41.760 --> 01:41:45.320
+I really loved the one from five years before.
+
+01:41:45.320 --> 01:41:51.440
+My, my first job out of school was in Motorola, which had a great engineering culture.
+
+01:41:51.440 --> 01:41:59.560
+But there came a time when, uh, they, they brought in automotive designers to shape,
+
+01:41:59.560 --> 01:42:02.720
+uh, the shape, the physical shape of the products.
+
+01:42:02.720 --> 01:42:08.600
+And we had some very sexy, beautiful looking things that those guys left the company and
+
+01:42:08.600 --> 01:42:13.560
+they hired a bunch of people pretty much out of college, you know, who had studied the
+
+01:42:13.560 --> 01:42:14.680
+field.
+
+01:42:14.680 --> 01:42:21.080
+And all of a sudden we had like these blocky kinds of things that like, nobody would want
+
+01:42:21.080 --> 01:42:26.440
+to hold in their hand and, uh, and I'm like, what, wait, what just happened?
+
+01:42:26.440 --> 01:42:29.080
+Didn't they document any of their work or anything?
+
+01:42:29.080 --> 01:42:35.220
+But that's, you know, we really do need the knowledge base inside people's head because
+
+01:42:35.220 --> 01:42:38.600
+we're nowhere near documenting it well enough.
+
+01:42:38.600 --> 01:42:44.320
+Uh, the design principles that people use, you know, you look at, you can see it in Apple
+
+01:42:44.320 --> 01:42:46.220
+a little bit too, right?
+
+01:42:46.220 --> 01:42:51.640
+Since Johnny Ive left, it's like, yeah, where's, where's the next design language?
+
+01:42:51.640 --> 01:42:58.320
+I just got an update to my iPhone and I noticed they changed some of the icons, but they just
+
+01:42:58.320 --> 01:43:06.600
+made like the time on my home screen, like three times as thick, the font width, you
+
+01:43:06.600 --> 01:43:12.400
+know, it's like ultra bold and I'm like, yeah, that it doesn't really look right.
+
+01:43:12.400 --> 01:43:18.440
+It just looks like it's in my face and I'm like, well, somebody, you know, got that through
+
+01:43:18.440 --> 01:43:24.760
+whatever they're running there now, but I've would have tossed that on the, you know, the
+
+01:43:24.760 --> 01:43:25.760
+bad idea pile.
+
+01:43:25.760 --> 01:43:26.760
+I think.
+
+01:43:26.760 --> 01:43:27.760
+Huh?
+
+01:43:27.760 --> 01:43:34.000
+It seems like a bit of an obnoxious change to make it for something that is so supposed
+
+01:43:34.000 --> 01:43:37.520
+to be, it's when you want it, you really want it and when you don't want it, it's supposed
+
+01:43:37.520 --> 01:43:38.520
+to be unobtrusive.
+
+01:43:38.520 --> 01:43:42.800
+I don't know that way.
+
+01:43:42.800 --> 01:43:43.800
+Yeah.
+
+01:43:43.800 --> 01:43:44.800
+Oh.
+
+01:43:44.800 --> 01:43:45.800
+Yeah.
+
+01:43:45.800 --> 01:43:54.480
+I wonder if that uses more power since it's, if it's white using all your, all your pixels
+
+01:43:54.480 --> 01:43:55.480
+there.
+
+01:43:55.480 --> 01:43:57.080
+Oh yeah.
+
+01:43:57.080 --> 01:43:59.280
+So I guess we have time in the end.
+
+01:43:59.280 --> 01:44:05.080
+I mean that like, you know, we all have these crazy deadlines, but in the end to actually
+
+01:44:05.080 --> 01:44:10.480
+move the needle forward, it's going to take a while and there's going to be certain steps
+
+01:44:10.480 --> 01:44:11.480
+backwards.
+
+01:44:11.480 --> 01:44:16.800
+And I think Emacs is sort of our shared community knowledge base, right?
+
+01:44:16.800 --> 01:44:21.140
+As long as we have these libraries, even if they get a little out of date, we can update
+
+01:44:21.140 --> 01:44:24.320
+them to the next generation when we're ready.
+
+01:44:24.320 --> 01:44:27.440
+And that's something that a lot of people don't have, right?
+
+01:44:27.440 --> 01:44:33.140
+They're just going from application to applications and they're losing all the core capabilities
+
+01:44:33.140 --> 01:44:36.760
+every time they transition.
+
+01:44:36.760 --> 01:44:41.080
+Well I think that's the, like when I was talking about the themes and the modularity and just
+
+01:44:41.080 --> 01:44:46.840
+using all that stuff is, if you can use all that stuff and especially if you can use a
+
+01:44:46.840 --> 01:44:53.380
+whole bunch of really old code, that's, that's the tricky question of how do you use as many
+
+01:44:53.380 --> 01:45:00.600
+things as you, as possible at once without everything clobbering each other?
+
+01:45:00.600 --> 01:45:13.060
+Well, I learned this lesson, don't, don't add a date created entry to your code files
+
+01:45:13.060 --> 01:45:21.440
+if you don't also include a last modified date, because we had 1991 entries in hyperbole
+
+01:45:21.440 --> 01:45:26.640
+files and people would download it and they look and they're like, this thing is ancient.
+
+01:45:26.640 --> 01:45:33.360
+I'm not going to use this because we had pulled out the modified because you need certain
+
+01:45:33.360 --> 01:45:37.400
+code to update the modified automatically when you save it.
+
+01:45:37.400 --> 01:45:41.240
+And you know, not every developer would necessarily have that.
+
+01:45:41.240 --> 01:45:46.680
+So, but when that started happening, I said, we'll put this back because they didn't want
+
+01:45:46.680 --> 01:45:54.560
+to get rid of the create date and lose that, that you sort of know how far back it goes.
+
+01:45:54.560 --> 01:46:02.520
+Yeah, yeah, I've, I've always gotten a little, I always find it interesting when I see working
+
+01:46:02.520 --> 01:46:06.400
+with something and I, and I realized that it hasn't been touched for, or it appears
+
+01:46:06.400 --> 01:46:12.040
+not to have been touched for a couple of decades and I think, oh my gosh, either I, if I found
+
+01:46:12.040 --> 01:46:15.080
+a problem, I'm thinking, oh, I, this can't be right.
+
+01:46:15.080 --> 01:46:18.080
+I must be missing something here because there's no way that this problem could have existed
+
+01:46:18.080 --> 01:46:22.680
+for 20 years and no one ever noticed it or cared about it.
+
+01:46:22.680 --> 01:46:24.120
+And sometimes I'm wrong.
+
+01:46:24.120 --> 01:46:25.120
+Sometimes I'm right.
+
+01:46:25.120 --> 01:46:26.120
+It's not a problem.
+
+01:46:26.120 --> 01:46:32.200
+Well, you have this quote for Emacs, it's like Emacs is you want editors, like you want
+
+01:46:32.200 --> 01:46:33.200
+wine.
+
+01:46:33.200 --> 01:46:34.200
+I think it's wine.
+
+01:46:34.200 --> 01:46:41.040
+It's like, the older it is, the better it gets because you get that composite of all
+
+01:46:41.040 --> 01:46:50.080
+these philosophies, workflows, workflows and forming packages and if you're going to be
+
+01:46:50.080 --> 01:46:57.600
+on the cutting edge, 95% of the ideas will probably not be good, 5% of the ideas will
+
+01:46:57.600 --> 01:47:05.280
+be good, but versus looking at the older stuff where a lot more of the ideas will be good
+
+01:47:05.280 --> 01:47:08.460
+and you'll get all like matured packages.
+
+01:47:08.460 --> 01:47:13.160
+Like you were talking about how you have all the window control with the Mac stuff.
+
+01:47:13.160 --> 01:47:19.000
+You just get the stuff, uh, Streamlint.
+
+01:47:19.000 --> 01:47:25.760
+And maybe like, you know, if we look at Richard Stallman's Emacs environment and maybe yours,
+
+01:47:25.760 --> 01:47:30.200
+John, you'd like to keep it simple, like you said, not beaming it because you've gotten,
+
+01:47:30.200 --> 01:47:32.920
+you know, to a steady state that works well for you.
+
+01:47:32.920 --> 01:47:40.440
+I visited Xerox park years ago and when I went around looking at all of the workstations,
+
+01:47:40.440 --> 01:47:48.300
+they were all using like 10 year old window managers, just like the oldest look and feel.
+
+01:47:48.300 --> 01:47:50.940
+Nobody was touching anything, right?
+
+01:47:50.940 --> 01:47:59.280
+Because they were creating the future, they thought, and they really didn't care about
+
+01:47:59.280 --> 01:48:02.760
+keeping up to date on, on their packages.
+
+01:48:02.760 --> 01:48:04.840
+They had to write their own stuff.
+
+01:48:04.840 --> 01:48:10.840
+So I thought that was kind of fascinating to learn that a lot of, you know, high level
+
+01:48:10.840 --> 01:48:18.120
+thinkers don't necessarily treat their tooling environments the same way.
+
+01:48:18.120 --> 01:48:21.240
+At least not, not every day.
+
+01:48:21.240 --> 01:48:30.520
+They probably say finish whatever they're doing or, you know, reach five years or something.
+
+01:48:30.520 --> 01:48:35.120
+That's what I'm sticking with this one Subaru car and I've had a bunch of other things,
+
+01:48:35.120 --> 01:48:39.840
+but this one has an engine that they don't make anymore, a V6.
+
+01:48:39.840 --> 01:48:45.920
+Now they're sort of like turboizing things to get the equivalent power and it doesn't
+
+01:48:45.920 --> 01:48:47.120
+perform the same way.
+
+01:48:47.120 --> 01:48:52.880
+So I'm like, well, I got to wait until the bottom of this car rusts out before I replace
+
+01:48:52.880 --> 01:48:56.600
+it because I like so much about it.
+
+01:48:56.600 --> 01:49:04.440
+Even though I'm missing some of the new technology, I just don't want to change it out.
+
+01:49:04.440 --> 01:49:12.040
+One of the things I like a lot about how Emacs looks as it looks to me, really nice in a
+
+01:49:12.040 --> 01:49:20.120
+real bullshit, ultra functional way where it's like, I like that it doesn't do the smooth
+
+01:49:20.120 --> 01:49:25.880
+scrolling that it scrolls line by line by line, even though that's not as modern and
+
+01:49:25.880 --> 01:49:34.960
+hip because it's more down or down to earth functional, I don't know, like a more engineering
+
+01:49:34.960 --> 01:49:40.160
+or something that's just not as flashy normal way.
+
+01:49:40.160 --> 01:49:44.920
+Yeah, no, I agree.
+
+01:49:44.920 --> 01:49:52.240
+And it affects, it really affects how it feels like you're somewhere in your brain, you're
+
+01:49:52.240 --> 01:49:55.480
+some kind of object that your brain thinks that you're dealing with, even if it's not
+
+01:49:55.480 --> 01:49:59.840
+really an object, you know, part of your brain just has to really to the world that way.
+
+01:49:59.840 --> 01:50:04.200
+And I think that's just one of those things is that if you can, your brain can actually
+
+01:50:04.200 --> 01:50:09.640
+feel like you're, you can almost feel each line like passing past, you're going past
+
+01:50:09.640 --> 01:50:12.640
+your scrolling action.
+
+01:50:12.640 --> 01:50:18.840
+Your brain is like, you keep helps keep you oriented, like you can, it's like, it's your
+
+01:50:18.840 --> 01:50:24.200
+visual experience creates a tactile experience for you.
+
+01:50:24.200 --> 01:50:31.200
+I think that's one of the the VR problems that the industry is suffering from is that
+
+01:50:31.200 --> 01:50:40.160
+it's so easy to program things that will entirely screw up somebody's, what do you call this
+
+01:50:40.160 --> 01:50:45.760
+subconscious parts of our, our nerve nervous systems.
+
+01:50:45.760 --> 01:50:50.800
+So right, I mean, they can scare the hell out of people, they can make them sense something
+
+01:50:50.800 --> 01:50:52.720
+that's not there.
+
+01:50:52.720 --> 01:50:58.680
+And it's like, you know, it's just, we're not ready for that in so many ways, and it's
+
+01:50:58.680 --> 01:51:00.280
+just too easy.
+
+01:51:00.280 --> 01:51:09.060
+And so if you can't depend that like physics will keep you from like flying off the earth,
+
+01:51:09.060 --> 01:51:12.400
+you know, anything can happen.
+
+01:51:12.400 --> 01:51:18.120
+I don't know how many people will want to really, you know, experience that for any
+
+01:51:18.120 --> 01:51:20.400
+continual amount of time.
+
+01:51:20.400 --> 01:51:24.280
+The other thing you don't get is like, you don't have to worry about how much time it
+
+01:51:24.280 --> 01:51:25.280
+does a scroll.
+
+01:51:25.280 --> 01:51:27.760
+So it's going to be a lot more performant, faster.
+
+01:51:27.760 --> 01:51:32.720
+I love turn, as a counter example, I love turning off the animations on my phone because
+
+01:51:32.720 --> 01:51:38.640
+it makes it snappier, faster, and I don't want to just insert animations on my phone
+
+01:51:38.640 --> 01:51:43.920
+just to slow it down and you open up your contacts, it's like, I want to make, I turn
+
+01:51:43.920 --> 01:51:51.240
+the DPI on my Android phone down, down, so that I can see more contacts at once.
+
+01:51:51.240 --> 01:51:59.600
+So I don't have to scroll as many times and I want, I make the home screen have more icons
+
+01:51:59.600 --> 01:52:01.680
+on it because I'm accurate with my thumbs.
+
+01:52:01.680 --> 01:52:09.520
+So I want to see as many icons as I can so I don't, so I can much faster see and click
+
+01:52:09.520 --> 01:52:12.960
+the right one I want to, I scroll less pages.
+
+01:52:12.960 --> 01:52:19.920
+Yeah, and you probably have a hard time making it do what you want, I'm guessing too, because
+
+01:52:19.920 --> 01:52:29.780
+it's just the one area where, for phones especially, it's just one area where you are not respected.
+
+01:52:29.780 --> 01:52:34.920
+You're going to take whatever experience they figured was the right one that week and force
+
+01:52:34.920 --> 01:52:39.160
+you to eat it, like a head of cattle.
+
+01:52:39.160 --> 01:52:44.480
+You're eating that experience like it's feed and it'll change whenever you want, whenever
+
+01:52:44.480 --> 01:52:49.880
+they want, and it's going to, I don't know if you feel the same way.
+
+01:52:49.880 --> 01:52:55.040
+My first phone was a Windows mobile phone that the person was selling because they wanted
+
+01:52:55.040 --> 01:53:05.240
+an Android phone and I've always been on custom ROMs, although lately I've been getting annoyed
+
+01:53:05.240 --> 01:53:11.760
+about it because they've been losing all the, let's see, I remember reading this blog post
+
+01:53:11.760 --> 01:53:16.320
+about somebody liking custom ROMs and they were saying that Android was becoming more
+
+01:53:16.320 --> 01:53:22.280
+restrictive because they would be putting an image through the USB port so you could
+
+01:53:22.280 --> 01:53:29.320
+have a Linux ISO connected to your computer through your phone and they wanted SE Linux
+
+01:53:29.320 --> 01:53:34.600
+but they'd have to compile the kernel in a different way and have the patch and all that
+
+01:53:34.600 --> 01:53:42.680
+type of stuff is just becoming more and more of a nightmare and you're not able to do that.
+
+01:53:42.680 --> 01:53:46.560
+Right now I'm messing with a Linux phone.
+
+01:53:46.560 --> 01:53:59.440
+Do you guys agree with Stallman and GNU thinking for FFF philosophy in general or sort of like
+
+01:53:59.440 --> 01:54:03.600
+you're more middle of the road about it?
+
+01:54:03.600 --> 01:54:11.880
+I mean I personally, I think there's a need for that philosophy.
+
+01:54:11.880 --> 01:54:22.440
+I don't, at least now, I don't personally 100% dedicate my beliefs and actions to it.
+
+01:54:22.440 --> 01:54:32.720
+I'm not certain about anything to be honest but I'm not ready to say that everything outside
+
+01:54:32.720 --> 01:54:41.280
+of it has no place for me or has no place at all but I think about the commonalities.
+
+01:54:41.280 --> 01:54:47.600
+I think that there's good that will come, there's a truth to it and there's a good that
+
+01:54:47.600 --> 01:54:56.360
+it will do and there's certainly no reason to not offer.
+
+01:54:56.360 --> 01:54:59.720
+You don't have to agree that it's the only way to agree that there's something good about
+
+01:54:59.720 --> 01:55:00.720
+it.
+
+01:55:00.720 --> 01:55:04.760
+That's my point of view.
+
+01:55:04.760 --> 01:55:11.760
+I think that you have the philosophy, like the Emacs is a great example of an ecosystem
+
+01:55:11.760 --> 01:55:17.080
+informed by that philosophy and it's an artifact of that philosophy because you look at an
+
+01:55:17.080 --> 01:55:22.840
+Emacs package, chances are if you look at any of the Zettelkasten systems, they're not
+
+01:55:22.840 --> 01:55:29.520
+going to be trying to, it's not going to be, let's see, you have org.roam.
+
+01:55:29.520 --> 01:55:36.240
+It's not Roam because Roam requires you to pay for a Sass subscription and it's only
+
+01:55:36.240 --> 01:55:40.520
+accessible online and it's like any Emacs package you use, generally you're going to
+
+01:55:40.520 --> 01:55:46.120
+have all the data on your local machine and it's...
+
+01:55:46.120 --> 01:55:50.560
+Is that, I think there was something called Roam, is that Roam research, is that what
+
+01:55:50.560 --> 01:55:51.560
+you're talking about?
+
+01:55:51.560 --> 01:55:52.560
+Yes.
+
+01:55:52.560 --> 01:55:53.560
+That's right.
+
+01:55:53.560 --> 01:55:55.560
+I thought Roam was just a verb.
+
+01:55:55.560 --> 01:55:56.560
+Sorry.
+
+01:55:56.560 --> 01:56:03.480
+They built the interface to be like that, yeah.
+
+01:56:03.480 --> 01:56:05.000
+It's interesting, right?
+
+01:56:05.000 --> 01:56:10.080
+Because yeah, you hear all these terms and you don't always know.
+
+01:56:10.080 --> 01:56:18.400
+Like a lot of people are like, hyperbole has adopted this org thing because they don't
+
+01:56:18.400 --> 01:56:27.920
+know it existed before org because the org obviously has a much broader reach right now.
+
+01:56:27.920 --> 01:56:35.400
+So yeah, understanding that history and that Emacs is tied into the FSF philosophy, there's
+
+01:56:35.400 --> 01:56:42.280
+probably a fraction of the Emacs users that even are very aware of that.
+
+01:56:42.280 --> 01:56:51.840
+But I think, yeah, Stallman, he's seen a lot and he's somebody who does think a lot from
+
+01:56:51.840 --> 01:56:55.720
+first principles and is very logical.
+
+01:56:55.720 --> 01:57:02.000
+He doesn't necessarily want to deal with parts of the world that exist.
+
+01:57:02.000 --> 01:57:09.440
+But if he makes a statement, it's usually fairly true.
+
+01:57:09.440 --> 01:57:17.520
+So the fact that he's concluded this and been very definitive about it for decades tells
+
+01:57:17.520 --> 01:57:22.200
+you that there's some truth in there that you should look into.
+
+01:57:22.200 --> 01:57:23.200
+Yeah.
+
+01:57:23.200 --> 01:57:30.120
+I think if I think of like today's earlier session where some of the questions were exposed
+
+01:57:30.120 --> 01:57:35.920
+some tension there and I think one of the reasons why we see that tension is because
+
+01:57:35.920 --> 01:57:43.040
+of the success and the kind of the more broad appeal of that org mode has brought Emacs
+
+01:57:43.040 --> 01:57:46.040
+and it's a healthy sign.
+
+01:57:46.040 --> 01:57:52.120
+It's a sign that there's people coming into the community who may not be familiar with
+
+01:57:52.120 --> 01:57:57.000
+the origins, the philosophical origins of the tools that they're using.
+
+01:57:57.000 --> 01:58:01.640
+I also think that you have a lot of the people who are interested in Emacs are probably interested
+
+01:58:01.640 --> 01:58:04.640
+in the Free Software Foundation.
+
+01:58:04.640 --> 01:58:09.080
+So it's something like the philosophy.
+
+01:58:09.080 --> 01:58:15.800
+I mean, maybe, but right, they could just be interested in what, which is what Stallman
+
+01:58:15.800 --> 01:58:17.240
+talks about too a lot.
+
+01:58:17.240 --> 01:58:22.080
+It's like you may just want the functionality that some software has and you may not care
+
+01:58:22.080 --> 01:58:26.240
+about free licensing, but you should.
+
+01:58:26.240 --> 01:58:32.080
+And here's why, you know, so yeah, but you start using all the, you start using all the
+
+01:58:32.080 --> 01:58:37.520
+packages and then the philosophy, then it kicks you into the philosophy from the reverse
+
+01:58:37.520 --> 01:58:39.800
+direction.
+
+01:58:39.800 --> 01:58:45.160
+And so I think as if you, if you start resonating with that philosophy, Emacs is the place to
+
+01:58:45.160 --> 01:58:46.160
+be.
+
+01:58:46.160 --> 01:58:55.760
+So we'll all be slanted towards wanting the GPL license or at least the BSD license because
+
+01:58:55.760 --> 01:59:05.920
+it's the place that it's the place in philosophy that exploits all those advantages practically.
+
+01:59:05.920 --> 01:59:12.600
+It's interesting because maybe, I don't know how many years ago, 10, 15 years ago, there
+
+01:59:12.600 --> 01:59:18.040
+was that big debate about open source and versus free software.
+
+01:59:18.040 --> 01:59:24.840
+And you know, it was just raging and it doesn't even seem like it's a topic anymore.
+
+01:59:24.840 --> 01:59:29.680
+It's like the GPL has done very well.
+
+01:59:29.680 --> 01:59:38.680
+Other licenses have too, but the model of software being free and open is established
+
+01:59:38.680 --> 01:59:45.780
+at all levels in the economy and in the technical world.
+
+01:59:45.780 --> 01:59:54.920
+So you know, Stallman is sort of playing the long game and what did they say, like the
+
+01:59:54.920 --> 02:00:03.120
+justice system bends towards right, but it's over a really long period of time or something.
+
+02:00:03.120 --> 02:00:04.760
+Eventually it gets to the right answer.
+
+02:00:04.760 --> 02:00:08.480
+I think it's sort of like that, you know, it's that we're going to have all these ups
+
+02:00:08.480 --> 02:00:15.760
+and downs, but eventually you'll have dictators and such, but eventually freedom will win.
+
+02:00:15.760 --> 02:00:22.440
+People win out over, you know, being crushed under the boot like the Russians are today.
+
+02:00:22.440 --> 02:00:28.120
+You know, what comes out of their society after they get crushed by the Ukrainians,
+
+02:00:28.120 --> 02:00:36.920
+I think will be hopefully for them, you know, because they had such great intellectual capacity,
+
+02:00:36.920 --> 02:00:41.260
+but they've had this broken culture for over a hundred years.
+
+02:00:41.260 --> 02:00:46.460
+And so if you don't, going back to Engelbart again, if you just evolve your technology
+
+02:00:46.460 --> 02:00:52.920
+without your process, your culture, you're left with something that may not work well
+
+02:00:52.920 --> 02:00:54.600
+at all for you.
+
+02:00:54.600 --> 02:00:57.640
+You have to take stock every now and then you need that time.
+
+02:00:57.640 --> 02:01:00.960
+And that's another point that I wanted to make in my talk, but I just couldn't find
+
+02:01:00.960 --> 02:01:10.600
+room for it is that if you know that you're going to make that time in the future, then
+
+02:01:10.600 --> 02:01:14.480
+you can focus on the present.
+
+02:01:14.480 --> 02:01:19.040
+But if you never make that time, and I don't mean, you know, it could apply to anything,
+
+02:01:19.040 --> 02:01:27.880
+but whether it's societal or technical, but don't stop and really think about what you
+
+02:01:27.880 --> 02:01:36.160
+are, you know, am I doing what I represent or are my actions representing myself and
+
+02:01:36.160 --> 02:01:40.440
+my needs and my goals?
+
+02:01:40.440 --> 02:01:47.240
+Every person, every organization of people, every society should really think about that.
+
+02:01:47.240 --> 02:01:54.500
+And it seems like it just, there's certain ways that society can grow where it becomes,
+
+02:01:54.500 --> 02:01:58.560
+you can't think about that because when you start to think about that is when you become
+
+02:01:58.560 --> 02:02:07.080
+vulnerable or you, I don't know, I'm not a philosopher, I'm not an international scholar.
+
+02:02:07.080 --> 02:02:14.800
+Does ZMAX rank up there on your hierarchy of needs, it's like number two or take that
+
+02:02:14.800 --> 02:02:19.960
+away from me and my survival will be jeopardized.
+
+02:02:19.960 --> 02:02:25.840
+And as much as my digital self is, absolutely, it's probably very close to, I mean, it really
+
+02:02:25.840 --> 02:02:33.320
+did, I think, save me from destruction in terms of organization personally.
+
+02:02:33.320 --> 02:02:38.680
+I think it was, what was it, it must have been 2008 or so, I was just so disorganized
+
+02:02:38.680 --> 02:02:46.000
+and I was, you know, missing bills and things like that, just because I had a pile of papers
+
+02:02:46.000 --> 02:02:50.760
+and I said, you know what, I need to be able to take notes, and I was taking notes, but
+
+02:02:50.760 --> 02:02:56.080
+I had just a bunch of flat text files and I said, I need to be able to collapse my text
+
+02:02:56.080 --> 02:03:03.000
+and I want to be able to take outline notes and I ended up, sorry, go ahead, I just ended
+
+02:03:03.000 --> 02:03:08.880
+up finding, I think it was work mode at the time, I think it was still a separate package
+
+02:03:08.880 --> 02:03:15.880
+and I was like, okay, finally, just this ability to collapse my notes into hierarchical structure
+
+02:03:15.880 --> 02:03:19.680
+so that I could have one thing, that I could think about multiple, one file, think about
+
+02:03:19.680 --> 02:03:24.560
+multiple things and collapse them when I didn't need to think about them anymore, and I was
+
+02:03:24.560 --> 02:03:30.640
+just like, okay, finally, this is the thing that's going to help me stay organized and
+
+02:03:30.640 --> 02:03:38.800
+from there on out, it worked, so in terms of whatever I am today, you know, I couldn't
+
+02:03:38.800 --> 02:03:45.920
+undo that anymore, like that's committed to my identity at this point, so yeah, yeah.
+
+02:03:45.920 --> 02:03:49.800
+That's a great explanation of it, you know.
+
+02:03:49.800 --> 02:03:56.080
+Have you looked at the ARG narrowing at all, or Emacs narrowing stuff?
+
+02:03:56.080 --> 02:04:03.720
+Yeah, I do that a lot, it helps me, it helped me focus on writing some of my notes for the
+
+02:04:03.720 --> 02:04:04.720
+talk.
+
+02:04:04.720 --> 02:04:12.560
+Yeah, that's very important because you can end up capturing so much, it makes it so easy
+
+02:04:12.560 --> 02:04:18.360
+to capture and then you one day said, okay, I captured too much, I need to, you know,
+
+02:04:18.360 --> 02:04:24.000
+that outline, having all those stars and whatever in your outline can be very distracting and
+
+02:04:24.000 --> 02:04:30.200
+I use very old stuff, so I still have, you know, just regular, a series of asterisks
+
+02:04:30.200 --> 02:04:39.120
+aligned to my left side, so I have a lot of visual noise in there, but yeah, yeah, I mean,
+
+02:04:39.120 --> 02:04:46.960
+do you have any special ways that you use it, like in terms of the narrowing or anything?
+
+02:04:46.960 --> 02:04:56.240
+I like using the VertiCo package because it allows you to set up different commands to
+
+02:04:56.240 --> 02:05:01.800
+either like be in a buffer or mini buffer or various things like that, so I can choose
+
+02:05:01.800 --> 02:05:07.920
+how to do that or change that over time.
+
+02:05:07.920 --> 02:05:14.720
+For me with Emacs, I think that is the most useful about it is I generally like trying
+
+02:05:14.720 --> 02:05:22.560
+out new things and Emacs is a program that got onto my computer, never left because anytime
+
+02:05:22.560 --> 02:05:28.220
+I want to try something new, I can just try out the packages or parts of the configs or
+
+02:05:28.220 --> 02:05:34.220
+variables and I get to try that stuff out, some stuff has stayed, a lot of stuff doesn't
+
+02:05:34.220 --> 02:05:40.800
+necessarily stay, draw up my files and...
+
+02:05:40.800 --> 02:05:47.240
+The first time when I'm bringing up a new system is I always like get some micro Emacs
+
+02:05:47.240 --> 02:05:53.960
+version just so I can edit my config files and then I get the OS stable enough and then
+
+02:05:53.960 --> 02:06:02.400
+I install a new Emacs and it's like I never used VI, I never learned VI, I was lucky,
+
+02:06:02.400 --> 02:06:10.640
+I guess, you know, they taught us first year of college we used Emacs, so all these people
+
+02:06:10.640 --> 02:06:16.640
+I bet they've gone through 7 to 10 editors and I'm like, well, I've gone through versions
+
+02:06:16.640 --> 02:06:19.800
+of Emacs and that's it.
+
+02:06:19.800 --> 02:06:26.080
+So it's been a little different and it is, it's crept into my subconscious, you know,
+
+02:06:26.080 --> 02:06:34.480
+so much so that the talk about getting Emacs, using Emacs to fill in your web form fields
+
+02:06:34.480 --> 02:06:42.080
+was very interesting to me because years ago I did that, when Sun was popular there was
+
+02:06:42.080 --> 02:06:49.600
+also Apollo which had a better networking and a better OS and so we were using some
+
+02:06:49.600 --> 02:06:58.560
+of their workstations and they had every shell and every window had an editing capability,
+
+02:06:58.560 --> 02:07:05.400
+was essentially an editor field but it was their own editor so I modified it so it was
+
+02:07:05.400 --> 02:07:12.040
+Emacs and you know everywhere on Apollo and it was a really beautiful environment and
+
+02:07:12.040 --> 02:07:20.240
+like then HP bought them and killed the OS in favor of HP UX so that went away and I
+
+02:07:20.240 --> 02:07:25.160
+couldn't use it anymore but we had built a really cool environment on there but that
+
+02:07:25.160 --> 02:07:31.360
+again, I wouldn't hand over the workstations, I was setting them up for a research team
+
+02:07:31.360 --> 02:07:36.120
+and I wouldn't hand them over until I had built this environment so that they all had
+
+02:07:36.120 --> 02:07:40.800
+the consistent editing experience and they wouldn't go off and just do something random
+
+02:07:40.800 --> 02:07:43.800
+with it.
+
+02:07:43.800 --> 02:07:48.760
+It's funny how you describe that bootstrap process because the way that I think about
+
+02:07:48.760 --> 02:07:54.920
+it is that a lot of times you end up, what's the path they talk about is that you need
+
+02:07:54.920 --> 02:08:02.240
+to learn enough bash to install Python or something like that and that's the joke is
+
+02:08:02.240 --> 02:08:10.280
+that that's the only amount of bash that you need to know but if you go to the Emacs path,
+
+02:08:10.280 --> 02:08:12.160
+you might not even need Python.
+
+02:08:12.160 --> 02:08:15.840
+You mentioned having it installed to edit configs and things like that and edit what
+
+02:08:15.840 --> 02:08:20.880
+you need to do to get another version of Emacs installed but I could see, I would love, maybe
+
+02:08:20.880 --> 02:08:27.840
+that'll be my inspiration for next year's talk is to find a way to, yeah, everything,
+
+02:08:27.840 --> 02:08:31.520
+just use Emacs as a substitute for Python and Ansible.
+
+02:08:31.520 --> 02:08:37.760
+I could probably use some of the packages that were out there like, what was it, Anthony
+
+02:08:37.760 --> 02:08:44.320
+or Tropin, Andrew Tropin, he had the RD, the reproducible Emacs, I could look at that and
+
+02:08:44.320 --> 02:08:45.320
+use that.
+
+02:08:45.320 --> 02:08:51.880
+It tells me about living through, we're always manipulating JSON now and I'm like, why does
+
+02:08:51.880 --> 02:08:59.680
+JavaScript have such a crappy format, it could just be S expressions and then we get rid
+
+02:08:59.680 --> 02:09:08.460
+of all this noise that we have to keep dealing with and it represents the same things but
+
+02:09:08.460 --> 02:09:13.420
+instead we settled on this crappier thing that's a little closer to the way we would
+
+02:09:13.420 --> 02:09:21.920
+have done it in C probably and because it is JavaScript's object format and it's like
+
+02:09:21.920 --> 02:09:28.120
+it's annoying to know and of course you could write a processor so it converts bi-directionally
+
+02:09:28.120 --> 02:09:30.140
+but nobody will do it.
+
+02:09:30.140 --> 02:09:37.740
+If you've ever used Lisp to replace your HTML, same sort of thing, you don't have to deal
+
+02:09:37.740 --> 02:09:43.840
+with your closing tags and you get all the auto editing and it's just like even without
+
+02:09:43.840 --> 02:09:50.680
+abstracting above any of the tags, just replacing them one for one, it's so much better but
+
+02:09:50.680 --> 02:09:53.380
+can you get anybody to do it?
+
+02:09:53.380 --> 02:10:00.040
+You look at Gix and you have the init system, that's written in Guile or scheme and then
+
+02:10:00.040 --> 02:10:07.680
+you got the cron program, it's mcron, that's written in Guile and you can use the normal
+
+02:10:07.680 --> 02:10:12.360
+cron syntax for that or a different one where you can do that and you can start labeling
+
+02:10:12.360 --> 02:10:15.700
+it with like say how many hours I want to do.
+
+02:10:15.700 --> 02:10:21.320
+I think the example they give in their documentation is like I want it to do the first Wednesday
+
+02:10:21.320 --> 02:10:28.160
+of every month or you could put if statements in there or a whole bunch of interesting things
+
+02:10:28.160 --> 02:10:35.400
+like that and it's like their package definitions are in Guile so it's like the whole operating
+
+02:10:35.400 --> 02:10:37.200
+system is in Guile.
+
+02:10:37.200 --> 02:10:39.000
+That's what we're trying to do, right?
+
+02:10:39.000 --> 02:10:46.120
+That was going to be the scripting language for Canoe, was going to be Guile and they
+
+02:10:46.120 --> 02:10:50.760
+were doing that which again, this is all like from MIT, right?
+
+02:10:50.760 --> 02:10:57.600
+Stallman's from the MIT AI lab, all this stuff, scheme, it's all evolved from that environment
+
+02:10:57.600 --> 02:11:03.600
+and they were right, this stuff is pretty good but it's like it's interesting to listen
+
+02:11:03.600 --> 02:11:11.600
+to him say if we were to update Emacs and allow another language to be the programming
+
+02:11:11.600 --> 02:11:16.360
+language, it would be scheme.
+
+02:11:16.360 --> 02:11:24.760
+It's not even on the radar of anybody in the industry to do that but he doesn't care.
+
+02:11:24.760 --> 02:11:32.880
+He's like he's the Mekana class, he sees the value, he sees what's technically good.
+
+02:11:32.880 --> 02:11:39.000
+Have you ever read any of his compiler code or something, I mean read his Emacs code,
+
+02:11:39.000 --> 02:11:48.120
+it's so clean, it's so beautiful, it's not like super abstract but it's like even the
+
+02:11:48.120 --> 02:11:52.580
+C code to implement the list of primitives, I mean now you don't know what he wrote versus
+
+02:11:52.580 --> 02:11:58.160
+somebody else and you can see in Emacs that it's gone away from the sort of stuff you
+
+02:11:58.160 --> 02:12:06.360
+used to write but his mind is just like so clear when doing things like that, that like
+
+02:12:06.360 --> 02:12:12.440
+you can learn an infinite number of things from kind of looking at the way he structures
+
+02:12:12.440 --> 02:12:13.440
+stuff.
+
+02:12:13.440 --> 02:12:17.920
+I'm going to have to, I'm making a note for myself to go seek that out specifically because
+
+02:12:17.920 --> 02:12:22.360
+I don't think I've ever, I've seen some of the code that he's written, I've just never
+
+02:12:22.360 --> 02:12:30.880
+seen it in that context of specifically going in to try to get a sense of what it is.
+
+02:12:30.880 --> 02:12:37.340
+I mean when you read, like read the Emacs manual, right, I mean at least through version
+
+02:12:37.340 --> 02:12:48.120
+19 he wrote that, right, and it's like step by step he takes you from what a point is
+
+02:12:48.120 --> 02:12:55.800
+to marks to windows and it's just, it's very thoughtful and you're like well he's been
+
+02:12:55.800 --> 02:13:00.120
+embedded in this for years and like this is second nature to him, he doesn't even think
+
+02:13:00.120 --> 02:13:07.640
+about it but when he talks about it, it all comes out from first principle and I think
+
+02:13:07.640 --> 02:13:14.120
+that's what made him a master programmer and some of the stuff that they tried to do, build
+
+02:13:14.120 --> 02:13:18.320
+an operating system from scratch even though they didn't have all the success they wanted
+
+02:13:18.320 --> 02:13:26.220
+but you look at how good they made the Unix tools compared to what they were in Berkeley
+
+02:13:26.220 --> 02:13:33.400
+and elsewhere and you know it's fabulous programming as well, I think very impressive.
+
+02:13:33.400 --> 02:13:39.960
+Cool, I know that he got, at least I saw some people praising that C manual that he recently
+
+02:13:39.960 --> 02:13:48.720
+published, I think it was in the last, somewhere in the last year, probably more like six months
+
+02:13:48.720 --> 02:13:57.120
+he released some kind of C documentation so I would wonder if he would ever consider doing
+
+02:13:57.120 --> 02:14:01.640
+something for Elisp or for Emacs or anything like that.
+
+02:14:01.640 --> 02:14:07.360
+Yeah he did talk about, that was one of the things he wanted, to update the Emacs list
+
+02:14:07.360 --> 02:14:16.080
+but I mean I think the intro of it if I remember, right, Chiselle's book right, I wanted to
+
+02:14:16.080 --> 02:14:24.880
+read it, I think the manual is pretty good but yeah, I mean there's so much to keep up
+
+02:14:24.880 --> 02:14:32.360
+with, I mean Ellie is so productive and I mean the rate at which they're adding stuff
+
+02:14:32.360 --> 02:14:39.480
+to Emacs is pretty, and that I mean if you ever look at the developer list it's a massive
+
+02:14:39.480 --> 02:14:44.720
+number, it's the same with the org, I don't know how people get anything done, they have
+
+02:14:44.720 --> 02:14:53.400
+so many, and Ehor processes like every message on there, this must be his job to some extent
+
+02:14:53.400 --> 02:15:01.360
+because it just, it would be so much time and like the hyperbole list, there's nothing,
+
+02:15:01.360 --> 02:15:06.800
+I mean it's no problem at all, it doesn't take any time but they have so many topics
+
+02:15:06.800 --> 02:15:11.160
+that people are talking about, it's very impressive.
+
+02:15:11.160 --> 02:15:18.000
+I don't understand how they get by without a better tracking system, I mean DevBugs is
+
+02:15:18.000 --> 02:15:28.000
+certainly good but it's not as, trying to find the right words here, I don't think I'm
+
+02:15:28.000 --> 02:15:35.600
+not trying to insult it but it's like a backlog, like a more kind of elaborate tracking system
+
+02:15:35.600 --> 02:15:40.520
+that kind of like separates, all right let's put this in our backlog, let's prioritize
+
+02:15:40.520 --> 02:15:48.520
+it, let's analyze it, but no, it just comes in and gets immediately handled and gets resolved,
+
+02:15:48.520 --> 02:15:54.880
+whether it's a no or a yes, things tend to be addressed and finished very quickly.
+
+02:15:54.880 --> 02:15:58.920
+So you're saying it's topics that concern me, I should bring up with them and they'll
+
+02:15:58.920 --> 02:16:04.120
+actually get dealt with pretty quickly?
+
+02:16:04.120 --> 02:16:11.680
+Whether to your satisfaction or not, I think so, my sense is in general that things don't
+
+02:16:11.680 --> 02:16:18.520
+come in and then get planned, they come in and they get done or they don't get done ever.
+
+02:16:18.520 --> 02:16:25.440
+My issues with the org, I think they've done a lot of great stuff from a user perspective,
+
+02:16:25.440 --> 02:16:32.960
+my issues have been with the way it was written, was very sloppy code for a long time, now
+
+02:16:32.960 --> 02:16:39.020
+they've spent a lot of time rewriting stuff so I think it's a lot better but I was looking
+
+02:16:39.020 --> 02:16:45.080
+at something the other day and it was clear that this should be at least a separate function
+
+02:16:45.080 --> 02:16:49.960
+or abstracted out and it was all hard coded in the function, so I think they sort of do
+
+02:16:49.960 --> 02:16:57.680
+that on a piecemeal basis because they've got a lot of legacy code from the way it started
+
+02:16:57.680 --> 02:17:03.280
+and they knew that it wasn't written the way they wanted, like having to write a totally
+
+02:17:03.280 --> 02:17:08.600
+new parser is a good example and yeah, we all go through that refactoring and stuff
+
+02:17:08.600 --> 02:17:16.160
+but I think it's because it was a quick and dirty solution for Karsten to solve, the same
+
+02:17:16.160 --> 02:17:24.960
+way the web was, right, I mean they just wanted a publishing platform for physicists, so now
+
+02:17:24.960 --> 02:17:36.300
+the guy who wrote that is a true genius, what's his name, the web inventor, so he took a broader
+
+02:17:36.300 --> 02:17:41.480
+approach to it but basically they had to get something up fast and running and that just
+
+02:17:41.480 --> 02:17:49.120
+sort of proved the concept and then you had to have the whole engineering team at Mosaic
+
+02:17:49.120 --> 02:17:56.800
+come in and actually do a lot more with it but they lost, the original web had full editing
+
+02:17:56.800 --> 02:18:03.740
+capabilities like in wikis and they lost that almost immediately when they went to the graphical
+
+02:18:03.740 --> 02:18:11.060
+web and so we've been hurting, you know, like every time I used to go when I was, early
+
+02:18:11.060 --> 02:18:18.000
+days of the web, I'd look and I'd look at this form and I'd say okay, so this is like
+
+02:18:18.000 --> 02:18:22.800
+you enter this data and then it runs this program and it does this thing, so how do
+
+02:18:22.800 --> 02:18:31.920
+I see what the program does, how does it process the form, it was never connected, the code
+
+02:18:31.920 --> 02:18:39.520
+was never connected to the form of like why would you want this set of inputs that is
+
+02:18:39.520 --> 02:18:46.920
+totally disconnected from the way it's processed, right, it was hidden in the back end, right,
+
+02:18:46.920 --> 02:18:52.680
+which you had no access to, it's like I guess good for proprietary vendors but it's like
+
+02:18:52.680 --> 02:18:58.400
+so for engineers to understand the system, it was very, very difficult, what if I have
+
+02:18:58.400 --> 02:19:05.480
+a hundred forms, so I see, yeah, that there's like one function that's referred to in the
+
+02:19:05.480 --> 02:19:11.440
+form but I don't know anything about that, I can't even see it's calling invocation
+
+02:19:11.440 --> 02:19:18.960
+a lot of times, right, so it's like that's just broken architecture and nobody cared,
+
+02:19:18.960 --> 02:19:24.240
+they just like let it go on and now you have all these, what, I mean was there an alternative
+
+02:19:24.240 --> 02:19:31.720
+to that, did it start somewhere else and then, well you encapsulate it as like the processing
+
+02:19:31.720 --> 02:19:39.800
+is part of the form abstraction, that it's an active entity and they can be separated
+
+02:19:39.800 --> 02:19:45.480
+if they live, right, like you have the front end and the back end piece of the form behavior
+
+02:19:45.480 --> 02:19:51.320
+but maybe you want that abstraction to be able to migrate front end to back end across
+
+02:19:51.320 --> 02:19:59.120
+time and so you need to have these two parts and we see this in building things now, right,
+
+02:19:59.120 --> 02:20:04.680
+what are we using, we're using TypeScript on the front end and we're using C sharp on
+
+02:20:04.680 --> 02:20:12.080
+the back end, so I imagine there's some impedance mismatches going on around there but we actually
+
+02:20:12.080 --> 02:20:17.580
+introduced a Python validation framework, I don't want to get into this too much but
+
+02:20:17.580 --> 02:20:23.960
+we are using those technologies and we can share those now across the front end and back
+
+02:20:23.960 --> 02:20:34.520
+end and so, you know, a lot of languages that you need to understand and I just think, so
+
+02:20:34.520 --> 02:20:40.140
+like closures, right, you're familiar with closures, right, so I mean that's what you're
+
+02:20:40.140 --> 02:20:49.080
+doing is you're passing around the environment so that you can interpret the data properly
+
+02:20:49.080 --> 02:20:57.400
+because you have the closure which wraps around it and so many things get, when you want to
+
+02:20:57.400 --> 02:21:05.380
+deal with unwinding state, you know, through many levels, having the closures allows you
+
+02:21:05.380 --> 02:21:12.200
+to do that easily, sort of the lexical binding versus the dynamic binding and so, you know,
+
+02:21:12.200 --> 02:21:20.920
+the callback hell that they talk about in Node.js is reflective of not having a good
+
+02:21:20.920 --> 02:21:29.880
+closure-based environment, when you look at most of the list-based web environments are
+
+02:21:29.880 --> 02:21:36.920
+closure-based and they can do much more interesting application building without dealing with
+
+02:21:36.920 --> 02:21:41.000
+a lot of the plumbing than if they didn't have that.
+
+02:21:41.000 --> 02:21:49.480
+Interesting and when you refer to closures, are you saying that there's a certain paradigm
+
+02:21:49.480 --> 02:21:56.760
+of form processing on the web that's more like a closure-based solution?
+
+02:21:56.760 --> 02:22:04.480
+That's right, yeah, look at the common Lisp, like Hutchin2 and frameworks built on top
+
+02:22:04.480 --> 02:22:07.400
+of that and you'll see.
+
+02:22:07.400 --> 02:22:12.480
+I definitely will do that but I meant more like when you're talking about the early days
+
+02:22:12.480 --> 02:22:20.600
+and how they separated the form from the actions, are you saying that that's a situation where
+
+02:22:20.600 --> 02:22:26.960
+like something that would be like a closure is more or are you just strictly talking about
+
+02:22:26.960 --> 02:22:27.960
+that?
+
+02:22:27.960 --> 02:22:32.640
+That would help solve that problem, I would say, because it gives you, you know, sort
+
+02:22:32.640 --> 02:22:38.040
+of you're seeing some of it in React now, they're like, oh, we've discovered components
+
+02:22:38.040 --> 02:22:46.040
+and so, you know, we only have to do partial updates now because we can like walk our tree
+
+02:22:46.040 --> 02:22:54.080
+and know that only this subcomponent, you know, and it's like, yeah, by building all
+
+02:22:54.080 --> 02:23:02.400
+these abstractions, you simplify your state management a lot and you simplify that and
+
+02:23:02.400 --> 02:23:06.720
+you localize where any of your issues can be.
+
+02:23:06.720 --> 02:23:15.140
+And so, if I have my processing engine totally disconnected from my input state, you know,
+
+02:23:15.140 --> 02:23:19.600
+it's going to cause a lot of problems and you saw it in the early days of the web where
+
+02:23:19.600 --> 02:23:26.200
+everything was, what was it, CGI, is that what it was, right?
+
+02:23:26.200 --> 02:23:32.240
+You just sort of, you had a totally separate back end and there was just this very thin
+
+02:23:32.240 --> 02:23:39.480
+kind of connection to the front end and everybody's rediscovered, they rediscovered sockets, okay,
+
+02:23:39.480 --> 02:23:45.160
+we need sockets and then everybody's fighting, well, I have to replicate the data on the
+
+02:23:45.160 --> 02:23:53.120
+front end and the back end, you know, just handling tables is such a bear on the web
+
+02:23:53.120 --> 02:23:54.920
+for similar reasons, right?
+
+02:23:54.920 --> 02:24:02.360
+So you had, what was that company Apollo or that was one of their frameworks who was trying
+
+02:24:02.360 --> 02:24:11.360
+to do real time front end, back end framework so that you can do all these pushes to a million
+
+02:24:11.360 --> 02:24:18.160
+clients, right, of any change and you could get like real time updates.
+
+02:24:18.160 --> 02:24:23.320
+You know, that seems fundamental to me if you're going to have a Facebook like kind
+
+02:24:23.320 --> 02:24:29.820
+of environment and you look at how much money Facebook had to spend to just build their
+
+02:24:29.820 --> 02:24:33.560
+basic application that scales at the level that they needed it.
+
+02:24:33.560 --> 02:24:35.540
+I mean, it's just nymph.
+
+02:24:35.540 --> 02:24:38.760
+You're talking about hot reloading, right, of data?
+
+02:24:38.760 --> 02:24:46.560
+Yeah, yeah, but I'm talking about like how it flows and where it's maintained and, you
+
+02:24:46.560 --> 02:24:50.040
+know, is there a single source of truth, right?
+
+02:24:50.040 --> 02:24:51.360
+That's what we really want.
+
+02:24:51.360 --> 02:24:57.000
+So people try to push stuff to the back end, but then you get all of this problem of the
+
+02:24:57.000 --> 02:24:58.960
+front ends out of date.
+
+02:24:58.960 --> 02:25:00.640
+So what's your method?
+
+02:25:00.640 --> 02:25:07.440
+You keep web sockets open, you know, it's like, well, then I have too many of those.
+
+02:25:07.440 --> 02:25:17.360
+So yeah, and what's your programming model for pushing all that data around anyway, right?
+
+02:25:17.360 --> 02:25:25.000
+Pushing, pulling, it's complex stuff, but if you solve it, there's a guy who wrote a
+
+02:25:25.000 --> 02:25:32.120
+web server, like tiny, tiny WB or something.
+
+02:25:32.120 --> 02:25:38.720
+I could look it up, but it's like, and he shows benchmarks of what he can process from
+
+02:25:38.720 --> 02:25:41.100
+this one like C-based program.
+
+02:25:41.100 --> 02:25:48.860
+And it's like five times the speed of other things just based on the algorithms that he
+
+02:25:48.860 --> 02:25:55.840
+implemented and so, you know, so you get your scale right like that and then you keep adding
+
+02:25:55.840 --> 02:26:00.600
+on some abstraction layers because now you can afford it.
+
+02:26:00.600 --> 02:26:06.200
+And then you simplify your programming model and like, we could be building the kinds of
+
+02:26:06.200 --> 02:26:12.240
+web applications that we want, you know, with menus even without, have you ever figured
+
+02:26:12.240 --> 02:26:16.640
+out how to do a good menu on a web app, you know?
+
+02:26:16.640 --> 02:26:22.920
+It's so much energy, right, when like in Emacs it would be just, here's my menu item and
+
+02:26:22.920 --> 02:26:23.920
+I'm done.
+
+02:26:23.920 --> 02:26:32.220
+So I think the baseline of what your programming model is matters so much from the syntax down
+
+02:26:32.220 --> 02:26:40.320
+to like the lexical scoping and, you know, and we're just lucky that Lisp got a lot of
+
+02:26:40.320 --> 02:26:45.780
+things right, that we have that as sort of like the thinking man's programming environment
+
+02:26:45.780 --> 02:26:52.460
+while all these other people were stuffed into Java, you know, in the 80s and they built
+
+02:26:52.460 --> 02:27:01.560
+Java beans and if you've ever looked at J2EE, I mean, that was such a monstrosity that it
+
+02:27:01.560 --> 02:27:04.880
+just collapsed literally of its own weight sort of.
+
+02:27:04.880 --> 02:27:11.440
+I mean, people are still using Java but it's like nobody wants to field a new web app,
+
+02:27:11.440 --> 02:27:16.760
+you know, in J2EE, it's just not done.
+
+02:27:16.760 --> 02:27:23.340
+So unless you have, you know, a ton of legacy investment that you have to keep up.
+
+02:27:23.340 --> 02:27:30.480
+So I think these design choices matter a lot and I think Apple's renaissance has been based
+
+02:27:30.480 --> 02:27:36.860
+on, you know, really saying, well, we'll iterate through our designs before we subject the
+
+02:27:36.860 --> 02:27:38.360
+users to them.
+
+02:27:38.360 --> 02:27:45.840
+We're not going to just make everybody one big beta test like Facebook or Microsoft and,
+
+02:27:45.840 --> 02:27:52.280
+you know, you see that like people have, you know, certainly in the consumer space have,
+
+02:27:52.280 --> 02:27:58.760
+you know, the shops are always full, I mean, wherever Apple store you go to and, you know,
+
+02:27:58.760 --> 02:28:04.480
+Microsoft is trying, Sony tries to have stores and stuff but you don't, they're not filled
+
+02:28:04.480 --> 02:28:10.480
+with this traffic, you know, because people aren't attached to the design aesthetic the
+
+02:28:10.480 --> 02:28:11.480
+same way.
+
+02:28:11.480 --> 02:28:12.480
+True, yeah.
+
+02:28:12.480 --> 02:28:17.120
+Yeah, they got something, they certainly have something that people want.
+
+02:28:17.120 --> 02:28:24.760
+Every program grows until it's a half a common list implementation or it's got a mail server
+
+02:28:24.760 --> 02:28:31.120
+in it, like you got those two sayings, oh, have you seen this at all?
+
+02:28:31.120 --> 02:28:36.240
+It's kind of lets you make desktop like apps with Common Lisp.
+
+02:28:36.240 --> 02:28:44.160
+I like the name though, Omnificent GUI Builder, you're giving us a lot of great links today,
+
+02:28:44.160 --> 02:28:45.160
+it's making me happy.
+
+02:28:45.160 --> 02:28:53.880
+It's for a YouTube video but they also have a GitHub page somewhere.
+
+02:28:53.880 --> 02:29:02.560
+I wish I did more Common Lisp but this is, and this is pretty new too, this is about
+
+02:29:02.560 --> 02:29:04.440
+a half a year old only.
+
+02:29:04.440 --> 02:29:09.320
+Well, does it look decent?
+
+02:29:09.320 --> 02:29:10.880
+Is it real or is it like?
+
+02:29:10.880 --> 02:29:18.160
+Well, it seems kind of like React.js where you're not writing, where you're, it's not
+
+02:29:18.160 --> 02:29:26.320
+the pure HTML post Git model where it's more like an application and like if you look at
+
+02:29:26.320 --> 02:29:30.240
+the screen, like you have the applications, you can move them around like it is in this
+
+02:29:30.240 --> 02:29:31.240
+up.
+
+02:29:31.240 --> 02:29:40.440
+It certainly looks functional, that would be my way to say it.
+
+02:29:40.440 --> 02:29:45.920
+And then you just write it in all one language.
+
+02:29:45.920 --> 02:29:50.040
+Just like Smalltalk, like what their environment used to look like.
+
+02:29:50.040 --> 02:29:57.640
+Oh yeah, and that, the glorious toolkits is the thing I was...
+
+02:29:57.640 --> 02:30:03.840
+Well there was a time when we had single UI builder environments and then you would just
+
+02:30:03.840 --> 02:30:11.160
+say what theme you wanted, Windows, Mac OS, and instantly it would look like the other
+
+02:30:11.160 --> 02:30:14.600
+environment and you had to do no work to get that.
+
+02:30:14.600 --> 02:30:22.560
+It's like, wow, that would be nice these days.
+
+02:30:22.560 --> 02:30:27.720
+Another thing with that philosophy of the copying the programs, you had Keanu Reeves
+
+02:30:27.720 --> 02:30:34.200
+talking about NFTs and it's like, what do you think about these NFTs with the matrix?
+
+02:30:34.200 --> 02:30:40.000
+You mean we're gonna have a computer, let's see, you mean we're gonna spend all this,
+
+02:30:40.000 --> 02:30:47.080
+you mean we're gonna have, you want me to be on board with charging people for these
+
+02:30:47.080 --> 02:30:55.320
+digital things on a computer that's designed to make copies?
+
+02:30:55.320 --> 02:31:01.520
+The whole person just like completely stopped because they're trying to, yeah, showed you
+
+02:31:01.520 --> 02:31:04.720
+how the idea was fundamentally wrong.
+
+02:31:04.720 --> 02:31:09.360
+Yeah, get your baseline, right?
+
+02:31:09.360 --> 02:31:18.880
+I mean, I've had to, I'm very pro-Ukraine and so I've learned a lot more about Russian
+
+02:31:18.880 --> 02:31:19.880
+history.
+
+02:31:19.880 --> 02:31:27.520
+I also have a number of Russian workmates who are very nice people, but they left Russia
+
+02:31:27.520 --> 02:31:38.560
+as well and a lot of what's going on seems to be from decisions that were made eons ago
+
+02:31:38.560 --> 02:31:44.280
+in the back to the Mongols and the way they ran their systems.
+
+02:31:44.280 --> 02:31:49.760
+So it's like when everybody says we've got to run so fast and we don't have time to really
+
+02:31:49.760 --> 02:31:57.520
+think through the design, they can't see the impact that that's gonna have on their enterprise
+
+02:31:57.520 --> 02:31:58.520
+or anything else.
+
+02:31:58.520 --> 02:32:05.520
+And if you're a long-term person, you obviously have to do things fast enough so the company
+
+02:32:05.520 --> 02:32:11.560
+can survive, but you have to think about that strategic level as well.
+
+02:32:11.560 --> 02:32:14.960
+Those who don't know history are doomed to repeat it.
+
+02:32:14.960 --> 02:32:17.520
+Yeah, exactly.
+
+02:32:17.520 --> 02:32:19.120
+Sometimes very badly.
+
+02:32:19.120 --> 02:32:27.080
+So how do we get Lisp to be something again?
+
+02:32:27.080 --> 02:32:28.760
+People are worried about Emacs dying out.
+
+02:32:28.760 --> 02:32:35.680
+I don't think that's happening so much, but certainly Lisp missed its position in web
+
+02:32:35.680 --> 02:32:42.680
+development, it seems, even though it can be quite capable there, but because of its
+
+02:32:42.680 --> 02:32:53.640
+image model and lack of focus on threading, it seems like you can't get anybody to even
+
+02:32:53.640 --> 02:32:58.400
+look at it now, right?
+
+02:32:58.400 --> 02:33:04.360
+I mean, unless you're talking about Clojure, like you talked about.
+
+02:33:04.360 --> 02:33:09.280
+You're talking about how Scheme would have been a lot better for JavaScript when JavaScript
+
+02:33:09.280 --> 02:33:15.560
+was first released, or like Emacs, because Emacs is good for a platform for distributing
+
+02:33:15.560 --> 02:33:25.280
+apps versus HTML as a document reader that they shoved applications into.
+
+02:33:25.280 --> 02:33:28.800
+I like the way you describe things.
+
+02:33:28.800 --> 02:33:34.080
+Yeah, I can't argue with that.
+
+02:33:34.080 --> 02:33:37.520
+But it is interesting to me.
+
+02:33:37.520 --> 02:33:45.120
+A lot of people don't know certain systems that are Lisp based that have been super successful,
+
+02:33:45.120 --> 02:33:55.240
+like Orbitz was based on the technology of a Cambridge company that implemented the bulk
+
+02:33:55.240 --> 02:34:05.000
+of their flight scheduling software in Lisp, and they had a very active kind of Lisp community.
+
+02:34:05.000 --> 02:34:07.280
+So you know, it's still-
+
+02:34:07.280 --> 02:34:10.040
+Hacker News is another one.
+
+02:34:10.040 --> 02:34:14.080
+Hacker News, yeah, that's built in Lisp?
+
+02:34:14.080 --> 02:34:21.040
+Yeah, the person who founded it was using Lisp and Paul Graham.
+
+02:34:21.040 --> 02:34:23.880
+Sam Altman?
+
+02:34:23.880 --> 02:34:25.440
+Paul Graham?
+
+02:34:25.440 --> 02:34:27.440
+Paul Graham.
+
+02:34:27.440 --> 02:34:28.440
+He founded it.
+
+02:34:28.440 --> 02:34:29.440
+Oh, I didn't know he was-
+
+02:34:29.440 --> 02:34:31.440
+Or at least he was involved in it anyway.
+
+02:34:31.440 --> 02:34:32.440
+Yeah, yeah, yeah.
+
+02:34:32.440 --> 02:34:33.440
+It was either that or Reddit.
+
+02:34:33.440 --> 02:34:34.440
+It was one or the other.
+
+02:34:34.440 --> 02:34:44.400
+He had an interesting Yahoo shopping experience where he wrote about that, how he leveraged
+
+02:34:44.400 --> 02:34:46.840
+Lisp to his advantage.
+
+02:34:46.840 --> 02:34:51.840
+So yeah, I think Python was that way until it got discovered.
+
+02:34:51.840 --> 02:35:02.640
+I worked with those guys back in Silicon Valley for a little while, and when we were trying
+
+02:35:02.640 --> 02:35:09.680
+to show the world that Python was something good, but it hadn't been noticed yet.
+
+02:35:09.680 --> 02:35:17.000
+So there's a lot of leverage that you can get if you're careful about it.
+
+02:35:17.000 --> 02:35:23.920
+One thing that I thought was interesting is you look at the- Google did some survey of
+
+02:35:23.920 --> 02:35:32.160
+the most efficient programming languages to run, and I think C was number one, and you
+
+02:35:32.160 --> 02:35:39.280
+look at the list, and the only one that even looks remotely high level is Common Lisp,
+
+02:35:39.280 --> 02:35:51.200
+where it's sent per the TDP or whatever that would be called, sent per execution or whatever.
+
+02:35:51.200 --> 02:35:53.760
+Everything else is more like C.
+
+02:35:53.760 --> 02:35:59.200
+Have you heard of Pico Lisp?
+
+02:35:59.200 --> 02:36:01.160
+A little bit.
+
+02:36:01.160 --> 02:36:09.840
+On RosettaCode, where they write the different implementations of algorithms in different
+
+02:36:09.840 --> 02:36:16.720
+languages, look at any sort of algorithm and the Pico Lisp implementation next to all the
+
+02:36:16.720 --> 02:36:25.600
+others, and it's always super tiny, and you've got just a ton more code and everything else.
+
+02:36:25.600 --> 02:36:32.920
+And then Pico Lisp is like Lisp with a database, maybe a triplet database built in, and it's
+
+02:36:32.920 --> 02:36:35.880
+pretty small and efficient.
+
+02:36:35.880 --> 02:36:39.160
+But I don't think anybody uses it.
+
+02:36:39.160 --> 02:36:46.200
+But it's an interesting example of a special case Lisp that you could embed in other things
+
+02:36:46.200 --> 02:36:48.200
+or use.
+
+02:36:48.200 --> 02:36:53.720
+One guy in Germany has been doing it for many years.
+
+02:36:53.720 --> 02:36:57.480
+Is that like an internet rule or a computing rule that we could come up with?
+
+02:36:57.480 --> 02:37:01.720
+No matter what you could think of, no matter what you find, there's one guy in Germany
+
+02:37:01.720 --> 02:37:07.440
+who's already done it.
+
+02:37:07.440 --> 02:37:09.760
+Well, I knew some Dutch people.
+
+02:37:09.760 --> 02:37:12.080
+I was in embedded systems at Motorola.
+
+02:37:12.080 --> 02:37:16.560
+We were working with very small microcontrollers with no memory.
+
+02:37:16.560 --> 02:37:21.960
+So we needed these super efficient cross compilers to build anything for us.
+
+02:37:21.960 --> 02:37:27.520
+And this company in Amsterdam seemed to have some skills.
+
+02:37:27.520 --> 02:37:31.600
+And so we started talking to them, and then we flew over there to do due diligence and
+
+02:37:31.600 --> 02:37:32.600
+check them out.
+
+02:37:32.600 --> 02:37:38.040
+And God, if they did not have one of the most advanced software development operations I'd
+
+02:37:38.040 --> 02:37:42.620
+ever seen, total quality assurance, great people.
+
+02:37:42.620 --> 02:37:46.860
+But everything was like to the T. This is how we do it, boom, boom, boom.
+
+02:37:46.860 --> 02:37:54.600
+So that's the only way you could get the efficiency out of compilers at the time.
+
+02:37:54.600 --> 02:37:56.920
+And so we worked with them.
+
+02:37:56.920 --> 02:38:06.680
+But they had that German kind of culture of the fit and finish has to be just so.
+
+02:38:06.680 --> 02:38:14.800
+So we used to have to do things like there was 256 bytes of memory.
+
+02:38:14.800 --> 02:38:18.360
+There's no K in there, of RAM.
+
+02:38:18.360 --> 02:38:28.400
+And so you would like to use overlays where you're repeating what you store in each word
+
+02:38:28.400 --> 02:38:33.840
+at different times in the program, and you had to manually keep track of the lifetime
+
+02:38:33.840 --> 02:38:34.840
+of objects.
+
+02:38:34.840 --> 02:38:36.720
+And it was a nightmare.
+
+02:38:36.720 --> 02:38:41.280
+But it was the only way to kind of squeeze some of the stuff in there.
+
+02:38:41.280 --> 02:38:47.560
+And we started in assembler, and then we went to C. And then we had this one time that was
+
+02:38:47.560 --> 02:38:55.040
+really fun that we had, God, I'm really dating myself now, but some of the people in product
+
+02:38:55.040 --> 02:39:02.980
+had these terminals, like 12 inch terminals with eight inch floppy disks on the terminal.
+
+02:39:02.980 --> 02:39:11.800
+And they were using those to interface to the microcontroller boards for emulator boards,
+
+02:39:11.800 --> 02:39:17.080
+where we would test out new software for a board that hadn't been released to production
+
+02:39:17.080 --> 02:39:18.080
+yet.
+
+02:39:18.080 --> 02:39:20.600
+And we would be able to iterate on that.
+
+02:39:20.600 --> 02:39:26.960
+And right next to these things were sun workstations that the engineers used for their normal development.
+
+02:39:26.960 --> 02:39:30.400
+So I was moved from research to product.
+
+02:39:30.400 --> 02:39:34.960
+And they said, so this is how you're going to have to do your code on this monochrome
+
+02:39:34.960 --> 02:39:35.960
+terminal.
+
+02:39:35.960 --> 02:39:40.200
+And I'm like, well, what about using the sun workstation?
+
+02:39:40.200 --> 02:39:43.880
+And it's just a serial port, so we'll just interface it.
+
+02:39:43.880 --> 02:39:45.760
+No, we tried that two years ago.
+
+02:39:45.760 --> 02:39:46.760
+It didn't work.
+
+02:39:46.760 --> 02:39:48.760
+We can't do it.
+
+02:39:48.760 --> 02:39:55.080
+I'm like, I am not going to sit here and use this dumpy thing for a week.
+
+02:39:55.080 --> 02:40:01.200
+So that afternoon, I figured out the protocol and got the thing, the sun workstation, talking
+
+02:40:01.200 --> 02:40:02.200
+to it.
+
+02:40:02.200 --> 02:40:09.760
+And then I wrote a disassembler tool so I could work the assembly, the math, behind
+
+02:40:09.760 --> 02:40:11.320
+it at a higher level.
+
+02:40:11.320 --> 02:40:13.920
+And I had all that going the first week.
+
+02:40:13.920 --> 02:40:18.440
+But people came over, and they're like, what are you doing?
+
+02:40:18.440 --> 02:40:21.600
+How is this possible?
+
+02:40:21.600 --> 02:40:26.600
+They just had started from the vantage point that they really had to live here, and they
+
+02:40:26.600 --> 02:40:29.600
+hadn't done enough of an assessment.
+
+02:40:29.600 --> 02:40:36.760
+So I would just look back at that when people say, this is the only way to do something.
+
+02:40:36.760 --> 02:40:42.660
+That's one of the great things about computers is it can speak too many languages.
+
+02:40:42.660 --> 02:40:48.280
+So if you want to just speak Lisp, you can just speak Lisp, relatively, anyway.
+
+02:40:48.280 --> 02:40:56.520
+Or if everybody else wants to speak that worst language that you don't like as much, you
+
+02:40:56.520 --> 02:41:03.800
+don't necessarily have to speak that, I guess, except for the www, but anyway.
+
+02:41:03.800 --> 02:41:11.720
+Omnificent web development language, and tell everybody that this is the be all and all.
+
+02:41:11.720 --> 02:41:15.320
+I think what I like the most about that is that I don't believe that omnificent is actually
+
+02:41:15.320 --> 02:41:23.680
+a word, so that can be accused of being incorrect, because there is no definition of omnificent
+
+02:41:23.680 --> 02:41:26.040
+that they can be shown not to conform to.
+
+02:41:26.040 --> 02:41:29.720
+I could be talking about that, but that's...
+
+02:41:29.720 --> 02:41:30.800
+There's a Latin word.
+
+02:41:30.800 --> 02:41:36.720
+That's why you know what it means, is because omni is everything, efficient is something
+
+02:41:36.720 --> 02:41:44.440
+about knowing, or everywhere, like the all-knowing GUI builder.
+
+02:41:44.440 --> 02:41:46.440
+Isn't that kind of how you read the omni-efficient?
+
+02:41:46.440 --> 02:41:49.080
+I think that's actually omniscient.
+
+02:41:49.080 --> 02:41:50.080
+I think...
+
+02:41:50.080 --> 02:41:51.080
+Omniscient, yeah.
+
+02:41:51.080 --> 02:41:52.080
+Oh, omniscient.
+
+02:41:52.080 --> 02:41:53.080
+Yeah, that's right.
+
+02:41:53.080 --> 02:41:54.080
+You're close.
+
+02:41:54.080 --> 02:41:55.080
+I think, yeah.
+
+02:41:55.080 --> 02:42:00.520
+C-L-O-G, so it's the clog builder.
+
+02:42:00.520 --> 02:42:02.960
+That sounds like a Lisp-y kind of thing, you know?
+
+02:42:02.960 --> 02:42:09.680
+It doesn't have any sexiness to it, but we've invented the clog builder.
+
+02:42:09.680 --> 02:42:10.680
+You know, that's funny.
+
+02:42:10.680 --> 02:42:12.480
+That was another thing I wanted to mention when I was writing this.
+
+02:42:12.480 --> 02:42:15.120
+It's just to clog how everybody else does things.
+
+02:42:15.120 --> 02:42:16.120
+Just clog it up.
+
+02:42:16.120 --> 02:42:19.120
+No, you don't have to do it that way.
+
+02:42:19.120 --> 02:42:24.800
+Is that something that is real?
+
+02:42:24.800 --> 02:42:32.140
+I feel like a lot of Emacs users are maybe just that type of person in general.
+
+02:42:32.140 --> 02:42:38.400
+We want things that look, not look, but sound, like clog.
+
+02:42:38.400 --> 02:42:47.360
+We prefer things that are awkward and are stupid acronyms, and if it seems like effort
+
+02:42:47.360 --> 02:42:53.720
+has been put into something to make it sound sick or market or anything, it's like, I don't
+
+02:42:53.720 --> 02:42:54.720
+know.
+
+02:42:54.720 --> 02:42:55.720
+I'm not sure.
+
+02:42:55.720 --> 02:43:00.480
+I think that goes back to what I was talking about with the scrolling down.
+
+02:43:00.480 --> 02:43:03.600
+I want it to not have animations.
+
+02:43:03.600 --> 02:43:10.600
+It's just spending CPU cycles to make my experience worse.
+
+02:43:10.600 --> 02:43:15.520
+Why would I want to scroll down half a line so I can read half of a text?
+
+02:43:15.520 --> 02:43:21.120
+Well, if you scroll half of a finger, that's what it would be, if you just do this.
+
+02:43:21.120 --> 02:43:22.400
+Oh, is this the guy?
+
+02:43:22.400 --> 02:43:26.960
+I think this is the guy, the one, the G toolkit, yeah, the glamorous toolkit.
+
+02:43:26.960 --> 02:43:28.920
+I read about this a while ago.
+
+02:43:28.920 --> 02:43:31.560
+This was one Google guy.
+
+02:43:31.560 --> 02:43:40.700
+We had a team, and then I think he left Google, and he's trying to do it, implemented in Faro,
+
+02:43:40.700 --> 02:43:43.000
+the pure object-oriented language.
+
+02:43:43.000 --> 02:43:45.760
+Yeah, this sounds like one of those things.
+
+02:43:45.760 --> 02:43:47.760
+Yeah, that's what it is.
+
+02:43:47.760 --> 02:43:52.200
+You know, there's, yeah, it's like, just get the base right, right?
+
+02:43:52.200 --> 02:43:53.240
+That's what Lisp did.
+
+02:43:53.240 --> 02:44:00.480
+Just give me Kar and Kutter and Lambda Calculus and go for it.
+
+02:44:00.480 --> 02:44:01.480
+What?
+
+02:44:01.480 --> 02:44:03.040
+And I will move the world.
+
+02:44:03.040 --> 02:44:04.040
+Yeah.
+
+02:44:04.040 --> 02:44:09.080
+Well, when you think, you know, I mean, look at the opportunity that was lost with Lisp
+
+02:44:09.080 --> 02:44:10.080
+machines.
+
+02:44:10.080 --> 02:44:11.920
+I was around for those too.
+
+02:44:11.920 --> 02:44:14.520
+I'm near dead, I guess.
+
+02:44:14.520 --> 02:44:24.520
+But I was young, at least then, and they microcoded Lisp, right?
+
+02:44:24.520 --> 02:44:29.480
+So everything atop that was Lisp.
+
+02:44:29.480 --> 02:44:33.800
+The Windows system was Lisp, you know, sort of like what Jobs was trying to do.
+
+02:44:33.800 --> 02:44:39.240
+He was trying to do, I don't know, well, when he did display PostScript, or he was trying
+
+02:44:39.240 --> 02:44:42.920
+to get common experience at different levels.
+
+02:44:42.920 --> 02:44:48.320
+But like, if you really have a consistent programming model across your whole damn system,
+
+02:44:48.320 --> 02:44:58.120
+you know, it's probably thousands of man years of work that you just eliminate right there
+
+02:44:58.120 --> 02:45:02.920
+if you have a decent language, right, and then a debugging environment.
+
+02:45:02.920 --> 02:45:09.520
+I mean, we still use stuff that there is no debugging environment for, right?
+
+02:45:09.520 --> 02:45:15.240
+Because it solves some problem that exists in the industry, and we haven't gotten rid
+
+02:45:15.240 --> 02:45:17.440
+of it yet.
+
+02:45:17.440 --> 02:45:22.320
+I want to set up some Raspberry Pi lights.
+
+02:45:22.320 --> 02:45:27.380
+If you have like that with an embedded controller, if you run that with Lisp, you're probably
+
+02:45:27.380 --> 02:45:33.720
+going to get a REPL for free that is going to allow you to remotely control your lights.
+
+02:45:33.720 --> 02:45:42.280
+You know, they have MicroPython for that, if you're into Python at all.
+
+02:45:42.280 --> 02:45:48.500
+That was a physicist, I don't know if he was German, but a physicist who implemented that
+
+02:45:48.500 --> 02:45:52.840
+to do controller hardware, and it's pretty good.
+
+02:45:52.840 --> 02:45:59.320
+He's moved a lot of, I think they actually got money behind it, and then started moving
+
+02:45:59.320 --> 02:46:01.680
+all the libraries into that too.
+
+02:46:01.680 --> 02:46:02.680
+So that runs pretty well.
+
+02:46:02.680 --> 02:46:08.340
+And you got stuff like CPython too, but I think part of the thing that makes Python
+
+02:46:08.340 --> 02:46:14.120
+appealing to people is you got all these libraries that people can use to build their apps with,
+
+02:46:14.120 --> 02:46:18.360
+and if you're running MicroPython or CPython, do you have access to those?
+
+02:46:18.360 --> 02:46:19.360
+Right.
+
+02:46:19.360 --> 02:46:24.120
+Well, that's what I'm saying, they like have been moving on that to get a lot more of the
+
+02:46:24.120 --> 02:46:31.200
+libraries available, because at first, that's right, that was part of what they were lacking.
+
+02:46:31.200 --> 02:46:36.720
+But just, you know, being able to put your language at the hardware level without a separate
+
+02:46:36.720 --> 02:46:41.760
+operating system is kind of an interesting concept too.
+
+02:46:41.760 --> 02:46:47.280
+And at that time with the Lisp machines, they were making the CPUs in line with, you had
+
+02:46:47.280 --> 02:46:53.800
+somebody making CPUs specifically for the Lisp machines, and ever since then, we've
+
+02:46:53.800 --> 02:46:59.960
+always been making CPUs to specifically target C, and I wonder how much that kind of like
+
+02:46:59.960 --> 02:47:07.800
+the philosophy and artifacts that you design, I wonder if like CPUs would look different
+
+02:47:07.800 --> 02:47:13.880
+and stuff like that, because we'd be optimizing them for Lambda calculus or something, and
+
+02:47:13.880 --> 02:47:17.760
+Reples, and if that would result in anything different.
+
+02:47:17.760 --> 02:47:25.120
+Well, I always ask my friend in London who knows everything, or he knows something about
+
+02:47:25.120 --> 02:47:38.720
+everything, why I remember the fastest computer I ever used was a DEC Alpha in the 80s, and
+
+02:47:38.720 --> 02:47:45.720
+it was, or maybe the beginning of the 90s, so it was a 64-bit machine at the time, and
+
+02:47:45.720 --> 02:47:52.760
+it used SCSI disks, and I would, you know, compilation took a while of programs, but
+
+02:47:52.760 --> 02:47:57.640
+I would go to compile, and I would just see these messages fly by me, and it would be
+
+02:47:57.640 --> 02:48:04.400
+like Go is today, right, be done in an instant, and like, how is that possible, I go over
+
+02:48:04.400 --> 02:48:11.520
+to this other machine, and they were emulating, I thought it had 128-bit data paths, but we
+
+02:48:11.520 --> 02:48:17.080
+looked it up, it was 64-bit, but they did have 128-bit words.
+
+02:48:17.080 --> 02:48:22.480
+You're talking about like boot up speed, and like how fast when you press a letter G on
+
+02:48:22.480 --> 02:48:26.680
+a keyboard, how fast it appears on your screen, and stuff like that, right?
+
+02:48:26.680 --> 02:48:32.840
+No, compilation of a complex application, how long that would take, and how long I would
+
+02:48:32.840 --> 02:48:38.560
+have to wait, and it was near instantaneous in many cases, and I had never experienced
+
+02:48:38.560 --> 02:48:39.600
+that before.
+
+02:48:39.600 --> 02:48:48.680
+So their disks were super fast, the throughput on the data buses was super fast, and I mean,
+
+02:48:48.680 --> 02:48:56.120
+it just worked like if you wanted a fast computer, it felt right, and I've not, you know, despite
+
+02:48:56.120 --> 02:49:02.700
+all the hardware I've had access to, I haven't had that same experience on any other machine
+
+02:49:02.700 --> 02:49:03.700
+to do.
+
+02:49:03.700 --> 02:49:11.240
+I know the Zig programming language has recently gotten an incremental compiler for it.
+
+02:49:11.240 --> 02:49:12.240
+Nice.
+
+02:49:12.240 --> 02:49:13.240
+So it would.
+
+02:49:13.240 --> 02:49:15.640
+Yeah, they're doing good work, they're doing good.
+
+02:49:15.640 --> 02:49:17.640
+Have you seen Vlang too?
+
+02:49:17.640 --> 02:49:19.760
+That's sort of interesting.
+
+02:49:19.760 --> 02:49:24.160
+I've seen that a little bit, but I haven't looked too much into it.
+
+02:49:24.160 --> 02:49:33.720
+There's this one Russian guy, and he's building his own Go-like replacement for C, because
+
+02:49:33.720 --> 02:49:40.000
+he likes Go a lot, but he wants to solve some other problems that he didn't like in Go,
+
+02:49:40.000 --> 02:49:43.280
+and the things he says about it are incredible.
+
+02:49:43.280 --> 02:49:47.640
+It doesn't, well, it didn't have garbage collection at first, right, because he wants to do all
+
+02:49:47.640 --> 02:49:54.760
+those machine-level things, but they seem to be able to build things that they promote
+
+02:49:54.760 --> 02:49:59.160
+as doing a lot, like an entire web framework they have already.
+
+02:49:59.160 --> 02:50:06.760
+They have their own graphics system and, you know, should be able to do very fast compositing.
+
+02:50:06.760 --> 02:50:13.040
+Who knows, you know, and so a lot of people say that he's over-promising, but he keeps
+
+02:50:13.040 --> 02:50:21.080
+delivering these snippets about, well, V, originally he had to translate V to C to get it to compile.
+
+02:50:21.080 --> 02:50:29.800
+Now it's self-hosting, and he can compile the whole language in 1.8 seconds from start,
+
+02:50:29.800 --> 02:50:39.120
+right, things like that, and so he's bootstrapping these super-efficient things to get to a very
+
+02:50:39.120 --> 02:50:45.680
+Rust-like systems programming language, but potentially cleaner.
+
+02:50:45.680 --> 02:50:51.640
+But it doesn't have, you know, people behind it like Rust, and you don't know if what he's
+
+02:50:51.640 --> 02:50:56.640
+saying is actually true, but if it is, you know, it might be like Zig and be something
+
+02:50:56.640 --> 02:50:58.640
+really interesting.
+
+02:50:58.640 --> 02:51:04.560
+Zig did cached compilations, so if you compiled something and then you changed a little bit
+
+02:51:04.560 --> 02:51:07.800
+and you compile it again, you're not going to compile very much.
+
+02:51:07.800 --> 02:51:11.680
+Right, so it'll be super-fast that way too.
+
+02:51:11.680 --> 02:51:20.000
+Yeah, I mean, memoization, that's caching if you can do it right, I'll save your ass
+
+02:51:20.000 --> 02:51:22.960
+every time, right, that's sort of.
+
+02:51:22.960 --> 02:51:27.240
+Then they have a self-hosted compiler, so I think that's one that will do the incremental
+
+02:51:27.240 --> 02:51:34.680
+compilations, so like that one will just be much faster and give you more debug stuff.
+
+02:51:34.680 --> 02:51:38.720
+But it is interesting, it's like, yeah, start with the REPL, right?
+
+02:51:38.720 --> 02:51:41.280
+Can you do a REPL in your language or not?
+
+02:51:41.280 --> 02:51:46.360
+Can you give me an interactive environment, even if everything has to be compiled?
+
+02:51:46.360 --> 02:51:50.280
+Like Julia, I guess, is going for some of this, right?
+
+02:51:50.280 --> 02:51:56.040
+They're taking some from LIST, they're taking all these efficient scientific libraries,
+
+02:51:56.040 --> 02:52:02.600
+and they're trying to meld them into a functional environment that gives you the most efficient
+
+02:52:02.600 --> 02:52:06.000
+code for any line that you write, right?
+
+02:52:06.000 --> 02:52:15.440
+Because it compiles it based on the dynamic types or something that it experiences, so
+
+02:52:15.440 --> 02:52:17.600
+it's very interesting.
+
+02:52:17.600 --> 02:52:19.920
+Have you seen the JANET Lisp language?
+
+02:52:19.920 --> 02:52:25.920
+It's kind of like V, where it's a very small language that has a web framework for it as
+
+02:52:25.920 --> 02:52:26.920
+well.
+
+02:52:26.920 --> 02:52:29.640
+No, I haven't seen that.
+
+02:52:29.640 --> 02:52:31.160
+I got a link on it right there.
+
+02:52:31.160 --> 02:52:34.840
+Yeah, I see it here, JANET Lisp, not too hard to find.
+
+02:52:34.840 --> 02:52:40.440
+I like their logo, 1950s JANET.
+
+02:52:40.440 --> 02:52:45.600
+Functional and imperative programming language runs on Windows, Linux, Mac OS, and Steam.
+
+02:52:45.600 --> 02:52:47.920
+Entire language is less than one megabyte.
+
+02:52:47.920 --> 02:52:58.000
+This sounds like REBOL, called Sasslerath, it did a lot of FORTH, and then he wrote REBOL,
+
+02:52:58.000 --> 02:53:02.560
+which has now evolved into REDLANG.
+
+02:53:02.560 --> 02:53:08.800
+It doesn't seem like a great language, but it's got that FORTH efficiency, and it's super
+
+02:53:08.800 --> 02:53:15.040
+small with its super small graphics, but it's not that easy to write, I think.
+
+02:53:15.040 --> 02:53:16.040
+This is cool.
+
+02:53:16.040 --> 02:53:17.660
+This sounds really interesting.
+
+02:53:17.660 --> 02:53:22.500
+So who's doing this, JANET?
+
+02:53:22.500 --> 02:53:27.360
+You know where it comes from?
+
+02:53:27.360 --> 02:53:28.360
+What source?
+
+02:53:28.360 --> 02:53:30.760
+They don't have about.
+
+02:53:30.760 --> 02:53:32.560
+Tell us about JANET.
+
+02:53:32.560 --> 02:53:37.240
+Oh, Calvin Rose and contributors.
+
+02:53:37.240 --> 02:53:41.920
+So again, we have one guy and contributor.
+
+02:53:41.920 --> 02:53:43.960
+That's well, you know, that's modern.
+
+02:53:43.960 --> 02:53:45.080
+That's how it is.
+
+02:53:45.080 --> 02:53:51.160
+You know, we talk about repeating the cycles of and how old problems are going to manifest
+
+02:53:51.160 --> 02:53:57.040
+with new technologies, maybe that's the problem that we're doing is that now everyone will
+
+02:53:57.040 --> 02:54:02.120
+have their own language and their own system and has become so satisfying and easy to do
+
+02:54:02.120 --> 02:54:08.240
+that that every single person will write their own programming language, their own architecture,
+
+02:54:08.240 --> 02:54:11.820
+and everyone will become it's like a it's like a monkey's paw or the genie granting
+
+02:54:11.820 --> 02:54:13.400
+you a curse.
+
+02:54:13.400 --> 02:54:18.120
+Everyone will become perfectly competent at this stuff, but not be able to communicate
+
+02:54:18.120 --> 02:54:20.920
+with each other because everyone's has their personal language.
+
+02:54:20.920 --> 02:54:23.960
+It's like the new Tower of Babel.
+
+02:54:23.960 --> 02:54:29.380
+You know, that's the claim that like my my guy in London makes about Lisp, that it's
+
+02:54:29.380 --> 02:54:35.040
+so efficient in making DSLs that nobody can communicate with each other.
+
+02:54:35.040 --> 02:54:43.720
+And I've heard that said about groups working in Lisp together, but I've never seen it.
+
+02:54:43.720 --> 02:54:52.560
+And it doesn't make a lot of sense to me because if you build your DSL for the domain, well,
+
+02:54:52.560 --> 02:54:58.920
+then it's like if people have any concept of the domain, it's going to be quite understandable.
+
+02:54:58.920 --> 02:55:04.720
+And because it's representative, you know, they're not going to struggle with it.
+
+02:55:04.720 --> 02:55:10.680
+It's only if you like, you know, make up terms that don't relate to anything and use that
+
+02:55:10.680 --> 02:55:11.680
+all over.
+
+02:55:11.680 --> 02:55:16.100
+Or if you take the scientists and they use their single character variable names, that's
+
+02:55:16.100 --> 02:55:21.440
+going to be a lot less understandable than something tailored for the domain that you're
+
+02:55:21.440 --> 02:55:22.440
+working in.
+
+02:55:22.440 --> 02:55:23.440
+Right?
+
+02:55:23.440 --> 02:55:24.440
+Good point.
+
+02:55:24.440 --> 02:55:25.440
+Yeah.
+
+02:55:25.440 --> 02:55:28.200
+I wonder how much of it has to do with going back and forth.
+
+02:55:28.200 --> 02:55:32.920
+You know, like if you can't spend all of your time or dedicate a long enough time, if you
+
+02:55:32.920 --> 02:55:38.760
+just go in and look at whatever this DSL is, switch back to idiomatic stuff.
+
+02:55:38.760 --> 02:55:44.520
+It's like, oh, you know, my brain is, you have to context switch all the time, maybe.
+
+02:55:44.520 --> 02:55:54.200
+One of the RACQ talk that was like the best talk for free software, and one of the observations
+
+02:55:54.200 --> 02:55:59.640
+they made was that most of everything was made by one person.
+
+02:55:59.640 --> 02:56:05.440
+And even if you look at a lot of the projects that have more than two people, you have one
+
+02:56:05.440 --> 02:56:07.960
+person and then a maintainer takes over.
+
+02:56:07.960 --> 02:56:10.760
+So it's still really one person working on it.
+
+02:56:10.760 --> 02:56:19.520
+It's like, that's going to be like 95% of everything out there, and everybody chooses
+
+02:56:19.520 --> 02:56:22.760
+a language that's not for that purpose.
+
+02:56:22.760 --> 02:56:25.460
+This was kind of the law of what they were.
+
+02:56:25.460 --> 02:56:28.700
+So if you're going to be doing that, you want to, if you're going to be working on a project
+
+02:56:28.700 --> 02:56:33.640
+over a long period of time, you want a language that has more features that you can master
+
+02:56:33.640 --> 02:56:39.200
+over a long period of time rather than how fast you can write hello world that can keep
+
+02:56:39.200 --> 02:56:44.760
+you interested in over a long period of, like Emacs for instance, Emacs can keep you interested
+
+02:56:44.760 --> 02:56:50.280
+in it for decades.
+
+02:56:50.280 --> 02:56:53.000
+And I think it's a cognitive mismatch.
+
+02:56:53.000 --> 02:56:54.000
+Go ahead.
+
+02:56:54.000 --> 02:57:02.440
+It's good to know that when given the freedom, like in software being such a new technology,
+
+02:57:02.440 --> 02:57:13.400
+to do whatever you want that humans will still recreate the Tower of Babel every single time.
+
+02:57:13.400 --> 02:57:20.840
+We'll never be able to agree on what's a good or right looking language.
+
+02:57:20.840 --> 02:57:25.280
+But I think the reality is that there are better ones.
+
+02:57:25.280 --> 02:57:35.320
+I think languages, written languages without accent marks are fundamentally better than
+
+02:57:35.320 --> 02:57:38.120
+those with accent marks.
+
+02:57:38.120 --> 02:57:44.200
+And so if you're stuck on one with there, you're probably going to get left behind even
+
+02:57:44.200 --> 02:57:47.120
+though you can produce the same meanings.
+
+02:57:47.120 --> 02:57:58.480
+And I think languages without Lisp type macros are never going to be able to solve the problems
+
+02:57:58.480 --> 02:58:07.640
+even though they're computationally equivalent that Lisp people attack because they just
+
+02:58:07.640 --> 02:58:10.840
+can't wrap the complexity in their mind enough.
+
+02:58:10.840 --> 02:58:19.680
+You'd have to have somebody who's 100 times better with a weaker language to do what the
+
+02:58:19.680 --> 02:58:29.600
+essentially average Lisp guy leveraging the macro capability could do.
+
+02:58:29.600 --> 02:58:36.840
+Like in hyperbole, one of the things that we solve that you can't do, I think very well
+
+02:58:36.840 --> 02:58:38.880
+in other languages.
+
+02:58:38.880 --> 02:58:47.880
+So we have our implicit button definitions look like regular defunds, but they have two
+
+02:58:47.880 --> 02:58:50.080
+parts in them.
+
+02:58:50.080 --> 02:58:54.640
+One which is the pattern match, am I in the right context?
+
+02:58:54.640 --> 02:58:59.600
+And then the one that calls the action.
+
+02:58:59.600 --> 02:59:07.400
+But you need, so to make it look the same, like there's only one path that you're running
+
+02:59:07.400 --> 02:59:13.480
+through this code, even though you have to do the pattern matching when you're called
+
+02:59:13.480 --> 02:59:18.040
+one time and you have to do the action invocation when you called another.
+
+02:59:18.040 --> 02:59:29.440
+There's a macro that we created called the hacked, H-A-C-T, and the macro actually takes
+
+02:59:29.440 --> 02:59:40.240
+a, there's a function that it uses that's implicit, that is set to different values
+
+02:59:40.240 --> 02:59:43.840
+at different states in the program.
+
+02:59:43.840 --> 02:59:50.800
+So when you're just looking for the pattern matching, that's all it does.
+
+02:59:50.800 --> 02:59:53.360
+And it sort of drops through the other behavior.
+
+02:59:53.360 --> 03:00:01.600
+And then when it comes back around and you're not doing pattern matching anymore, it executes
+
+03:00:01.600 --> 03:00:02.800
+the action.
+
+03:00:02.800 --> 03:00:09.320
+But looking at the code, you only see that one defund straight kind of path through it.
+
+03:00:09.320 --> 03:00:14.680
+So the engine handles all that, and I don't think you could write anything quite like
+
+03:00:14.680 --> 03:00:19.280
+that without the macro.
+
+03:00:19.280 --> 03:00:26.560
+It's magical, it's probably the closest thing to magic that we have, I guess.
+
+03:00:26.560 --> 03:00:35.360
+Well, you guys have filled up my brain, so I'm going to get some sleep, too.
+
+03:00:35.360 --> 03:00:36.360
+You deserve it.
+
+03:00:36.360 --> 03:00:42.720
+I'm a day ahead of you in that respect, so I'm amazed you've made it this long, to be
+
+03:00:42.720 --> 03:00:43.720
+honest.
+
+03:00:43.720 --> 03:00:51.040
+I don't know if I, did I, was there any, like, is there anything that you guys had, that
+
+03:00:51.040 --> 03:00:53.840
+I had neglected or anything that I should focus on?
+
+03:00:53.840 --> 03:00:57.320
+Well, I don't know, but I'm going to sign off.
+
+03:00:57.320 --> 03:01:04.500
+It's been a real pleasure talking to you guys, and John, I'll get in touch about, you know,
+
+03:01:04.500 --> 03:01:10.200
+give you a chance to take a look at Hyperbole a little bit, and then we could talk about,
+
+03:01:10.200 --> 03:01:15.160
+you know, how you could feedback some stuff, or if you want to interact with, meet some
+
+03:01:15.160 --> 03:01:19.040
+of the other guys in the team sometime, and just talk.
+
+03:01:19.040 --> 03:01:24.160
+Yeah, any of that, yeah, and you've got, I think, I mean, I'll email you if I, or you
+
+03:01:24.160 --> 03:01:26.360
+email me, email me either way.
+
+03:01:26.360 --> 03:01:33.280
+Okay, and on PlasmaStrike, if you're interested, it's open, too, I mean, we need smart people
+
+03:01:33.280 --> 03:01:42.080
+like yourself with lots of ideas and understanding of where things come from to just help out
+
+03:01:42.080 --> 03:01:43.080
+on that.
+
+03:01:43.080 --> 03:01:48.600
+If you have any cycles and you want to get involved, let me know.
+
+03:01:48.600 --> 03:01:56.840
+My email address is all over the Hyperbole code, so easy to find, just rsw.cadu.org will
+
+03:01:56.840 --> 03:01:57.840
+work as well.
+
+03:01:57.840 --> 03:02:03.640
+Yeah, if, yeah, and either of you guys feel free to, if you have any interesting ideas
+
+03:02:03.640 --> 03:02:10.840
+or anything, reach out and email me, I'm on the, I'm on the chatroom, thanks so much,
+
+03:02:10.840 --> 03:02:16.280
+I can't wait till they get this session, and they're like, wait, it's 180,000, it's the
+
+03:02:16.280 --> 03:02:27.600
+easiest thing I've got out of control, I guess, but, you know, they'll want to keep this because
+
+03:02:27.600 --> 03:02:31.800
+it's a great wide-ranging conversation, posterity.
+
+03:02:31.800 --> 03:02:36.520
+I have a feeling they won't run all of it through voice recognition.
+
+03:02:36.520 --> 03:02:39.280
+It definitely belongs with a 10-minute talk.
+
+03:02:39.280 --> 03:02:47.160
+Well, I'll tell you this, and I, not to prolong things, but this is, this is very representative
+
+03:02:47.160 --> 03:02:51.680
+of the amount of time that I, the proportional amount of effort and time that I spent preparing
+
+03:02:51.680 --> 03:02:57.000
+for this 10-minute talk, because for, I'll tell you something that, first, is when you
+
+03:02:57.000 --> 03:03:00.640
+realize that you have a 10-minute talk and you say, how am I going to get 10 minutes?
+
+03:03:00.640 --> 03:03:05.600
+Then you start preparing, and you start, and somehow you wind up with 100 minutes, and
+
+03:03:05.600 --> 03:03:11.640
+then it takes you 10 times as long to cut out, to choose which 90 minutes to cut out.
+
+03:03:11.640 --> 03:03:16.360
+So this is appropriate, it's appropriate for me, this is like my bookend, that I can talk
+
+03:03:16.360 --> 03:03:21.400
+for three hours about that, or at least starting with that time.
+
+03:03:21.400 --> 03:03:26.440
+You should give a talk about that, sort of like how Michelangelo went from the piece
+
+03:03:26.440 --> 03:03:32.000
+of marble to the David, and it's like, you know, I had this infinite amount of material
+
+03:03:32.000 --> 03:03:37.080
+coalescing it to 10 minutes is a 100-hour effort, because it's really true.
+
+03:03:37.080 --> 03:03:41.240
+I like it, because that's, that's a lot of what these tools do, is they allow you to
+
+03:03:41.240 --> 03:03:43.160
+capture your stuff.
+
+03:03:43.160 --> 03:03:47.200
+They allow you to organize it, and they allow you to formalize it, and that organizing part
+
+03:03:47.200 --> 03:03:52.840
+is what, is what gave me, well, isn't, isn't that what they say, that a professional programmer
+
+03:03:52.840 --> 03:03:59.880
+is somebody who will spend an hour automate, spend 100 hours automating something that
+
+03:03:59.880 --> 03:04:02.920
+only takes an hour, one time.
+
+03:04:02.920 --> 03:04:07.280
+I think that's what, I think maybe some professional programmers may say that.
+
+03:04:07.280 --> 03:04:11.160
+I don't know if their bosses would agree.
+
+03:04:11.160 --> 03:04:13.480
+There's some truth to it though, right?
+
+03:04:13.480 --> 03:04:18.520
+So have a great night guys, appreciate it.
+
+03:04:18.520 --> 03:04:22.120
+And yeah, and PlasmaStrike, I don't know if you, if you do end up posting anything of
+
+03:04:22.120 --> 03:04:27.700
+your, of your setup or anything, if you feel like it, just hit me up if you're interested
+
+03:04:27.700 --> 03:04:31.600
+in any of my shit, looking at it, because if you do, I'd, I'd be interested.
+
+03:04:31.600 --> 03:04:32.600
+That's all.
+
+03:04:32.600 --> 03:04:33.600
+No pressure.
+
+03:04:33.600 --> 03:04:34.600
+Yep.
+
+03:04:34.600 --> 03:04:35.600
+All right.
+
+03:04:35.600 --> 03:04:36.600
+Take it easy.
+
+03:04:36.600 --> 03:04:37.600
+Great, great meeting you.
+
+03:04:37.600 --> 03:04:38.600
+Great talking to you.
+
+03:04:38.600 --> 03:04:39.600
+Yep.
+
+03:04:39.600 --> 03:04:40.600
+You too.
+
+03:04:40.600 --> 03:04:41.600
+See ya.
+
+03:04:41.600 --> 03:04:42.600
+See ya.
+
+03:04:42.600 --> 03:04:58.280
+You're currently the only person in...
+
+03:04:58.280 --> 03:05:00.340
+you
+
+03:05:28.280 --> 03:05:30.340
+you
+
+03:05:58.280 --> 03:06:00.340
+you
+
diff --git a/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt b/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt
new file mode 100644
index 00000000..c50aa2bd
--- /dev/null
+++ b/2022/captions/emacsconf-2022-fanfare--fanfare-for-the-common-emacs-user--john-cummings--main.vtt
@@ -0,0 +1,787 @@
+WEBVTT captioned by John Cummings
+
+00:00:00.000 --> 00:00:02.203
+Hello, my name is John Cummings, and I'm here today
+
+00:00:02.206 --> 00:00:04.849
+to play a Fanfare for the Common Emacs User.
+
+00:00:04.852 --> 00:00:07.263
+By "common", I mean the types of Emacs usage
+
+00:00:07.266 --> 00:00:09.685
+and comfort that are simpler, more mundane,
+
+00:00:09.689 --> 00:00:11.074
+and yes, even imperfect,
+
+00:00:11.075 --> 00:00:13.035
+that some may identify with more than others,
+
+00:00:13.037 --> 00:00:14.648
+or more at certain times.
+
+00:00:14.651 --> 00:00:16.911
+It's hard to use Emacs and not be aware of
+
+00:00:16.914 --> 00:00:18.700
+the impressive and interesting accomplishments
+
+00:00:18.703 --> 00:00:20.754
+of its community. And here at emacsconf
+
+00:00:20.756 --> 00:00:22.424
+we also get pumped up about those things,
+
+00:00:22.426 --> 00:00:25.563
+amplified by the energy of the other attendees.
+
+00:00:25.567 --> 00:00:27.727
+But this energy fades as we return focus
+
+00:00:27.730 --> 00:00:30.567
+to our day-to-day work. And in these circumstances,
+
+00:00:30.571 --> 00:00:32.990
+we may unfairly judge our own Emacs usage
+
+00:00:32.993 --> 00:00:34.995
+against the community highlights.
+
+00:00:34.997 --> 00:00:37.708
+So I want to identify and celebrate the ways
+
+00:00:37.712 --> 00:00:39.930
+that we common Emacs users use it,
+
+00:00:39.932 --> 00:00:42.285
+the reasons why it's a good fit for those ways,
+
+00:00:42.290 --> 00:00:45.427
+and some ways we could take advantage of that.
+
+00:00:45.430 --> 00:00:48.524
+What is Emacs to us common users? Well, we're consumers.
+
+00:00:48.528 --> 00:00:51.489
+We use whatever was available - whatever our OS gave us,
+
+00:00:51.493 --> 00:00:53.987
+or whatever we found when we searched the web.
+
+00:00:53.990 --> 00:00:55.709
+We're not even necessarily aware
+
+00:00:55.711 --> 00:00:58.088
+of what the latest version is, or what changes it has.
+
+00:00:58.091 --> 00:01:00.135
+We may not ever think about upgrading.
+
+00:01:00.138 --> 00:01:02.740
+We have what we have, and we use what we have.
+
+00:01:02.742 --> 00:01:05.145
+But I think, with this simple act, many of us
+
+00:01:05.149 --> 00:01:07.993
+achieve a very significant Emacs milestone:
+
+00:01:07.997 --> 00:01:10.275
+we've committed to having it in our toolkit
+
+00:01:10.278 --> 00:01:12.622
+and our skillset. We'll probably install it
+
+00:01:12.625 --> 00:01:14.802
+on every system that we can, eventually.
+
+00:01:14.804 --> 00:01:16.827
+We know it has a use for us today,
+
+00:01:16.827 --> 00:01:18.120
+and that it will solve some problems
+
+00:01:18.120 --> 00:01:19.588
+that we don't even know about yet.
+
+00:01:19.588 --> 00:01:22.215
+It will not just be one tool; it will be many.
+
+00:01:22.215 --> 00:01:24.368
+And we know that it will be more than just useful;
+
+00:01:24.368 --> 00:01:27.345
+it will also be challenging, puzzling, and frustrating.
+
+00:01:27.345 --> 00:01:28.630
+But we still keep it
+
+00:01:28.630 --> 00:01:29.873
+as a permanent part of our toolkit,
+
+00:01:29.873 --> 00:01:31.800
+and we should be proud of that.
+
+00:01:31.800 --> 00:01:34.136
+And regardless of what exactly we've installed,
+
+00:01:34.136 --> 00:01:35.337
+it was a good choice.
+
+00:01:35.337 --> 00:01:37.556
+It will almost certainly do what we need it to do.
+
+00:01:37.556 --> 00:01:39.766
+Old versions are not inert dead-ends;
+
+00:01:39.766 --> 00:01:41.134
+they're still functional tools.
+
+00:01:41.134 --> 00:01:43.979
+And that's a key aspect of Emacs - it's a tool
+
+00:01:43.979 --> 00:01:46.398
+to get our work done. That sounds obvious,
+
+00:01:46.398 --> 00:01:48.483
+but it's easy to get distracted by the great things
+
+00:01:48.483 --> 00:01:49.985
+that it can accomplish, and think
+
+00:01:49.985 --> 00:01:52.571
+that it requires the same accomplishments from us.
+
+00:01:52.571 --> 00:01:54.656
+But it requires no advanced state of mind,
+
+00:01:54.656 --> 00:01:56.867
+no level of expertise to start using it,
+
+00:01:56.867 --> 00:01:58.043
+or use it correctly.
+
+00:01:58.043 --> 00:02:00.754
+It just requires that we have it, and use it.
+
+00:02:00.754 --> 00:02:03.665
+And with a little effort, we can get results early on,
+
+00:02:03.665 --> 00:02:06.084
+and those results are not just preparations
+
+00:02:06.084 --> 00:02:07.586
+for better things to come later;
+
+00:02:07.586 --> 00:02:08.712
+they have value for us today,
+
+00:02:08.712 --> 00:02:12.049
+and we're already using it right.
+
+00:02:12.049 --> 00:02:14.551
+And when we do need to tweak whatever we installed,
+
+00:02:14.551 --> 00:02:16.803
+we might again be consumers, finding some snippets
+
+00:02:16.803 --> 00:02:19.581
+out on the web, pasting them in, and moving on.
+
+00:02:19.581 --> 00:02:21.933
+We don't necessarily understand what we did,
+
+00:02:21.933 --> 00:02:24.102
+but we got some value out of it. Over time,
+
+00:02:24.102 --> 00:02:26.114
+we may participate more, take it day by day,
+
+00:02:26.114 --> 00:02:28.357
+and one day we may find that our config
+
+00:02:28.357 --> 00:02:30.902
+has become a disorganized pile.
+
+00:02:30.902 --> 00:02:32.027
+Maybe it's mixed haphazardly
+
+00:02:32.027 --> 00:02:34.029
+with some output from the "customize" feature,
+
+00:02:34.029 --> 00:02:35.697
+and eventually we start to feel
+
+00:02:35.697 --> 00:02:37.991
+like it's a shameful mess. It's hard to manage;
+
+00:02:37.991 --> 00:02:40.960
+we may think of it as append-only or read-only.
+
+00:02:40.960 --> 00:02:42.829
+We can't deny there are problems here,
+
+00:02:42.829 --> 00:02:45.582
+but it happened for a good reason. It was quick,
+
+00:02:45.582 --> 00:02:47.250
+easy, and effective for us
+
+00:02:47.250 --> 00:02:50.062
+to enhance our experience this way, and then move on.
+
+00:02:50.062 --> 00:02:52.172
+We were using Emacs as it was designed here.
+
+00:02:52.172 --> 00:02:54.775
+It just wasn't sustainable indefinitely.
+
+00:02:54.775 --> 00:02:56.627
+We may continue doing things this way
+
+00:02:56.627 --> 00:02:59.596
+even though we realize it's not a good idea.
+
+00:02:59.596 --> 00:03:00.472
+But I think there are some ways
+
+00:03:00.472 --> 00:03:01.682
+to mitigate the downsides,
+
+00:03:01.682 --> 00:03:03.150
+that let us embrace our tendencies,
+
+00:03:03.150 --> 00:03:05.444
+and continue to benefit from them.
+
+00:03:05.444 --> 00:03:06.971
+If we allow and encourage ourselves
+
+00:03:06.971 --> 00:03:10.065
+to capture our thoughts and circumstances
+
+00:03:10.065 --> 00:03:11.700
+along with the work that we do on our config,
+
+00:03:11.700 --> 00:03:14.386
+and do so without judgment, or the responsibility
+
+00:03:14.386 --> 00:03:17.047
+to "do it right", we give ourselves the context
+
+00:03:17.047 --> 00:03:19.549
+to understand and manage it later.
+
+00:03:19.549 --> 00:03:21.618
+This should be done however works for us,
+
+00:03:21.618 --> 00:03:23.286
+whether it's rambling inline comments,
+
+00:03:23.286 --> 00:03:25.247
+keeping a separate journal or notes,
+
+00:03:25.247 --> 00:03:27.975
+or even a more advanced literate programming technique,
+
+00:03:27.975 --> 00:03:30.485
+if we want to make an investment like that.
+
+00:03:30.485 --> 00:03:32.629
+Or putting our config into source control,
+
+00:03:32.629 --> 00:03:34.214
+even if it's nothing more than a simple,
+
+00:03:34.214 --> 00:03:37.050
+daily record of changes along with our contextual notes,
+
+00:03:37.050 --> 00:03:41.221
+will make things a lot easier for our future selves.
+
+00:03:41.221 --> 00:03:43.974
+But regardless of how well, or sloppy, we manage it,
+
+00:03:43.974 --> 00:03:46.184
+we should also realize that our messy config
+
+00:03:46.184 --> 00:03:48.129
+is a personal artifact with inherent value,
+
+00:03:48.129 --> 00:03:51.565
+even if it's amusement value, or sentimental value.
+
+00:03:51.565 --> 00:03:54.401
+Emacs is not only a tool to get our work done,
+
+00:03:54.401 --> 00:03:56.978
+it can also be a very personalized experience.
+
+00:03:56.978 --> 00:03:59.366
+And if so, then our Emacs config
+
+00:03:59.366 --> 00:04:02.110
+is our experience in written form.
+
+00:04:02.110 --> 00:04:04.303
+You can see it as a log of your journey through Emacs,
+
+00:04:04.303 --> 00:04:06.663
+and the mark that you made on it along the way,
+
+00:04:06.663 --> 00:04:08.506
+mistakes and all.
+
+00:04:08.506 --> 00:04:10.676
+We may see our config as a record of failure,
+
+00:04:10.676 --> 00:04:12.886
+of things that we did wrong, the things that we repeated,
+
+00:04:12.886 --> 00:04:15.672
+or never finished. But it's important to realize
+
+00:04:15.672 --> 00:04:18.592
+that a record of failure is a record of persistence.
+
+00:04:18.592 --> 00:04:20.761
+In that sense, it's kind of like our genome:
+
+00:04:20.761 --> 00:04:23.197
+a set of unique, disorganized,
+
+00:04:23.197 --> 00:04:26.308
+somewhat accidental properties, that, on the whole,
+
+00:04:26.308 --> 00:04:29.394
+makes us fit to survive in our Emacs usage.
+
+00:04:29.394 --> 00:04:31.021
+It's also interesting to think of it
+
+00:04:31.021 --> 00:04:33.482
+as an archaeological record. Where we can sometimes
+
+00:04:33.482 --> 00:04:35.942
+get some insight into our "ancient times".
+
+00:04:35.942 --> 00:04:38.570
+Just being able to see what we were doing years ago
+
+00:04:38.570 --> 00:04:40.906
+is interesting -- to see how things changed,
+
+00:04:40.906 --> 00:04:43.158
+and hopefully grew over time. And sometimes
+
+00:04:43.158 --> 00:04:45.845
+we find some buried treasures that we forgot were there.
+
+00:04:45.845 --> 00:04:48.172
+And of course it's interesting to realize
+
+00:04:48.172 --> 00:04:50.874
+that when we start Emacs, this pile of config
+
+00:04:50.874 --> 00:04:52.959
+also executes in roughly the same order
+
+00:04:52.959 --> 00:04:56.438
+that we created it in. Our journey through Emacs
+
+00:04:56.438 --> 00:04:59.482
+happens again and again every time we start it up.
+
+00:04:59.482 --> 00:05:04.095
+And it's ready for us to keep working on it.
+
+00:05:04.095 --> 00:05:05.305
+And when it comes to packages,
+
+00:05:05.305 --> 00:05:09.050
+we may not make extensive use of them, if any at all.
+
+00:05:09.050 --> 00:05:10.602
+We probably have different reasons for this.
+
+00:05:10.602 --> 00:05:12.437
+We may feel like we need to reach
+
+00:05:12.437 --> 00:05:14.815
+some level of mastery before we start using them.
+
+00:05:14.815 --> 00:05:17.943
+We may not have the mental room to think about packages,
+
+00:05:17.943 --> 00:05:20.362
+or may not want to take on the administrative burden
+
+00:05:20.362 --> 00:05:22.989
+required to keep track of which packages we have,
+
+00:05:22.989 --> 00:05:25.834
+the dependencies and versions, and their compatibility.
+
+00:05:25.834 --> 00:05:27.694
+Some of us may just be uncomfortable
+
+00:05:27.694 --> 00:05:30.664
+letting new third-party code run in our environments.
+
+00:05:30.664 --> 00:05:31.832
+It could also just be the case
+
+00:05:31.832 --> 00:05:35.377
+that our needs haven't driven us to need a package yet.
+
+00:05:35.377 --> 00:05:36.871
+We're already doing what we need,
+
+00:05:36.871 --> 00:05:39.089
+and doing it efficiently enough.
+
+00:05:39.089 --> 00:05:40.215
+And here we find more alignment
+
+00:05:40.215 --> 00:05:42.592
+between Emacs the tool, and our common mindset:
+
+00:05:42.592 --> 00:05:44.977
+They work well when they stay needs-driven.
+
+00:05:44.977 --> 00:05:46.646
+We're not obligated to use
+
+00:05:46.646 --> 00:05:48.949
+as much of Emacs' functionality as we can,
+
+00:05:48.949 --> 00:05:51.159
+or every package that we're aware of
+
+00:05:51.159 --> 00:05:52.510
+if we don't have a need to.
+
+00:05:52.510 --> 00:05:54.971
+And in fact, that's a great way to stay overwhelmed.
+
+00:05:54.971 --> 00:05:57.700
+But if we stay aware of our needs, and then find
+
+00:05:57.700 --> 00:05:59.902
+that there is a package that might address them,
+
+00:05:59.902 --> 00:06:02.655
+then we can deal with it. And a need to explore,
+
+00:06:02.655 --> 00:06:05.823
+and a need to be curious, is a valid need.
+
+00:06:05.823 --> 00:06:09.327
+And if we do need extra confidence for that exploration,
+
+00:06:09.327 --> 00:06:10.912
+then the things we talked about before,
+
+00:06:10.912 --> 00:06:13.633
+like keeping good notes of our experiences and needs,
+
+00:06:13.633 --> 00:06:15.541
+or version controlling our config,
+
+00:06:15.541 --> 00:06:18.586
+will help us keep that connection to our needs,
+
+00:06:18.586 --> 00:06:20.922
+that gives us the freedom to experiment
+
+00:06:20.922 --> 00:06:23.008
+in the wide world of packages.
+
+00:06:23.008 --> 00:06:27.262
+And if we really do just need what's built in to Emacs,
+
+00:06:27.262 --> 00:06:29.514
+the vanilla out-of-the-box experience,
+
+00:06:29.514 --> 00:06:32.183
+then we can also be proud that we're making use
+
+00:06:32.183 --> 00:06:33.560
+of all the work that went into that experience,
+
+00:06:33.560 --> 00:06:35.021
+because a lot did.
+
+00:06:35.021 --> 00:06:37.256
+And when we report any problems that we find,
+
+00:06:37.256 --> 00:06:39.190
+we're also working to keep that experience
+
+00:06:39.190 --> 00:06:41.192
+smooth for future users.
+
+00:06:41.192 --> 00:06:43.987
+Of course, some of us may find this intimidating,
+
+00:06:43.987 --> 00:06:46.531
+and if so, feel free to reach out to me,
+
+00:06:46.531 --> 00:06:48.767
+and probably anyone in the community,
+
+00:06:48.767 --> 00:06:56.249
+that can help you navigate that process.
+
+00:06:56.249 --> 00:06:59.461
+So how do we use our Emacs installation?
+
+00:06:59.461 --> 00:07:01.838
+We often use it very simply: we get simple results
+
+00:07:01.838 --> 00:07:06.068
+in simple ways. Often we do things the same simple way
+
+00:07:06.068 --> 00:07:08.720
+for a very long time, and this is of course great,
+
+00:07:08.720 --> 00:07:10.513
+since we're getting done what we need to get done.
+
+00:07:10.513 --> 00:07:14.392
+There's no result or method too simple for Emacs.
+
+00:07:14.392 --> 00:07:16.853
+And we're not oblivious to the alternative.
+
+00:07:16.853 --> 00:07:19.356
+Many of us are at least aware that there are ways
+
+00:07:19.356 --> 00:07:20.649
+we could iterate on what we do,
+
+00:07:20.649 --> 00:07:22.734
+or some polish that we could apply,
+
+00:07:22.734 --> 00:07:24.569
+and we may even quite enjoy
+
+00:07:24.569 --> 00:07:27.113
+reading about more advanced Emacs possibilities,
+
+00:07:27.113 --> 00:07:28.215
+and thinking about how they could apply
+
+00:07:28.215 --> 00:07:30.951
+to our own workflow, but at the end of the day,
+
+00:07:30.951 --> 00:07:33.703
+we still keep our own usage the same, and basic.
+
+00:07:33.703 --> 00:07:36.998
+And this is another fundamental aspect of using Emacs.
+
+00:07:36.998 --> 00:07:38.959
+You can work simply and successfully,
+
+00:07:38.959 --> 00:07:40.502
+but you'll always be conscious of the possibility
+
+00:07:40.502 --> 00:07:43.213
+for far more complexity. And many of us
+
+00:07:43.213 --> 00:07:46.424
+do try to iterate on our ways, and sometimes succeed,
+
+00:07:46.424 --> 00:07:49.177
+but often we run into trouble and we stop or defer.
+
+00:07:49.177 --> 00:07:51.304
+A lot of times we're intimidated by the scope of things -
+
+00:07:51.304 --> 00:07:53.848
+we're not sure how to make measurable progress.
+
+00:07:53.848 --> 00:07:56.101
+We may find that the first ways we learned
+
+00:07:56.101 --> 00:07:59.312
+are so ingrained in us, that learning even a second way
+
+00:07:59.312 --> 00:08:01.147
+is many times harder.
+
+00:08:01.147 --> 00:08:03.191
+And sometimes we do make sudden progress
+
+00:08:03.191 --> 00:08:04.275
+after years of sameness,
+
+00:08:04.275 --> 00:08:06.260
+and wonder why we waited so long.
+
+00:08:06.260 --> 00:08:07.737
+And these are universal pains
+
+00:08:07.737 --> 00:08:11.324
+that everyone has to feel who wants to improve.
+
+00:08:11.324 --> 00:08:13.451
+But this is again where we can benefit
+
+00:08:13.451 --> 00:08:14.661
+from letting our needs drive us.
+
+00:08:14.661 --> 00:08:16.538
+Sometimes they'll tell us that it's OK
+
+00:08:16.538 --> 00:08:18.806
+keeping things the way they are, and sometimes
+
+00:08:18.806 --> 00:08:20.491
+they'll tell us that it's good to keep pushing,
+
+00:08:20.491 --> 00:08:21.767
+because there's a reason for it,
+
+00:08:21.767 --> 00:08:25.077
+and we'll be glad that we did.
+
+00:08:25.077 --> 00:08:27.507
+And what are the ways that we do learn,
+
+00:08:27.507 --> 00:08:30.635
+and grow, and create within Emacs? One constant
+
+00:08:30.635 --> 00:08:33.596
+is that we forget a lot. We learn something
+
+00:08:33.596 --> 00:08:35.682
+and then remember that we already learned
+
+00:08:35.682 --> 00:08:38.309
+and forgot it once before. Sometimes we just hope
+
+00:08:38.309 --> 00:08:39.769
+to learn more than we forget.
+
+00:08:39.769 --> 00:08:41.772
+And staying driven by our needs can also help here,
+
+00:08:41.772 --> 00:08:43.499
+because it's easier to learn something
+
+00:08:43.499 --> 00:08:46.317
+when we have a reason to, and an application for it.
+
+00:08:46.317 --> 00:08:49.071
+In Emacs, it can be tempting to do this backwards,
+
+00:08:49.071 --> 00:08:51.782
+and want to learn all there is about Emacs first,
+
+00:08:51.782 --> 00:08:53.992
+and then apply it. But again that's a surefire way
+
+00:08:53.992 --> 00:08:55.935
+to stay overwhelmed.
+
+00:08:55.935 --> 00:08:59.640
+And when we code and build things, we tend to create many small, quick things,
+
+00:08:59.640 --> 00:09:01.600
+but never really integrate them deeply
+
+00:09:01.600 --> 00:09:03.661
+into our environment or workflow.
+
+00:09:03.661 --> 00:09:05.462
+We leave things half-finished once we get bored,
+
+00:09:05.462 --> 00:09:07.088
+or find ourselves in over our head.
+
+00:09:07.088 --> 00:09:09.883
+And this is natural, because we're curious and creative,
+
+00:09:09.883 --> 00:09:12.677
+and Emacs makes it relatively easy, and actually fun,
+
+00:09:12.677 --> 00:09:14.845
+to experiment and get these quick results.
+
+00:09:14.845 --> 00:09:17.065
+But it's less clear how to see them through,
+
+00:09:17.065 --> 00:09:20.310
+and inherently less fun to do the follow-up gruntwork.
+
+00:09:20.310 --> 00:09:21.970
+But if we embrace our ways here,
+
+00:09:21.970 --> 00:09:23.897
+and structure our workflow to support them,
+
+00:09:23.897 --> 00:09:26.215
+we might find ourselves more satisfied.
+
+00:09:26.215 --> 00:09:28.926
+So let's give ourselves permission, and a logical place
+
+00:09:28.926 --> 00:09:31.571
+to put all our fun little quick experiments,
+
+00:09:31.571 --> 00:09:33.423
+without having to worry about integrating
+
+00:09:33.423 --> 00:09:35.700
+or polishing them, unless we find a need to later.
+
+00:09:35.700 --> 00:09:38.505
+Let's use source control wisely to give ourselves
+
+00:09:38.505 --> 00:09:41.447
+a place to experiment, and a place for stability.
+
+00:09:41.447 --> 00:09:42.968
+Let's stay needs-driven so that we know
+
+00:09:42.968 --> 00:09:46.186
+what we really do need to follow up on,
+
+00:09:46.186 --> 00:09:48.963
+and what's OK to drop. And let's remember
+
+00:09:48.963 --> 00:09:50.965
+that there is someone who will always appreciate
+
+00:09:50.965 --> 00:09:53.635
+any notes about our thought process we can take,
+
+00:09:53.635 --> 00:09:55.845
+no matter how rough or rambling they are:
+
+00:09:55.845 --> 00:09:58.788
+our future selves.
+
+00:09:58.788 --> 00:10:01.376
+And so I hope that some people can identify with
+
+00:10:01.376 --> 00:10:02.927
+at least some of what I've shared today.
+
+00:10:02.927 --> 00:10:05.021
+And I hope that we realize that,
+
+00:10:05.021 --> 00:10:06.964
+no matter how we see ourselves as Emacs users,
+
+00:10:06.964 --> 00:10:09.233
+and no matter what we see other people building,
+
+00:10:09.233 --> 00:10:11.569
+we're proud of the fact that we have built
+
+00:10:11.569 --> 00:10:15.865
+an experience that fits us. Thank you to everyone.
diff --git a/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt
new file mode 100644
index 00000000..7157036e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--answers.vtt
@@ -0,0 +1,791 @@
+WEBVTT
+
+00:00.000 --> 00:02.060
+you
+
+01:00.000 --> 01:02.000
+You
+
+01:09.080 --> 01:13.280
+Wait, so there's a little something though. How are we gonna get the audio?
+
+01:16.240 --> 01:18.240
+Give me just a second
+
+01:18.240 --> 01:30.520
+Ah, so can we just get a confirmation? Can you start playing the talk now Samir, please?
+
+01:43.280 --> 01:47.080
+So for everyone on the stream bear with us just a little bit we're trying to get it working right now
+
+01:47.080 --> 01:49.180
+I'm not getting any audio from you Samir
+
+01:53.880 --> 01:59.600
+Samir you might want to unmute yourself onto BBB. So if you could pause the video go to BBB and unmute yourself
+
+02:09.320 --> 02:14.080
+Okay, Samir, can you hear me now? Yeah, okay, so
+
+02:14.080 --> 02:17.640
+Oh, let me start. Where is it? Okay. There we go
+
+02:23.320 --> 02:29.400
+That sounds great, okay, we'll give you just a second to get squared away here and thanks everybody on the stream for bearing with us
+
+02:30.780 --> 02:34.600
+Okay, sure Samir. Can you now start playing your talk? Yeah
+
+02:34.600 --> 02:42.440
+I'm Samir Pradhan from the Linguistic Data Consortium at the University of Pennsylvania. Can you pause the talk for a second?
+
+02:44.760 --> 02:46.760
+What happened?
+
+02:48.760 --> 02:52.600
+Oh, you don't have audio. The thing was no audio is
+
+02:54.760 --> 02:56.760
+Oh
+
+02:56.760 --> 03:02.760
+Okay, Samir, sorry, we were just doing some last-minute checks. So yes do exactly the same thing as you did will be fine and we'll manage on our end
+
+03:05.760 --> 03:08.760
+Sorry everyone on the stream. We're just trying to do some last-minute shuffling
+
+03:10.760 --> 03:14.760
+And you are muted on BBB right now, so you will probably need to pause the talk for a second
+
+03:14.760 --> 03:24.760
+And you are muted on BBB right now, so you will probably need to unmute yourself on BBB and then start the talk
+
+03:30.760 --> 03:35.760
+So Samir, right now, sorry, could you, no, it's not working. You need to unmute yourself on BBB
+
+03:35.760 --> 03:37.760
+So right now you need to click the button, the microphone
+
+03:37.760 --> 03:42.760
+Yes, you toggled it off again. Toggle it on again, please
+
+03:46.760 --> 03:48.760
+What am I doing wrong?
+
+03:49.760 --> 03:55.760
+So do not unmute yourself now. Leave your microphone on and press, go back to the beginning of your video and press play
+
+03:55.760 --> 03:57.760
+Yes, from various signals
+
+03:58.760 --> 04:01.760
+The work we present is limited to a limited number of people
+
+04:01.760 --> 04:06.760
+So do not unmute yourself now. Leave your microphone on and press, go back to the beginning of your video and press play
+
+04:06.760 --> 04:08.760
+Yes, from various signals
+
+04:09.760 --> 04:12.760
+The work we present is limited to text and speech
+
+04:12.760 --> 04:13.760
+Good approaching
+
+04:13.760 --> 04:14.760
+But it can be extended
+
+04:15.760 --> 04:22.760
+Thank you for joining me today. I am Samir Pradhan from the Linguistic Data Consortium at the University of Pennsylvania
+
+04:23.760 --> 04:26.760
+And founder of osmantics.org
+
+04:26.760 --> 04:33.760
+We research in computational linguistics, also known as natural language processing, a sub-area of artificial intelligence
+
+04:34.760 --> 04:40.760
+With a focus on modeling and predicting complex linguistic structures from various signals
+
+04:41.760 --> 04:47.760
+The work we present is limited to text and speech, but it can be extended to other signals
+
+04:47.760 --> 04:57.760
+We propose an architecture, and we call it GRAIL, which allows the representation and aggregation of such rich structures in a systematic fashion
+
+04:59.760 --> 05:11.760
+I'll demonstrate a proof of concept for representing and manipulating data and annotations for the specific purpose of building machine learning models that simulate understanding
+
+05:11.760 --> 05:20.760
+These technologies have the potential for impact in almost any conceivable field that generates and uses data
+
+05:22.760 --> 05:32.760
+We process human language when our brains receive and assimilate various signals, which are then manipulated and interpreted within a syntactic structure
+
+05:33.760 --> 05:39.760
+It's a complex process that I have simplified here for the purpose of comparison to machine learning
+
+05:39.760 --> 05:51.760
+Recent machine learning models tend to require a large amount of raw, naturally occurring data, and a varying amount of manually enriched data, commonly known as annotations
+
+05:52.760 --> 06:01.760
+Owing to the complex and numerous nature of linguistic phenomena, we have most often used a divide-and-conquer approach
+
+06:01.760 --> 06:09.760
+The strength of this approach is that it allows us to focus on a single or perhaps a few related linguistic phenomena
+
+06:10.760 --> 06:17.760
+The weaknesses are the universe of these phenomena keep expanding as language itself evolves and changes over time
+
+06:18.760 --> 06:26.760
+And second, this approach requires an additional task of aggregating annotations, creating more opportunities for computer error
+
+06:26.760 --> 06:40.760
+Our challenge then is to find the sweet spot that allows us to encode complex information without the use of manual annotation or without the additional task of aggregation by computers
+
+06:42.760 --> 06:45.760
+So what do I mean by annotation?
+
+06:45.760 --> 06:59.760
+In this talk, the word annotation refers to the manual assignment of certain attributes to portions of a signal which is necessary to perform the end task
+
+07:00.760 --> 07:11.760
+For example, in order for the algorithm to accurately interpret a pronoun, it needs to know what that pronoun refers back to
+
+07:11.760 --> 07:19.760
+We may find this task trivial, however, current algorithms repeatedly fail in this task
+
+07:20.760 --> 07:26.760
+So the complexities of understanding in computational linguistics require annotation
+
+07:27.760 --> 07:36.760
+The word annotation itself is a useful example because it also reminds us that words have multiple meanings, as annotation itself does
+
+07:36.760 --> 07:51.760
+Just as I needed to define it in this context so that my message won't be misinterpreted, so too must annotators do at least for algorithms through manual intervention
+
+07:52.760 --> 07:58.760
+Learning from raw data, commonly known as unsupervised learning, poses limitations for machine learning
+
+07:59.760 --> 08:04.760
+As I described, modeling complex phenomena need manual annotations
+
+08:04.760 --> 08:10.760
+The learning algorithm uses these annotations as examples to build statistical models
+
+08:11.760 --> 08:13.760
+This is called supervised learning
+
+08:13.760 --> 08:37.760
+Without going into too much detail, I'll simply note that the recent popularity of the concept of deep learning is an evolutionary step where we have learned to train models using trillions of parameters in ways that they can learn richer hierarchical structures from very large amounts of annotated data
+
+08:37.760 --> 08:49.760
+These models can then be fine-tuned using varying amounts of annotated examples, depending on the complexity of the task, to generate better predictions
+
+08:50.760 --> 09:01.760
+As you might imagine, manually annotating complex linguistic phenomena can be a very specific, labor-intensive task
+
+09:01.760 --> 09:09.760
+For example, imagine if we were to go back through this presentation and connect all the pronouns with the nouns to which they refer
+
+09:10.760 --> 09:14.760
+Even for a short, 18-minute presentation, this would require hundreds of annotations
+
+09:15.760 --> 09:20.760
+The models we build are only as good as the quality of the annotations we make
+
+09:20.760 --> 09:31.760
+We need guidelines that ensure that the annotations are done by at least two humans who have substantial agreement with each other in their interpretations
+
+09:32.760 --> 09:40.760
+We know that if we try to train a model using annotations that are very subjective or have more noise, we will receive poor predictions
+
+09:41.760 --> 09:47.760
+Additionally, there is the concern of introducing various unexpected biases into one's models
+
+09:47.760 --> 09:54.760
+So, annotation is really both an art and a science
+
+09:55.760 --> 09:59.760
+In the remaining time, we will turn to two fundamental questions
+
+10:00.760 --> 10:09.760
+First, how can we develop a unified representation of data and annotations that encompasses arbitrary levels of linguistic information?
+
+10:10.760 --> 10:14.760
+There is a long history of attempting to answer this first question
+
+10:14.760 --> 10:18.760
+This history is documented in our recent article
+
+10:19.760 --> 10:26.760
+It is as if we as a community have been searching for our own holy grail
+
+10:27.760 --> 10:35.760
+The second question we will pose on is what role might Emacs, along with Org Mode, play in this process?
+
+10:35.760 --> 10:46.760
+While the solution itself may not be tied to Emacs, Emacs has built-in capabilities that could be useful for evaluating potential solutions
+
+10:47.760 --> 10:55.760
+It is also one of the most extensively documented pieces of software and the most customizable piece of software that I have ever come across
+
+10:56.760 --> 11:00.760
+Many would agree with that
+
+11:00.760 --> 11:08.760
+In order to approach this second question, we turn to the complex structure of language itself
+
+11:09.760 --> 11:13.760
+At first glance, language appears to us as a series of words
+
+11:14.760 --> 11:20.760
+Words form sentences, sentences form paragraphs, and paragraphs form completed texts
+
+11:20.760 --> 11:30.760
+If this was a sufficient description of the complexity of language, all of us would be able to read at least 10 different languages
+
+11:31.760 --> 11:33.760
+We know it is much more complex than this
+
+11:34.760 --> 11:37.760
+There is a rich, underlying, recursive tree structure
+
+11:38.760 --> 11:45.760
+In fact, many possible tree structures, which makes a particular sequence, and many others
+
+11:45.760 --> 11:50.760
+One of the better understood tree structures is the syntactic structure
+
+11:51.760 --> 12:00.760
+While a natural language has rich ambiguities and complexities, programming languages are designed to be parsed and imprinted deterministically
+
+12:01.760 --> 12:10.760
+Emacs has been used for programming very effectively, so there is a potential for using Emacs as a tool for annotation
+
+12:10.760 --> 12:14.760
+This would significantly improve our current set of tools
+
+12:15.760 --> 12:26.760
+It is important to note that most of the annotation tools that have been developed over the past few decades have relied on graphical indices
+
+12:27.760 --> 12:30.760
+Even those used for enumerated textual indices
+
+12:30.760 --> 12:42.760
+Most of the tools in use are designed for a user to add very specific, very restricted information
+
+12:43.760 --> 12:51.760
+It has not really made use of the potential that an editor, rich editing environment like Emacs, can add to the mix
+
+12:51.760 --> 12:59.760
+Emacs has long been able to edit and manipulate complex, embedded tree structures dependent in source code
+
+13:00.760 --> 13:05.760
+It is difficult to imagine the capabilities that we represent naturally
+
+13:06.760 --> 13:13.760
+In fact, it always does that, with features that allow us to quickly navigate sentences and graphs with a few keystrokes
+
+13:13.760 --> 13:20.760
+Add various text studies, create overlays to name, etc.
+
+13:21.760 --> 13:33.760
+Emacs has built up way too many control units, so we don't have to worry about the complexity of managing more languages
+
+13:34.760 --> 13:41.760
+In fact, this is not the first time Emacs has used control linguistic sequences
+
+13:41.760 --> 13:56.760
+One of the true moments in language natural language processing was the creation of a newly created syntactic tree for a million word collection of Wall Street articles
+
+13:57.760 --> 14:03.760
+This was about 1990, before Java or Oracle interfaces were common
+
+14:03.760 --> 14:13.760
+The tool that was used to create that corpus was Emacs, and it was created by Penn, known as the Penn Treebank
+
+14:14.760 --> 14:26.760
+And in 1992, about when the Linguistic Consortium was established, it's been about 30 years that it has been creating various language related resources
+
+14:26.760 --> 14:36.760
+The first outlining mode, in particular the outlining mode, rather enhanced the outlining mode
+
+14:37.760 --> 14:49.760
+Allows us to create red outlines, attaching properties to nodes, and why this command is really customizing some of the various pieces of information as per one's requirement
+
+14:49.760 --> 14:56.760
+This is also a very useful tool
+
+14:57.760 --> 15:03.760
+This enhanced outlining mode provides more power to Emacs
+
+15:04.760 --> 15:13.760
+It provides command for easily customizing, entering information, and at the same time hiding unnecessary context
+
+15:13.760 --> 15:25.760
+It allows control editing, this could be a very useful tool when we are focused on a limited amount of data
+
+15:26.760 --> 15:37.760
+The tool together allows us to create a rich representation that can simultaneously capture multiple possible sequences
+
+15:37.760 --> 15:42.760
+Capture details necessary to read the original sources
+
+15:43.760 --> 15:52.760
+Allows us to create hierarchical representation, wide structural capabilities that can take advantage of the concept of editance within the tree structure
+
+15:53.760 --> 16:00.760
+Together allow local manipulance structure, thereby minimizing data coupling
+
+16:00.760 --> 16:06.760
+The concept of tag outlining mode complements the hierarchy pattern
+
+16:07.760 --> 16:12.760
+Hierarchies can be very rigid, but through tags on hierarchies we can have multi-faceted representations
+
+16:13.760 --> 16:19.760
+As a matter of fact, outlining mode has the ability for tags to do their own hierarchical structure
+
+16:20.760 --> 16:23.760
+Further enhances the representational power
+
+16:23.760 --> 16:29.760
+All of this can be done as sequence, mostly for functional transformation
+
+16:30.760 --> 16:36.760
+Because most capabilities can be configured and customized, it is not necessary to do everything at once
+
+16:37.760 --> 16:41.760
+It allows us to intervene in the complexity of the representation
+
+16:42.760 --> 16:46.760
+Finally, all of this can be done in plain tag representation
+
+16:47.760 --> 16:50.760
+It has its own advantages
+
+16:50.760 --> 16:55.760
+Now let's look at a simple example
+
+16:56.760 --> 17:02.760
+The sentence is the thought of the moon with a telescope
+
+17:03.760 --> 17:07.760
+Let's just make a view of the sentence
+
+17:07.760 --> 17:19.760
+What is interesting is that it has a noun phrase i followed by an arrow to star
+
+17:20.760 --> 17:27.760
+Then the moon is another phrase and the telescope is a positional phrase
+
+17:27.760 --> 17:42.760
+Now, one thing you might remember from grammar school syntax is that there is a syntactical structure
+
+17:42.760 --> 17:57.760
+And in this particular case
+
+18:12.760 --> 18:23.760
+Because we know that the moon is not something that can hold the telescope
+
+18:24.760 --> 18:37.760
+That seeing must be by me, or by eye, and the telescope must be in my hand, or I am viewing the moon with a telescope
+
+18:37.760 --> 18:48.760
+However, it is possible that in a different context, the moon could be referred to an animated picture
+
+18:48.760 --> 19:07.760
+And could hold the telescope, in that case, the situation might be that I am actually seeing a moon holding a telescope
+
+19:07.760 --> 19:24.760
+And this is one of the most complex linguistic phenomena that requires world knowledge
+
+19:24.760 --> 19:38.760
+And it is called the P-attachment problem, where the positional phrases can be ambiguous and various different cues have to be used to reduce the ambiguity
+
+19:39.760 --> 19:45.760
+So in this case, as you saw, both the readings are technically true depending on the context
+
+19:45.760 --> 19:55.760
+So one thing we could do is cut the tree and duplicate it, and then create another node and call it another node
+
+19:56.760 --> 20:02.760
+And because this is one of the two interpreters, let's call one division A
+
+20:02.760 --> 20:15.760
+And that division essentially is a tile of zone A, and it says that the moon is holding the telescope
+
+20:15.760 --> 20:31.760
+Now we create another representation, where we capture the other interpretation, where the moon, or I am holding the telescope
+
+20:32.760 --> 20:38.760
+Sorry everyone to interrupt the audio here. Sameer, can you move your mouse a little bit? Just move it to the corner of your screen, thank you
+
+20:38.760 --> 20:49.760
+Now we have two separate interpreters in the same structure, and all we have to do is very quickly add a few keystrokes
+
+20:49.760 --> 21:08.760
+Now let's add another interesting thing. This is two different interpreters. It can be A, it can be B, it can be C, it can be D, or it can be D
+
+21:08.760 --> 21:23.760
+Basically, any entity that has the ability to see can be substituted in this particular node
+
+21:23.760 --> 21:37.760
+And let's see what we have here. Now we are just getting a zoom view of the entire structure we have created
+
+21:37.760 --> 21:52.760
+Essentially, you can see that by just using a few keystrokes, we are able to capture two different interpretations of a simple sentence
+
+21:52.760 --> 22:06.760
+And we are also able to add various alternate pieces of information that could help machine algorithms generalize better
+
+22:06.760 --> 22:25.760
+Now let's go to the next thing. In a sense, we can use the power of functional constructors to represent very potentially conflicting and structured readings
+
+22:25.760 --> 22:38.760
+In addition to this, we can also create a text with different structure and have them in the same place. This allows us to address the interpretation of certain sentences that may be occurring in the world
+
+22:38.760 --> 23:03.760
+While simultaneously giving information that can be more valuable. This makes the enrichment process all very efficient. Additionally, we can enrich the power of users of the feature or button who can not only expand, but also add information into it
+
+23:03.760 --> 23:19.760
+In a way, that could help machine algorithms generalize better by making efficient use of their functions. Together, UX and Ardmo can speed the enrichment of nodes in a way that allows us to focus on certain aspects and ignore others
+
+23:20.760 --> 23:28.760
+Extremely complex landscape structures can be captured consistently in a function that allows computers to understand the language
+
+23:28.760 --> 23:35.760
+We can then use tools to enhance the tests that we do in our everyday life
+
+23:36.760 --> 23:49.760
+However, this is the acronym or the type of specification that we are creating to capture this new and present virtual adaptation
+
+23:49.760 --> 24:06.760
+We will now look at an example of spontaneous speech that occurs in spoken conversations. Conversations consistently contain interest in speech, interrupts, disfluency, verbal nouns such as talk or laugh, and other noises
+
+24:06.760 --> 24:22.760
+Since spontaneous speech is simply a functional stream, we cannot take back words that come out of our mouths. We tend to make mistakes and correct ourselves as soon as we realize that we have spoken
+
+24:22.760 --> 24:35.760
+This process manifests through a combination of a handful of mechanisms, including immediate action after an error, and we do this unconsciously
+
+24:35.760 --> 24:51.760
+What we've taught here is an example of a language that has various aspects of the representation
+
+24:51.760 --> 25:14.760
+We don't have time to go through many of the details. I would highly encourage you to play. I'm making some videos for ASCII cinemas that I'll be posting and if you're interested you can go through those
+
+25:14.760 --> 25:33.760
+The idea here is to try a slightly more complex use case, but given the time consumption and the amount of information that can fit in the screen, this should be very informative
+
+25:33.760 --> 25:46.760
+But at least you'll see some idea of what can be followed. In this particular case, you're saying that there's a sense which is what I am telling now
+
+25:47.760 --> 25:59.760
+Essentially, there is a repetition of the I am, then there is a proper word, nobody can try to say the same thing but start by saying true, and then correct themselves by telling now
+
+25:59.760 --> 26:13.760
+So in this case, we can capture a sequence of words
+
+26:13.760 --> 26:30.760
+The interesting thing is that in NLB, sometimes we have to typically use words that have this interpretation of the context of I am
+
+26:30.760 --> 26:55.760
+You can see that here, this view shows that with each of the words in the sentence or in the representation, you can have a lot of different properties that can attach to them
+
+26:55.760 --> 27:07.760
+And these properties are typical then, like in the earlier slide, but you can use the cues of all these properties to various kind of searches and filtering
+
+27:07.760 --> 27:27.760
+And the slide here is actually not a legitimate text, on the right are descriptions of what each of these present. This information is also available in the article and you can see there
+
+27:27.760 --> 27:38.760
+But it shows how rich a context you can capture, it's just a closer snapshot of the properties on the word
+
+27:39.760 --> 27:50.760
+And you can see we can have like whether the word is broken or not, it's incomplete, whether some words want to be filtered for parsing, and say this is ignored
+
+27:50.760 --> 28:00.760
+Or some words are restart marks, we can add a restart marker, sometimes some of these migrations
+
+28:01.760 --> 28:10.760
+The other fascinating thing about this presentation is that you can edit properties in the content view
+
+28:10.760 --> 28:20.760
+So you have this pillar data structure and combining hierarchical data structure, as you can see, you may not be able to see here
+
+28:20.760 --> 28:48.760
+What has also happened here is that some of the tags have been inherited from earlier groups, and so you get a much better picture of things, and essentially you can filter out things that you want to access, access them, and then integrate it into the model
+
+28:48.760 --> 29:04.760
+So in conclusion today we have posed and implemented the use of the architecture layout, which allows representation, manipulation, and recognition of rich linguistic structure in systematic fashion
+
+29:05.760 --> 29:15.760
+We've shown how Google advances tools available for building machine learning models to simulate understanding
+
+29:15.760 --> 29:22.760
+Thank you Verj for your attention and contact information on this slide
+
+29:23.760 --> 29:41.760
+If you are interested in an additional sample to demonstrate the representation of speech and retext together, continue, otherwise we'll stop here
+
+29:41.760 --> 29:46.760
+Is it okay to stop?
+
+29:47.760 --> 29:53.760
+Yes Amir, it's okay to stop now. Thank you so much for your talk. Are you able to see the pad on your end?
+
+29:54.760 --> 29:58.760
+In the etherpad?
+
+29:59.760 --> 30:01.760
+Yes, in the etherpad, do you have the link?
+
+30:02.760 --> 30:06.760
+I'm there, nothing has happened so far
+
+30:06.760 --> 30:16.760
+I'm going to put a link to the pad, give me just a second right now. Colwyn, feel free to interrupt me whenever you're here
+
+30:17.760 --> 30:23.760
+I'm actually looking at the pad, I don't think anything is added in
+
+30:23.760 --> 30:37.760
+There don't seem to be questions yet, yes. It's probably because of the audio problem people might have a little bit of trouble hearing you talk
+
+30:38.760 --> 30:46.760
+Do you have anything else you'd like to add on your talk maybe? Because I think it was an excruciating process to get it out to us
+
+30:47.760 --> 30:51.760
+You had to get a lot of darlings in the process didn't you?
+
+30:51.760 --> 30:59.760
+Yeah, in the process of preparing this talk you had to select a lot of stuff that you wanted to include in your talk
+
+31:00.760 --> 31:07.760
+Can I ask you to put on your webcam or something? Are you able to do this?
+
+31:07.760 --> 31:25.760
+I'm starting to see a few questions come in. Just let us know when you're ready
+
+31:26.760 --> 31:31.760
+Colwyn, I'll let you take over. Can you hear me?
+
+31:31.760 --> 31:39.760
+Yeah, I hear you, the audio is just a little bit choppy, but we'll just talk slowly and hopefully that will work fine
+
+31:40.760 --> 31:51.760
+Well thanks for the great talk, that was just kind of mind blowing actually, I'm looking forward to re-watching it probably two or three times
+
+31:52.760 --> 31:54.760
+Who is this?
+
+31:55.760 --> 31:57.760
+This is Colwyn again
+
+31:57.760 --> 32:04.760
+Okay, so we do have a few questions coming in
+
+32:05.760 --> 32:08.760
+I'm going to answer them
+
+32:09.760 --> 32:14.760
+Okay, well I can read them to you and then we'll transcribe your answers if you'd like to answer them live
+
+32:14.760 --> 32:29.760
+Oh, I see, let me do that. The identity you've come up as the pantry, that has been to depth and people are putting out perfect scores on that
+
+32:30.760 --> 32:35.760
+But that's not quite the point, I mean sometimes
+
+32:36.760 --> 32:39.760
+Oh, I should also speak slowly
+
+32:39.760 --> 32:54.760
+Sometimes the research community goes too far and reuses the evaluations and doesn't really transfer to domains
+
+32:54.760 --> 33:14.760
+But our richer and newer data that are available is always, we're in the process, I am currently and a couple of my colleagues, we're getting new data so that we can actually make sure the learning model is better
+
+33:14.760 --> 33:35.760
+Oh shoot, and then I failed to unmute myself on the stream here
+
+33:35.760 --> 33:43.760
+And I think you're answering in text right now one of these, so I'll just let you drive
+
+33:44.760 --> 33:51.760
+So one thing I'll add is, please read the question that you're answering when you read out your answers
+
+33:52.760 --> 33:55.760
+Oh, I see, yes
+
+33:55.760 --> 34:06.760
+And we're showing the pad on the stream so people are seeing the text and that's probably a good approach considering we're having a little shakiness with the audio
+
+34:25.760 --> 34:35.760
+In fact, I think my audio may be pretty stable, so I'll just start reading out both the questions and the answers
+
+34:36.760 --> 34:42.760
+But Samir, if you want to, you're welcome to interrupt me if you want to expand on your remarks at all
+
+34:43.760 --> 34:52.760
+So the first question was, has the 92U pin corpus of articles feat been reproduced over and over again using these tools
+
+34:52.760 --> 35:01.760
+The answer was not quite, that was sort of a first wave, the particular corpus was the first one that started a revolution, kind of
+
+35:02.760 --> 35:13.760
+But there are more corpus being made available, in fact I spent about 8 years, a decade ago, building a much larger corpus with more layers of information
+
+35:13.760 --> 35:27.760
+And it is called the Onto Notes, it covers Chinese and Arabic, DARPA funded, this is freely available for research to anyone, anywhere
+
+35:28.760 --> 35:32.760
+That was quite a feature, quite a feat
+
+35:32.760 --> 35:45.760
+The next question, is this only for natural languages like English or more general, would this be used for programming languages
+
+35:46.760 --> 35:54.760
+Samir said, I am using English as a use case, but the idea is to have it completely multilingual
+
+35:54.760 --> 36:12.760
+I cannot think why you would want to use it for programming languages, in fact the AST in programming languages is sort of what we are trying to build upon
+
+36:12.760 --> 36:29.760
+So that one can capture the abstract representation and help the models learn better
+
+36:29.760 --> 36:49.760
+These days the models are trained on a boatload of data, and so they tend to be overfitted to the data
+
+36:49.760 --> 37:13.760
+So if you have a smaller data set, which is not quite the same as the one that you had the training data for, then the models really do poorly
+
+37:13.760 --> 37:29.760
+It is sometimes compared to learning the sine function, using the points on the sine wave, as opposed to deriving the function itself
+
+37:29.760 --> 37:46.760
+You can get close, but then you cannot really do a lot better with that model
+
+37:47.760 --> 37:56.760
+This is sort of what is happening with the deep learning hype
+
+37:56.760 --> 38:13.760
+It is not to say that there hasn't been a significant advancement in the tech, in the technologies
+
+38:13.760 --> 38:28.760
+But to say that the models can learn is an extreme overstatement
+
+38:28.760 --> 38:46.760
+Awesome answer. I'm going to scroll my copy of the pad down just a little bit, and we'll just take a moment to start looking at the next question
+
+38:46.760 --> 38:57.760
+So I'll read that out. Reminds me of the advantages of pre-computer copy and paste, cut up paper and rearrange, but having more stuff with your pieces
+
+38:58.760 --> 39:11.760
+Right. Kind of like that, but more intelligent than copy-paste, because you could have various local constraints that would ensure the information is consistent with the whole
+
+39:11.760 --> 39:30.760
+I am also envisioning this as a use case of hooks
+
+39:30.760 --> 39:57.760
+And if you can have rich local dependencies, then you can be sure, as much as you can, that the information signal is not too corrupted
+
+39:57.760 --> 40:22.760
+Have you used it on real life situations? No. I am probably the only person who is doing this crazy thing
+
+40:22.760 --> 40:47.760
+It would be nice, or rather, I have a feeling that something like this, if worked upon for a while, by many people, by many, might lead to a really really potent tool for the masses
+
+40:47.760 --> 41:00.760
+I feel strongly about using, sorry, I feel strongly about giving such power to the users
+
+41:00.760 --> 41:17.760
+And be able to edit and share the data openly, so that they are not stuck in some corporate vault somewhere
+
+41:17.760 --> 41:31.760
+Amen. One thing at a time. Plus one for that as well.
+
+41:31.760 --> 41:47.760
+Alright, and I will read out the next question. Do you see this as a format for this type of annotation specifically, or something more general that can be used for interlinear glosses, lexicons, etc?
+
+41:47.760 --> 42:12.760
+Absolutely. In fact, the project I mentioned, One Notes, has multiple layers of annotation, one of them being the propositional structure, which it uses for a large lexicon that covers about 15k verbs, so 15,000 verbs, and nouns
+
+42:12.760 --> 42:25.760
+and all their argument structures that we have been seeing so far in the corpora
+
+42:26.760 --> 42:35.760
+This is about a million propositions that have been released recently
+
+42:35.760 --> 42:57.760
+We just recently celebrated a 20th birthday of the Corpus. It is called the Prop Bank.
+
+42:57.760 --> 43:19.760
+There is an interesting history of the banks. It started with Tree Bank, and then there was Prop Bank, with a capital B
+
+43:19.760 --> 43:47.760
+But then, when we were developing Onto Notes, which contains syntax, named entities, conference resolution, propositions, word sense, all in the same hole
+
+43:47.760 --> 43:57.760
+Sorry for the interruption. We have about 5 minutes and 15 seconds.
+
+43:58.760 --> 44:09.760
+That sounds good. If you want to just read it out, then. I think that would be the most important thing, that people can hear your answers, and I and the other volunteers will be going through and trying to transcribe this.
+
+44:09.760 --> 44:19.760
+So go for it.
+
+44:20.760 --> 44:25.760
+So, Samuel, just to make sure, did you have something to say right now?
+
+44:25.760 --> 44:39.760
+Oh, okay. I think these are all good questions, and there is a lot of it, and clearly the amount of time is not enough.
+
+44:39.760 --> 44:54.760
+But I am trying to figure out how to have a community that can help such a person.
+
+44:54.760 --> 45:12.760
+One of the things that I am thinking that this could make possible is to take all the disparate resources that have inconsistent or not quite compatible additions on them,
+
+45:12.760 --> 45:34.760
+and which are right now just iso of data, small island of data floating in the sea. But representation could really bring them all together, and then they could be much richer, full, and consistent.
+
+45:34.760 --> 45:46.760
+Like you said, one of you was asking about the islands and the subcorporas that have sentiment and information.
+
+45:46.760 --> 46:09.760
+I am, yeah, there's a lot of various. Common people, the way it could be used for common people is to potentially make them available that currently doesn't recognize the current models on dual land,
+
+46:09.760 --> 46:19.760
+so that more people can use the data and not be biased towards one or the other.
+
+46:19.760 --> 46:42.760
+And there are some things, when people train these models using huge amounts of data, no matter how big the data is, it is a small cross-section of the universe of data, and depending on what drop select will be your model, those will be the seconds for those.
+
+46:42.760 --> 46:56.760
+And some people will be interested in using them on purpose X, but somebody else might want to use them on purpose Y, and if the data is not in, then it's harder to do that.
+
+47:00.760 --> 47:09.760
+Okay, so I think we've got just about 100 seconds left, so if you have any closing remarks you want to share, and then we'll start transitioning.
+
+47:09.760 --> 47:17.760
+Thank you so much, I really appreciate, this was a great experience, frankly.
+
+47:17.760 --> 47:46.760
+I've never had a complete pre-related level of talk before, I guess, in a way it was for a different audience. It was extremely helpful, and I learned that planning sort of tried to create a community.
+
+47:47.760 --> 47:52.760
+Thank you so much.
+
+47:53.760 --> 47:58.760
+I'll take it over, we are going to move to the next talk. Thank you so much, Samir, and sorry for the technical difficulty.
+
+47:58.760 --> 48:23.760
+As Corbin said, we will try to manage as much of the information that was shared during this Q&A, we will file everything away where we can use it, and make captions and all this, so don't worry about the difficulty.
+
+48:28.760 --> 48:29.760
+Thank you.
+
diff --git a/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt
new file mode 100644
index 00000000..e907d8ec
--- /dev/null
+++ b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main--chapters.vtt
@@ -0,0 +1,65 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:13.399
+Introduction
+
+00:01:13.400 --> 00:02:34.559
+Processing language
+
+00:02:34.560 --> 00:03:43.239
+Annotation
+
+00:03:43.240 --> 00:04:39.679
+Learning from data
+
+00:04:39.680 --> 00:05:44.399
+Manual annotation
+
+00:05:44.400 --> 00:06:22.519
+How can we develop a unified representation?
+
+00:06:22.520 --> 00:06:55.279
+What role might Emacs and Org mode play?
+
+00:06:55.280 --> 00:08:10.799
+The complex structure of language
+
+00:08:10.800 --> 00:10:22.359
+Annotation tools
+
+00:10:22.360 --> 00:12:45.479
+Org mode
+
+00:12:45.480 --> 00:17:36.239
+Example
+
+00:17:36.240 --> 00:19:17.679
+Different readings
+
+00:19:17.680 --> 00:23:31.999
+Spontaneous speech
+
+00:23:32.000 --> 00:24:20.279
+Editing properties in column view
+
+00:24:20.280 --> 00:25:15.279
+Conclusion
+
+00:25:15.280 --> 00:27:20.479
+Bonus material
+
+00:27:20.480 --> 00:28:39.279
+Syntactic analysis
+
+00:28:39.280 --> 00:30:12.599
+Forced alignment
+
+00:30:12.600 --> 00:31:42.879
+Alignment before tokenization
+
+00:31:42.880 --> 00:34:31.319
+Layers
+
+00:34:31.320 --> 00:36:17.000
+Variations
diff --git a/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt
new file mode 100644
index 00000000..a642f94a
--- /dev/null
+++ b/2022/captions/emacsconf-2022-grail--graila-generalized-representation-and-aggregation-of-information-layers--sameer-pradhan--main.vtt
@@ -0,0 +1,1945 @@
+WEBVTT captioned by sameer
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:05.839
+Thank you for joining me today. I'm Sameer Pradhan
+
+00:00:05.840 --> 00:00:07.799
+from the Linguistic Data Consortium
+
+00:00:07.800 --> 00:00:10.079
+at the University of Pennsylvania
+
+00:00:10.080 --> 00:00:14.519
+and founder of cemantix.org .
+
+00:00:14.520 --> 00:00:16.879
+Today we'll be addressing research
+
+00:00:16.880 --> 00:00:18.719
+in computational linguistics,
+
+00:00:18.720 --> 00:00:22.039
+also known as natural language processing
+
+00:00:22.040 --> 00:00:24.719
+a sub area of artificial intelligence
+
+00:00:24.720 --> 00:00:27.759
+with a focus on modeling and predicting
+
+00:00:27.760 --> 00:00:31.919
+complex linguistic structures from various signals.
+
+00:00:31.920 --> 00:00:35.799
+The work we present is limited to text and speech signals.
+
+00:00:35.800 --> 00:00:38.639
+but it can be extended to other signals.
+
+00:00:38.640 --> 00:00:40.799
+We propose an architecture,
+
+00:00:40.800 --> 00:00:42.959
+and we call it GRAIL, which allows
+
+00:00:42.960 --> 00:00:44.639
+the representation and aggregation
+
+00:00:44.640 --> 00:00:50.199
+of such rich structures in a systematic fashion.
+
+00:00:50.200 --> 00:00:52.679
+I'll demonstrate a proof of concept
+
+00:00:52.680 --> 00:00:56.559
+for representing and manipulating data and annotations
+
+00:00:56.560 --> 00:00:58.519
+for the specific purpose of building
+
+00:00:58.520 --> 00:01:02.879
+machine learning models that simulate understanding.
+
+00:01:02.880 --> 00:01:05.679
+These technologies have the potential for impact
+
+00:01:05.680 --> 00:01:09.119
+in almost every conceivable field
+
+00:01:09.120 --> 00:01:13.399
+that generates and uses data.
+
+NOTE Processing language
+
+00:01:13.400 --> 00:01:15.039
+We process human language
+
+00:01:15.040 --> 00:01:16.719
+when our brains receive and assimilate
+
+00:01:16.720 --> 00:01:20.079
+various signals which are then manipulated
+
+00:01:20.080 --> 00:01:23.879
+and interpreted within a syntactic structure.
+
+00:01:23.880 --> 00:01:27.319
+it's a complex process that I have simplified here
+
+00:01:27.320 --> 00:01:30.759
+for the purpose of comparison to machine learning.
+
+00:01:30.760 --> 00:01:33.959
+Recent machine learning models tend to require
+
+00:01:33.960 --> 00:01:37.039
+a large amount of raw, naturally occurring data
+
+00:01:37.040 --> 00:01:40.199
+and a varying amount of manually enriched data,
+
+00:01:40.200 --> 00:01:43.199
+commonly known as "annotations".
+
+00:01:43.200 --> 00:01:45.959
+Owing to the complex and numerous nature
+
+00:01:45.960 --> 00:01:49.959
+of linguistic phenomena, we have most often used
+
+00:01:49.960 --> 00:01:52.999
+a divide and conquer approach.
+
+00:01:53.000 --> 00:01:55.399
+The strength of this approach is that it allows us
+
+00:01:55.400 --> 00:01:58.159
+to focus on a single, or perhaps a few related
+
+00:01:58.160 --> 00:02:00.439
+linguistic phenomena.
+
+00:02:00.440 --> 00:02:03.879
+The weaknesses are the universe of these phenomena
+
+00:02:03.880 --> 00:02:07.239
+keep expanding, as language itself
+
+00:02:07.240 --> 00:02:09.359
+evolves and changes over time,
+
+00:02:09.360 --> 00:02:13.119
+and second, this approach requires an additional task
+
+00:02:13.120 --> 00:02:14.839
+of aggregating the interpretations,
+
+00:02:14.840 --> 00:02:18.359
+creating more opportunities for computer error.
+
+00:02:18.360 --> 00:02:21.519
+Our challenge, then, is to find the sweet spot
+
+00:02:21.520 --> 00:02:25.239
+that allows us to encode complex information
+
+00:02:25.240 --> 00:02:27.719
+without the use of manual annotation,
+
+00:02:27.720 --> 00:02:34.559
+or without the additional task of aggregation by computers.
+
+NOTE Annotation
+
+00:02:34.560 --> 00:02:37.119
+So what do I mean by "annotation"?
+
+00:02:37.120 --> 00:02:39.759
+In this talk the word annotation refers to
+
+00:02:39.760 --> 00:02:43.519
+the manual assignment of certain attributes
+
+00:02:43.520 --> 00:02:48.639
+to portions of a signal which is necessary
+
+00:02:48.640 --> 00:02:51.639
+to perform the end task.
+
+00:02:51.640 --> 00:02:54.439
+For example, in order for the algorithm
+
+00:02:54.440 --> 00:02:57.439
+to accurately interpret a pronoun,
+
+00:02:57.440 --> 00:03:00.279
+it needs to know that pronoun,
+
+00:03:00.280 --> 00:03:03.799
+what that pronoun refers back to.
+
+00:03:03.800 --> 00:03:06.719
+We may find this task trivial, however,
+
+00:03:06.720 --> 00:03:10.599
+current algorithms repeatedly fail in this task.
+
+00:03:10.600 --> 00:03:13.319
+So the complexities of understanding
+
+00:03:13.320 --> 00:03:16.639
+in computational linguistics require annotation.
+
+00:03:16.640 --> 00:03:20.799
+The world annotation itself is a useful example,
+
+00:03:20.800 --> 00:03:22.679
+because it also reminds us
+
+00:03:22.680 --> 00:03:25.119
+that words have multiple meetings
+
+00:03:25.120 --> 00:03:27.519
+as annotation itself does—
+
+00:03:27.520 --> 00:03:30.559
+just as I needed to define it in this context,
+
+00:03:30.560 --> 00:03:33.799
+so that my message won't be misinterpreted.
+
+00:03:33.800 --> 00:03:39.039
+So, too, must annotators do this for algorithms
+
+00:03:39.040 --> 00:03:43.239
+through the manual intervention.
+
+NOTE Learning from data
+
+00:03:43.240 --> 00:03:44.759
+Learning from raw data
+
+00:03:44.760 --> 00:03:47.039
+(commonly known as unsupervised learning)
+
+00:03:47.040 --> 00:03:50.079
+poses limitations for machine learning.
+
+00:03:50.080 --> 00:03:53.039
+As I described, modeling complex phenomena
+
+00:03:53.040 --> 00:03:55.559
+need manual annotations.
+
+00:03:55.560 --> 00:03:58.559
+The learning algorithm uses these annotations
+
+00:03:58.560 --> 00:04:01.319
+as examples to build statistical models.
+
+00:04:01.320 --> 00:04:04.879
+This is called supervised learning.
+
+00:04:04.880 --> 00:04:06.319
+Without going into too much detail,
+
+00:04:06.320 --> 00:04:10.039
+I'll simply note that the recent popularity
+
+00:04:10.040 --> 00:04:12.519
+of the concept of deep learning
+
+00:04:12.520 --> 00:04:14.679
+is that evolutionary step
+
+00:04:14.680 --> 00:04:17.319
+where we have learned to train models
+
+00:04:17.320 --> 00:04:20.799
+using trillions of parameters in ways that they can
+
+00:04:20.800 --> 00:04:25.079
+learn richer hierarchical structures
+
+00:04:25.080 --> 00:04:29.399
+from very large amounts of annotate, unannotated data.
+
+00:04:29.400 --> 00:04:32.319
+These models can then be fine-tuned,
+
+00:04:32.320 --> 00:04:35.599
+using varying amounts of annotated examples
+
+00:04:35.600 --> 00:04:37.639
+depending on the complexity of the task
+
+00:04:37.640 --> 00:04:39.679
+to generate better predictions.
+
+NOTE Manual annotation
+
+00:04:39.680 --> 00:04:44.919
+As you might imagine, manually annotating
+
+00:04:44.920 --> 00:04:47.359
+complex, linguistic phenomena
+
+00:04:47.360 --> 00:04:51.719
+can be very specific, labor-intensive task.
+
+00:04:51.720 --> 00:04:54.279
+For example, imagine if we were
+
+00:04:54.280 --> 00:04:56.399
+to go back through this presentation
+
+00:04:56.400 --> 00:04:58.399
+and connect all the pronouns
+
+00:04:58.400 --> 00:04:59.919
+with the nouns to which they refer.
+
+00:04:59.920 --> 00:05:03.239
+Even for a short 18 min presentation,
+
+00:05:03.240 --> 00:05:05.239
+this would require hundreds of annotations.
+
+00:05:05.240 --> 00:05:08.519
+The models we build are only as good
+
+00:05:08.520 --> 00:05:11.119
+as the quality of the annotations we make.
+
+00:05:11.120 --> 00:05:12.679
+We need guidelines
+
+00:05:12.680 --> 00:05:15.759
+that ensure that the annotations are done
+
+00:05:15.760 --> 00:05:19.719
+by at least two humans who have substantial agreement
+
+00:05:19.720 --> 00:05:22.119
+with each other in their interpretations.
+
+00:05:22.120 --> 00:05:25.599
+We know that if we try to trade a model using annotations
+
+00:05:25.600 --> 00:05:28.519
+that are very subjective, or have more noise,
+
+00:05:28.520 --> 00:05:30.919
+we will receive poor predictions.
+
+00:05:30.920 --> 00:05:33.679
+Additionally, there is the concern of introducing
+
+00:05:33.680 --> 00:05:37.079
+various unexpected biases into one's models.
+
+00:05:37.080 --> 00:05:44.399
+So annotation is really both an art and a science.
+
+NOTE How can we develop a unified representation?
+
+00:05:44.400 --> 00:05:47.439
+In the remaining time,
+
+00:05:47.440 --> 00:05:49.999
+we will turn to two fundamental questions.
+
+00:05:50.000 --> 00:05:54.239
+First, how can we develop a unified representation
+
+00:05:54.240 --> 00:05:55.599
+of data and annotations
+
+00:05:55.600 --> 00:05:59.759
+that encompasses arbitrary levels of linguistic information?
+
+00:05:59.760 --> 00:06:03.839
+There is a long history of attempting to answer
+
+00:06:03.840 --> 00:06:04.839
+this first question.
+
+00:06:04.840 --> 00:06:08.839
+This history is documented in our recent article,
+
+00:06:08.840 --> 00:06:11.519
+and you can refer to that article.
+
+00:06:11.520 --> 00:06:16.719
+It will be on the website.
+
+00:06:16.720 --> 00:06:18.999
+It is as if we, as a community,
+
+00:06:19.000 --> 00:06:22.519
+have been searching for our own Holy Grail.
+
+NOTE What role might Emacs and Org mode play?
+
+00:06:22.520 --> 00:06:26.519
+The second question we will pose is
+
+00:06:26.520 --> 00:06:30.159
+what role might Emacs, along with Org mode,
+
+00:06:30.160 --> 00:06:31.919
+play in this process?
+
+00:06:31.920 --> 00:06:35.359
+Well, the solution itself may not be tied to Emacs.
+
+00:06:35.360 --> 00:06:38.359
+Emacs has built in capabilities
+
+00:06:38.360 --> 00:06:42.599
+that could be useful for evaluating potential solutions.
+
+00:06:42.600 --> 00:06:45.759
+It's also one of the most extensively documented
+
+00:06:45.760 --> 00:06:48.519
+pieces of software and the most customizable
+
+00:06:48.520 --> 00:06:51.599
+piece of software that I have ever come across,
+
+00:06:51.600 --> 00:06:55.279
+and many would agree with that.
+
+NOTE The complex structure of language
+
+00:06:55.280 --> 00:07:00.639
+In order to approach this second question,
+
+00:07:00.640 --> 00:07:03.919
+we turn to the complex structure of language itself.
+
+00:07:03.920 --> 00:07:07.679
+At first glance, language appears to us
+
+00:07:07.680 --> 00:07:09.879
+as a series of words.
+
+00:07:09.880 --> 00:07:13.439
+Words form sentences, sentences form paragraphs,
+
+00:07:13.440 --> 00:07:16.239
+and paragraphs form completed text.
+
+00:07:16.240 --> 00:07:19.039
+If this was a sufficient description
+
+00:07:19.040 --> 00:07:21.159
+of the complexity of language,
+
+00:07:21.160 --> 00:07:24.199
+all of us would be able to speak and read
+
+00:07:24.200 --> 00:07:26.559
+at least ten different languages.
+
+00:07:26.560 --> 00:07:29.279
+We know it is much more complex than this.
+
+00:07:29.280 --> 00:07:33.199
+There is a rich, underlying recursive tree structure--
+
+00:07:33.200 --> 00:07:36.439
+in fact, many possible tree structures
+
+00:07:36.440 --> 00:07:39.439
+which makes a particular sequence meaningful
+
+00:07:39.440 --> 00:07:42.079
+and many others meaningless.
+
+00:07:42.080 --> 00:07:45.239
+One of the better understood tree structures
+
+00:07:45.240 --> 00:07:47.119
+is the syntactic structure.
+
+00:07:47.120 --> 00:07:49.439
+While natural language
+
+00:07:49.440 --> 00:07:51.679
+has rich ambiguities and complexities,
+
+00:07:51.680 --> 00:07:55.119
+programming languages are designed to be parsed
+
+00:07:55.120 --> 00:07:56.999
+and interpreted deterministically.
+
+00:07:57.000 --> 00:08:02.159
+Emacs has been used for programming very effectively.
+
+00:08:02.160 --> 00:08:05.359
+So there is a potential for using Emacs
+
+00:08:05.360 --> 00:08:06.559
+as a tool for annotation.
+
+00:08:06.560 --> 00:08:10.799
+This would significantly improve our current set of tools.
+
+NOTE Annotation tools
+
+00:08:10.800 --> 00:08:16.559
+It is important to note that most of the annotation tools
+
+00:08:16.560 --> 00:08:19.639
+that have been developed over the past few decades
+
+00:08:19.640 --> 00:08:22.879
+have relied on graphical interfaces,
+
+00:08:22.880 --> 00:08:26.919
+even those used for enriching textual information.
+
+00:08:26.920 --> 00:08:30.399
+Most of the tools in current use
+
+00:08:30.400 --> 00:08:36.159
+are designed for a end user to add very specific,
+
+00:08:36.160 --> 00:08:38.639
+very restricted information.
+
+00:08:38.640 --> 00:08:42.799
+We have not really made use of the potential
+
+00:08:42.800 --> 00:08:45.639
+that an editor or a rich editing environment like Emacs
+
+00:08:45.640 --> 00:08:47.239
+can add to the mix.
+
+00:08:47.240 --> 00:08:52.479
+Emacs has long enabled the editing of, the manipulation of
+
+00:08:52.480 --> 00:08:56.359
+complex embedded tree structures abundant in source code.
+
+00:08:56.360 --> 00:08:58.599
+So it's not difficult to imagine that it would have
+
+00:08:58.600 --> 00:09:00.359
+many capabilities that we we need
+
+00:09:00.360 --> 00:09:02.599
+to represent actual language.
+
+00:09:02.600 --> 00:09:04.759
+In fact, it already does that with features
+
+00:09:04.760 --> 00:09:06.399
+that allow us to quickly navigate
+
+00:09:06.400 --> 00:09:07.919
+through sentences and paragraphs,
+
+00:09:07.920 --> 00:09:09.799
+and we don't need a few key strokes.
+
+00:09:09.800 --> 00:09:13.599
+Or to add various text properties to text spans
+
+00:09:13.600 --> 00:09:17.039
+to create overlays, to name but a few.
+
+00:09:17.040 --> 00:09:22.719
+Emacs figured out this way to handle Unicode,
+
+00:09:22.720 --> 00:09:26.799
+so you don't even have to worry about the complexity
+
+00:09:26.800 --> 00:09:29.439
+of managing multiple languages.
+
+00:09:29.440 --> 00:09:34.039
+It's built into Emacs. In fact, this is not the first time
+
+00:09:34.040 --> 00:09:37.399
+Emacs has been used for linguistic analysis.
+
+00:09:37.400 --> 00:09:41.159
+One of the breakthrough moments in language,
+
+00:09:41.160 --> 00:09:44.439
+natural language processing was the creation
+
+00:09:44.440 --> 00:09:48.639
+of manually created syntactic trees
+
+00:09:48.640 --> 00:09:50.439
+for a 1 million word collection
+
+00:09:50.440 --> 00:09:52.399
+of Wall Street Journal articles.
+
+00:09:52.400 --> 00:09:54.879
+This was else around 1992
+
+00:09:54.880 --> 00:09:59.279
+before Java or graphical interfaces were common.
+
+00:09:59.280 --> 00:10:03.279
+The tool that was used to create that corpus was Emacs.
+
+00:10:03.280 --> 00:10:08.959
+It was created at UPenn, and is famously known as
+
+00:10:08.960 --> 00:10:12.719
+the Penn Treebank. '92 was about when
+
+00:10:12.720 --> 00:10:16.439
+the Linguistic Data Consortium was also established,
+
+00:10:16.440 --> 00:10:18.039
+and it's been about 30 years
+
+00:10:18.040 --> 00:10:20.719
+that it has been creating various
+
+00:10:20.720 --> 00:10:22.359
+language-related resources.
+
+NOTE Org mode
+
+00:10:22.360 --> 00:10:28.519
+Org mode--in particular, the outlining mode,
+
+00:10:28.520 --> 00:10:32.399
+or rather the enhanced form of outlining mode--
+
+00:10:32.400 --> 00:10:35.599
+allows us to create rich outlines,
+
+00:10:35.600 --> 00:10:37.799
+attaching properties to nodes,
+
+00:10:37.800 --> 00:10:41.119
+and provides commands for easily customizing
+
+00:10:41.120 --> 00:10:43.879
+sorting of various pieces of information
+
+00:10:43.880 --> 00:10:45.639
+as per one's requirement.
+
+00:10:45.640 --> 00:10:50.239
+This can also be a very useful tool.
+
+00:10:50.240 --> 00:10:59.159
+This enhanced form of outline-mode adds more power to Emacs.
+
+00:10:59.160 --> 00:11:03.359
+It provides commands for easily customizing
+
+00:11:03.360 --> 00:11:05.159
+and filtering information,
+
+00:11:05.160 --> 00:11:08.999
+while at the same time hiding unnecessary context.
+
+00:11:09.000 --> 00:11:11.919
+It also allows structural editing.
+
+00:11:11.920 --> 00:11:16.039
+This can be a very useful tool to enrich corpora
+
+00:11:16.040 --> 00:11:20.919
+where we are focusing on limited amount of phenomena.
+
+00:11:20.920 --> 00:11:24.519
+The two together allow us to create
+
+00:11:24.520 --> 00:11:27.199
+a rich representation
+
+00:11:27.200 --> 00:11:32.999
+that can simultaneously capture multiple possible sequences,
+
+00:11:33.000 --> 00:11:38.759
+capture details necessary to recreate the original source,
+
+00:11:38.760 --> 00:11:42.079
+allow the creation of hierarchical representation,
+
+00:11:42.080 --> 00:11:44.679
+provide structural editing capabilities
+
+00:11:44.680 --> 00:11:47.439
+that can take advantage of the concept of inheritance
+
+00:11:47.440 --> 00:11:48.999
+within the tree structure.
+
+00:11:49.000 --> 00:11:54.279
+Together they allow local manipulations of structures,
+
+00:11:54.280 --> 00:11:56.199
+thereby minimizing data coupling.
+
+00:11:56.200 --> 00:11:59.119
+The concept of tags in Org mode
+
+00:11:59.120 --> 00:12:01.599
+complement the hierarchy part.
+
+00:12:01.600 --> 00:12:03.839
+Hierarchies can be very rigid,
+
+00:12:03.840 --> 00:12:06.039
+but to tags on hierarchies,
+
+00:12:06.040 --> 00:12:08.839
+we can have a multifaceted representations.
+
+00:12:08.840 --> 00:12:12.759
+As a matter of fact, Org mode has the ability for the tags
+
+00:12:12.760 --> 00:12:15.039
+to have their own hierarchical structure
+
+00:12:15.040 --> 00:12:18.639
+which further enhances the representational power.
+
+00:12:18.640 --> 00:12:22.639
+All of this can be done as a sequence
+
+00:12:22.640 --> 00:12:25.679
+of mostly functional data transformations,
+
+00:12:25.680 --> 00:12:27.439
+because most of the capabilities
+
+00:12:27.440 --> 00:12:29.759
+can be configured and customized.
+
+00:12:29.760 --> 00:12:32.799
+It is not necessary to do everything at once.
+
+00:12:32.800 --> 00:12:36.199
+Instead, it allows us to incrementally increase
+
+00:12:36.200 --> 00:12:37.919
+the complexity of the representation.
+
+00:12:37.920 --> 00:12:39.799
+Finally, all of this can be done
+
+00:12:39.800 --> 00:12:42.359
+in plain-text representation
+
+00:12:42.360 --> 00:12:45.479
+which comes with its own advantages.
+
+NOTE Example
+
+00:12:45.480 --> 00:12:50.679
+Now let's take a simple example.
+
+00:12:50.680 --> 00:12:55.999
+This is a a short video that I'll play.
+
+00:12:56.000 --> 00:12:59.679
+The sentence is "I saw the moon with a telescope,"
+
+00:12:59.680 --> 00:13:03.999
+and let's just make a copy of the sentence.
+
+00:13:04.000 --> 00:13:09.199
+What we can do now is to see:
+
+00:13:09.200 --> 00:13:11.879
+what does this sentence comprise?
+
+00:13:11.880 --> 00:13:13.679
+It has a noun phrase "I,"
+
+00:13:13.680 --> 00:13:17.479
+followed by a word "saw."
+
+00:13:17.480 --> 00:13:21.359
+Then "the moon" is another noun phrase,
+
+00:13:21.360 --> 00:13:24.839
+and "with the telescope" is a prepositional phrase.
+
+00:13:24.840 --> 00:13:30.759
+Now one thing that you might remember,
+
+00:13:30.760 --> 00:13:36.119
+from grammar school or syntax is that
+
+00:13:36.120 --> 00:13:41.279
+there is a syntactic structure.
+
+00:13:41.280 --> 00:13:44.359
+And if you in this particular case--
+
+00:13:44.360 --> 00:13:47.919
+because we know that the moon is not typically
+
+00:13:47.920 --> 00:13:51.679
+something that can hold the telescope,
+
+00:13:51.680 --> 00:13:56.239
+that the seeing must be done by me or "I,"
+
+00:13:56.240 --> 00:14:01.039
+and the telescope must be in my hand,
+
+00:14:01.040 --> 00:14:04.479
+or "I" am viewing the moon with a telescope.
+
+00:14:04.480 --> 00:14:13.519
+However, it is possible that in a different context
+
+00:14:13.520 --> 00:14:17.159
+the moon could be referring to an animated character
+
+00:14:17.160 --> 00:14:22.319
+in a animated series, and could actually hold the telescope.
+
+00:14:22.320 --> 00:14:23.479
+And this is one of the most--
+
+00:14:23.480 --> 00:14:24.839
+the oldest and one of the most--
+
+00:14:24.840 --> 00:14:26.319
+and in that case the situation might be
+
+00:14:26.320 --> 00:14:30.959
+that I'm actually seeing the moon holding a telescope...
+
+00:14:30.960 --> 00:14:36.079
+I mean. The moon is holding the telescope,
+
+00:14:36.080 --> 00:14:40.959
+and I'm just seeing the moon holding the telescope.
+
+00:14:40.960 --> 00:14:47.999
+Complex linguistic ambiguity or linguistic
+
+00:14:48.000 --> 00:14:53.599
+phenomena that requires world knowledge,
+
+00:14:53.600 --> 00:14:55.719
+and it's called the PP attachment problem
+
+00:14:55.720 --> 00:14:59.239
+where the propositional phrase attachment
+
+00:14:59.240 --> 00:15:04.599
+can be ambiguous, and various different contextual cues
+
+00:15:04.600 --> 00:15:06.879
+have to be used to resolve the ambiguity.
+
+00:15:06.880 --> 00:15:09.079
+So in this case, as you saw,
+
+00:15:09.080 --> 00:15:11.199
+both the readings are technically true,
+
+00:15:11.200 --> 00:15:13.959
+depending on different contexts.
+
+00:15:13.960 --> 00:15:16.599
+So one thing we could do is just
+
+00:15:16.600 --> 00:15:19.919
+to cut the tree and duplicate it,
+
+00:15:19.920 --> 00:15:21.599
+and then let's create another node
+
+00:15:21.600 --> 00:15:24.479
+and call it an "OR" node.
+
+00:15:24.480 --> 00:15:26.119
+And because we are saying,
+
+00:15:26.120 --> 00:15:28.359
+this is one of the two interpretations.
+
+00:15:28.360 --> 00:15:32.159
+Now let's call one interpretation "a",
+
+00:15:32.160 --> 00:15:36.159
+and that interpretation essentially
+
+00:15:36.160 --> 00:15:39.319
+is this child of that node "a"
+
+00:15:39.320 --> 00:15:41.799
+and that says that the moon
+
+00:15:41.800 --> 00:15:43.999
+is holding the telescope.
+
+00:15:44.000 --> 00:15:46.359
+Now we can create another representation "b"
+
+00:15:46.360 --> 00:15:53.919
+where we capture the other interpretation,
+
+00:15:53.920 --> 00:15:59.959
+where this, the act, the moon or--I am actually
+
+00:15:59.960 --> 00:16:00.519
+holding the telescope,
+
+00:16:00.520 --> 00:16:06.799
+and watching the moon using it.
+
+00:16:06.800 --> 00:16:09.199
+So now we have two separate interpretations
+
+00:16:09.200 --> 00:16:11.679
+in the same structure,
+
+00:16:11.680 --> 00:16:15.519
+and all we do--we're able to do is with this,
+
+00:16:15.520 --> 00:16:18.159
+with very quick key strokes now...
+
+00:16:18.160 --> 00:16:22.439
+While we are at it, let's add another interesting thing,
+
+00:16:22.440 --> 00:16:25.159
+this node that represents "I":
+
+00:16:25.160 --> 00:16:28.919
+"He." It can be "She".
+
+00:16:28.920 --> 00:16:35.759
+It can be "the children," or it can be "The people".
+
+00:16:35.760 --> 00:16:45.039
+Basically, any entity that has the capability to "see"
+
+00:16:45.040 --> 00:16:53.359
+can be substituted in this particular node.
+
+00:16:53.360 --> 00:16:57.399
+Let's see what we have here now.
+
+00:16:57.400 --> 00:17:01.239
+We just are getting sort of a zoom view
+
+00:17:01.240 --> 00:17:04.599
+of the entire structure, what we created,
+
+00:17:04.600 --> 00:17:08.039
+and essentially you can see that
+
+00:17:08.040 --> 00:17:11.879
+by just, you know, using a few keystrokes,
+
+00:17:11.880 --> 00:17:17.839
+we were able to capture two different interpretations
+
+00:17:17.840 --> 00:17:20.879
+of a a simple sentence,
+
+00:17:20.880 --> 00:17:23.759
+and they are also able to add
+
+00:17:23.760 --> 00:17:27.799
+these alternate pieces of information
+
+00:17:27.800 --> 00:17:30.559
+that could help machine learning algorithms
+
+00:17:30.560 --> 00:17:32.439
+generalize better.
+
+00:17:32.440 --> 00:17:36.239
+All right.
+
+NOTE Different readings
+
+00:17:36.240 --> 00:17:40.359
+Now, let's look at the next thing. So in a sense,
+
+00:17:40.360 --> 00:17:46.679
+we can use this power of functional data structures
+
+00:17:46.680 --> 00:17:50.239
+to represent various potentially conflicting
+
+00:17:50.240 --> 00:17:55.559
+and structural readings of that piece of text.
+
+00:17:55.560 --> 00:17:58.079
+In addition to that, we can also create more texts,
+
+00:17:58.080 --> 00:17:59.799
+each with different structure,
+
+00:17:59.800 --> 00:18:01.559
+and have them all in the same place.
+
+00:18:01.560 --> 00:18:04.239
+This allows us to address the interpretation
+
+00:18:04.240 --> 00:18:06.879
+of a static sentence that might be occurring in the world,
+
+00:18:06.880 --> 00:18:09.639
+while simultaneously inserting information
+
+00:18:09.640 --> 00:18:11.519
+that would add more value to it.
+
+00:18:11.520 --> 00:18:14.999
+This makes the enrichment process also very efficient.
+
+00:18:15.000 --> 00:18:19.519
+Additionally, we can envision
+
+00:18:19.520 --> 00:18:23.999
+a power user of the future, or present,
+
+00:18:24.000 --> 00:18:27.479
+who can not only annotate a span,
+
+00:18:27.480 --> 00:18:31.279
+but also edit the information in situ
+
+00:18:31.280 --> 00:18:34.639
+in a way that would help machine algorithms
+
+00:18:34.640 --> 00:18:36.879
+generalize better by making more efficient use
+
+00:18:36.880 --> 00:18:37.719
+of the annotations.
+
+00:18:37.720 --> 00:18:41.519
+So together, Emacs and Org mode can speed up
+
+00:18:41.520 --> 00:18:42.959
+the enrichment of the signals
+
+00:18:42.960 --> 00:18:44.519
+in a way that allows us
+
+00:18:44.520 --> 00:18:47.719
+to focus on certain aspects and ignore others.
+
+00:18:47.720 --> 00:18:50.839
+Extremely complex landscape of rich structures
+
+00:18:50.840 --> 00:18:53.039
+can be captured consistently,
+
+00:18:53.040 --> 00:18:55.639
+in a fashion that allows computers
+
+00:18:55.640 --> 00:18:56.759
+to understand language.
+
+00:18:56.760 --> 00:19:00.879
+We can then build tools to enhance the tasks
+
+00:19:00.880 --> 00:19:03.319
+that we do in our everyday life.
+
+00:19:03.320 --> 00:19:10.759
+YAMR is acronym, or the file's type or specification
+
+00:19:10.760 --> 00:19:15.239
+that we are creating to capture this new
+
+00:19:15.240 --> 00:19:17.679
+rich representation.
+
+NOTE Spontaneous speech
+
+00:19:17.680 --> 00:19:21.959
+We'll now look at an example of spontaneous speech
+
+00:19:21.960 --> 00:19:24.799
+that occurs in spoken conversations.
+
+00:19:24.800 --> 00:19:28.599
+Conversations frequently contain errors in speech:
+
+00:19:28.600 --> 00:19:30.799
+interruptions, disfluencies,
+
+00:19:30.800 --> 00:19:33.959
+verbal sounds such as cough or laugh,
+
+00:19:33.960 --> 00:19:35.039
+and other noises.
+
+00:19:35.040 --> 00:19:38.199
+In this sense, spontaneous speech is similar
+
+00:19:38.200 --> 00:19:39.799
+to a functional data stream.
+
+00:19:39.800 --> 00:19:42.759
+We cannot take back words that come out of our mouth,
+
+00:19:42.760 --> 00:19:47.239
+but we tend to make mistakes, and we correct ourselves
+
+00:19:47.240 --> 00:19:49.039
+as soon as we realize that we have made--
+
+00:19:49.040 --> 00:19:50.679
+we have misspoken.
+
+00:19:50.680 --> 00:19:53.159
+This process manifests through a combination
+
+00:19:53.160 --> 00:19:56.279
+of a handful of mechanisms, including immediate correction
+
+00:19:56.280 --> 00:20:00.959
+after an error, and we do this unconsciously.
+
+00:20:00.960 --> 00:20:02.719
+Computers, on the other hand,
+
+00:20:02.720 --> 00:20:06.639
+must be taught to understand these cases.
+
+00:20:06.640 --> 00:20:12.799
+What we see here is a example document or outline,
+
+00:20:12.800 --> 00:20:18.119
+or part of a document that illustrates
+
+00:20:18.120 --> 00:20:22.919
+various different aspects of the representation.
+
+00:20:22.920 --> 00:20:25.919
+We don't have a lot of time to go through
+
+00:20:25.920 --> 00:20:28.239
+many of the details.
+
+00:20:28.240 --> 00:20:31.759
+I would highly encourage you to play a...
+
+00:20:31.760 --> 00:20:39.159
+I'm planning on making some videos, or ascii cinemas,
+
+00:20:39.160 --> 00:20:42.559
+that I'll be posting, and you can,
+
+00:20:42.560 --> 00:20:46.759
+if you're interested, you can go through those.
+
+00:20:46.760 --> 00:20:50.359
+The idea here is to try to do
+
+00:20:50.360 --> 00:20:54.599
+a slightly more complex use case.
+
+00:20:54.600 --> 00:20:57.639
+But again, given the time constraint
+
+00:20:57.640 --> 00:21:00.279
+and the amount of information
+
+00:21:00.280 --> 00:21:01.519
+that needs to fit in the screen,
+
+00:21:01.520 --> 00:21:05.559
+this may not be very informative,
+
+00:21:05.560 --> 00:21:08.399
+but at least it will give you some idea
+
+00:21:08.400 --> 00:21:10.439
+of what can be possible.
+
+00:21:10.440 --> 00:21:13.279
+And in this particular case, what you're seeing is that
+
+00:21:13.280 --> 00:21:18.319
+there is a sentence which is "What I'm I'm tr- telling now."
+
+00:21:18.320 --> 00:21:21.159
+Essentially, there is a repetition of the word "I'm",
+
+00:21:21.160 --> 00:21:23.279
+and then there is a partial word
+
+00:21:23.280 --> 00:21:25.159
+that somebody tried to say "telling",
+
+00:21:25.160 --> 00:21:29.599
+but started saying "tr-", and then corrected themselves
+
+00:21:29.600 --> 00:21:30.959
+and said, "telling now."
+
+00:21:30.960 --> 00:21:39.239
+So in this case, you see, we can capture words
+
+00:21:39.240 --> 00:21:44.919
+or a sequence of words, or a sequence of tokens.
+
+00:21:44.920 --> 00:21:52.279
+One thing to... An interesting thing to note is that in NLP,
+
+00:21:52.280 --> 00:21:55.319
+sometimes we have to break typically
+
+00:21:55.320 --> 00:22:01.199
+words that don't have spaces into two separate words,
+
+00:22:01.200 --> 00:22:04.119
+especially contractions like "I'm",
+
+00:22:04.120 --> 00:22:08.199
+so the syntactic parser needs needs two separate nodes.
+
+00:22:08.200 --> 00:22:11.199
+But anyway, so I'll... You can see that here.
+
+00:22:11.200 --> 00:22:15.759
+The other... This view. What this view shows is that
+
+00:22:15.760 --> 00:22:19.759
+with each of the nodes in the sentence
+
+00:22:19.760 --> 00:22:23.079
+or in the representation,
+
+00:22:23.080 --> 00:22:26.079
+you can have a lot of different properties
+
+00:22:26.080 --> 00:22:27.559
+that you can attach to them,
+
+00:22:27.560 --> 00:22:30.119
+and these properties are typically hidden,
+
+00:22:30.120 --> 00:22:32.719
+like you saw in the earlier slide.
+
+00:22:32.720 --> 00:22:35.599
+But you can make use of all these properties
+
+00:22:35.600 --> 00:22:39.439
+to do various kind of searches and filtering.
+
+00:22:39.440 --> 00:22:43.519
+And on the right hand side here--
+
+00:22:43.520 --> 00:22:48.799
+this is actually not a legitimate syntax--
+
+00:22:48.800 --> 00:22:51.279
+but on the right are descriptions
+
+00:22:51.280 --> 00:22:53.479
+of what each of these represent.
+
+00:22:53.480 --> 00:22:57.319
+All the information is also available in the article.
+
+00:22:57.320 --> 00:23:04.279
+You can see there... It shows how much rich context
+
+00:23:04.280 --> 00:23:05.879
+you can capture.
+
+00:23:05.880 --> 00:23:08.799
+This is just a closer snapshot
+
+00:23:08.800 --> 00:23:10.159
+of the properties on the node,
+
+00:23:10.160 --> 00:23:13.119
+and you can see we can have things like,
+
+00:23:13.120 --> 00:23:14.799
+whether the word is a token or not,
+
+00:23:14.800 --> 00:23:17.359
+or that it's incomplete, whether some words
+
+00:23:17.360 --> 00:23:19.959
+might want to be filtered out for parsing,
+
+00:23:19.960 --> 00:23:23.039
+and we can say this: PARSE_IGNORE,
+
+00:23:23.040 --> 00:23:25.519
+or some words or restart markers...
+
+00:23:25.520 --> 00:23:29.239
+We can mark, add a RESTART_MARKER, or sometimes,
+
+00:23:29.240 --> 00:23:31.999
+some of these might have durations. Things like that.
+
+NOTE Editing properties in column view
+
+00:23:32.000 --> 00:23:38.799
+The other fascinating thing of this representation
+
+00:23:38.800 --> 00:23:42.599
+is that you can edit properties in the column view.
+
+00:23:42.600 --> 00:23:45.399
+And suddenly, you have this tabular data structure
+
+00:23:45.400 --> 00:23:48.879
+combined with the hierarchical data structure.
+
+00:23:48.880 --> 00:23:53.119
+And as you can--you may not be able to see it here,
+
+00:23:53.120 --> 00:23:56.879
+but what has also happened here is that
+
+00:23:56.880 --> 00:24:01.159
+some of the tags have been inherited
+
+00:24:01.160 --> 00:24:02.479
+from the earlier nodes.
+
+00:24:02.480 --> 00:24:07.919
+And so you get a much fuller picture of things.
+
+00:24:07.920 --> 00:24:13.919
+Essentially you, can filter out things
+
+00:24:13.920 --> 00:24:15.319
+that you want to process,
+
+00:24:15.320 --> 00:24:20.279
+process them, and then reintegrate it into the whole.
+
+NOTE Conclusion
+
+00:24:20.280 --> 00:24:25.479
+So, in conclusion, today we have proposed and demonstrated
+
+00:24:25.480 --> 00:24:27.559
+the use of an architecture (GRAIL),
+
+00:24:27.560 --> 00:24:31.319
+which allows the representation, manipulation,
+
+00:24:31.320 --> 00:24:34.759
+and aggregation of rich linguistic structures
+
+00:24:34.760 --> 00:24:36.519
+in a systematic fashion.
+
+00:24:36.520 --> 00:24:41.359
+We have shown how GRAIL advances the tools
+
+00:24:41.360 --> 00:24:44.599
+available for building machine learning models
+
+00:24:44.600 --> 00:24:46.879
+that simulate understanding.
+
+00:24:46.880 --> 00:24:51.679
+Thank you very much for your time and attention today.
+
+00:24:51.680 --> 00:24:54.639
+My contact information is on this slide.
+
+00:24:54.640 --> 00:25:02.599
+If you are interested in an additional example
+
+00:25:02.600 --> 00:25:05.439
+that demonstrates the representation
+
+00:25:05.440 --> 00:25:08.039
+of speech and written text together,
+
+00:25:08.040 --> 00:25:10.719
+please continue watching.
+
+00:25:10.720 --> 00:25:12.199
+Otherwise, you can stop here
+
+00:25:12.200 --> 00:25:15.279
+and enjoy the rest of the conference.
+
+NOTE Bonus material
+
+00:25:15.280 --> 00:25:39.079
+Welcome to the bonus material.
+
+00:25:39.080 --> 00:25:43.959
+I'm glad for those of you who are stuck around.
+
+00:25:43.960 --> 00:25:46.559
+We are now going to examine an instance
+
+00:25:46.560 --> 00:25:49.159
+of speech and text signals together
+
+00:25:49.160 --> 00:25:51.479
+that produce multiple layers.
+
+00:25:51.480 --> 00:25:54.839
+When we have--when we take a spoken conversation
+
+00:25:54.840 --> 00:25:58.719
+and use the best language processing models available,
+
+00:25:58.720 --> 00:26:00.679
+we suddenly hit a hard spot
+
+00:26:00.680 --> 00:26:03.239
+because the tools are typically not trained
+
+00:26:03.240 --> 00:26:05.359
+to filter out the unnecessary cruft
+
+00:26:05.360 --> 00:26:07.559
+in order to automatically interpret
+
+00:26:07.560 --> 00:26:09.559
+the part of what is being said
+
+00:26:09.560 --> 00:26:11.799
+that is actually relevant.
+
+00:26:11.800 --> 00:26:14.639
+Over time, language researchers
+
+00:26:14.640 --> 00:26:17.719
+have created many interdependent layers of annotations,
+
+00:26:17.720 --> 00:26:21.039
+yet the assumptions underlying them are seldom the same.
+
+00:26:21.040 --> 00:26:25.039
+Piecing together such related but disjointed annotations
+
+00:26:25.040 --> 00:26:28.039
+on their predictions poses a huge challenge.
+
+00:26:28.040 --> 00:26:30.719
+This is another place where we can leverage
+
+00:26:30.720 --> 00:26:33.119
+the data model underlying the Emacs editor,
+
+00:26:33.120 --> 00:26:35.359
+along with the structural editing capabilities
+
+00:26:35.360 --> 00:26:38.519
+of Org mode to improve current tools.
+
+00:26:38.520 --> 00:26:42.839
+Let's take this very simple looking utterance.
+
+00:26:42.840 --> 00:26:48.039
+"Um \{lipsmack\} and that's it. (\{laugh\})"
+
+00:26:48.040 --> 00:26:50.319
+Looks like the person-- so this is--
+
+00:26:50.320 --> 00:26:54.519
+what you are seeing here is a transcript of an audio signal
+
+00:26:54.520 --> 00:27:00.759
+that has a lip smack and a laugh as part of it,
+
+00:27:00.760 --> 00:27:04.199
+and there is also a "Um" like interjection.
+
+00:27:04.200 --> 00:27:08.199
+So this has a few interesting noises
+
+00:27:08.200 --> 00:27:13.999
+and specific things that would be illustrative
+
+00:27:14.000 --> 00:27:20.479
+of what we are going to, how we are going to represent it.
+
+NOTE Syntactic analysis
+
+00:27:20.480 --> 00:27:25.839
+Okay. So let's say you want to have
+
+00:27:25.840 --> 00:27:28.879
+a syntactic analysis of this sentence or utterance.
+
+00:27:28.880 --> 00:27:30.959
+One common technique people use
+
+00:27:30.960 --> 00:27:32.879
+is just to remove the cruft, and, you know,
+
+00:27:32.880 --> 00:27:35.079
+write some rules, clean up the utterance,
+
+00:27:35.080 --> 00:27:36.719
+make it look like it's proper English,
+
+00:27:36.720 --> 00:27:40.239
+and then, you know, tokenize it,
+
+00:27:40.240 --> 00:27:43.079
+and basically just use standard tools to process it.
+
+00:27:43.080 --> 00:27:47.279
+But in that process, they end up eliminating
+
+00:27:47.280 --> 00:27:51.119
+valid pieces of signal that have meaning to others
+
+00:27:51.120 --> 00:27:52.799
+studying different phenomena of language.
+
+00:27:52.800 --> 00:27:56.479
+Here you have the rich transcript,
+
+00:27:56.480 --> 00:28:00.119
+the input to the syntactic parser.
+
+00:28:00.120 --> 00:28:05.919
+As you can see, there is a little tokenization happening
+
+00:28:05.920 --> 00:28:07.199
+where you'll be inserting space
+
+00:28:07.200 --> 00:28:12.119
+between "that" and the contracted is ('s),
+
+00:28:12.120 --> 00:28:15.599
+and between the period and the "it,"
+
+00:28:15.600 --> 00:28:18.199
+and the output of the syntactic parser is shown below.
+
+00:28:18.200 --> 00:28:21.639
+which (surprise) is a S-expression.
+
+00:28:21.640 --> 00:28:24.919
+Like I said, the parse trees, when they were created,
+
+00:28:24.920 --> 00:28:29.799
+and still largely when they are used, are S-expressions,
+
+00:28:29.800 --> 00:28:32.999
+and most of the viewers here
+
+00:28:33.000 --> 00:28:35.119
+should not have much problem reading it.
+
+00:28:35.120 --> 00:28:37.279
+You can see this tree structure
+
+00:28:37.280 --> 00:28:39.279
+of this syntactic parser here.
+
+NOTE Forced alignment
+
+00:28:39.280 --> 00:28:40.919
+Now let's say you want to integrate
+
+00:28:40.920 --> 00:28:44.479
+phonetic information or phonetic layer
+
+00:28:44.480 --> 00:28:49.119
+that's in the audio signal, and do some analysis.
+
+00:28:49.120 --> 00:28:57.519
+Now, it would need you to do a few-- take a few steps.
+
+00:28:57.520 --> 00:29:01.679
+First, you would need to align the transcript
+
+00:29:01.680 --> 00:29:06.479
+with the audio. This process is called forced alignment,
+
+00:29:06.480 --> 00:29:10.399
+where you already know what the transcript is,
+
+00:29:10.400 --> 00:29:14.599
+and you have the audio, and you can get a good alignment
+
+00:29:14.600 --> 00:29:17.599
+using both pieces of information.
+
+00:29:17.600 --> 00:29:20.119
+And this is typically a technique that is used to
+
+00:29:20.120 --> 00:29:23.079
+create training data for training
+
+00:29:23.080 --> 00:29:25.839
+automatic speech recognizers.
+
+00:29:25.840 --> 00:29:29.639
+One interesting thing is that in order to do
+
+00:29:29.640 --> 00:29:32.879
+this forced alignment, you have to keep
+
+00:29:32.880 --> 00:29:35.799
+the non-speech events in transcript,
+
+00:29:35.800 --> 00:29:39.079
+because they consume some audio signal,
+
+00:29:39.080 --> 00:29:41.399
+and if you don't have that signal,
+
+00:29:41.400 --> 00:29:44.399
+the alignment process doesn't know exactly...
+
+00:29:44.400 --> 00:29:45.759
+you know, it doesn't do a good job,
+
+00:29:45.760 --> 00:29:50.039
+because it needs to align all parts of the signal
+
+00:29:50.040 --> 00:29:54.999
+with something, either pause or silence or noise or words.
+
+00:29:55.000 --> 00:29:59.719
+Interestingly, punctuations really don't factor in,
+
+00:29:59.720 --> 00:30:01.559
+because we don't speak in punctuations.
+
+00:30:01.560 --> 00:30:04.239
+So one of the things that you need to do
+
+00:30:04.240 --> 00:30:05.679
+is remove most of the punctuations,
+
+00:30:05.680 --> 00:30:08.039
+although you'll see there are some punctuations
+
+00:30:08.040 --> 00:30:12.599
+that can be kept, or that are to be kept.
+
+NOTE Alignment before tokenization
+
+00:30:12.600 --> 00:30:15.319
+And the other thing is that the alignment has to be done
+
+00:30:15.320 --> 00:30:20.159
+before tokenization, as it impacts pronunciation.
+
+00:30:20.160 --> 00:30:24.399
+To show an example: Here you see "that's".
+
+00:30:24.400 --> 00:30:26.919
+When it's one word,
+
+00:30:26.920 --> 00:30:31.959
+it has a slightly different pronunciation
+
+00:30:31.960 --> 00:30:35.679
+than when it is two words, which is "that is",
+
+00:30:35.680 --> 00:30:38.399
+like you can see "is." And so,
+
+00:30:38.400 --> 00:30:44.279
+if you split the tokens or split the words
+
+00:30:44.280 --> 00:30:48.119
+in order for syntactic parser to process it,
+
+00:30:48.120 --> 00:30:51.599
+you would end up getting the wrong phonetic analysis.
+
+00:30:51.600 --> 00:30:54.239
+And if you have--if you process it
+
+00:30:54.240 --> 00:30:55.319
+through the phonetic analysis,
+
+00:30:55.320 --> 00:30:59.159
+and you don't know how to integrate it
+
+00:30:59.160 --> 00:31:02.719
+with the tokenized syntax, you can, you know,
+
+00:31:02.720 --> 00:31:07.519
+that can be pretty tricky. And a lot of time,
+
+00:31:07.520 --> 00:31:10.759
+people write one-off pieces of code that handle these,
+
+00:31:10.760 --> 00:31:14.279
+but the idea here is to try to have a general architecture
+
+00:31:14.280 --> 00:31:17.239
+that seamlessly integrates all these pieces.
+
+00:31:17.240 --> 00:31:21.319
+Then you do the syntactic parsing of the remaining tokens.
+
+00:31:21.320 --> 00:31:24.799
+Then you align the data and the two annotations,
+
+00:31:24.800 --> 00:31:27.959
+and then integrate the two layers.
+
+00:31:27.960 --> 00:31:31.359
+Once that is done, then you can do all kinds of
+
+00:31:31.360 --> 00:31:33.919
+interesting analysis, and test various hypotheses
+
+00:31:33.920 --> 00:31:35.279
+and generate the statistics,
+
+00:31:35.280 --> 00:31:39.359
+but without that you only are dealing
+
+00:31:39.360 --> 00:31:42.879
+with one or the other part.
+
+NOTE Layers
+
+00:31:42.880 --> 00:31:48.319
+Let's just take a quick look at how each of the layers
+
+00:31:48.320 --> 00:31:51.159
+that are involved look like.
+
+00:31:51.160 --> 00:31:56.719
+So this is "Um \{lipsmack\}, and that's it. \{laugh\}"
+
+00:31:56.720 --> 00:32:00.159
+This is the transcript, and on the right hand side,
+
+00:32:00.160 --> 00:32:04.199
+you see the same thing as a transcript
+
+00:32:04.200 --> 00:32:06.239
+listed in a vertical in a column.
+
+00:32:06.240 --> 00:32:08.199
+You'll see why, in just a second.
+
+00:32:08.200 --> 00:32:09.879
+And there are some place--
+
+00:32:09.880 --> 00:32:11.279
+there are some rows that are empty,
+
+00:32:11.280 --> 00:32:15.079
+some rows that are wider than the others, and we'll see why.
+
+00:32:15.080 --> 00:32:19.319
+The next is the tokenized sentence
+
+00:32:19.320 --> 00:32:20.959
+where you have space added,
+
+00:32:20.960 --> 00:32:23.599
+you know space between these two tokens:
+
+00:32:23.600 --> 00:32:26.599
+"that" and the apostrophe "s" ('s),
+
+00:32:26.600 --> 00:32:28.079
+and the "it" and the "period".
+
+00:32:28.080 --> 00:32:30.679
+And you see on the right hand side
+
+00:32:30.680 --> 00:32:33.559
+that the tokens have attributes.
+
+00:32:33.560 --> 00:32:36.439
+So there is a token index, and there are 1, 2,
+
+00:32:36.440 --> 00:32:38.839
+you know 0, 1, 2, 3, 4, 5 tokens,
+
+00:32:38.840 --> 00:32:41.479
+and each token has a start and end character,
+
+00:32:41.480 --> 00:32:45.799
+and space (sp) also has a start and end character,
+
+00:32:45.800 --> 00:32:50.399
+and space is represented by a "sp". And there are
+
+00:32:50.400 --> 00:32:54.319
+these other things that we removed,
+
+00:32:54.320 --> 00:32:56.239
+like the "\{LS\}" which is for "\{lipsmack\}"
+
+00:32:56.240 --> 00:32:59.399
+and "\{LG\}" which is "\{laugh\}" are showing grayed out,
+
+00:32:59.400 --> 00:33:02.439
+and you'll see why some of these things are grayed out
+
+00:33:02.440 --> 00:33:03.399
+in a little bit.
+
+00:33:03.400 --> 00:33:11.919
+This is what the forced alignment tool produces.
+
+00:33:11.920 --> 00:33:17.159
+Basically, it takes the transcript,
+
+00:33:17.160 --> 00:33:19.159
+and this is the transcript
+
+00:33:19.160 --> 00:33:24.119
+that has slightly different symbols,
+
+00:33:24.120 --> 00:33:26.239
+because different tools use different symbols
+
+00:33:26.240 --> 00:33:28.159
+and their various configurational things.
+
+00:33:28.160 --> 00:33:33.679
+But this is what is used to get an alignment
+
+00:33:33.680 --> 00:33:36.039
+or time alignment with phones.
+
+00:33:36.040 --> 00:33:40.079
+So this column shows the phones, and so each word...
+
+00:33:40.080 --> 00:33:43.879
+So, for example, "and" has been aligned with these phones,
+
+00:33:43.880 --> 00:33:46.879
+and these on the start and end
+
+00:33:46.880 --> 00:33:52.959
+are essentially temporal or time stamps that it aligned--
+
+00:33:52.960 --> 00:33:54.279
+that has been aligned to it.
+
+00:33:54.280 --> 00:34:00.759
+Interestingly, sometimes we don't really have any pause
+
+00:34:00.760 --> 00:34:05.159
+or any time duration between some words
+
+00:34:05.160 --> 00:34:08.199
+and those are highlighted as gray here.
+
+00:34:08.200 --> 00:34:12.759
+See, there's this space... Actually
+
+00:34:12.760 --> 00:34:17.799
+it does not have any temporal content,
+
+00:34:17.800 --> 00:34:21.319
+whereas this other space has some duration.
+
+00:34:21.320 --> 00:34:24.839
+So the ones that have some duration are captured,
+
+00:34:24.840 --> 00:34:29.519
+while the others are the ones that in the earlier diagram
+
+00:34:29.520 --> 00:34:31.319
+we saw were left out.
+
+NOTE Variations
+
+00:34:31.320 --> 00:34:37.639
+And the aligner actually produces multiple files.
+
+00:34:37.640 --> 00:34:44.399
+One of the files has a different, slightly different
+
+00:34:44.400 --> 00:34:46.679
+variation on the same information,
+
+00:34:46.680 --> 00:34:49.999
+and in this case, you can see
+
+00:34:50.000 --> 00:34:52.399
+that the punctuation is missing,
+
+00:34:52.400 --> 00:34:57.599
+and the punctuation is, you know, deliberately missing,
+
+00:34:57.600 --> 00:35:02.279
+because there is no time associated with it,
+
+00:35:02.280 --> 00:35:06.439
+and you see that it's not the tokenized sentence--
+
+00:35:06.440 --> 00:35:17.119
+a tokenized word. This... Now it gives you a full table,
+
+00:35:17.120 --> 00:35:21.239
+and you can't really look into it very carefully.
+
+00:35:21.240 --> 00:35:25.879
+But we can focus on the part that seems legible,
+
+00:35:25.880 --> 00:35:28.559
+or, you know, properly written sentence,
+
+00:35:28.560 --> 00:35:32.879
+process it and reincorporate it back into the whole.
+
+00:35:32.880 --> 00:35:35.879
+So if somebody wants to look at, for example,
+
+00:35:35.880 --> 00:35:39.679
+how many pauses the person made while they were talking,
+
+00:35:39.680 --> 00:35:42.919
+And they can actually measure the pause, the number,
+
+00:35:42.920 --> 00:35:46.279
+the duration, and make connections between that
+
+00:35:46.280 --> 00:35:49.639
+and the rich syntactic structure that is being produced.
+
+00:35:49.640 --> 00:35:57.279
+And in order to do that, you have to get these layers
+
+00:35:57.280 --> 00:35:59.039
+to align with each other,
+
+00:35:59.040 --> 00:36:04.359
+and this table is just a tabular representation
+
+00:36:04.360 --> 00:36:08.679
+of the information that we'll be storing in the YAMR file.
+
+00:36:08.680 --> 00:36:11.719
+Congratulations! You have reached
+
+00:36:11.720 --> 00:36:13.479
+the end of this demonstration.
+
+00:36:13.480 --> 00:36:17.000
+Thank you for your time and attention.
diff --git a/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt
new file mode 100644
index 00000000..b100ee27
--- /dev/null
+++ b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--answers.vtt
@@ -0,0 +1,815 @@
+WEBVTT
+
+00:00.000 --> 00:04.800
+say everyone can say hi to Sasha. Oh, we are recording now. Okay, great. But do say thanks
+
+00:04.800 --> 00:10.160
+to Sasha for being everywhere at once trying to make sure that the stream is working properly.
+
+00:10.160 --> 00:12.560
+She has the magic touch, yes, definitely.
+
+00:13.920 --> 00:18.640
+All right, Vala, sorry to do that. But now the floor is yours. You can take as many questions
+
+00:18.640 --> 00:22.720
+as you want. And I'll be making humorous comments when I'm not busy putting out fires in the
+
+00:22.720 --> 00:30.160
+background. Okay. All right. Thanks, folks. So thank you for the questions. I'll take one by one.
+
+00:30.160 --> 00:35.600
+How do you link the notes together so you could search through them in the future? Okay, this
+
+00:36.320 --> 00:44.560
+video I made before, or rather the experience that I shared with you was before I got into
+
+00:44.560 --> 00:51.600
+linking of notes and how to make sense of it. I'm still I mean, I'm thankful for guys like Leo for
+
+00:51.600 --> 00:59.120
+putting our room together. However, yes, you can take a bow. However, I'm still in the infancy of
+
+00:59.120 --> 01:07.200
+trying to link these topics. So the suggestion I have is once you convert your handwritten text
+
+01:07.200 --> 01:15.520
+into text, so handwritten stuff from your notebook into text, or if you write it, if you have a
+
+01:15.520 --> 01:24.640
+writing device, and you can convert it into text, input it into org rom and link it the way you
+
+01:24.640 --> 01:34.000
+would do it. So I have not yet gone into it. But having said that, I've started doing it like a
+
+01:34.000 --> 01:39.840
+week ago, I started linking these handwritten notes, which are converted into text, and then
+
+01:39.840 --> 01:47.760
+can be linked to any other note that you want. So that's that would be my response to the linking
+
+01:47.760 --> 01:54.640
+part. So which actually leads to the next question, is it necessary to OCR your handwriting?
+
+01:55.760 --> 02:00.720
+This is a necessary step, you have to do optical character recognition, as in convert all the
+
+02:00.720 --> 02:10.640
+handwritten stuff into text, because otherwise, indexing and linking becomes a problem later on.
+
+02:10.640 --> 02:16.240
+If it's only you going through the handwritten notes, so that you browse it and read it when
+
+02:16.240 --> 02:23.760
+you want it, that's okay. So you don't have to worry about OCR, just input the JPEG, the PNG,
+
+02:23.760 --> 02:31.600
+or whatever file you use, format you use, input it into under the org mode headline, or the org
+
+02:31.600 --> 02:40.720
+rom file, and you should be good to go. However, if you want the other stuff, then OCR becomes a
+
+02:40.720 --> 02:50.960
+necessity. So I'm unfamiliar with any package that does the OCR conversion inside of the Emacs
+
+02:50.960 --> 03:02.880
+ecosystem. So I use tools like OneNote, or I think Google Keep does that. I don't know of any other
+
+03:02.880 --> 03:10.240
+free slash open source tools which do that. I'm not familiar, but I use an external tool to convert
+
+03:10.240 --> 03:16.800
+handwritten text into notes, if you want the link again, read rating, if you want the linking and
+
+03:16.800 --> 03:24.560
+the indexing. If not, for me, sometimes screenshots and handwritten notes have to go together,
+
+03:24.560 --> 03:31.360
+so that I can find out, okay, this team or this student was talking about his project,
+
+03:31.360 --> 03:36.880
+or her project, and this is the screenshot of their presentation, and I write down my notes,
+
+03:36.880 --> 03:44.560
+and it goes along with that. That was for me a key to have that together, and not just hand
+
+03:44.560 --> 03:49.600
+typewritten notes, because I have no recollection later on, but handwritten notes I seem to recall
+
+03:49.600 --> 03:54.160
+better, and that's the whole idea of how to integrate. I was breaking my head over it.
+
+03:55.200 --> 04:01.840
+So those are the two responses to those two questions. What about searching notes? Notes
+
+04:01.840 --> 04:09.360
+to text while being offline? Oh my god, this is a related one as well. So yes, it is going to be
+
+04:09.360 --> 04:15.520
+searching has to be linked. If you want the searching facility, it has to be converted text.
+
+04:15.520 --> 04:22.320
+There are no two ways to that right now. Proprietary software like Google Keep seems to
+
+04:22.320 --> 04:31.120
+manage it. I think others, OneNote also, Dropbox also says that they can do it. I haven't tried it
+
+04:31.120 --> 04:37.600
+there, searching it inside these systems to look for handwritten text, because I don't use that for
+
+04:37.600 --> 04:44.160
+managing my projects or making sense of what I've written down. So when it comes to
+
+04:44.160 --> 04:53.200
+doing all those tasks, I use Org Mode. So I would say you absolutely mandatory for us to convert
+
+04:53.200 --> 05:00.160
+this, unless I've made that appeal at the end of my talk, saying if Org Mode, Emacs, Org Mode
+
+05:00.160 --> 05:06.080
+community can put their brains together. I don't know if I can help, but if you want me for
+
+05:06.080 --> 05:12.640
+testing your package, I certainly put my hands up for this for sure. I can do that. I'm keen on
+
+05:12.640 --> 05:21.680
+trying that out. I hope that answered the third question. These articles on, those articles are
+
+05:21.680 --> 05:28.960
+not taking seems interesting. Could you get a link for them? I'll definitely drop it in the Etherpad
+
+05:28.960 --> 05:38.800
+after this recording is done for sure. I will leave it there. It is my good friend in France
+
+05:38.800 --> 05:44.320
+who shared that with me saying when he saw the title of my talk, he sent me a whole bunch of
+
+05:44.320 --> 05:50.000
+articles saying, hey, this seems to support what you told me. And I have sort of shown you the
+
+05:50.000 --> 06:00.080
+screenshots in the video, but I'll definitely leave some of these links in the Etherpad after this.
+
+06:00.080 --> 06:05.360
+Oh yeah, I've used, the next question is, have you looked at taking handwritten notes on a tablet
+
+06:05.360 --> 06:13.920
+like, I don't know how to say that, journal with an X plus plus? So yes, I have started using it
+
+06:13.920 --> 06:22.560
+again. The only tools I used were OneNote and Google Keep because those were the only ones
+
+06:22.560 --> 06:30.080
+which would allow for writing using my stylus. I'm sure there are other apps which can do it,
+
+06:30.080 --> 06:35.600
+but do they convert it into text and how easy is it to input it into org mode is something that,
+
+06:35.600 --> 06:44.000
+so for now, the Dropbox method for me was I write notes, I take a mobile camera, take a picture,
+
+06:44.000 --> 06:51.440
+upload it to Dropbox. Why Dropbox? Because it allows JPEG to be uploaded. Whereas PDF,
+
+06:51.440 --> 07:00.080
+I find it very cumbersome from handwriting to get it in here. So JPEG, I can input it into
+
+07:00.080 --> 07:06.320
+org mode, I'm sorry, OneNote and that converts it into text and then I take it and put it into,
+
+07:07.200 --> 07:15.840
+the inbox has the image as well as the converted text. So I put it into my system,
+
+07:15.840 --> 07:22.240
+the org mode system. So that's how my workflow really is. I don't know if I answered that
+
+07:22.240 --> 07:30.720
+question very well. I've used X journal, but not a whole lot to give you intelligent advice.
+
+07:32.160 --> 07:36.560
+Have you tried out remarkable device to take handwritten notes as well? I haven't figured out
+
+07:36.560 --> 07:43.280
+how to link the files back into org mode in a constructive way yet. Okay, so yes, I've heard
+
+07:43.280 --> 07:50.160
+of remarkable devices. There's another one called Books, if I'm not wrong, and Amazon has also come
+
+07:50.160 --> 07:58.240
+up with a writing, I call it the writing Kindle. I don't know what it's called, a smarter name for
+
+07:58.240 --> 08:08.720
+that. So these devices do exist, but I'm not sure if they convert it into text and if they can put
+
+08:08.720 --> 08:15.760
+it in a repository, which is accessible on your computer, where you can import it into org mode.
+
+08:15.760 --> 08:24.560
+I'm not so sure about those things. So linking that would be nice if you can have access to
+
+08:24.560 --> 08:31.600
+where your Emacs org mode ecosystem is. For me, Dropbox works very well because it's on my mobile
+
+08:31.600 --> 08:38.480
+phone, smartphone, as well as on my computer. So the linking happens and I can just push it all
+
+08:38.480 --> 08:46.160
+into my org mode inbox and process them and refile the notes or do all the good stuff linking. If I
+
+08:46.160 --> 08:52.000
+have the text, I can link them, do all that I can. I can certainly do that. So that's my answer to
+
+08:52.880 --> 09:00.000
+the... where did it go? Remarkable stuff. That question is gone. I don't know. Okay, anyway,
+
+09:00.000 --> 09:03.200
+so that was... Yeah, I don't see it either anymore. It's disappeared, but thank you for
+
+09:03.200 --> 09:12.080
+taking the time to answer it. Okay. So next one. How are we on time, Leo? I can talk all day.
+
+09:13.360 --> 09:17.360
+You are completely good on time. Don't worry. We have until 45 at the current hour
+
+09:17.920 --> 09:22.480
+until we need to move on to the next box. It's very roomy. Take your time answering as many
+
+09:22.480 --> 09:27.520
+questions as you want. Okay. All right. So I won't have either. All right. Something to think about
+
+09:27.520 --> 09:33.440
+is handwritten and org transcribed notes, deduplication for searching. Do you want one or
+
+09:33.440 --> 09:39.360
+the other? Oh, okay. So this is wishlist. Oh, thank you so much for asking this question. Transcription
+
+09:39.360 --> 09:45.840
+for me has become important, not only handwritten, but also voice notes. So this is another thing
+
+09:45.840 --> 09:53.440
+that I've been... I have a couple of podcasts where I want a summary of my important points
+
+09:53.440 --> 10:01.760
+and I can grab the voice clips, but transcribing it, in spite of so many tools out there,
+
+10:01.760 --> 10:06.880
+I find it very difficult to transcribe them automatically. I can make the error corrections
+
+10:06.880 --> 10:13.680
+later on, but I find it extremely cumbersome to transcribe voice notes. So it would be nice
+
+10:13.680 --> 10:21.760
+if we can have voice transcription, one. Handwritten transcription also helps for sure.
+
+10:21.760 --> 10:29.360
+If it can be done, then it makes it... Actually, that's a great idea. Transcription. I wasn't
+
+10:29.360 --> 10:36.400
+thinking of inside. I was thinking of basically taking the notes and somehow linking it within
+
+10:36.400 --> 10:43.600
+the handwritten stuff itself. Maybe my limitation imagination, but transcription is definitely
+
+10:43.600 --> 10:51.200
+something that I would be very interested in. Voice as well as handwriting. I've seen it in
+
+10:51.200 --> 10:57.200
+some other software. I think it was OneNote where I saw that you can record yourself vocally and
+
+10:58.000 --> 11:03.360
+also there is a transcribe for paid packages. They have transcription as well. And then you
+
+11:03.360 --> 11:10.880
+could link text from there on. So if we can do it in our R mode system, nothing like that. I keep
+
+11:10.880 --> 11:21.920
+seeing it and notes keep coming up there. I keep writing it on my Wacom device or my remarkable
+
+11:21.920 --> 11:28.880
+device and it goes into my R mode as I write and as I speak. Unbelievable. This is important. This
+
+11:28.880 --> 11:35.120
+is really important. Thanks for the great idea. I hope this... Again, I volunteer myself to test
+
+11:35.120 --> 11:43.120
+this out as well. I have tons of... At least this year, I have produced 300 minutes of podcast
+
+11:43.120 --> 11:52.720
+content and I find it extremely cumbersome to transcribe it easily. So if this can do it for us,
+
+11:52.720 --> 12:01.280
+at least even a minute or two of the text, nothing like it. That's amazing. The last question I see
+
+12:01.280 --> 12:08.080
+is how often do you instead type in and summarize your notes? Would you consider that a suitable
+
+12:08.080 --> 12:17.120
+approach for yourself at the end of the day? That's a good idea of typing notes. When I'm in
+
+12:17.120 --> 12:26.400
+a hurry, I type. So when I'm in a tearing hurry or my notes is just lying somewhere and there's
+
+12:26.400 --> 12:32.400
+a meeting going on, I don't want to get up and go get my notes, I immediately go to my R mode and
+
+12:32.400 --> 12:39.680
+start typing there. So that's what I do. At the end of the day, I don't have that habit at all.
+
+12:39.680 --> 12:44.480
+I promised myself that I should do daily journaling and all that because it's... Everybody
+
+12:44.480 --> 12:50.240
+says it's a good habit. I've done it a few times and I found it to be good, but it's not a habit
+
+12:50.240 --> 13:00.400
+I'm yet on. So I mean, I also have a shortcut, a keyboard shortcut for the org-grown dailies.
+
+13:01.360 --> 13:05.440
+I do have that and it shows up on the calendar, the blue color. I love those features,
+
+13:05.440 --> 13:11.520
+but I'm not on it. I should make it a habit. As much as I look at my org agenda,
+
+13:11.520 --> 13:21.280
+you should have dailies as well. I type out when I'm in a hurry. Perhaps even writing
+
+13:22.240 --> 13:30.720
+your daily journal could be helpful. Particularly, I find that I'm comfortable typing English
+
+13:30.720 --> 13:40.080
+letters. If non-English, for example, my mother tongue has a different script, which I can't
+
+13:40.080 --> 13:46.560
+easily type using English. So perhaps writing is easier there for me rather than typing it out.
+
+13:46.560 --> 13:56.000
+It feels very weird. So perhaps that could help for non-English, non-Roman script. Perhaps
+
+13:56.000 --> 13:59.840
+writing is better for journaling as well. I guess that could help.
+
+14:02.320 --> 14:07.040
+Okay, Bala, if I can interrupt you for a second because don't worry, I'm not stopping you with
+
+14:07.040 --> 14:12.000
+the questions. I told you you have until 45 and I will honor what I said before. But I just wanted
+
+14:12.000 --> 14:17.440
+to let people know that we have opened up the BBB chat room. So if people want to join the room now
+
+14:17.440 --> 14:21.440
+and ask questions directly to Bala, who has already answered many of your questions on the
+
+14:21.440 --> 14:27.520
+pad, but if you have more questions or if you'd just like to chat with Bala, well, do feel free to
+
+14:28.320 --> 14:34.240
+join the room. The link has been pasted on the ISE channels. It's also available on the talk page at
+
+14:34.240 --> 14:39.040
+the top. So you should be able to find the link pretty easily. And even if we move to the next
+
+14:39.040 --> 14:42.960
+talk, if you're still there and still want to chat with Bala, provided Bala is available and does not
+
+14:42.960 --> 14:48.400
+need to sleep, by the way, with respect to the fact that it's really late over there, do feel free to
+
+14:48.400 --> 14:53.200
+hang around a little more and ask more questions and we'll be posting all of this on the website
+
+14:53.200 --> 14:58.000
+afterwards. So Bala, I think, do you have one more question on the pad or was it the last one?
+
+14:58.000 --> 15:04.080
+Let me check. I think that was the last one. Oh, there is a new question coming up just before that.
+
+15:04.800 --> 15:11.280
+Do take it then. Sure. I was going to say something of an experience I wanted to share,
+
+15:11.280 --> 15:18.720
+but anyway, I can answer this. How fancy has your handwritten notes import been?
+
+15:18.720 --> 15:28.800
+Okay, I'm going to wait for this. I'm not sure if we're talking about importing the notes into,
+
+15:28.800 --> 15:34.080
+like, is it merely importing the files or is it about importing it to your note-taking system,
+
+15:34.080 --> 15:42.720
+like, or whatnot? Okay, okay, okay. I get it. I get it. So I have a simple system for, yes,
+
+15:42.720 --> 15:50.240
+I absolutely agree with you. I mean, the birth of org-mode was that you wanted notes and you wanted
+
+15:50.240 --> 15:57.120
+tasks inside it, right? So that was the origin of that. So I think the same philosophy applies for
+
+15:57.120 --> 16:03.440
+handwritten notes as well because you're writing down notes and somebody says, hey Bala, can you
+
+16:03.440 --> 16:10.560
+send me this document by next Wednesday? And I write that down in my notes and then I send it
+
+16:10.560 --> 16:18.000
+and I write that down in my notes and that's a task. So I just put a star next to it. So I know
+
+16:18.000 --> 16:25.600
+when I am scanning, I don't think that shows up as a, I don't think star shows up as anything in my
+
+16:26.240 --> 16:34.320
+import, but I know when I'm scanning it that I need to keep track of that as a task. So in the
+
+16:34.320 --> 16:44.880
+talk about it is in OneNote, control-1 is the shortcut for ToDo and if it is converted into
+
+16:44.880 --> 16:54.720
+text, yes, of course, alt-enter in org-mode will work as well. So yes, so I think that is important
+
+16:54.720 --> 17:01.040
+even, so that's the only thing that I do is an asterisk or a star just before the note so that
+
+17:01.040 --> 17:09.360
+it tells me that it is a task that I have to keep track of. I even put a date so that the
+
+17:09.360 --> 17:18.160
+numbers also get imported into org-mode. But my wish list, this has gotten me into me wishing is
+
+17:18.880 --> 17:25.600
+if the handwriting notes, I mean the gadget, the device, the remarkable or the Amazon
+
+17:25.600 --> 17:34.160
+writing pads of the world, if we can actually write down notes with a star, an asterisk,
+
+17:34.160 --> 17:40.320
+and the headline and scheduled and all that and import it directly into org-mode, I think
+
+17:40.320 --> 17:47.840
+that's doing away with a whole bunch of in-between scanning, uploading, processing, and all that. This
+
+17:47.840 --> 17:54.000
+can go directly, you can start refiling into your system. So that would be nice. So somebody
+
+17:54.000 --> 18:01.520
+is asking me for a wish list, here's one more too, if we can do that. So that makes basically
+
+18:01.520 --> 18:08.960
+a writing org-mode rather than like as if it's a language, like a human language, rather than it
+
+18:08.960 --> 18:14.080
+being something restricted to a computer. So that's interesting. That's an interesting thought.
+
+18:15.440 --> 18:22.480
+Just to glorify handwriting, I don't know if it has anything to do with the questions. A few days
+
+18:22.480 --> 18:30.400
+ago, a client of mine asked me for a talk and I was going to give them the plain vanilla talk,
+
+18:31.280 --> 18:38.880
+but I decided to pause myself and write down what I was going to talk about. Actually that gave
+
+18:38.880 --> 18:48.080
+rise to a completely different idea and the whole thing was far more effective compared to what was
+
+18:48.080 --> 18:57.280
+my plain vanilla. According to me, that handwritten ideation that I did with a white space really
+
+18:57.280 --> 19:05.600
+helped me think beyond what was my plain vanilla talk. Of course, the talk went well, I think,
+
+19:06.160 --> 19:12.640
+and the audience did have fun because I even jotted down a few things that I wanted to crack
+
+19:12.640 --> 19:19.120
+jokes on. All that went into my notes. So I think handwriting is sort of under-marketed,
+
+19:19.120 --> 19:25.680
+underplayed so much with the advent of typing and these things becoming so efficient and easy
+
+19:25.680 --> 19:32.000
+that I think that all your ideas, if they come together, I think handwritten notes will become
+
+19:33.200 --> 19:40.160
+part and parcel of the org-mode system itself and an effective and efficient way of capturing our
+
+19:40.160 --> 19:49.280
+thoughts. All right, Bala. So I think you don't have any more questions currently. I don't see
+
+19:49.280 --> 19:53.040
+anyone with a microphone on. So by the way, if you're joining us on BBB and if you want to ask
+
+19:53.040 --> 19:57.120
+your questions, you do have to join with a microphone. It is interesting for you to join
+
+19:57.120 --> 20:02.960
+listening only, but if everyone does this and nobody turns on the microphone, it's going to be
+
+20:02.960 --> 20:07.200
+very lonely for Bala and myself. I can ask questions for you. I have plenty of questions
+
+20:07.200 --> 20:11.680
+that I'd love to ask. I did get my own tablet. Oh, actually, let me show the stream. Let me...
+
+20:11.680 --> 20:17.200
+Oops. Can I un-full screen this? Yes. Okay. Let me try to make the screen a little bigger so that
+
+20:17.200 --> 20:21.680
+you can see me. Okay. I was going to talk to you about, if we have a little more time, because I do
+
+20:21.680 --> 20:26.800
+have a tablet like this, which allows me to do handwritten notes. This is... Don't worry too much.
+
+20:26.800 --> 20:32.720
+This is a lead code exit slide that I was solving. And this is Yink, which allows me to type my
+
+20:32.720 --> 20:38.640
+stuff. And I bought this about two years ago. And I've really been struggling to find ways to...
+
+20:40.080 --> 20:44.720
+How do I work both in the Emacs and how do I work with my NVDA notes, which is why I was really
+
+20:44.720 --> 20:49.840
+interested with your talk, because honestly, right now, those are two completely separate
+
+20:49.840 --> 20:54.800
+collections of notes. What is in my machine, this device right there, is its own thing.
+
+20:56.080 --> 21:01.760
+It has its own quality. Do I do my journaling in it? I do my journaling, maybe. I also do my lead
+
+21:01.760 --> 21:09.040
+code exercise. But that's about it. And I wish it were easy for me to connect the dots between
+
+21:09.040 --> 21:14.400
+what I've got on this device and what I've got on my computer right in front of me. So I can talk
+
+21:14.400 --> 21:20.800
+some more about this, but people could also join and ask their own questions. I can talk to Bala
+
+21:20.800 --> 21:27.840
+whenever I want. I've been in touch with Bala for quite a while. And I'll be able to do this
+
+21:27.840 --> 21:32.640
+whenever. But this is your chance for you to do this, to have your question answered,
+
+21:32.640 --> 21:38.640
+and for the question to leave on EmacsConf forever and ever. All the talks for EmacsConf,
+
+21:38.640 --> 21:44.080
+all the questions since three years ago have been published. So it is your chance to,
+
+21:45.440 --> 21:50.160
+if you're not making a talk of your own, at least you have the questions of your own leaving on
+
+21:50.160 --> 21:59.920
+a website. So Bala, I believe you were a little interested with my little device. Do you actually
+
+21:59.920 --> 22:04.640
+have a device of your own that allows you to take notes like this? Or is it just written on paper?
+
+22:06.240 --> 22:14.800
+My computer is a touchscreen, so I can write. I have a stylus that I can use to write anywhere
+
+22:14.800 --> 22:22.080
+on the screen. So I take the laptop and actually fold it, and I can use it like a notebook. So this
+
+22:22.080 --> 22:29.840
+is my use case these days. So when I'm learning, I'm learning Japanese, by the way. And I tell you,
+
+22:30.480 --> 22:35.840
+there's no way I could have retained so much if I had not written Japanese out, the characters. So
+
+22:37.200 --> 22:44.400
+this is critical. Writing is critical. And their ideas, when they're externalized,
+
+22:44.400 --> 22:50.160
+you see it while you're writing it, there's a physical action, you feel the proximity to your
+
+22:50.800 --> 23:00.800
+ideas, what you're doing. So typing, yes, it is also physical. But for me, it's one step away from
+
+23:02.160 --> 23:07.760
+writing down. For me, that's going to make you laugh. I was also studying Japanese and I do have
+
+23:07.760 --> 23:14.800
+my own kanji that allows me to do my practice. So please don't look at it. If you're going to pause
+
+23:14.800 --> 23:18.640
+this video and check what I've written, you will be sorely disappointed because those are just
+
+23:18.640 --> 23:24.160
+collection of verbs. But this is how I practice my kanji as well. And it's been amazing. This is,
+
+23:25.040 --> 23:28.800
+you know, it is such a wonderful usage, because if you try learning kanji,
+
+23:28.800 --> 23:32.480
+just by seeing them and not putting them in your hand or embedding them in your hands,
+
+23:32.480 --> 23:38.400
+it's so complicated to do so. Oh, we have more things in common than I imagined. Okay.
+
+23:40.400 --> 23:45.760
+Yeah. So we happen to have someone in the room currently. Jack, I believe, is their nickname.
+
+23:46.480 --> 23:50.000
+Do you have a question? And do you want to maybe unmute yourself to ask the question?
+
+23:50.000 --> 23:53.520
+You are more than welcome to do so now. I might actually need to unmute you. Actually,
+
+23:53.520 --> 23:56.640
+I can't. Can you unmute yourself and ask the question if you want to?
+
+23:56.640 --> 24:06.640
+I'm just trying to get my headset set up. I'm having the similar struggle with this issue of
+
+24:06.640 --> 24:12.880
+handwriting my notes because that's the easiest way for me to write them quickly. It's also very,
+
+24:12.880 --> 24:20.880
+it does help me retain the information better. But then getting them back into org mode. I'm
+
+24:20.880 --> 24:26.480
+about to start experimenting with some of the iPad apps like Notability and GoodNotes to see
+
+24:26.480 --> 24:36.320
+if that can work or if I can use Apple Notes for that as well. My interests are probably similar
+
+24:36.320 --> 24:46.960
+to yours. I'm studying computer science, and I have two kinds of notes that are very difficult to
+
+24:46.960 --> 24:54.000
+transcribe. Mind maps, which is often the way I take class notes because it's a good outlining
+
+24:54.000 --> 25:04.960
+form. But the handwriting recognition blows if you're part of the expression. And equations,
+
+25:04.960 --> 25:16.000
+particularly involving proof steps for formal semantics. And I'm wondering if you have any ideas
+
+25:16.000 --> 25:22.720
+about mind mapping in particular and getting those incorporated from handwritten notes. I hate using
+
+25:22.720 --> 25:31.840
+the mind mapping tools that are available. I find that that replaces the bad methods that
+
+25:31.840 --> 25:42.240
+I use. It replaces the bad memory generation from typing with a bad memory generation for mind
+
+25:42.240 --> 25:53.440
+mapping. But if you have any thoughts, I'd love to hear them. Actually, I have used mind mapping
+
+25:53.440 --> 26:08.240
+tools. I use something called function maps, where you not only have interlinking relationships,
+
+26:08.240 --> 26:13.360
+this also has what is the relationship, what is the nature of relationships. All that I've been
+
+26:13.360 --> 26:23.760
+drawing it on my laptop screen. So that helps me internalize that. So I do not convert it into
+
+26:23.760 --> 26:31.920
+any other digital format. I leave it as a picture because every time I read it, but in the digital
+
+26:31.920 --> 26:40.160
+format itself, when you have new understanding, you can actually add another object and interlink
+
+26:40.160 --> 26:45.680
+them and add the relationship. So it's a lot easier if it's on this. But on a piece of paper,
+
+26:46.960 --> 26:55.040
+drawing a mind map and or function map and editing it and moving things around becomes a problem.
+
+26:55.040 --> 27:04.320
+So I find that doing it on a device and retaining it as such, not converting it into a free mind or
+
+27:04.320 --> 27:12.240
+any of those kind of XML or anything like that, doesn't help me at all, or a plan TML even. But
+
+27:12.240 --> 27:20.720
+I find that I leave it as such in the digital format. You can select it, like a lasso select,
+
+27:20.720 --> 27:27.440
+move it around and add new objects or remove it or shade it. You can do all those good stuff,
+
+27:27.440 --> 27:34.640
+if it is remaining in the same way. So I like it to be that way. Yeah, I've done that as well
+
+27:34.640 --> 27:44.560
+on the iPad. I'll use Nebo or something like that to give me a good way of rearranging the mind map
+
+27:45.600 --> 27:53.840
+directly in the iPad, exporting it as a JPEG and linking it to other notes documents that I have.
+
+27:53.840 --> 28:03.040
+But I do wish I had a better way of extracting the keywords that come out of it and having
+
+28:03.040 --> 28:09.840
+those searchable. But I get it. Okay, the answer is no, I don't have any. I usually link the live
+
+28:09.840 --> 28:17.840
+document itself into org mode. So for example, OneNote. OneNote colon and the entire... I just
+
+28:17.840 --> 28:22.640
+click on that and it goes, opens the exact document that I want and I can add more to it.
+
+28:22.640 --> 28:28.000
+I do something very simple.
+
+28:28.000 --> 28:33.200
+All right, folks, I'm really sorry for interrupting you, but we are getting close to time.
+
+28:33.200 --> 28:38.560
+Thank you so much for joining. We have four people on the scene right now, which is amazing.
+
+28:38.560 --> 28:45.440
+You can continue talking about this and people can still tune in. The link to the BBB room
+
+28:45.440 --> 28:50.640
+is still available on Bala's talk. You go to EmacsConf 2022, you go to the talk of Bala and
+
+28:50.640 --> 28:55.200
+you'll find the link at the top of the page. You can come in the room and chat with Bala some more.
+
+28:55.200 --> 28:58.960
+But for us on the stream, we're going to move on to the next talk in about 40 seconds.
+
+28:58.960 --> 29:02.400
+So Bala, thank you so much for taking all the time answering all the questions. And thank you,
+
+29:02.400 --> 29:08.240
+Gag, also for coming and asking also lovely questions. I suppose it was really good.
+
+29:08.960 --> 29:14.720
+Yeah, thank you. It was great seeing you. Sorry, I'm rushing because I'm being pressed for time.
+
+29:14.720 --> 29:21.360
+And I will see you both whenever I see you. OK, bye bye everyone.
+
+29:21.360 --> 29:23.280
+See you. Bye bye, Leo. Take care.
+
+29:28.000 --> 29:32.080
+Actually, I'm not sure. We are probably getting the next talk started currently,
+
+29:32.080 --> 29:36.000
+so you can probably still hear me on the stream, but it's going to take about
+
+29:36.000 --> 29:37.760
+three seconds. I'll see you after.
+
+29:37.760 --> 29:47.200
+OK, we are now off air. Thank you so much, Bala, for taking the time to answer all the questions.
+
+29:48.160 --> 29:49.120
+Thank you. Ciao.
+
+29:50.320 --> 29:54.800
+Yeah, I think no one is left in a BBB room, so I think people are probably not going to show up.
+
+29:54.800 --> 29:58.480
+So you've earned your well, your rest for tonight.
+
+29:59.920 --> 30:00.720
+OK, thanks.
+
+30:01.840 --> 30:05.040
+Mine will not come before a long time. I still have about seven hours to stream.
+
+30:05.040 --> 30:07.120
+Oh, my God. OK.
+
+30:09.360 --> 30:11.440
+All right. Well, thank you so much, Bala. See you next time.
+
+30:11.440 --> 30:14.400
+Thanks. Have a good day and I'll catch you soon. OK.
+
+30:14.960 --> 30:16.160
+Sure. Bye bye.
+
+30:16.160 --> 30:35.440
+Bye bye.
+
+30:46.960 --> 30:55.440
+Bye.
+
+30:55.440 --> 31:05.520
+Bye.
+
+31:05.520 --> 31:25.520
+Bye.
+
+31:35.520 --> 31:36.580
+Bye.
+
+32:05.520 --> 32:06.580
+Bye.
+
+32:35.520 --> 32:36.980
+Bye.
+
+33:05.520 --> 33:06.020
+Bye.
+
diff --git a/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt
new file mode 100644
index 00000000..aead066a
--- /dev/null
+++ b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main--chapters.vtt
@@ -0,0 +1,31 @@
+WEBVTT
+
+00:00:02.200 --> 00:01:41.080
+Introduction
+
+01:41.080 --> 00:02:29.520
+Org Mode
+
+02:29.520 --> 00:03:40.033
+Handwriting
+
+00:03:42.167 --> 00:03:59.720
+Combining Org Mode and handwriting
+
+03:59.720 --> 00:04:14.420
+Step 1: Write the notes by hand
+
+04:14.420 --> 00:04:23.640
+Step 2: Scan them
+
+04:23.640 --> 00:04:42.300
+Step 3: Store the document
+
+04:42.300 --> 00:05:02.280
+(Optional) Step 4: Convert the notes
+
+05:02.280 --> 00:06:30.920
+Using touch devices
+
+06:30.920 --> 00:07:12.900
+Options
diff --git a/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt
new file mode 100644
index 00000000..c07421ef
--- /dev/null
+++ b/2022/captions/emacsconf-2022-handwritten--how-to-incorporate-handwritten-notes-into-emacs-orgmode--bala-ramadurai--main.vtt
@@ -0,0 +1,323 @@
+WEBVTT captioned by jai
+
+00:00:00.000 --> 00:00:08.079
+Can you recognize this building?
+
+00:00:08.080 --> 00:00:09.799
+Some of you may have recognized this.
+
+00:00:09.800 --> 00:00:11.439
+This building is called
+
+00:00:11.440 --> 00:00:14.479
+the John Hancock building.
+
+00:00:14.480 --> 00:00:17.359
+This is in Chicago.
+
+00:00:17.360 --> 00:00:19.479
+I recently bought this building.
+
+00:00:19.480 --> 00:00:21.319
+Isn't it nice?
+
+00:00:21.320 --> 00:00:23.239
+Heavens no!
+
+00:00:23.240 --> 00:00:27.639
+I am in my home in Pune in India.
+
+00:00:27.640 --> 00:00:29.159
+I am Bala Ramadurai,
+
+00:00:29.160 --> 00:00:33.559
+an author, professor, and an innovation coach.
+
+00:00:33.560 --> 00:00:35.999
+Hello and welcome to my talk on
+
+00:00:36.000 --> 00:00:39.559
+“How to incorporate handwritten notes
+
+00:00:39.560 --> 00:00:42.279
+into Emacs Org Mode”
+
+00:00:42.280 --> 00:00:45.919
+Now, why did I show you this building?
+
+00:00:45.920 --> 00:00:49.399
+The name is of interest for this talk.
+
+00:00:49.400 --> 00:00:52.359
+In the US, someone's signature is
+
+00:00:52.360 --> 00:00:55.199
+also referred to as their Hancock.
+
+00:00:55.200 --> 00:00:59.679
+Your handwriting is pretty much part of your identity.
+
+00:00:59.680 --> 00:01:03.119
+It is as fundamental as that.
+
+00:01:03.120 --> 00:01:07.599
+Of course, there is a movie by that name too, Hancock.
+
+00:01:07.600 --> 00:01:11.999
+I could have started with a clip from that movie,
+
+00:01:12.000 --> 00:01:15.879
+but in spite of Will Smith and Charlize Theron,
+
+00:01:15.880 --> 00:01:24.159
+both my favorite movie stars in the movie, I hated it.
+
+00:01:24.160 --> 00:01:35.159
+[Clip from Hancock (2008)]
+
+00:01:35.160 --> 00:01:40.479
+But I digress.
+
+00:01:40.480 --> 00:01:44.199
+Handwriting has been a fascinating topic for me.
+
+00:01:44.200 --> 00:01:49.719
+However, note-taking has always been on my computer,
+
+00:01:49.720 --> 00:01:54.119
+in particular, in the Emacs Org Mode system.
+
+00:01:54.120 --> 00:01:57.359
+It is so easy to note down anything,
+
+00:01:57.360 --> 00:01:59.839
+add a schedule, add a deadline,
+
+00:01:59.840 --> 00:02:04.279
+search anything you want, link anything you want,
+
+00:02:04.280 --> 00:02:07.919
+export it to any format, track what you've been doing,
+
+00:02:07.920 --> 00:02:12.559
+clock your tasks, and on and on and on.
+
+00:02:12.560 --> 00:02:15.519
+It's such a squeaky-clean system to
+
+00:02:15.520 --> 00:02:17.559
+track everything and link it to
+
+00:02:17.560 --> 00:02:20.799
+anything from the digital world.
+
+00:02:20.800 --> 00:02:24.639
+Sharing the original notes is still a pain in the rear,
+
+00:02:24.640 --> 00:02:29.359
+but for personal stuff, it's awesome.
+
+00:02:29.360 --> 00:02:32.639
+But then what about handwriting?
+
+00:02:32.640 --> 00:02:35.639
+Research seems to suggest that handwritten notes
+
+00:02:35.640 --> 00:02:40.199
+can enhance clarity of thought, retention,
+
+00:02:40.200 --> 00:02:50.559
+sometimes even getting rid of your worries.
+
+00:02:50.560 --> 00:03:06.399
+[Fried, C. B. (2008). In-class laptop use and
+its effects on student learning]
+
+00:03:06.400 --> 00:03:13.639
+[Speaker displays articles on Note-taking]
+
+00:03:13.640 --> 00:03:17.839
+My experience seems to agree with that too.
+
+00:03:17.840 --> 00:03:21.199
+As a professor, my fear has always been
+
+00:03:21.200 --> 00:03:25.199
+this quote, “Lecturing is that mysterious process
+
+00:03:25.200 --> 00:03:29.239
+by means of which the contents of the notebook
+
+00:03:29.240 --> 00:03:31.879
+of the professor are transferred
+
+00:03:31.880 --> 00:03:34.919
+through the instrument of the fountain pen
+
+00:03:34.920 --> 00:03:37.279
+to the notebook of the student
+
+00:03:37.280 --> 00:03:40.639
+without passing through the mind of either.”
+
+00:03:40.640 --> 00:03:45.679
+Hmmm... So, question — How do we combine
+
+00:03:45.680 --> 00:03:48.159
+the efficient Org Mode system
+
+00:03:48.160 --> 00:03:53.719
+with the effective handwritten note-taking system?
+
+00:03:53.720 --> 00:03:56.799
+Merge the systems together. Absolutely.
+
+00:03:56.800 --> 00:03:59.359
+How do you do that?
+
+00:03:59.360 --> 00:04:03.679
+Step 1: Write the notes by hand
+
+00:04:03.680 --> 00:04:06.079
+on a notebook. Pen, pencil.
+
+00:04:06.080 --> 00:04:08.999
+Keep some convention for yourselves
+
+00:04:09.000 --> 00:04:13.039
+for tracking tasks like a star or an asterisk.
+
+00:04:13.040 --> 00:04:16.399
+Step 2: Scan them using
+
+00:04:16.400 --> 00:04:18.559
+your favourite mobile app.
+
+00:04:18.560 --> 00:04:23.439
+I recommend Adobe Scan or Dropbox.
+
+00:04:23.440 --> 00:04:29.999
+Step 3: store the document as a JPG file
+
+00:04:30.000 --> 00:04:32.679
+into a folder called Inbox.
+
+00:04:32.680 --> 00:04:37.759
+Make sure this syncs into a cloud storage folder
+
+00:04:37.760 --> 00:04:39.479
+and your Org Mode system
+
+00:04:39.480 --> 00:04:41.119
+has access to this folder.
+
+00:04:41.120 --> 00:04:45.919
+(Optional) Step 4: convert the notes into text
+
+00:04:45.920 --> 00:04:49.319
+using Google Keep or just type
+
+00:04:49.320 --> 00:04:51.519
+the damn thing one more time.
+
+00:04:51.520 --> 00:04:54.919
+Then you can process that
+
+00:04:54.920 --> 00:04:56.239
+in your Org Mode system
+
+00:04:56.240 --> 00:04:59.639
+as you always do in whatever
+
+00:04:59.640 --> 00:05:02.119
+is there in your inbox.
+
+00:05:02.120 --> 00:05:06.119
+But, three steps or four before I get access
+
+00:05:06.120 --> 00:05:09.399
+to my notes and into my Org Mode?
+
+00:05:09.400 --> 00:05:11.639
+What a precious waste of time.
+
+00:05:11.640 --> 00:05:14.119
+I'd rather be tinkering with my
+
+00:05:14.120 --> 00:05:18.799
+config file in that time, correct?
+
+00:05:18.800 --> 00:05:19.359
+Boy...
+
+00:05:19.360 --> 00:05:24.919
+Get or buy or gift or convince your partner,
+
+00:05:24.920 --> 00:05:29.719
+parent, or anybody else to gift yourself
+
+00:05:29.720 --> 00:05:31.959
+a touch-enabled large device.
+
+00:05:31.960 --> 00:05:37.879
+Then use an app like OneNote to write notes
+
+00:05:37.880 --> 00:05:41.439
+on the device and link the handwritten note
+
+00:05:41.440 --> 00:05:46.239
+directly into Org Mode by copying the link.
+
+00:05:46.240 --> 00:05:54.079
+You can use a shortcut like Ctrl-1
+
+00:05:54.080 --> 00:05:59.479
+to mark the todos, but that means it remains
+
+00:05:59.480 --> 00:06:05.159
+only on OneNote ecosystem, the todos.
+
+00:06:05.160 --> 00:06:14.919
+You can use the same app to also convert
+
+00:06:14.920 --> 00:06:18.319
+the handwritten note into text
+
+00:06:18.320 --> 00:06:23.559
+just by the click of a button.
+
+00:06:23.560 --> 00:06:27.359
+As a bonus, you can even include screenshots
+
+00:06:27.360 --> 00:06:30.919
+from your online meetings.
+
+00:06:30.920 --> 00:06:33.439
+I like both my options.
+
+00:06:33.440 --> 00:06:36.439
+Option 1: use a regular notebook,
+
+00:06:36.440 --> 00:06:40.839
+scan and process them into my inbox.
+
+00:06:40.840 --> 00:06:44.559
+Option 2: write the notes in a digital device
+
+00:06:44.560 --> 00:06:46.479
+and convert them into text.
+
+00:06:46.480 --> 00:06:52.479
+Or, third option, I appeal to thee,
+
+00:06:52.480 --> 00:06:56.999
+oh great community, can you please build a package
+
+00:06:57.000 --> 00:07:00.959
+inside Org Mode that recognises handwriting
+
+00:07:00.960 --> 00:07:10.039
+to export it into our Org Mode, Emacs Org Mode.
+
+00:07:10.040 --> 00:07:38.640
+Thank you so much for your attention. Bye.
diff --git a/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt
new file mode 100644
index 00000000..7f4c42b6
--- /dev/null
+++ b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--answers.vtt
@@ -0,0 +1,554 @@
+WEBVTT
+
+00:01.000 --> 00:01.840
+Okay, excellent.
+
+00:01.840 --> 00:04.000
+I think we are live on stream.
+
+00:05.320 --> 00:06.360
+Yuchen is here with us.
+
+00:06.360 --> 00:08.560
+Thanks for the great talk, Yuchen.
+
+00:08.560 --> 00:11.840
+For the questions, people are welcome to post them on IRC
+
+00:11.840 --> 00:12.680
+or on the pad.
+
+00:13.560 --> 00:17.000
+And we will also open this big blue button room up
+
+00:17.000 --> 00:19.560
+in a few minutes if people want to join here
+
+00:19.560 --> 00:22.680
+and ask Yuchen the questions directly.
+
+00:22.680 --> 00:30.680
+So yeah, thanks again and take it away.
+
+00:30.680 --> 00:53.680
+Yeah, thanks.
+
+01:00.680 --> 01:29.680
+Okay.
+
+01:29.680 --> 01:33.000
+Well, I guess while we wait for some other audience questions
+
+01:33.000 --> 01:36.200
+to start trickling in, I wonder,
+
+01:37.280 --> 01:39.800
+not having yet watched your talk, obviously,
+
+01:39.800 --> 01:42.120
+because it's been behind the scenes,
+
+01:42.120 --> 01:44.320
+I wonder if your system works
+
+01:44.320 --> 01:46.040
+with offline documentation as well,
+
+01:46.040 --> 01:49.200
+because I remember seeing earlier
+
+01:49.200 --> 01:52.520
+some other Haskell-related workflows
+
+01:52.520 --> 01:56.000
+where people would have downloaded the entirety
+
+01:56.000 --> 02:00.280
+of the Hackage documentations
+
+02:00.280 --> 02:03.280
+and yeah, be able to browse them locally when offline.
+
+02:06.120 --> 02:06.960
+Yeah, for sure.
+
+02:06.960 --> 02:17.960
+I mean, that's one of the points of writing these packages.
+
+02:17.960 --> 02:26.520
+So the Hadock org documentation is meant for generation
+
+02:26.520 --> 02:30.120
+of org files of these Haskell packages
+
+02:30.120 --> 02:33.160
+so that you can have them locally on your computer
+
+02:33.160 --> 02:35.240
+rather than having to rely on Hackage,
+
+02:36.400 --> 02:40.440
+which is online, which is on the web.
+
+02:40.440 --> 02:48.720
+The other one, HCL, the code explorer, it's self-hosted.
+
+02:48.720 --> 02:54.920
+So all you need to do is to download the packages
+
+02:54.920 --> 02:58.840
+you want to index and then index them on the server
+
+02:58.840 --> 03:02.120
+or on the local host and then, yeah,
+
+03:02.120 --> 03:05.520
+then you can unplug your Ethernet cable
+
+03:05.520 --> 03:10.880
+and explore Haskell code on your computer.
+
+03:10.880 --> 03:35.880
+Nice, thanks, that makes sense.
+
+03:41.880 --> 03:45.640
+Maybe another question while we wait for other questions
+
+03:45.640 --> 03:48.800
+from the audience and again, not having had a chance
+
+03:48.800 --> 03:50.720
+to watch your talk yet.
+
+03:50.720 --> 03:53.280
+What do you think is the state of, I guess,
+
+03:53.280 --> 03:56.760
+integration of Haskell, both, I guess,
+
+03:56.760 --> 04:01.080
+the language, the packages, the tooling, all that stuff,
+
+04:01.080 --> 04:05.160
+integration with Emacs today in like 2022?
+
+04:05.160 --> 04:07.480
+Because I'm also, I do have a Haskell background,
+
+04:07.480 --> 04:10.120
+but I haven't done much of it in a few years.
+
+04:10.120 --> 04:13.200
+And back when I do remember some pain points,
+
+04:13.200 --> 04:16.360
+including when trying to integrate it into Emacs.
+
+04:16.360 --> 04:19.520
+So I do wonder what the general state of things
+
+04:19.520 --> 04:25.040
+are, if you could maybe answer quickly, I guess.
+
+04:25.040 --> 04:26.520
+Not in great detail necessarily.
+
+04:29.640 --> 04:33.480
+OK, yeah, I mean, I haven't tried all the packages,
+
+04:33.480 --> 04:34.880
+Haskell-related packages.
+
+04:34.880 --> 04:40.680
+And I think the most prominent ones are Haskell mode
+
+04:40.680 --> 04:45.080
+and Haskell language servers through language server
+
+04:45.080 --> 04:49.880
+packages like eglots or LSP mode.
+
+04:49.880 --> 04:56.280
+Yeah, I mean, Haskell mode is like,
+
+04:56.280 --> 05:03.160
+it feels to me like a standard language mode where
+
+05:03.160 --> 05:09.280
+it offers font locking, syntax highlighting, I mean,
+
+05:09.280 --> 05:18.520
+and REPL, like Python mode, and limited documentation
+
+05:18.520 --> 05:25.400
+and cross-references, which is, I mean, as I mentioned,
+
+05:25.400 --> 05:30.360
+that's why I did this HCL package.
+
+05:30.360 --> 05:38.280
+And the language server is like, it is also pretty standard
+
+05:38.280 --> 05:42.440
+and offering all the language server things, most of them,
+
+05:42.440 --> 05:43.200
+I think.
+
+05:43.200 --> 05:46.320
+But it's very slow.
+
+05:46.320 --> 05:49.520
+It's slower than any other language server I've used.
+
+05:49.520 --> 05:55.440
+And yeah, and it doesn't really work
+
+05:55.440 --> 06:03.360
+with cross-reference, which I also mentioned in the talk.
+
+06:03.360 --> 06:11.120
+So yeah, that's the two main packages
+
+06:11.120 --> 06:12.720
+I think people use most.
+
+06:12.720 --> 06:23.520
+And yeah, I can't think of anything else that's very
+
+06:23.520 --> 06:24.600
+prominent.
+
+06:28.280 --> 06:29.120
+Great, thanks.
+
+06:33.040 --> 06:34.400
+Oh, OK, I just remembered.
+
+06:34.400 --> 06:39.200
+There's also the Haskell TNG package.
+
+06:39.200 --> 06:41.120
+But I haven't looked into it yet.
+
+06:41.120 --> 06:47.960
+It's, if I remember correctly, it's like in the GNU ELP,
+
+06:47.960 --> 06:50.080
+is it in GNU ELP or non-GNU?
+
+06:50.080 --> 06:50.840
+Let me have a look.
+
+06:58.280 --> 07:00.200
+Right, it's also in non-GNU.
+
+07:00.200 --> 07:02.680
+Never mind.
+
+07:02.680 --> 07:07.200
+Yeah, I think it's a new, up-and-coming Haskell media
+
+07:07.200 --> 07:10.480
+mode, an experimental rewrite of Haskell mode.
+
+07:10.480 --> 07:12.040
+That's the description.
+
+07:19.080 --> 07:21.800
+Cool, and have you had a chance to maybe play around
+
+07:21.800 --> 07:24.640
+with that a little bit and see how
+
+07:24.640 --> 07:27.440
+it compares with the traditional, the older,
+
+07:27.440 --> 07:28.520
+the existing Haskell mode?
+
+07:32.960 --> 07:34.120
+No, I haven't yet.
+
+07:34.120 --> 07:35.680
+OK.
+
+08:05.000 --> 08:07.160
+Yeah, I can't think of anything else that's very prominent.
+
+08:07.160 --> 08:09.160
+I haven't looked into it yet.
+
+08:09.160 --> 08:12.120
+It's, if I remember correctly, it's like in the GNU ELP.
+
+08:12.120 --> 08:15.440
+Yeah, I think it's a new, up-and-coming Haskell
+
+08:15.440 --> 08:19.400
+media mode, an experimental rewrite of Haskell mode.
+
+08:19.400 --> 08:20.280
+That's the description.
+
+08:20.280 --> 08:22.520
+I haven't yet, I haven't looked into it,
+
+08:22.520 --> 08:25.480
+and I think it's a new, up-and-coming Haskell
+
+08:25.480 --> 08:28.920
+media mode, an experimental rewrite of Haskell mode.
+
+08:28.920 --> 08:31.680
+Yeah, I haven't yet, I haven't looked into it,
+
+08:31.680 --> 08:33.740
+you
+
+09:01.680 --> 09:17.280
+One question that just occurred to me, I guess, about the state of like literate Haskell and
+
+09:17.280 --> 09:22.960
+potential integration with org mode. I've actually never, I haven't put too much thought into this,
+
+09:22.960 --> 09:28.000
+but it just occurred to me that Haskell, as you likely know, already has a literate Haskell mode
+
+09:28.000 --> 09:36.000
+with like.LHS files. And I was wondering, I guess, if you've tried maintaining or writing
+
+09:36.000 --> 09:41.200
+any projects in literate Haskell, at least not, if not entirely, then with a considerable amount
+
+09:41.200 --> 09:50.400
+of source code in that approach and how it might compare, for example, to something like Babel,
+
+09:50.400 --> 09:58.160
+I guess, which is very much more documentation oriented with like code blocks intermingled.
+
+10:01.280 --> 10:10.880
+Okay. Yeah, I'm afraid I haven't really used the literate Haskell. I heard of it. And if I want
+
+10:11.600 --> 10:17.680
+to like write literate programming, I would, I mean, I would go for org mode and org Babel,
+
+10:17.680 --> 10:24.720
+indeed, first before, yeah, before the more language specific mode.
+
+10:28.240 --> 10:34.080
+Right. That makes sense. I just thought it's interesting because Haskell is, I guess,
+
+10:34.080 --> 10:39.200
+one of the fewer languages where it actually does have its own literate mode, if you will,
+
+10:39.200 --> 10:43.600
+and yeah, there might be something interesting there to think about or try exploring at some
+
+10:43.600 --> 10:55.040
+point. Yeah, yeah, definitely. Yeah. Yeah, I will look into it.
+
+10:55.040 --> 11:10.960
+Poo.
+
+11:25.040 --> 11:53.740
+Yeah, so I'm reading about this Haskell TNG mode.
+
+11:53.740 --> 11:57.400
+It looks like it can also jump to definition
+
+11:57.400 --> 12:03.440
+outside of the project using a thing uses
+
+12:03.440 --> 12:09.560
+a tool called HS Inspect, which is also
+
+12:09.560 --> 12:15.000
+a tool using the GHC API.
+
+12:15.000 --> 12:17.480
+Yeah, not sure how it is achieved, though.
+
+12:17.480 --> 12:21.520
+Bren.
+
+12:48.480 --> 12:51.360
+I think I have a question on IRC.
+
+12:51.360 --> 12:53.320
+Is the indexing faster?
+
+12:53.320 --> 12:55.400
+And when re-indexing, would it be too slow
+
+12:55.400 --> 12:56.480
+to re-index on demand?
+
+13:01.560 --> 13:05.120
+Sorry, what's the question again?
+
+13:05.120 --> 13:09.240
+The question is, is the indexing faster when re-indexing?
+
+13:09.240 --> 13:11.560
+Would it be too slow to re-index on demand?
+
+13:11.560 --> 13:14.960
+I think this might be for the other talk stream.
+
+13:14.960 --> 13:15.920
+I'm not entirely sure.
+
+13:15.920 --> 13:21.640
+So yeah, I mean, it sounds relevant to this talk, though.
+
+13:21.640 --> 13:23.600
+Oh, OK, then, yeah, OK, sorry.
+
+13:23.600 --> 13:26.600
+I'm a little scatterbrained.
+
+13:26.600 --> 13:28.320
+No, it's OK.
+
+13:28.320 --> 13:36.760
+Oh, yeah, yeah, re-indexing, I mean, I don't know, actually,
+
+13:36.760 --> 13:41.680
+because I haven't started implementing
+
+13:41.680 --> 13:44.400
+on-demand re-indexing yet.
+
+13:44.400 --> 13:49.320
+And I'm still a bit hazy about whether it strictly
+
+13:49.320 --> 13:53.520
+requires recompiling when re-indexing.
+
+13:53.520 --> 14:03.440
+And I mean, but I do think it's like the main workhorse
+
+14:03.440 --> 14:09.400
+of this process would be the GHC API compiling process,
+
+14:09.400 --> 14:15.760
+whether it can avoid recompilation efficiency.
+
+14:15.760 --> 14:23.680
+When, yeah, and I think it can.
+
+14:23.680 --> 14:28.720
+It has some optimization with recompilation.
+
+14:28.720 --> 14:35.480
+And also, ideally, you should start
+
+14:35.480 --> 14:39.800
+using a bit less heavy compilation,
+
+14:39.800 --> 14:45.640
+like this HIE,.hie files, instead of compiling
+
+14:45.640 --> 14:49.280
+the whole thing, instead of requiring
+
+14:49.280 --> 14:55.120
+the compilation of the whole project from using
+
+14:55.120 --> 14:56.000
+the whole pipeline.
+
+14:56.000 --> 15:01.760
+So HIE, I think, is more or less the only front-end part.
+
+15:01.760 --> 15:05.800
+Yeah, and if, I mean, that's one of the things,
+
+15:05.800 --> 15:10.520
+like, main to-dos for this project, for the HCL project,
+
+15:10.520 --> 15:16.920
+to replace the cabal helper with using.hie
+
+15:16.920 --> 15:18.920
+that I haven't looked into yet.
+
+15:22.920 --> 15:23.440
+Awesome.
+
+15:26.480 --> 15:29.000
+Yeah, sounds interesting and looking forward to it.
+
+15:29.000 --> 15:32.240
+I think we have about, like, less than a minute or so
+
+15:32.240 --> 15:34.640
+for the live Q&A. Of course, people
+
+15:34.640 --> 15:37.520
+are welcome to keep asking questions,
+
+15:37.520 --> 15:40.240
+whether on the pad or on IRC.
+
+15:40.240 --> 15:43.520
+And yeah, so after this, Q&A concludes.
+
+15:43.520 --> 15:44.920
+This is our last talk of today.
+
+15:44.920 --> 15:49.080
+So we would appreciate it if people would join us
+
+15:49.080 --> 15:54.120
+on the general stream for the closing remarks of today.
+
+15:54.120 --> 15:55.720
+And yeah, we'll still have tomorrow
+
+15:55.720 --> 15:57.440
+to look forward to the next one.
+
+15:57.440 --> 15:59.640
+We'll still have tomorrow to look forward to, of course.
+
+15:59.640 --> 16:01.160
+OK.
+
+16:25.960 --> 16:28.040
+I see that EmacsConf just left.
+
+16:28.040 --> 16:30.400
+Does that mean the Q&A is over?
+
+16:30.400 --> 16:31.680
+Yep, I believe so.
+
+16:31.680 --> 16:35.760
+So I think we should head on over to the GenStream.
+
+16:35.760 --> 16:36.800
+OK, cool.
+
+16:36.800 --> 16:39.280
+Yeah, I'll go there as well.
+
+16:39.280 --> 16:41.400
+All right, thanks a lot for your questions.
+
+16:41.400 --> 16:43.480
+Yep, and thank you, Yuchun, for your great talk.
+
+16:43.480 --> 16:45.000
+Thank you.
+
+16:45.000 --> 16:46.440
+Thanks, bye-bye.
+
+16:46.440 --> 16:47.200
+Bye.
+
+16:47.200 --> 17:03.240
+You are currently the only person in this conference.
+
diff --git a/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt
new file mode 100644
index 00000000..7f9272e6
--- /dev/null
+++ b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main--chapters.vtt
@@ -0,0 +1,117 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:30.520
+What is Haskell?
+
+12
+00:00:30.520 --> 00:01:33.640
+Parts of a Haskell program
+
+34
+00:01:33.640 --> 00:02:13.400
+Example of Haskell source code
+
+44
+00:02:13.400 --> 00:02:37.160
+Writing Haskell like Lisp
+
+52
+00:02:37.160 --> 00:03:53.760
+What is a code explorer?
+
+79
+00:03:53.760 --> 00:04:56.240
+Prior art
+
+97
+00:04:56.240 --> 00:05:46.080
+Haskell mode
+
+111
+00:05:46.080 --> 00:06:43.560
+Jumping to declarations
+
+128
+00:06:43.560 --> 00:07:24.840
+Finding references
+
+135
+00:07:24.840 --> 00:08:20.520
+The Haskell language server
+
+150
+00:08:20.520 --> 00:08:54.960
+Hoogle and Hackage
+
+162
+00:08:54.960 --> 00:09:34.600
+Haskell Code Explorer
+
+176
+00:09:34.600 --> 00:10:42.080
+Demo of Haskell Code Explorer
+
+189
+00:10:42.080 --> 00:12:35.480
+Learning about monads
+
+214
+00:12:35.480 --> 00:13:39.920
+Web client
+
+230
+00:13:39.920 --> 00:14:47.800
+User freedom
+
+246
+00:14:47.800 --> 00:15:38.560
+hc.el
+
+259
+00:15:38.560 --> 00:16:46.520
+Demo
+
+282
+00:16:46.520 --> 00:17:38.920
+Declarations
+
+293
+00:17:38.920 --> 00:18:19.160
+Finding definitions and references
+
+302
+00:18:19.160 --> 00:19:22.360
+Eldoc
+
+317
+00:19:22.360 --> 00:20:32.560
+Searching for identifiers
+
+330
+00:20:32.560 --> 00:22:01.440
+Help buffer integration
+
+350
+00:22:01.440 --> 00:23:28.840
+Haddock
+
+371
+00:23:28.840 --> 00:24:30.480
+Servant
+
+388
+00:24:30.480 --> 00:25:50.320
+Org
+
+408
+00:25:50.320 --> 00:26:19.280
+Links
+
+415
+00:26:19.280 --> 00:28:41.160
+Navigation
+
+449
+00:28:41.160 --> 00:29:39.520
+Going the other direction
diff --git a/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt
new file mode 100644
index 00000000..e2bd489c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-haskell--haskell-code-exploration-with-emacs--yuchen-pei--main.vtt
@@ -0,0 +1,1354 @@
+WEBVTT captioned by anush
+
+00:00.000 --> 00:03.499
+Today, I will talk about Haskell code exploration for Emacs.
+
+00:03.500 --> 00:06.499
+What is Haskell? It is a purely functional language.
+
+00:06.500 --> 00:09.499
+For example, every value in Haskell is immutable.
+
+00:09.500 --> 00:12.999
+And it is the main compiler of Haskell, GHC.
+
+00:13.000 --> 00:15.999
+It provides API for the whole compilation pipeline.
+
+00:16.000 --> 00:00:18.324
+For example, the tools mentioned in this talk,
+
+00:00:18.424 --> 00:00:19.999
+including hcel and haddorg,
+
+00:20.000 --> 00:24.499
+they use, they heavily utilize the GHC front-end API
+
+00:24.500 --> 00:00:26.644
+for parsing and understanding
+
+00:00:26.744 --> 00:00:29.499
+the identifiers in Haskell source files.
+
+00:29.500 --> 00:00:31.444
+Roughly speaking,
+
+00:00:31.544 --> 00:00:34.564
+a Haskell program consists of several parts.
+
+00:00:34.664 --> 00:00:36.964
+it begins with some front matters, including,
+
+00:00:37.064 --> 00:00:39.924
+for example, language extensions,
+
+00:00:40.024 --> 00:00:43.964
+which are optional language features one might want to use
+
+00:00:44.064 --> 00:00:48.364
+for convenience.
+
+00:00:48.464 --> 00:00:52.499
+The front matters also contain module exports.
+
+00:52.500 --> 00:00:55.684
+So for example, here we define,
+
+00:00:55.784 --> 00:00:57.999
+we declare module F2Md.Config
+
+00:58.000 --> 00:01:00.884
+for this Haskell source file,
+
+00:01:00.984 --> 00:01:02.999
+which exports these four identifiers
+
+01:03.000 --> 01:07.499
+that other source files can use when importing F2Md.Config.
+
+01:07.500 --> 00:01:10.684
+And the next will be
+
+00:01:10.784 --> 00:01:13.999
+a block of imports so that we can use libraries
+
+01:14.000 --> 01:16.999
+and identifiers in these libraries.
+
+01:17.000 --> 00:01:21.644
+The bulk of a Haskell source file normally is
+
+00:01:21.744 --> 00:01:22.999
+a list of declarations,
+
+01:23.000 --> 01:25.999
+including values, types, and instances, and so on.
+
+01:26.000 --> 00:01:29.084
+The difference between a value and a type is that
+
+00:01:29.184 --> 00:01:30.499
+the type of a value is a type,
+
+01:30.500 --> 00:01:33.964
+and the type of a type is a kind.
+
+00:01:34.064 --> 00:01:38.484
+For example, here's a small block of Haskell source code.
+
+00:01:38.584 --> 00:01:41.404
+We define Range type
+
+00:01:41.504 --> 00:01:44.999
+from a lower-end integer to a higher-end integer.
+
+01:45.000 --> 00:01:51.364
+We also declare a value r of the type Range,
+
+00:01:51.464 --> 00:01:53.999
+which is Range from 2 to 7,
+
+01:54.000 --> 00:02:01.004
+because in Haskell, we like to--
+
+00:02:01.104 --> 00:02:03.999
+by default, functions can be curried,
+
+02:04.000 --> 00:02:09.804
+which basically means, by default, we want to utilize
+
+00:02:09.904 --> 00:02:11.999
+the partial application of functions.
+
+00:02:12.000 --> 00:02:17.284
+We don't require parens surrounding arguments
+
+00:02:17.384 --> 00:02:19.364
+when invoking a function.
+
+00:02:19.464 --> 00:02:22.724
+That makes it possible, if you want,
+
+00:02:22.725 --> 00:02:24.999
+to write Haskell like Lisp
+
+02:25.000 --> 02:27.999
+by adding a bit of redundant parens.
+
+02:28.000 --> 00:02:30.044
+So for example,
+
+00:02:30.144 --> 00:02:33.684
+here are two blocks of code, one Lisp, one Haskell,
+
+00:02:33.784 --> 00:02:35.999
+and they look quite similar to each other.
+
+02:36.000 --> 02:37.999
+What is a code explorer?
+
+02:38.000 --> 00:02:39.444
+A code explorer is a tool
+
+00:02:39.544 --> 00:02:42.624
+to browse its code base to its code comprehension.
+
+00:02:42.724 --> 00:02:45.324
+Code explorer commonly comes with
+
+00:02:45.424 --> 00:02:46.999
+several functionalities or features,
+
+02:47.000 --> 00:02:49.244
+including a cross-referencer,
+
+00:02:49.344 --> 00:02:52.999
+which allows going to definitions of an identifier at points
+
+02:53.000 --> 00:02:56.444
+or looking up references of an identifier,
+
+00:02:56.544 --> 00:02:57.999
+like where it is used.
+
+02:58.000 --> 03:03.999
+So the example in Emacs would be xref.
+
+03:04.000 --> 00:03:07.604
+Code explorer also would be able to show you
+
+00:03:07.704 --> 00:03:09.999
+documentation and signatures of identifiers at points.
+
+03:10.000 --> 00:03:13.884
+In Emacs, that would be eldoc.
+
+00:03:13.984 --> 00:03:16.999
+It also commonly allows you to search for identifiers.
+
+03:17.000 --> 00:03:19.884
+Something like that in Emacs
+
+00:03:19.984 --> 00:03:21.999
+could be describe-function and find-function.
+
+03:22.000 --> 00:03:24.684
+Code explorer is normally
+
+00:03:24.784 --> 00:03:27.364
+quite often implemented in two parts,
+
+00:03:27.464 --> 00:03:27.999
+the indexer and the server,
+
+03:28.000 --> 00:03:32.484
+where the indexer parses the source code files,
+
+00:03:32.584 --> 00:03:33.999
+indexes the identifiers,
+
+03:34.000 --> 00:03:36.284
+and stores the information of identifiers
+
+00:03:36.384 --> 00:03:37.999
+like the definition, size, and the currencies,
+
+03:38.000 --> 03:41.999
+either in databases or in files.
+
+03:42.000 --> 00:03:44.444
+The other part is the server,
+
+00:03:44.544 --> 00:03:48.999
+which uses the database created by the indexer
+
+03:49.000 --> 00:03:53.004
+to serve the information of the identifier.
+
+00:03:53.104 --> 00:03:57.004
+Before I present my solution to code exploring,
+
+00:03:57.104 --> 00:04:00.999
+some description of prior art is in order.
+
+04:01.000 --> 00:04:05.284
+There are several tools that you can use
+
+00:04:05.384 --> 00:04:07.999
+to aid code exploration,
+
+04:08.000 --> 00:04:13.444
+including tech-based tools like hasktags and hs-tags.
+
+00:04:13.544 --> 00:04:15.484
+The limitation with these tools
+
+00:04:15.584 --> 00:04:17.999
+is they are focused on the current projects only
+
+04:18.000 --> 00:04:19.604
+and do not work
+
+00:04:19.704 --> 00:04:25.999
+for cross-packaging reference and definition.
+
+04:26.000 --> 00:04:31.044
+Another problem with the tag-based tools is
+
+00:04:31.045 --> 00:04:34.684
+they might not handle symbols with the same name properly.
+
+00:04:34.784 --> 00:04:35.999
+Sometimes they get confused,
+
+04:36.000 --> 00:04:43.324
+and they ask you to choose which definition,
+
+00:04:43.424 --> 00:04:45.924
+what is the correct definition site,
+
+00:04:46.024 --> 00:04:49.244
+even though the occurrence of the symbol
+
+00:04:49.344 --> 00:04:54.999
+or the symbol at point has only one definition ambiguously.
+
+04:55.000 --> 04:57.999
+Another tool is the haskell-mode.
+
+04:58.000 --> 00:05:02.684
+It has some limited support for eldoc
+
+00:05:02.784 --> 00:05:06.604
+by displaying the signature of an identifier at points,
+
+00:05:06.704 --> 00:05:11.764
+but the identifier has to be something
+
+00:05:11.864 --> 00:05:14.999
+that is commonly known or sort of built-in
+
+05:15.000 --> 05:17.999
+or come from the base library of Haskell.
+
+05:18.000 --> 00:05:20.244
+So for example,
+
+00:05:20.344 --> 00:05:24.244
+it works for common functions like head and tail.
+
+00:05:24.344 --> 00:05:26.999
+And you can see that the signature is displayed here.
+
+05:27.000 --> 00:05:29.564
+However, it does not work for,
+
+00:05:29.664 --> 00:05:31.804
+let's say, IO. IO is a type.
+
+00:05:31.904 --> 00:05:32.999
+Maybe that's the reason.
+
+05:33.000 --> 00:05:37.324
+Let's find another function
+
+00:05:37.424 --> 00:05:39.999
+that's not from the base library.
+
+05:40.000 --> 05:41.999
+toJSON is from the Aeson library,
+
+05:42.000 --> 05:46.999
+so no signature is displayed here.
+
+05:47.000 --> 00:05:51.164
+It also provides
+
+00:05:51.264 --> 00:05:53.324
+some sort of goto-declaration functionality
+
+00:05:53.424 --> 00:05:56.324
+to jump to any declaration in a file.
+
+00:05:56.424 --> 00:06:00.564
+To do that, one has to first run haskell-decl-scan-mode
+
+00:06:00.664 --> 00:06:02.999
+to enter this minor mode.
+
+06:03.000 --> 00:06:08.044
+Then we can run imenu to go to any definition,
+
+00:06:08.144 --> 00:06:10.999
+to go to any declaration, like getHomeR.
+
+06:11.000 --> 00:06:13.724
+Apparently, after running that,
+
+00:06:13.824 --> 00:06:15.999
+we are able to go to definition.
+
+06:16.000 --> 06:18.999
+So for example, let's see,
+
+06:19.000 --> 06:21.999
+we want to find definition of getCityJR.
+
+06:22.000 --> 00:06:25.524
+And indeed, it works
+
+00:06:25.624 --> 00:06:28.524
+if it's within the same source file, of course.
+
+00:06:28.624 --> 00:06:31.999
+It still does not work for cross-packaging identifiers.
+
+06:32.000 --> 00:06:36.924
+So HandlerFor is probably an identifier from servant.
+
+00:06:37.024 --> 00:06:39.999
+Or no, not necessarily servant. Maybe WAI.
+
+06:40.000 --> 00:06:43.404
+Anyway, it's another library.
+
+00:06:43.504 --> 00:06:50.404
+And how about find-references?
+
+00:06:50.504 --> 00:07:01.124
+find-references also works somehow for this file.
+
+00:07:01.224 --> 00:07:06.684
+How about WidgetFor?
+
+00:07:06.784 --> 00:07:13.644
+It works for WidgetFor too.
+
+00:07:13.744 --> 00:07:17.999
+It has some support for goto-definition and find-references.
+
+07:18.000 --> 07:25.999
+But as usual, it does not support such things cross-package.
+
+07:26.000 --> 00:07:27.364
+And finally, we have
+
+00:07:27.365 --> 00:07:30.999
+the Sledgehammer HLS Haskell language server.
+
+07:31.000 --> 07:32.999
+It can be used with EGLOT.
+
+07:33.000 --> 00:07:40.804
+But the problem with HLS, HLS has many many features
+
+00:07:40.904 --> 00:07:42.844
+because it is a language server,
+
+00:07:42.944 --> 00:07:50.999
+like renaming, like eldoc for standard libraries, and so on.
+
+07:51.000 --> 07:56.999
+But the problem with HLS is, one, that it is very, very slow.
+
+07:57.000 --> 07:59.999
+And I wouldn't use it with my laptop.
+
+08:00.000 --> 08:04.999
+And two, it also does not support cross-package referencing.
+
+08:05.000 --> 08:07.999
+In fact, there's an outstanding GitHub issue about this.
+
+08:08.000 --> 00:08:12.964
+So cross-package referencing and goto-definition
+
+00:08:13.064 --> 00:08:17.164
+is sort of a common shortfall,
+
+00:08:17.264 --> 00:08:20.999
+a common problem for these existing Haskell code explorers.
+
+08:21.000 --> 08:22.999
+Then finally, we also have hoogle and hackage.
+
+08:23.000 --> 00:08:28.284
+Hoogle is a search engine for Haskell identifiers,
+
+00:08:28.384 --> 00:08:30.644
+and the results link to Hackage,
+
+00:08:30.744 --> 00:08:33.604
+which is the Haskell documentation website
+
+00:08:33.704 --> 00:08:34.999
+for all Haskell libraries.
+
+08:35.000 --> 00:08:40.004
+Haskell Hackage has functionality
+
+00:08:40.104 --> 00:08:44.999
+where you can jump to the source code file rendered in HTML,
+
+08:45.000 --> 00:08:49.444
+and you can click on the identifiers there
+
+00:08:49.544 --> 00:08:51.524
+to jump to definitions,
+
+00:08:51.624 --> 00:08:54.044
+but it does not support find references,
+
+00:08:54.144 --> 00:08:58.999
+and it is rather basic.
+
+08:59.000 --> 00:09:01.644
+Then I learned about haskell-code-explorer,
+
+00:09:01.744 --> 00:09:04.999
+which is a fully-fledged Haskell code explorer.
+
+09:05.000 --> 00:09:07.724
+It is written by someone else.
+
+00:09:07.824 --> 00:09:09.164
+It is a web application
+
+00:09:09.264 --> 00:09:11.999
+for exploring Haskell package codebases.
+
+09:12.000 --> 00:09:16.244
+The official reference instance for haskell-code-explorer
+
+00:09:16.344 --> 00:09:18.999
+is available at this URL, which I will demo soon.
+
+09:19.000 --> 09:24.999
+What I did with these packages... I ported it to GHC 9.2.
+
+09:25.000 --> 00:09:29.044
+I renamed it to hcel because I want to focus on Emacs clients
+
+00:09:29.144 --> 00:09:30.999
+rather than JavaScript clients, which I will explain later.
+
+09:31.000 --> 09:36.999
+And I also wrote an Emacs client package, of course.
+
+09:37.000 --> 00:09:41.404
+This is what haskell-code-explorer looks like.
+
+00:09:41.504 --> 00:09:46.924
+On the homepage, it is a list of indexed packages
+
+00:09:47.024 --> 00:09:50.044
+indexed by the indexer.
+
+00:09:50.144 --> 00:09:53.844
+One can filter it by the package name
+
+00:09:53.944 --> 00:10:04.999
+or look for identifiers directly across all packages.
+
+10:05.000 --> 00:10:09.884
+Let's have a look at base. There are three versions.
+
+00:10:09.984 --> 00:10:14.999
+Let's have a look at the latest version, 4.12.0.0.
+
+10:15.000 --> 00:10:18.964
+Once entering the package view,
+
+00:10:19.064 --> 00:10:24.444
+you are shown a list of all modules by their path,
+
+00:10:24.544 --> 00:10:28.999
+as well as a tree of these module files.
+
+10:29.000 --> 00:10:32.524
+You can filter by module name or file name,
+
+00:10:32.624 --> 00:10:34.324
+or you can search for identifier within the same package
+
+00:10:34.424 --> 00:10:35.999
+or in all packages.
+
+10:36.000 --> 00:10:43.204
+Let's say we want to learn about Control.Monad.
+
+00:10:43.304 --> 00:10:46.884
+Now we are in the module view.
+
+00:10:46.984 --> 00:10:49.804
+The source file is presented to you,
+
+00:10:49.904 --> 00:10:54.999
+and it has links to identifiers.
+
+10:55.000 --> 00:11:01.804
+When you hover over them, the documentation shows up,
+
+00:11:01.904 --> 00:11:04.999
+including the signature where it is defined.
+
+11:05.000 --> 00:11:10.244
+You can go to its definition or find references.
+
+00:11:10.344 --> 00:11:20.164
+Let's say we want to go to the definition of Monad.
+
+00:11:20.264 --> 00:11:25.484
+It jumps to the definition site of the monad type class.
+
+00:11:25.584 --> 00:11:28.004
+If we click at the definition site,
+
+00:11:28.104 --> 00:11:32.124
+it brings up a list of references.
+
+00:11:32.224 --> 00:11:33.644
+On the left, you can choose
+
+00:11:33.744 --> 00:11:38.999
+which package you want to find references of monad in.
+
+11:39.000 --> 11:46.999
+Let's look at the random one, avwx.
+
+11:47.000 --> 00:11:54.044
+Here is a list of results where Monad is used in avwx.
+
+00:11:54.144 --> 00:11:57.764
+This is a module path.
+
+00:11:57.864 --> 00:12:06.324
+One can go to any of these results.
+
+00:12:06.424 --> 00:12:07.844
+We can search for things in all packages
+
+00:12:07.944 --> 00:12:09.484
+or in the current package.
+
+00:12:09.584 --> 00:12:12.999
+Let’s say I want to search for "Read"
+
+12:13.000 --> 00:12:19.244
+I think this is the "Read" that is commonly used in Haskell,
+
+00:12:19.344 --> 00:12:24.999
+the read type class for parsing strings into values.
+
+12:25.000 --> 00:12:31.004
+I think that is more or less it.
+
+00:12:31.104 --> 00:12:34.524
+That is the Haskell Code Explorer web application
+
+00:12:34.624 --> 00:12:38.204
+in all its glory.
+
+00:12:38.304 --> 00:12:40.884
+Let's go back to the slides.
+
+00:12:40.984 --> 00:12:43.364
+That was the web application,
+
+00:12:43.464 --> 00:12:46.444
+which is basically a JavaScript client
+
+00:12:46.544 --> 00:12:48.644
+that talks to the server
+
+00:12:48.744 --> 00:12:50.964
+by sending requests and receiving
+
+00:12:51.064 --> 00:12:54.999
+and parsing the JSON results or JSON responses.
+
+12:55.000 --> 00:13:02.404
+Initially, I was interested in hacking the web client.
+
+00:13:02.504 --> 00:13:04.999
+It uses the ember.js web framework.
+
+13:05.000 --> 00:13:09.844
+The first thing to do was to npm install ember-cli.
+
+00:13:09.944 --> 00:13:16.124
+It gives me 12 vulnerabilities,
+
+00:13:16.224 --> 00:13:18.999
+4 low, 2 moderate, 3 high, 3 critical.
+
+13:19.000 --> 00:13:26.084
+I don't know how often it is the case
+
+00:13:26.184 --> 00:13:32.964
+when we don't really care about these nasty vulnerabilities
+
+00:13:33.064 --> 00:13:35.999
+from Node.js or npm because they are so common.
+
+13:36.000 --> 00:13:41.044
+I don't quite like that.
+
+00:13:41.144 --> 00:13:45.364
+Another reason for favoring Emacs clients
+
+00:13:45.464 --> 00:13:48.999
+over JavaScript clients is user freedom.
+
+13:49.000 --> 00:13:53.284
+Emacs is geared towards user freedom.
+
+00:13:53.384 --> 00:14:01.564
+It allows users maximum freedom to customize or mod Emacs.
+
+00:14:01.664 --> 00:14:07.164
+I think Emacs clients can be a way to fix JavaScript traps,
+
+00:14:07.264 --> 00:14:14.244
+like using user scripts to replace non-free JavaScript.
+
+00:14:14.344 --> 00:14:19.484
+There are tools to do that, for example, like Haketilo.
+
+00:14:19.584 --> 00:14:21.404
+Why write JavaScript replacement
+
+00:14:21.504 --> 00:14:25.164
+if we can write Elisp replacement?
+
+00:14:25.264 --> 00:14:31.684
+If we overwrite all kinds of front-ends in Emacs
+
+00:14:31.784 --> 00:14:34.404
+for commonly-used web applications
+
+00:14:34.504 --> 00:14:36.999
+like Reddit, Hacker News, what have you,
+
+14:37.000 --> 00:14:40.804
+then we have an Emacs app store
+
+00:14:40.904 --> 00:14:43.604
+where we can just install these applications
+
+00:14:43.704 --> 00:14:51.084
+and browse the web more freely.
+
+00:14:51.184 --> 00:14:56.044
+Back to hcel, which is the Emacs client I wrote.
+
+00:14:56.144 --> 00:14:59.084
+I tried to reuse as much of Emacs built-ins as possible,
+
+00:14:59.184 --> 00:15:03.044
+including eldoc, for showing documentation,
+
+00:15:03.144 --> 00:15:04.764
+xref for cross-referencer,
+
+00:15:04.864 --> 00:15:06.999
+compilation-mode for showing search results of identifiers,
+
+15:07.000 --> 00:15:11.604
+outline-mode for a hierarchical view
+
+00:15:11.704 --> 00:15:14.284
+of package module identifiers,
+
+00:15:14.384 --> 00:15:17.999
+sort of a cursor-mode for highlighting identifiers,
+
+15:18.000 --> 00:15:26.044
+help-mode for displaying quick help for Haskell identifiers,
+
+00:15:26.144 --> 00:15:27.604
+integration with haddorg,
+
+00:15:27.704 --> 00:15:31.204
+which I will mention later, etc.
+
+00:15:31.304 --> 00:15:37.999
+It is available as hcel without the dot on GNU ELPA.
+
+15:38.000 --> 00:15:40.084
+Time for a demo.
+
+00:15:40.184 --> 00:15:42.484
+To start using hc.el, surprise surprise,
+
+00:15:42.584 --> 00:15:45.084
+we run the hcel command.
+
+00:15:45.184 --> 00:15:46.884
+We are presented with a list of packages
+
+00:15:46.984 --> 00:15:51.999
+indexed by the hcel indexer.
+
+15:52.000 --> 00:15:53.964
+This is an outline mode,
+
+00:15:54.064 --> 00:15:58.724
+so we can tab to list all the modules
+
+00:15:58.824 --> 00:16:00.999
+represented by the module path.
+
+16:01.000 --> 00:16:03.404
+We can further tab into the list of identifiers
+
+00:16:03.504 --> 00:16:04.999
+declared in this module.
+
+16:05.000 --> 00:16:09.084
+Now it asks whether you want to open module source.
+
+00:16:09.184 --> 00:16:11.884
+This is because some module source code
+
+00:16:11.984 --> 00:16:13.999
+can be quite large and it can take a bit of time.
+
+16:14.000 --> 00:16:17.684
+In this case, the control monad is quite small,
+
+00:16:17.784 --> 00:16:19.844
+so let's say yes.
+
+00:16:19.944 --> 00:16:24.004
+We see the list of identifiers.
+
+00:16:24.104 --> 00:16:27.999
+One can jump to an identifier forever.
+
+16:28.000 --> 16:32.999
+As you can see, the identifiers at points are highlighted.
+
+16:33.000 --> 00:16:36.124
+This can be particularly useful
+
+00:16:36.224 --> 00:16:38.604
+in a large function declaration
+
+00:16:38.704 --> 00:16:39.999
+where you come to see, for example,
+
+16:40.000 --> 00:16:44.204
+all the occurrences of an identifier
+
+00:16:44.304 --> 00:16:47.999
+inside the body of the declaration.
+
+16:48.000 --> 00:16:50.724
+These are declarations
+
+00:16:50.824 --> 00:16:52.999
+which in Haskell mode are listed in imenu.
+
+16:53.000 --> 16:59.999
+We can do the same here in hcel source mode.
+
+17:00.000 --> 17:05.999
+It lists all the declarations with their signature.
+
+17:06.000 --> 17:12.999
+Let's say we want to jump to this funny operator.
+
+17:13.000 --> 00:17:20.324
+It worked and you can also go back and forth
+
+00:17:20.424 --> 00:17:25.999
+within the declarations by pressing "n" and "p".
+
+17:26.000 --> 00:17:30.804
+Similarly, you can do something similar in the outline mode
+
+00:17:30.904 --> 00:17:37.999
+by toggling the follow mode, just like in org-agenda.
+
+17:38.000 --> 00:17:40.124
+Let's turn it off.
+
+00:17:40.224 --> 00:17:45.999
+Now, how about find definition references?
+
+17:46.000 --> 00:17:48.964
+Using xref,
+
+00:17:49.064 --> 00:17:52.999
+we can jump to the definition of Int and jump back.
+
+17:53.000 --> 17:55.999
+Jump to Maybe, jump back.
+
+17:56.000 --> 00:18:00.924
+Let's have a look at references of replicateM.
+
+00:18:01.024 --> 00:18:03.364
+There are plenty of them.
+
+00:18:03.464 --> 00:18:08.999
+Maybe we want to check out ghc-lib.
+
+18:09.000 --> 00:18:11.244
+Here are all the references
+
+00:18:11.344 --> 00:18:15.999
+and you can of course jump to any of them in the results.
+
+18:16.000 --> 18:18.999
+Cool.
+
+18:19.000 --> 00:18:21.764
+You may have already noticed
+
+00:18:21.864 --> 00:18:27.084
+the eldoc displaying the documentation
+
+00:18:27.184 --> 00:18:34.804
+and signature of identifiers.
+
+00:18:34.904 --> 00:18:44.004
+For example, here it shows the signature of replicateM,
+
+00:18:44.104 --> 00:18:46.999
+where it is defined, and its documentation.
+
+18:47.000 --> 18:55.999
+We can bring up the eldoc buffer.
+
+18:56.000 --> 00:18:58.164
+In the eldoc buffer,
+
+00:18:58.264 --> 00:19:00.084
+there are also links to other identifiers,
+
+00:19:00.184 --> 00:19:04.444
+which takes you to the definition of these identifiers,
+
+00:19:04.544 --> 00:19:07.524
+like minBound.
+
+00:19:07.624 --> 00:19:10.764
+Apparently, this is not working.
+
+00:19:10.864 --> 00:19:13.004
+I'm pretty sure it maybe works.
+
+00:19:13.104 --> 00:19:16.999
+Let's go to nothing or just...
+
+19:17.000 --> 00:19:19.764
+I think those didn't work because
+
+00:19:19.864 --> 00:19:24.044
+the module source for those identifiers is not open.
+
+00:19:24.144 --> 00:19:30.204
+Of course, you can search
+
+00:19:30.304 --> 00:19:32.924
+for any identifiers across all indexed packages
+
+00:19:33.024 --> 00:19:37.999
+by invoking hcel-global-ids.
+
+19:38.000 --> 19:41.999
+Let's say we want to search for Read.
+
+19:42.000 --> 00:19:47.364
+We are presented with a list of results,
+
+00:19:47.464 --> 00:19:53.999
+which are identifiers starting with Read with capital R.
+
+19:54.000 --> 00:19:57.204
+They also show where they are defined
+
+00:19:57.304 --> 00:20:06.999
+and the documentation, just like in eldoc.
+
+20:07.000 --> 00:20:13.844
+One can also directly jump to the identifier
+
+00:20:13.944 --> 00:20:19.999
+in the mini-buffer results.
+
+20:20.000 --> 00:20:21.924
+For example, we want to check out this Read2
+
+00:20:22.024 --> 00:20:27.999
+defined in base-4.12.0.0 Data.Functor.Classes
+
+20:28.000 --> 20:33.999
+There we go.
+
+20:34.000 --> 00:20:37.764
+Another functionality of hcel
+
+00:20:37.864 --> 00:20:40.999
+is the help buffer integration.
+
+20:41.000 --> 00:20:46.564
+We can do hcel-help and then let's say
+
+00:20:46.565 --> 00:20:52.644
+we want to learn about the read type class.
+
+00:20:52.744 --> 00:20:55.084
+This is a help buffer
+
+00:20:55.184 --> 00:21:00.804
+and you can jump to other definitions
+
+00:21:00.904 --> 00:21:02.364
+within the help buffer
+
+00:21:02.464 --> 00:21:06.999
+to read the documentation like readsPrec.
+
+21:07.000 --> 21:10.999
+It says Server version cannot be satistifed. Actual version.
+
+21:11.000 --> 00:21:14.684
+This means we need to tell hecl
+
+00:21:14.784 --> 00:21:16.999
+that the server has the correct version.
+
+21:17.000 --> 00:21:21.644
+hecl-fetch-server-version.
+
+00:21:21.744 --> 00:21:25.604
+Wait a bit for it to update
+
+00:21:25.704 --> 00:21:26.999
+the knowledge of the server version.
+
+21:27.000 --> 21:32.999
+Now you can follow the links, Read, readsPrec.
+
+21:33.000 --> 21:37.999
+You can do the "l" and "r" to navigate within the history.
+
+21:38.000 --> 21:42.999
+ReadS, ReadP.
+
+21:43.000 --> 00:21:45.924
+Just like in the help buffer for elisp code,
+
+00:21:46.024 --> 00:21:52.999
+you can jump to the definition.
+
+21:53.000 --> 21:59.999
+I believe that is everything, more or less.
+
+22:00.000 --> 22:04.999
+That concludes the demo.
+
+22:05.000 --> 00:22:07.044
+Now let's turn to haddorg,
+
+00:22:07.144 --> 00:22:08.999
+which is an Org backend for Haddock.
+
+22:09.000 --> 22:12.999
+Haddock is the documentation generator for Haskell packages.
+
+22:13.000 --> 00:22:15.044
+For example,
+
+00:22:15.144 --> 00:22:21.999
+the official Haskell package documentation website Hackage,
+
+22:22.000 --> 00:22:25.804
+all the documentation there is generated by Haddock
+
+00:22:25.904 --> 00:22:27.999
+into the HTML format.
+
+22:28.000 --> 00:22:31.324
+Haddock has several backends
+
+00:22:31.424 --> 00:22:34.284
+that convert the intermediate representation
+
+00:22:34.384 --> 00:22:36.964
+called interface to various output formats,
+
+00:22:37.064 --> 00:22:41.764
+including HTML, LaTeX, and Hugo.
+
+00:22:41.864 --> 00:22:44.804
+HTML is the main format with a lot of features.
+
+00:22:44.904 --> 00:22:48.999
+LaTeX is less so, and I don't think it is widely used.
+
+22:49.000 --> 22:52.999
+Let's have a look at an HTML example.
+
+22:53.000 --> 00:23:01.084
+This is a PDF because these HTML files can be rather large
+
+00:23:01.184 --> 00:23:06.999
+and slow down EWW significantly.
+
+23:07.000 --> 00:23:10.164
+It's faster to convert it to PDF
+
+00:23:10.264 --> 00:23:16.999
+and read it from pdf-tools.
+
+23:17.000 --> 00:23:20.764
+Looks like this is as big as it goes.
+
+00:23:20.864 --> 00:23:26.044
+I hope you can still see it.
+
+00:23:26.144 --> 00:23:30.044
+Can I still enlarge it a bit more? Maybe.
+
+00:23:30.144 --> 00:23:32.964
+This is Servant.Server.
+
+00:23:33.064 --> 00:23:35.999
+It is a module in the servant-server package.
+
+23:36.000 --> 23:41.999
+It is a widely used package for writing servers.
+
+23:42.000 --> 00:23:49.804
+It starts with a heading, which is the name of the module,
+
+00:23:49.904 --> 00:23:52.684
+and the table of contents.
+
+00:23:52.784 --> 00:23:55.999
+Then a heading: Run an wai application from an API.
+
+23:56.000 --> 00:24:00.804
+Under this heading, there are all the relevant identifiers
+
+00:24:00.904 --> 00:24:08.524
+that is concerned with running a WAI application from API,
+
+00:24:08.624 --> 00:24:13.204
+including serve, which is one of the main entry points
+
+00:24:13.304 --> 00:24:15.524
+for a Servant.Server.
+
+00:24:15.624 --> 00:24:21.604
+It has a signature linkable to the other identifiers,
+
+00:24:21.704 --> 00:24:23.004
+the documentation,
+
+00:24:23.104 --> 00:24:26.644
+an example with a Haskell source code block.
+
+00:24:26.744 --> 00:24:30.999
+That's what HTML output looks like.
+
+24:31.000 --> 00:24:33.924
+As I mentioned,
+
+00:24:34.024 --> 00:24:35.804
+there are several downsides or drawbacks with that,
+
+00:24:35.904 --> 00:24:40.999
+like the HTML files can be huge and slow down EWW.
+
+24:41.000 --> 00:24:46.124
+Also, every module is an HTML of itself,
+
+00:24:46.224 --> 00:24:48.284
+and there's also an HTML for the package
+
+00:24:48.384 --> 00:24:49.999
+with a list of all the modules.
+
+24:50.000 --> 00:24:54.644
+Whereas the Org backend
+
+00:24:54.744 --> 00:25:04.164
+is better in that it is much more compact.
+
+00:25:04.264 --> 00:25:07.404
+All the modules under the same package
+
+00:25:07.504 --> 00:25:10.684
+are included in one Org file
+
+00:25:10.784 --> 00:25:12.999
+as sub-headings, level 2 headings.
+
+25:13.000 --> 00:25:19.404
+So, servant-server, Servant.Server, that is the module.
+
+00:25:19.504 --> 00:25:21.844
+So basically, this level 2 heading
+
+00:25:21.944 --> 00:25:24.999
+contains all the information in this PDF.
+
+25:25.000 --> 25:28.999
+Run the WAI application from API, serve.
+
+25:29.000 --> 00:25:39.124
+It has a signature that links to other identifiers
+
+00:25:39.224 --> 00:25:41.999
+and the documentation that's also linkable.
+
+25:42.000 --> 00:25:47.124
+The Haskell source block is now an Org source block,
+
+00:25:47.224 --> 00:25:49.404
+and you can do all sorts of interesting things
+
+00:25:49.504 --> 00:25:52.644
+with it using org-babel.
+
+00:25:52.744 --> 00:25:55.999
+Let's check the links as server.
+
+25:56.000 --> 25:59.999
+Right, so the link works.
+
+26:00.000 --> 00:26:05.284
+Application, right, Request.
+
+00:26:05.384 --> 00:26:08.284
+It also supports cross-packaging package linking,
+
+00:26:08.384 --> 00:26:12.204
+so following the link to request
+
+00:26:12.304 --> 00:26:17.524
+takes us from servant-server package Org documentation
+
+00:26:17.624 --> 00:26:24.684
+to the WAI Org documentation.
+
+00:26:24.784 --> 00:26:27.444
+Another nice thing with Org documentation
+
+00:26:27.544 --> 00:26:32.644
+is that you can use Org functions
+
+00:26:32.744 --> 00:26:40.444
+like org-goto to jump to any identifiers.
+
+00:26:40.544 --> 00:26:45.804
+Let's say we want to jump to application.
+
+00:26:45.904 --> 00:26:49.999
+We have toApplication. So it jumpts to toApplication.
+
+26:50.000 --> 00:26:53.924
+I guess application is not an identifier,
+
+00:26:54.024 --> 00:26:55.724
+yes, it is more like a type alias,
+
+00:26:55.824 --> 00:26:58.564
+that's why we couldn't find it.
+
+00:26:58.664 --> 00:27:00.999
+So that is haddorg.
+
+27:01.000 --> 00:27:06.004
+And of course, I implemented a bit of integration
+
+00:27:06.104 --> 00:27:08.444
+between haddorg and hcel
+
+00:27:08.544 --> 00:27:11.204
+so that we can jump from one to the other.
+
+00:27:11.304 --> 00:27:14.999
+Let's go back to servant.
+
+27:15.000 --> 27:23.999
+Let's see, ServerT.
+
+27:24.000 --> 00:27:27.004
+Maybe we want to check out
+
+00:27:27.104 --> 00:27:31.844
+the source code definition of ServerT.
+
+00:27:31.944 --> 00:27:36.164
+To find out exactly what sort of type alias it is,
+
+00:27:36.264 --> 00:27:43.084
+like what is the alias (or type synonym)
+
+00:27:43.184 --> 00:27:49.404
+We run hcel-identifier-at-point--
+
+00:27:49.504 --> 00:27:52.244
+sorry, hcel-haddorg-to-hcel-definition...
+
+00:27:52.344 --> 00:27:54.999
+Oh, we have an HTTP error.
+
+27:55.000 --> 27:58.999
+Typ ServerT not found in module src/Servant/Server.hs
+
+27:59.000 --> 00:28:01.124
+Why? Well, this is because
+
+00:28:01.125 --> 00:28:04.844
+the HCEL server only understands,
+
+00:28:04.944 --> 00:28:07.724
+it only has knowledge of identifiers
+
+00:28:07.824 --> 00:28:11.999
+that is defined in the original source file.
+
+28:12.000 --> 00:28:17.084
+So, it is not aware of, say,
+
+00:28:17.184 --> 00:28:20.999
+identifiers that are re-exported in the module.
+
+28:21.000 --> 00:28:25.724
+Most likely, Servant.Server module re-exports ServerT
+
+00:28:25.824 --> 00:28:28.604
+from another module.
+
+00:28:28.704 --> 00:28:29.644
+We will probably have better luck
+
+00:28:29.744 --> 00:28:34.999
+looking into some internal modules like this one.
+
+28:35.000 --> 28:38.999
+Let's try this type class HasContextEntry.
+
+28:39.000 --> 28:41.999
+So this time it worked.
+
+28:42.000 --> 00:28:44.244
+And, of course, we can go the other direction
+
+00:28:44.344 --> 00:28:47.999
+from hecl to haddorg.
+
+28:48.000 --> 00:28:51.484
+Let's say if we want to display named context
+
+00:28:51.584 --> 00:28:53.999
+in the haddorg documentation
+
+28:54.000 --> 00:29:01.524
+so that we can read about, other identifiers documentation
+
+00:29:01.624 --> 00:29:03.999
+that is related to named context.
+
+29:04.000 --> 29:07.999
+We do hecl-identifier-at-point-to-haddorg
+
+29:08.000 --> 29:13.999
+And it does take us to the server-server old file.
+
+29:14.000 --> 29:17.999
+Okay.
+
+29:18.000 --> 29:20.999
+And that concludes my presentation.
+
+29:21.000 --> 00:29:23.484
+You can find hecl in GNU Elpa,
+
+00:29:23.584 --> 00:29:24.999
+and you can also find the source code,
+
+29:25.000 --> 00:29:27.364
+as well as the source of haddorg
+
+00:29:27.464 --> 00:29:29.764
+and instructions on how to generate org documentation
+
+00:29:29.864 --> 00:29:32.999
+using haddorg in my cgit instance.
+
+29:33.000 --> 00:29:36.684
+Thank you for your attention.
+
+00:29:36.784 --> 00:29:37.999
+I hope you enjoy the rest of the conference.
+
+29:38.000 --> 29:51.000
+Thank you.
diff --git a/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt
new file mode 100644
index 00000000..85fd117d
--- /dev/null
+++ b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--answers.vtt
@@ -0,0 +1,653 @@
+WEBVTT
+
+00:00.000 --> 00:13.920
+And we are live. Hello again, everyone. It's been a while. I've been on break for the last
+
+00:13.920 --> 00:19.000
+one hour. It feels like I've been really far. I'm with David. Hi, David. How are you doing?
+
+00:19.000 --> 00:23.360
+Hi, Leo. I'm good. Thank you for having me on.
+
+00:23.360 --> 00:26.480
+So David, you do have the pad open in front of you.
+
+00:26.480 --> 00:27.480
+That's right.
+
+00:27.480 --> 00:32.800
+Yes. I think Sasha is putting up the pad for us so that they don't have to look at my very
+
+00:32.800 --> 00:38.520
+tiny face on BBB. I'm very small. I'm trying to push the boundaries. David, if you want
+
+00:38.520 --> 00:44.320
+to take some questions, I'm sorry, I've got hells whispering in my ears at the same time.
+
+00:44.320 --> 00:49.800
+Give me just a second. David, can you maybe read the first question and try to answer
+
+00:49.800 --> 00:50.800
+them?
+
+00:50.800 --> 00:58.640
+Sure. Question one. Excuse me. Do you use this just for yourself or do you use this
+
+00:58.640 --> 01:04.160
+to discuss or show with doctors or health professionals? The answer is it is useful
+
+01:04.160 --> 01:10.880
+for me and it's useful for health care providers. So it's not I'm not just able to see connections
+
+01:10.880 --> 01:15.440
+myself, even if we're not seeing a connection. If I'm talking to someone, if I'm talking
+
+01:15.440 --> 01:20.640
+to a clinician, I have brought this in on a tablet. If it's an in-person thing or on
+
+01:20.640 --> 01:26.040
+the phone, if it's a video appointment with someone, just send it in an email. It's very
+
+01:26.040 --> 01:33.160
+convenient to just send the graph around as a screenshot. So it's definitely been really
+
+01:33.160 --> 01:40.920
+useful to because one thing that I touch on in the talk is that let's say that we're talking
+
+01:40.920 --> 01:45.880
+about depression, for example. Let's say, oh, well, how have you been sleeping this
+
+01:45.880 --> 01:49.440
+week? Well, if you had objective information, that's perfect. Go ahead.
+
+01:49.440 --> 01:53.840
+Oh, sorry. I was mispressing my button for production. You're good.
+
+01:53.840 --> 01:59.960
+Oh, it just caught a little clip of sound. I see. Okay. Sorry. Yes. So where was I? I
+
+01:59.960 --> 02:05.960
+would say, okay, so on the one hand, having objective information is good not only for
+
+02:05.960 --> 02:09.360
+you, but when it's time to speak to someone and give them a picture of what's going on,
+
+02:09.360 --> 02:14.800
+you don't have to generalize. Even if you're having a good day, generalizing can be really
+
+02:14.800 --> 02:19.300
+like, oh, well, how are you sleeping? Oh, well, this day I woke up that, but which way
+
+02:19.300 --> 02:22.720
+was that Wednesday or Thursday? And then I remember this friend came over, so it must
+
+02:22.720 --> 02:29.000
+have been Friday. That's not I've discovered that actually just first thing in the morning
+
+02:29.000 --> 02:33.720
+waking up recording. How many pieces of gum did I have yesterday? How much did I sleep?
+
+02:33.720 --> 02:40.000
+Okay. So someone else, this segues right into the next question. How do you input the health
+
+02:40.000 --> 02:46.120
+data? Semi-automated with Org Mode capture templates, copy paste, automated with a smart
+
+02:46.120 --> 02:51.080
+watch, and if this, then that. Tasker, Org Mode document to automatically add stuff like
+
+02:51.080 --> 02:57.040
+sleeping data. Which parts are and are not automated? Okay. So it turns out I'm using
+
+02:57.040 --> 03:03.320
+an Org Mode capture template to automate the insertion of all the little category tags
+
+03:03.320 --> 03:10.600
+in the property drawer, but not the values. I'm not using a smart watch or anything whatsoever.
+
+03:10.600 --> 03:17.560
+I am just, I look at the clock when I go to bed and I look at the bed when I wake, look
+
+03:17.560 --> 03:21.480
+at the clock when I wake up. The very first thing I do is turn on my computer and turn
+
+03:21.480 --> 03:30.160
+on Emacs and enter that data. So, you know, it would be really cool if we could get some
+
+03:30.160 --> 03:35.120
+kind of data, you know, because if it's all, you know, if it's be able to be massaged into
+
+03:35.120 --> 03:40.760
+Org Mode format, it can then go into Org GNU plot. Or maybe you could cut Org Mode out
+
+03:40.760 --> 03:45.600
+of the equation if you find a way to go directly from that data to either CSV, which Org Mode,
+
+03:45.600 --> 03:50.760
+I'm sorry, which GNU plot can read, or, you know, whether you have to wear a little script
+
+03:50.760 --> 03:56.560
+in between. And the next question, how do you track the various health statistics that
+
+03:56.560 --> 04:02.720
+you're gathering? The ones, you know, for example, nicotine is an estimate. I'm pretty
+
+04:02.720 --> 04:08.460
+sure it was six. It was pretty sure it was seven. You know what I mean? It's pretty close
+
+04:08.460 --> 04:12.820
+because I do count and I think I could at most be off by one or two. So it's not fatal
+
+04:12.820 --> 04:16.980
+to the enterprise of collecting data. The same thing with sleep. I look at the clock,
+
+04:16.980 --> 04:23.240
+but I only count half hours. I say, oh, I slept seven hours, you know, seven and a half.
+
+04:23.240 --> 04:28.280
+It's very much a back of the napkin thing, but it's precise enough overall that as you
+
+04:28.280 --> 04:33.240
+can see from the data in the talk, you can see that my sleep declined pretty steadily
+
+04:33.240 --> 04:38.160
+over the course of that. So even if some of the values are off a little bit, you're still
+
+04:38.160 --> 04:44.060
+seeing trends and you can still see connections. So it's not perfect. I would love to have
+
+04:44.060 --> 04:49.680
+some type of more automated data, but all right. So I'm going to move on to the next
+
+04:49.680 --> 04:56.280
+question. It's possible to download data from Apple Watch's health app. Is it easy enough
+
+04:56.280 --> 05:07.000
+to incorporate those.csv files into your implementation of gnuplot? Okay. So I think
+
+05:07.000 --> 05:10.680
+what it would involve if you wanted to use my template generator, it would involve making
+
+05:10.680 --> 05:17.880
+your template, but then modifying the gnuplot script to read from that file instead of from
+
+05:17.880 --> 05:27.200
+an org mode table. So I think that what you would want to do is select the, yeah, I mean,
+
+05:27.200 --> 05:33.680
+and if you want, you know, I'll be around in the IRC after and I might even be able
+
+05:33.680 --> 05:38.200
+to look at their documentation or something, just even just give a peek at it to give a
+
+05:38.200 --> 05:39.640
+better answer to this question.
+
+05:39.640 --> 05:45.640
+Cool. And just to remind everyone, so, sorry, let me try to put up, okay. I did crush Dev
+
+05:45.640 --> 05:49.400
+earlier when trying to switch window. Oh, okay. I managed to do it. Yes, I still have
+
+05:49.400 --> 05:58.240
+it in me. So let me, slightly later, we will also be opening the discussion. So this BBB
+
+05:58.240 --> 06:01.520
+instance in which we are currently, we will be opening it so that people can come in with
+
+06:01.520 --> 06:06.160
+questions and maybe you're considering the personal nature of this talk, you know, maybe
+
+06:06.160 --> 06:11.520
+try to be a little wary of sharing personal information, especially if the stream is live,
+
+06:11.520 --> 06:17.000
+but otherwise you can have a chat with David, provide to David you're still available in,
+
+06:17.000 --> 06:21.880
+you know, 10, 20 minutes and feel free to come in and ask questions because really that's
+
+06:21.880 --> 06:26.480
+what Emacs Conf is about. It's about getting in touch with the speakers and this is the
+
+06:26.480 --> 06:30.200
+opportunity that you have to have a one-on-one with them rather than an asynchronous one
+
+06:30.200 --> 06:34.120
+with a pad. Sorry for the interruption. I just felt I remember. We're probably going
+
+06:34.120 --> 06:38.080
+to open the chat in about five to 10 minutes. We still have a lot of questions and I know
+
+06:38.080 --> 06:42.280
+I'd prefer if David focused on those questions. So please go ahead, David.
+
+06:42.280 --> 06:48.800
+Thank you so much, Leo. And yes, I am available for after, so I'll stick around. Okay. So
+
+06:48.800 --> 06:54.120
+regarding the medication tracking, you only have the option to record missed or not. If
+
+06:54.120 --> 06:58.280
+one needs to take multiple medications throughout the day, how would you propose to track that
+
+06:58.280 --> 07:05.240
+within GNU plot or separate? Okay. Yeah, as it is, I don't record which medication because
+
+07:05.240 --> 07:12.600
+it's the one I miss is typically just the same one. So the deal is, is that you would
+
+07:12.600 --> 07:19.660
+probably want to, you could count it as either doses or milligrams. The problem with tracking
+
+07:19.660 --> 07:27.660
+as milligrams, and yes, you would want to use separate variables for those. And probably
+
+07:27.660 --> 07:36.080
+what would make sense is either to record some lines as doses, meaning that one, whatever
+
+07:36.080 --> 07:43.040
+that ends up being, if it's a tablet or if it's the proper dose. And then that way, if
+
+07:43.040 --> 07:47.100
+one medication is late and another is not, or whatever you need to record, they're on
+
+07:47.100 --> 07:54.440
+separate lines, separate columns of the CSV file or I'm sorry, not CSV file of your org
+
+07:54.440 --> 08:04.540
+mode, separate property drawer entries in your capture template. I'm trying to think.
+
+08:04.540 --> 08:08.520
+It would be a little bit more work, but you could track that. The problem with tracking
+
+08:08.520 --> 08:13.760
+milligrams is that some medications, you would have a large range on the chart because some
+
+08:13.760 --> 08:18.320
+medications are a few milligrams and some medications are lots and lots for a dose.
+
+08:18.320 --> 08:27.720
+So tracking it as single doses might make sense. All right. So how's the workflow? This
+
+08:27.720 --> 08:32.120
+is the next question here. How's the workflow when working on the canoe plot code? Can you
+
+08:32.120 --> 08:38.560
+control C, control C and the SVG output on the right is updated automatically? The answer
+
+08:38.560 --> 08:46.200
+is yes. You can use something called auto revert tail mode. So you hit meta X to get
+
+08:46.200 --> 08:53.040
+the command and then auto revert tail mode. And that will cause the SVG file to automatically
+
+08:53.040 --> 08:58.840
+update every time you hit control C, control C on the canoe plot file, provided that you're
+
+08:58.840 --> 09:07.680
+viewing the same file that the canoe plot is going to overwrite. Let's see. Question.
+
+09:07.680 --> 09:13.000
+How much time does it take to process the amount of data that you add inside canoe Emacs?
+
+09:13.000 --> 09:21.360
+So at this point I have three or four months of data and it takes to update the whole thing,
+
+09:21.360 --> 09:27.360
+like, you know, get capture all the entries. It takes like a second or two. And this is
+
+09:27.360 --> 09:31.200
+a pretty decent PC. So we're not talking about something that takes a long time each day
+
+09:31.200 --> 09:39.840
+I updated. It's just, it's done pretty quick. All right. Next question. Will indent guide
+
+09:39.840 --> 09:45.120
+behave well with YAML files for Helm? I don't know the answer to that. Indent guide is really
+
+09:45.120 --> 09:52.720
+nice and it seems to behave pretty reasonably, but I wouldn't be able to speak to that.
+
+09:52.720 --> 09:59.280
+Okay. Just a quick interruption. So we have opened the chats now for people to join us
+
+09:59.280 --> 10:04.360
+on BBB. So you can go to the talk page on Emacs. You go to David's talk, which is called
+
+10:04.360 --> 10:08.760
+health and you should be able to join the BBB. So if you have questions that you'd like
+
+10:08.760 --> 10:13.800
+to ask with your voice to David, feel free to join us. And David, in the meantime, you
+
+10:13.800 --> 10:16.960
+can reply to the last question you have.
+
+10:16.960 --> 10:22.880
+Okay. Thank you. Great. The last question is, have you noticed your behavior changing
+
+10:22.880 --> 10:29.000
+as a result of tracking your data? And the answer is yes. The accountability has given,
+
+10:29.000 --> 10:36.160
+it draws habits, good or bad habits. It illustrates them in sharp relief. All of a sudden it's
+
+10:36.160 --> 10:44.440
+very clear what's going on, what's not going on. And it illuminates a sense of fog because
+
+10:44.440 --> 10:49.080
+it's hard to generalize when your awareness is changing over time. It's hard to generalize
+
+10:49.080 --> 10:53.560
+about what's going on each day and having the objective information. Yes, I'd say it
+
+10:53.560 --> 10:57.080
+has changed my behavior in a good way.
+
+10:57.080 --> 11:04.240
+I mean, that's a very good thing, I suppose. The whole point of tracking so much stuff,
+
+11:04.240 --> 11:07.680
+tracking people, it's an interesting angle that you have because you're creating data
+
+11:07.680 --> 11:12.320
+on a lot of health aspects. And people usually when they talk about using Emacs to better
+
+11:12.320 --> 11:16.000
+their life, they talk about all, they talk about getting things done. They talk about
+
+11:16.000 --> 11:22.560
+all the usual suspects when it comes to task organization. But plotting over time is something
+
+11:22.560 --> 11:27.120
+that is technically possible and that people talk about, but I feel like you've gone way
+
+11:27.120 --> 11:32.720
+far into this particular topic. So well done you. And you feel as a result you have a particular
+
+11:32.720 --> 11:40.800
+insight into seeing the curves evolve basically over time. And I think it provides very interesting
+
+11:40.800 --> 11:46.760
+data, something that is more easily understandable than just a list of to-dos in an agenda over
+
+11:46.760 --> 11:47.760
+time.
+
+11:47.760 --> 11:54.320
+Yeah. And what's nice is that I still can have to-dos and notes in that same file that
+
+11:54.320 --> 12:00.600
+produces my chart and that has all the data in it. And I keep that in version control,
+
+12:00.600 --> 12:05.040
+which stays in a private repo. And what's nice about that is everything's backed up.
+
+12:05.040 --> 12:11.920
+You know what I mean? Pardon me. I'm going to have a sip of water here.
+
+12:11.920 --> 12:19.680
+Please do. I mean, I'm actually down to termite. It's the good floral for thermos. And I've
+
+12:19.680 --> 12:23.120
+down two since we started EmacsCon today.
+
+12:23.120 --> 12:30.680
+Oh, wow. Yeah. And so I lost my train of thought.
+
+12:30.680 --> 12:36.840
+Take your time to find it. We still have about eight minutes of Q&A. By the way, I'll remind
+
+12:36.840 --> 12:41.200
+people we have opened the BBB room. So if you want to join us and ask live questions
+
+12:41.200 --> 12:56.120
+to David, feel free to do so. I'm sorry. Could you repeat that? I was asking you if you found
+
+12:56.120 --> 12:59.000
+the train of thought again.
+
+12:59.000 --> 13:08.480
+Hold on. Hold on. The last question, have I noticed behavior changing? Yeah. Then we
+
+13:08.480 --> 13:12.400
+talked about, oh, I talked about the fact that you can have to do the notes and appointments
+
+13:12.400 --> 13:18.080
+and all that kind of stuff. Like, for example, one of my next. Well, oh, now I remember the
+
+13:18.080 --> 13:22.560
+point that I was going to get into. The point is that once I have this routine of getting
+
+13:22.560 --> 13:28.600
+up every single morning and first thing, putting in my information. That habit, I feel like
+
+13:28.600 --> 13:33.200
+build on. For example, I added a new variable the other day. You know, I can add I thought
+
+13:33.200 --> 13:37.920
+of something. I'm like, hey, I should track that in my data. It reminds me I say, hey,
+
+13:37.920 --> 13:41.080
+there's not enough green triangles. I need to get some exercise this week. You know,
+
+13:41.080 --> 13:48.520
+the weather, I haven't wanted to get outside because the weather's been so dismal. So it's
+
+13:48.520 --> 13:58.240
+absolutely been a game changer. It really has been. And it doesn't have to be. Oh, go
+
+13:58.240 --> 14:04.880
+ahead. Go ahead. No, no, no. I was going to say that it's really good to hear that software
+
+14:04.880 --> 14:10.080
+can have such a potent impact, just the ability to track your data over time. Because the
+
+14:10.080 --> 14:14.480
+thing is, I think whatever you're feeling, you know, whenever you have mental ailments
+
+14:14.480 --> 14:20.320
+or whatnot, it's really hard to to have a healthy relationship to the chronology of
+
+14:20.320 --> 14:26.360
+feeling better. And it's easy to get lost into the immediate sensation. But I feel like
+
+14:26.360 --> 14:30.120
+being able to track over time that, you know, this daily checking in that you do in the
+
+14:30.120 --> 14:34.760
+morning of keeping track of your health data. I think it's the first step that shows you
+
+14:34.760 --> 14:42.800
+over time that, oh, yes, I am actually feeling better. And so as a result, being able to
+
+14:42.800 --> 14:50.440
+visually see, oh, yes, I am actually doing better. It must be reassuring, I assume.
+
+14:50.440 --> 14:55.060
+It is. I think that's a really interesting turn of phrase you had there earlier when
+
+14:55.060 --> 15:02.840
+you said it's harder to have a healthy relationship to the chronology of getting better. I think
+
+15:02.840 --> 15:10.160
+those were your exact words there. You know, the idea that, you know, if you've got to
+
+15:10.160 --> 15:16.080
+manage something, if you've got to roll with the punches, then seeing what you've accomplished,
+
+15:16.080 --> 15:21.440
+seeing yourself bounce back, you know, and then being able to see a trend, you might
+
+15:21.440 --> 15:26.920
+not notice unless you're tracking per the clock that sleep has started to decline and
+
+15:26.920 --> 15:33.880
+that it's time to start keeping your eye out. And it is reassuring, and you're right about
+
+15:33.880 --> 15:37.920
+that, you know. It's not always easy to be in the mindset of saying, hey, these lines
+
+15:37.920 --> 15:39.960
+move and they'll move again.
+
+15:39.960 --> 15:46.560
+Yeah, and I feel also it's kind of like having a scientific take on your well-being because
+
+15:46.560 --> 15:53.960
+you are parameter, okay, really tough word to say for the Frenchman that I am, but parameterizing
+
+15:53.960 --> 15:58.720
+the elements of your life, such as sleep, and we already have sleep is already more
+
+15:58.720 --> 16:03.960
+or less of a parameter in our lives. You know, we know, oh, you should sleep at least eight
+
+16:03.960 --> 16:08.820
+hours. You should have one hour, 30 blocks of sleep all the time. So this is a well parameterized
+
+16:08.820 --> 16:13.960
+element of our lives. But other elements that you're doing or the conflation of different
+
+16:13.960 --> 16:19.360
+curves feels like it's pointing out, it's providing more data and being able to see
+
+16:19.360 --> 16:23.920
+the trend, which is a key word in your presentation in what you do. I think that's really good.
+
+16:23.920 --> 16:28.800
+Chronology and trends and being able to see what works. I just have this example crossing
+
+16:28.800 --> 16:33.360
+my mind. Some people are plagued with canker sores, which are really nasty stuff that you
+
+16:33.360 --> 16:38.040
+get in mouth. But more often than not, it's really hard to track why you're getting them.
+
+16:38.040 --> 16:42.600
+A lot of people say it's due to stress or to poor sleep or to deficiency in iron or
+
+16:42.600 --> 16:47.780
+whatnot, or you're toothpaste. You might have understood that I actually suffer from them.
+
+16:47.780 --> 16:52.240
+So I actually know a lot of the reasons. But being able to track health data like this
+
+16:52.240 --> 16:57.560
+feels like it would be able to correlate the appearance of canker sores with maybe poor
+
+16:57.560 --> 17:03.240
+sleep or maybe changing medication or maybe stress at work or stuff like this. I really
+
+17:03.240 --> 17:06.240
+like this stance and I think you're really onto something here.
+
+17:06.240 --> 17:12.960
+Yeah. And if people wanted to chat about that more in terms of putting people's heads together,
+
+17:12.960 --> 17:19.120
+because let's say someone who has a more sophisticated medication tracking need, maybe they come
+
+17:19.120 --> 17:23.760
+up with a solution and they share their config. There's one thing I didn't talk about in the
+
+17:23.760 --> 17:31.580
+talk, which is I had one line where I have a formula instead, because Canoe can plot
+
+17:31.580 --> 17:36.760
+all kinds of formulas. So I have it plot an overall trouble score, which I did not show
+
+17:36.760 --> 17:45.520
+in the video, but I had it assigned three points for every hour above or below the goal
+
+17:45.520 --> 17:49.360
+of eight hours. So too much would give me lots of points on the trouble and too little
+
+17:49.360 --> 17:54.880
+will give me lots of points. So the relation to the goal or whatever, if stress is high,
+
+17:54.880 --> 18:00.920
+then the overall, if the anxiety line is high, then the overall trouble line should get high.
+
+18:00.920 --> 18:06.800
+And what I found is that that trouble line really did track with my recollection of
+
+18:06.800 --> 18:12.560
+how the last few weeks had gone. And so that trouble line is, you can see when it's trending
+
+18:12.560 --> 18:21.600
+even if it's not super obvious from the other lines. And maybe I'll share that too.
+
+18:21.600 --> 18:28.400
+All right, David, we are about at the end of time for the Q&A. Thank you so much for
+
+18:28.400 --> 18:33.000
+answering all the questions. I think it was very valuable to not only have your long presentation,
+
+18:33.000 --> 18:37.080
+which was very detailed, but also have this Q&A where you got the chance to answer one,
+
+18:37.080 --> 18:41.240
+two, three, four, five, more than seven questions, which is great.
+
+18:41.240 --> 18:46.960
+That's fantastic. And thank you so much for joining in and for being here. And thank you
+
+18:46.960 --> 18:51.720
+for having me at the conference. It's really amazing to be part of the community. And I'm
+
+18:51.720 --> 18:56.720
+happy to stick around. Do you want me to drop to IRC or just keep answering questions in
+
+18:56.720 --> 19:01.500
+voice? I don't think they're going to go on the pad, are they?
+
+19:01.500 --> 19:05.760
+So actually what we can do, we can leave the BBB room standing for now. If people want
+
+19:05.760 --> 19:10.240
+to join, they can do so. Maybe Corwin will come back to close the room afterwards. But
+
+19:10.240 --> 19:13.140
+for now, you can stay in the room. And if people want to unmute themselves after we
+
+19:13.140 --> 19:15.800
+go off stream, that would be good.
+
+19:15.800 --> 19:18.720
+So we are about to go into the next talk in about 30 seconds. Let me just talk to production
+
+19:18.720 --> 19:28.360
+real quick. So, yes, we are going to go into the next talk pretty soon. You should still
+
+19:28.360 --> 19:35.000
+be able to hear me, I think. Nope, they cannot. Okay. Well, David, I leave you in the room.
+
+19:35.000 --> 19:41.360
+I'll be in touch within five minutes to see if people are not showing up.
+
+19:41.360 --> 19:42.360
+Thank you, Leo.
+
+19:42.360 --> 19:48.160
+Yes, sorry. I'm dealing with many things at the same time. So I'm going to stop the recording.
+
+19:48.160 --> 19:52.680
+No, I'm going to leave the recording on. Is there anyone in the room that want to unmute?
+
+19:52.680 --> 19:56.760
+We are not on the stream anymore now. Does anyone want to say something or talk with
+
+19:56.760 --> 20:04.260
+David? Or do we want to close the room?
+
+20:04.260 --> 20:09.440
+Even if it's just by line. Okay, cool. So what are we going to do then? David, thank
+
+20:09.440 --> 20:14.080
+you so much for your time. We're actually going to close the room right now. I'm going
+
+20:14.080 --> 20:35.200
+to stop the recording.
+
diff --git a/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt
new file mode 100644
index 00000000..6a8625f8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:33.639
+Introduction
+
+00:00:33.640 --> 00:01:59.439
+How to take daily health journal items
+
+00:01:59.440 --> 00:03:37.199
+How to set up your org templates
+
+00:03:38.320 --> 00:04:16.839
+How to do it in GNU Emacs
+
+00:04:16.840 --> 00:04:51.959
+Overview of the presentation
+
+00:04:51.960 --> 00:05:52.799
+The journal
+
+00:05:52.800 --> 00:06:51.319
+The capture buffer
+
+00:06:51.320 --> 00:08:03.479
+The columnview table
+
+00:08:03.480 --> 00:09:03.319
+Gnuplot
+
+00:09:03.320 --> 00:10:15.479
+Output parameters
+
+00:10:15.480 --> 00:13:05.919
+Time series data
+
+00:13:05.920 --> 00:14:22.679
+Health variables
+
+00:14:22.680 --> 00:15:11.999
+Goal lines
+
+00:15:12.000 --> 00:17:35.559
+The Gnuplot command
+
+00:17:35.560 --> 00:19:11.479
+The template generator
+
+00:19:11.480 --> 00:21:40.999
+The code that creates a template
+
+00:21:41.000 --> 00:24:09.919
+The power of the chart
+
+00:24:09.920 --> 00:24:29.240
+Thanks
diff --git a/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt
new file mode 100644
index 00000000..9cfd3030
--- /dev/null
+++ b/2022/captions/emacsconf-2022-health--health-data-journaling-and-visualization-with-org-mode-and-gnuplot--david-otoole--main.vtt
@@ -0,0 +1,1261 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.999
+Hi, this is Dave O'Toole, and today
+
+00:00:04.000 --> 00:00:07.799
+I'll be giving a presentation on tracking health data
+
+00:00:07.800 --> 00:00:12.759
+with Emacs, Org Mode, and Gnuplot.
+
+00:00:12.760 --> 00:00:16.079
+So Gnuplot is the well-known scientific
+
+00:00:16.080 --> 00:00:19.039
+and mathematical plotting application.
+
+00:00:19.040 --> 00:00:24.639
+You feed it text files full of names, dates, numbers,
+
+00:00:24.640 --> 00:00:27.199
+data points, and you get out a nice graph.
+
+00:00:27.200 --> 00:00:31.119
+You can spit out SVG. You can spit out PNG graphics.
+
+00:00:31.120 --> 00:00:33.639
+In this case, we're using an SVG.
+
+NOTE How to take daily health journal items
+
+00:00:33.640 --> 00:00:36.839
+What I'm going to show you today
+
+00:00:36.840 --> 00:00:39.839
+is how to take daily health journal items:
+
+00:00:39.840 --> 00:00:42.119
+in other words, things like I exercised
+
+00:00:42.120 --> 00:00:44.319
+such and such number of minutes today,
+
+00:00:44.320 --> 00:00:47.399
+I got X hours of sleep last night,
+
+00:00:47.400 --> 00:00:51.479
+I used such and such number of pieces of nicotine gum,
+
+00:00:51.480 --> 00:00:54.559
+say five pieces. So let's see,
+
+00:00:54.560 --> 00:00:58.439
+we've got this whole picture here, all right,
+
+00:00:58.440 --> 00:00:59.359
+and I've tracked here...
+
+00:00:59.360 --> 00:01:02.319
+This is a month of data from my life.
+
+00:01:02.320 --> 00:01:05.159
+This is... I'm not showing all the variables,
+
+00:01:05.160 --> 00:01:08.519
+but this is what I felt comfortable sharing
+
+00:01:08.520 --> 00:01:14.239
+in order to help people who might have a need to track,
+
+00:01:14.240 --> 00:01:15.919
+either because of a chronic condition,
+
+00:01:15.920 --> 00:01:18.599
+or just because of a health improvement goal
+
+00:01:18.600 --> 00:01:20.959
+or what have you, people who might need to
+
+00:01:20.960 --> 00:01:23.319
+track health data in a way
+
+00:01:23.320 --> 00:01:24.959
+that's a little bit more robust
+
+00:01:24.960 --> 00:01:26.599
+than just one or two variables
+
+00:01:26.600 --> 00:01:29.839
+and just weight or just blood pressure.
+
+00:01:29.840 --> 00:01:33.079
+So in this case, I've got exercise,
+
+00:01:33.080 --> 00:01:36.399
+I've got the number of hours of sleep,
+
+00:01:36.400 --> 00:01:38.559
+the number of doses of nicotine,
+
+00:01:38.560 --> 00:01:40.799
+(that's the yellow line here),
+
+00:01:40.800 --> 00:01:44.199
+and this is referring to nicotine gum.
+
+00:01:44.240 --> 00:01:45.559
+What we're going to be talking about
+
+00:01:45.560 --> 00:01:47.839
+is looking at connections, the idea
+
+00:01:47.840 --> 00:01:49.879
+that plotting your data can actually
+
+00:01:49.880 --> 00:01:52.119
+help you figure out what's going on.
+
+00:01:52.120 --> 00:01:53.079
+This is just one month.
+
+00:01:53.080 --> 00:01:55.439
+I've been doing this for a couple of months now,
+
+00:01:55.440 --> 00:01:57.559
+but I felt comfortable showing one month
+
+00:01:57.560 --> 00:01:59.439
+with a limited subset of the variables.
+
+NOTE How to set up your org templates
+
+00:01:59.440 --> 00:02:02.239
+What I'm going to be doing in this presentation
+
+00:02:02.240 --> 00:02:05.279
+is showing you how to set up your org templates
+
+00:02:05.280 --> 00:02:08.799
+so that you can, you know, hit a hotkey
+
+00:02:08.800 --> 00:02:11.839
+to capture today's data with an org template--
+
+00:02:11.840 --> 00:02:14.199
+or in this case yesterday's. Usually I'm saying, okay,
+
+00:02:14.200 --> 00:02:15.639
+yesterday this happened,
+
+00:02:15.640 --> 00:02:17.479
+because you don't know until the day's over
+
+00:02:17.480 --> 00:02:19.719
+how many pieces of nicotine gum you ate
+
+00:02:19.720 --> 00:02:21.439
+or how many hours you slept.
+
+00:02:21.440 --> 00:02:25.959
+So usually we're recording data for the previous day.
+
+00:02:25.960 --> 00:02:28.079
+We can set up a capture template
+
+00:02:28.080 --> 00:02:30.919
+so that it fills a little org entry. One for exercise,
+
+00:02:30.920 --> 00:02:34.279
+one for sleep, one for nicotine, one for distress.
+
+00:02:34.280 --> 00:02:36.919
+Here distress is just 1 to 10:
+
+00:02:36.920 --> 00:02:38.559
+how bad do you feel today?
+
+00:02:38.560 --> 00:02:41.639
+It's not a scientific measure, but you know,
+
+00:02:41.640 --> 00:02:43.359
+many, many things ask you to rate
+
+00:02:43.360 --> 00:02:47.119
+on a scale of 1 to 10, how bad is the anxiety,
+
+00:02:47.120 --> 00:02:49.639
+how bad is the general level of stress,
+
+00:02:49.640 --> 00:02:51.679
+and so without a lot of complication,
+
+00:02:51.680 --> 00:02:53.159
+I just rate that one to ten.
+
+00:02:53.160 --> 00:02:58.799
+Pain, okay, we won't have to get into any details,
+
+00:02:58.800 --> 00:03:00.959
+but if there is a level of chronic pain, well,
+
+00:03:00.960 --> 00:03:04.239
+I put that between 1 and 10. As we can see here,
+
+00:03:04.240 --> 00:03:07.319
+during the period that I've shown you, it's pretty low.
+
+00:03:07.320 --> 00:03:11.919
+There's some. If you miss a dose of medication,
+
+00:03:11.920 --> 00:03:13.599
+you can track that, in this case
+
+00:03:13.600 --> 00:03:17.639
+with a big ugly red triangle, you know.
+
+00:03:17.640 --> 00:03:24.279
+You can see, I can see here that in mid-, in late September,
+
+00:03:24.280 --> 00:03:29.199
+sorry, in early to mid-October,
+
+00:03:29.200 --> 00:03:30.999
+I stopped using the nicotine gum
+
+00:03:31.000 --> 00:03:32.959
+and probably should have cut down more gradually
+
+00:03:32.960 --> 00:03:34.759
+because my sleep suffered. Look at this.
+
+00:03:34.760 --> 00:03:37.199
+The sleep line is down here, okay?
+
+NOTE How to do it in GNU Emacs
+
+00:03:38.320 --> 00:03:39.519
+What I'm going to do now,
+
+00:03:39.520 --> 00:03:40.879
+now that I've shown you the graph
+
+00:03:40.880 --> 00:03:44.799
+and some of the things that are useful about it,
+
+00:03:44.800 --> 00:03:46.639
+I'm going to actually take a step back
+
+00:03:46.640 --> 00:03:50.319
+and show you from start to finish how you can do this
+
+00:03:50.320 --> 00:03:53.319
+in GNU Emacs, and I have a little template generator
+
+00:03:53.320 --> 00:03:56.279
+that you can use if you'd like.
+
+00:03:56.280 --> 00:03:59.919
+All right, so let's go back.
+
+00:03:59.920 --> 00:04:01.479
+Let's step back from this file.
+
+00:04:01.480 --> 00:04:07.599
+We're going to split the screen, and on the left side,
+
+00:04:07.600 --> 00:04:09.839
+I'm going to put the underlying Org file
+
+00:04:09.840 --> 00:04:10.919
+that generates this graph.
+
+00:04:10.920 --> 00:04:16.839
+Let me shrink that a little bit.
+
+NOTE Overview of the presentation
+
+00:04:16.840 --> 00:04:22.759
+All right, I'm going to work my way backwards
+
+00:04:22.760 --> 00:04:26.519
+from the template to the template generator,
+
+00:04:26.520 --> 00:04:28.439
+meaning that you'll be able to spit out,
+
+00:04:28.440 --> 00:04:31.839
+given your own specification of health variables,
+
+00:04:31.840 --> 00:04:33.519
+you'll be able to have it spit out
+
+00:04:33.520 --> 00:04:38.159
+a custom Gnuplot script like this
+
+00:04:38.160 --> 00:04:41.319
+that's preset up with the definitions
+
+00:04:41.320 --> 00:04:43.159
+for the column view in Org mode.
+
+00:04:43.160 --> 00:04:45.399
+I'm assuming a little bit of familiarity
+
+00:04:45.400 --> 00:04:47.199
+with Org mode and Gnuplotting,
+
+00:04:47.200 --> 00:04:51.959
+but I'll try to explain as much as I can as I go along.
+
+NOTE The journal
+
+00:04:51.960 --> 00:04:59.039
+The journal here is where... okay, okay, one moment.
+
+00:04:59.040 --> 00:05:03.519
+So as you can see, there's a sub-entry here
+
+00:05:03.520 --> 00:05:06.279
+for each day that I've included from my data set
+
+00:05:06.280 --> 00:05:08.559
+starting on September 13th of this year
+
+00:05:08.560 --> 00:05:10.399
+and ending on October 17th.
+
+00:05:10.400 --> 00:05:16.959
+And there's an Org property drawer with
+
+00:05:16.960 --> 00:05:22.999
+the corresponding names of each field and the value.
+
+00:05:29.800 --> 00:05:36.759
+Now the idea here is that the columns specify...
+
+00:05:36.760 --> 00:05:40.639
+if you know a little bit about Org mode,
+
+00:05:40.640 --> 00:05:43.479
+what happens is that you...
+
+00:05:43.480 --> 00:05:50.919
+let's say that I hit the key for my journal template,
+
+00:05:50.920 --> 00:05:52.799
+which... Mine is very similar.
+
+NOTE The capture buffer
+
+00:05:52.800 --> 00:06:00.879
+This is the capture buffer for today's date,
+
+00:06:00.880 --> 00:06:02.679
+and if you're recording yesterday's date,
+
+00:06:02.680 --> 00:06:04.519
+you can just flip it like that if you need to.
+
+00:06:04.520 --> 00:06:08.639
+Then I say, yesterday, I remember
+
+00:06:08.640 --> 00:06:11.159
+I went for about a one-mile walk,
+
+00:06:11.160 --> 00:06:14.119
+so that's probably about 20 minutes,
+
+00:06:14.120 --> 00:06:16.519
+and that I had such and such,
+
+00:06:16.520 --> 00:06:19.079
+I had eight and a half hours of sleep, let's say.
+
+00:06:19.080 --> 00:06:22.479
+I estimate how many pieces of nicotine gum I have.
+
+00:06:22.480 --> 00:06:25.799
+I try to count as closely as I can, how much distress,
+
+00:06:25.800 --> 00:06:26.359
+you know what I mean,
+
+00:06:26.360 --> 00:06:28.279
+whether or not I missed a dose of medication.
+
+00:06:28.280 --> 00:06:32.399
+Then when you hit C-c C-c,
+
+00:06:32.400 --> 00:06:39.799
+it captures that to the end of your Org file.
+
+00:06:39.800 --> 00:06:46.679
+Now what this shows is that... I cut and paste it in.
+
+00:06:46.680 --> 00:06:48.159
+I've been keeping these entries every day for months,
+
+00:06:48.160 --> 00:06:51.319
+and that I cut and pasted in a month of data.
+
+NOTE The columnview table
+
+00:06:51.320 --> 00:07:00.799
+Now I'm going to dig in a little bit to the Gnuplot script.
+
+00:07:00.800 --> 00:07:07.759
+This here, all this stuff, is one component of the graph,
+
+00:07:07.760 --> 00:07:11.359
+and I'll go over how it works.
+
+00:07:11.360 --> 00:07:19.319
+First, the items through this column declaration here,
+
+00:07:19.320 --> 00:07:30.199
+and the id:myid, this columnview table here,
+
+00:07:30.200 --> 00:07:34.919
+#+BEGIN: columnview, this whole bit here,
+
+00:07:34.920 --> 00:07:39.879
+is going to get filled in with the corresponding columns,
+
+00:07:39.880 --> 00:07:43.039
+exercise minutes, sleep hours, nicotine doses.
+
+00:07:43.040 --> 00:07:53.559
+And then it gets pumped out by Org mode into a file
+
+00:07:53.560 --> 00:07:59.840
+that looks like this: tab-separated values
+
+00:07:59.841 --> 00:08:03.479
+with an ISO-style date at the beginning.
+
+NOTE Gnuplot
+
+00:08:03.480 --> 00:08:10.359
+So what we're going to do is we're going to go through
+
+00:08:10.360 --> 00:08:14.479
+the Gnuplot portion of this,
+
+00:08:14.480 --> 00:08:16.359
+and I'm going to enlarge the font a little.
+
+00:08:21.280 --> 00:08:23.719
+I'm going to go line by line through the Gnuplot portion.
+
+00:08:23.720 --> 00:08:30.639
+Now, my template generator will give you one like this.
+
+00:08:30.640 --> 00:08:33.119
+You don't have to write this from scratch.
+
+00:08:33.120 --> 00:08:35.679
+But I'm going to go through it line by line
+
+00:08:35.680 --> 00:08:37.479
+because if you do use the template,
+
+00:08:37.480 --> 00:08:42.199
+then it'll help to have gone through it line by line,
+
+00:08:42.200 --> 00:08:46.679
+because you're probably going to have to modify it.
+
+00:08:46.680 --> 00:08:49.119
+So first, we're going to clear the graphics
+
+00:08:49.120 --> 00:08:50.199
+from any previous runs
+
+00:08:50.200 --> 00:08:53.799
+so that if we reuse the same Gnuplot process,
+
+00:08:53.800 --> 00:08:57.759
+we're not overwriting the old--
+
+00:08:57.760 --> 00:09:00.719
+that we are completely overwriting the old image.
+
+00:09:00.720 --> 00:09:03.319
+So that's the purpose of this line here.
+
+NOTE Output parameters
+
+00:09:03.320 --> 00:09:08.559
+The output parameters: we want to put out an SVG file.
+
+00:09:08.560 --> 00:09:13.639
+Font Arial, that's funny,
+
+00:09:13.640 --> 00:09:16.119
+but I don't know what font it's actually ending up choosing,
+
+00:09:16.120 --> 00:09:16.879
+but it looks fine.
+
+00:09:16.880 --> 00:09:19.639
+Then we want it to be square,
+
+00:09:19.640 --> 00:09:21.919
+so I'm giving it 900 by 900 pixels,
+
+00:09:21.920 --> 00:09:23.719
+even though it is a scalable vector graphic.
+
+00:09:23.720 --> 00:09:29.159
+We're putting it in the same folder as the org file,
+
+00:09:29.160 --> 00:09:30.799
+example.svg.
+
+00:09:30.800 --> 00:09:39.519
+These lines here set it up to use the Org mode format
+
+00:09:39.520 --> 00:09:42.679
+that we showed in the other file over here.
+
+00:09:42.680 --> 00:09:48.359
+The time format is four-digit year, two-digit month,
+
+00:09:48.360 --> 00:09:50.359
+two-digit day.
+
+00:09:50.360 --> 00:09:56.479
+The time format doesn't specify here the time,
+
+00:09:56.480 --> 00:09:59.599
+but that doesn't seem to mess it up.
+
+00:09:59.600 --> 00:10:02.439
+This line "set datafile separator" means that
+
+00:10:02.440 --> 00:10:04.239
+the separators between that
+
+00:10:04.240 --> 00:10:06.959
+and between all the other fields are tabs,
+
+00:10:06.960 --> 00:10:08.919
+which is what Org mode does
+
+00:10:08.920 --> 00:10:10.999
+when it spits out a table by default.
+
+00:10:11.000 --> 00:10:15.479
+Okay, along to the next lines.
+
+NOTE Time series data
+
+00:10:15.480 --> 00:10:18.119
+We're going to set up for time series data,
+
+00:10:18.120 --> 00:10:22.807
+meaning that the x-axis is going to be time,
+
+00:10:22.808 --> 00:10:26.119
+x2tics 1 format.
+
+00:10:26.120 --> 00:10:30.399
+I believe this means that every day has one tick
+
+00:10:30.400 --> 00:10:32.879
+and that this tells it that the first--
+
+00:10:32.880 --> 00:10:39.359
+unfortunately, I forget the exact meaning of this one line.
+
+00:10:39.360 --> 00:10:44.959
+I'm just going to move on. We want one X tick per day,
+
+00:10:44.960 --> 00:10:46.519
+and because X is in seconds,
+
+00:10:46.520 --> 00:10:50.319
+it's 24 hours times 60 minutes times 60 seconds.
+
+00:10:50.320 --> 00:10:55.639
+This line "set grid xtics" gives us
+
+00:10:55.640 --> 00:10:57.279
+a vertical line on each day of the graph.
+
+00:10:57.280 --> 00:10:58.319
+I'll pull up the graph
+
+00:10:58.320 --> 00:11:00.039
+just so that it's a little easier to see.
+
+00:11:00.040 --> 00:11:03.919
+All these vertical lines, one on each day,
+
+00:11:03.920 --> 00:11:06.199
+that's given to you by "set grid xtics".
+
+00:11:06.200 --> 00:11:10.159
+One Y tick every five points.
+
+00:11:10.160 --> 00:11:13.719
+So here at five pieces of nicotine,
+
+00:11:13.720 --> 00:11:15.959
+we've got a five, at ten pieces – well,
+
+00:11:15.960 --> 00:11:19.679
+we don't want to eat ten pieces, but ten, fifteen, twenty.
+
+00:11:19.680 --> 00:11:25.479
+Rotating the labels to make them fit a little bit better,
+
+00:11:25.480 --> 00:11:28.039
+that's this part here where the labels are sideways,
+
+00:11:28.040 --> 00:11:30.639
+and even with just one month of data,
+
+00:11:30.640 --> 00:11:35.159
+they're getting a little crowded.
+
+00:11:35.160 --> 00:11:41.399
+This "set key box lc" just makes the line around the key,
+
+00:11:41.400 --> 00:11:44.039
+the legend here, a little bit less severe.
+
+00:11:44.040 --> 00:11:51.079
+set xtics format: this makes it so that, for example,
+
+00:11:51.080 --> 00:11:53.479
+I've done a United-States-style date here
+
+00:11:53.480 --> 00:11:55.279
+with the month and then the day.
+
+00:11:55.280 --> 00:11:58.839
+You don't necessarily have to do that.
+
+00:11:58.840 --> 00:12:01.959
+You can have whatever you want.
+
+00:12:01.960 --> 00:12:03.079
+This xtics format,
+
+00:12:03.080 --> 00:12:06.319
+that relates to how the dates are printed.
+
+00:12:06.320 --> 00:12:12.519
+Remember that over here, this set timefmt,
+
+00:12:12.520 --> 00:12:15.159
+that relates to how the dates are formatted
+
+00:12:15.160 --> 00:12:16.999
+in the Org mode output.
+
+00:12:17.000 --> 00:12:18.319
+So remember, those are two...
+
+00:12:18.320 --> 00:12:19.519
+You don't want to mix those up.
+
+00:12:19.520 --> 00:12:23.799
+All right, "yrange [0:40]".
+
+00:12:23.800 --> 00:12:28.719
+Thus far, my exercise sessions have all been
+
+00:12:28.720 --> 00:12:31.479
+less than 30 minutes, and nothing's gone over 30.
+
+00:12:31.480 --> 00:12:35.839
+If you have a health variable
+
+00:12:35.840 --> 00:12:38.119
+that is in a significantly different range,
+
+00:12:38.120 --> 00:12:41.639
+you may need to get a slightly more complicated
+
+00:12:41.640 --> 00:12:43.719
+Gnuplot script because it is possible to plot
+
+00:12:43.720 --> 00:12:46.479
+multiple yranges in one plot
+
+00:12:46.480 --> 00:12:48.719
+if you have a variable that uses a different range.
+
+00:12:48.720 --> 00:12:49.759
+It's just a little trickier.
+
+00:12:49.760 --> 00:12:55.919
+These parts here, aside from the fact
+
+00:12:55.920 --> 00:12:59.079
+that you might make some changes that relate to
+
+00:12:59.080 --> 00:13:01.319
+the date and your country format,
+
+00:13:01.320 --> 00:13:03.239
+are going to be the same.
+
+00:13:03.240 --> 00:13:05.919
+This is like boilerplate for almost anything.
+
+NOTE Health variables
+
+00:13:05.920 --> 00:13:09.799
+Now here are the parts that are going to vary
+
+00:13:09.800 --> 00:13:13.399
+depending on what health variables you want to store.
+
+00:13:13.400 --> 00:13:18.039
+There are three main sections here.
+
+00:13:18.040 --> 00:13:28.719
+One is setting the different line types that are used.
+
+00:13:28.720 --> 00:13:32.479
+Setting linetype 1 with line width 2, line color RGB.
+
+00:13:32.480 --> 00:13:34.959
+Unfortunately, Gnuplot is a little bit cryptic,
+
+00:13:34.960 --> 00:13:36.879
+which is why I've made this template generator
+
+00:13:36.880 --> 00:13:37.999
+that I'll show you in a moment.
+
+00:13:38.000 --> 00:13:43.039
+I pick a color. So this is exercise, forest green.
+
+00:13:43.040 --> 00:13:49.279
+Point size 1, meaning you get
+
+00:13:49.280 --> 00:13:51.599
+these little green triangles about that size.
+
+00:13:51.600 --> 00:13:54.719
+But the point type 9 is the pointing up triangle.
+
+00:13:54.720 --> 00:13:59.519
+Line type 2, purple. So that's the sleep line.
+
+00:13:59.520 --> 00:14:02.999
+So we're just establishing these different line types
+
+00:14:03.000 --> 00:14:04.719
+that we've given arbitrary numbers.
+
+00:14:04.720 --> 00:14:08.959
+Now onto the next section.
+
+00:14:08.960 --> 00:14:12.919
+Oh, before I move on here,
+
+00:14:12.920 --> 00:14:16.119
+you can see point type 11 for line 5, which is red.
+
+00:14:16.120 --> 00:14:18.079
+And that's the missed medications line,
+
+00:14:18.080 --> 00:14:20.639
+so you get a triangle that's upside down
+
+00:14:20.640 --> 00:14:22.679
+because that's point shape 11.
+
+NOTE Goal lines
+
+00:14:22.680 --> 00:14:27.879
+All right. The next section here is the goal lines.
+
+00:14:27.880 --> 00:14:33.440
+There are horizontal dashed lines here
+
+00:14:33.441 --> 00:14:37.359
+at 8 purple hours of sleep, because 8 hours is the goal.
+
+00:14:37.360 --> 00:14:41.519
+So there's a horizontal line at Y = 8.
+
+00:14:41.520 --> 00:14:43.879
+For pieces of nicotine gum,
+
+00:14:43.880 --> 00:14:46.959
+I'm trying to keep it to around 5 right now.
+
+00:14:46.960 --> 00:14:52.519
+So my goal line is at 5. So these...
+
+00:14:52.520 --> 00:14:56.759
+Here, a goal of at least 20 minutes of exercise.
+
+00:14:56.760 --> 00:14:59.079
+Sometimes I get more, sometimes I get less.
+
+00:14:59.080 --> 00:15:02.199
+There's a green line and a 20, showing that that's the goal.
+
+00:15:02.200 --> 00:15:06.479
+These lines here are actually the goal lines.
+
+00:15:06.480 --> 00:15:09.119
+You can specify the goal for each one
+
+00:15:09.120 --> 00:15:11.999
+in the template generator that I'll show you.
+
+NOTE The Gnuplot command
+
+00:15:12.000 --> 00:15:28.079
+The last part is the actual plot command.
+
+00:15:28.080 --> 00:15:30.199
+So the dependent... So okay,
+
+00:15:30.200 --> 00:15:34.919
+these all start with 1, "using 1" against this variable.
+
+00:15:34.920 --> 00:15:41.599
+So $2... This is a ternary operator here
+
+00:15:41.600 --> 00:15:49.199
+that says if the value of the second column is zero,
+
+00:15:49.200 --> 00:15:52.359
+then don't plot a point. In other words,
+
+00:15:52.360 --> 00:15:56.079
+not a number means it won't plot a point.
+
+00:15:56.080 --> 00:15:58.919
+The template generator lets you skip over
+
+00:15:58.920 --> 00:16:02.119
+the details of that. It sticks this in there.
+
+00:16:02.120 --> 00:16:02.759
+I'll show you.
+
+00:16:02.760 --> 00:16:09.399
+So we only want to plot a point when the value is non-zero.
+
+00:16:09.400 --> 00:16:12.479
+If there was no exercise, we're not plotting a point.
+
+00:16:12.480 --> 00:16:15.759
+The with construct means we'll plot data
+
+00:16:15.760 --> 00:16:21.340
+using date against exercise with points,
+
+00:16:21.341 --> 00:16:25.519
+the title is "exercise (minutes)", line type 1.
+
+00:16:25.520 --> 00:16:29.839
+Remember, we established line type 1 up here
+
+00:16:29.840 --> 00:16:35.079
+as being forest green, point style 1,
+
+00:16:35.080 --> 00:16:37.599
+point type 9, green triangles.
+
+00:16:37.600 --> 00:16:42.399
+Now I'm going to show 1 against column 3,
+
+00:16:42.400 --> 00:16:43.919
+which is "hours of sleep".
+
+00:16:43.920 --> 00:16:46.039
+This one is plotted with lines,
+
+00:16:46.040 --> 00:16:48.599
+so we don't specify a point type or point size,
+
+00:16:48.600 --> 00:16:51.719
+just a line type 2. And remember, you can see
+
+00:16:51.720 --> 00:16:55.240
+that line type 2 is defined as purple
+
+00:16:55.241 --> 00:16:57.359
+with point type 1, point size 1.
+
+00:16:57.360 --> 00:16:59.959
+Okay, so I did specify point size and point type,
+
+00:16:59.960 --> 00:17:01.479
+but because I'm not plotting with points,
+
+00:17:01.480 --> 00:17:02.279
+those are ignored.
+
+00:17:02.280 --> 00:17:08.799
+Here we come to the line with nicotine.
+
+00:17:08.800 --> 00:17:11.559
+The fourth column is the nicotine number,
+
+00:17:11.560 --> 00:17:13.199
+the fourth column from the Org mode file.
+
+00:17:13.200 --> 00:17:16.007
+So here you can see how we're telling Gnuplot
+
+00:17:16.008 --> 00:17:19.799
+to take each column of the tab-separated Org mode file
+
+00:17:19.800 --> 00:17:21.119
+and put it into the graph.
+
+00:17:21.120 --> 00:17:25.959
+The line types are set up here.
+
+00:17:25.960 --> 00:17:30.799
+The goal lines are set up here.
+
+00:17:30.800 --> 00:17:35.559
+And then the actual plot command is set up here.
+
+NOTE The template generator
+
+00:17:35.560 --> 00:17:41.319
+So now we're going to work further backwards
+
+00:17:41.320 --> 00:17:42.959
+from this Gnuplot template
+
+00:17:42.960 --> 00:17:46.559
+to the template generator that I used to make it.
+
+00:17:46.560 --> 00:18:01.959
+Now I'm not going to go into
+
+00:18:01.960 --> 00:18:03.759
+all of the details of the code,
+
+00:18:03.760 --> 00:18:06.159
+but what I am going to show you is that
+
+00:18:06.160 --> 00:18:10.679
+there's a variable called `health-factors`.
+
+00:18:10.680 --> 00:18:15.839
+And what this does, this `health-factors-from-list`
+
+00:18:15.840 --> 00:18:20.919
+lets you specify, with a property list
+
+00:18:20.920 --> 00:18:22.679
+of keyword and value pairs
+
+00:18:22.680 --> 00:18:24.799
+(here's the keyword name and the value is exercise),
+
+00:18:24.800 --> 00:18:28.199
+the goal that I want 20 minutes of exercise,
+
+00:18:28.200 --> 00:18:30.199
+that the unit is minutes,
+
+00:18:30.200 --> 00:18:36.159
+that the color is forest green, and so on.
+
+00:18:36.160 --> 00:18:39.439
+The aspects of the Gnuplot setup
+
+00:18:39.440 --> 00:18:43.559
+have been abstracted here.
+
+00:18:43.560 --> 00:18:49.279
+Eight hours of sleep is the goal here.
+
+00:18:49.280 --> 00:18:54.039
+The hours are units. What color,
+
+00:18:54.040 --> 00:18:55.119
+what thickness of the line.
+
+00:18:55.120 --> 00:19:00.079
+Here we specify the number of points.
+
+00:19:00.080 --> 00:19:01.279
+There's references online
+
+00:19:01.280 --> 00:19:05.199
+that show you what point types are what shapes in Gnuplot,
+
+00:19:05.200 --> 00:19:11.479
+and so on and so forth.
+
+NOTE The code that creates a template
+
+00:19:11.480 --> 00:19:17.399
+I'll walk through the code a little bit that does this,
+
+00:19:17.400 --> 00:19:20.439
+that actually takes these pieces,
+
+00:19:20.440 --> 00:19:24.399
+that takes this specification of what your variables are
+
+00:19:24.400 --> 00:19:30.439
+and turns it into a template.
+
+00:19:30.440 --> 00:19:37.959
+First, I'm using EIEIO,
+
+00:19:37.960 --> 00:19:41.719
+the object system that's included with GNU Emacs.
+
+00:19:41.720 --> 00:19:45.119
+It's a reasonable facsimile
+
+00:19:45.120 --> 00:19:47.319
+of the Common Lisp Object System.
+
+00:19:47.320 --> 00:19:51.239
+What I'm going to be doing here
+
+00:19:51.240 --> 00:19:56.199
+is defining a class with each of those items,
+
+00:19:56.200 --> 00:19:58.479
+those properties that we talked about in that list
+
+00:19:58.480 --> 00:20:01.319
+that lets you specify name, what the goal is,
+
+00:20:01.320 --> 00:20:04.239
+what the units are, and the Gnuplot things
+
+00:20:04.240 --> 00:20:06.559
+(the Gnuplot parameters like thickness,
+
+00:20:06.560 --> 00:20:13.239
+plot type, and all that) into a class that will then
+
+00:20:13.240 --> 00:20:16.519
+spit out the template once you feed it
+
+00:20:16.520 --> 00:20:27.759
+some of these health factor objects. So just a moment.
+
+00:20:27.760 --> 00:20:34.479
+For example, you can see that this template
+
+00:20:34.480 --> 00:20:46.319
+originally came from being generated by this code here.
+
+00:20:46.320 --> 00:20:52.959
+To use the template,
+
+00:20:52.960 --> 00:20:55.399
+to use this little template generator...
+
+00:20:55.400 --> 00:21:06.279
+See, here's where it spits out the line type
+
+00:21:06.280 --> 00:21:07.439
+given the pieces.
+
+00:21:07.440 --> 00:21:09.679
+This is all just text formatting.
+
+00:21:09.680 --> 00:21:11.319
+This is one of the things that Emacs Lisp
+
+00:21:11.320 --> 00:21:13.159
+just really excels at.
+
+00:21:13.160 --> 00:21:19.519
+I need to take a piece of data
+
+00:21:19.520 --> 00:21:22.639
+like a list of health information,
+
+00:21:22.640 --> 00:21:25.679
+a list of health variables, what their units are,
+
+00:21:25.680 --> 00:21:28.119
+and how they're supposed to be formatted in Gnuplot,
+
+00:21:28.120 --> 00:21:30.199
+and go from that to the nice template.
+
+00:21:30.200 --> 00:21:31.719
+So that's pretty much the whole thing.
+
+00:21:31.720 --> 00:21:40.999
+I want to see if there's anything I missed.
+
+NOTE The power of the chart
+
+00:21:41.000 --> 00:21:51.519
+Bring up the chart.
+
+00:21:51.520 --> 00:21:54.279
+This has been really useful
+
+00:21:54.280 --> 00:21:59.599
+for communicating with healthcare professionals
+
+00:21:59.600 --> 00:22:04.399
+because you are both on the same page
+
+00:22:04.400 --> 00:22:05.879
+about exactly what is happening,
+
+00:22:05.880 --> 00:22:10.679
+what's been happening because if... Let's say
+
+00:22:10.680 --> 00:22:15.239
+that you're tired when you talk to your care provider.
+
+00:22:15.240 --> 00:22:17.559
+Well, if you have objective information
+
+00:22:17.560 --> 00:22:18.839
+that you've been recording every day,
+
+00:22:18.840 --> 00:22:22.399
+that you're ahead of the game, really,
+
+00:22:22.400 --> 00:22:25.119
+because you don't need, necessarily, the presence of mind
+
+00:22:25.120 --> 00:22:27.679
+to be able to give your care provider
+
+00:22:27.680 --> 00:22:30.039
+a complete picture of what's going on in your world.
+
+00:22:30.040 --> 00:22:33.039
+If you can find those few minutes a day to enter--
+
+00:22:33.040 --> 00:22:34.399
+not even a few minutes,
+
+00:22:34.400 --> 00:22:37.759
+really just a minute to enter the data
+
+00:22:37.760 --> 00:22:39.839
+and say what happened yesterday...
+
+00:22:39.840 --> 00:22:42.759
+I'm finding over these months
+
+00:22:42.760 --> 00:22:45.039
+that I've been more in touch with my health when I can--
+
+00:22:45.040 --> 00:22:49.919
+not forced, but when I have the habit,
+
+00:22:49.920 --> 00:22:52.159
+the consistent habit every single day
+
+00:22:52.160 --> 00:22:55.839
+of recording that data--I'm accountable to myself.
+
+00:22:55.840 --> 00:22:57.359
+It's interesting.
+
+00:22:57.360 --> 00:23:01.039
+I guess it gets into a little bit of ideas
+
+00:23:01.040 --> 00:23:02.439
+about the Quantified Self
+
+00:23:02.440 --> 00:23:05.239
+and how holding yourself accountable
+
+00:23:05.240 --> 00:23:09.919
+can change what you do and what the outcomes are.
+
+00:23:09.920 --> 00:23:14.159
+Just look at this here.
+
+00:23:14.160 --> 00:23:17.279
+Without getting into too much detail,
+
+00:23:17.280 --> 00:23:19.679
+one of the reasons I track my sleep is because,
+
+00:23:19.680 --> 00:23:22.039
+as you can see, my sleep
+
+00:23:22.040 --> 00:23:26.759
+is not as well-regulated as most people,
+
+00:23:26.760 --> 00:23:31.439
+and that's why I need to do that.
+
+00:23:31.440 --> 00:23:34.440
+This was a time... 10, 12,
+
+00:23:34.441 --> 00:23:36.639
+here's 14 hours of sleep, that's depression.
+
+00:23:36.640 --> 00:23:43.519
+It oscillates a little bit. But then below the goal line,
+
+00:23:43.520 --> 00:23:45.639
+the things are a little more normal here.
+
+00:23:45.640 --> 00:23:46.919
+This is a little more normal.
+
+00:23:46.920 --> 00:23:52.079
+But then, really, without thinking about it too much,
+
+00:23:52.080 --> 00:23:56.239
+I cut out the nicotine, and my sleep suffered.
+
+00:23:56.240 --> 00:24:00.199
+Just the fact that I'm able to look and see that connection
+
+00:24:00.200 --> 00:24:01.359
+is really amazing to me.
+
+00:24:01.360 --> 00:24:02.759
+Maybe I would have anyway,
+
+00:24:02.760 --> 00:24:05.239
+but looking at the whole months of data,
+
+00:24:05.240 --> 00:24:07.399
+there have been many things to discuss
+
+00:24:07.400 --> 00:24:09.919
+and many things to think about.
+
+NOTE Thanks
+
+00:24:09.920 --> 00:24:12.159
+Because this is a short presentation,
+
+00:24:12.160 --> 00:24:13.839
+I probably should wrap up.
+
+00:24:13.840 --> 00:24:18.239
+I just want to thank the whole Emacs community
+
+00:24:18.240 --> 00:24:23.319
+for being there and for including me in the conference
+
+00:24:23.320 --> 00:24:27.079
+and I hope to participate next year as well.
+
+00:24:27.080 --> 00:24:29.240
+Thank you so much.
diff --git a/2022/captions/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt b/2022/captions/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt
new file mode 100644
index 00000000..4ababba9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-hyperorg--powerful-productivity-with-hyperbole-and-org-mode--robert-weiner--answers.vtt
@@ -0,0 +1,1184 @@
+WEBVTT
+
+00:00.000 --> 00:03.880
+Sorry, it's a little tight. I'm doing a lot of stuff behind the scene and now we're ready
+
+00:03.880 --> 00:23.320
+to go live in about five seconds. Sorry, five more seconds. Five. And we are live. Hello
+
+00:23.320 --> 00:27.920
+again, everyone. Hopefully you can hear me just fine. And we just had a talk with Bob
+
+00:27.920 --> 00:32.800
+and Bob is now here in the room. Hi Bob, how are you doing? Hi, doing well. Good to see
+
+00:32.800 --> 00:39.120
+you, Leo. You're doing a great job. Well, thank you. I must say, I am back to asking
+
+00:39.120 --> 00:44.160
+questions, but for the last two hours, I have been running after pre-recordings. I have
+
+00:44.160 --> 00:48.800
+been doing the re-encoding and stuff like this, which means it doesn't look like this,
+
+00:48.800 --> 00:53.220
+but this was very much of a marathon. And I'm glad to be here to be in a room with you
+
+00:53.220 --> 00:57.000
+because I'm actually going to be able to rest a little bit.
+
+00:57.000 --> 01:04.400
+Did you see the presentation? Not yet. Okay, can I lie? If I were able to lie, I would
+
+01:04.400 --> 01:08.960
+say yes, I've been very attentively watching everything in a presentation, but sadly, no,
+
+01:08.960 --> 01:13.160
+I've been quite busy elsewhere. And because, well, no, we don't need to tell them about
+
+01:13.160 --> 01:20.120
+this. But Bob, do you have the pad open in front of you? Yes. Well, I can't look at both
+
+01:20.120 --> 01:26.280
+at the same time, but... It's fine. You don't need to see my face. You've seen it. Okay.
+
+01:26.280 --> 01:31.120
+I see it here. Can you have multiple implicit button files? If so, how would you know which
+
+01:31.120 --> 01:39.780
+link came from what files? I guess they're one-way links, so you embed buttons in any
+
+01:39.780 --> 01:46.600
+number of files that you want and you traverse them, or they perform actions for you. There
+
+01:46.600 --> 01:52.900
+are three categories of buttons. We were showing you implicit buttons, which is one category.
+
+01:52.900 --> 01:59.800
+Then there's explicit buttons, which can also perform arbitrary actions, but those you embed
+
+01:59.800 --> 02:05.860
+one at a time in a file and you say, okay, I want this to be a link to an org file section
+
+02:05.860 --> 02:12.560
+or something. And then... Sorry for the interruption. Can we keep going? The third kind are global
+
+02:12.560 --> 02:18.500
+buttons, which we demonstrated there when you put those in your personal button file,
+
+02:18.500 --> 02:23.920
+and then you can access them by name anywhere in Emacs without even having a buffer up on
+
+02:23.920 --> 02:30.560
+screen. The next question... So I should just go down the questions? You don't have any
+
+02:30.560 --> 02:36.960
+Leo? No, no, feel free. I'm mostly here to be the pretty face that when a problem happens,
+
+02:36.960 --> 02:41.400
+I'm here to help. But since you have questions already in the pad, I'm more than happy to
+
+02:41.400 --> 02:45.420
+have you answer the question from the pad. And if we have a little more time, I'll come
+
+02:45.420 --> 02:49.560
+up with my own questions, so don't worry about it. Yeah, and encourage people to come into
+
+02:49.560 --> 02:57.020
+the chat. We can do something live and then go back to the Etherpad and deal with these
+
+02:57.020 --> 03:03.800
+later as well if people want to talk. So just to specify this, we might first have you answer
+
+03:03.800 --> 03:07.960
+the questions on the pad first and we'll open up the BBT a little later. For now, just you
+
+03:07.960 --> 03:17.340
+on the pad. I'll keep you posted. So are we showing the pad so people see it or I need
+
+03:17.340 --> 03:24.480
+to share that? So I'm sharing the pad right now, I'm managing what people are seeing on
+
+03:24.480 --> 03:27.840
+the stream. You might want to have the pad in front of you and read the question anyway
+
+03:27.840 --> 03:33.480
+to know which question you're actually answering. Okay, I do have the pad separately. Okay.
+
+03:33.480 --> 03:40.920
+What about using implicit buttons with multiple people with different configs? Not quite sure
+
+03:40.920 --> 03:49.820
+what the question is, but hyperbole is always thinking about people working collaboratively,
+
+03:49.820 --> 03:56.880
+though it is also somewhat focused on your personal information. So as you saw when we
+
+03:56.880 --> 04:03.940
+embedded a variable, either an Emacs list variable or an environment variable in a path,
+
+04:03.940 --> 04:08.620
+you can share those with people. You can embed hyperbole buttons in your email messages and
+
+04:08.620 --> 04:13.720
+they'll adapt based on the environment that the person activates them in. So there's a
+
+04:13.720 --> 04:22.200
+lot of useful kind of capability like that built in for collaboration as well. Coming
+
+04:22.200 --> 04:27.260
+in from org mode, would it be a fair assessment that hyperbole is in some way a generalization
+
+04:27.260 --> 04:33.240
+of what most people think of the great features of org to work across formats with the hyperbole
+
+04:33.240 --> 04:38.600
+links buttons being the recurring example and that it then further adds some capabilities
+
+04:38.600 --> 04:45.500
+again across formats being the global miner mode is interesting. I think it goes to RMS's
+
+04:45.500 --> 04:51.280
+talk that org's features could be more generalized modularized. How is hyperbole in that respect?
+
+04:51.280 --> 04:56.800
+Yes, it hyperbole is meant to give you all of these capabilities across your entire Emacs
+
+04:56.800 --> 05:05.000
+experience. So everything you saw in org mode works and all sorts of other buffer types
+
+05:05.000 --> 05:13.560
+to accept the pieces that were activating org's specific features. Internal radio targets,
+
+05:13.560 --> 05:22.560
+are they able to link to other org mode files that are part of my agenda? Certainly you
+
+05:22.560 --> 05:33.960
+can have, you can make a link type that crosses similar to what you saw in the K outliner
+
+05:33.960 --> 05:41.040
+links where you specified a file and then it just would have the sub part of the link
+
+05:41.040 --> 05:48.640
+that you wanted that would reference the target as well. Your package advances how useful
+
+05:48.640 --> 05:53.880
+a mouse can be with creating links. That we didn't show but you can just drag between
+
+05:53.880 --> 05:59.240
+windows and create an explicit link between things as well. Do you have any experience
+
+05:59.240 --> 06:03.640
+or thoughts about how touchscreens or mice could be used or improved with Emacs? Yes
+
+06:03.640 --> 06:13.080
+I do. In fact, when hyperbole was conceived originally it was part of a broader research
+
+06:13.080 --> 06:19.640
+project called personalized information environments. At the dawn of the web is when this started
+
+06:19.640 --> 06:25.800
+and we kind of figured people would be deluged with maybe 5,000 email messages a day or just
+
+06:25.800 --> 06:33.240
+all sorts of things like we are deluged with today. So we were thinking about sort of like
+
+06:33.240 --> 06:41.160
+org brain and the graphical sort of navigation that you could do in hyper versus and came
+
+06:41.160 --> 06:51.920
+up with some prototypes that were kind of very iPad like in the node sort of views but
+
+06:51.920 --> 06:58.760
+with much greater navigation capability. So a lot of that isn't implemented but we are
+
+06:58.760 --> 07:04.400
+always thinking about how to make things more useful and you see the smart context handling
+
+07:04.400 --> 07:10.360
+that the mouse keys do because there's drags associated with the action and the assist
+
+07:10.360 --> 07:16.800
+keys when put onto mice and those do a great many things that sort of replicate what a
+
+07:16.800 --> 07:22.960
+touchscreen might do as well. Would you consider hyperbole to be more of a format spec that
+
+07:22.960 --> 07:28.240
+can then be handled however we want or the engine itself along with that format i.e.
+
+07:28.240 --> 07:33.620
+can the simple link formats be used for other extensible purposes. Yes again hyperbole was
+
+07:33.620 --> 07:39.560
+conceived as a hypertext engine that would be part of the personalized information environments
+
+07:39.560 --> 07:47.600
+or pies and it would link that engine would then be available to multiple applications.
+
+07:47.600 --> 07:57.560
+So we sort of built an API not a web API but just a programming API that you can use and
+
+07:57.560 --> 08:03.960
+that's documented in the manual to build other applications atop hyperbole. It turned out
+
+08:03.960 --> 08:09.280
+that a lot of people didn't have that capability to program it so we just kept programming
+
+08:09.280 --> 08:14.640
+a lot of these default features that you see today with all the button types to show people
+
+08:14.640 --> 08:20.760
+what was possible. How is the integration with org roam? We're just starting to look
+
+08:20.760 --> 08:29.240
+at that you know again I just find with hyperbole there are no external required packages you
+
+08:29.240 --> 08:34.640
+just load hyperbole and whatever Emacs has that's all that it needs so that's kind of
+
+08:34.640 --> 08:40.080
+unique for such a big package like this. There are optional things like ace window that you
+
+08:40.080 --> 08:45.200
+can add on and then hyperbole will work with them but they're not required. So similarly
+
+08:45.200 --> 08:55.760
+we try to never have any separate C compiled programs like SQLite or org roam which uses
+
+08:55.760 --> 09:03.600
+SQLite that's required. However we interface to external systems like that so basically
+
+09:03.600 --> 09:12.400
+you know we'll do some interesting things with org roam nodes in the near future. When
+
+09:12.400 --> 09:19.200
+does something when doing something where do you determine where to put it k-o-t-l rollo
+
+09:19.200 --> 09:28.080
+org? I like k-o-t-l k-outline for journaling and org mode for getting things done. Sure
+
+09:28.080 --> 09:37.820
+I mean you know org and k-outliner are both outline formats so I like k-outliner for like
+
+09:37.820 --> 09:44.480
+requirements gathering anytime I need things numbered quickly I'm making lists or hierarchies
+
+09:44.480 --> 09:52.040
+I want those IDs there. Org does some of that but not nearly to the level that the k-outliner
+
+09:52.040 --> 09:58.600
+does. The rollo again I just stuff all sorts of information in there and then we have very
+
+09:58.600 --> 10:04.440
+simple search and retrieval operations that we can use on there so I don't need to worry
+
+10:04.440 --> 10:10.880
+about all of these like drawers and all the complexity that org allows because you want
+
+10:10.880 --> 10:16.760
+to publish something. I tend to use everything as a live hypertext and don't worry about
+
+10:16.760 --> 10:22.320
+printing it out or displaying it in some other format too much. So it depends on your taste
+
+10:22.320 --> 10:28.320
+I would say. Would you recommend a specific resource for getting into hyperbole or should
+
+10:28.320 --> 10:33.080
+I just start with the manual? Definitely interested in getting into this. Thank you for asking
+
+10:33.080 --> 10:39.600
+that. Definitely don't start with manual. The manual is almost 170 pages it's a reference
+
+10:39.600 --> 10:45.760
+manual for specific things that you want to know. For learning once you install hyperbole
+
+10:45.760 --> 10:55.080
+part of the menu system is control H HDD for documentation and then demo and that puts
+
+10:55.080 --> 10:59.080
+you into an interactive demo that you just walk through so it's sort of like the Emacs
+
+10:59.080 --> 11:06.980
+tutorial and that'll get you started much better than any other way and the second thing
+
+11:06.980 --> 11:13.960
+to do after that I would say is watch some of the videos. One of the videos is a talk
+
+11:13.960 --> 11:19.800
+I gave earlier that's about an hour-long talk introducing you to hyperbole and its concepts
+
+11:19.800 --> 11:25.280
+so I think those are the two best ways to get started and then you can move on to the
+
+11:25.280 --> 11:32.240
+reference manual if you're really good at reading. What is hyperorg? That's a name that
+
+11:32.240 --> 11:41.360
+Sasha made up I believe for the talk here. I thought it should be hyperborg. It would
+
+11:41.360 --> 11:48.200
+be a little funnier that right we're trying to be like a borg and get people to use hyperbole
+
+11:48.200 --> 11:55.440
+and org together and then you'll never you'll never want to be anything else except users
+
+11:55.440 --> 12:05.920
+of those packages. Anybody want to talk live on the big blue button?
+
+12:05.920 --> 12:11.960
+Again so the thing is I didn't give you the time when we were supposed to finish with
+
+12:11.960 --> 12:22.720
+the Q&A and give me just a second. I've confirmed with the people behind me that we actually
+
+12:22.720 --> 12:26.080
+need to get moving to the next talk at the top of this minute so Bob thank you so much
+
+12:26.080 --> 12:29.320
+for answering so many questions. I'm sorry we don't have more time for questions because
+
+12:29.320 --> 12:33.200
+your talk I think was a little longer than we anticipated at first but I still believe
+
+12:33.200 --> 12:35.840
+you've done a great job at first covering a lot of stuff.
+
+12:35.840 --> 12:40.080
+I'll be on the etherbed for a little while if people want to push anything else there.
+
+12:40.080 --> 12:44.040
+Also if you want to stay here we are going to open the BBB if people want to ask you
+
+12:44.040 --> 12:51.360
+questions we're going to publish the link. Bob we're going to need to get going with
+
+12:51.360 --> 12:54.560
+the stream we're starting the next talk in 20 seconds thank you so much and I'll see
+
+12:54.560 --> 13:14.640
+you later. Take care Leo thank you. Bye bye.
+
+13:24.560 --> 13:36.400
+Gosh yeah pretty much I mean I'm still on this thing if it shows up for a minute but
+
+13:36.400 --> 13:56.480
+nobody's there.
+
+13:56.480 --> 14:13.060
+Take care.
+
+14:26.480 --> 14:28.540
+you
+
+14:56.480 --> 14:58.540
+you
+
+15:26.480 --> 15:28.540
+you
+
+15:56.480 --> 15:58.540
+you
+
+16:26.480 --> 16:28.540
+you
+
+16:56.480 --> 16:58.540
+you
+
+17:26.480 --> 17:28.540
+you
+
+17:56.480 --> 17:58.540
+you
+
+18:26.480 --> 18:28.540
+you
+
+18:56.480 --> 18:58.540
+you
+
+19:26.480 --> 19:28.540
+you
+
+19:56.480 --> 19:58.540
+you
+
+20:26.480 --> 20:28.540
+you
+
+20:56.480 --> 20:58.540
+you
+
+21:26.480 --> 21:28.540
+you
+
+21:56.480 --> 21:58.540
+you
+
+22:26.480 --> 22:28.540
+you
+
+22:56.480 --> 22:58.540
+you
+
+23:26.640 --> 23:28.340
+you
+
+23:37.680 --> 23:41.040
+Would you still be up to talking?
+
+23:41.040 --> 23:56.400
+Hi, are you talking to me?
+
+23:56.400 --> 23:57.400
+Yeah.
+
+23:57.400 --> 24:12.720
+For a minute, I'm going to just go take a walk in a little bit, but I can quickly pause.
+
+24:12.720 --> 24:14.920
+Just go ahead.
+
+24:14.920 --> 24:20.780
+One thing whenever I've tried setting up any knowledge bases, I've generally thrown them
+
+24:20.780 --> 24:24.500
+away after a while, slowly picking up more and more.
+
+24:24.500 --> 24:31.680
+Right now, I'm using org room and LogSec.
+
+24:31.680 --> 24:38.340
+And one of the features I found in LogSec that I like is you're able to have the link
+
+24:38.340 --> 24:44.520
+in such a way where I can make an outline of everything I want to do on a week in one
+
+24:44.520 --> 24:49.640
+file and then in the journal view that it will dynamically generate, it will show you
+
+24:49.640 --> 24:55.240
+the tasks individually on that day just for that day.
+
+24:55.240 --> 24:57.160
+So is there any way?
+
+24:57.160 --> 25:04.720
+So it creates kind of a journal based on dated items that it's extracting from multiple other
+
+25:04.720 --> 25:06.320
+sources, right?
+
+25:06.320 --> 25:07.320
+Yeah.
+
+25:07.320 --> 25:16.840
+So it's got a section below it that's from different sources and you can go and do that
+
+25:16.840 --> 25:24.160
+and it will just dynamically put it at the bottom, but just for those specific links.
+
+25:24.160 --> 25:32.800
+You know, sort of like the idea of transclusion, right, is something that they've addressed
+
+25:32.800 --> 25:37.960
+in org mode and we haven't really dealt with that in hyperbole.
+
+25:37.960 --> 25:43.320
+So those are areas that we want to get into.
+
+25:43.320 --> 25:51.760
+I think there's a lot of work going on in LogSec and Obsidian that I look at when I
+
+25:51.760 --> 25:53.900
+have time.
+
+25:53.900 --> 25:58.720
+So there's definitely ideas to draw around that.
+
+25:58.720 --> 26:03.920
+One of the things we find is there's just covering all across Emacs, there's so much
+
+26:03.920 --> 26:12.880
+to do all the time and this being a part-time project, we have to think like RMS does across
+
+26:12.880 --> 26:17.640
+years rather than weeks just because of the energy around it.
+
+26:17.640 --> 26:25.280
+But you know, the more people can kind of like write a paragraph and say if hyperbole
+
+26:25.280 --> 26:32.040
+or some tool could do this, you know, the more likely it is that we'll approach it and
+
+26:32.040 --> 26:33.920
+turn it into reality.
+
+26:33.920 --> 26:34.920
+Yeah.
+
+26:34.920 --> 26:40.440
+Well, like you could probably write some functions that will just dynamically grab information
+
+26:40.440 --> 26:41.440
+like that out.
+
+26:41.440 --> 26:49.000
+Yeah, well, I mean like you have that with the high roller so you can just make arbitrary
+
+26:49.000 --> 26:56.080
+documents and just put stars at the front of each node and the high roller will pull
+
+26:56.080 --> 27:00.000
+out anything that you want to match on.
+
+27:00.000 --> 27:05.400
+You know, it can be regular expressions, logic expressions with and or not.
+
+27:05.400 --> 27:11.400
+So that's already there and it's very simple with the other capabilities to just turn
+
+27:11.400 --> 27:15.600
+a search into a button somewhere in your file.
+
+27:15.600 --> 27:23.200
+So you basically create your own dynamic views then without any additional mechanism.
+
+27:23.200 --> 27:27.400
+But when you want to deal with like the dates and you want to see it, you know, that's a
+
+27:27.400 --> 27:33.840
+specific view that we would program for you and provide.
+
+27:33.840 --> 27:40.880
+With Not Much and MU4E, the thing I like about Not Much More is you're able to in your search
+
+27:40.880 --> 27:48.640
+queries you can use the ands and ors with subject headers or stuff that's only in the
+
+27:48.640 --> 27:56.520
+body of the paragraph of the email or who it's to and from and I don't think MU4E has
+
+27:56.520 --> 27:59.120
+near that support.
+
+27:59.120 --> 28:07.360
+You could use something with org mode and you could do that type of stuff searching
+
+28:07.360 --> 28:12.520
+like based off of keywords with, there's a package by Alpha Papa, I can't remember the
+
+28:12.520 --> 28:13.520
+name of it.
+
+28:13.520 --> 28:14.520
+Org Rifle.
+
+28:14.520 --> 28:15.520
+OrgQL.
+
+28:15.520 --> 28:17.960
+OrgQL, yeah.
+
+28:17.960 --> 28:23.440
+And does like you have anything?
+
+28:23.440 --> 28:31.280
+I mean, yeah, it's like, I'm not sure you combine say subject, colon, whatever, your
+
+28:31.280 --> 28:38.520
+regular expression and you map that with a logic expression.
+
+28:38.520 --> 28:44.600
+So in hyperbole, in high roll though, to do a logic expression, you just do it like a
+
+28:44.600 --> 28:46.080
+Lisp expression.
+
+28:46.080 --> 28:49.040
+So but you use and or, ex or not.
+
+28:49.040 --> 28:56.920
+So you say, you know, open paren, not, and then what you want to not match to, right?
+
+28:56.920 --> 29:02.480
+This node doesn't have that in it and you know, a broader expression with an and around
+
+29:02.480 --> 29:07.000
+it would say, so it's not this and it's this.
+
+29:07.000 --> 29:11.960
+So that all exists the moment you pull up the interface to say, I want to do a string
+
+29:11.960 --> 29:12.960
+search.
+
+29:12.960 --> 29:18.080
+You can actually embed those logic expressions right in your search there and it'll do them
+
+29:18.080 --> 29:21.820
+for you.
+
+29:21.820 --> 29:28.820
+That would mostly be regex, right, or is it a different syntax?
+
+29:28.820 --> 29:34.600
+It's a different, so you can have regexes embedded in the logic expression, but the
+
+29:34.600 --> 29:44.000
+logic itself is done with like the equivalent of, you know, S expressions with and or not
+
+29:44.000 --> 29:45.200
+an ex or.
+
+29:45.200 --> 29:57.320
+So I could say and bird watch and it would only find outline items that contain the words
+
+29:57.320 --> 29:59.280
+bird and watch.
+
+29:59.280 --> 30:06.000
+So it's very simple, you know, textual like that, but then bird could be a regex if I,
+
+30:06.000 --> 30:08.500
+you know, as well.
+
+30:08.500 --> 30:15.600
+So things like that, you have to try it out, I think, you know, to really get a feel for
+
+30:15.600 --> 30:16.600
+it.
+
+30:16.600 --> 30:25.080
+I've tried it some, I just, it's just a lot harder to, they have so many of these knowledge
+
+30:25.080 --> 30:30.120
+base programs that it's hard to make a knowledge base with each one of them and then compare
+
+30:30.120 --> 30:31.120
+them.
+
+30:31.120 --> 30:32.120
+Oh, I agree.
+
+30:32.120 --> 30:33.120
+I mean, that's part of why we built it, right?
+
+30:33.120 --> 30:39.560
+I mean, we built this before org existed, so.
+
+30:39.560 --> 30:46.600
+You know, I really do want to tie them together, but I agree with Stallman that org, you know,
+
+30:46.600 --> 30:54.540
+for scientific research purposes has embedded so many things that people outside that community
+
+30:54.540 --> 30:59.240
+don't really need and, you know, it's gotten to a level of complexity, I mean, you look
+
+30:59.240 --> 31:06.080
+at the code base that I still kind of, you know, happy to interface with it and use it
+
+31:06.080 --> 31:12.560
+and I see a lot of great stuff in there, but I want to be able to have a much simpler format
+
+31:12.560 --> 31:18.160
+for when I just have all this unstructured data that I want to deal with.
+
+31:18.160 --> 31:26.760
+Yeah, there's definitely a part of org mode that, that unmodularity and all the features
+
+31:26.760 --> 31:39.080
+that doesn't feel like Unix-y and the rest of Emacs and I think like org, yeah, just
+
+31:39.080 --> 31:41.800
+some of the features, org-id, I can't remember what they are.
+
+31:41.800 --> 31:42.800
+It's really the opposite.
+
+31:42.800 --> 31:49.180
+It's like, it's coming at it from, you know, that structure process, okay, we're going
+
+31:49.180 --> 31:54.960
+to tag everything with, you know, what property it is.
+
+31:54.960 --> 31:59.800
+And hyperbole is sort of the opposite to say, well, we have relational databases for when
+
+31:59.800 --> 32:01.520
+we're doing that kind of thing.
+
+32:01.520 --> 32:07.360
+So this is for your everyday information where, you know, oh, I just grabbed all this off
+
+32:07.360 --> 32:14.440
+the web or, you know, I just added in 200 files and now I want to deal with it and kind
+
+32:14.440 --> 32:17.760
+of mix it into my Hyperverse.
+
+32:17.760 --> 32:20.640
+What kind of capabilities can you give me to do that?
+
+32:20.640 --> 32:25.480
+So say like there were 200 documents that somebody handed you and they all have this
+
+32:25.480 --> 32:31.520
+cross-reference pattern embedded in it, right, which is a version of hyperlinks, but they're
+
+32:31.520 --> 32:33.100
+not actually hyperlinks.
+
+32:33.100 --> 32:40.800
+So you just create a couple line button type in hyperbole because all the mechanisms there
+
+32:40.800 --> 32:41.800
+already.
+
+32:41.800 --> 32:48.060
+And then once you activate that type, all of those documents now have those cross-references
+
+32:48.060 --> 32:50.380
+as hyperlinks.
+
+32:50.380 --> 32:56.360
+And you solve the problem could be for millions of cross-references with three lines of code.
+
+32:56.360 --> 33:02.040
+So that's the kind of leverage that we're looking to get without people having to, you
+
+33:02.040 --> 33:09.440
+know, touch the original source format.
+
+33:09.440 --> 33:15.760
+That's one of the things your package has tackled was links in the wild, email addresses,
+
+33:15.760 --> 33:22.440
+websites that people use and identify with.
+
+33:22.440 --> 33:27.600
+And then you got all that behavior without having to learn key bindings like you do in
+
+33:27.600 --> 33:28.600
+the org, right?
+
+33:28.600 --> 33:32.360
+I mean, you got to know at least like 10 in the org, I think.
+
+33:32.360 --> 33:37.200
+And you know, it's really too largely in hyperbole.
+
+33:37.200 --> 33:42.560
+So for me, when I'm going along, you know, I just want to mark things, operate on them
+
+33:42.560 --> 33:46.680
+and not really think about the command a lot.
+
+33:46.680 --> 33:52.760
+And so, of course, we all know many commands in Emacs, but, you know, so I have that the
+
+33:52.760 --> 33:59.760
+editing commands, but the knowledge base commands, I don't really need to add on that much more
+
+33:59.760 --> 34:02.080
+and I can still be very effective.
+
+34:02.080 --> 34:10.440
+Yeah, you dealt with links in the wild while simultaneously advancing the state of the
+
+34:10.440 --> 34:13.520
+art with the implicit links.
+
+34:13.520 --> 34:20.160
+So like what can you do if you stay within your own system and you control everything?
+
+34:20.160 --> 34:28.960
+Yeah, I think that's the, you know, people love implicit buttons, but it sort of takes
+
+34:28.960 --> 34:33.520
+a while for it to sink in what you can do with it, right?
+
+34:33.520 --> 34:40.200
+Because it is a little difficult to figure out how you create your own type.
+
+34:40.200 --> 34:48.120
+But like we have a GitHub, I don't know if you use GitHub, but type built in and, you
+
+34:48.120 --> 34:57.720
+know, with very short cross references, it can access issues, commits, projects, linked
+
+34:57.720 --> 35:04.800
+to all of their things with just, you know, a few characters in your document.
+
+35:04.800 --> 35:11.720
+And so, you know, there's an interface to an entire web ecosystem that's done in one
+
+35:11.720 --> 35:19.560
+module and I verbally and, you know, you don't, all you have to do is use it.
+
+35:19.560 --> 35:24.920
+Something that could be interesting there is if you had it with next common list web
+
+35:24.920 --> 35:33.000
+browser, you click a GitHub issue on the website and it either downloads the source code or
+
+35:33.000 --> 35:39.680
+just goes and then the uses maggot or forge to download the issues and then just automatically
+
+35:39.680 --> 35:42.520
+opens it up in Emacs for you to look at it there.
+
+35:42.520 --> 35:43.520
+That'd be an interesting.
+
+35:43.520 --> 35:44.520
+Yeah.
+
+35:44.520 --> 35:52.160
+Well, we have that for, so if you just type in any buffer, you put a bug pound sign and
+
+35:52.160 --> 36:00.080
+the number and you press your action key on that, that will display that bug number for
+
+36:00.080 --> 36:05.640
+Emacs in good news and the dialogue associated with it.
+
+36:05.640 --> 36:15.440
+So, you know, we have that similar kind of thing for GitHub, GitLab and so it's, you
+
+36:15.440 --> 36:19.240
+know, a lot of people are interested in that because they have Jira or something and they
+
+36:19.240 --> 36:24.840
+just want a simple way, you know, to get at their issues in whatever web browser they
+
+36:24.840 --> 36:25.840
+use.
+
+36:25.840 --> 36:32.480
+And that's very easy to do and one of the most common things programmers do.
+
+36:32.480 --> 36:38.320
+You still there?
+
+36:38.320 --> 36:40.320
+Yeah.
+
+36:40.320 --> 36:42.320
+Okay.
+
+36:42.320 --> 36:45.560
+It's just funny.
+
+36:45.560 --> 36:53.760
+So yeah, I hope, I guess you've obviously explored hyperbole a little bit, you know,
+
+36:53.760 --> 36:59.760
+let us know what the barriers are to, you know, becoming a regular user and we'll work
+
+36:59.760 --> 37:01.480
+on this.
+
+37:01.480 --> 37:11.080
+One thing I found that I like about the K outline is if you, long form journaling is
+
+37:11.080 --> 37:18.880
+if I do that with centering the buffer, making it a little bit bigger, the text a little
+
+37:18.880 --> 37:24.200
+bit bigger, I find that I like that more than org mode.
+
+37:24.200 --> 37:28.360
+If it's short enough, it doesn't matter, but if it's long enough or my thoughts are complex
+
+37:28.360 --> 37:38.160
+enough, not worrying about buffer headings or body paragraph content or anything along
+
+37:38.160 --> 37:43.800
+those lines, less presentation helps a lot in that.
+
+37:43.800 --> 37:50.960
+The automatic paragraph formatting just makes it work, I type, I'm good to go, it automatically
+
+37:50.960 --> 37:52.360
+does everything like that.
+
+37:52.360 --> 37:53.360
+Right.
+
+37:53.360 --> 37:58.400
+You can just write and you get all, you get all this stuff for free.
+
+37:58.400 --> 38:02.840
+That's kind of a lot, you know, that's like I talked about the cognitive overhead.
+
+38:02.840 --> 38:08.640
+You know, I think Emacs, people have a lot of trouble understanding why people stick
+
+38:08.640 --> 38:18.120
+with Emacs now, but I think it does, the common editing capabilities are very similar to hyperbole,
+
+38:18.120 --> 38:19.120
+right?
+
+38:19.120 --> 38:24.560
+So you go across all these modes, different applications, but the editing stays the same.
+
+38:24.560 --> 38:32.520
+That takes so much off your plate compared to learning new hotkeys for every application.
+
+38:32.520 --> 38:41.560
+And so, you know, we're sold and now you want that kind of thing for your writing, for your
+
+38:41.560 --> 38:43.560
+knowledge management.
+
+38:43.560 --> 38:50.840
+And yeah, I think org is, you know, really, it was built for the scientists, the researchers,
+
+38:50.840 --> 38:51.840
+right?
+
+38:51.840 --> 38:54.120
+They have to do all that stuff with citations.
+
+38:54.120 --> 38:57.040
+I'm never going to use the citation capability, right?
+
+38:57.040 --> 38:59.720
+I don't publish much anymore.
+
+38:59.720 --> 39:06.020
+So you know, all that work is kind of lost on me, whereas like, you know, better structured
+
+39:06.020 --> 39:12.840
+outlining is going to be a win for, you know, a very broad cross section of people.
+
+39:12.840 --> 39:19.400
+So I think it's, you know, I wish more people would give it a try, but I think now we're
+
+39:19.400 --> 39:25.760
+doing a lot more things that are making hyperbole more accessible to people.
+
+39:25.760 --> 39:31.240
+A lot of people, I don't know if we can, like people have asked for a doom interface or
+
+39:31.240 --> 39:32.880
+space max interface.
+
+39:32.880 --> 39:40.640
+I do notice on Reddit that tons of people seem to use one of those two and they've never
+
+39:40.640 --> 39:45.720
+learned Emacs in its core form, right?
+
+39:45.720 --> 39:49.160
+They're coming from VI, so they're Vim users or something.
+
+39:49.160 --> 39:55.500
+And they, I guess they like all this layering kind of capability, exposing the features.
+
+39:55.500 --> 40:00.560
+So I haven't really looked at that, but maybe, you know, if we did that and we don't have
+
+40:00.560 --> 40:08.480
+hyperbole on Melpa, so although, you know, some people, they replace Elpa mistakenly
+
+40:08.480 --> 40:12.160
+with Melpa, you know, in their config.
+
+40:12.160 --> 40:16.600
+And so they never see hyperbole because it's not in their packages.
+
+40:16.600 --> 40:22.920
+Like, I didn't know this existed, like, well, don't do that.
+
+40:22.920 --> 40:30.600
+One thing that would be nice for stuff like this is having Emacs in it for hyperbole with
+
+40:30.600 --> 40:35.780
+a knowledge base and then one with Orgrom and a knowledge base and one with the ZK package
+
+40:35.780 --> 40:39.300
+and a knowledge base, et cetera, et cetera.
+
+40:39.300 --> 40:45.740
+Is that something you might look at doing a little, you know, sort of like proof of
+
+40:45.740 --> 40:55.240
+concept of, and share with us, you know, give us some idea of your thoughts?
+
+40:55.240 --> 41:02.640
+I just thought of it while watching this talk, and I might put together some resources of,
+
+41:02.640 --> 41:10.360
+there's some other packages that, or ZK, or there's another one of these packages that
+
+41:10.360 --> 41:11.360
+has a knowledge base.
+
+41:11.360 --> 41:14.760
+I might put together resources like that, see if I see anybody else's.
+
+41:14.760 --> 41:16.880
+Yeah, that'd be great.
+
+41:16.880 --> 41:25.400
+And do you try to note, do you use a prods denote package?
+
+41:25.400 --> 41:29.600
+I haven't messed with that one yet.
+
+41:29.600 --> 41:32.520
+I've looked at it.
+
+41:32.520 --> 41:38.900
+One contention I see between using all these right here is, like, you have the org FC package
+
+41:38.900 --> 41:44.520
+for flashcards, and that would sound really nice for learning new English words that I
+
+41:44.520 --> 41:45.520
+ever come across.
+
+41:45.520 --> 41:50.520
+I could make that, put the description.
+
+41:50.520 --> 41:54.960
+But if I, it seems like you can either use org rom and you're completely tied into the
+
+41:54.960 --> 42:01.240
+org rom org system, or you don't do that, then you can't use any of those features where
+
+42:01.240 --> 42:05.800
+they treat each of the nodes as a individual system.
+
+42:05.800 --> 42:09.880
+I've dabbled with multiple of the systems, so maybe there's a way.
+
+42:09.880 --> 42:10.880
+Are you good with org rom?
+
+42:10.880 --> 42:13.920
+I've been having this one problem.
+
+42:13.920 --> 42:14.920
+It's weird.
+
+42:14.920 --> 42:21.280
+I get in this mode where I pointed it somewhere and it worked at one time, and now I repoint
+
+42:21.280 --> 42:26.040
+it somewhere, and then I point it back and it won't work anymore.
+
+42:26.040 --> 42:33.620
+So I can't get it to sometimes index my set of org files, and it seems like it should
+
+42:33.620 --> 42:43.460
+be so basic, but there's something in the sequence of how it caches, I guess, the directory
+
+42:43.460 --> 42:49.520
+of org files that maybe I've solved it already, I don't recall, but I was just wondering if
+
+42:49.520 --> 42:53.080
+anybody else had that experience.
+
+42:53.080 --> 43:00.000
+I've mostly just dabbled in a couple of these systems and then haven't really chosen one
+
+43:00.000 --> 43:02.120
+to just use.
+
+43:02.120 --> 43:03.120
+Do you program?
+
+43:03.120 --> 43:10.040
+Are you by nature a programmer or is it like a hobby?
+
+43:10.040 --> 43:11.040
+Hobby.
+
+43:11.040 --> 43:20.440
+I haven't done too much on writing my own functions, but Emacs is by far the biggest
+
+43:20.440 --> 43:28.720
+or longest program I've ever...longest program, config, whatever, that I've ever used.
+
+43:28.720 --> 43:34.200
+And you started on Emacs how long ago?
+
+43:34.200 --> 43:41.760
+Five or ten years ago, somewhere along those lines.
+
+43:41.760 --> 43:43.240
+Good one.
+
+43:43.240 --> 43:48.160
+Yeah, it was nice having Stelman there today, right?
+
+43:48.160 --> 43:56.520
+It's like, well, if you want an actual answer, there's something that only he could answer.
+
+43:56.520 --> 44:03.400
+I'm surprised how many questions there were on that talk.
+
+44:03.400 --> 44:06.240
+What about them?
+
+44:06.240 --> 44:09.840
+I was surprised just about how many questions there were on...
+
+44:09.840 --> 44:16.320
+Yeah, you hear all this negative stuff about him, but people are very interested in where
+
+44:16.320 --> 44:25.500
+stuff came from, why have you never used this package that everybody else uses and things
+
+44:25.500 --> 44:35.640
+like that, what his world view is, since it is so different than so many other people's.
+
+44:35.640 --> 44:47.200
+All right, well, great talking to you and good luck with your knowledge space research
+
+44:47.200 --> 44:51.200
+and yeah, let me know if there's something.
+
+44:51.200 --> 44:57.880
+Try out the development version of Hyperbole like I should, that'll get you all the newest
+
+44:57.880 --> 45:02.000
+features and we'll get 9.0 out as soon as we can.
+
+45:02.000 --> 45:06.640
+Yeah, I use the Borg, so I actually do try out the development already.
+
+45:06.640 --> 45:08.640
+Oh, great, super.
+
+45:08.640 --> 45:15.040
+Also because sometimes since I'm using the development version of Emacs, it doesn't always...
+
+45:15.040 --> 45:18.560
+I've had issues compiling in the past because I needed the newer code.
+
+45:18.560 --> 45:26.760
+I think, I can't entirely remember, but thanks for the package and good talking, nice ideas
+
+45:26.760 --> 45:27.760
+and talk.
+
+45:27.760 --> 45:28.760
+Yeah.
+
+45:28.760 --> 45:29.760
+Take care.
+
+45:29.760 --> 45:30.760
+Bye.
+
+45:30.760 --> 45:50.120
+Bye.
+
diff --git a/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt
new file mode 100644
index 00000000..8845b9fd
--- /dev/null
+++ b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--answers.vtt
@@ -0,0 +1,467 @@
+WEBVTT
+
+00:00.000 --> 00:13.360
+and we are live hello again everyone and hi Michael how you doing very well thank you
+
+00:13.360 --> 00:20.360
+how are you I am doing well I am running out of energy steadily but surely but it's it's
+
+00:20.360 --> 00:24.920
+it's always a confusing feeling you know because I feel the energy going away the excitement
+
+00:24.920 --> 00:30.360
+going up because not only because we are close to an end which means my turmoil and my plight
+
+00:30.360 --> 00:37.560
+will come to an end but also because it's nice to have finished any Max Kant and I've
+
+00:37.560 --> 00:42.400
+put so many great talk in the wild for people to to be able to consume so and that's no
+
+00:42.400 --> 00:46.760
+little thanks to all our speakers including you Michael so thank you so much oh no you're
+
+00:46.760 --> 00:52.160
+very welcome I'm just happy to be a part of it yeah and we're glad you are so Michael
+
+00:52.160 --> 00:57.760
+do you have the pad open in front of you I do indeed looks like you've got a few questions
+
+00:57.760 --> 01:04.680
+coming in here yes meeting the question and then answering them sure sure let's start
+
+01:04.680 --> 01:10.520
+off with the one one I've already answered how did you create the drill down representation
+
+01:10.520 --> 01:19.320
+of the make call wondered if I sketched it out by hand and scanned it so I should every
+
+01:19.320 --> 01:26.480
+talk I give both at work and elsewhere people ask this question I should like get a finder's
+
+01:26.480 --> 01:35.120
+fee from Excalidraw but there's a website on the web called Excalidraw.com very nice
+
+01:35.120 --> 01:42.000
+diagramming solution it makes these awesome sort of hand written looking diagrams so that's
+
+01:42.000 --> 01:50.880
+what I used first question have you seen Reclaim ID this allows you to make a login that you
+
+01:50.880 --> 01:57.160
+own or at least is more open source and ownable seems to fit with the indie web so this is
+
+01:57.160 --> 02:02.320
+one of the things I've come to like about speaking at EmacsConf I feel like I learn
+
+02:02.320 --> 02:08.040
+you know as much or more than I teach no I am not familiar with this so I will definitely
+
+02:08.040 --> 02:18.160
+be taking a look there is an indie web protocol for identity it's called indie auth but yeah
+
+02:18.160 --> 02:24.520
+thanks for the tip I will definitely check out Reclaim ID what happens when you republish
+
+02:24.520 --> 02:31.360
+or re-export the same post will the web mentions be sent out repeatedly they will not not you
+
+02:31.360 --> 02:40.880
+could do that I suppose you might annoy some of your recipients but my solution on successful
+
+02:40.880 --> 02:47.600
+send of the initial web mention notes that down and is smart enough to not re-send it
+
+02:47.600 --> 02:56.600
+a second yeah so and actually I want to follow up on something on IRC I think Carl Voight
+
+02:56.600 --> 03:03.440
+said oh I don't have to have a database you don't have to have a database but I do use
+
+03:03.440 --> 03:14.520
+a plain text file full of just just printed list forms to maintain state let's see an
+
+03:14.520 --> 03:19.720
+advantage I see to using org mode for the indie web is you can use it for your notes
+
+03:19.720 --> 03:26.800
+org room for example no export for private yes yes the web mentions could be org file
+
+03:26.800 --> 03:36.200
+yes absolutely so yeah I mean so many people have found org mode so handy as a writing
+
+03:36.200 --> 03:44.040
+tool that you know and I just felt like you were right there right you just need a little
+
+03:44.040 --> 03:50.200
+bit of code to get you to transcode the HTML and get it on the web and then it was like
+
+03:50.200 --> 03:55.560
+well gosh I'm right there just a little bit more code and I can start sending web mentions
+
+03:55.560 --> 04:10.560
+I could start posseing etc etc etc any thoughts on using with ox Hugo so no not because I
+
+04:10.560 --> 04:18.200
+have anything against ox Hugo simply because I'm unfamiliar with it there's a couple of
+
+04:18.200 --> 04:25.760
+static site generators out there that you can use with org mode my design philosophy
+
+04:25.760 --> 04:33.120
+for this was I was going to start with emacs and org mode out of the box and see how far
+
+04:33.120 --> 04:43.400
+I could get with just adding a little bit of a list around it this a web 3 approach p.s.
+
+04:43.400 --> 05:00.280
+former not former military just losing my hair not I don't know what web 3 means some
+
+05:00.280 --> 05:06.960
+people it seems to be a decentralized approach and indie web is all about reclaiming your
+
+05:06.960 --> 05:14.160
+identity and your data from a few they call them silos right we're talking about the big
+
+05:14.160 --> 05:28.160
+social media oh cool great help me the web one with static sites yep yep everybody go
+
+05:28.160 --> 05:35.160
+out and blog on your own server and web rings were kind of like the communication mechanism
+
+05:35.160 --> 05:50.560
+web 2 is more interactive yeah I mean web 2 certainly was more interactive I guess I
+
+05:50.560 --> 06:02.080
+see it as we're gonna Michael just interrupting a little quickly we are going to open up the
+
+06:02.080 --> 06:06.520
+Q&A to people so if you want to join us the same dude as usual you go to the talk page
+
+06:06.520 --> 06:15.720
+we've also posted the sorry to give you just a second just a second I'm verifying something
+
+06:15.720 --> 06:21.080
+with audio level okay cool apparently my audio is perfect we were trying to do some live adjustments
+
+06:21.080 --> 06:25.640
+so we're saying we've opened up the BBB room so that people we want to join the last five
+
+06:25.640 --> 06:32.080
+questions are able to do so so either on the talk page or you can do this also on IRC
+
+06:32.080 --> 06:36.320
+we've posted the link over there so Michael you feel free to keep taking questions on
+
+06:36.320 --> 06:39.600
+the pad we still have many of them but I just wanted to let people know in case they wanted
+
+06:39.600 --> 06:45.200
+to join and also one last information we will need to move on with the next talk in 16 minutes
+
+06:45.200 --> 06:57.560
+so you still have plenty of time yeah wow I'm excited there's so much time left to answer
+
+06:57.560 --> 07:04.320
+question or oh wow I'm not sure what I'm gonna do for 60 minutes oh no the former oh wow
+
+07:04.320 --> 07:09.240
+I'm not sure I'm gonna get to all these all these right well you'll be able to answer later
+
+07:09.240 --> 07:14.280
+try to do as many as you can okay so I'm on IRC right now somebody's telling me I'm super
+
+07:14.280 --> 07:19.480
+quiet I'm gonna adjust the mic no don't worry about OJ levels it's on us you don't worry
+
+07:19.480 --> 07:27.080
+about it let's see Sasha's gonna try and fix is there a workflow to use emacs to publish
+
+07:27.080 --> 07:38.360
+and connect directly to target websites so that's an interesting question can you what
+
+07:38.360 --> 07:46.080
+do you mean by workflow in that question so you want to cut telegraph out of the equation
+
+07:46.080 --> 08:00.880
+get that that means oh I'm sorry I thought somebody had joined the chat room don't worry
+
+08:00.880 --> 08:04.800
+I will I will let them know if you have people joining and asking questions if you hear another
+
+08:04.800 --> 08:08.560
+voice than mine it's someone joining and I will try to be polite and say yeah can you
+
+08:08.560 --> 08:13.320
+please wait let's Michael finish the question don't worry I don't know everything so if
+
+08:13.320 --> 08:20.560
+you want to cut telegraph out of equation that means you're going to need to take on
+
+08:20.560 --> 08:28.720
+more work client side in terms of first discovering the web mention endpoint which is gonna involve
+
+08:28.720 --> 08:37.840
+parsing HTML which we all hate then you're going to need to send the request to that
+
+08:37.840 --> 08:43.960
+web your web mention to that endpoint which introduces you know the standard question
+
+08:43.960 --> 08:48.120
+with web hooks is what if they're down what if you can't reach them what if you're not
+
+08:48.120 --> 08:53.560
+on the networks and now you got to build yourself a queuing system but sure sure absolutely
+
+08:53.560 --> 09:02.640
+indie web is just a protocol and I think the community would actually welcome fewer points
+
+09:02.640 --> 09:10.520
+of failure like telegraph we got the BBB audio better okay great so questions we were discussing
+
+09:10.520 --> 09:22.520
+web three Carl says some people started to term web zero for similar decentralized approaches
+
+09:22.520 --> 09:30.000
+yeah I don't think that by no means does indie web imply static site there are actually
+
+09:30.000 --> 09:38.440
+CMS systems that talk to that speak the indie web protocols I think even WordPress does
+
+09:38.440 --> 09:44.560
+it as does Drupal yeah so I don't know if you want to we can discuss further if you
+
+09:44.560 --> 09:56.080
+want to hop in the room but yeah I guess I see it more as a decentralized web than three
+
+09:56.080 --> 10:01.320
+do I have a process nope I had sorry the question is do you have a process running on the web
+
+10:01.320 --> 10:09.040
+server to receive requests no so those are cashed for me and I literally have a cron
+
+10:09.040 --> 10:16.080
+job on my personal desktop and once an hour I just reach out and say you got any more
+
+10:16.080 --> 10:23.920
+web mentions for me and process them back here that does mean given that I have a statically
+
+10:23.920 --> 10:32.280
+generated website I need to republish every time I receive a web mention Michael if you
+
+10:32.280 --> 10:35.240
+don't mind interrupting we have someone in the room who would like to ask a question
+
+10:35.240 --> 10:41.520
+Max if you want to unmute yourself if you could ask the question I'm not sure if you're just
+
+10:41.520 --> 10:47.600
+showing your webcam yes you do have a question go on hi Michael no I actually didn't have
+
+10:47.600 --> 10:55.160
+a question I asked a question about the web 3.0 and I have a little concern about you
+
+10:55.160 --> 11:01.160
+know you use you describe kind of how dead it was to have just a static site and not
+
+11:01.160 --> 11:08.800
+be able to interact with people and so I was you know just thinking along those lines is
+
+11:08.800 --> 11:16.360
+anywhere is it a better way how satisfied are you with this with this with web mentions
+
+11:16.360 --> 11:23.120
+and you know sort of thumbs up down and did you actually get a demo running I mean are
+
+11:23.120 --> 11:39.960
+we able to see it somewhere well you can see it on my site which is just but I have can
+
+11:39.960 --> 11:43.480
+actually can you put it in the back can you put it in the back so that other people can
+
+11:43.480 --> 11:53.880
+actually access it including Max okay yes Max I know you're still there but I just want
+
+11:53.880 --> 11:57.280
+everyone to be able to click on it as well I'll do it don't worry about it I'll take
+
+11:57.280 --> 12:08.720
+care of it here we go Carl says web 3 is supposed to be something really strange with blockchains
+
+12:08.720 --> 12:22.240
+and this is definitely nothing like that yeah Carl put it much better than I could and well
+
+12:22.240 --> 12:26.320
+I'll just kind of okay cool Max is still here I'll just finish answering the question how
+
+12:26.320 --> 12:37.400
+satisfied am I it's work in progress I'm initially happy I was limited by time for this talk
+
+12:37.400 --> 12:43.040
+and as you can see maybe I got too far into the weeds but it was fairly involved just
+
+12:43.040 --> 12:50.360
+describing how to send and receive web mentions there's a second indie web protocol called
+
+12:50.360 --> 13:00.320
+posse publish on your own site syndicate elsewhere in which you can say okay I want to publish
+
+13:00.320 --> 13:09.240
+this post to my site oh and at the same time fire off a tweet referencing it and fire off
+
+13:09.240 --> 13:18.120
+a mastodon to referencing it and there are protocols for like pulling likes and boosts
+
+13:18.120 --> 13:27.480
+of that back to your own site as feedback and I've been playing with that a little bit
+
+13:27.480 --> 13:36.880
+and actually feeling pretty good about it yeah so happy to talk more other questions
+
+13:36.880 --> 13:42.200
+okay right so do I have a process running on the web server to receive requests nope
+
+13:42.200 --> 13:49.960
+just a cron job I think perhaps you're doing too much inside emacs yeah yeah great question
+
+13:49.960 --> 13:56.400
+I can't remember if I alluded to this at the end of the talk but as I said when I started
+
+13:56.400 --> 14:05.080
+down this path felt that was so close with just plain vanilla emacs in org mode it couldn't
+
+14:05.080 --> 14:12.160
+be that hard right and of course this is famous last words initially it was just a little
+
+14:12.160 --> 14:20.000
+bit of code around that to get the static site generator up sending web mentions are
+
+14:20.000 --> 14:28.480
+yeah it's a lot of code and so I'm definitely kind of at this point of you know is it time
+
+14:28.480 --> 14:37.040
+to turn to a proper CMS I start out using web mentions of service web mention telegraph
+
+14:37.040 --> 14:44.200
+then you want to change endpoint whether to a different service or I want to take them
+
+14:44.200 --> 14:53.480
+I see I see it didn't be the way the web mention oh I'm sorry let me finish the question I
+
+14:53.480 --> 14:59.960
+keep to make this clear so the question is let's suppose you start your site using web
+
+14:59.960 --> 15:06.800
+mentions of service and then later on you decide I want to change services or I'm just
+
+15:06.800 --> 15:12.080
+going to handle this myself is there sort of a dead letter problem will web mentions
+
+15:12.080 --> 15:21.600
+show up at the at the old address and it shouldn't be so when somebody wants to reach you that
+
+15:21.600 --> 15:28.560
+is when they do endpoint discovery so they if you would get request for your page and
+
+15:28.560 --> 15:36.560
+parse the HTML and they discover where to send web mentions there pose it for some reason
+
+15:36.560 --> 15:45.160
+they did that and sat on that information for some period of time of course then they
+
+15:45.160 --> 15:51.320
+might that you know they might send it to an old address but that would be that would
+
+15:51.320 --> 15:59.680
+be a non-standard use of the protocol you should be good have I seen a Gregor browser
+
+15:59.680 --> 16:05.480
+is a decentralized kiss browser using some of the peer-to-peer protocols interesting
+
+16:05.480 --> 16:14.920
+I have not I'm going there right now thank you
+
+16:14.920 --> 16:18.720
+somebody points out some things are better done outside of e-max I have built something
+
+16:18.720 --> 16:33.760
+similar at by star dot net you see www dot by hyphen star dot net okay let's go see it
+
+16:33.760 --> 16:38.200
+this is interesting thank you I will definitely take a look yeah so I can say I'm kind of
+
+16:38.200 --> 16:42.840
+on the cusp of saying okay this has been a fun experiment now I need to go code it up
+
+16:42.840 --> 16:51.040
+outside of e-max I like the fact that you know the discussion we were having the question
+
+16:51.040 --> 16:56.600
+about you know am I doing too much in e-max is literally a question that could be asked
+
+16:56.600 --> 17:01.960
+to every single presenter at all the e-max conference other ads because you know the
+
+17:01.960 --> 17:05.400
+whole point of e-max golf is showing what type of stuff you can do in e-max and naturally
+
+17:05.400 --> 17:09.440
+the question is going to follow that is are you just doing too much with e-max and that's
+
+17:09.440 --> 17:15.080
+always great question to take and I think you did spend it late yeah it's the old joke
+
+17:15.080 --> 17:22.640
+right it's a good editor in an awesome operating system yes I will allow you to do the usual
+
+17:22.640 --> 17:30.680
+jokes about e-max I will not allow you to refer to our core enemy that's they who may
+
+17:30.680 --> 17:37.320
+not be named okay fair okay so Michael we do have about five minutes of questions left
+
+17:37.320 --> 17:42.000
+I think you've answered all the questions and I don't see anyone else with a microphone
+
+17:42.000 --> 17:52.520
+on in BBB so we might we might leave it at that if you're okay with this okay well thank
+
+17:52.520 --> 17:56.200
+you so much Michael for taking the time to not only do a presentation for us but also
+
+17:56.200 --> 18:03.560
+for answering the questions in here no thank you all like I say I always learn as much
+
+18:03.560 --> 18:09.560
+as I teach here so great thank you okay amazing all right and for the others I'll hold you
+
+18:09.560 --> 18:13.600
+hostage a little while longer Michael we will be adding into the next talk in about four
+
+18:13.600 --> 18:18.800
+minutes and 30 seconds so we'll put up some music and I'll you'll hear my voice again
+
+18:18.800 --> 18:27.640
+when we are supposed to go live again so see you in a bit everyone and see you Michael
+
+18:27.640 --> 18:38.680
+and we are all fair okay I have to dash see you Michael you are calling music on Jen
+
+18:38.680 --> 18:59.040
+can we put yes thank you
+
+18:59.040 --> 19:16.440
+we volume again now to the original level
+
+19:16.440 --> 19:41.840
+very good
+
+19:41.840 --> 19:56.440
+you know what
+
+19:56.440 --> 20:21.880
+what
+
+20:21.880 --> 20:38.120
+Alright, I'm talking now. Okay, the audio is good. See you guys, see you in about 2 minutes.
+
diff --git a/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt
new file mode 100644
index 00000000..7446a15d
--- /dev/null
+++ b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main--chapters.vtt
@@ -0,0 +1,43 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:14.080
+Introduction
+
+00:00:14.080 --> 00:01:13.880
+Maintaining a personal website using Org mode
+
+00:01:13.880 --> 00:02:32.040
+Problems with comments and isolation
+
+00:02:32.040 --> 00:03:17.800
+The Indieweb
+
+00:03:17.800 --> 00:05:00.600
+Webmentions
+
+00:05:00.600 --> 00:07:04.160
+Decentralized commenting
+
+00:07:04.160 --> 00:08:48.080
+The publication framework
+
+00:08:48.080 --> 00:09:54.000
+Sending Webmentions
+
+00:09:54.000 --> 00:11:36.840
+The process of publication
+
+00:11:36.840 --> 00:12:31.920
+Defining new link types
+
+00:12:31.920 --> 00:14:07.349
+org-publish-to
+
+00:14:07.349 --> 00:14:46.520
+Sending Webmentions with request.el
+
+00:14:46.520 --> 00:15:51.400
+Summary
+
+00:15:51.400 --> 00:16:34.920
+The future
diff --git a/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt
new file mode 100644
index 00000000..f41a3981
--- /dev/null
+++ b/2022/captions/emacsconf-2022-indieweb--putting-org-mode-on-the-indieweb--michael-herstine--main.vtt
@@ -0,0 +1,1048 @@
+WEBVTT captioned by bhavin192
+
+00:00:00.000 --> 00:00:02.280
+Hey everyone, I'm Michael,
+
+00:00:02.280 --> 00:00:03.640
+and I'm going to be talking about
+
+00:00:03.640 --> 00:00:06.000
+Org mode and the IndieWeb.
+
+00:00:06.000 --> 00:00:08.840
+I am located in the San Francisco Bay Area,
+
+00:00:08.840 --> 00:00:10.321
+where I'm a developer as well as
+
+00:00:10.321 --> 00:00:14.080
+a longtime Emacs user.
+
+00:00:14.080 --> 00:00:17.560
+So, I maintain a personal website using Org mode.
+
+00:00:17.560 --> 00:00:19.080
+If you're watching this talk,
+
+00:00:19.080 --> 00:00:21.560
+I'm going to guess that you probably are too.
+
+00:00:21.560 --> 00:00:24.880
+For anybody who isn't,
+
+00:00:24.880 --> 00:00:28.680
+let me explain exactly what I mean by that.
+
+00:00:28.680 --> 00:00:32.280
+I have a static website. I author the pages
+
+00:00:32.280 --> 00:00:34.000
+in Org mode's markup language,
+
+00:00:34.000 --> 00:00:36.280
+otherwise known as Orgdown.
+
+00:00:36.280 --> 00:00:38.440
+I use the Org export facility
+
+00:00:38.440 --> 00:00:43.760
+to transcode that markup to HTML.
+
+00:00:43.760 --> 00:00:47.000
+And then I just use rsync to push
+
+00:00:47.000 --> 00:00:51.760
+the resulting HTML pages up to a VPS.
+
+00:00:51.760 --> 00:00:52.854
+I like the workflow.
+
+00:00:52.854 --> 00:00:57.840
+It's familiar to me as a coder.
+
+00:00:57.840 --> 00:01:03.960
+I get to use familiar tools like Git and Make.
+
+00:01:03.960 --> 00:01:06.120
+Publishing and then pushing the site
+
+00:01:06.120 --> 00:01:09.800
+to a local test server is just `make`.
+
+00:01:09.800 --> 00:01:13.880
+Pushing it to the live site is just `make prod`.
+
+00:01:13.880 --> 00:01:18.680
+That said, certain problems made themselves apparent
+
+00:01:18.680 --> 00:01:22.080
+with this arrangement pretty quickly.
+
+00:01:22.080 --> 00:01:25.840
+Commenting was one. It's very difficult
+
+00:01:25.840 --> 00:01:28.200
+to support commenting on a static website.
+
+00:01:28.200 --> 00:01:29.501
+I've got no database.
+
+00:01:29.501 --> 00:01:34.120
+I have no real server, and so on.
+
+00:01:34.120 --> 00:01:35.960
+Yes, of course, there is Disqus
+
+00:01:35.960 --> 00:01:37.868
+and other third party services
+
+00:01:37.868 --> 00:01:38.800
+that will do this for you,
+
+00:01:38.800 --> 00:01:43.880
+but I was uncomfortable outsourcing that job.
+
+00:01:43.880 --> 00:01:45.320
+And it was more than just comments.
+
+00:01:45.320 --> 00:01:48.360
+There was a general sense of isolation.
+
+00:01:48.360 --> 00:01:50.680
+There's no connection to places
+
+00:01:50.680 --> 00:01:53.360
+like Reddit, or Mastodon, or Twitter,
+
+00:01:53.360 --> 00:01:56.560
+you know, where all the people are.
+
+00:01:56.560 --> 00:01:59.520
+I guess you can post, then Tweet a link to it.
+
+00:01:59.520 --> 00:02:01.960
+But suppose somebody responds to your Tweet.
+
+00:02:01.960 --> 00:02:05.520
+Now you've got a conversation going on on Twitter
+
+00:02:05.520 --> 00:02:07.640
+that you're a visitor, and
+
+00:02:07.640 --> 00:02:09.960
+that a non-Twitter-using visitor to your site
+
+00:02:09.960 --> 00:02:15.400
+would be completely disconnected from.
+
+00:02:15.400 --> 00:02:19.000
+I am seeing people using Reddit effectively
+
+00:02:19.000 --> 00:02:22.640
+as the comment section for their sites.
+
+00:02:22.640 --> 00:02:24.760
+But unless you've got an audience, you know,
+
+00:02:24.760 --> 00:02:27.720
+the size of Derek's or Amos's,
+
+00:02:27.720 --> 00:02:32.040
+I don't think that's really feasible either.
+
+00:02:32.040 --> 00:02:34.200
+Now, after casting about for some time,
+
+00:02:34.200 --> 00:02:37.680
+I stumbled upon something called the IndieWeb.
+
+00:02:37.680 --> 00:02:39.280
+In their own words, the IndieWeb is
+
+00:02:39.280 --> 00:02:41.960
+a community of independent and personal websites
+
+00:02:41.960 --> 00:02:44.401
+connected by simple standards based on
+
+00:02:44.401 --> 00:02:46.720
+the principles of owning your domain
+
+00:02:46.720 --> 00:02:48.480
+and using it as your primary identity,
+
+00:02:48.480 --> 00:02:50.360
+publishing on your own site,
+
+00:02:50.360 --> 00:02:52.418
+and optionally syndicating elsewhere,
+
+00:02:52.418 --> 00:02:54.320
+and owning your data.
+
+00:02:54.320 --> 00:02:57.680
+I would describe it as a collection of individuals
+
+00:02:57.680 --> 00:03:01.360
+who've chosen to own their own platforms,
+
+00:03:01.360 --> 00:03:05.520
+alongside a loosely specked set of standards
+
+00:03:05.520 --> 00:03:07.480
+that tie those sites together.
+
+00:03:07.480 --> 00:03:09.218
+And it's really those standards
+
+00:03:09.218 --> 00:03:10.640
+that make the IndieWeb
+
+00:03:10.640 --> 00:03:13.120
+more than just a call for everybody
+
+00:03:13.120 --> 00:03:14.735
+to go back to the arts
+
+00:03:14.735 --> 00:03:17.800
+and blog on on their own sites.
+
+00:03:17.800 --> 00:03:19.640
+Now, this presentation isn't going to
+
+00:03:19.640 --> 00:03:21.480
+focus on the IndieWeb as such.
+
+00:03:21.480 --> 00:03:23.360
+It's more about using Org mode
+
+00:03:23.360 --> 00:03:24.640
+to put your site on the IndieWeb.
+
+00:03:24.640 --> 00:03:28.040
+I'm a little limited by time here,
+
+00:03:28.040 --> 00:03:30.351
+so I'm going to focus on
+
+00:03:30.351 --> 00:03:32.080
+just one of those protocols,
+
+00:03:32.080 --> 00:03:33.400
+and that's Webmentions.
+
+00:03:33.400 --> 00:03:35.720
+So, what's a Webmention?
+
+00:03:35.720 --> 00:03:38.520
+Let's begin with the inveterate Alice,
+
+00:03:38.520 --> 00:03:39.468
+who has a website
+
+00:03:39.468 --> 00:03:42.680
+and has posted content to that site.
+
+00:03:42.680 --> 00:03:46.080
+Her old friend Bob comes along,
+
+00:03:46.080 --> 00:03:47.440
+notices that content
+
+00:03:47.440 --> 00:03:49.360
+and wishes to say something about it.
+
+00:03:49.360 --> 00:03:51.468
+He posts to his site
+
+00:03:51.468 --> 00:03:54.920
+and his publication software will,
+
+00:03:54.920 --> 00:03:57.080
+if it supports Webmentions,
+
+00:03:57.080 --> 00:04:00.160
+will notice that he's mentioned Alice's post.
+
+00:04:00.160 --> 00:04:04.320
+At that point, his publication software
+
+00:04:04.320 --> 00:04:07.240
+reaches out to Alice's site,
+
+00:04:07.240 --> 00:04:11.040
+asks for the mentioned document,
+
+00:04:11.040 --> 00:04:12.560
+and will examine it to see
+
+00:04:12.560 --> 00:04:15.600
+if Alice advertises an endpoint at her site
+
+00:04:15.600 --> 00:04:18.160
+capable of receiving Webmentions.
+
+00:04:18.160 --> 00:04:19.600
+In this case, it does.
+
+00:04:19.600 --> 00:04:23.480
+So, Bob's publishing software does it.
+
+00:04:23.480 --> 00:04:24.468
+At the end of the day,
+
+00:04:24.468 --> 00:04:26.000
+a Webmention is really just
+
+00:04:26.000 --> 00:04:30.360
+an HTTP post request with two parameters,
+
+00:04:30.360 --> 00:04:33.000
+a source and a target.
+
+00:04:33.000 --> 00:04:36.818
+On receipt, Alice's server will
+
+00:04:36.818 --> 00:04:39.400
+reach out to Bob's site,
+
+00:04:39.400 --> 00:04:43.280
+request the document that contains the mention,
+
+00:04:43.280 --> 00:04:45.920
+and validate it, decide whether or not
+
+00:04:45.920 --> 00:04:48.120
+she wants to accept the Webmention.
+
+00:04:48.120 --> 00:04:50.960
+In this case, it's legit, it's accepted,
+
+00:04:50.960 --> 00:04:54.000
+and Alice chooses to make a note,
+
+00:04:54.000 --> 00:04:56.760
+to update her content,
+
+00:04:56.760 --> 00:04:58.720
+to make a note of the fact
+
+00:04:58.720 --> 00:05:00.600
+that it was mentioned by Bob.
+
+00:05:00.600 --> 00:05:01.960
+Now a couple of things to note here.
+
+00:05:01.960 --> 00:05:03.480
+The first is that this is effectively
+
+00:05:03.480 --> 00:05:04.960
+decentralized commenting.
+
+00:05:04.960 --> 00:05:07.440
+Both parties own their content,
+
+00:05:07.440 --> 00:05:09.080
+and there's no third party involved,
+
+00:05:09.080 --> 00:05:13.640
+trusted or otherwise.
+
+00:05:13.640 --> 00:05:16.080
+Now at this point, you might object that, well,
+
+00:05:16.080 --> 00:05:18.720
+as the owner of a statically generated site,
+
+00:05:18.720 --> 00:05:21.600
+I have essentially none of the infrastructure
+
+00:05:21.600 --> 00:05:22.920
+I need to implement this.
+
+00:05:22.920 --> 00:05:27.120
+I have no server above and beyond Apache.
+
+00:05:27.120 --> 00:05:30.600
+I can't really…, I have no database.
+
+00:05:30.600 --> 00:05:33.680
+I guess you could send Webmentions with curl,
+
+00:05:33.680 --> 00:05:37.040
+but now to do Webmention endpoint discovery,
+
+00:05:37.040 --> 00:05:39.640
+you're going to be parsing arbitrary HTML.
+
+00:05:39.640 --> 00:05:41.120
+It's a lot of work.
+
+00:05:41.120 --> 00:05:45.080
+That's okay. There are sites out there
+
+00:05:45.080 --> 00:05:48.840
+that offer Webmentions as a service.
+
+00:05:48.840 --> 00:05:51.000
+So, let's take a look at how that goes.
+
+00:05:51.000 --> 00:05:54.920
+We return to our original example.
+
+00:05:54.920 --> 00:05:57.840
+Alice continues to advertise an endpoint
+
+00:05:57.840 --> 00:06:00.320
+capable of receiving Webmentions,
+
+00:06:00.320 --> 00:06:01.840
+but it's no longer on her site.
+
+00:06:01.840 --> 00:06:03.840
+It's at webmention.io.
+
+00:06:03.840 --> 00:06:08.000
+Bob is essentially in the same position,
+
+00:06:08.000 --> 00:06:09.920
+but he now has in his world
+
+00:06:09.920 --> 00:06:13.920
+a third party site called Telegraph.
+
+00:06:13.920 --> 00:06:16.040
+When Bob wants to publish,
+
+00:06:16.040 --> 00:06:19.760
+he no longer needs to go through all the work
+
+00:06:19.760 --> 00:06:21.760
+of sending Webmention,
+
+00:06:21.760 --> 00:06:25.280
+and of carrying out Webmention endpoint discovery.
+
+00:06:25.280 --> 00:06:27.880
+He sends one API request to Telegraph,
+
+00:06:27.880 --> 00:06:31.120
+effectively saying, please send a Webmention for me.
+
+00:06:31.120 --> 00:06:36.640
+Asynchronously, telegraph.io is going to
+
+00:06:36.640 --> 00:06:38.718
+retrieve Alice's post,
+
+00:06:38.718 --> 00:06:41.320
+do Webmention endpoint discovery,
+
+00:06:41.320 --> 00:06:45.400
+and send the Webmention on Bob's behalf.
+
+00:06:45.400 --> 00:06:48.280
+Except this time he's sending it to webmention.io.
+
+00:06:48.280 --> 00:06:53.080
+Now, at some arbitrary point in the future,
+
+00:06:53.080 --> 00:06:55.800
+Alice can ask webmention.io,
+
+00:06:55.800 --> 00:06:57.720
+"Hey, do I have any new Webmentions?"
+
+00:06:57.720 --> 00:07:00.480
+And if she does, she may choose
+
+00:07:00.480 --> 00:07:04.160
+to update her content and publish.
+
+00:07:04.160 --> 00:07:07.240
+Okay, so let's code this up.
+
+00:07:07.240 --> 00:07:09.120
+Now, I'm recording this talk
+
+00:07:09.120 --> 00:07:10.960
+about a month ahead of time
+
+00:07:10.960 --> 00:07:12.520
+and I haven't been able to put together
+
+00:07:12.520 --> 00:07:13.920
+a little demo project.
+
+00:07:13.920 --> 00:07:16.600
+Hopefully, I can hack something together
+
+00:07:16.600 --> 00:07:18.920
+before this video streams.
+
+00:07:18.920 --> 00:07:20.920
+But in the meantime,
+
+00:07:20.920 --> 00:07:22.960
+I'd like to imagine a little test site.
+
+00:07:22.960 --> 00:07:25.218
+It has a single page,
+
+00:07:25.218 --> 00:07:28.880
+maybe we'll call it index.org,
+
+00:07:28.880 --> 00:07:30.520
+and we're going to publish it.
+
+00:07:30.520 --> 00:07:32.600
+We're going to export it to
+
+00:07:32.600 --> 00:07:35.840
+a subdirectory of our project directory,
+
+00:07:35.840 --> 00:07:39.080
+simply called www.
+
+00:07:39.080 --> 00:07:44.800
+So, the entry point to the Org export system
+
+00:07:44.800 --> 00:07:46.640
+is the function org-publish,
+
+00:07:46.640 --> 00:07:49.960
+whose docstring helpfully says,
+
+00:07:49.960 --> 00:07:52.240
+it publishes all projects.
+
+00:07:52.240 --> 00:07:56.760
+The set of all projects is defined by
+
+00:07:56.760 --> 00:07:59.520
+the variable `org-publish-project-alist`,
+
+00:07:59.520 --> 00:08:02.320
+which is a very flexible association list
+
+00:08:02.320 --> 00:08:03.868
+that lets you define
+
+00:08:03.868 --> 00:08:05.520
+what files are in your project,
+
+00:08:05.520 --> 00:08:07.000
+how you wish to export them,
+
+00:08:07.000 --> 00:08:10.320
+where they're going to go, etc, etc, etc.
+
+00:08:10.320 --> 00:08:13.840
+So great. This is actually pretty straightforward.
+
+00:08:13.840 --> 00:08:15.880
+We just give ourselves a little Elisp file
+
+00:08:15.880 --> 00:08:17.040
+and a single function.
+
+00:08:17.040 --> 00:08:18.640
+I'll call it publish,
+
+00:08:18.640 --> 00:08:22.360
+and all it will do is define
+
+00:08:22.360 --> 00:08:25.000
+`org-publish-project-alist`
+
+00:08:25.000 --> 00:08:26.840
+and invoke `org-publish-all`.
+
+00:08:26.840 --> 00:08:31.880
+At that point, exporting is a one-liner.
+
+00:08:31.880 --> 00:08:35.560
+We just invoke Emacs, load up our site.el file,
+
+00:08:35.560 --> 00:08:37.280
+and invoke the publish function.
+
+00:08:37.280 --> 00:08:43.668
+And if we want to publish to the live server,
+
+00:08:43.668 --> 00:08:45.520
+that's just another one-liner of ours.
+
+00:08:45.520 --> 00:08:48.080
+So, that's the publication framework.
+
+00:08:48.080 --> 00:08:51.280
+Now, let's take a look at sending Webmentions.
+
+00:08:51.280 --> 00:08:54.400
+The idea is that we're going to
+
+00:08:54.400 --> 00:08:57.240
+get our fingers into the publication process.
+
+00:08:57.240 --> 00:09:01.000
+Note when we see a Webmention in
+
+00:09:01.000 --> 00:09:04.000
+the process of exporting our Orgdown,
+
+00:09:04.000 --> 00:09:07.840
+and write it out to disk for sending later on.
+
+00:09:07.840 --> 00:09:11.520
+Now, I didn't want to send a Webmention
+
+00:09:11.520 --> 00:09:13.040
+for every single link in the post.
+
+00:09:13.040 --> 00:09:14.960
+I wanted this to be an intentional choice.
+
+00:09:14.960 --> 00:09:16.960
+And it turns out there are
+
+00:09:16.960 --> 00:09:19.120
+different sorts of Webmentions
+
+00:09:19.120 --> 00:09:20.160
+you can make on a page.
+
+00:09:20.160 --> 00:09:22.520
+For instance, if you add
+
+00:09:22.520 --> 00:09:26.800
+the CSS class u-in-reply-to to your link,
+
+00:09:26.800 --> 00:09:28.635
+the recipient will
+
+00:09:28.635 --> 00:09:30.920
+interpret this Webmention as a reply.
+
+00:09:30.920 --> 00:09:33.440
+There are similar CSS classes
+
+00:09:33.440 --> 00:09:37.240
+for likes, reposts, and generalized mentions.
+
+00:09:37.240 --> 00:09:42.800
+When the recipient gets your Webmention,
+
+00:09:42.800 --> 00:09:45.640
+if they want to know who's talking to them,
+
+00:09:45.640 --> 00:09:47.960
+they need to parse your page
+
+00:09:47.960 --> 00:09:51.800
+and look for DOM elements with certain CSS classes
+
+00:09:51.800 --> 00:09:54.000
+defined by the protocol as well.
+
+00:09:54.000 --> 00:09:57.520
+I'm a visual thinker,
+
+00:09:57.520 --> 00:10:00.680
+so I kind of drew out the process of publication,
+
+00:10:00.680 --> 00:10:03.320
+and exactly where we're going to
+
+00:10:03.320 --> 00:10:05.160
+get our fingers into this.
+
+00:10:05.160 --> 00:10:07.320
+So, this is me invoking make,
+
+00:10:07.320 --> 00:10:09.800
+which of course fires up Emacs.
+
+00:10:09.800 --> 00:10:14.440
+Just as before, my publish function will define
+
+00:10:14.440 --> 00:10:17.920
+`org-publish-project-alist` with one difference.
+
+00:10:17.920 --> 00:10:21.040
+There is an attribute,
+
+00:10:21.040 --> 00:10:23.520
+a property in the list called `publishing-function`.
+
+00:10:23.520 --> 00:10:26.280
+We're going to need to customize that.
+
+00:10:26.280 --> 00:10:28.960
+As usual, we then call…,
+
+00:10:28.960 --> 00:10:31.960
+we kick off the process by calling `org-publish-all`.
+
+00:10:31.960 --> 00:10:36.468
+org-publish-all will invoke
+
+00:10:36.468 --> 00:10:37.320
+your publishing function
+
+00:10:37.320 --> 00:10:40.560
+for each page, and it will hand to
+
+00:10:40.560 --> 00:10:42.520
+your publishing function for each page.
+
+00:10:42.520 --> 00:10:45.080
+The name of the file you're publishing,
+
+00:10:45.080 --> 00:10:50.680
+where it's going, and a parameter entitled plist.
+
+00:10:50.680 --> 00:10:53.200
+This is not super well documented.
+
+00:10:53.200 --> 00:10:55.280
+There are points in the docs
+
+00:10:55.280 --> 00:10:57.440
+that refer to this as a communication channel.
+
+00:10:57.440 --> 00:11:01.800
+What I discovered by simply reading the code was that
+
+00:11:01.800 --> 00:11:04.560
+it's a property list that is initialized
+
+00:11:04.560 --> 00:11:09.680
+for each invocation of your publication function.
+
+00:11:09.680 --> 00:11:13.560
+The initial properties are
+
+00:11:13.560 --> 00:11:16.200
+inherited from your project,
+
+00:11:16.200 --> 00:11:20.801
+but you are free to add properties as you go
+
+00:11:20.801 --> 00:11:23.880
+to communicate between different portions
+
+00:11:23.880 --> 00:11:25.520
+of the publication process.
+
+00:11:25.520 --> 00:11:30.400
+My publication function really does one thing,
+
+00:11:30.400 --> 00:11:34.080
+and that's simply swap out the HTML template
+
+00:11:34.080 --> 00:11:36.840
+that's passed to `org-publish-to`.
+
+00:11:36.840 --> 00:11:43.696
+Now, in order to take note of
+
+00:11:43.696 --> 00:11:45.680
+each Webmention that I send,
+
+00:11:45.680 --> 00:11:47.585
+I took advantage of another
+
+00:11:47.585 --> 00:11:49.880
+Org mode extension point
+
+00:11:49.880 --> 00:11:52.720
+called defining new link types.
+
+00:11:52.720 --> 00:11:54.851
+Here you can see
+
+00:11:54.851 --> 00:11:58.560
+I've created a new link type called reply.
+
+00:11:58.560 --> 00:12:01.960
+One of the attributes that you can attach to this
+
+00:12:01.960 --> 00:12:06.160
+is the function that is used to export your link.
+
+00:12:06.160 --> 00:12:08.562
+I've elided the code for
+
+00:12:08.562 --> 00:12:10.720
+mentions, likes, and reposts.
+
+00:12:10.720 --> 00:12:13.520
+If you look at my export function,
+
+00:12:13.520 --> 00:12:16.280
+you can see that it ultimately yields
+
+00:12:16.280 --> 00:12:19.440
+the appropriate HTML for this link.
+
+00:12:19.440 --> 00:12:22.320
+Before that, it calls a little helper function
+
+00:12:22.320 --> 00:12:24.518
+that will pull out the actual
+
+00:12:24.518 --> 00:12:26.160
+target URL of the link
+
+00:12:26.160 --> 00:12:28.680
+and shove it into this communication channel
+
+00:12:28.680 --> 00:12:31.920
+under the property name `sp1ff/mentions`.
+
+00:12:31.920 --> 00:12:37.360
+So, `org-publish-to` is really the workhorse
+
+00:12:37.360 --> 00:12:40.240
+of the publication process.
+
+00:12:40.240 --> 00:12:42.120
+The first thing it's going to do is
+
+00:12:42.120 --> 00:12:47.400
+transcode from the parsed Orgdown,
+
+00:12:47.400 --> 00:12:50.320
+which is an intermediate representation
+
+00:12:50.320 --> 00:12:53.200
+known as Org elements, to HTML.
+
+00:12:53.200 --> 00:12:57.680
+In particular, for every one of my new links
+
+00:12:57.680 --> 00:13:00.440
+that I'm using to mark Webmentions,
+
+00:13:00.440 --> 00:13:04.040
+it's going to invoke my little export function.
+
+00:13:04.040 --> 00:13:06.600
+And so as we work our way through the post,
+
+00:13:06.600 --> 00:13:09.040
+I'm going to accumulate all the Webmentions
+
+00:13:09.040 --> 00:13:10.920
+that I've made in the property list.
+
+00:13:10.920 --> 00:13:14.360
+The second step is to actually render
+
+00:13:14.360 --> 00:13:16.560
+the final HTML document,
+
+00:13:16.560 --> 00:13:18.800
+and that's where my specialized template comes in.
+
+00:13:18.800 --> 00:13:21.480
+All I do there is, use it to get
+
+00:13:21.480 --> 00:13:24.920
+my authorship information into the page.
+
+00:13:24.920 --> 00:13:29.000
+And then the last step is called finalization.
+
+00:13:29.000 --> 00:13:32.320
+At this point, we have the rendered HTML document,
+
+00:13:32.320 --> 00:13:35.720
+and Org mode gives you an extension point here,
+
+00:13:35.720 --> 00:13:38.080
+where you can do arbitrary post-processing
+
+00:13:38.080 --> 00:13:39.200
+on that document.
+
+00:13:39.200 --> 00:13:42.160
+I arguably abuse it to retrieve
+
+00:13:42.160 --> 00:13:44.440
+all the Webmentions I've made
+
+00:13:44.440 --> 00:13:46.280
+out of the communication channel
+
+00:13:46.280 --> 00:13:47.920
+and write them to disk.
+
+00:13:47.920 --> 00:13:54.840
+At this point, when we type make,
+
+00:13:54.840 --> 00:13:59.160
+we wind up with the rendered HTML
+
+00:13:59.160 --> 00:14:01.080
+for our Orgdown document,
+
+00:14:01.080 --> 00:14:03.880
+along with a little text file
+
+00:14:03.880 --> 00:14:06.040
+in which we've recorded all the Webmentions
+
+00:14:06.040 --> 00:14:07.349
+that need to be sent.
+
+00:14:07.349 --> 00:14:11.800
+The next step is to send said Webmentions.
+
+00:14:11.800 --> 00:14:15.560
+This is surprisingly easy in Emacs Lisp.
+
+00:14:15.560 --> 00:14:17.360
+This is my actual implementation.
+
+00:14:17.360 --> 00:14:22.360
+I use the request.el package to talk to Telegraph.
+
+00:14:22.360 --> 00:14:26.920
+And at this point, we really don't need to
+
+00:14:26.920 --> 00:14:30.640
+add a lot to our little site Elisp file.
+
+00:14:30.640 --> 00:14:34.320
+I sketched out a `send-webmentions` implementation
+
+00:14:34.320 --> 00:14:36.160
+that just goes through in a loop
+
+00:14:36.160 --> 00:14:39.000
+and calls my send-webmention function.
+
+00:14:39.000 --> 00:14:42.640
+And now publication becomes a two-step process.
+
+00:14:42.640 --> 00:14:46.520
+First, the org-publish, then sending Webmentions.
+
+00:14:46.520 --> 00:14:51.418
+Okay, so I realize this has been
+
+00:14:51.418 --> 00:14:52.800
+a bit of a whirlwind.
+
+00:14:52.800 --> 00:14:55.240
+So, where are we now?
+
+00:14:55.240 --> 00:15:00.600
+We have a sample site that we can publish
+
+00:15:00.600 --> 00:15:02.400
+and have sent Webmentions.
+
+00:15:02.400 --> 00:15:05.480
+And we've done it with just Emacs, Org mode,
+
+00:15:05.480 --> 00:15:07.080
+a little Lisp, and a make file.
+
+00:15:07.080 --> 00:15:09.080
+If you'd like to see more,
+
+00:15:09.080 --> 00:15:11.680
+I've put my library up on GitHub.
+
+00:15:11.680 --> 00:15:13.754
+It has logic for both
+
+00:15:13.754 --> 00:15:15.560
+sending and receiving Webmentions
+
+00:15:15.560 --> 00:15:16.960
+as well as something
+
+00:15:16.960 --> 00:15:19.120
+that on the IndieWeb is called POSSE,
+
+00:15:19.120 --> 00:15:22.400
+which is an acronym standing for
+
+00:15:22.400 --> 00:15:25.400
+Publish (on your) Own Site, Syndicate Elsewhere.
+
+00:15:25.400 --> 00:15:27.818
+What that means is that
+
+00:15:27.818 --> 00:15:31.400
+you turn the publication step
+
+00:15:31.400 --> 00:15:35.400
+from merely publishing new content to your site
+
+00:15:35.400 --> 00:15:36.920
+to also replicating it to places
+
+00:15:36.920 --> 00:15:39.160
+like Twitter and Facebook and so forth.
+
+00:15:39.160 --> 00:15:44.120
+And also when people like, comment,
+
+00:15:44.120 --> 00:15:45.960
+and retweet your content,
+
+00:15:45.960 --> 00:15:47.680
+that gets fed back to your site,
+
+00:15:47.680 --> 00:15:51.400
+where you can display it as comments.
+
+00:15:51.400 --> 00:15:52.600
+In terms of the future,
+
+00:15:52.600 --> 00:15:54.520
+I feel like I'm at a decision point.
+
+00:15:54.520 --> 00:15:58.000
+Org mode is admirably flexible,
+
+00:15:58.000 --> 00:16:00.320
+and I'm confident that I can continue to
+
+00:16:00.320 --> 00:16:02.560
+add support for IndieWeb protocols.
+
+00:16:02.560 --> 00:16:05.440
+On the other hand, it is so flexible
+
+00:16:05.440 --> 00:16:07.880
+that the process of figuring out
+
+00:16:07.880 --> 00:16:10.680
+which extension points to use in any situation
+
+00:16:10.680 --> 00:16:12.000
+is very challenging.
+
+00:16:12.000 --> 00:16:14.800
+When I started down this path,
+
+00:16:14.800 --> 00:16:17.840
+my mindset was keep it simple
+
+00:16:17.840 --> 00:16:20.400
+and let's just see how far I could get with Org mode.
+
+00:16:20.400 --> 00:16:23.160
+And I feel like I might be bumping up
+
+00:16:23.160 --> 00:16:25.800
+against the limitations of that approach now.
+
+00:16:25.800 --> 00:16:34.920
+Thank you very much.
diff --git a/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt
new file mode 100644
index 00000000..dd1a46d4
--- /dev/null
+++ b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--answers.vtt
@@ -0,0 +1,1019 @@
+WEBVTT
+
+00:00.000 --> 00:01.800
+Oh, it's already being recorded.
+
+00:01.800 --> 00:02.800
+Great.
+
+00:02.800 --> 00:03.800
+So, hi, Alfred.
+
+00:03.800 --> 00:04.800
+How are you doing?
+
+00:04.800 --> 00:05.800
+I'm doing great.
+
+00:05.800 --> 00:06.800
+Thank you.
+
+00:06.800 --> 00:07.800
+It's a bit dark outside.
+
+00:07.800 --> 00:09.840
+I understand it's morning for most of you.
+
+00:09.840 --> 00:12.000
+Yes, well, not for me.
+
+00:12.000 --> 00:16.280
+I'm also in Europe, and I can tell you it's going to get dark pretty damn quickly.
+
+00:16.280 --> 00:19.000
+So, thank you so much for your talk.
+
+00:19.000 --> 00:22.440
+I didn't get to ask you the question before, but do you have access to the pads and the
+
+00:22.440 --> 00:25.000
+questions?
+
+00:25.000 --> 00:26.520
+I do have access to it.
+
+00:26.520 --> 00:30.520
+I'll just open it up.
+
+00:30.520 --> 00:33.520
+I'm not sure Sasha had given it to me, no.
+
+00:33.520 --> 00:35.520
+Sorry, what was the question?
+
+00:35.520 --> 00:38.520
+Could you post a link to it in the chat?
+
+00:38.520 --> 00:39.520
+I can give you a link.
+
+00:39.520 --> 00:40.520
+You can press.
+
+00:40.520 --> 00:45.480
+I'm pretty much getting the chat, so it should appear on the left, but in the meantime, if
+
+00:45.480 --> 00:49.480
+you want, I can just ask you the question, and you can maybe, whilst you do the little
+
+00:49.480 --> 00:54.520
+thing to open the pad, we can actually start answering one of the questions.
+
+00:54.520 --> 00:56.520
+Do you mind if I read you one?
+
+00:56.520 --> 00:58.520
+Yeah, go ahead.
+
+00:58.520 --> 00:59.520
+Sure.
+
+00:59.520 --> 01:02.720
+So the first question that we had was, it'd be interesting if you explained why WeChat
+
+01:02.720 --> 01:04.440
+is a necessity for you.
+
+01:04.440 --> 01:07.760
+Outside China, most people have no reason to use it at all.
+
+01:07.760 --> 01:11.520
+So can you actually give up on this?
+
+01:11.520 --> 01:19.520
+My utility for WeChat is basically, I've got to have calls every morning, so my manager
+
+01:19.520 --> 01:20.520
+has to use the tool.
+
+01:20.520 --> 01:23.520
+He's not a huge fan of it either.
+
+01:23.520 --> 01:28.520
+It's company policy, and there's plenty of sharing that has to go through that.
+
+01:28.520 --> 01:37.520
+So it's kind of all, since it's the tool that's used by most companies in China, it's kind
+
+01:37.520 --> 01:39.520
+of a tool that you have to work around.
+
+01:39.520 --> 01:42.520
+Now, most people know this.
+
+01:42.520 --> 01:49.520
+WeChat is a privacy nightmare, and as I touched on during my talk, it's also just a nightmare
+
+01:49.520 --> 01:51.520
+in general to work around.
+
+01:51.520 --> 01:57.520
+It's interesting to try and find ways to work around it or to minimize its impact on my
+
+01:57.520 --> 01:59.520
+life as much as possible.
+
+01:59.520 --> 02:02.520
+So strictly speaking, I don't need to use it, obviously.
+
+02:02.520 --> 02:14.520
+Functions that it has can be used by other software, but yeah, that's most of it.
+
+02:14.520 --> 02:15.520
+Okay, great.
+
+02:15.520 --> 02:16.520
+Also, I'm really sorry.
+
+02:16.520 --> 02:19.520
+Apparently, my audio seems to be crackling a little bit.
+
+02:19.520 --> 02:23.520
+I will address this as soon as we're finished with this talk, but there isn't all that much
+
+02:23.520 --> 02:24.520
+I can do right now.
+
+02:24.520 --> 02:25.520
+So sorry, people.
+
+02:25.520 --> 02:28.520
+You'll have to deal with it for a little while.
+
+02:28.520 --> 02:30.520
+Okay, so next question.
+
+02:30.520 --> 02:33.520
+There's a question that is actually dear to my heart.
+
+02:33.520 --> 02:36.520
+I've looked at CRD.er for collaborative real-time editing.
+
+02:36.520 --> 02:39.520
+Do you actually know what it is?
+
+02:39.520 --> 02:42.520
+I hadn't looked at it, no.
+
+02:42.520 --> 02:51.520
+For me, collaborative is less important because most of my work is just like versions.
+
+02:51.520 --> 02:57.520
+So I have a version of a script that I send off to my editor, and we don't work on it
+
+02:57.520 --> 02:58.520
+together.
+
+02:58.520 --> 03:08.520
+So that's kind of been less of an important part for my workflow, but it is interesting.
+
+03:08.520 --> 03:10.520
+I'll have to take a look at it.
+
+03:10.520 --> 03:16.520
+It used to be a bigger part of my workflow when I was a student.
+
+03:16.520 --> 03:20.520
+So it's definitely interesting to look into, but unfortunately, I don't have much to say
+
+03:20.520 --> 03:23.520
+about it.
+
+03:23.520 --> 03:25.520
+Yeah, but you're fine.
+
+03:25.520 --> 03:28.520
+The reason is that I hope I don't have too much now.
+
+03:28.520 --> 03:31.520
+Alfred, can you tell me, am I cutting off a lot when I'm talking?
+
+03:31.520 --> 03:32.520
+Yeah, it's pretty bad.
+
+03:32.520 --> 03:38.520
+I thought it was my internet connection, but it's not great.
+
+03:38.520 --> 03:40.520
+You know what?
+
+03:40.520 --> 03:44.520
+What we'll do for the moment is that we'll stick to the audio simply.
+
+03:44.520 --> 03:48.520
+Can you still hear me right now?
+
+03:48.520 --> 03:51.520
+Yeah, I can hear you a little bit better.
+
+03:51.520 --> 03:52.520
+Okay, sure.
+
+03:52.520 --> 03:54.520
+I'll put up my webcam like this.
+
+03:54.520 --> 03:55.520
+You know what?
+
+03:55.520 --> 03:57.520
+We just care about you, so you'll have to be solid on the scene.
+
+03:57.520 --> 04:01.520
+The reason I was asking you about CRDT, is it better now?
+
+04:01.520 --> 04:03.520
+Can you just confirm the audio is better?
+
+04:03.520 --> 04:05.520
+Yeah, the audio is much better.
+
+04:05.520 --> 04:06.520
+Cool, thank you.
+
+04:06.520 --> 04:08.520
+I'm so happy to hear this.
+
+04:08.520 --> 04:13.520
+The reason we're mentioning CRDT is that it's actually pretty great.
+
+04:13.520 --> 04:19.520
+A lot of people think about collaborative editing, and they tend to think about Google Doc
+
+04:19.520 --> 04:25.520
+or any kind of proprietary solution, but CRDT is kind of broaching the gap
+
+04:25.520 --> 04:29.520
+to what you can do with multiple people using Emacs.
+
+04:29.520 --> 04:33.520
+Now, I'm talking about this because I've worked with Shantan Hong,
+
+04:33.520 --> 04:37.520
+who is the mentor of CRDT, and we've worked a little bit on it,
+
+04:37.520 --> 04:42.520
+and they are still infuriating problems with it, especially making it secure
+
+04:42.520 --> 04:45.520
+and all this jazzy nonsense.
+
+04:45.520 --> 04:51.520
+But I do recommend looking into it because it would make it much easier to work with other people.
+
+04:51.520 --> 04:58.520
+All right, now that I am not lagging anymore, do you have the pad in front of you?
+
+04:58.520 --> 04:59.520
+I do.
+
+04:59.520 --> 05:01.520
+Do you want me to answer questions directly?
+
+05:01.520 --> 05:04.520
+Yes, that might be best.
+
+05:04.520 --> 05:09.520
+I kind of like to work with the little hells in the background to make sure that I can...
+
+05:09.520 --> 05:11.520
+All right, I'll leave you to it.
+
+05:11.520 --> 05:17.520
+I'll answer the question about org-mode files and sharing, which I've encountered.
+
+05:17.520 --> 05:24.520
+I've kind of had a whole issue starting out with, well, I've started working with org-mode files,
+
+05:24.520 --> 05:27.520
+and now I've got to figure out what do I do with them.
+
+05:27.520 --> 05:32.520
+So my first instinct was I'll just share the org-mode file directly,
+
+05:32.520 --> 05:41.520
+which as some people might have figured out, if they've tried, is not very successful with normal people.
+
+05:41.520 --> 05:48.520
+I've also tried exporting it to docx or to ODT, but that's problematic because you have, well,
+
+05:48.520 --> 05:51.520
+plenty of standards in ODT which don't transfer well.
+
+05:51.520 --> 05:59.520
+So for example, by default, the ODT kind of adopts, what's it called, a latex-like structure.
+
+05:59.520 --> 06:08.520
+So it's like 1.1.1, which isn't optimal for writing and sharing documents, at least in the way that I write them.
+
+06:08.520 --> 06:15.520
+So what I've settled for is for now just not sharing the org directly.
+
+06:15.520 --> 06:25.520
+I wanted to be able to do that through GitHub or GitLab, but it's a bit too much of a hassle to ask people to create an account there.
+
+06:25.520 --> 06:34.520
+And I've just created some export profiles for my ODT documents, which sorts out that problem
+
+06:34.520 --> 06:40.520
+and allows me to just share that through that and kind of bypass org-mode files for now.
+
+06:40.520 --> 06:45.520
+So unfortunately, I kind of am not able to stay 100% org.
+
+06:45.520 --> 06:53.520
+My plan on the long term is to have it go up on a website, so kind of make a work wiki,
+
+06:53.520 --> 06:59.520
+which will allow me to link back to some research documents in the script.
+
+06:59.520 --> 07:12.520
+So that's the long term plan, and that'll be built with org-mode documents, so with OX Hugo and all that kind of thing.
+
+07:12.520 --> 07:15.520
+But yeah, that's most of it.
+
+07:15.520 --> 07:21.520
+Pandoc for incoming and outgoing docs, repeating conversions.
+
+07:21.520 --> 07:28.520
+So I do use Pandoc for outgoing docs, as I just said.
+
+07:28.520 --> 07:32.520
+I found some issues with document quality.
+
+07:32.520 --> 07:43.520
+So as I said, layouts are kind of wonky, but that's possible to work through if you go into the settings
+
+07:43.520 --> 07:49.520
+and adjust basically to how you want it to look like.
+
+07:49.520 --> 07:54.520
+And for incoming docs, so that's a bit more of a hassle.
+
+07:54.520 --> 08:02.520
+My plan for this talk was to have it a bit more ready, but I've got this integration for org-ic,
+
+08:02.520 --> 08:10.520
+org-apple-pages documents, that kind of thing.
+
+08:10.520 --> 08:22.520
+So that's often the documents that I get from my colleagues, and I found a way to transfer them into org documents.
+
+08:22.520 --> 08:29.520
+I did that kind of quickly, so I don't think I'm quite ready to share exactly how it went,
+
+08:29.520 --> 08:34.520
+but I'm planning on doing some documentation around that.
+
+08:34.520 --> 08:40.520
+But yeah, basically the gist of it is, I don't find it a huge issue.
+
+08:40.520 --> 08:52.520
+I do use other tools other than just Pandoc to complement that, because otherwise, yes, I wouldn't be able to use that for incoming and outgoing docs,
+
+08:52.520 --> 08:56.520
+and I'd have to copy and paste that. Yes?
+
+08:56.520 --> 09:00.520
+Sorry, I mispress my talking to production button. Don't mind me.
+
+09:00.520 --> 09:02.520
+No worries.
+
+09:02.520 --> 09:13.520
+Begin on Emacs again. Welcome. Yeah, that's an issue I've got as well.
+
+09:13.520 --> 09:14.520
+Let's take your time.
+
+09:14.520 --> 09:24.520
+So Alfred, what we're probably going to do soon is that, as we've probably told you in the opening remarks, we will be letting people in.
+
+09:24.520 --> 09:37.520
+So right now we are in the room with Alfred on BBB, BigBlueButton, and we have now opened the session so that people can join and ask questions with their voice rather than having to type them out.
+
+09:37.520 --> 09:40.520
+And we have about 10 more minutes until we need to move on to the next talk.
+
+09:40.520 --> 09:51.520
+So normally, if you go to the talk page or all the areas that Sasha pointed out earlier, you should be able to find the link to the room and join us to ask questions directly to Alfred.
+
+09:51.520 --> 09:56.520
+And Alfred, in the meantime, I don't think we have any more questions for now.
+
+09:56.520 --> 10:01.520
+You have the questions about beginning on Emacs that is now finished, if you want to take this one in the meantime.
+
+10:01.520 --> 10:08.520
+Yeah. And so the comments and all that, I'll go through the notes again once I've got a bit more time.
+
+10:08.520 --> 10:16.520
+It's been a bit of a hectic day and put some more references in.
+
+10:16.520 --> 10:21.520
+So what was your moment when you started to work in Emacs instead of config editing?
+
+10:21.520 --> 10:33.520
+Interesting. So basically, as I hinted at in my talk, I did spend a lot of time this summer just editing my configs.
+
+10:33.520 --> 10:50.520
+And I kind of had the click, the moment where, oh, I really need to stop doing just that after I had editing, well, text editing workflow that I was happy with.
+
+10:50.520 --> 10:56.520
+So I think it's possible to just jump into doing Emacs without editing the config at all.
+
+10:56.520 --> 10:58.520
+That's not the way that I work.
+
+10:58.520 --> 11:09.520
+But I think that, yeah, being able to not be too frustrated in like figuring out how to take notes, like the Space NMT in Doom Emacs,
+
+11:09.520 --> 11:18.520
+just creating an org capture templates or using an org capture templates and realizing, all right, I can just, any config idea that I have,
+
+11:18.520 --> 11:28.520
+I can put off to later and continue focusing on this work that I have right in front of me.
+
+11:28.520 --> 11:34.520
+I think that was kind of a moment where I realized, all right, I don't need to edit this config all day.
+
+11:34.520 --> 11:42.520
+And I like to edit my config for like a whole month, but obviously that's not quite feasible.
+
+11:42.520 --> 11:51.520
+I mean, working on a month on your config, you know, some of us have been working on our config for the better part of the last 30 years or 10 years or 20 years, depending on your age.
+
+11:51.520 --> 11:54.520
+So do not worry, you will find the time to work on your config.
+
+11:54.520 --> 11:57.520
+Emacs is just about editing your config.
+
+11:57.520 --> 11:59.520
+So before you continue, I just want to let people know.
+
+11:59.520 --> 12:05.520
+So we have opened up the question and answer room and now people can join and ask questions.
+
+12:05.520 --> 12:13.520
+But I see for now, we mostly have people wanting to listen in, but that's also because as soon as we'll need to move the stream to the next talk,
+
+12:13.520 --> 12:17.520
+you'll still be able to join the BBB room and it will still be open.
+
+12:17.520 --> 12:25.520
+So that if you want to ask questions to Alfred off stream, be careful, it will still be recorded and still be posted on the website afterwards.
+
+12:25.520 --> 12:26.520
+Well, you can do so.
+
+12:26.520 --> 12:30.520
+And as long as Alfred is available, he can answer your questions.
+
+12:30.520 --> 12:41.520
+And otherwise, if you don't want to join, you can still type your questions in a pad and I'm sure we'll find the time maybe after Christmas or whenever we are all a little more available to answer all the questions that we have.
+
+12:41.520 --> 12:45.520
+All right. So sorry, Alfred, you can go now again.
+
+12:45.520 --> 12:53.520
+OK, so I've seen I've seen the latest question from Vidianos.
+
+12:53.520 --> 12:55.520
+So why is Emacs recommended for journalism?
+
+12:55.520 --> 13:02.520
+It's actually an interesting question because that's that's what I had asked myself when I just started.
+
+13:02.520 --> 13:15.520
+And I wouldn't say it's recommended. Obviously, it's it's like just as Emacs isn't recommended to anyone in particular because you have you have to really figure out, oh, this is for me.
+
+13:15.520 --> 13:18.520
+But I think it's yeah.
+
+13:18.520 --> 13:25.520
+Sorry, sorry, sorry. Is my button not working again? I will, I will chastise myself.
+
+13:25.520 --> 13:29.520
+So I think it's.
+
+13:29.520 --> 13:40.520
+Gotta get back into it. And it's valuable for journalism in the sense that there are plenty of tools that are used for scientific research, which are also used for journalism research.
+
+13:40.520 --> 13:48.520
+And in the sense that Emacs is kind of tailored through big tags, through big latex, through like Orgrom and Orgrom Noter, that kind of thing.
+
+13:48.520 --> 13:56.520
+And it's it's very easy to transfer these skills into journalism.
+
+13:56.520 --> 14:05.520
+And because you're just researching topics and you're transcribing interviews, you're like going through data and trying to figure out, all right, this is the part that's that's valuable.
+
+14:05.520 --> 14:13.520
+This is like something that I'm going to research. And for me, Orgrom is kind of a game changer because it allows me to just.
+
+14:13.520 --> 14:22.520
+Set my set my thoughts aside, just create a create a Rome link and know that I'm going to I'm going to get back to it.
+
+14:22.520 --> 14:30.520
+And so I think it's recommended in that sense, because otherwise I'd just be writing in in a Google Drive document.
+
+14:30.520 --> 14:36.520
+And just be spending all my days working on stuff that's not exactly related.
+
+14:36.520 --> 14:45.520
+But obviously, for people who have a bit more self-control than I do, it's probably a bit easier and less less necessary.
+
+14:45.520 --> 14:51.520
+But it's so good to hear this. Sorry for the interruption, but it's so good to hear that Orgrom actually manages to.
+
+14:51.520 --> 14:55.520
+People manage to use Orgrom to, you know, give some more life to their notes.
+
+14:55.520 --> 15:00.520
+It's just not a scribbled notes in one of your book that you never open again.
+
+15:00.520 --> 15:06.520
+It's the fact that it's just a file and that you can link it very easily to the rest of your files.
+
+15:06.520 --> 15:14.520
+It makes it really easily accessible to not forget about it and to try to refine it later on into something more valuable.
+
+15:14.520 --> 15:17.520
+Be it an article, be it a research paper or stuff like this.
+
+15:17.520 --> 15:21.520
+So, yeah, I'm very pleased to hear that Orgrom is being put to such use.
+
+15:21.520 --> 15:29.520
+And we'll hear plenty more about Orgrom and Zettelkasten as usual ever since there was the boom in 2020 about Orgrom stuff and Zettelkasten stuff.
+
+15:29.520 --> 15:36.520
+So don't worry about it. And if you're tired about it, well, sorry, you can go watch that or something.
+
+15:36.520 --> 15:44.520
+Yeah, no, I think that when I realized how to use Orgrom was also kind of a moment that made me want to stay to stay there.
+
+15:44.520 --> 16:01.520
+Like I had shown it on the on the talk, but my my documentary ideas page is basically just like chock full of ideas of stuff that I have thought about for five minutes and just stuff there.
+
+16:01.520 --> 16:05.520
+And no, but I can I can create like stumble on the link at some point and work on it.
+
+16:05.520 --> 16:22.520
+So it's yeah, it's very valuable. I think it's something that we even outside of Emacs, we should probably be a bit more conscious of of using these kinds of tools and promoting promoting that kind of association and kind of linking.
+
+16:22.520 --> 16:29.520
+Even outside of the confines of Orgrom as much as as there are confines, I suppose.
+
+16:29.520 --> 16:44.520
+I think people are already complaining that there's too much Orgrom being talked about. So before we start, well, going outside of Emacs, you know, there are plenty of tools as well outside of Emacs tools, which are also floss, which allow you to have similar workflows.
+
+16:44.520 --> 16:57.520
+But I believe really that tools within Emacs are within the entire stack of Emacs with the philosophy of Emacs that allows so much different modes to be developed on top of it, which is amazing.
+
+16:57.520 --> 17:03.520
+Before we continue, I kind of want to check the clock because we will need to get started on the next talk eventually.
+
+17:03.520 --> 17:11.520
+We do have a lot of people joining on BBB and thank you. Hi, everyone. You are probably hearing me twice, once in BBB and once on the stream.
+
+17:11.520 --> 17:17.520
+So don't forget to pause the stream if you are hearing my voice in doubles.
+
+17:17.520 --> 17:27.520
+We will need to move at 45, so in five minutes, to the next talk. And until then, until then, it is very French of me to say then and not then.
+
+17:27.520 --> 17:31.520
+We can take a couple more questions then, Alfred, if you want.
+
+17:31.520 --> 17:34.520
+Absolutely.
+
+17:34.520 --> 17:47.520
+So yeah, open the questions to people joining in on the mic. And if there's nothing, I'm happy to chat around or to wait.
+
+17:47.520 --> 17:53.520
+Sure. Do we have any other questions on the panel? I think you've been pretty thorough and thank you so much for taking the time to answer this.
+
+17:53.520 --> 18:04.520
+One of the reasons that we wanted to have two tracks this year is to be able to spend a little more time with Spukers because it was really heart wrenching last year to have so many talks going one after the other.
+
+18:04.520 --> 18:10.520
+We barely had the time to talk. And this year, it's a more of a leisurely paced stream.
+
+18:10.520 --> 18:16.520
+And yeah, it feels like I can take my time. I'm not running constantly out of breath.
+
+18:16.520 --> 18:26.520
+It's still the beginning. OK, I still was extremely stressed whenever we need to press the start stream button, you know, all kinds of fire starts spawning left and right.
+
+18:26.520 --> 18:39.520
+But if we don't have any more questions, well, maybe we can just go on a little break and reconvene in four minutes because I don't see people on BBB having their mic open.
+
+18:39.520 --> 18:42.520
+So, Alfred, you're more than welcome to stay in the room.
+
+18:42.520 --> 18:48.520
+What we are probably going to do now is go on a little bit of a break. So we're going to try to put something on the screen.
+
+18:48.520 --> 18:55.520
+There's just been a question from Corwin. So are you closing out the room?
+
+18:55.520 --> 19:01.520
+Oh, no, no, no. We probably will. Well, OK, let me just read Corwin's question.
+
+19:01.520 --> 19:04.520
+Yes, you do have a question for Corwin, but we're not going to close the room.
+
+19:04.520 --> 19:12.520
+We're going to leave it open as long as you want to stay. You can stay five to ten minutes. Maybe people might show up. But otherwise.
+
+19:12.520 --> 19:17.520
+So just reading Corwin's questions because it's not in a pad yet, I think.
+
+19:17.520 --> 19:25.520
+So do you use any fancy solutions for annotating text onto particular video timestamps?
+
+19:25.520 --> 19:30.520
+Well, I don't use it yet, but it's planned.
+
+19:30.520 --> 19:38.520
+So I've started a Reddit thread and Sasha has been helpful with answering that one.
+
+19:38.520 --> 19:50.520
+But my plan is to work with subtitle editing at some points and to introduce.
+
+19:50.520 --> 20:00.520
+Wait, annotate. I might have misunderstood the question. Oh, sorry.
+
+20:00.520 --> 20:04.520
+I'm looking for the question as well. So don't worry if you're lost, I'm also lost.
+
+20:04.520 --> 20:18.520
+Annotation text. If it's possible to get a clarification for what you mean by annotation text, is that like text effects or is that subtitles?
+
+20:18.520 --> 20:28.520
+I think it was mostly about you were talking about notes taking. I think annotation in that sense on the videos would be you have a video and you're trying to take note on this video.
+
+20:28.520 --> 20:35.520
+Like either you have the timestamp on the side or you overlay something. But I think it's mostly about taking notes on videos.
+
+20:35.520 --> 20:43.520
+OK, yeah. So for now, I'm creating a new link between every video or podcast that I listen to,
+
+20:43.520 --> 20:56.520
+but I but I remember to do so and creating just an org room, an org room documents for every for every for every new episode or every new video.
+
+20:56.520 --> 21:12.520
+But I am definitely going to have to take some time and figure out a process in which I can link together RSS feeds or L feed as well to to be able to annotate that and link it up with my other text notes.
+
+21:12.520 --> 21:20.520
+So nothing fancy yet, but that is planned. So stick around till next year and I might have something for you.
+
+21:20.520 --> 21:23.520
+And we will love to have you back.
+
+21:23.520 --> 21:31.520
+Yeah, it's thanks. Thanks so much for organizing this. It's it's great to have to have these questions.
+
+21:31.520 --> 21:43.520
+Yeah, well, thank you so much, Alfred. It was you know, you had nothing to do with it, but you were the first speaker to come. And even though, you know, having a prereq makes it that much less stressful to be facing the crowd,
+
+21:43.520 --> 21:50.520
+you still had to take the first questions from the crowd. And thank you so much because you did it brilliantly and you answered so many questions considering.
+
+21:50.520 --> 21:55.520
+So, Alfred, you're going to probably stay in a room a little while. I don't see a lot of people joining quite yet.
+
+21:55.520 --> 22:05.520
+I don't think people are, I think most of the questions have already been addressed on the pad, but you can stick around in two minutes and we'll be with you shortly to help you close the room.
+
+22:05.520 --> 22:10.520
+But right now, what we're going to do is we're going to take, well, we're not going to take any break.
+
+22:10.520 --> 22:16.520
+We're just going to move straight into the next talk. Do bear with us because it's a it's a fine machinery.
+
+22:16.520 --> 22:22.520
+And if something flashes on the screen, bear with us. It will be live pretty soon.
+
+22:22.520 --> 22:31.520
+OK, it's apparently live. Bye bye. Take care.
+
+22:31.520 --> 22:39.520
+OK, so we are now off the stream. We are playing the next prereq. Thank you so much, Alfred, and sorry for the intermittent microphone tuning in.
+
+22:39.520 --> 22:43.520
+It was basically my push to talk button with production that is misbehaving a little bit.
+
+22:43.520 --> 22:52.520
+It's working so well that I'm actually if I keep talking whilst I'm releasing the button, I'm talking to you, which is really weird and really confusing.
+
+22:52.520 --> 23:00.520
+OK, you know, it's always it's always rough with new audio setups going live with them at the same time as you're discovering them.
+
+23:00.520 --> 23:05.520
+It's always an interesting, interesting, especially since it's only one aspect of the stuff we're doing.
+
+23:05.520 --> 23:08.520
+You know, we're doing so much stuff on the side as well. OK, I'm going to have to get going.
+
+23:08.520 --> 23:13.520
+I don't see I don't see any people joining on BBB, so you can stick around a little while.
+
+23:13.520 --> 23:16.520
+Corwin might be back in about two to three minutes to help you close the room.
+
+23:16.520 --> 23:20.520
+But otherwise, you can just leave if no one shows up in two minutes. OK. All right.
+
+23:20.520 --> 23:25.520
+Thanks so much. And thank you so much.
+
+23:25.520 --> 23:54.520
+Merci and see you next time. All right, guys, if you have any questions, this is the last the last the last moment.
+
+23:54.520 --> 24:04.520
+To launch launch a question, if you're if you don't want to be recorded, I'm happy to I'm happy to take a question off off air or something.
+
+24:04.520 --> 24:08.520
+I don't know. I don't know if the chats. Oh, Max. Yes.
+
+24:08.520 --> 24:17.520
+When I get stuck with the next problem.
+
+24:17.520 --> 24:26.520
+For non-tech people, do you mean non-technical minded like I'm.
+
+24:26.520 --> 24:30.520
+I'm trying to figure out. Oh, great.
+
+24:30.520 --> 24:37.520
+Well, typically, typically, I try and just research on on.
+
+24:37.520 --> 24:49.520
+On Stack Overflow or other platforms where you can share code and share problems, but I typically don't go into too much like non-tech places for EMAX problems.
+
+24:49.520 --> 24:54.520
+I have other problems. So, for example, research problems and that kind of thing.
+
+24:54.520 --> 25:00.520
+And I'm not sure I answered the core of your question.
+
+25:00.520 --> 25:03.520
+The.
+
+25:03.520 --> 25:15.520
+Oh, all right. Yes.
+
+25:15.520 --> 25:27.520
+Yeah, I mean, I do, I do have other other communities that I joined in, but I try to talk talk about these issues with that aren't that aren't EMAX.
+
+25:27.520 --> 25:33.520
+But obviously, it's difficult to talk about EMAX problems with non EMAX users.
+
+25:33.520 --> 25:43.520
+So, yeah, that's that's the whole the whole issue with it being so complicated to get started is that you can you can say you can say all you want about how great it is.
+
+25:43.520 --> 25:52.520
+But people people aren't always keen to spend three months of their life trying to learn it, which fair enough.
+
+25:52.520 --> 26:04.520
+All right. Well, I hope I answered the I answered your questions to the as much as I could, I'll get back to the to the note documents.
+
+26:04.520 --> 26:13.520
+And at some point in the coming week and putting in some more notes about about the stuff you guys were interested in.
+
+26:13.520 --> 26:23.520
+And, yeah, well thanks for thanks for asking questions thanks for being here and hopefully, hopefully see you next time in the EMAX Conf.
+
+26:23.520 --> 26:45.520
+You are currently the only person in this conference.
+
+26:53.520 --> 27:18.520
+Okay.
+
+27:23.520 --> 27:25.520
+You
+
+27:53.520 --> 27:55.520
+You
+
+28:23.520 --> 28:25.520
+You
+
+28:53.520 --> 28:55.520
+You
+
+29:23.520 --> 29:25.520
+You
+
+29:53.520 --> 29:55.520
+You
+
+30:23.520 --> 30:25.520
+You
+
+30:53.520 --> 30:55.520
+You
+
+31:23.520 --> 31:25.520
+You
+
+31:53.520 --> 31:55.520
+You
+
+32:23.520 --> 32:25.520
+You
+
+32:53.520 --> 32:55.520
+You
+
+33:23.520 --> 33:25.520
+You
+
+33:53.520 --> 33:55.520
+You
+
+34:23.520 --> 34:25.520
+You
+
+34:53.520 --> 34:55.520
+You
+
+35:23.520 --> 35:25.520
+You
+
+35:53.520 --> 35:55.520
+You
+
+36:23.520 --> 36:25.520
+You
+
+36:53.520 --> 36:55.520
+You
+
+37:23.520 --> 37:25.520
+You
+
+37:53.520 --> 37:55.520
+You
+
+38:23.520 --> 38:25.520
+You
+
+38:53.520 --> 38:55.520
+You
+
+39:23.520 --> 39:25.520
+You
+
+39:53.520 --> 39:55.520
+You
+
+40:23.520 --> 40:25.520
+You
+
+40:53.520 --> 40:55.520
+You
+
+41:23.520 --> 41:25.520
+You
+
+41:53.520 --> 41:55.520
+You
+
+42:23.520 --> 42:25.520
+You
+
+42:53.520 --> 42:55.520
+You
+
+43:23.520 --> 43:25.520
+You
+
+43:53.520 --> 43:55.520
+You
+
+44:23.520 --> 44:25.520
+You
+
+44:53.520 --> 44:55.520
+You
+
+45:23.520 --> 45:25.520
+You
+
+45:53.520 --> 45:55.520
+You
+
+46:23.520 --> 46:25.520
+You
+
+46:53.520 --> 46:55.520
+You
+
+47:23.520 --> 47:25.520
+You
+
+47:53.520 --> 47:55.520
+You
+
+48:23.520 --> 48:25.520
+You
+
+48:53.520 --> 48:55.520
+You
+
+49:23.520 --> 49:25.520
+You
+
+49:53.520 --> 49:55.520
+You
+
+50:23.520 --> 50:25.520
+You
+
+50:53.520 --> 50:55.520
+You
+
+51:23.520 --> 51:25.520
+You
+
+51:53.520 --> 51:55.520
+You
+
+52:23.520 --> 52:25.520
+You
+
+52:53.520 --> 52:55.520
+You
+
+53:23.520 --> 53:25.520
+You
+
+53:53.520 --> 53:55.520
+You
+
+54:23.520 --> 54:25.520
+You
+
+54:53.520 --> 54:55.520
+You
+
+55:23.520 --> 55:25.520
+You
+
+55:53.520 --> 55:55.520
+You
+
+56:23.520 --> 56:25.520
+You
+
+56:53.520 --> 56:55.520
+You
+
+57:23.520 --> 57:25.520
+You
+
+57:53.520 --> 57:55.520
+You
+
+58:23.520 --> 58:25.520
+You
+
+58:53.520 --> 58:55.520
+You
+
+59:23.520 --> 59:25.520
+You
+
+59:53.520 --> 59:55.520
+You
+
+01:00:23.520 --> 01:00:25.520
+You
+
+01:00:53.520 --> 01:00:55.520
+You
+
+01:01:23.520 --> 01:01:25.520
+You
+
+01:01:53.520 --> 01:01:55.520
+You
+
+01:02:23.520 --> 01:02:25.520
+You
+
diff --git a/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt
new file mode 100644
index 00000000..682d1920
--- /dev/null
+++ b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main--chapters.vtt
@@ -0,0 +1,29 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:36.119
+Introduction
+
+00:00:36.120 --> 00:01:52.159
+Why this talk
+
+00:01:52.160 --> 00:02:39.119
+Thinking about workflows
+
+00:02:39.120 --> 00:04:05.279
+My old workflow
+
+00:04:05.280 --> 00:06:56.799
+Finding my workflow
+
+00:06:56.800 --> 00:09:37.639
+Literate configuration
+
+00:09:37.640 --> 00:11:52.959
+Org Mode
+
+00:11:52.960 --> 00:14:26.959
+Collaborating with Pandoc
+
+00:14:26.960 --> 00:16:44.400
+You don't have to get lost in the weeds
diff --git a/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt
new file mode 100644
index 00000000..54cf0992
--- /dev/null
+++ b/2022/captions/emacsconf-2022-journalism--emacs-journalism-or-everythings-a-nail-if-you-hit-it-with-emacs--alfred-zanini--main.vtt
@@ -0,0 +1,818 @@
+WEBVTT captioned by alfred
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.959
+All right. Hello, everyone. Welcome to my talk.
+
+00:00:06.960 --> 00:00:10.119
+We'll be talking today about Emacs journalism
+
+00:00:10.120 --> 00:00:12.279
+and what that means.
+
+00:00:12.280 --> 00:00:14.999
+First of all, I'd like to thank the EmacsConf organizers.
+
+00:00:15.000 --> 00:00:20.039
+Thank you very much, Sacha, for being very patient with me.
+
+00:00:20.040 --> 00:00:22.679
+Let's get right into it. So who's this talk for?
+
+00:00:22.680 --> 00:00:24.799
+First of all, it's for anyone
+
+00:00:24.800 --> 00:00:26.359
+who wants to learn about workflows
+
+00:00:26.360 --> 00:00:28.519
+and how you can work with Emacs
+
+00:00:28.520 --> 00:00:31.279
+to basically do anything you want.
+
+00:00:31.280 --> 00:00:33.679
+And it's for all levels of Emacs lovers.
+
+00:00:33.680 --> 00:00:36.119
+So I'll keep it accessible.
+
+NOTE Why this talk
+
+00:00:36.120 --> 00:00:37.479
+Why this talk? So first of all,
+
+00:00:37.480 --> 00:00:40.519
+I want to share a lot of Emacs.
+
+00:00:40.520 --> 00:00:42.519
+I also wanted to learn about workflows myself.
+
+00:00:42.520 --> 00:00:46.319
+So what better way than to talk about them
+
+00:00:46.320 --> 00:00:49.519
+to be able to learn? And we could maybe learn a thing
+
+00:00:49.520 --> 00:00:56.799
+or two about collaboration and using Emacs to that motive.
+
+00:00:56.800 --> 00:01:00.479
+I think it's useful to try and figure out who am I?
+
+00:01:00.480 --> 00:01:03.159
+Why am I having this talk? I'm a journalist based
+
+00:01:03.160 --> 00:01:06.799
+in Hong Kong and a documentary filmmaker. So that means
+
+00:01:06.800 --> 00:01:08.959
+that I have interviews quite often.
+
+00:01:08.960 --> 00:01:11.519
+I'm dealing with texts and subtitles,
+
+00:01:11.520 --> 00:01:14.039
+which I have to transcribe.
+
+00:01:14.040 --> 00:01:16.879
+And I'm also dealing with a lot of research.
+
+00:01:16.880 --> 00:01:22.159
+So that means going through a lot of documents and a lot of,
+
+00:01:22.160 --> 00:01:26.759
+well, skimming through documents
+
+00:01:26.760 --> 00:01:30.279
+to be able to have something to write.
+
+00:01:30.280 --> 00:01:34.119
+And I also use Emacs since basically one year ago,
+
+00:01:34.120 --> 00:01:35.399
+I started using it full time
+
+00:01:35.400 --> 00:01:39.639
+to have a great detriment of my productivity.
+
+00:01:39.640 --> 00:01:45.599
+So we'll be talking about, we'll be talking about, well,
+
+00:01:45.600 --> 00:01:48.439
+basically, my workflow for Emacs
+
+00:01:48.440 --> 00:01:52.159
+and how I went about having an Emacs workflow.
+
+NOTE Thinking about workflows
+
+00:01:52.160 --> 00:01:56.799
+So what is best when you're thinking about your own workflow
+
+00:01:56.800 --> 00:01:59.199
+and some things to think about journalism
+
+00:01:59.200 --> 00:02:03.199
+and about using these kinds of tools
+
+00:02:03.200 --> 00:02:09.479
+in combination for this? So where do we all start?
+
+00:02:09.480 --> 00:02:11.559
+Let's start with a simple-ish definition
+
+00:02:11.560 --> 00:02:14.959
+of what is a workflow. A workflow is
+
+00:02:14.960 --> 00:02:18.359
+any sequence of actions or tools you use to accomplish that.
+
+00:02:18.360 --> 00:02:23.199
+So it doesn't have to be through text processing,
+
+00:02:23.200 --> 00:02:27.759
+though obviously being a text-oriented community,
+
+00:02:27.760 --> 00:02:31.439
+it will most likely be partially text.
+
+00:02:31.440 --> 00:02:34.999
+But it's just about how we accomplish a task
+
+00:02:35.000 --> 00:02:39.119
+and which tools and mindsets we go into it with.
+
+NOTE My old workflow
+
+00:02:39.120 --> 00:02:42.759
+For example, let's talk about my old workflow.
+
+00:02:42.760 --> 00:02:46.879
+That workflow was basically just Google Drive
+
+00:02:46.880 --> 00:02:50.759
+using proprietary tools like Notion, Google Drive, Office,
+
+00:02:50.760 --> 00:02:55.839
+Storyboarder, and for communication, WeChat.
+
+00:02:55.840 --> 00:02:59.559
+If I could forgive all the privacy concerns of WeChat,
+
+00:02:59.560 --> 00:03:03.279
+I wouldn't, but I still wouldn't forgive
+
+00:03:03.280 --> 00:03:06.759
+the terribly buggy interface, and I hate it.
+
+00:03:06.760 --> 00:03:09.119
+So there are certain tools that you have to use
+
+00:03:09.120 --> 00:03:11.359
+and you have to modify your workflow
+
+00:03:11.360 --> 00:03:13.839
+or just adapt your workflow to the tools
+
+00:03:13.840 --> 00:03:17.119
+that you have to use. So for me, unfortunately,
+
+00:03:17.120 --> 00:03:23.399
+that means having to use WeChat. You compartmentalize it
+
+00:03:23.400 --> 00:03:27.479
+and set it aside, try not to think about it too hard.
+
+00:03:27.480 --> 00:03:29.319
+And this is the part that hurts the most, right?
+
+00:03:29.320 --> 00:03:31.039
+You're thinking about your workflow,
+
+00:03:31.040 --> 00:03:32.239
+you're thinking about, all right,
+
+00:03:32.240 --> 00:03:37.199
+I have this thing that works, I don't think about it.
+
+00:03:37.200 --> 00:03:40.039
+And all of a sudden, oh, I'm not happy
+
+00:03:40.040 --> 00:03:44.239
+with what I have right now. So let's get into,
+
+00:03:44.240 --> 00:03:50.079
+let's get into how, oops. So let's get into how and why
+
+00:03:50.080 --> 00:03:51.479
+we're not happy with our workflows.
+
+00:03:51.480 --> 00:03:55.679
+Because obviously, it's quite nice
+
+00:03:55.680 --> 00:03:57.159
+to not have to think about things.
+
+00:03:57.160 --> 00:03:58.719
+But once you've thought about it,
+
+00:03:58.720 --> 00:04:01.399
+and once you're not happy with how it works,
+
+00:04:01.400 --> 00:04:03.559
+I think it's quite useful to think about
+
+00:04:03.560 --> 00:04:05.279
+why we're not happy about it.
+
+NOTE Finding my workflow
+
+00:04:05.280 --> 00:04:10.199
+A huge part of what Emacs is being conscious of, well,
+
+00:04:10.200 --> 00:04:11.679
+how do we find our workflows?
+
+00:04:11.680 --> 00:04:17.839
+How do we find what we want to do? And for me, obviously,
+
+00:04:17.840 --> 00:04:19.839
+the best way to find that is to write it down
+
+00:04:19.840 --> 00:04:24.239
+and to try and tailor my tools to it.
+
+00:04:24.240 --> 00:04:26.239
+This is what I came up with.
+
+00:04:26.240 --> 00:04:28.039
+I want to be able to manage my accounting,
+
+00:04:28.040 --> 00:04:30.719
+to manage collaboration. So: working on files
+
+00:04:30.720 --> 00:04:33.439
+alongside my colleagues, communication,
+
+00:04:33.440 --> 00:04:38.839
+so that's planning out and managing meetings,
+
+00:04:38.840 --> 00:04:43.999
+managing teammates, managing tasks, information gathering.
+
+00:04:44.000 --> 00:04:45.959
+So that's what I was saying, going through documents,
+
+00:04:45.960 --> 00:04:49.999
+going through all these lists of tasks and all of these,
+
+00:04:50.000 --> 00:04:54.079
+not lists of tasks, all of these, well, basically,
+
+00:04:54.080 --> 00:04:59.799
+scientific papers, notes, references and wikis, media.
+
+00:04:59.800 --> 00:05:02.319
+So I want to be able to have a music player,
+
+00:05:02.320 --> 00:05:06.159
+a podcast player, a movie player. That's outside of work,
+
+00:05:06.160 --> 00:05:09.999
+but it's still one of the tasks that I do. Media processing,
+
+00:05:10.000 --> 00:05:13.559
+so this is where my job kind of gets into it a bit more.
+
+00:05:13.560 --> 00:05:15.159
+So I want to be able to take notes
+
+00:05:15.160 --> 00:05:16.479
+on the media that I watch,
+
+00:05:16.480 --> 00:05:19.559
+to transcribe the interviews
+
+00:05:19.560 --> 00:05:21.559
+and even the conversations that I have,
+
+00:05:21.560 --> 00:05:26.439
+to be able to later on have an easier time.
+
+00:05:26.440 --> 00:05:32.119
+Photo editing, video editing, so unfortunately,
+
+00:05:32.120 --> 00:05:35.959
+Emacs isn't quite quite oriented to that.
+
+00:05:35.960 --> 00:05:40.519
+Graphic design, color grading, storyboarding.
+
+00:05:40.520 --> 00:05:43.479
+And so obviously, you go into it a bit more.
+
+00:05:43.480 --> 00:05:46.519
+So managing to do scheduling tasks, interviews,
+
+00:05:46.520 --> 00:05:49.159
+preparing shot lists, tracking time,
+
+00:05:49.160 --> 00:05:53.319
+setting daily work goals, setting priorities,
+
+00:05:53.320 --> 00:05:55.479
+independent tasks, publishing,
+
+00:05:55.480 --> 00:05:59.079
+so publishing stuff for my work on my work CMS,
+
+00:05:59.080 --> 00:06:01.519
+publishing stuff on my personal CMS,
+
+00:06:01.520 --> 00:06:06.079
+although that's not happened yet. I've been kind of busy.
+
+00:06:06.080 --> 00:06:08.639
+Security and privacy, so making sure
+
+00:06:08.640 --> 00:06:13.279
+that everything that I use respects my data and respects me.
+
+00:06:13.280 --> 00:06:18.399
+Unfortunately, not the case, but you take what you can.
+
+00:06:18.400 --> 00:06:20.599
+Text processing. So that's journaling,
+
+00:06:20.600 --> 00:06:26.039
+writing down articles, my personal wiki, my work wiki,
+
+00:06:26.040 --> 00:06:34.679
+which I use to document, well, for example,
+
+00:06:34.680 --> 00:06:37.159
+several projects that I have currently.
+
+00:06:37.160 --> 00:06:43.319
+So I basically have my work wiki that I'm trying
+
+00:06:43.320 --> 00:06:45.159
+to fill out where I'll be able
+
+00:06:45.160 --> 00:06:47.199
+to basically go into it later on
+
+00:06:47.200 --> 00:06:50.399
+and have my thoughts written down.
+
+00:06:50.400 --> 00:06:56.799
+And programming, which I'm not very good at.
+
+NOTE Literate configuration
+
+00:06:56.800 --> 00:06:59.399
+Some people might have noticed
+
+00:06:59.400 --> 00:07:17.159
+that this looks a lot like [literate] programming.
+
+00:07:17.160 --> 00:07:18.639
+If you go into my config file,
+
+00:07:18.640 --> 00:07:20.159
+I have something kind of similar.
+
+00:07:20.160 --> 00:07:22.439
+I was planning on having a bit more time
+
+00:07:22.440 --> 00:07:26.359
+for this presentation and making it stick to that.
+
+00:07:26.360 --> 00:07:30.999
+But you'll see basically the mess that is my Emacs config.
+
+00:07:31.000 --> 00:07:33.319
+But it kind of sticks to the same thoughts, right?
+
+00:07:33.320 --> 00:07:37.399
+Text processing, web browsing, finances,
+
+00:07:37.400 --> 00:07:39.879
+that's my accounting, media and research.
+
+00:07:39.880 --> 00:07:43.879
+So my BibTeX... Here be dragons.
+
+00:07:43.880 --> 00:07:45.119
+Terrible, terrible config
+
+00:07:45.120 --> 00:07:47.719
+that I've stolen from plenty of people.
+
+00:07:47.720 --> 00:07:52.479
+So basically, that's how Emacs fits into this.
+
+00:07:52.480 --> 00:07:57.399
+So this is where I talk about literate configs
+
+00:07:57.400 --> 00:08:01.919
+and how that's helped me. Obviously, I've extolled
+
+00:08:01.920 --> 00:08:04.199
+the virtue of literate configs
+
+00:08:04.200 --> 00:08:09.359
+to quite an extent right here. It's basically...
+
+00:08:09.360 --> 00:08:15.239
+The concept is to have documents, living documents
+
+00:08:15.240 --> 00:08:18.239
+and documentation as code.
+
+00:08:18.240 --> 00:08:22.239
+So basically, let's go back into my config.
+
+00:08:22.240 --> 00:08:31.279
+I talk about what the config file does, have code blocks.
+
+00:08:31.280 --> 00:08:33.599
+So this is something that Emacs does. I'm pretty sure
+
+00:08:33.600 --> 00:08:36.639
+that there are some resources about that accessible online,
+
+00:08:36.640 --> 00:08:46.439
+which are even accessible in the Emacs Gulf. And so, yeah,
+
+00:08:46.440 --> 00:08:50.199
+basically just having everything accessible
+
+00:08:50.200 --> 00:08:52.479
+in one single source, one single file,
+
+00:08:52.480 --> 00:08:54.879
+which allows you to basically put everything down
+
+00:08:54.880 --> 00:09:00.639
+and integrate things from your config much much more easily.
+
+00:09:00.640 --> 00:09:05.239
+That's something that I found very useful in Emacs
+
+00:09:05.240 --> 00:09:07.599
+and which I think everyone can benefit from
+
+00:09:07.600 --> 00:09:11.279
+or the idea of it, like having everything stored centrally.
+
+00:09:11.280 --> 00:09:14.999
+It doesn't have to be used just for Emacs.
+
+00:09:15.000 --> 00:09:21.999
+It can be used also, it can be used also for, for example,
+
+00:09:22.000 --> 00:09:26.679
+a Qt browser or for other window manager configs.
+
+00:09:26.680 --> 00:09:28.239
+That kind of thing.
+
+00:09:28.240 --> 00:09:32.919
+And it's not been very easy to set a place.
+
+00:09:32.920 --> 00:09:37.639
+So I haven't done that just yet, but that's the plan.
+
+NOTE Org Mode
+
+00:09:37.640 --> 00:09:41.479
+Basically, this is all thanks to Org mode.
+
+00:09:41.480 --> 00:09:45.639
+So, small presentation of what Org mode is. Org mode
+
+00:09:45.640 --> 00:09:49.599
+is basically a project / task management,
+
+00:09:49.600 --> 00:09:52.479
+past management and task management,
+
+00:09:52.480 --> 00:09:54.319
+and writing mode for Emacs.
+
+00:09:54.320 --> 00:10:00.039
+So I can just put in a heading to do Hello World,
+
+00:10:00.040 --> 00:10:10.319
+send a message to Rosie tomorrow about the shoot space MDS--
+
+00:10:10.320 --> 00:10:15.399
+that's thanks to wonderful Doom Emacs--and schedule it.
+
+00:10:15.400 --> 00:10:21.799
+I don't know. It's tomorrow. Let's go and set it to 9am.
+
+00:10:21.800 --> 00:10:28.759
+And say, maybe it's it's tomorrow already. I've done it.
+
+00:10:28.760 --> 00:10:31.439
+I've sent a message. Perfect. It's done.
+
+00:10:31.440 --> 00:10:33.679
+And it also allows you to have an agenda view.
+
+00:10:33.680 --> 00:10:37.719
+So I hope there's nothing too compromising right here.
+
+00:10:37.720 --> 00:10:41.879
+Whatever. It's fine. So it allows you
+
+00:10:41.880 --> 00:10:45.199
+to basically manage your agenda from there.
+
+00:10:45.200 --> 00:10:54.439
+And you might have seen me doing my little space nrf
+
+00:10:54.440 --> 00:10:58.359
+and wonderful key binding by Org Roam. So this
+
+00:10:58.360 --> 00:11:01.039
+is also another thing which is quite quite nice
+
+00:11:01.040 --> 00:11:06.079
+with Emacs is that you can you can have Org Roam, which
+
+00:11:06.080 --> 00:11:09.079
+is basically a database management program.
+
+00:11:09.080 --> 00:11:12.959
+So I can have documentary ideas
+
+00:11:12.960 --> 00:11:21.799
+and have basically my ideas which link up to another file.
+
+00:11:21.800 --> 00:11:25.839
+So for example, this one, which I have nothing for,
+
+00:11:25.840 --> 00:11:29.239
+but you get the idea. So it allows you to apps
+
+00:11:29.240 --> 00:11:33.719
+to link up with different files and to manage your thoughts.
+
+00:11:33.720 --> 00:11:37.959
+And this gets back into the workflow part of my talk,
+
+00:11:37.960 --> 00:11:41.879
+which is, well, this, this is a way
+
+00:11:41.880 --> 00:11:44.319
+to control what your workflow
+
+00:11:44.320 --> 00:11:49.759
+is control what the tools you're using are and to control,
+
+00:11:49.760 --> 00:11:52.079
+basically the way in which you interact
+
+00:11:52.080 --> 00:11:52.959
+with your technology.
+
+NOTE Collaborating with Pandoc
+
+00:11:52.960 --> 00:11:59.799
+So I am getting back into the way that I collaborate.
+
+00:11:59.800 --> 00:12:02.799
+Because obviously it's no good having just
+
+00:12:02.800 --> 00:12:07.919
+one Emacs user who's trying to share to share things
+
+00:12:07.920 --> 00:12:11.159
+with his editor. So I use pandoc.
+
+00:12:11.160 --> 00:12:17.479
+For example, let's go back into my file right here.
+
+00:12:17.480 --> 00:12:24.359
+Obviously, I don't spend much time inside of tables.
+
+00:12:24.360 --> 00:12:29.199
+But if I select this one, that's "SPC m e".
+
+00:12:29.200 --> 00:12:32.079
+Thank you, Doom Emacs for the for the keybindings.
+
+00:12:32.080 --> 00:12:38.239
+And I can just export it via pandoc right here, So "p".
+
+00:12:38.240 --> 00:12:50.719
+And I can just export it to doc, docx, or export it to ODT.
+
+00:12:50.720 --> 00:12:55.119
+So as an ODT file, which is typically what I do.
+
+00:12:55.120 --> 00:12:57.119
+And then I just send it through WeChat,
+
+00:12:57.120 --> 00:13:00.359
+which is not optimal, but I'm not allowed
+
+00:13:00.360 --> 00:13:04.079
+to do anything else. So it is what it is.
+
+00:13:04.080 --> 00:13:12.759
+Basically, this is how I export my files. And I re-import,
+
+00:13:12.760 --> 00:13:15.519
+I re-import them with pandoc as well.
+
+00:13:15.520 --> 00:13:19.799
+So I convert my Pages files, which I receive
+
+00:13:19.800 --> 00:13:22.879
+through an ICS plugin. It's not quite finalized,
+
+00:13:22.880 --> 00:13:24.119
+so I'm not ready to show it,
+
+00:13:24.120 --> 00:13:26.359
+but there's a link that I'll be putting
+
+00:13:26.360 --> 00:13:29.479
+in the description which talks about this.
+
+00:13:29.480 --> 00:13:32.959
+So this is my sharing part.
+
+00:13:32.960 --> 00:13:35.439
+It's nothing very special, honestly.
+
+00:13:35.440 --> 00:13:38.319
+It's just making sure that your documents
+
+00:13:38.320 --> 00:13:41.479
+are able to be shared.
+
+NOTE My own
+00:13:41.480 --> 00:13:44.079
+I have certain things. So for example,
+
+00:13:44.080 --> 00:13:47.839
+if I go into retro gaming in Hong Kong,
+
+00:13:47.840 --> 00:13:53.919
+if I go into my scripts, there are certain headings
+
+00:13:53.920 --> 00:13:55.519
+which I have. So for example, they ignore...
+
+00:13:55.520 --> 00:13:58.759
+My editor doesn't like to have some headings.
+
+00:13:58.760 --> 00:14:02.599
+But when I have a video script that I'm preparing,
+
+00:14:02.600 --> 00:14:05.519
+I like to have them for my own organization
+
+00:14:05.520 --> 00:14:09.399
+and for my thinking. So I keep them in right there
+
+00:14:09.400 --> 00:14:11.760
+and put in ignore. This is the advantage
+
+00:14:11.761 --> 00:14:17.280
+of the Emacs because you can just SPC m e o o,
+
+00:14:17.281 --> 00:14:20.479
+and this is ready to send, basically.
+
+00:14:20.480 --> 00:14:24.039
+There are ways to have export presets,
+
+00:14:24.040 --> 00:14:26.959
+but I'm not quite there yet. It's a lot of work.
+
+NOTE You don't have to get lost in the weeds
+
+00:14:26.960 --> 00:14:30.119
+So, getting back to my presentation.
+
+00:14:30.120 --> 00:14:36.719
+This all goes into basically other packages,
+
+00:14:36.720 --> 00:14:39.319
+which I want to implement, but I haven't been able to.
+
+00:14:39.320 --> 00:14:43.839
+My main conclusion: you don't have to get lost in the weeds.
+
+00:14:43.840 --> 00:14:48.279
+I kind of did that while preparing this talk.
+
+00:14:48.280 --> 00:14:51.719
+So basically, you don't have to do it all at once.
+
+00:14:51.720 --> 00:14:55.639
+Don't let it consume your life.
+
+00:14:55.640 --> 00:14:57.319
+I probably should have done this earlier.
+
+00:14:57.320 --> 00:15:02.119
+But Emacs configs are forever work in progress.
+
+00:15:02.120 --> 00:15:04.919
+So there are lots of features which you can add,
+
+00:15:04.920 --> 00:15:08.119
+a lot of things which you can implement if you only had,
+
+00:15:08.120 --> 00:15:11.639
+I don't know, five weeks to be able to implement them.
+
+00:15:11.640 --> 00:15:12.959
+But you're working right now.
+
+00:15:12.960 --> 00:15:16.319
+And this is a message to me five months ago.
+
+00:15:16.320 --> 00:15:19.639
+Don't do it. Just keep working
+
+00:15:19.640 --> 00:15:23.639
+and don't get lost in configuration all day.
+
+00:15:23.640 --> 00:15:27.559
+So yeah, basically the aim is to use software that you love,
+
+00:15:27.560 --> 00:15:29.439
+but not die in the process.
+
+00:15:29.440 --> 00:15:34.719
+And yeah, basically just using it as much as you can
+
+00:15:34.720 --> 00:15:36.519
+using fast software as much as you can.
+
+00:15:36.520 --> 00:15:39.839
+I'm doing that as well for...
+
+00:15:39.840 --> 00:15:46.679
+I have certain software such as storyboarder or bit tags,
+
+00:15:46.680 --> 00:15:50.159
+that kind of thing, which I try to use as much as possible,
+
+00:15:50.160 --> 00:15:51.839
+even outside of Emacs.
+
+00:15:51.840 --> 00:15:56.279
+And the aim is to get the work done in the end.
+
+00:15:56.280 --> 00:16:00.679
+I'm not an absolutist on this. So yeah, basically,
+
+00:16:00.680 --> 00:16:03.919
+let's keep modding our configs and having fun.
+
+00:16:03.920 --> 00:16:06.479
+If you've got any questions about the talk,
+
+00:16:06.480 --> 00:16:10.439
+I'm happy to answer. I am a novice at this,
+
+00:16:10.440 --> 00:16:12.959
+both presenting in front of camera
+
+00:16:12.960 --> 00:16:15.719
+and at talking about Emacs.
+
+00:16:15.720 --> 00:16:18.679
+I'm sure I've gotten a few things wrong,
+
+00:16:18.680 --> 00:16:23.719
+and it's not been the smoothest talk, but it's 10pm, almost.
+
+00:16:23.720 --> 00:16:28.759
+I need to get back home. Yeah, take care, everyone.
+
+00:16:28.760 --> 00:16:32.719
+Thanks again to the organizers. Here's my contact info.
+
+00:16:32.720 --> 00:16:36.199
+And I'll be in touch with the questions.
+
+00:16:36.200 --> 00:16:38.319
+I don't think I'll be able to do the live answers,
+
+00:16:38.320 --> 00:16:41.879
+but that's more or less it. Thanks so much for listening,
+
+00:16:41.880 --> 00:16:44.400
+if you've been listening, and take care.
diff --git a/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt
new file mode 100644
index 00000000..38b57dc8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--answers.vtt
@@ -0,0 +1,464 @@
+WEBVTT
+
+00:00.000 --> 00:07.200
+Okay, so we are live now. So hi, everyone. Sorry, we were doing some last minute verification
+
+00:07.200 --> 00:12.720
+with Blaine. We wanted to share screens, but somehow the Firefox gods are not in our favor
+
+00:12.720 --> 00:15.640
+today. So hi, Blaine. How are you doing?
+
+00:15.640 --> 00:21.480
+I'm doing great, Will. This has been a great conference. I've seen some talks this morning
+
+00:21.480 --> 00:27.100
+that are going to change my life. I just can't wait to start applying some of the packages
+
+00:27.100 --> 00:28.100
+I've learned about.
+
+00:28.100 --> 00:33.240
+That's amazing. And it's only day one. We've got more of this coming today, too.
+
+00:33.240 --> 00:34.240
+Exactly.
+
+00:34.240 --> 00:38.000
+So, Blaine, we haven't had the chance to tell you, but do you have the pad open on
+
+00:38.000 --> 00:39.000
+your end?
+
+00:39.000 --> 00:40.000
+Let's see.
+
+00:40.000 --> 00:45.040
+Oh, yes, because I asked you to close Firefox, so you don't have it. Do you need the URL,
+
+00:45.040 --> 00:46.040
+maybe?
+
+00:46.040 --> 00:48.080
+Yeah, that would be great.
+
+00:48.080 --> 00:52.280
+I will put it into BBB, the chat right on your left.
+
+00:52.280 --> 00:58.200
+Okay. I see it. So if I click on this and open a new window?
+
+00:58.200 --> 01:00.520
+Yes, don't worry about it.
+
+01:00.520 --> 01:05.600
+Okay. So I have some questions. Oh, that's fantastic. This is kind of a silly question,
+
+01:05.600 --> 01:10.560
+but I'm curious. Do you have a favorite color theme?
+
+01:10.560 --> 01:21.120
+So I do. I've been using a color theme that is sort of light green. It's from a set of
+
+01:21.120 --> 01:29.760
+themes that Prot put together and made available this fall on Melpa, and in some of the slides
+
+01:29.760 --> 01:36.880
+you'll see that I have this, like, white background, but I'm currently using a sort of a mint green
+
+01:36.880 --> 01:45.240
+color, which I find actually has great contrast, and I had to install some fonts for the Mac
+
+01:45.240 --> 01:52.360
+to be able to use that theme, but Prot provides detailed instructions, and it was pretty easy
+
+01:52.360 --> 01:54.360
+to do.
+
+01:54.360 --> 02:03.960
+Okay. Let's see. To your knowledge, so the second question is, to your knowledge, are
+
+02:03.960 --> 02:09.000
+recent coming security changes in Chrome going to impact browser extension?
+
+02:09.000 --> 02:16.560
+Oh, that's a great question. I, to be honest, I don't know. I'm not aware of that issue
+
+02:16.560 --> 02:23.400
+because I ran and I installed some extension I probably shouldn't have installed in Chrome
+
+02:23.400 --> 02:30.120
+a couple weeks ago, and I've been getting pop-up ads, and so I switched to Firefox,
+
+02:30.120 --> 02:39.960
+but so far I have used GhostText in a number of browsers. I can vouch that it works in
+
+02:39.960 --> 02:50.120
+Safari, Chrome, obviously Firefox, Brave, and then amongst the Firefox family of browsers
+
+02:50.120 --> 02:56.240
+there's WaterFox and IceCat. It works in those two.
+
+02:56.240 --> 03:02.400
+So if Chrome's security issues become a problem, then there are other browsers for which maybe
+
+03:02.400 --> 03:07.960
+that problem won't be an issue.
+
+03:07.960 --> 03:14.580
+Is this, a third question is, is this browser, is this browser agnostic, or do you have to
+
+03:14.580 --> 03:17.760
+use Chrome?
+
+03:17.760 --> 03:25.460
+That's a good question. So obviously, as you've seen that, or just heard, it works in a number
+
+03:25.460 --> 03:30.480
+of other browsers. There's probably at least ten other browsers in which it will work.
+
+03:30.480 --> 03:35.840
+So there's sort of three families of extensions, one for Safari, one for Firefox, and one for
+
+03:35.840 --> 03:47.580
+Chrome, and often one of those extensions will work in a different browser.
+
+03:47.580 --> 03:53.060
+You mentioned, fourth question is, you mentioned a couple other solutions to allow Emacs editing
+
+03:53.060 --> 04:02.600
+of text areas, pointers. Well, unfortunately, I didn't do my due diligence in researching
+
+04:02.600 --> 04:07.000
+those other solutions. I'm aware that there's something called Emacs Everywhere that's supposed
+
+04:07.000 --> 04:13.840
+to have a similar capability, but I haven't dug into using it, so I can't say anything
+
+04:13.840 --> 04:14.840
+about it.
+
+04:14.840 --> 04:27.040
+I'll have to say that. So because you're setting up a server from an editor, and you have this
+
+04:27.040 --> 04:35.520
+extension in a browser, things don't always mesh. You may have port 4001 occupied by some
+
+04:35.520 --> 04:43.720
+other server from Emacs or another application, and so you have to sort that out. That can
+
+04:43.720 --> 04:49.360
+happen from time to time. I've had trouble with the Emacs server sometimes using that
+
+04:49.360 --> 04:57.800
+port, but I think you can redirect that Emacs server to another port to avoid that issue.
+
+04:57.800 --> 05:02.240
+That would be the greatest difficulty is just getting the two sides talking to each other
+
+05:02.240 --> 05:10.160
+through the web socket, but once that's going, I use it every day, and I'll go for weeks
+
+05:10.160 --> 05:16.560
+without any issue, and then, of course, I'll be changing something about Emacs configuration
+
+05:16.560 --> 05:22.520
+where I'm turning on some new server that fires up when I start Emacs, and then I break
+
+05:22.520 --> 05:28.760
+it there, or something along those lines, but the great hazard of fiddling with your
+
+05:28.760 --> 05:49.520
+Emacs configuration, just a hazard of being an Emacs user. Let's see. Why not save text?
+
+05:49.520 --> 05:56.120
+So I have a fifth question, which is why not save text from Emacs? I would like to hear
+
+05:56.120 --> 06:04.560
+some solution to the issue I ran into. So if I am editing a document in a web browser
+
+06:04.560 --> 06:13.200
+and then via Emacs, and I save that to a document on disk, then I, okay, that's great if I'm
+
+06:13.200 --> 06:19.020
+not going to make any more changes, everything's fine, that works great, but if I then decide
+
+06:19.020 --> 06:27.200
+to make more changes in the browser, and then I try to save those changes, the copy on disk
+
+06:27.200 --> 06:32.280
+is out of sync with the copy in the browser, and I've had the connection break when I do
+
+06:32.280 --> 06:42.080
+that. So I heard that there might be a way of solving that problem. I'm not, but I have
+
+06:42.080 --> 06:48.040
+not implemented the solution. I forget what the suggestion was. Maybe somebody in the
+
+06:48.040 --> 06:51.840
+audience has an idea.
+
+06:51.840 --> 06:56.760
+Speaking of the audience, we have opened up the chat now, so if you want to join the current
+
+06:56.760 --> 07:02.200
+BBB Discord room in which we are and ask questions directly to Blaine, feel free to do so, otherwise
+
+07:02.200 --> 07:05.840
+we're still taking questions on the pad as long as we have them, although right now I
+
+07:05.840 --> 07:10.120
+think we have answered all of them. Am I wrong, Blaine, or did we answer all of them already?
+
+07:10.120 --> 07:13.200
+You're correct, we've answered all of them.
+
+07:13.200 --> 07:18.120
+So we're going to still discuss for about 2-3 minutes. If people want to add last questions
+
+07:18.120 --> 07:23.360
+to the pad, feel free to do so. If you want to join us in BBB, the link is at the top
+
+07:23.360 --> 07:28.140
+of the talk of Blaine, Euclid Maxco 2022. You know everything now. We are at the end
+
+07:28.140 --> 07:33.640
+of the day, and you can tell it's the end of the day because my accent is getting significantly
+
+07:33.640 --> 07:40.840
+Frencher as a result. It's not getting any better since last year, I think. I wish I
+
+07:40.840 --> 07:44.760
+could contribute, Blaine, more to your talk, but I feel like I'm way out of my league.
+
+07:44.760 --> 07:50.280
+I'm the guy who plays with Org on the side, and I tune into your talks every year, and
+
+07:50.280 --> 07:54.840
+I see molecules, and I see stuff that I can barely comprehend, and I feel very humbled
+
+07:54.840 --> 07:56.840
+as a result.
+
+07:56.840 --> 08:03.320
+Well, I'm just trying to make my talks kind of unique.
+
+08:03.320 --> 08:07.960
+You are succeeding amazingly well. It reminds me, have you been talking with John Kinchin
+
+08:07.960 --> 08:15.680
+or something? Because you seem to be evolving in seminal fields, in a way, with Emacs.
+
+08:15.680 --> 08:26.160
+I have been. I'm a fan of his. I have installed CyMax and his configuration for Emacs, but
+
+08:26.160 --> 08:33.960
+I haven't. I've just started poking around with it, and I've used his configuration.
+
+08:33.960 --> 08:43.280
+I've got it up and running, and I've used GhostText with it, and I was trying to tap
+
+08:43.280 --> 08:49.880
+into his OrgRef package, which is super powerful for managing bibliographies.
+
+08:49.880 --> 08:50.880
+Yeah.
+
+08:50.880 --> 08:53.880
+Yeah, he's very inspiring.
+
+08:53.880 --> 08:59.880
+I'm glad to hear you're very much inspired. Go on, please.
+
+08:59.880 --> 09:05.280
+He's very amazing. He's very accomplished in Emacs and a very accomplished teacher,
+
+09:05.280 --> 09:11.160
+and he has now, as you probably know, a series of videos on YouTube that he's been putting
+
+09:11.160 --> 09:18.920
+together about programming. So he's teaching students at Carnegie Mellon University how
+
+09:18.920 --> 09:26.200
+to program in Python via Emacs, and he has been sharing these videos on YouTube, and
+
+09:26.200 --> 09:30.720
+they're like just 20-minute videos, kind of short snippets, but you can learn a lot from
+
+09:30.720 --> 09:33.480
+them. It's really fantastic.
+
+09:33.480 --> 09:39.240
+It's an amazing journey, isn't it? You start from a field that has nothing to do whatsoever
+
+09:39.240 --> 09:43.800
+with Emacs, and yet you find yourself so attracted to the idea of programming and making your
+
+09:43.800 --> 09:49.620
+workflow easier that you end up actually transitioning into a little bit of a programming role or
+
+09:49.620 --> 09:54.900
+teaching programming role. I mean, I was studying literature. I was all well and good in my
+
+09:54.900 --> 10:00.040
+English faculty, and then I decided to say, oh yeah, let's try Emacs, and 10 years later
+
+10:00.040 --> 10:06.160
+I find myself spending more time working on Emacs than working on my literature papers.
+
+10:06.160 --> 10:12.920
+My history is that I developed a dozen years ago, started teaching students how to do molecular
+
+10:12.920 --> 10:17.960
+graphics, and then I got into Python programming to develop tools to make it easier for them
+
+10:17.960 --> 10:22.680
+to use molecular graphics, and then evolved into making these snippets available for a
+
+10:22.680 --> 10:29.680
+wide range of text editors that meant learning about – so I prepared these snippets for
+
+10:29.680 --> 10:35.440
+about 20 different text editors, leading ones, and of course I saved for the end Emacs. First
+
+10:35.440 --> 10:42.800
+I went through Vim and the month of hell of rewiring your brain to do the Vim key bindings
+
+10:42.800 --> 10:51.920
+and then on to Emacs, which I call the ultimate text editor, because there is no other text
+
+10:51.920 --> 10:56.040
+editor beyond Emacs. It's the end of the line.
+
+10:56.040 --> 11:01.360
+I absolve you for your herrings with Vim as a result of the last comment you just made.
+
+11:01.360 --> 11:05.680
+Actually, no, I have new write of that solution. I can agree to your solution. You'll have
+
+11:05.680 --> 11:09.200
+to ask RMS tomorrow.
+
+11:09.200 --> 11:16.800
+Well, I spent a year in evil mode, but I switched about half a year ago to just Emacs key bindings
+
+11:16.800 --> 11:24.840
+and bye-bye Vim. I use Vim when I log into remote servers and have to edit something
+
+11:24.840 --> 11:30.720
+really quick, but I've probably forgotten most of the key bindings. There's only about
+
+11:30.720 --> 11:36.560
+a dozen you really need to know to get the essential work done. But yeah, it's been
+
+11:36.560 --> 11:37.560
+quite a journey.
+
+11:37.560 --> 11:45.160
+Sorry for the interruption. We do have one question, a very simple question about what
+
+11:45.160 --> 11:51.200
+was the key binding for Linux Firefox. Do you have it on top of your mind?
+
+11:51.200 --> 11:52.200
+So Linux Firefox.
+
+11:52.200 --> 11:57.240
+I'm not sure what they're referring to as well, which is why I threw you this purple,
+
+11:57.240 --> 11:59.240
+hoping that it would make sense for you.
+
+11:59.240 --> 12:00.240
+It's Control-Shift-H.
+
+12:00.240 --> 12:14.120
+I hope this answers your questions. So I think Control-Shift-H, yes. Well Blaine, I see some
+
+12:14.120 --> 12:18.120
+people have joined on BBB, but no one with a microphone still. I will tide you at the
+
+12:18.120 --> 12:21.560
+end. We are reaching the end of the day. We are reaching closing remarks and I will be
+
+12:21.560 --> 12:26.720
+making a plea for more people to join with a microphone. Last year we had pretty much
+
+12:26.720 --> 12:30.440
+the same setting. We were opening the room afterwards and people were showing up with
+
+12:30.440 --> 12:33.760
+the microphones and we had lovely discussions. So in this year, it feels like everyone's
+
+12:33.760 --> 12:38.940
+a little shy, shouldn't you know? That's the whole point is for you to talk and for
+
+12:38.940 --> 12:43.160
+us all to listen. Well Blaine, that was very insightful. Thank you so much for both the
+
+12:43.160 --> 12:44.960
+presentation and the questions. Go on.
+
+12:44.960 --> 12:51.200
+We have a question in the panel on the left and blue button. So how long have I been using
+
+12:51.200 --> 13:03.520
+Emacs? I made a commitment to use it full-time about 18 months ago, maybe 20 months ago.
+
+13:03.520 --> 13:09.240
+So I'm a newbie. I'm still in the steep part of the learning curve.
+
+13:09.240 --> 13:13.640
+You just have to provide context for the people. Blaine presented something at the last year's
+
+13:13.640 --> 13:19.440
+EmacsConf and it was as impressive as this year's presentation. And afterwards he told
+
+13:19.440 --> 13:23.760
+us, oh yeah, I've been using Emacs for six months or so. And that's where everyone's
+
+13:23.760 --> 13:28.920
+jewels dropped to the floor because some people have been using Emacs for 10 years and we
+
+13:28.920 --> 13:31.960
+couldn't even imagine doing some of the stuff you're doing with it.
+
+13:31.960 --> 13:33.960
+Thank you.
+
+13:33.960 --> 13:40.880
+Do we have any other questions? I think that's pretty much it. I'm not seeing anything appear
+
+13:40.880 --> 13:48.520
+on the other screen. I think we're pretty much good. So Blaine, I'm not going to keep
+
+13:48.520 --> 13:52.880
+you any longer. We are probably going to bring this Q&A to a close. Thank you so much for
+
+13:52.880 --> 13:59.880
+all the answers. What are we going to do for the stream? We still have a talk going on
+
+13:59.880 --> 14:05.960
+on the dev channel currently. And then we'll be going to the closing remarks for the day
+
+14:05.960 --> 14:10.680
+at about 55 of the current hour. So we are going on a break for 20 to 25 minutes. So
+
+14:10.680 --> 14:14.040
+Blaine, sorry for keeping you off stage as I'm making the announcement, but it's the
+
+14:14.040 --> 14:16.520
+best way for people to see my face as I do it.
+
+14:16.520 --> 14:20.800
+Thank you very much, Leo. I appreciate it.
+
+14:20.800 --> 14:26.720
+And thank you so much for all your time and all your answers. I will be closing BBB now
+
+14:26.720 --> 14:31.600
+and we will put some music on and some announcements and see you at the top of the hour for the
+
+14:31.600 --> 14:57.720
+others or 55 rather than top of the hour. All right. Bye bye everyone. Bye bye Blaine.
+
diff --git a/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt
new file mode 100644
index 00000000..a00d9c58
--- /dev/null
+++ b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main--chapters.vtt
@@ -0,0 +1,41 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:51.519
+Introduction
+
+00:00:51.520 --> 00:01:26.919
+GhostText and Atomic Chrome
+
+00:01:26.920 --> 00:03:13.119
+GhostText
+
+00:03:13.120 --> 00:05:57.039
+Live coding demo
+
+00:05:57.040 --> 00:07:57.159
+Editing code cells
+
+00:07:57.160 --> 00:11:11.039
+Python
+
+00:11:11.040 --> 00:11:59.599
+Julia
+
+00:11:59.600 --> 00:12:44.319
+How does GhostText work?
+
+00:12:44.320 --> 00:13:32.999
+Supported web browsers
+
+00:13:33.000 --> 00:14:21.559
+Atomic Chrome configuration
+
+00:14:21.560 --> 00:15:21.479
+Precautions
+
+00:15:21.480 --> 00:15:48.559
+Conclusions
+
+00:15:48.560 --> 00:17:07.760
+Thanks
diff --git a/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt
new file mode 100644
index 00000000..e51ef23b
--- /dev/null
+++ b/2022/captions/emacsconf-2022-jupyter--edit-live-jupyter-notebook-cells-with-emacs--blaine-mooers--main.vtt
@@ -0,0 +1,792 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:03.839
+Hi, my name is Blaine Mooers.
+
+00:00:03.840 --> 00:00:05.399
+I'm an associate professor of biochemistry
+
+00:00:05.400 --> 00:00:08.199
+at the University of Oklahoma Health Sciences Center
+
+00:00:08.200 --> 00:00:09.759
+in Oklahoma City.
+
+00:00:09.760 --> 00:00:11.999
+I'm going to talk about the use of Emacs
+
+00:00:12.000 --> 00:00:16.239
+to edit live Jupyter notebook cells
+
+00:00:16.240 --> 00:00:20.519
+as well as text areas on web pages.
+
+00:00:20.520 --> 00:00:22.519
+So like a lot of technical workers,
+
+00:00:22.520 --> 00:00:24.879
+I find myself having to write prose
+
+00:00:24.880 --> 00:00:28.679
+in text areas on web pages,
+
+00:00:28.680 --> 00:00:31.719
+as well as working with code
+
+00:00:31.720 --> 00:00:36.999
+in Jupyter notebooks and Colab notebooks,
+
+00:00:37.000 --> 00:00:39.319
+and often I have wished for
+
+00:00:39.320 --> 00:00:43.479
+the full power of Emacs while doing so.
+
+NOTE GhostText and Atomic Chrome
+
+00:00:43.480 --> 00:00:45.319
+Well, now that is possible.
+
+00:00:45.320 --> 00:00:46.799
+Actually, there are several solutions
+
+00:00:46.800 --> 00:00:49.039
+that have been available for some time.
+
+00:00:49.040 --> 00:00:50.399
+I'm going to talk about one solution
+
+00:00:50.400 --> 00:00:55.319
+that I'm familiar with and has worked out for me.
+
+00:00:55.320 --> 00:00:58.119
+So this requires the use of two software packages,
+
+00:00:58.120 --> 00:01:01.599
+GhostText and Atomic Chrome.
+
+00:01:01.600 --> 00:01:04.239
+GhostText is an extension for the web browser,
+
+00:01:04.240 --> 00:01:07.279
+whereas Atomic Chrome is a package for Emacs.
+
+00:01:07.280 --> 00:01:10.879
+You have to have both of these.
+
+00:01:10.880 --> 00:01:13.399
+So Chrome is for the editor side
+
+00:01:13.400 --> 00:01:18.919
+and GhostText handles the browser side.
+
+NOTE GhostText
+
+00:01:18.920 --> 00:01:22.479
+The GhostText extension is available
+
+00:01:22.480 --> 00:01:26.799
+in the Chrome web store.
+
+00:01:26.800 --> 00:01:29.519
+And GhostText is represented by this icon,
+
+00:01:29.520 --> 00:01:31.519
+which has a ghost in front of the capital letter T.
+
+00:01:31.520 --> 00:01:36.399
+It is being developed by Federico Brigante.
+
+00:01:36.400 --> 00:01:41.239
+He is a very prolific JavaScript developer.
+
+00:01:41.240 --> 00:01:44.279
+He has a web page committed to GhostText,
+
+00:01:44.280 --> 00:01:47.199
+as well as a GitHub site.
+
+00:01:47.200 --> 00:01:50.159
+So here's an example of GhostText.
+
+00:01:50.160 --> 00:01:54.839
+This is a snapshot from a session
+
+00:01:54.840 --> 00:02:01.279
+that I had while editing LaTeX on the Overleaf website.
+
+00:02:01.280 --> 00:02:03.759
+Overleaf is this web service
+
+00:02:03.760 --> 00:02:09.719
+that empowers the editing of LaTeX documents on the web.
+
+00:02:09.720 --> 00:02:14.039
+So I have clicked on this GhostText icon in the toolbar.
+
+00:02:14.040 --> 00:02:17.039
+I had already opened up Emacs,
+
+00:02:17.040 --> 00:02:19.879
+and I had the Atomic Chrome server running.
+
+00:02:19.880 --> 00:02:21.799
+So a connection was established,
+
+00:02:21.800 --> 00:02:28.599
+as indicated by this blue border around this text area.
+
+00:02:28.600 --> 00:02:30.519
+And as soon as that appeared,
+
+00:02:30.520 --> 00:02:35.319
+the text appeared in a buffer inside of Emacs.
+
+00:02:35.320 --> 00:02:40.159
+So I have overlaid the area where normally the compiled PDF
+
+00:02:40.160 --> 00:02:43.919
+would appear in an Overleaf session.
+
+00:02:43.920 --> 00:02:47.679
+So I'm using a configuration for LaTeX that I developed,
+
+00:02:47.680 --> 00:02:52.159
+which is available through the MooersLab GitHub site.
+
+00:02:52.160 --> 00:02:55.919
+I also gave a talk about how I use LaTeX in Emacs
+
+00:02:55.920 --> 00:02:58.839
+at the Berlin Emacs meetup in August.
+
+00:02:58.840 --> 00:03:00.039
+This talk was not recorded,
+
+00:03:00.040 --> 00:03:05.119
+but the slides are available on this website.
+
+NOTE Live coding demo
+
+00:03:05.120 --> 00:03:09.519
+So I would like to now switch to a little live coding
+
+00:03:09.520 --> 00:03:12.359
+to make this a little more interesting.
+
+00:03:12.360 --> 00:03:22.439
+So I start my day at this other website called 750Words.
+
+00:03:22.440 --> 00:03:25.279
+This site just takes plain text,
+
+00:03:25.280 --> 00:03:28.559
+but I like to write in LaTeX.
+
+00:03:28.560 --> 00:03:31.519
+So GhostText came to my rescue
+
+00:03:31.520 --> 00:03:34.479
+when I started using this everyday last May.
+
+00:03:34.480 --> 00:03:37.239
+So I clicked on the GhostText icon.
+
+00:03:37.240 --> 00:03:39.759
+It highlighted that area in blue.
+
+00:03:39.760 --> 00:03:41.839
+There's some boilerplate
+
+00:03:41.840 --> 00:03:45.919
+that I like to start my day with.
+
+00:03:45.920 --> 00:03:50.599
+I like to get a list of my deadlines
+
+00:03:50.600 --> 00:03:54.239
+that are coming up, as shown here,
+
+00:03:54.240 --> 00:03:55.839
+for the next several months.
+
+00:03:55.840 --> 00:03:59.399
+And then I have landed at this tab stop.
+
+00:03:59.400 --> 00:04:04.239
+And so I had issued a tab trigger
+
+00:04:04.240 --> 00:04:09.519
+which inserted this almost 50 lines of text
+
+00:04:09.520 --> 00:04:13.639
+from a snippet through Yasnippet.
+
+00:04:13.640 --> 00:04:17.479
+And then I'll change this text to whatever.
+
+00:04:17.480 --> 00:04:29.279
+And then I can hit TAB to move to the next site.
+
+00:04:29.280 --> 00:04:38.439
+I was dead tired last night, so I fell asleep at my desk,
+
+00:04:38.440 --> 00:04:42.439
+and whatever. So I just keep on going
+
+00:04:42.440 --> 00:04:47.319
+and then hit TAB again and enter my "To Be Done" items.
+
+00:04:47.320 --> 00:04:50.239
+And then what I love about Emacs is that
+
+00:04:50.240 --> 00:04:56.119
+you can hit C-c C-j to insert a new item and so forth,
+
+00:04:56.120 --> 00:05:03.239
+so you can extend the list.
+
+00:05:03.240 --> 00:05:05.079
+Initially, I just have 10 items.
+
+00:05:05.080 --> 00:05:08.839
+I'm going to have more. And on I go,
+
+00:05:08.840 --> 00:05:12.359
+using the full power of LaTeX.
+
+00:05:12.360 --> 00:05:16.119
+So I have configured Atomic Chrome
+
+00:05:16.120 --> 00:05:19.999
+so it will recognize this website as a –
+
+00:05:20.000 --> 00:05:21.399
+it will open up this website –
+
+00:05:21.400 --> 00:05:26.159
+the connection to this website with this buffer
+
+00:05:26.160 --> 00:05:36.559
+in the LaTeX major mode. To turn this off,
+
+00:05:36.560 --> 00:05:40.319
+we can close – simply just close the buffer
+
+00:05:40.320 --> 00:05:42.959
+and that will shut things down.
+
+00:05:42.960 --> 00:05:46.399
+On the browser side, you can right-click on the icon
+
+00:05:46.400 --> 00:05:49.039
+and disconnect GhostText on this page.
+
+NOTE Editing code cells
+
+00:05:49.040 --> 00:05:53.639
+Okay, let's go to a different situation.
+
+00:05:53.640 --> 00:05:57.359
+This is not a feature that's advertised by the developer,
+
+00:05:57.360 --> 00:06:00.119
+but I discovered that you can edit code cells
+
+00:06:00.120 --> 00:06:02.799
+(or any kind of cell for that matter)
+
+00:06:02.800 --> 00:06:04.439
+in a Jupyter Notebook.
+
+00:06:04.440 --> 00:06:05.719
+However, we have a challenge here.
+
+00:06:05.720 --> 00:06:09.319
+We have three text areas open – three code cells.
+
+00:06:09.320 --> 00:06:14.759
+So if we click on the GhostText icon,
+
+00:06:14.760 --> 00:06:17.479
+these three areas will show up in green
+
+00:06:17.480 --> 00:06:19.119
+and we'll be prompted to select the one
+
+00:06:19.120 --> 00:06:20.279
+that we want to activate.
+
+00:06:20.280 --> 00:06:22.359
+We want to activate the one with text.
+
+00:06:22.360 --> 00:06:31.399
+So then we can go in here and make edits, of course,
+
+00:06:31.400 --> 00:06:33.359
+and you can do this in Emacs
+
+00:06:33.360 --> 00:06:35.639
+or we can do it in the browser. It doesn't matter.
+
+00:06:35.640 --> 00:06:38.359
+You saw me editing in Emacs,
+
+00:06:38.360 --> 00:06:40.359
+but we can also make the edits
+
+00:06:40.360 --> 00:06:44.879
+in the text area of the browser
+
+00:06:44.880 --> 00:06:47.519
+and they will show up immediately in Emacs.
+
+00:06:47.520 --> 00:06:54.439
+So we could change the case of that M and that's going to –
+
+00:06:54.440 --> 00:06:59.279
+shows up over here. Okay, we can run this code.
+
+00:06:59.280 --> 00:07:03.439
+So this is R, one of the three major
+
+00:07:03.440 --> 00:07:05.159
+programming languages for data science.
+
+00:07:05.160 --> 00:07:07.319
+At least, Jupyter is supposed to be
+
+00:07:07.320 --> 00:07:13.479
+a combination of Julia, Python, and R.
+
+00:07:13.480 --> 00:07:17.559
+So we're running mcmc to get the posterior distribution
+
+00:07:17.560 --> 00:07:21.119
+and we're going to plot those out with this pyplots package,
+
+00:07:21.120 --> 00:07:24.079
+and we have these beautiful plots showing the median
+
+00:07:24.080 --> 00:07:27.039
+of the posterior distribution for four variables in –
+
+00:07:27.040 --> 00:07:31.559
+four parameters in the CARS data set,
+
+00:07:31.560 --> 00:07:38.039
+which is available – built into the R package.
+
+00:07:38.040 --> 00:07:45.559
+And then these shaded areas are the 80% interval.
+
+00:07:45.560 --> 00:07:49.159
+Okay. Oops.
+
+NOTE Python
+
+00:07:49.160 --> 00:08:07.639
+So now for the Python side,
+
+00:08:07.640 --> 00:08:13.359
+here's an example in which I'm going to actually
+
+00:08:13.360 --> 00:08:18.679
+insert a snippet of that cell
+
+00:08:18.680 --> 00:08:27.279
+and then I'm going to enter nvlig for nglview ligand,
+
+00:08:27.280 --> 00:08:43.319
+and just hit enter. Oops. Hit TAB, excuse me,
+
+00:08:43.320 --> 00:08:47.999
+and we don't need this line of code, so delete that.
+
+00:08:48.000 --> 00:08:52.199
+Yep, we want to load up this pdb file
+
+00:08:52.200 --> 00:08:54.279
+that's in this subdirectory.
+
+00:08:54.280 --> 00:08:56.919
+So the pdb file is a plain text file
+
+00:08:56.920 --> 00:08:58.839
+that contains atomic coordinates
+
+00:08:58.840 --> 00:09:00.159
+of protein crystal structure.
+
+00:09:00.160 --> 00:09:02.999
+This protein happens to be important in cancer
+
+00:09:03.000 --> 00:09:09.079
+and we have – we screened by docking 55,000 compounds
+
+00:09:09.080 --> 00:09:10.679
+on a supercomputer
+
+00:09:10.680 --> 00:09:12.743
+and then we did MD [molecular dynamics] simulations
+
+00:09:12.744 --> 00:09:14.159
+of the top 10 [actually 20] leads.
+
+00:09:14.160 --> 00:09:18.319
+Twelve of them had the compound remain bound
+
+00:09:18.320 --> 00:09:19.679
+during the period of the simulation,
+
+00:09:19.680 --> 00:09:22.559
+so those have some potential for –
+
+00:09:22.560 --> 00:09:25.159
+and require experimental validation.
+
+00:09:25.160 --> 00:09:28.639
+So we'll run this chunk of code,
+
+00:09:28.640 --> 00:09:30.839
+and this will give a view of the molecule
+
+00:09:30.840 --> 00:09:36.479
+that we can interact with by using the mouse.
+
+00:09:36.480 --> 00:09:39.879
+But I want to share this with my colleague.
+
+00:09:39.880 --> 00:09:42.919
+My colleague is not set up to use Jupyter,
+
+00:09:42.920 --> 00:09:46.959
+but instead we can write this out to a HTML file,
+
+00:09:46.960 --> 00:09:48.319
+which I have loaded up already.
+
+00:09:48.320 --> 00:09:55.319
+And so we can actually – perhaps.
+
+00:09:55.320 --> 00:10:01.679
+We click on these two arrows pointing at each other,
+
+00:10:01.680 --> 00:10:05.159
+and we can get a full screen view of this molecule
+
+00:10:05.160 --> 00:10:10.439
+and he can identify each atom in this structure.
+
+00:10:10.440 --> 00:10:12.719
+Over a thousand atoms present.
+
+00:10:12.720 --> 00:10:14.959
+We're just hovering over a specific atom.
+
+00:10:14.960 --> 00:10:27.759
+So shown in gray is the ligand that is bound. Okay.
+
+00:10:27.760 --> 00:10:32.079
+So we still have this box selected
+
+00:10:32.080 --> 00:10:36.559
+and we still have these two different –
+
+00:10:36.560 --> 00:10:40.519
+so for each of the – our selected text areas
+
+00:10:40.520 --> 00:11:03.839
+we have a separate – we have a separate buffer open. Okay.
+
+NOTE Julia
+
+00:11:03.840 --> 00:11:06.839
+To wrap things up here, here's an example of using –
+
+00:11:06.840 --> 00:11:08.919
+with evolving Julia code.
+
+00:11:08.920 --> 00:11:12.919
+And so this Julia code in this cell is in a Emacs buffer.
+
+00:11:12.920 --> 00:11:19.279
+So you've got an idea now, I think.
+
+00:11:19.280 --> 00:11:23.759
+So in terms of plain text areas like in Overleaf
+
+00:11:23.760 --> 00:11:27.519
+and then these cells in Jupyter Notebooks,
+
+00:11:27.520 --> 00:11:30.959
+these are other areas that can be edited
+
+00:11:30.960 --> 00:11:37.919
+like in the text areas within Outlook Webmail and Gmail.
+
+00:11:37.920 --> 00:11:42.639
+Instead of having to point with the mouse
+
+00:11:42.640 --> 00:11:43.519
+or click with the mouse,
+
+00:11:43.520 --> 00:11:48.079
+one can also use keybindings or keyboard shortcuts.
+
+00:11:48.080 --> 00:11:51.599
+So here are the ones for three major operating systems.
+
+NOTE How does GhostText work?
+
+00:11:51.600 --> 00:11:54.639
+So how does GhostText work?
+
+00:11:54.640 --> 00:11:57.199
+Main thing is you have to open up Emacs
+
+00:11:57.200 --> 00:11:59.679
+and get this Atomic Chrome server running.
+
+00:11:59.680 --> 00:12:03.119
+And then with it up and going,
+
+00:12:03.120 --> 00:12:06.679
+GhostText will be able to – has to be activated
+
+00:12:06.680 --> 00:12:09.639
+and it will find the GhostText server
+
+00:12:09.640 --> 00:12:15.079
+through the localhost port 4001.
+
+00:12:15.080 --> 00:12:19.039
+Put that into the web browser.
+
+00:12:19.040 --> 00:12:21.639
+If you navigate to that port,
+
+00:12:21.640 --> 00:12:23.719
+you'll get output that looks like this
+
+00:12:23.720 --> 00:12:25.639
+if everything's working well.
+
+00:12:25.640 --> 00:12:27.919
+Otherwise, you'll get a error message
+
+00:12:27.920 --> 00:12:30.519
+and it should have a port socket –
+
+00:12:30.520 --> 00:12:34.319
+a web socket port number.
+
+00:12:34.320 --> 00:12:36.319
+It will not be the same every time.
+
+NOTE Supported web browsers
+
+00:12:36.320 --> 00:12:42.319
+So these are the supported web browsers
+
+00:12:42.320 --> 00:12:45.359
+in addition to Chrome. These are supported
+
+00:12:45.360 --> 00:12:47.279
+and likewise anything in these –
+
+00:12:47.280 --> 00:12:49.879
+any browser related to these
+
+00:12:49.880 --> 00:12:53.079
+can probably use these extensions.
+
+00:12:53.080 --> 00:12:56.359
+For example, the Brave browser will use Chrome extension
+
+00:12:56.360 --> 00:13:01.679
+and the Firefox browser extension works with WaterFox.
+
+00:13:01.680 --> 00:13:05.239
+These are the supported editors.
+
+00:13:05.240 --> 00:13:10.199
+Each editor has its own extension
+
+00:13:10.200 --> 00:13:15.719
+and this GhostText was initially developed for SublimeText.
+
+00:13:15.720 --> 00:13:17.919
+So if you have SublimeText,
+
+00:13:17.920 --> 00:13:21.959
+then you can use its smooth operation as positive control
+
+00:13:21.960 --> 00:13:24.999
+when things go wrong with Emacs.
+
+NOTE Atomic Chrome configuration
+
+00:13:25.000 --> 00:13:29.479
+This is Atomic. This is a GitHub site for Atomic Chrome.
+
+00:13:29.480 --> 00:13:33.159
+Atomic Chrome is available for installation through Melpa.
+
+00:13:33.160 --> 00:13:40.319
+This is my configuration for Atomic Chrome.
+
+00:13:40.320 --> 00:13:45.519
+So I have this setup so the server starts whenever I log in,
+
+00:13:45.520 --> 00:13:50.319
+and I have it set up so that default major mode is Python
+
+00:13:50.320 --> 00:13:55.559
+to deal with the Jupyter notebooks and Colab notebooks.
+
+00:13:55.560 --> 00:13:57.719
+And then I have major modes
+
+00:13:57.720 --> 00:13:59.839
+for these other websites defined below.
+
+00:13:59.840 --> 00:14:06.079
+This is a testing site so the developer has made
+
+00:14:06.080 --> 00:14:08.119
+to help with troubleshooting.
+
+00:14:08.120 --> 00:14:11.159
+He also has a protocol on his website
+
+00:14:11.160 --> 00:14:13.559
+to follow during troubleshooting.
+
+NOTE Precautions
+
+00:14:13.560 --> 00:14:16.639
+So here are some precautions.
+
+00:14:16.640 --> 00:14:19.079
+You'll find that GhostText doesn't work with Pluto.
+
+00:14:19.080 --> 00:14:21.239
+Pluto is a new computational notebook
+
+00:14:21.240 --> 00:14:23.479
+for working with Julia.
+
+00:14:23.480 --> 00:14:27.039
+My suggestion would be just to run IJulia in Jupyter.
+
+00:14:27.040 --> 00:14:31.999
+It also doesn't work, of course, with RStudio.
+
+00:14:32.000 --> 00:14:35.199
+Even though RStudio sort of resembles
+
+00:14:35.200 --> 00:14:38.999
+a web page, web browser, it's not.
+
+00:14:39.000 --> 00:14:41.359
+Of course, you can always run R,
+
+00:14:41.360 --> 00:14:48.239
+as you've just seen, using the IPy kernel.
+
+00:14:48.240 --> 00:14:52.239
+I will also caution you that if you use the Emacs server,
+
+00:14:52.240 --> 00:14:53.519
+you may run into issues
+
+00:14:53.520 --> 00:14:57.999
+with the server competing with the port 4001.
+
+00:14:58.000 --> 00:15:01.919
+So instead, you should probably configure the Emacs server
+
+00:15:01.920 --> 00:15:04.999
+to use a specific port.
+
+00:15:05.000 --> 00:15:07.639
+So far – although I haven't done that myself –
+
+00:15:07.640 --> 00:15:10.999
+so far, I haven't found any conflicts
+
+00:15:11.000 --> 00:15:13.479
+with the Org Roam user interface.
+
+NOTE Conclusions
+
+00:15:13.480 --> 00:15:20.919
+So my conclusions are: GhostText allows you to edit prose
+
+00:15:20.920 --> 00:15:24.439
+with your favorite major mode
+
+00:15:24.440 --> 00:15:28.119
+in the text areas of web pages
+
+00:15:28.120 --> 00:15:31.079
+and in the cells of Jupyter notebooks.
+
+00:15:31.080 --> 00:15:34.359
+This allows you to tap into snippets
+
+00:15:34.360 --> 00:15:37.519
+and thereby save time as you have – probably have –
+
+00:15:37.520 --> 00:15:39.719
+hopefully got an idea of.
+
+NOTE Thanks
+
+00:15:39.720 --> 00:15:44.039
+I'd like to thank my friends and mentors
+
+00:15:44.040 --> 00:15:46.599
+who've helped me out during my second year
+
+00:15:46.600 --> 00:15:49.359
+in my Emacs learning spiral.
+
+00:15:49.360 --> 00:15:55.839
+These include my local colleagues.
+
+00:15:55.840 --> 00:15:58.679
+We meet once a month in the Oklahoma Data Science Workshop.
+
+00:15:58.680 --> 00:16:01.719
+Last July, I gave a presentation about GhostText.
+
+00:16:01.720 --> 00:16:08.359
+And then also my friends at Berlin and Austin Emacs meetups
+
+00:16:08.360 --> 00:16:12.959
+and in the UK research software engineer
+
+00:16:12.960 --> 00:16:17.599
+Emacs research Slack channel.
+
+00:16:17.600 --> 00:16:18.919
+So I don't attend these every month,
+
+00:16:18.920 --> 00:16:21.439
+but I try to make the meetings as often as I can.
+
+00:16:21.440 --> 00:16:25.399
+Then I'm supported by the following grants,
+
+00:16:25.400 --> 00:16:28.359
+which allow me to spend
+
+00:16:28.360 --> 00:16:30.679
+at least some time each day in Emacs.
+
+00:16:30.680 --> 00:16:34.960
+I'll be happy to take any questions.
diff --git a/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt b/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt
new file mode 100644
index 00000000..836e8d54
--- /dev/null
+++ b/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main--chapters.vtt
@@ -0,0 +1,43 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:39.320
+Introduction
+
+00:00:39.320 --> 00:01:48.520
+Justfiles
+
+00:01:48.520 --> 00:02:27.680
+Executing recipes
+
+00:02:27.680 --> 00:02:56.440
+Other features
+
+00:02:56.440 --> 00:04:19.280
+Comparison with Makefiles
+
+00:04:19.280 --> 00:04:52.400
+justl.el
+
+00:04:52.400 --> 00:06:17.280
+Executing recipes in Emacs
+
+00:06:17.280 --> 00:06:36.600
+Options
+
+00:06:36.600 --> 00:06:57.320
+Eshell
+
+00:06:57.320 --> 00:07:15.520
+Going to the recipe line
+
+00:07:15.520 --> 00:07:39.560
+Re-executing recipes
+
+00:07:39.560 --> 00:08:56.600
+Example
+
+00:08:56.600 --> 00:09:34.680
+justl-exec-recipe-in-dir
+
+00:09:34.680 --> 00:10:02.040
+End
diff --git a/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt b/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt
new file mode 100644
index 00000000..cd239aa8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-justl--justl-driving-recipes-within-emacs--sibi-prabakaran--main.vtt
@@ -0,0 +1,826 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:04.240
+Hi everyone, I am Sibi Prabakaran
+
+00:00:04.240 --> 00:00:09.560
+and welcome to my session on Justl Emacs Mode.
+
+00:00:09.560 --> 00:00:11.640
+A bit about me, I have been working
+
+00:00:11.640 --> 00:00:12.880
+as a Haskell Engineer
+
+00:00:12.880 --> 00:00:15.600
+at FPComplete for the last 4 years.
+
+00:00:15.600 --> 00:00:17.400
+I am based out of India.
+
+00:00:17.400 --> 00:00:20.680
+I occasionally blog at my website psibi.in
+
+00:00:20.680 --> 00:00:23.560
+where you can find more information about me.
+
+00:00:23.560 --> 00:00:25.000
+I have been using Emacs
+
+00:00:25.000 --> 00:00:26.920
+for more than a decade now.
+
+00:00:26.920 --> 00:00:28.160
+I help in the maintenance
+
+00:00:28.160 --> 00:00:31.080
+of the Terraform client for LSP mode.
+
+00:00:31.080 --> 00:00:33.960
+I have also authored dhall-mode and rego-mode
+
+00:00:33.960 --> 00:00:35.000
+which are the major modes
+
+00:00:35.000 --> 00:00:39.320
+for the respective languages.
+
+00:00:39.320 --> 00:00:40.680
+Before jumping into the demo
+
+00:00:40.680 --> 00:00:42.040
+of the Emacs package,
+
+00:00:42.040 --> 00:00:44.160
+I would like to give a brief introduction
+
+00:00:44.160 --> 00:00:46.280
+about justfiles and what it is.
+
+00:00:46.280 --> 00:00:49.000
+I will also try to compare it with Makefiles
+
+00:00:49.000 --> 00:00:53.640
+as it takes a lot of inspiration from it.
+
+00:00:53.640 --> 00:00:55.640
+What you see currently in the buffer
+
+00:00:55.640 --> 00:00:57.320
+is a sample justfile.
+
+00:00:57.320 --> 00:00:59.480
+If you have previously used Makefiles,
+
+00:00:59.480 --> 00:01:00.480
+you would be able to see
+
+00:01:00.480 --> 00:01:02.280
+that there is quite a bit of similarity
+
+00:01:02.280 --> 00:01:03.560
+between them.
+
+00:01:03.560 --> 00:01:05.080
+Anything that starts with hash
+
+00:01:05.080 --> 00:01:07.120
+is a documentation comment.
+
+00:01:07.120 --> 00:01:09.160
+You can see that I have the first recipe
+
+00:01:09.160 --> 00:01:10.920
+which is named as default.
+
+00:01:10.920 --> 00:01:12.520
+So if you run the just executable
+
+00:01:12.520 --> 00:01:14.120
+without any arguments,
+
+00:01:14.120 --> 00:01:15.400
+by default it is going to run
+
+00:01:15.400 --> 00:01:17.200
+the first recipe.
+
+00:01:17.200 --> 00:01:18.440
+This recipe's definition
+
+00:01:18.440 --> 00:01:20.080
+calls the just command
+
+00:01:20.080 --> 00:01:21.920
+in turn, with the two arguments,
+
+00:01:21.920 --> 00:01:24.080
+namely --list and --unsorted,
+
+00:01:24.080 --> 00:01:25.680
+which basically asks just
+
+00:01:25.680 --> 00:01:27.800
+to list down all the recipes
+
+00:01:27.800 --> 00:01:29.680
+in an unsorted order.
+
+00:01:29.680 --> 00:01:32.400
+Each line of each recipe is executed
+
+00:01:32.400 --> 00:01:33.920
+by a fresh shell.
+
+00:01:33.920 --> 00:01:35.120
+That pretty much
+
+00:01:35.120 --> 00:01:36.360
+is the high level overview
+
+00:01:36.360 --> 00:01:38.520
+of getting started to use this tool.
+
+00:01:38.520 --> 00:01:40.760
+This tool assumes the presence of a shell
+
+00:01:40.760 --> 00:01:43.480
+which is bash in most GNU/Linux systems,
+
+00:01:43.480 --> 00:01:44.840
+but you can configure it
+
+00:01:44.840 --> 00:01:47.160
+to explicitly use any specific shell
+
+00:01:47.160 --> 00:01:48.520
+you have in mind.
+
+00:01:48.520 --> 00:01:50.480
+Let me in fact go and try executing
+
+00:01:50.480 --> 00:01:52.600
+the first recipe.
+
+00:01:52.600 --> 00:01:53.760
+I will first execute it
+
+00:01:53.760 --> 00:01:55.160
+without any arguments,
+
+00:01:55.160 --> 00:01:59.000
+which will force it to run the first recipe.
+
+00:01:59.000 --> 00:02:01.800
+As you can see, it listed all the recipes.
+
+00:02:01.800 --> 00:02:03.200
+Now I can actually execute
+
+00:02:03.200 --> 00:02:04.200
+a particular recipe
+
+00:02:04.200 --> 00:02:06.640
+by passing an explicit recipe name.
+
+00:02:06.640 --> 00:02:08.400
+Let me execute the hello recipe now
+
+00:02:08.400 --> 00:02:11.920
+which will basically print "hello world".
+
+00:02:11.920 --> 00:02:15.320
+It works as expected.
+
+00:02:15.320 --> 00:02:17.040
+As you can see, that's all that's required
+
+00:02:17.040 --> 00:02:18.600
+to get started with this tool.
+
+00:02:18.600 --> 00:02:20.348
+You create a file named justfile
+
+00:02:20.349 --> 00:02:22.800
+in a directory, define some recipes
+
+00:02:22.800 --> 00:02:23.640
+and then run them
+
+00:02:23.640 --> 00:02:27.680
+via the just executable.
+
+00:02:27.680 --> 00:02:28.440
+Note that there are
+
+00:02:28.440 --> 00:02:30.680
+various other features in justfile.
+
+00:02:30.680 --> 00:02:32.240
+You can define variables,
+
+00:02:32.240 --> 00:02:33.280
+mark some variables
+
+00:02:33.280 --> 00:02:35.520
+to be exported as environment variables,
+
+00:02:35.520 --> 00:02:37.280
+have optional parameters
+
+00:02:37.280 --> 00:02:38.800
+that can be passed to a recipe.
+
+00:02:38.800 --> 00:02:40.960
+You can also set up dependency
+
+00:02:40.960 --> 00:02:42.480
+between recipes
+
+00:02:42.480 --> 00:02:44.920
+and also write scripts within a recipe
+
+00:02:44.920 --> 00:02:46.800
+in a language of your choice.
+
+00:02:46.800 --> 00:02:48.560
+I won't be going into the details,
+
+00:02:48.560 --> 00:02:50.120
+but I encourage you to go through
+
+00:02:50.120 --> 00:02:51.640
+the very helpful manual page
+
+00:02:51.640 --> 00:02:56.440
+to learn more about it.
+
+00:02:56.440 --> 00:02:59.200
+Also, let me compare it with Makefiles.
+
+00:02:59.200 --> 00:03:00.800
+I do think it's kind of unfair
+
+00:03:00.800 --> 00:03:02.160
+to compare both the tools
+
+00:03:02.160 --> 00:03:04.760
+since make is a build automation tool
+
+00:03:04.760 --> 00:03:07.520
+whereas just's goal is a task runner,
+
+00:03:07.520 --> 00:03:09.320
+and since just doesn't try to be
+
+00:03:09.320 --> 00:03:10.440
+a build system,
+
+00:03:10.440 --> 00:03:12.480
+it can avoid the associated complexity
+
+00:03:12.480 --> 00:03:15.080
+that comes with the tool like make.
+
+00:03:15.080 --> 00:03:17.040
+There is one nice historical fact
+
+00:03:17.040 --> 00:03:18.200
+about just.
+
+00:03:18.200 --> 00:03:19.560
+The initial version of just
+
+00:03:19.560 --> 00:03:21.640
+relied on make command being available,
+
+00:03:21.640 --> 00:03:23.360
+so it was basically
+
+00:03:23.360 --> 00:03:25.440
+a glorified wrapper around it.
+
+00:03:25.440 --> 00:03:26.440
+But it was removed,
+
+00:03:26.440 --> 00:03:27.760
+and justfile doesn't have
+
+00:03:27.760 --> 00:03:29.680
+that dependency anymore.
+
+00:03:29.680 --> 00:03:31.680
+If you are using make as a task runner
+
+00:03:31.680 --> 00:03:33.400
+then you would have to use
+
+00:03:33.400 --> 00:03:35.400
+something called phony targets.
+
+00:03:35.400 --> 00:03:37.240
+I don't want to go into the details,
+
+00:03:37.240 --> 00:03:39.240
+but makefiles have good reason
+
+00:03:39.240 --> 00:03:41.040
+for why they need something like that.
+
+00:03:41.040 --> 00:03:44.080
+Since justfile is not a build system,
+
+00:03:44.080 --> 00:03:45.200
+it doesn't have to deal with them.
+
+00:03:45.200 --> 00:03:47.400
+The error message
+
+00:03:47.400 --> 00:03:48.680
+and user experience of this tool,
+
+00:03:48.680 --> 00:03:50.480
+in my opinion, is better.
+
+00:03:50.480 --> 00:03:52.760
+To show you a concrete example,
+
+00:03:52.760 --> 00:03:54.920
+justfile errors out by default
+
+00:03:54.920 --> 00:03:56.400
+if you have duplicate recipes.
+
+00:03:56.400 --> 00:03:58.840
+This is in contrast with make
+
+00:03:58.840 --> 00:04:00.720
+where I believe it prints out
+
+00:04:00.720 --> 00:04:01.760
+a warning about it,
+
+00:04:01.760 --> 00:04:03.840
+but still executes the target action.
+
+00:04:03.840 --> 00:04:06.600
+Justfile also gives you the ability
+
+00:04:06.600 --> 00:04:08.200
+to easily create scripts
+
+00:04:08.200 --> 00:04:10.680
+written in any language within a recipe.
+
+00:04:10.680 --> 00:04:12.680
+My personal opinion is that
+
+00:04:12.680 --> 00:04:14.200
+if you are using makefile
+
+00:04:14.200 --> 00:04:15.200
+as a task runner,
+
+00:04:15.200 --> 00:04:17.440
+you might want to check out justfile
+
+00:04:17.440 --> 00:04:19.280
+to see if it will suit your workflow.
+
+00:04:19.280 --> 00:04:25.000
+With that, I'll move on to justl.el,
+
+00:04:25.000 --> 00:04:26.800
+which is basically an Emacs package
+
+00:04:26.800 --> 00:04:28.120
+for driving justfiles.
+
+00:04:28.120 --> 00:04:29.920
+I started writing this tool
+
+00:04:29.920 --> 00:04:31.200
+around a year ago
+
+00:04:31.200 --> 00:04:33.720
+when my usage of justfile increased.
+
+00:04:33.720 --> 00:04:35.440
+The objective of the tool
+
+00:04:35.440 --> 00:04:37.480
+is to reduce the usage of the CLI
+
+00:04:37.480 --> 00:04:40.040
+and drive the execution of the recipes
+
+00:04:40.040 --> 00:04:41.480
+natively within the editor.
+
+00:04:41.480 --> 00:04:44.000
+Let me take you back to the justfile
+
+00:04:44.000 --> 00:04:45.240
+which we saw previously.
+
+00:04:45.240 --> 00:04:47.320
+This time we will drive it
+
+00:04:47.320 --> 00:04:48.840
+within the editor itself,
+
+00:04:48.840 --> 00:04:51.400
+instead of executing commands via vterm
+
+00:04:51.400 --> 00:04:52.400
+as done previously.
+
+00:04:52.400 --> 00:04:54.640
+So the idea is you either
+
+00:04:54.640 --> 00:04:56.000
+open the justfile,
+
+00:04:56.000 --> 00:04:57.840
+or any other file in the directory.
+
+00:04:57.840 --> 00:04:59.160
+That doesn't matter, actually.
+
+00:04:59.160 --> 00:05:00.720
+Once you do that,
+
+00:05:00.720 --> 00:05:02.360
+you call the justl command.
+
+00:05:02.360 --> 00:05:06.640
+Now as you can see, it lists down
+
+00:05:06.640 --> 00:05:07.520
+all the recipes,
+
+00:05:07.520 --> 00:05:09.280
+along with the description if present.
+
+00:05:09.280 --> 00:05:11.520
+You can move on to different recipes
+
+00:05:11.520 --> 00:05:13.080
+by your usual keybinding.
+
+00:05:13.080 --> 00:05:15.680
+And for executing a specific recipe,
+
+00:05:15.680 --> 00:05:18.240
+you have to press the e keybinding,
+
+00:05:18.240 --> 00:05:19.720
+and that will run the recipe
+
+00:05:19.720 --> 00:05:21.600
+and show its output
+
+00:05:21.600 --> 00:05:23.400
+on a special buffer named *just*
+
+00:05:23.400 --> 00:05:25.000
+which is built on top of
+
+00:05:25.000 --> 00:05:27.040
+the compilation mode available in Emacs.
+
+00:05:27.040 --> 00:05:28.760
+Let me actually try
+
+00:05:28.760 --> 00:05:30.240
+executing the hello recipe
+
+00:05:30.240 --> 00:05:32.440
+which we previously executed in vterm.
+
+00:05:32.440 --> 00:05:38.160
+As you can see,
+
+00:05:38.160 --> 00:05:39.680
+it executed the recipe
+
+00:05:39.680 --> 00:05:41.120
+and the "hello world" output
+
+00:05:41.120 --> 00:05:42.400
+is visible in the just buffer.
+
+00:05:42.400 --> 00:05:44.400
+You can also see that there is
+
+00:05:44.400 --> 00:05:45.880
+other metadata like
+
+00:05:45.880 --> 00:05:47.480
+when it started executing
+
+00:05:47.480 --> 00:05:49.520
+and when did it finish executing.
+
+00:05:49.520 --> 00:05:51.520
+If a recipe execution fails,
+
+00:05:51.520 --> 00:05:53.160
+it will also change the color
+
+00:05:53.160 --> 00:05:55.760
+and print the corresponding exit code.
+
+00:05:55.760 --> 00:05:57.320
+Let me actually show you
+
+00:05:57.320 --> 00:05:59.080
+by modifying the hello recipe
+
+00:05:59.080 --> 00:06:03.600
+and making it exit.
+
+00:06:03.600 --> 00:06:08.400
+As you can see,
+
+00:06:08.400 --> 00:06:10.480
+it clearly indicates the error message now.
+
+00:06:10.480 --> 00:06:12.720
+That is a pretty much
+
+00:06:12.720 --> 00:06:14.240
+a good high level overview
+
+00:06:14.240 --> 00:06:15.680
+of how to execute recipes
+
+00:06:15.680 --> 00:06:17.280
+using this Emacs extension.
+
+00:06:17.280 --> 00:06:21.720
+If I press the h or the ? key,
+
+00:06:21.720 --> 00:06:23.520
+it will display the various ways
+
+00:06:23.520 --> 00:06:24.160
+to drive it.
+
+00:06:24.160 --> 00:06:27.480
+Now as you can see,
+
+00:06:27.480 --> 00:06:29.320
+you can pass various options to it.
+
+00:06:29.320 --> 00:06:31.600
+I find the dry run option effective
+
+00:06:31.600 --> 00:06:34.560
+whenever I have to print the recipe contents
+
+00:06:34.560 --> 00:06:36.600
+without actually executing the recipe.
+
+00:06:36.600 --> 00:06:39.720
+There are also various ways to execute it.
+
+00:06:39.720 --> 00:06:42.960
+You can use Emacs's eshell to execute it
+
+00:06:42.960 --> 00:06:45.040
+by pressing the E keybinding.
+
+00:06:45.040 --> 00:06:48.400
+Let me try executing the hello recipe again,
+
+00:06:48.400 --> 00:06:50.760
+but this time via Emacs's eshell.
+
+00:06:50.760 --> 00:06:54.840
+As you can see now I have an eshell instance
+
+00:06:54.840 --> 00:06:57.320
+where it executed the just hello recipe.
+
+00:06:57.320 --> 00:07:02.440
+You can also directly
+
+00:07:02.440 --> 00:07:03.680
+go to the recipe line
+
+00:07:03.680 --> 00:07:05.000
+by pressing the return key.
+
+00:07:05.000 --> 00:07:08.040
+So let's say if I want to
+
+00:07:08.040 --> 00:07:09.360
+go to the recipe build app
+
+00:07:09.360 --> 00:07:12.160
+all I have to do is press the return key
+
+00:07:12.160 --> 00:07:14.400
+and it will go to the just file
+
+00:07:14.400 --> 00:07:15.520
+with the proper line.
+
+00:07:15.520 --> 00:07:19.800
+You can also re-execute the same recipe
+
+00:07:19.800 --> 00:07:21.320
+from the output just buffer.
+
+00:07:21.320 --> 00:07:23.320
+I find this very helpful
+
+00:07:23.320 --> 00:07:25.080
+when iterating on certain things.
+
+00:07:25.080 --> 00:07:26.720
+In my day job,
+
+00:07:26.720 --> 00:07:29.240
+I often have to work with a Kubernetes cluster,
+
+00:07:29.240 --> 00:07:30.480
+and I would have to write
+
+00:07:30.480 --> 00:07:33.360
+resource manifest files for applications.
+
+00:07:33.360 --> 00:07:36.376
+Having the ability to run the recipes
+
+00:07:36.377 --> 00:07:37.942
+while iterating on the project
+
+00:07:37.943 --> 00:07:39.560
+is very useful, in my opinion.
+
+00:07:39.560 --> 00:07:42.000
+Let me actually show you
+
+00:07:42.000 --> 00:07:43.680
+an example of what I am talking about.
+
+00:07:43.680 --> 00:07:46.680
+Let me run the build app recipe now,
+
+00:07:46.680 --> 00:07:48.400
+which will basically build the manifest
+
+00:07:48.400 --> 00:07:49.600
+and print it out.
+
+00:07:49.600 --> 00:07:58.160
+Now let me open one of the application files.
+
+00:07:58.160 --> 00:07:59.960
+I will open the ingress.yaml file.
+
+00:07:59.960 --> 00:08:06.120
+So I have this YAML file which I am working on,
+
+00:08:06.120 --> 00:08:08.600
+and I also have this output buffer
+
+00:08:08.600 --> 00:08:10.160
+which is basically the output
+
+00:08:10.160 --> 00:08:11.840
+of the build app recipe.
+
+00:08:11.840 --> 00:08:14.200
+Now I can basically go through this buffer
+
+00:08:14.200 --> 00:08:18.320
+and see if everything is alright,
+
+00:08:18.320 --> 00:08:21.760
+but I find out that I didn't want
+
+00:08:21.760 --> 00:08:23.920
+the hostname to be emacs2022.
+
+00:08:23.920 --> 00:08:25.840
+I wanted it to be just emacs.
+
+00:08:25.840 --> 00:08:29.000
+I can go and fix it in my YAML file,
+
+00:08:29.000 --> 00:08:34.160
+and then I can go on
+
+00:08:34.160 --> 00:08:36.160
+to the output buffer
+
+00:08:36.160 --> 00:08:38.520
+and basically just re-run the command
+
+00:08:38.520 --> 00:08:40.080
+by pressing the g key binding.
+
+00:08:40.080 --> 00:08:42.800
+As you can see,
+
+00:08:42.800 --> 00:08:48.160
+it executed the same recipe again,
+
+00:08:48.160 --> 00:08:49.440
+and I can see that
+
+00:08:49.440 --> 00:08:51.280
+the hostname is indeed emacs.
+
+00:08:51.280 --> 00:08:55.000
+I find this kind of workflow very convenient
+
+00:08:55.000 --> 00:08:56.600
+while I am working on a project.
+
+00:08:56.600 --> 00:08:59.320
+Another way of interacting
+
+00:08:59.320 --> 00:09:00.440
+with the justl extension
+
+00:09:00.440 --> 00:09:02.400
+is by using the interactive function
+
+00:09:02.400 --> 00:09:04.280
+justl-exec-recipe-in-dir.
+
+00:09:04.280 --> 00:09:06.040
+The use case of this function
+
+00:09:06.040 --> 00:09:07.840
+is executing a one-off recipe
+
+00:09:07.840 --> 00:09:09.920
+while you are working on something else.
+
+00:09:09.920 --> 00:09:11.960
+Let me show you an example of it.
+
+00:09:11.960 --> 00:09:19.800
+As you can see, it shows me
+
+00:09:19.800 --> 00:09:21.320
+a drop down of various recipes
+
+00:09:21.320 --> 00:09:22.640
+available in the justfile.
+
+00:09:22.640 --> 00:09:24.880
+You can choose any particular one
+
+00:09:24.880 --> 00:09:26.800
+and execute the corresponding recipe.
+
+00:09:26.800 --> 00:09:28.360
+In this case, I will choose
+
+00:09:28.360 --> 00:09:29.640
+the build-app recipe,
+
+00:09:29.640 --> 00:09:31.320
+and we will get the output
+
+00:09:31.320 --> 00:09:32.280
+in the *just* buffer
+
+00:09:32.280 --> 00:09:33.200
+which should be similar
+
+00:09:33.200 --> 00:09:34.680
+to what we saw previously.
+
+00:09:34.680 --> 00:09:43.920
+So this was a quick introduction
+
+00:09:43.920 --> 00:09:45.120
+to what justfile is
+
+00:09:45.120 --> 00:09:46.800
+and how to drive them within Emacs.
+
+00:09:46.800 --> 00:09:48.600
+Hopefully it was helpful
+
+00:09:48.600 --> 00:09:50.160
+and it would encourage you
+
+00:09:50.160 --> 00:09:51.480
+to use justfiles in your workflow.
+
+00:09:51.480 --> 00:09:53.800
+Thank you for allowing me to present.
+
+00:09:53.800 --> 00:09:55.480
+I am available in IRC
+
+00:09:55.480 --> 00:10:02.040
+if you have any questions.
diff --git a/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt b/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt
new file mode 100644
index 00000000..a6a4ba40
--- /dev/null
+++ b/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--answers.vtt
@@ -0,0 +1,497 @@
+WEBVTT
+
+00:00.000 --> 00:09.260
+Excellent. Thank you for the great talk. As someone whose first language wasn't English
+
+00:09.260 --> 00:14.960
+and speaks other languages, I think localization and internationalization is a very important
+
+00:14.960 --> 00:20.920
+topic that's near and dear to my heart, and especially when it comes to Emacs. I think
+
+00:20.920 --> 00:26.700
+there's a lot that we could do better. So, yeah, thanks so much. Folks, if you have questions,
+
+00:26.700 --> 00:32.880
+you can post them on IRC on the pad, and Jon-Karstof will answer them, and we will also open up
+
+00:32.880 --> 00:37.600
+this big blue button for people who would like to join here and ask their questions
+
+00:37.600 --> 00:45.760
+directly. Jon-Karstof, please take it away. Okay, thank you. I'm not seeing much activity
+
+00:45.760 --> 00:55.920
+on IRC or the pad, so let me add a few things. First, that patch was really interesting in
+
+00:55.920 --> 01:03.680
+terms of actually getting into the code and understanding how really can a beginner join
+
+01:03.680 --> 01:11.080
+development, even if it's just a few lines. I mentioned in the first part of the presentation
+
+01:11.080 --> 01:17.600
+that there was this small integration bug with Mac, and that's the thing that actually
+
+01:17.600 --> 01:22.400
+got me started, and that was interesting because at the time I was trying to use Aquamax because
+
+01:22.400 --> 01:28.280
+it looked simpler, and I thought, okay, if I need to fix that, rather than fixing it
+
+01:28.280 --> 01:34.400
+in Aquamax, maybe I should just go to Emacs and fix it there. So, that was the first attempt
+
+01:34.400 --> 01:40.440
+for me to actually contribute something serious, and it was really nice to – I mean, this
+
+01:40.440 --> 01:47.160
+Emacs development list is really amazing. 99% of the discussion is just way above your
+
+01:47.160 --> 01:54.120
+head, but sometimes you grasp something, and the more you grasp it, the more you understand
+
+01:54.120 --> 02:00.600
+and the more you feel like you can actually do something, especially since – I mean,
+
+02:00.600 --> 02:06.640
+as for all the free software development projects, most of them, I guess, it's really just do
+
+02:06.640 --> 02:13.920
+it kind of thing. And if you try to do something, somebody's going to help you, and what I
+
+02:13.920 --> 02:21.200
+really enjoy when being there is that the people are always very nice. Sometimes you
+
+02:21.200 --> 02:28.080
+feel some tension when there are discussions about a specific topic, but it's – everybody
+
+02:28.080 --> 02:37.520
+is really polite, I mean, 99% of the time. And what I like the most is all the people
+
+02:37.520 --> 02:42.680
+are very strong opinionated, so they have a very good idea of what Emacs should be or
+
+02:42.680 --> 02:47.640
+should not be, and so it gives you a very good idea of in what direction you should
+
+02:47.640 --> 02:57.400
+go. So that experience – I mean, pretty much those 2017, 2018 years were until now
+
+02:57.400 --> 03:02.040
+the peak of my Emacs activity. I've had to craddle with that because I was busy with
+
+03:02.040 --> 03:07.160
+other things, but I'm really planning to go back to working on maybe not localization
+
+03:07.160 --> 03:13.480
+because it's really – it's too big for me right now. And what I was told is that
+
+03:13.480 --> 03:20.520
+it involved a bit of C programming and things like this, so I'm not really into that right
+
+03:20.520 --> 03:30.840
+now. But I think eventually one day – I just turned 53, so I guess in a few years
+
+03:30.840 --> 03:36.800
+from now when I have more time, I guess I'll just dive in and just work on those localization
+
+03:36.800 --> 03:43.800
+issues and really to bring Emacs to a different world because I think it's – if we were
+
+03:43.800 --> 03:49.920
+able to have – it's a big job. I mean, it's really – if you check the threads
+
+03:49.920 --> 03:55.400
+on dev, check my name, you will see that I mostly post on translation or localization
+
+03:55.400 --> 04:01.360
+issues at least at the time. And I did an estimate of the sheer volume of strings to
+
+04:01.360 --> 04:10.360
+translate. For example, the manuals were about 2 million words. That's big. That's big.
+
+04:10.360 --> 04:14.040
+But it's okay. I mean, it's not something that's impossible. And if you check the strings
+
+04:14.040 --> 04:20.160
+– that was a really rough estimate. If you check the strings for Emacs proper, not even
+
+04:20.160 --> 04:29.120
+talking about the packages and things, I think that would add probably like 500,000 words.
+
+04:29.120 --> 04:34.360
+I mean, I have no idea, but my very rough estimate would be that. So it's not something
+
+04:34.360 --> 04:41.120
+that's impossible to do. And we'd have to ensure that we have a good process for people
+
+04:41.120 --> 04:46.200
+who review the strings and contribute new strings and things like this and also best
+
+04:46.200 --> 04:53.560
+practices like what I tried to show in this video. And I was really not trying to be dismissive
+
+04:53.560 --> 04:58.680
+about the people who worked on Package L because they did a wonderful job at actually helping
+
+04:58.680 --> 05:02.840
+people like me access all those packages. So it's – I mean, the point of the video
+
+05:02.840 --> 05:10.840
+is naturally to dismiss the code. But I was kind of scared because I was like, if they
+
+05:10.840 --> 05:18.720
+write code like this for strings, then what about the rest of the code? Is it – so it
+
+05:18.720 --> 05:25.560
+was kind of – I mean, something that I really can't evaluate. But I'm like – I mean,
+
+05:25.560 --> 05:30.600
+those guys obviously are really smart and they're trying to make intelligent things
+
+05:30.600 --> 05:37.400
+about how they want to factor their code, et cetera. But if they do that for strings,
+
+05:37.400 --> 05:44.400
+which is quite simple actually – I mean, it's simple to mess up strings. So I was
+
+05:44.400 --> 05:50.320
+like, what about the rest of the code? Is it that complex or that difficult to understand?
+
+05:50.320 --> 05:56.000
+So that's kind of a put off for me. I'm like, I really don't want to try to envisage
+
+05:56.000 --> 06:01.760
+that more because – plus it's not – it's really not my area at all. So anyway, that's
+
+06:01.760 --> 06:04.400
+what I wanted to add. Yeah.
+
+06:04.400 --> 06:11.680
+Awesome. Yeah, I think I pretty much agree with all of what you said.
+
+06:11.680 --> 06:17.360
+Yeah, yeah, yeah. I have a question – I see a question on the pad. I use Emacs on
+
+06:17.360 --> 06:23.520
+English, but my mother language is – no, no, no. Okay. So the answer is that Emacs
+
+06:23.520 --> 06:33.760
+is not localized. And my understanding is that right now it's not localizable. And
+
+06:33.760 --> 06:40.840
+those discussions took place about four or five years ago. So check on the dev list and
+
+06:40.840 --> 06:46.280
+you'll see the state of the discussion because there is only a discussion at the moment.
+
+06:46.280 --> 06:57.480
+What I did for package L, I think it was really just a one-time attempt at fixing one package.
+
+06:57.480 --> 07:05.640
+And I did check the other – a number of other packages in core Emacs. And not a lot
+
+07:05.640 --> 07:12.280
+of them had – I mean, as far as I checked. And I really did not check everything. But
+
+07:12.280 --> 07:20.840
+basically what you have to do is check all the functions that impact strings. And some
+
+07:20.840 --> 07:28.600
+are really not user-facing strings, so they're not really interesting for us. And actually,
+
+07:28.600 --> 07:34.640
+that's really interesting to do that. So if you just take one list package, list code
+
+07:34.640 --> 07:40.480
+and just go through the thing and just check all of print1, printc, message, format, concat
+
+07:40.480 --> 07:43.520
+and stuff and just see how it goes.
+
+07:43.520 --> 07:50.240
+So basically right now there is no infrastructure to localize the thing. There is no process
+
+07:50.240 --> 07:56.720
+to extract the strings. And there is no way to actually import them back into the code.
+
+07:56.720 --> 08:02.800
+So what we can do right now is really just what I did, make sure that it's eventually
+
+08:02.800 --> 08:10.760
+possible one day. And as I just shown, it's really not such a big deal. If you're very
+
+08:10.760 --> 08:19.800
+careful about understanding the way that the strings are handled, it's just a few rewrites
+
+08:19.800 --> 08:24.560
+away. I mean, it's really not much. So there's – I mean, there's not a lot to be proud
+
+08:24.560 --> 08:31.140
+about in my patch. But it was really fun. And I think it's a very good entry point
+
+08:31.140 --> 08:39.480
+for people like us. I suppose – I mean, I suppose the first person question. I mean,
+
+08:39.480 --> 08:44.240
+I don't know. Maybe I'm just – I should not suppose that. But people who really enjoy
+
+08:44.240 --> 08:51.320
+working in Emacs and just sometimes would like to contribute something and are not programmers
+
+08:51.320 --> 08:56.320
+or anything or maybe even programmers. I mean, I'm not excluding them. But that's really
+
+08:56.320 --> 09:02.280
+a good way to just start doing something. And eventually from there, you can – I mean,
+
+09:02.280 --> 09:07.020
+you just use a package that you like and that you think is important and just check the
+
+09:07.020 --> 09:10.200
+strings and do things like this. And then eventually, you'll find other parts of the
+
+09:10.200 --> 09:18.840
+code that you want to improve or add functions. So yeah, actually, the patch that I did, this
+
+09:18.840 --> 09:26.840
+patch is actually in the process of the thing that I started with Equimax. So I did one
+
+09:26.840 --> 09:35.600
+little thing regarding those that were not fully integrated in macOS. And then I did
+
+09:35.600 --> 09:41.880
+something about a small function. I think I added the possibility to add an option.
+
+09:41.880 --> 09:48.960
+I did documentation improvement as well. So really just little things. And then the deeper
+
+09:48.960 --> 09:53.000
+you dive, the more interesting it gets. And then you find something that you really want
+
+09:53.000 --> 10:07.160
+to do. So just use that entry point as a way to have fun in Emacs.
+
+10:07.160 --> 10:15.240
+Well, so I mentioned Regex on strings. Well, it's not really a red flag for localization.
+
+10:15.240 --> 10:28.080
+But the way it's used, I mean, I guess there are ways to properly use it. But I think really
+
+10:28.080 --> 10:38.400
+the basically using that means that you're making assumptions on the way language is
+
+10:38.400 --> 10:45.800
+structured. And I did exactly the same mistake on a different project that I'm working on.
+
+10:45.800 --> 10:51.280
+Actually, I'm in charge of rewriting a manual. And we were using Docbook. And I just thought
+
+10:51.280 --> 10:57.240
+it would be smart to have automated links to parts of the chapters, et cetera. And the
+
+10:57.240 --> 11:01.240
+thing is that depending on the language, you've got different ways to introduce chapters.
+
+11:01.240 --> 11:10.540
+So I should know that. I should know that. You should not automatically insert strings
+
+11:10.540 --> 11:20.720
+in code because it's going to produce something that can't be handled by the translator. So
+
+11:20.720 --> 11:28.840
+basically Regex on strings is something that probably you might use. But if you see, I
+
+11:28.840 --> 11:33.320
+mean, you can see the way it was used in the original code. So if you see something like
+
+11:33.320 --> 11:39.360
+that, I mean, just don't run and just fix the thing because there is no way these can
+
+11:39.360 --> 11:44.920
+be localized, I mean, extracted properly and then localized. And that's the reason too
+
+11:44.920 --> 11:50.480
+why numbers are a big problem because, for example, in English but in French too, we
+
+11:50.480 --> 11:56.920
+have only singular forms and plural forms. But some languages have zero forms. Some languages
+
+11:56.920 --> 12:03.720
+have two forms like pair forms. Some languages don't have a different form for anything.
+
+12:03.720 --> 12:09.920
+For example, I live in Japan. I work in Japanese. And in Japanese, you don't have a form. You
+
+12:09.920 --> 12:16.640
+don't have different inflections for words based on their number. So saying one whatever
+
+12:16.640 --> 12:23.400
+or two whatevers or an infinity of whatevers or even zero whatever, it's just the same
+
+12:23.400 --> 12:28.480
+form. So making assumption on the number of things and the way it's expressed in the language
+
+12:28.480 --> 12:34.640
+is usually, and that's something that we already know in free software. I mean, if you check
+
+12:34.640 --> 12:40.060
+the getex library, they've got everything sorted out. And that's something that was
+
+12:40.060 --> 12:46.880
+created in the 90s at Sun Microsystem. And then it was freed, et cetera. But when you
+
+12:46.880 --> 12:52.560
+see the work that it did at the time, you would kind of expect that people understand
+
+12:52.560 --> 12:58.920
+that. But no. And that's OK because developers develop and localizers localize. So we kind
+
+12:58.920 --> 13:04.820
+of split. But everything has been done already. So we just have to be aware of what's being
+
+13:04.820 --> 13:11.720
+done. And we have to be aware of the rules. And I think of one very good set of rules
+
+13:11.720 --> 13:19.880
+that's been online for a while. It's the Worldwide Consortium. They have a really good internationalization
+
+13:19.880 --> 13:26.640
+page where everything is pretty much black on white on paper, on the web at least. And
+
+13:26.640 --> 13:31.960
+if you read that, you can see exactly what should be done for localization, what should
+
+13:31.960 --> 13:35.880
+not be done, what should be avoided at all costs, et cetera, et cetera.
+
+13:35.880 --> 13:44.440
+So there are plenty of references here and there. And in terms of software localization,
+
+13:44.440 --> 13:49.980
+it's the same. If you check the getex page, you should be able to get an idea of what
+
+13:49.980 --> 13:59.240
+should be good. So is my project to localize all of Emacs? I wish it were. Eventually I'll
+
+13:59.240 --> 14:05.160
+be rich. Hopefully. I don't know. I'm working on that. It's not working well. But the day
+
+14:05.160 --> 14:11.540
+I can take just one year off totally and focus on that, I think that's something I would
+
+14:11.540 --> 14:18.760
+love to work on and just get up to speed with the process of programming all the things,
+
+14:18.760 --> 14:23.080
+checking all the things, and organizing the infrastructure. But seriously, I don't think
+
+14:23.080 --> 14:31.240
+that will ever happen because I'm a poor translator. And I still have, what, like 20 years to go
+
+14:31.240 --> 14:40.560
+before I can't work anymore. And we don't have savings or anything with the corona shit.
+
+14:40.560 --> 14:47.560
+So I don't think that's ever going to happen. But I would love to help. And yes, yes. How
+
+14:47.560 --> 14:53.480
+deep would useful localization go? Because the core of Emacs are duck strings and localization.
+
+14:53.480 --> 15:00.280
+Yes, yes, yes. I mean, all those discussions have been made. I mean, no conclusion reached.
+
+15:00.280 --> 15:07.880
+But we have addressed those things on the discussions. And so just, I mean, it's really
+
+15:07.880 --> 15:13.560
+pretentious to say, check my name on the Emacs table list because I've talked about that.
+
+15:13.560 --> 15:18.680
+It's really pretentious. But that's not what I'm saying. I mean, there has been a lot of
+
+15:18.680 --> 15:24.400
+discussion on the development list. So if you check for localization, translation, stuff
+
+15:24.400 --> 15:30.800
+like that, you'll see keywords, and you'll see the discussion. And people are aware of
+
+15:30.800 --> 15:36.440
+the issues. So I mean, we just need to have a framework for that.
+
+15:36.440 --> 15:40.120
+Thank you. Just to quickly chime in to say, I think we have about two more minutes of
+
+15:40.120 --> 15:45.800
+on stream Q&A. And then you're welcome to either stay here, Jean-Christophe, or continue
+
+15:45.800 --> 15:48.800
+taking questions on the pad on IRC.
+
+15:48.800 --> 15:57.120
+I think, well, I got to go to work. So I need to get ready. But I think, unless we have
+
+15:57.120 --> 16:08.760
+something on IRC, I think we're good. If you find something else that I've not addressed,
+
+16:08.760 --> 16:19.840
+I'm good. Otherwise, yes, yes, yeah, we need to take all the C code. But I mean, you can
+
+16:19.840 --> 16:29.160
+decide the level down to which you want to work. So you can go all the way to the C code.
+
+16:29.160 --> 16:32.920
+But actually, the C code is actually easier to extract because there is all these get
+
+16:32.920 --> 16:40.280
+text things that works on the C code already. So the issue is pretty much the Emacs Lisp
+
+16:40.280 --> 16:47.760
+code, as far as I can understand. So that would be the process that we need to address.
+
+16:47.760 --> 16:56.800
+Doc strings, indeed. But then the doc strings and the manual, they are very close. And actually,
+
+16:56.800 --> 17:03.560
+yeah, my estimate of the 500,000 word, I think it was based on doc strings. So yeah, we need
+
+17:03.560 --> 17:09.760
+to take all that. And that's an ongoing project that's not going to go away anyway. So we'll
+
+17:09.760 --> 17:12.760
+be here 10 years from now, I'm sure.
+
+17:12.760 --> 17:17.680
+OK, cool. And yeah, I think that's about all the time that we have on the stream. I guess
+
+17:17.680 --> 17:21.720
+if folks have further questions, they could maybe reach out to you later on IRC or via
+
+17:21.720 --> 17:22.720
+email.
+
+17:22.720 --> 17:29.640
+And I'll be back on the development list shortly, maybe six months from now. So yeah, I can
+
+17:29.640 --> 17:30.640
+take it from there.
+
+17:30.640 --> 17:31.640
+Sounds great.
+
+17:31.640 --> 17:32.640
+Thank you very much.
+
+17:32.640 --> 17:33.640
+Thank you very much.
+
+17:33.640 --> 17:34.640
+Yeah, thanks again for your great talk. Cheers.
+
+17:34.640 --> 17:35.640
+Cheers.
+
+17:35.640 --> 17:56.640
+OK, bye.
+
diff --git a/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt b/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt
new file mode 100644
index 00000000..a86af897
--- /dev/null
+++ b/2022/captions/emacsconf-2022-localizing--prelocalizing-emacs--jeanchristophe-helary--main.vtt
@@ -0,0 +1,726 @@
+WEBVTT captioned by brandelune and bhavin192
+
+NOTE Introduction
+
+00:00.000 --> 00:00:05.400
+Hello everyone, I am Jean-Christophe Helary,
+
+00:00:05.400 --> 00:00:09.680
+I live in Japan, and I'm a translator.
+
+00:09.680 --> 00:00:12.633
+Here is my second presentation on this very
+
+00:00:12.633 --> 00:00:15.300
+prestigious stage that is the Emacs conference.
+
+00:00:15.300 --> 00:00:18.367
+Following my "Let's Translate the 2 million words
+
+00:00:18.367 --> 00:00:21.767
+in the Emacs manual" in 2021, my topic this year,
+
+00:00:21.767 --> 00:00:25.167
+always related to translation, is
+
+00:00:25.167 --> 00:00:28.400
+pre-localizing Emacs or much less pretentiously,
+
+00:00:28.400 --> 00:00:31.933
+"Just make sure that your strings don't mix up plurals".
+
+NOTE Usage of package.el
+
+00:00:31.933 --> 00:00:36.133
+So, for some reason I resumed Emacs use
+
+00:00:36.133 --> 00:00:39.940
+around 2016, and as I was rediscovering the thing
+
+00:00:39.940 --> 00:00:42.800
+I found really old outline-mode files here
+
+00:00:42.800 --> 00:00:44.033
+and there on my machine.
+
+00:00:44.033 --> 00:00:45.140
+And I started to experiment
+
+00:00:45.140 --> 00:00:47.167
+again and write again with Emacs.
+
+00:00:47.167 --> 00:00:48.564
+I think that at the time,
+
+00:00:48.564 --> 00:00:50.433
+I was coming from Aquamacs and because of
+
+00:00:50.433 --> 00:00:53.400
+an integration bug with macOS, I decided
+
+00:00:53.400 --> 00:00:55.440
+to check what was going on in the code.
+
+00:55.440 --> 00:00:59.040
+That was my first official contribution.
+
+NOTE The bug in strings
+
+00:59.040 --> 00:01:02.233
+So as I was happily installing and uninstalling
+
+00:01:02.233 --> 00:01:05.267
+things, I noticed something weird one day.
+
+00:01:05.267 --> 00:01:09.080
+Let me enlarge that picture.
+
+01:09.080 --> 00:01:12.400
+See? And even if I were not a translator,
+
+00:01:12.400 --> 00:01:14.960
+I would not like that string, and obviously
+
+01:14.960 --> 00:01:16.833
+the same bug bites you when the string
+
+00:01:16.833 --> 00:01:20.520
+tells you to erase the package.
+
+01:20.520 --> 00:01:26.720
+Boom, so we agree that we have a problem here.
+
+NOTE Natural language engineering
+
+01:26.720 --> 00:01:29.067
+So, I started to do some spelunking into the code,
+
+00:01:29.067 --> 00:01:31.067
+and at least that was my feeling
+
+00:01:31.067 --> 00:01:33.100
+because I really am not a programmer
+
+00:01:33.100 --> 00:01:37.240
+by any stretch of the imagination.
+
+01:37.240 --> 00:01:39.467
+And what I found was an amazing piece of
+
+00:01:39.467 --> 00:01:41.840
+natural language engineering that was mixing code
+
+01:41.840 --> 00:01:44.267
+with English suffixes and all that,
+
+00:01:44.267 --> 00:01:46.267
+and I could see that the people who had
+
+00:01:46.267 --> 00:01:47.767
+written that code were pretty smart,
+
+00:01:47.767 --> 00:01:49.533
+but had missed a number of edge cases
+
+00:01:49.533 --> 00:01:51.280
+that produced the above bugs.
+
+01:51.280 --> 00:01:53.500
+That was my first experience with
+
+00:01:53.500 --> 00:01:55.033
+all the message related functions,
+
+00:01:55.033 --> 00:01:58.360
+"format", "concat", "message", etc.
+
+01:58.360 --> 00:02:00.433
+But even with my beginner's eyes I could see that
+
+00:02:00.433 --> 00:02:03.040
+something was off because when you want
+
+02:03.040 --> 00:02:06.000
+to produce natural language strings you never ever
+
+00:02:06.000 --> 00:02:08.600
+should use "replace-regex-in-string" to
+
+02:08.600 --> 00:02:11.067
+add an "ing" or an "ed" suffix
+
+00:02:11.067 --> 00:02:12.980
+to change the mode of a sentence.
+
+02:12.980 --> 00:02:16.840
+But that's what I was seeing was happening.
+
+NOTE More than a missed plural
+
+02:16.840 --> 00:02:20.333
+So, what we had to deal with here
+
+00:02:20.333 --> 00:02:22.220
+was way more than just a missed plural.
+
+02:22.220 --> 00:02:24.000
+It was an attempt at engineering all
+
+00:02:24.000 --> 00:02:26.400
+the message strings destined to the user
+
+00:02:26.400 --> 00:02:28.567
+with the smart code that was making assumptions
+
+00:02:28.567 --> 00:02:30.067
+on the structure of words,
+
+00:02:30.067 --> 00:02:33.220
+and in the localization world that's a big no-no.
+
+02:33.220 --> 00:02:36.667
+I'm a translator, and such UI strings issues
+
+00:02:36.667 --> 00:02:38.433
+have been sorted out decades ago.
+
+00:02:38.433 --> 00:02:41.320
+So I was a bit shocked.
+
+NOTE The final patch
+
+02:41.320 --> 00:02:43.533
+The final patch took me about a year to write,
+
+00:02:43.533 --> 00:02:45.380
+because I'm slow, because I needed to verify
+
+02:45.380 --> 00:02:47.167
+and understand a lot, because there are
+
+00:02:47.167 --> 00:02:49.100
+plenty of rules and plenty of people who are
+
+00:02:49.100 --> 00:02:51.433
+explaining you very nicely what the rules are,
+
+00:02:51.433 --> 00:02:53.733
+because I have kids, and because the
+
+00:02:53.733 --> 00:02:55.600
+Emacs development list is such a cool place to be
+
+00:02:55.600 --> 00:02:58.560
+that you often forget why you're there sometimes.
+
+02:58.560 --> 00:03:01.800
+Anyway, for people who can't click on a video,
+
+00:03:01.800 --> 00:03:03.640
+and I can't either, here are the relevant
+
+03:03.640 --> 00:03:05.840
+parts with some short comments.
+
+03:05.840 --> 00:03:07.800
+I'll be talking with localization in mind,
+
+00:03:07.800 --> 00:03:09.640
+knowing full well that Emacs localization
+
+03:09.640 --> 00:03:12.800
+is not on the map at the moment.
+
+03:12.800 --> 00:03:14.167
+So first, there is this thing
+
+00:03:14.167 --> 00:03:15.520
+about "format" and "concat".
+
+03:15.520 --> 00:03:17.800
+And if I remember correctly,
+
+00:03:17.800 --> 00:03:20.300
+"format" is better for user-facing things,
+
+00:03:20.300 --> 00:03:25.160
+and "concat" is better for internal things.
+
+03:25.160 --> 00:03:26.800
+Here, there are two things.
+
+03:26.800 --> 00:03:28.800
+First, a rule that we have when we prepare
+
+00:03:28.800 --> 00:03:30.700
+strings that need to be localized is
+
+00:03:30.700 --> 00:03:33.333
+never ever make assumptions on the way
+
+00:03:33.333 --> 00:03:35.780
+numbers are expressed in the language.
+
+03:35.780 --> 00:03:37.067
+Here, the assumption is that
+
+00:03:37.067 --> 00:03:40.000
+we have either a singular or plural form,
+
+00:03:40.000 --> 00:03:42.040
+and that's not always the case.
+
+03:42.040 --> 00:03:44.067
+That usually means that you should externalize
+
+00:03:44.067 --> 00:03:48.280
+numbers and find a generic way to express them.
+
+03:48.280 --> 00:03:50.833
+So it makes for slightly less natural
+
+00:03:50.833 --> 00:03:54.400
+language strings, but it's better anyway.
+
+03:54.400 --> 00:03:56.667
+Then we have that comma there that's trying
+
+00:03:56.667 --> 00:03:58.167
+to be externalized and that's weird,
+
+00:03:58.167 --> 00:04:02.620
+so I put it back into the sentence.
+
+04:02.620 --> 00:04:04.967
+Here we have another construct, or two rather,
+
+00:04:04.967 --> 00:04:06.960
+that really should not be used like this.
+
+04:06.960 --> 00:04:10.033
+It's "prin1" that uses quoting characters,
+
+00:04:10.033 --> 00:04:12.480
+just like "print", and "princ" that does not.
+
+04:12.480 --> 00:04:15.400
+And you see why they were combined together.
+
+04:15.400 --> 00:04:17.133
+And they were both trying to be really smart
+
+00:04:17.133 --> 00:04:19.780
+about which article to put in front of a vowel.
+
+04:19.780 --> 00:04:20.960
+And you just don't do that.
+
+04:20.960 --> 00:04:25.000
+You just keep things simple.
+
+04:25.000 --> 00:04:26.633
+Here again, the code is trying to be smart,
+
+00:04:26.633 --> 00:04:28.480
+but it's really not much more efficient than
+
+04:28.480 --> 00:04:34.940
+plainly stating what you want.
+
+04:34.940 --> 00:04:36.500
+And here again, we have "concat" things
+
+00:04:36.500 --> 00:04:40.367
+that we could just use to plainly state
+
+00:04:40.367 --> 00:04:41.980
+what we want to state.
+
+04:41.980 --> 00:04:49.880
+So, instead of "concat" I just put a "message".
+
+04:49.880 --> 00:04:52.260
+And here we have something that's very cute.
+
+04:52.260 --> 00:04:54.540
+It's a computerized plural.
+
+04:54.540 --> 00:04:55.700
+Here again, assuming that
+
+00:04:55.700 --> 00:04:58.640
+there are only plural or singular forms.
+
+04:58.640 --> 00:05:00.867
+But the end string is not that much more natural
+
+00:05:00.867 --> 00:05:02.700
+than the fix, the code is less efficient
+
+00:05:02.700 --> 00:05:07.760
+and is harder to understand.
+
+05:07.760 --> 00:05:09.433
+Here again, the code is trying to make
+
+00:05:09.433 --> 00:05:13.520
+smart things where it could be much simpler.
+
+05:13.520 --> 00:05:14.667
+That is the part where you get the
+
+00:05:14.667 --> 00:05:19.480
+number of packages and their names.
+
+05:19.480 --> 00:05:22.067
+Here the whole sentence with the semicolons
+
+00:05:22.067 --> 00:05:26.333
+and the question mark is split in parts,
+
+00:05:26.333 --> 00:05:29.180
+between which something will be inserted.
+
+05:29.180 --> 00:05:34.240
+That's really ugly and difficult to read.
+
+05:34.240 --> 00:05:37.700
+Here again, another "ing" waiting to be
+
+00:05:37.700 --> 00:05:44.840
+regex-inserted into the code.
+
+05:44.840 --> 00:05:46.633
+And here at last, we get to the point
+
+00:05:46.633 --> 00:05:48.760
+where everything started.
+
+05:48.760 --> 00:05:50.833
+And you can see that unlike in the other spots,
+
+00:05:50.833 --> 00:05:52.400
+there is no possibility for the expression
+
+05:52.400 --> 00:05:54.680
+to be singular.
+
+05:54.680 --> 00:05:57.600
+So, I guess that if it hadn't been for that bug,
+
+00:05:57.600 --> 00:05:59.320
+I would not have found the other items,
+
+05:59.320 --> 00:06:01.033
+and we would be left with code that works,
+
+00:06:01.033 --> 00:06:02.033
+of course, but that is
+
+00:06:02.033 --> 00:06:06.020
+harder to understand, and maintain.
+
+06:06.020 --> 00:06:08.333
+Last but not least, a last version of
+
+00:06:08.333 --> 00:06:10.920
+"just plainly state what you mean to state".
+
+06:10.920 --> 00:06:14.880
+Keep it simple.
+
+NOTE "What did I learn, and how did I learn it?"
+
+06:14.880 --> 00:06:19.267
+So first, we have this wonderful CONTRIBUTE file
+
+00:06:19.267 --> 00:06:21.267
+that is very explicit about
+
+00:06:21.267 --> 00:06:23.520
+how we must proceed when contributing code.
+
+06:23.520 --> 00:06:25.233
+So, that's really the first place
+
+00:06:25.233 --> 00:06:27.760
+that we should all read.
+
+06:27.760 --> 00:06:29.333
+The README file is pretty cool too,
+
+00:06:29.333 --> 00:06:30.967
+especially at the beginning of the process,
+
+00:06:30.967 --> 00:06:31.867
+when you're not sure whether
+
+00:06:31.867 --> 00:06:36.240
+you want to fix that bug or just report it.
+
+NOTE Useful packages
+
+06:36.240 --> 00:06:37.920
+And then we've got packages.
+
+06:37.920 --> 00:06:39.900
+We've got a number of packages that are really
+
+00:06:39.900 --> 00:06:42.600
+helpful when it comes to reading
+
+00:06:42.600 --> 00:06:45.880
+the information and the manuals.
+
+06:45.880 --> 00:06:48.000
+I'm mentioning three of them here,
+
+00:06:48.000 --> 00:06:53.720
+and I think they are the most important for us.
+
+NOTE Package: helpful
+
+06:53.720 --> 00:06:55.600
+So "helpful" is on the right,
+
+00:06:55.600 --> 00:06:58.667
+and it's overflowing the window with
+
+00:06:58.667 --> 00:07:01.900
+all the contextualized information it provides,
+
+00:07:01.900 --> 00:07:05.280
+and the standard "help" is on the left.
+
+07:05.280 --> 00:07:07.933
+I mean, really there are like two or three
+
+00:07:07.933 --> 00:07:11.567
+screen-full of information in the "helpful" output,
+
+00:07:11.567 --> 00:07:13.233
+so you really only see a part,
+
+00:07:13.233 --> 00:07:16.320
+but I guess if you use it, you know what I'm saying.
+
+07:16.320 --> 00:07:18.867
+What I like the most here is the "view in manual"
+
+00:07:18.867 --> 00:07:21.800
+part, where you can actually click and even get
+
+00:07:21.800 --> 00:07:23.667
+more information that's sometimes
+
+00:07:23.667 --> 00:07:28.400
+easier to read and understand.
+
+NOTE Package: inform
+
+07:28.400 --> 00:07:33.640
+And then you've got the "info" versus "inform" formats.
+
+07:33.640 --> 00:07:34.567
+When you're in the manual,
+
+00:07:34.567 --> 00:07:37.140
+"inform" makes a huge difference.
+
+07:37.140 --> 00:07:39.367
+You can see here that you've got colorized items,
+
+00:07:39.367 --> 00:07:42.000
+and also in the middle you've got that
+
+07:42.000 --> 00:07:45.000
+'read' part that's green and bold.
+
+07:45.000 --> 00:07:49.333
+In "info" it's not a specific object,
+
+00:07:49.333 --> 00:07:52.200
+it's just a string. In 'inform' it's actually
+
+00:07:52.200 --> 00:07:53.800
+a link that you can click,
+
+00:07:53.800 --> 00:07:58.320
+and actually go to that 'read' manual page.
+
+NOTE Package: which-key
+
+07:58.320 --> 00:08:01.300
+Now, we've got "which-key".
+
+08:01.300 --> 00:08:03.400
+"which-key" is a savior for beginners too.
+
+08:03.400 --> 00:08:04.867
+Just wait half a second or something,
+
+00:08:04.867 --> 00:08:06.500
+and Emacs will show you all the keys
+
+00:08:06.500 --> 00:08:08.433
+that you can access from the prefix combination
+
+00:08:08.433 --> 00:08:09.920
+that you just typed.
+
+08:09.920 --> 00:08:13.200
+So, it's really helpful for discovering functions
+
+00:08:13.200 --> 00:08:19.160
+and learning new functions, getting used to them.
+
+NOTE It all started with this message…
+
+08:19.160 --> 00:08:21.500
+And so that whole process started…,
+
+00:08:21.500 --> 00:08:26.533
+it was May 23, 2017,
+
+00:08:26.533 --> 00:08:30.440
+with that thread when I found the bug.
+
+08:30.440 --> 00:08:32.800
+I just bumped into an English/code bug
+
+00:08:32.800 --> 00:08:36.920
+this morning. In package.el, when one package
+
+08:36.920 --> 00:08:39.033
+is not needed anymore, the message is:
+
+00:08:39.033 --> 00:08:41.300
+"Package menu: Operation finished.
+
+00:08:41.300 --> 00:08:44.880
+1 packages are no longer needed", etc.
+
+08:44.880 --> 00:08:49.633
+So, I was asking whether we had best practices
+
+00:08:49.633 --> 00:08:53.800
+for using messages, and we had a whole thread
+
+08:53.800 --> 00:08:57.867
+about that. And while I was discussing on that
+
+00:08:57.867 --> 00:09:01.240
+thread, I started that new thread, which is:
+
+09:01.240 --> 00:09:02.867
+"package.el strings".
+
+00:09:02.867 --> 00:09:09.900
+The whole thing actually ended on June 27, 2018.
+
+00:09:09.900 --> 00:09:15.400
+So, a year after, with that message from Noam
+
+00:09:15.400 --> 00:09:18.567
+telling me that "Yes I can close the bug,"
+
+00:09:18.567 --> 00:09:22.040
+and that was it.
+
+09:22.040 --> 00:09:24.000
+So, it took about a year to finish that.
+
+00:09:24.000 --> 00:09:28.133
+What I did learn basically is that
+
+00:09:28.133 --> 00:09:32.160
+helping with Emacs is not that difficult.
+
+09:32.160 --> 00:09:36.100
+It takes time when you're not fluent with the code,
+
+00:09:36.100 --> 00:09:37.100
+but that's okay because the reference
+
+09:37.100 --> 00:09:39.300
+is excellent, and there are lots of people
+
+00:09:39.300 --> 00:09:41.520
+who are here to help.
+
+NOTE Conclusion
+
+09:41.520 --> 00:09:45.700
+Basically, the solution to all our problems is
+
+00:09:45.700 --> 00:09:47.733
+"Keep It Simple and Straightforward".
+
+00:09:47.733 --> 00:09:51.033
+As you can see in that patch,
+
+00:09:51.033 --> 00:09:53.233
+even if it's a beginner's patch,
+
+00:09:53.233 --> 00:09:57.733
+what I did shows what can be done by Emacs Lisp
+
+00:09:57.733 --> 00:09:59.533
+beginners to help with "straightening" the strings
+
+00:09:59.533 --> 00:10:02.267
+to reduce the number of potential English bugs.
+
+00:10:02.267 --> 00:10:04.533
+And then to make Emacs strings easier
+
+00:10:04.533 --> 00:10:07.233
+to be handled by real localization processes one day.
+
+00:10:07.233 --> 00:10:09.067
+But it doesn't have to be about strings
+
+00:10:09.067 --> 00:10:12.767
+because strings can be an easy entry point to Emacs,
+
+00:10:12.767 --> 00:10:16.720
+but it can be any itch that you want to scratch.
+
+10:16.720 --> 00:10:18.267
+And my real conclusion is that
+
+00:10:18.267 --> 00:10:22.160
+Emacs is free software, and what that means is mostly
+
+10:22.160 --> 00:10:24.067
+that it allows you to do things that you would
+
+00:10:24.067 --> 00:10:27.920
+never have thought of being able to do before.
+
+10:27.920 --> 00:10:32.000
+That's really the biggest lesson to be learned here.
+
+10:32.000 --> 00:10:33.400
+So, I want to thank all the people
+
+00:10:33.400 --> 00:10:37.920
+who allowed this to be happening, allowed me to
+
+10:37.920 --> 00:10:41.267
+learn a bit and contribute a bit to that wonderful
+
+00:10:41.267 --> 00:10:42.800
+piece of software that Emacs is.
+
+00:10:42.800 --> 00:10:44.533
+And thank you everyone for listening,
+
+00:10:44.533 --> 00:10:46.700
+and hopefully I'll see you next year
+
+00:10:46.700 --> 00:10:51.520
+with a different translation related presentation.
+
+10:51.520 --> 11:13.640
+Thank you very much.
diff --git a/2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt b/2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt
new file mode 100644
index 00000000..622d0b40
--- /dev/null
+++ b/2022/captions/emacsconf-2022-lspbridge--lspbridge-a-smooth-as-butter-asynchronous-lsp-client--andy-stewart-matthew-zeng--main.vtt
@@ -0,0 +1,1002 @@
+WEBVTT captioned by matthew
+
+NOTE Opening
+
+00:00:00.000 --> 00:00:04.639
+Good morning folks, I'm Matthew.
+
+00:00:04.640 --> 00:00:07.399
+Welcome to another year of EmacsConf.
+
+00:00:07.400 --> 00:00:10.319
+It's looking fantastic this year.
+
+00:00:10.320 --> 00:00:13.559
+Firstly, I have to apologize for my voice
+
+00:00:13.560 --> 00:00:15.879
+and occasional cough today.
+
+00:00:15.880 --> 00:00:18.039
+I am currently recovering from a cold,
+
+00:00:18.040 --> 00:00:21.159
+hopefully it's not Covid or flu,
+
+00:00:21.160 --> 00:00:24.719
+so please bear with me today.
+
+00:00:24.720 --> 00:00:27.919
+Actually, this talk was supposed to be brought to you
+
+00:00:27.920 --> 00:00:31.559
+by Manatee Lazycat, the author of lsp-bridge.
+
+00:00:31.560 --> 00:00:36.079
+But verbal English isn't Lazycat's strongest skill,
+
+00:00:36.080 --> 00:00:38.599
+and we are good friends as we maintain
+
+00:00:38.600 --> 00:00:40.999
+the Emacs Application Framework together,
+
+00:00:41.000 --> 00:00:45.999
+so here I am today presenting to you this package.
+
+00:00:46.000 --> 00:00:48.479
+Welcome to my talk on lsp-bridge:
+
+00:00:48.480 --> 00:00:50.320
+a smooth-as-butter asynchronous LSP client.
+
+NOTE What is LSP?
+
+00:00:50.321 --> 00:00:57.200
+What is LSP?
+
+00:00:57.201 --> 00:01:01.159
+The first question is, what is LSP?
+
+00:01:01.160 --> 00:01:03.199
+For anyone who doesn't know here,
+
+00:01:03.200 --> 00:01:06.799
+LSP stands for Language Server Protocol,
+
+00:01:06.800 --> 00:01:09.719
+it is a set of protocols defined by Microsoft
+
+00:01:09.720 --> 00:01:13.399
+that provides smart features like autocomplete,
+
+00:01:13.400 --> 00:01:17.599
+go to definition, documentation, etc.,
+
+00:01:17.600 --> 00:01:23.439
+that can be implemented across different editors and IDEs.
+
+00:01:23.440 --> 00:01:25.559
+It was initially created
+
+00:01:25.560 --> 00:01:28.399
+for their Visual Studio Code product,
+
+00:01:28.400 --> 00:01:33.919
+then publically shared with everyone.
+
+00:01:33.920 --> 00:01:35.999
+So there are language servers out there
+
+00:01:36.000 --> 00:01:38.119
+that implemented this procotol,
+
+00:01:38.120 --> 00:01:41.239
+and editors need to implement the same procotols
+
+00:01:41.240 --> 00:01:43.119
+to talk to the language servers
+
+00:01:43.120 --> 00:01:46.799
+in order to retrieve necessary information.
+
+00:01:46.800 --> 00:01:53.159
+Emacs has 2 LSP clients already, the lsp-mode and eglot,
+
+00:01:53.160 --> 00:01:57.319
+both implemented the protocols and both are very good.
+
+NOTE Why another LSP client?
+
+00:02:00.440 --> 00:02:03.199
+Now comes to the second question, of course,
+
+00:02:03.200 --> 00:02:09.519
+given lsp-mode and eglot, why another LSP client?
+
+00:02:09.520 --> 00:02:12.359
+I used to use lsp-mode all the time,
+
+00:02:12.360 --> 00:02:15.999
+I have to say I really appreciate Ivan Yonchovski
+
+00:02:16.000 --> 00:02:20.159
+and the team's efforts. Also, I'd like to congratuate eglot
+
+00:02:20.160 --> 00:02:27.439
+for making into Emacs 29! These are fantastic packages,
+
+00:02:27.440 --> 00:02:30.999
+they are very mature and robust.
+
+NOTE
+
+00:02:31.000 --> 00:02:31.000
+However, with all due respect, both of the implementation
+
+00:02:35.120 --> 00:02:36.719
+are fundamentally limited
+
+00:02:36.720 --> 00:02:39.639
+by the single-threaded nature of Emacs,
+
+00:02:39.640 --> 00:02:43.639
+it is neither the fault of lsp-mode nor eglot.
+
+NOTE
+
+00:02:46.000 --> 00:02:47.959
+Although in recent years there have been
+
+00:02:47.960 --> 00:02:51.799
+improvements to Emacs core such as native JSON support,
+
+00:02:51.800 --> 00:02:55.319
+there are still scenarios where Emacs clog
+
+00:02:55.320 --> 00:02:59.359
+for a brief second when processing large amounts of data,
+
+00:02:59.360 --> 00:03:03.399
+as Emacs is processing everything in the single thread.
+
+00:03:03.400 --> 00:03:08.439
+This problem is especially apparent in some LSP servers
+
+00:03:08.440 --> 00:03:11.839
+that feeds in tens of thousands of JSON data
+
+00:03:11.840 --> 00:03:15.199
+with every single key press.
+
+NOTE
+
+00:03:15.200 --> 00:03:17.559
+Additionally, the large amount of data
+
+00:03:17.560 --> 00:03:21.279
+sent by the LSP server, such as the completion candidates,
+
+00:03:21.280 --> 00:03:23.959
+the diagnostics and documentation,
+
+00:03:23.960 --> 00:03:27.359
+they are temporarily stored in the Emacs memory,
+
+00:03:27.360 --> 00:03:31.159
+which will trigger garbage collection very frequently,
+
+00:03:31.160 --> 00:03:34.159
+this also causes stuttering user experience.
+
+00:03:34.160 --> 00:03:37.279
+Increasing the gc-cons-threshold helps,
+
+00:03:37.280 --> 00:03:43.759
+but doesn't eliminate the problem.
+
+NOTE
+
+00:03:43.760 --> 00:03:45.559
+For something like the LSP,
+
+00:03:45.560 --> 00:03:48.319
+the language servers need time to compute,
+
+00:03:48.320 --> 00:03:52.359
+and Emacs needs capacity to process and filter
+
+00:03:52.360 --> 00:03:55.799
+all the data coming from the language servers.
+
+00:03:55.800 --> 00:03:59.399
+A large codebase project with a slow language server
+
+00:03:59.400 --> 00:04:02.439
+that sends tens of thousands of JSON
+
+00:04:02.440 --> 00:04:06.519
+will significantly increase the time needed to process it,
+
+00:04:06.520 --> 00:04:08.079
+when we don't have a multi-thread,
+
+00:04:08.080 --> 00:04:12.719
+the single thread originally allocated for perhaps,
+
+00:04:12.720 --> 00:04:17.279
+handling user input will be used to process all the data,
+
+00:04:17.280 --> 00:04:22.719
+and don't even talk about the garbage collection along the way.
+
+NOTE
+
+00:04:22.720 --> 00:04:26.239
+The unfortunate truth is that the size of the codebase
+
+00:04:26.240 --> 00:04:28.919
+and the efficiency of the language server
+
+00:04:28.920 --> 00:04:31.759
+is completely out of Emacs' control,
+
+00:04:31.760 --> 00:04:38.519
+it is also out of both the lsp-mode and eglot's control.
+
+NOTE
+
+00:04:38.520 --> 00:04:40.279
+If there's an LSP client
+
+00:04:40.280 --> 00:04:42.279
+that can completely eliminate stuttering
+
+00:04:42.280 --> 00:04:44.999
+and provide a seamless feedback,
+
+00:04:45.000 --> 00:04:50.279
+that would be great, isn't it?
+
+NOTE What is seamless input feedback?
+
+00:04:50.280 --> 00:04:53.839
+However, we're vaguely talking about speed right now,
+
+00:04:53.840 --> 00:04:56.399
+what is considered fast?
+
+00:04:56.400 --> 00:04:58.359
+What is considered seamless?
+
+00:04:58.360 --> 00:05:01.479
+What we really mean when we say
+
+00:05:01.480 --> 00:05:05.239
+the current LSP implementation is slow?
+
+00:05:05.240 --> 00:05:12.559
+Let's first look at the problem fundamentally.
+
+NOTE
+
+00:05:12.560 --> 00:05:17.679
+We interact with Emacs through a keyboard,
+
+00:05:17.680 --> 00:05:22.719
+so what we perceive as a fast and smooth feedback
+
+00:05:22.720 --> 00:05:25.999
+completely depends on how long it takes
+
+00:05:26.000 --> 00:05:29.359
+for a keyboard input to display on the Emacs buffer.
+
+00:05:29.360 --> 00:05:32.919
+From a pure graphical perspective,
+
+00:05:32.920 --> 00:05:36.519
+we need a minimum of 24 frames per second,
+
+00:05:36.520 --> 00:05:39.079
+the standard in the media industry,
+
+00:05:39.080 --> 00:05:42.359
+for us humans to perceive something as seamless.
+
+00:05:42.360 --> 00:05:46.999
+Say we need 25 frames per second, this means,
+
+00:05:47.000 --> 00:05:50.399
+if we divide 1000 milliseconds by 25,
+
+00:05:50.400 --> 00:05:54.759
+we only have approximately 40 millisecond window
+
+00:05:54.760 --> 00:05:57.919
+for the response time to spare.
+
+00:05:57.920 --> 00:06:01.679
+Even if we relax the constraint a bit more,
+
+00:06:01.680 --> 00:06:06.679
+on average a typist takes about 100 to 200 milliseconds
+
+00:06:06.680 --> 00:06:09.159
+between typing each character,
+
+00:06:09.160 --> 00:06:12.599
+so as long as we see a response within this timeframe,
+
+00:06:12.600 --> 00:06:19.559
+it is tolerable. However, using a slow language server
+
+00:06:19.560 --> 00:06:22.279
+on a large codebase easily exceeds
+
+00:06:22.280 --> 00:06:24.679
+the hundred millisecond mark,
+
+00:06:24.680 --> 00:06:27.479
+and sometimes takes more than 200 milliseconds,
+
+00:06:27.480 --> 00:06:32.039
+and inevitably will cause an inconsistent delay
+
+00:06:32.040 --> 00:06:33.199
+for the end user.
+
+NOTE
+
+00:06:33.200 --> 00:06:37.959
+At this point, someone might want to point out
+
+00:06:37.960 --> 00:06:41.079
+that nobody is gonna type at the maximum pace all the time.
+
+00:06:41.080 --> 00:06:45.039
+That's right, frankly speaking most of my time
+
+00:06:45.040 --> 00:06:47.639
+spent at programming is not writing code,
+
+00:06:47.640 --> 00:06:49.039
+but staring at the screen
+
+00:06:49.040 --> 00:06:51.279
+thinking about how to write the code.
+
+00:06:51.280 --> 00:06:55.599
+However, when we do actually type,
+
+00:06:55.600 --> 00:07:00.359
+maybe only a sentence, a variable name, a keyword,
+
+00:07:00.360 --> 00:07:03.039
+or just performing keybinding shortcuts,
+
+00:07:03.040 --> 00:07:08.479
+that's when we want to see our input feedback immediately.
+
+00:07:08.480 --> 00:07:10.479
+We've already spend so much time
+
+00:07:10.480 --> 00:07:12.159
+thinking about how to write,
+
+00:07:12.160 --> 00:07:16.479
+we don't want to waste any more time waiting for Emacs
+
+00:07:16.480 --> 00:07:19.559
+to process and show us what we've written
+
+00:07:19.560 --> 00:07:27.679
+half a second ago. Otherwise the frustration will build up.
+
+NOTE EAF showed a possibility
+
+00:07:28.400 --> 00:07:31.999
+In the past two years of EmacsConf, I've talked about
+
+00:07:32.000 --> 00:07:35.399
+the Emacs Application Framework, a project that extended
+
+00:07:35.400 --> 00:07:39.839
+Emacs Lisp to Python, Qt and JavaScript ecosystems.
+
+00:07:39.840 --> 00:07:43.759
+The EAF project specializes in improving
+
+00:07:43.760 --> 00:07:47.439
+the graphical and multimedia capabilities of Emacs
+
+00:07:47.440 --> 00:07:51.759
+through other languages, it was a great success.
+
+00:07:51.760 --> 00:07:55.759
+It demonstrated the endless possibilities of Emacs
+
+00:07:55.760 --> 00:08:00.159
+by embracing the strengths in other ecosystems.
+
+00:08:00.160 --> 00:08:04.239
+If anyone is interested for more information on EAF,
+
+00:08:04.240 --> 00:08:08.519
+please see the EAF repo and refer to my talks
+
+00:08:08.520 --> 00:08:12.959
+from EmacsConf2020 and 2021.
+
+00:08:12.960 --> 00:08:12.960
+
+
+00:08:12.960 --> 00:08:16.239
+The EAF project was created by Manatee Lazycat as well,
+
+00:08:16.240 --> 00:08:19.999
+so he thought if there is a way to design
+
+00:08:20.000 --> 00:08:22.759
+an LSP client similar to EAF
+
+00:08:22.760 --> 00:08:25.759
+that takes the advantage of Python's multi-threading,
+
+00:08:25.760 --> 00:08:27.839
+it will be able to solve our problem.
+
+00:08:27.840 --> 00:08:32.399
+Conveniently EAF had already done most of the ground work
+
+00:08:32.400 --> 00:08:34.359
+and demonstrated the possibility
+
+00:08:34.360 --> 00:08:42.159
+of cooperating Elisp and Python using the Emacs RPC effectively.
+
+NOTE LSP Bridge Objectives
+
+00:08:42.160 --> 00:08:45.039
+LSP Bridge has several goals in mind.
+
+00:08:45.040 --> 00:08:50.159
+Firstly, performance is the number one priority.
+
+00:08:50.160 --> 00:08:55.839
+Secondly, use Python multi-threading to bypass
+
+00:08:55.840 --> 00:08:59.239
+the aforementioned bottlenecks of a single-threaded Emacs.
+
+00:08:59.240 --> 00:09:04.519
+Thirdly, provide a simple solution that requires
+
+00:09:04.520 --> 00:09:07.519
+minimal setup for someone who just wants to have
+
+00:09:07.520 --> 00:09:10.079
+a fast autocomplete system in Emacs.
+
+00:09:10.080 --> 00:09:15.999
+This means, LSP Bridge does not intend
+
+00:09:16.000 --> 00:09:21.439
+and will not implement the entire LSP protocol,
+
+00:09:21.440 --> 00:09:23.639
+which is a vastly different approach
+
+00:09:23.640 --> 00:09:25.759
+than a solution like lsp-mode,
+
+00:09:25.760 --> 00:09:28.479
+we do not want to compete this way.
+
+00:09:28.480 --> 00:09:33.559
+We also believe some of the LSP Protocol features
+
+00:09:33.560 --> 00:09:37.759
+are unnecessary, or we already have better solutions
+
+00:09:37.760 --> 00:09:38.959
+in the Emacs ecosystem,
+
+00:09:38.960 --> 00:09:42.679
+such as tree-sitter for syntax highlighting.
+
+00:09:42.680 --> 00:09:44.959
+So we will not reinvent the wheel.
+
+00:09:44.960 --> 00:09:50.279
+Ultimately, we want to provide the fastest, butter-smooth
+
+00:09:50.280 --> 00:09:53.679
+and performant LSP client out of the box.
+
+NOTE Design.
+
+00:09:53.680 --> 00:09:54.560
+Design.
+
+00:09:54.561 --> 00:10:01.239
+Now let's look at the design architecture diagram.
+
+00:10:01.240 --> 00:10:04.639
+As you can see, it is split into
+
+00:10:04.640 --> 00:10:07.079
+the top half and bottom half.
+
+00:10:07.080 --> 00:10:10.559
+The top is the design for a single file model,
+
+00:10:10.560 --> 00:10:13.359
+and the bottom half is for project model.
+
+00:10:13.360 --> 00:10:18.159
+We make this distinction because we don't want a new user
+
+00:10:18.160 --> 00:10:22.599
+to be troubled on choosing a project root directory
+
+00:10:22.600 --> 00:10:25.199
+as the first impression to LSP
+
+00:10:25.200 --> 00:10:27.279
+before even start writing code.
+
+00:10:27.280 --> 00:10:27.280
+
+
+00:10:27.280 --> 00:10:30.479
+From a new user's perspective,
+
+00:10:30.480 --> 00:10:32.959
+they've just installed this package,
+
+00:10:32.960 --> 00:10:35.159
+and all they are expecting
+
+00:10:35.160 --> 00:10:37.679
+is using a smart autocomplete system,
+
+00:10:37.680 --> 00:10:41.519
+what does root directory even mean in this context?
+
+00:10:41.520 --> 00:10:44.119
+So we make the decision for them
+
+00:10:44.120 --> 00:10:48.199
+based on whether this file is part of a git repository.
+
+00:10:48.200 --> 00:10:56.719
+Often times we write code in its own standalone file,
+
+00:10:56.720 --> 00:10:59.919
+this is extremely common for scripting languages
+
+00:10:59.920 --> 00:11:03.319
+like bash or python. So in the single file model,
+
+00:11:03.320 --> 00:11:07.159
+LSP Bridge will start a dedicated LSP server
+
+00:11:07.160 --> 00:11:10.319
+for this particular file based on file type,
+
+00:11:10.320 --> 00:11:13.479
+and every file corresponds to a LSP server,
+
+00:11:13.480 --> 00:11:17.839
+so each server doesn't interfere with one another.
+
+00:11:17.840 --> 00:11:23.719
+The project model will have every file of the same type
+
+00:11:23.720 --> 00:11:25.919
+under the same project share one server.
+
+00:11:25.920 --> 00:11:30.439
+We believe this is a positive trade-off for user experience.
+
+00:11:30.440 --> 00:11:30.440
+
+
+00:11:30.440 --> 00:11:36.599
+LSP Bridge internally implemented two main threads,
+
+00:11:36.600 --> 00:11:40.399
+one is the Request Thread, the other is Response Thread.
+
+00:11:40.400 --> 00:11:45.279
+The Request Thread is used to handle all the requests
+
+00:11:45.280 --> 00:11:48.679
+coming from Emacs, it does not answer immediately,
+
+00:11:48.680 --> 00:11:52.839
+this is important because Emacs doesn't need to wait
+
+00:11:52.840 --> 00:11:54.679
+for any response under any reason,
+
+00:11:54.680 --> 00:11:58.159
+even if the server is buggy or died out,
+
+00:11:58.160 --> 00:12:01.159
+it shouldn't matter to the performance of Emacs.
+
+00:12:01.160 --> 00:12:04.039
+The Response Thread is used to handle
+
+00:12:04.040 --> 00:12:06.559
+the response coming from LSP servers.
+
+00:12:06.560 --> 00:12:11.239
+After retrieving a response, regardless of the JSON size,
+
+00:12:11.240 --> 00:12:14.439
+it sends to its own thread for computation,
+
+00:12:14.440 --> 00:12:17.079
+such as candidate filtering and renaming.
+
+00:12:17.080 --> 00:12:19.999
+Once the computation is finished,
+
+00:12:20.000 --> 00:12:23.639
+it will determine if this information is expired,
+
+00:12:23.640 --> 00:12:26.399
+if not, then push it to Emacs.
+
+00:12:26.400 --> 00:12:26.400
+
+
+00:12:26.400 --> 00:12:31.559
+From the Emacs side, when it receives the LSP information,
+
+00:12:31.560 --> 00:12:34.639
+it only needs to determine the course of action,
+
+00:12:34.640 --> 00:12:39.159
+either popup completion, jump to definition,
+
+00:12:39.160 --> 00:12:44.799
+renaming action, or show references and show documentions.
+
+00:12:44.800 --> 00:12:49.119
+You see, from a user, all LSP Bridge doing
+
+00:12:49.120 --> 00:12:52.279
+is these 5 things, the user doesn't need to care about
+
+00:12:52.280 --> 00:12:54.559
+anything else like the complicated
+
+00:12:54.560 --> 00:12:56.479
+Language Server Protocols.
+
+00:12:56.480 --> 00:12:56.480
+
+
+00:12:56.480 --> 00:13:02.439
+Python side caches heavy data
+
+00:13:02.440 --> 00:13:06.279
+such as candidate documentation and diagnostics.
+
+00:13:06.280 --> 00:13:11.079
+We process as much server data as possible in Python,
+
+00:13:11.080 --> 00:13:15.759
+and only pass to Emacs as little data as possible
+
+00:13:15.760 --> 00:13:18.159
+so it doesn't clog the Emacs thread
+
+00:13:18.160 --> 00:13:19.799
+and triggers garbage collection.
+
+00:13:19.800 --> 00:13:19.800
+
+
+00:13:19.800 --> 00:13:24.319
+This design is critical, because all Emacs needs to do
+
+00:13:24.320 --> 00:13:27.039
+is sending LSP requests to LSP Bridge,
+
+00:13:27.040 --> 00:13:29.439
+it doesn't wait for a response,
+
+00:13:29.440 --> 00:13:32.999
+it simply knows what to do *when* there is a response.
+
+00:13:33.000 --> 00:13:37.159
+So the user's input immediately displays on the buffer
+
+00:13:37.160 --> 00:13:39.559
+well within the 40 millisecond window,
+
+00:13:39.560 --> 00:13:45.199
+and in the mean time, the user can continue to type
+
+00:13:45.200 --> 00:13:48.199
+if he doesn't need the help from LSP right away,
+
+00:13:48.200 --> 00:13:51.279
+it fundamentally resolves the stuttering problem.
+
+NOTE ACM - Asynchronous Completion Menu
+
+00:13:51.280 --> 00:13:59.079
+Now I want to talk about acm-mode,
+
+00:13:59.080 --> 00:14:09.599
+which stands for asynchronous completion menu,
+
+00:14:09.600 --> 00:14:12.479
+it is a completion framework
+
+00:14:12.480 --> 00:14:15.039
+that currently bundled with LSP Bridge
+
+00:14:15.040 --> 00:14:17.279
+designed to accomodate for
+
+00:14:17.280 --> 00:14:20.399
+the asynchronous nature of LSP servers.
+
+00:14:20.400 --> 00:14:26.919
+It is a replacement for the built-in capf,
+
+00:14:26.920 --> 00:14:30.359
+short for completion-at-point-functions,
+
+00:14:30.360 --> 00:14:32.519
+used in almost everywhere
+
+00:14:32.520 --> 00:14:35.759
+including company-mode and corfu-mode.
+
+00:14:35.760 --> 00:14:40.839
+Yes, we unfortunately reinvented a very fundamental wheel.
+
+00:14:40.840 --> 00:14:44.279
+No, it wasn't an easy decision.
+
+00:14:44.280 --> 00:14:47.879
+However we still believe it's worth it.
+
+00:14:47.880 --> 00:14:53.359
+LSP Bridge initially used company-mode,
+
+00:14:53.360 --> 00:14:56.119
+then moved on to corfu-mode for a while,
+
+00:14:56.120 --> 00:14:58.999
+but eventually Lazycat determined
+
+00:14:59.000 --> 00:15:00.719
+that it is much more painful to write
+
+00:15:00.720 --> 00:15:05.679
+a lot of workaround code to force LSP Bridge
+
+00:15:05.680 --> 00:15:09.959
+to handle capf nicely than to just fork Corfu,
+
+00:15:09.960 --> 00:15:11.999
+remove all the capf code,
+
+00:15:12.000 --> 00:15:15.239
+and write a new completion framework from the remainings.
+
+00:15:15.240 --> 00:15:15.240
+
+
+00:15:15.240 --> 00:15:20.719
+Performance wise, capf requires Emacs to store
+
+00:15:20.720 --> 00:15:23.119
+the entire candidate list
+
+00:15:23.120 --> 00:15:27.159
+when looking up candidate annotations.
+
+00:15:27.160 --> 00:15:30.639
+It needs to search through the entire candidate list first,
+
+00:15:30.640 --> 00:15:32.599
+then use the candidate as a key
+
+00:15:32.600 --> 00:15:34.799
+to search for the actual information.
+
+00:15:34.800 --> 00:15:38.919
+This entire process will be repeated every time
+
+00:15:38.920 --> 00:15:40.679
+when drawing the completion menu.
+
+00:15:40.680 --> 00:15:45.199
+This is truly intensive computing task for Emacs to handle.
+
+00:15:45.200 --> 00:15:50.519
+On top of that, the existing capf frameworks assume
+
+00:15:50.520 --> 00:15:54.279
+the candidate list, which is retrieved from the LSP server,
+
+00:15:54.280 --> 00:15:56.839
+to be ready and finalized in place
+
+00:15:56.840 --> 00:15:58.719
+when the completion popup occurred.
+
+00:15:58.720 --> 00:16:02.119
+However given the design of LSP Bridge,
+
+00:16:02.120 --> 00:16:05.919
+Emacs will not sit there and wait for the server response,
+
+00:16:05.920 --> 00:16:10.439
+instead the Response Thread may feed Emacs data
+
+00:16:10.440 --> 00:16:14.919
+whenever it's ready. This makes capf almost impossible
+
+00:16:14.920 --> 00:16:21.919
+to form a finalized candidate list during popup.
+
+00:16:21.920 --> 00:16:21.920
+
+
+00:16:21.920 --> 00:16:26.079
+The complete reasons regarding why capf is incompatible
+
+00:16:26.080 --> 00:16:28.679
+with the asynchronous nature of LSP servers
+
+00:16:28.680 --> 00:16:32.479
+are very complicated and deserves its own talk.
+
+00:16:32.480 --> 00:16:37.079
+Lazycat wrote an entire blog post detailing his reasonings,
+
+00:16:37.080 --> 00:16:40.999
+while Corfu's author Daniel Mendler a.k.a minad
+
+00:16:41.000 --> 00:16:44.239
+also done his own investigations and experiments,
+
+00:16:44.240 --> 00:16:47.239
+and reached a common conclusion.
+
+00:16:47.240 --> 00:16:50.919
+For anyone interested, I've pasted the links
+
+00:16:50.920 --> 00:16:52.759
+to the corresponding posts here.
+
+00:16:52.760 --> 00:16:57.399
+Therefore, keep in mind that LSP Bridge
+
+00:16:57.400 --> 00:16:59.919
+can only use acm-mode to work nicely,
+
+00:16:59.920 --> 00:17:03.359
+so please disable other completion frameworks
+
+00:17:03.360 --> 00:17:07.159
+like company and corfu before trying LSP Bridge.
+
+NOTE LSP Bridge + ACM -> Multi-Backend Completion Framework
+
+00:17:07.160 --> 00:17:14.919
+By designing ACM with asynchronous server response in mind,
+
+00:17:14.920 --> 00:17:18.759
+this unlocks LSP Bridge project's potential
+
+00:17:18.760 --> 00:17:22.199
+to provide completions from almost any backends.
+
+00:17:22.200 --> 00:17:25.679
+ACM has blended all the backends together,
+
+00:17:25.680 --> 00:17:28.799
+and configured a priority to display
+
+00:17:28.800 --> 00:17:32.839
+important completion results like LSP before other backends.
+
+00:17:32.840 --> 00:17:38.559
+It can autocomplete LSP, TabNine, Elisp symbols, yasnippets,
+
+00:17:38.560 --> 00:17:41.039
+even English dictionaries and much more.
+
+00:17:41.040 --> 00:17:43.959
+As long as you have the backends installed,
+
+00:17:43.960 --> 00:17:46.319
+they all work out-of-the-box!
+
+NOTE Today and future. Join us!
+
+00:17:46.320 --> 00:17:55.239
+Although LSP Bridge is a relatively new package
+
+00:17:55.240 --> 00:18:00.039
+with just over 7 months old, it is already a success!
+
+00:18:00.040 --> 00:18:06.599
+As of December of 2022, we have 67 contributors
+
+00:18:06.600 --> 00:18:08.439
+making more than 1000 commits,
+
+00:18:08.440 --> 00:18:12.679
+and we reached more than 600 stars on Github!
+
+00:18:12.680 --> 00:18:16.359
+LSP Bridge is easily extensible,
+
+00:18:16.360 --> 00:18:18.879
+developing a new language backend is very simple too,
+
+00:18:18.880 --> 00:18:20.639
+feel free to join us!
+
+00:18:20.640 --> 00:18:25.599
+LSP Bridge is another successful example
+
+00:18:25.600 --> 00:18:29.919
+of extending Emacs Lisp with Python, and just like EAF,
+
+00:18:29.920 --> 00:18:33.639
+it demonstrated the potential Emacs can achieve
+
+00:18:33.640 --> 00:18:37.039
+when we jump out of the Lisp-only world
+
+00:18:37.040 --> 00:18:39.199
+and embrace other ecosystems.
+
+00:18:39.200 --> 00:18:43.479
+Recently Lazycat created a package called blink-search
+
+00:18:43.480 --> 00:18:45.679
+that leveraged similar ideas
+
+00:18:45.680 --> 00:18:48.919
+but an asynchronous search framework,
+
+00:18:48.920 --> 00:18:51.239
+as well as a package called deno-bridge
+
+00:18:51.240 --> 00:18:53.119
+that extended Emacs Lisp
+
+00:18:53.120 --> 00:18:56.439
+with Deno JavaScript TypeScript runtimes.
+
+00:18:56.440 --> 00:18:57.559
+Please check it out,
+
+00:18:57.560 --> 00:19:05.199
+if consider joining the development too!
+
+NOTE Thanks
+
+00:19:05.200 --> 00:19:08.599
+This is the entirety of my presentation, thanks for joining!
+
+00:19:08.600 --> 00:19:11.319
+Me and Lazycat will be available
+
+00:19:11.320 --> 00:19:20.240
+to answer questions on IRC and Etherpad.
diff --git a/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt
new file mode 100644
index 00000000..2c0a2ac5
--- /dev/null
+++ b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--answers.vtt
@@ -0,0 +1,1046 @@
+WEBVTT
+
+00:00.000 --> 00:04.000
+Thank you, Mohsen, very much for the great talk.
+
+00:04.000 --> 00:08.000
+People, if you have questions, please put them on the pad,
+
+00:08.000 --> 00:12.000
+or IRC, but preferably the pad, and then we'll also open this room
+
+00:12.000 --> 00:16.000
+in a minute or two so that if anyone who wants to join here and ask the questions
+
+00:16.000 --> 00:19.000
+directly to Mohsen, they could do that as well.
+
+00:19.000 --> 00:22.000
+Dear Mohsen, please take it away.
+
+00:22.000 --> 00:25.000
+Hello, greetings.
+
+00:25.000 --> 00:29.000
+Yeah, I don't see any questions yet,
+
+00:29.000 --> 00:35.000
+so let me add a few additional notes
+
+00:35.000 --> 00:39.000
+to what was in the presentation.
+
+00:39.000 --> 00:43.000
+In there, I make several points.
+
+00:43.000 --> 00:49.000
+Some of them are tactical, some are more strategic.
+
+00:49.000 --> 00:56.000
+Let me delve into the strategic message a bit.
+
+00:56.000 --> 01:02.000
+On the messaging capabilities of Emacs
+
+01:02.000 --> 01:08.000
+and the broader office environment capabilities of Emacs,
+
+01:08.000 --> 01:14.000
+we have a huge, incredibly powerful asset,
+
+01:14.000 --> 01:18.000
+but the amount of complexity
+
+01:18.000 --> 01:27.000
+and the surrounding configuration capabilities
+
+01:27.000 --> 01:32.000
+and hurdles and difficulties that are involved
+
+01:32.000 --> 01:41.000
+into making a really powerful environment for ourselves,
+
+01:41.000 --> 01:44.000
+we have a big obstacle,
+
+01:44.000 --> 01:49.000
+and that obstacle is that of integration.
+
+01:49.000 --> 01:58.000
+Over the past 40 years, the general model has been that of producing components
+
+01:58.000 --> 02:03.000
+where we do great stuff.
+
+02:03.000 --> 02:13.000
+We put various email MTAs and support them through Emacs.
+
+02:13.000 --> 02:21.000
+Additionally, we say that we want Emacs to be used on all platforms.
+
+02:21.000 --> 02:25.000
+If you're on Windows, there is Emacs support for it.
+
+02:25.000 --> 02:30.000
+If there is Mac OS, there is support for that.
+
+02:30.000 --> 02:35.000
+And of course, all of the GNU Linux stuff,
+
+02:35.000 --> 02:39.000
+capabilities and platforms.
+
+02:39.000 --> 02:46.000
+So all of this results into tremendous amounts of energy
+
+02:46.000 --> 02:54.000
+to go both on the developer side and on the user side to support everything.
+
+02:54.000 --> 02:59.000
+And that's what we have been doing over the past 40 years.
+
+02:59.000 --> 03:07.000
+What I am saying is that perhaps we should revisit this approach
+
+03:07.000 --> 03:16.000
+and consider moving towards creating a complete
+
+03:16.000 --> 03:23.000
+Libre Halal free software digital ecosystem for ourselves
+
+03:23.000 --> 03:28.000
+and consider Emacs as the usage environment
+
+03:28.000 --> 03:33.000
+of that totality of the digital ecosystem.
+
+03:33.000 --> 03:42.000
+This will solve many problems if we were to buy into such an approach.
+
+03:42.000 --> 03:47.000
+If we were to say that as the platform de facto
+
+03:47.000 --> 03:54.000
+and because of everything that is happening,
+
+03:54.000 --> 03:57.000
+Debian is a reasonable good choice.
+
+03:57.000 --> 04:06.000
+And then we would tie in all Emacs capabilities
+
+04:06.000 --> 04:13.000
+primarily and firstly to our own platform
+
+04:13.000 --> 04:17.000
+and start building on it.
+
+04:17.000 --> 04:28.000
+So let's take the situation with email in such a scenario.
+
+04:28.000 --> 04:34.000
+The main obstacles that we have right now is that
+
+04:34.000 --> 04:41.000
+GNU comes out with support for pretty much everything.
+
+04:41.000 --> 04:50.000
+But as the user, someone trying to buy into doing email on Emacs,
+
+04:50.000 --> 04:55.000
+which of these facilities, which of these features
+
+04:55.000 --> 04:58.000
+would be the right way to go?
+
+04:58.000 --> 05:07.000
+So what I am saying, having chosen our platform as Debian,
+
+05:07.000 --> 05:14.000
+what if we were to say that we would buy into something like Q-mail
+
+05:14.000 --> 05:24.000
+as the outgoing message model and just fully bring it in
+
+05:24.000 --> 05:30.000
+and consider it as the only and the default MTA
+
+05:30.000 --> 05:33.000
+for everything that we do?
+
+05:33.000 --> 05:39.000
+Suddenly a whole lot of complexity goes away.
+
+05:39.000 --> 05:45.000
+And similarly for bringing in email,
+
+05:45.000 --> 05:50.000
+what if we were to say that we have bought into offline IMAP
+
+05:50.000 --> 05:55.000
+and then the next really interesting piece is
+
+05:55.000 --> 05:59.000
+what should be our mailboxes?
+
+05:59.000 --> 06:08.000
+This notion that today de facto Gmail is the universal place
+
+06:08.000 --> 06:11.000
+where you get your mailboxes.
+
+06:11.000 --> 06:15.000
+And very easily we can, not very easily,
+
+06:15.000 --> 06:20.000
+but we certainly can support Gmail.
+
+06:20.000 --> 06:27.000
+But what if we were to get in the business of actually providing
+
+06:27.000 --> 06:32.000
+mailboxes for everyone and combine that with the platform
+
+06:32.000 --> 06:35.000
+and the main user agent?
+
+06:35.000 --> 06:43.000
+So that's really the strategic message that I want to,
+
+06:43.000 --> 06:48.000
+that I'm sending.
+
+06:48.000 --> 06:49.000
+Excellent, thank you.
+
+06:49.000 --> 06:52.000
+And I think in the meantime we have four questions
+
+06:52.000 --> 06:54.000
+on the panel already.
+
+06:54.000 --> 07:00.000
+Okay, I don't see them here.
+
+07:00.000 --> 07:03.000
+Oh, are you looking in the public chat here on the big blue button?
+
+07:03.000 --> 07:04.000
+Yes.
+
+07:04.000 --> 07:06.000
+Okay, let me put a link.
+
+07:06.000 --> 07:10.000
+So there's a separate pad where people are posting their questions.
+
+07:10.000 --> 07:13.000
+Okay, now I am seeing.
+
+07:13.000 --> 07:17.000
+Yeah, if it might be easier I could probably copy the questions over here.
+
+07:17.000 --> 07:20.000
+No, no, I am actually seeing them.
+
+07:20.000 --> 07:21.000
+Okay.
+
+07:21.000 --> 07:25.000
+Perfectly, perfectly okay.
+
+07:25.000 --> 07:31.000
+So the first question is something I have liked about Not Much
+
+07:31.000 --> 07:35.000
+is using Maildear makes searching fast
+
+07:35.000 --> 07:40.000
+and the knowledge that you have all your email period.
+
+07:40.000 --> 07:45.000
+Why GNU's over Not Much?
+
+07:45.000 --> 07:53.000
+As a side note, you have also Much Think for Not Much client
+
+07:53.000 --> 07:59.000
+and Jmap for more exotic normal clients.
+
+07:59.000 --> 08:04.000
+So I think there are two things going on here.
+
+08:04.000 --> 08:07.000
+Not Much is more than one thing.
+
+08:07.000 --> 08:13.000
+Not Much is a search, a mail search engine
+
+08:13.000 --> 08:20.000
+and also Not Much is a MUA.
+
+08:20.000 --> 08:30.000
+So in terms of choosing, certainly for search, for mail search capabilities,
+
+08:30.000 --> 08:33.000
+we should go with Not Much
+
+08:33.000 --> 08:40.000
+and there is GNU's search capabilities for Not Much in there.
+
+08:40.000 --> 08:48.000
+So what I am suggesting is that we stick to GNU's as an MUA,
+
+08:48.000 --> 08:52.000
+but the search capabilities that you are talking about
+
+08:52.000 --> 08:59.000
+or that the question mentions are certainly available.
+
+08:59.000 --> 09:05.000
+A second question is, so the idea is more about Emacs
+
+09:05.000 --> 09:10.000
+as a holistic computing experience with other packages and services
+
+09:10.000 --> 09:14.000
+rather than about email specifically
+
+09:14.000 --> 09:19.000
+as an alternative to something like Microsoft Office Suite.
+
+09:19.000 --> 09:23.000
+Yes, this is right on the point.
+
+09:23.000 --> 09:28.000
+What I am saying is that email by itself
+
+09:28.000 --> 09:33.000
+is not really all that meaningful or interesting
+
+09:33.000 --> 09:38.000
+and everywhere that you look in the proprietary model,
+
+09:38.000 --> 09:43.000
+you would see that the likes of Google and the likes of Microsoft
+
+09:43.000 --> 09:49.000
+do not view email as standalone capabilities.
+
+09:49.000 --> 09:52.000
+They see it as integrated with address book.
+
+09:52.000 --> 09:55.000
+They see it as integrated with calendar.
+
+09:55.000 --> 09:59.000
+They see it integrated with search.
+
+09:59.000 --> 10:06.000
+They see it as integrated with your to-do list and time management.
+
+10:06.000 --> 10:09.000
+So you are very right.
+
+10:09.000 --> 10:13.000
+The question is right on point.
+
+10:13.000 --> 10:18.000
+Email by itself is not significant
+
+10:18.000 --> 10:26.000
+and the reason why Emacs is the right place to do email
+
+10:26.000 --> 10:29.000
+is because Emacs is the kitchen sink.
+
+10:29.000 --> 10:35.000
+It does absolutely everything and that is what you want.
+
+10:35.000 --> 10:38.000
+The third question is,
+
+10:38.000 --> 10:43.000
+early on you express misgivings about the Western copyright regime
+
+10:43.000 --> 10:46.000
+but you are using a GPL license.
+
+10:46.000 --> 10:49.000
+Is that a conflict?
+
+10:49.000 --> 10:52.000
+Great work by the way.
+
+10:52.000 --> 10:55.000
+No, I don't think it is a conflict.
+
+10:55.000 --> 11:04.000
+My position is that the Western intellectual property right regime
+
+11:04.000 --> 11:08.000
+is a colossal ownership mistake.
+
+11:08.000 --> 11:15.000
+Having said that, and I do call for its abolishment,
+
+11:15.000 --> 11:21.000
+having said that, it is unrealistic to assume or recognize
+
+11:21.000 --> 11:26.000
+that just because I say it and just because I believe it,
+
+11:26.000 --> 11:34.000
+in fact it will be abolished or that a significant change would happen,
+
+11:34.000 --> 11:38.000
+particularly in the Western world.
+
+11:38.000 --> 11:44.000
+So in the Western context, what can we do?
+
+11:44.000 --> 11:46.000
+What should we do?
+
+11:46.000 --> 11:52.000
+What I am saying there is that particularly in the context of services,
+
+11:52.000 --> 12:00.000
+all licenses should be the strictest ones possible
+
+12:00.000 --> 12:07.000
+and the one that is codified is the Afero GPL license.
+
+12:07.000 --> 12:12.000
+So I have subjected all my work to the Afero GPL license.
+
+12:12.000 --> 12:27.000
+I know of GNU, how do you think about using it for packaging,
+
+12:27.000 --> 12:31.000
+configuring Emacs, your various packages,
+
+12:31.000 --> 12:37.000
+else you might look it up or NixOS.
+
+12:37.000 --> 12:46.000
+So the idea here is that when we go back to this full integration
+
+12:46.000 --> 12:49.000
+in the context of a digital ecosystem,
+
+12:49.000 --> 12:59.000
+a major challenge is that of bringing in all the necessary packages
+
+12:59.000 --> 13:01.000
+from different sources.
+
+13:01.000 --> 13:08.000
+So for example, in the context of male user agents,
+
+13:08.000 --> 13:13.000
+to put things together you need a set of apt packages
+
+13:13.000 --> 13:17.000
+coming from the DBN world.
+
+13:17.000 --> 13:25.000
+You need a set of pypi packages coming from the Python world
+
+13:25.000 --> 13:32.000
+and you need a set of list packages coming from Elisp archives.
+
+13:32.000 --> 13:38.000
+And likely you need a whole lot of others.
+
+13:38.000 --> 13:47.000
+You need possibly Node.js stuff and you also possibly need Ruby stuff.
+
+13:47.000 --> 13:54.000
+And this integration is going to be complex.
+
+13:54.000 --> 14:01.000
+The approach that I have taken is that of going best of breed
+
+14:01.000 --> 14:06.000
+in the context of each of the domains.
+
+14:06.000 --> 14:13.000
+So in Python, while there may be other packaging models,
+
+14:13.000 --> 14:16.000
+we go with pypi.
+
+14:16.000 --> 14:19.000
+On the platform, it's clear that it's apt.
+
+14:19.000 --> 14:25.000
+On the Linux, over the past five years, we have solved mostly
+
+14:25.000 --> 14:29.000
+that archiving machinery.
+
+14:29.000 --> 14:39.000
+If the question is, and I'm not familiar with the specifics
+
+14:39.000 --> 14:44.000
+of what was mentioned in terms of a unified packaging model,
+
+14:44.000 --> 14:54.000
+but if the question is that of a unified packaging integration model,
+
+14:54.000 --> 14:58.000
+I'd love to do it when it's mature and ready.
+
+14:58.000 --> 15:05.000
+At this point, I am going the route of best of breed selections
+
+15:05.000 --> 15:09.000
+within each domain.
+
+15:09.000 --> 15:15.000
+And if I chime in briefly, Mohsen, I think there was a typo in the question.
+
+15:15.000 --> 15:19.000
+They are asking about GNU Geeks or mentioning GNU Geeks
+
+15:19.000 --> 15:21.000
+and also potentially NixOS.
+
+15:21.000 --> 15:24.000
+And I think these two also very much go with your idea
+
+15:24.000 --> 15:28.000
+of tying everything together, these different package management systems.
+
+15:28.000 --> 15:33.000
+So GNU Geeks is a GNU Linux distribution like Debian is,
+
+15:33.000 --> 15:37.000
+but it's written in GNU Guile Lisp or Guile Scheme.
+
+15:37.000 --> 15:41.000
+And it's a very interesting concept where all of the packaging code
+
+15:41.000 --> 15:46.000
+and everything is done in GNU Guile Scheme and ties everything together
+
+15:46.000 --> 15:48.000
+and integrates great with Emacs.
+
+15:48.000 --> 15:51.000
+So that might be something worth checking out later on.
+
+15:51.000 --> 15:52.000
+Right.
+
+15:52.000 --> 16:01.000
+I had taken a very cursory look at that, and I'll keep my eyes open on it.
+
+16:01.000 --> 16:07.000
+I think in due course, maybe that's the way to go.
+
+16:07.000 --> 16:13.000
+There's one more question coming in.
+
+16:13.000 --> 16:21.000
+I let the person who is asking the question to complete it.
+
+16:21.000 --> 16:22.000
+Okay.
+
+16:22.000 --> 16:26.000
+Yeah, in the meantime, I'll also mention that I think we have about
+
+16:26.000 --> 16:32.000
+four more minutes of on-stream live Q&A time, at which point after that,
+
+16:32.000 --> 16:33.000
+the stream will move on.
+
+16:33.000 --> 16:38.000
+But you Mohsen and, of course, people watching are welcome to come here,
+
+16:38.000 --> 16:41.000
+join this Big Blue Button Room directly and ask the questions here
+
+16:41.000 --> 16:42.000
+or on the pad.
+
+16:42.000 --> 16:43.000
+Great.
+
+16:43.000 --> 16:44.000
+Great.
+
+16:44.000 --> 16:47.000
+So let me read the question.
+
+16:47.000 --> 16:54.000
+Is this being split up in a heavily configured server for email hosting
+
+16:54.000 --> 17:00.000
+and the thin client package for you locally client to integrate with your
+
+17:00.000 --> 17:02.000
+Emacs package?
+
+17:02.000 --> 17:11.000
+Maybe with a client thin Docker container for other packages,
+
+17:11.000 --> 17:15.000
+like not much locally?
+
+17:15.000 --> 17:23.000
+Actually, that is not really exactly what I am speaking of.
+
+17:23.000 --> 17:32.000
+The concept of a thin client is difficult to characterize.
+
+17:32.000 --> 17:41.000
+So if you have Emacs and everything else that you want to use as a usage
+
+17:41.000 --> 17:49.000
+environment along with your email system, if we want to call that a thin
+
+17:49.000 --> 17:59.000
+client, certainly that is what I call the usage environment.
+
+17:59.000 --> 18:10.000
+On the services side, I am not speaking of just one.
+
+18:10.000 --> 18:15.000
+I am speaking of support for multiple, of course, obviously,
+
+18:15.000 --> 18:22.000
+but having one that in my own case, for example, by name.net,
+
+18:22.000 --> 18:27.000
+is the primary support.
+
+18:27.000 --> 18:36.000
+And in terms of packaging that as a thin client instead of inside of a
+
+18:36.000 --> 18:45.000
+Docker, that is certainly possible, but it is not, I don't consider it as
+
+18:45.000 --> 18:47.000
+the only way to go.
+
+18:47.000 --> 18:56.000
+You can do your packaging any way you want and, well, you can do your
+
+18:56.000 --> 19:04.000
+packaging and then deliver it however you want.
+
+19:04.000 --> 19:11.000
+On these questions, if I was not on the point in understanding the
+
+19:11.000 --> 19:16.000
+questions and answering them correctly, if there are any follow-ups,
+
+19:16.000 --> 19:42.000
+I would be happy to take them.
+
+19:42.000 --> 19:51.000
+Yeah, if there are no other questions, I can perhaps bring up the
+
+19:51.000 --> 20:04.000
+presentation and maybe make a few additional points.
+
+20:04.000 --> 20:23.000
+So, I think one key slide in here is this one, where what I am saying
+
+20:23.000 --> 20:32.000
+is that we have been very good at producing components and that we
+
+20:32.000 --> 20:42.000
+really need to get into systems development or environments
+
+20:42.000 --> 20:46.000
+development as opposed to components development.
+
+20:46.000 --> 20:55.000
+And to raise that a bit more so that we can move towards having
+
+20:55.000 --> 21:01.000
+something that we can call a non-procreatory digital ecosystem,
+
+21:01.000 --> 21:10.000
+I think we need to work towards having frameworks for services.
+
+21:10.000 --> 21:17.000
+And while we have defined free software or what I call Libre
+
+21:17.000 --> 21:25.000
+Halal software, we don't have precise definitions for Libre services,
+
+21:25.000 --> 21:27.000
+free services.
+
+21:27.000 --> 21:32.000
+Free services is going to be a very bad name, because we want it to
+
+21:32.000 --> 21:34.000
+be commercial.
+
+21:34.000 --> 21:39.000
+We want people to pay for it as they use it.
+
+21:39.000 --> 21:45.000
+And so the natural name would be something like Libre services.
+
+21:45.000 --> 21:52.000
+And in that context, if you go to Libre services.org, you will see
+
+21:52.000 --> 22:00.000
+my definition of what that would mean, what non-proprietary
+
+22:00.000 --> 22:05.000
+codification of services would mean.
+
+22:05.000 --> 22:20.000
+Another slide perhaps to take a look at is this one, where I am
+
+22:20.000 --> 22:35.000
+making the case for not considering Emacs by itself as core of
+
+22:35.000 --> 22:43.000
+anything, but viewing and cultivating and introducing this
+
+22:43.000 --> 22:48.000
+concept of common agent and building on it.
+
+22:48.000 --> 22:58.000
+Let me go see if there are any other questions.
+
+22:58.000 --> 23:08.000
+Yeah, I didn't see any more.
+
+23:08.000 --> 23:12.000
+May I drop in and ask a question directly?
+
+23:12.000 --> 23:14.000
+Of course.
+
+23:14.000 --> 23:21.000
+Okay, so I have a question regarding combining GNU and NotMuch.
+
+23:21.000 --> 23:23.000
+Yes.
+
+23:23.000 --> 23:30.000
+So do you combine tagging facilities of NotMuch into GNU as well?
+
+23:30.000 --> 23:32.000
+Sorry, can you repeat that?
+
+23:32.000 --> 23:37.000
+Do you also integrate tagging facilities of NotMuch into GNU?
+
+23:37.000 --> 23:41.000
+Tagging? I have not done that.
+
+23:41.000 --> 23:46.000
+Okay, because I was looking into combining GNU and NotMuch at some point,
+
+23:46.000 --> 23:53.000
+but what stopped me from continuing is that NotMuch is mostly about tags,
+
+23:53.000 --> 24:00.000
+and then GNU has a search option for NotMuch, using NotMuch.
+
+24:00.000 --> 24:05.000
+But how do you add tags from GNU?
+
+24:05.000 --> 24:11.000
+Right, in terms of continuous use, it's only recently that I'm doing that,
+
+24:11.000 --> 24:16.000
+and I don't think it means that it is not doable.
+
+24:16.000 --> 24:22.000
+It's just that in my own case, I haven't done it.
+
+24:22.000 --> 24:24.000
+Yeah, it's certainly doable.
+
+24:24.000 --> 24:30.000
+You present this unified system that brings everything together.
+
+24:30.000 --> 24:33.000
+So I was wondering if it's already implemented.
+
+24:33.000 --> 24:44.000
+Yeah, I must say all that I do is I want to say that that is the direction that I want to go.
+
+24:44.000 --> 24:45.000
+Okay.
+
+24:45.000 --> 24:47.000
+We have a long way to go.
+
+24:47.000 --> 24:58.000
+It's mostly a question of, and that is not the general direction and formalization that has been happening.
+
+24:58.000 --> 25:06.000
+So more or less, a lot of what I mentioned in there is not fully baked.
+
+25:06.000 --> 25:17.000
+Okay, thanks.
+
+25:17.000 --> 25:20.000
+I think we also have a question here in chat, Mohsen.
+
+25:20.000 --> 25:22.000
+I wasn't sure if you already saw or answered it or not.
+
+25:22.000 --> 25:24.000
+Sorry.
+
+25:24.000 --> 25:28.000
+No, let me, is it on the chat?
+
+25:28.000 --> 25:30.000
+Yes, public chat here on big blue button.
+
+25:30.000 --> 25:31.000
+Question by Thuna.
+
+25:31.000 --> 25:34.000
+Oh, public chat on the big blue button.
+
+25:34.000 --> 25:38.000
+Yeah.
+
+25:38.000 --> 25:41.000
+Can you expand on definition of Libre Halal?
+
+25:41.000 --> 25:42.000
+I'm a bit lost.
+
+25:42.000 --> 25:44.000
+Yes.
+
+25:44.000 --> 25:46.000
+Yes, yes, yes, yes.
+
+25:46.000 --> 26:05.000
+So, you see, we have labels of free software that are well established, and we have definitions of open source that are well established.
+
+26:05.000 --> 26:20.000
+And both of these are in the Western context and from the perspective of Western folks.
+
+26:20.000 --> 26:29.000
+What I am saying is that neither free software nor open source are the right labels.
+
+26:29.000 --> 26:37.000
+What we are looking for is actually ethical software, not free software.
+
+26:37.000 --> 26:49.000
+Freedom is something that is wonderful and great, but it may not be the right thing to be free.
+
+26:49.000 --> 27:01.000
+What I am saying here is that a manner of existence of software is the key concept.
+
+27:01.000 --> 27:06.000
+Allow me to share the screen.
+
+27:06.000 --> 27:09.000
+Just one moment.
+
+27:09.000 --> 27:18.000
+And maybe point you to a place where I could answer it in depth.
+
+27:18.000 --> 27:27.000
+It is certainly not a topic that I could do justice to in just a moment.
+
+27:27.000 --> 27:51.000
+So, if you were to look for nature of polyexistentials and Googling that would take you there, there is a 250-page document there that says why I believe the Western intellectual property rights is wrong.
+
+27:51.000 --> 28:10.000
+And it goes through and says, well, if polyexistentials are not to be governed by the intellectual property rights regime, then what is the right manner of governing them?
+
+28:10.000 --> 28:21.000
+So, what is the right manner of existence of software? And what label should we use for that?
+
+28:21.000 --> 28:41.000
+And in here, there is a whole section that about 10 pages or so that describes what Halal means and why the Libre Halal label is the right label.
+
+28:41.000 --> 29:01.000
+So, let me perhaps point you to that section.
+
+29:01.000 --> 29:11.000
+Yeah, this is on the Cure section.
+
+29:11.000 --> 29:32.000
+I think if you were to go to chapter 12, that would be a good place.
+
+29:32.000 --> 29:37.000
+Do you happen to have the link to this page handy, Mohsan?
+
+29:37.000 --> 29:46.000
+Yeah, it is included in the presentation. Let me go there very quickly.
+
+29:46.000 --> 29:48.000
+Oops, sorry.
+
+29:48.000 --> 29:52.000
+Just one moment.
+
+29:52.000 --> 30:05.000
+Yeah, it's in the presentation with a QR code. So, let me look it up and bring it back up again.
+
+30:05.000 --> 30:13.000
+Thank you.
+
+30:13.000 --> 30:25.000
+So, the link for that document is on slide 13.
+
+30:25.000 --> 30:29.000
+Can you see it?
+
+30:29.000 --> 30:38.000
+I'm not seeing your slides, but okay, it is getting shared again. Yep. Thanks.
+
+30:38.000 --> 30:39.000
+Yeah, sorry. Go ahead.
+
+30:39.000 --> 30:42.000
+Yeah, that is the...
+
+30:42.000 --> 30:47.000
+Oh, very good. Somebody else also threw it up on there.
+
+30:47.000 --> 30:49.000
+But it's a little bit different.
+
+30:49.000 --> 31:01.000
+Yes, yes.
+
+31:01.000 --> 31:18.000
+Yeah, it's PLPC 120.0.33.
+
+31:18.000 --> 31:24.000
+I mean, any other questions? Yes, thank you.
+
+31:24.000 --> 31:27.000
+Thanks. Yeah, I don't see any other questions on the panel.
+
+31:27.000 --> 31:30.000
+Oh, there's one new question here from Thuna again.
+
+31:30.000 --> 31:35.000
+What is the scope of what you are imagining? Just software?
+
+31:35.000 --> 31:42.000
+No, certainly not just software. It is software and services.
+
+31:42.000 --> 31:49.000
+So, that is, I think, the next challenge and the next step for us.
+
+31:49.000 --> 32:03.000
+We have to think of ways of competing with Gmail and Outlook.com.
+
+32:03.000 --> 32:07.000
+So, services are certainly within the scope.
+
+32:07.000 --> 32:14.000
+In the abstract sense of what polyexistentials are.
+
+32:14.000 --> 32:18.000
+So, polyexistentials are things that exist in multiples.
+
+32:18.000 --> 32:24.000
+So, any form of knowledge is within the scope.
+
+32:24.000 --> 32:48.000
+And that goes to medications, goes to anything that is patentable and art and anything that is copyable.
+
+32:48.000 --> 33:03.000
+Yes, NFTs are a form of creating mono-existentials out of polyexistentials.
+
+33:03.000 --> 33:13.000
+So, by the time that you create an NFT, it is no longer the subject of what I am talking about.
+
+33:13.000 --> 33:23.000
+But the process of creating mono-existentials off of polyexistentials is what we should be discussing.
+
+33:23.000 --> 33:36.000
+There is a section in that book on that topic as well with the same subject of how one goes about creating that.
+
+33:36.000 --> 33:44.000
+You see, any sort of a name could be thought of as an NFT.
+
+33:44.000 --> 33:54.000
+So, if you think of our domain name system, although it is in the realm of software and services,
+
+33:54.000 --> 34:17.000
+what you have emacsconf.org that has become unique and it's a mono-existential.
+
+34:17.000 --> 34:30.000
+I think my key message here is this vocabulary of polyexistence and mono-existence and mixed existence,
+
+34:30.000 --> 34:38.000
+which is the novelty in the stuff that I have written.
+
+34:38.000 --> 34:43.000
+We all have understood these for a long time.
+
+34:43.000 --> 35:07.000
+It's a question of coming up with the right vocabulary to express them with precision that remains and then acting on them.
+
+35:07.000 --> 35:08.000
+Excellent.
+
+35:08.000 --> 35:15.000
+As a lot of people have said, I think both here and also in IRC, there is a lot of information and material to digest from this talk
+
+35:15.000 --> 35:21.000
+and to try to think really deeply about for the coming weeks and months.
+
+35:21.000 --> 35:24.000
+So, that's great.
+
+35:24.000 --> 35:28.000
+Thank you.
+
+35:28.000 --> 35:30.000
+We can keep this session going as long as you want.
+
+35:30.000 --> 35:33.000
+The stream has already moved on, but here it is open.
+
+35:33.000 --> 35:40.000
+If folks have any more questions, feel free to post them here or on the separate pad page.
+
+35:40.000 --> 35:46.000
+Yeah, or if not, then we can all drop off at some point.
+
+35:46.000 --> 35:48.000
+Sure.
+
+35:48.000 --> 35:52.000
+If there are any questions, I'll be happy to answer them.
+
+35:52.000 --> 36:07.000
+Otherwise, perhaps we could go and watch the rest.
+
+36:23.000 --> 36:31.000
+Yeah, I mean, I think perhaps it's a good thing to consider the session complete.
+
+36:31.000 --> 36:33.000
+Sure, sounds good to me.
+
+36:33.000 --> 36:36.000
+Thank you again very much Mohsen, really appreciate it.
+
+36:36.000 --> 36:38.000
+Thank you.
+
+36:38.000 --> 36:39.000
+Cheers, take care.
+
+36:39.000 --> 36:57.000
+Take care.
+
diff --git a/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt
new file mode 100644
index 00000000..5a0a3ee0
--- /dev/null
+++ b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main--chapters.vtt
@@ -0,0 +1,80 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:01:41.079
+Introduction
+
+00:01:41.080 --> 00:03:33.599
+Mail and the digital ecosystem
+
+00:03:33.600 --> 00:05:32.399
+Platformization and Mail
+
+00:05:32.400 --> 00:06:19.799
+Contours of this presentation
+
+00:06:19.800 --> 00:06:42.839
+Anatomy of monolithic MUAs
+
+00:06:42.840 --> 00:07:22.959
+Existing Elisp mail libraries and modes
+
+00:07:22.960 --> 00:08:22.319
+Concept of a split-MUA
+
+00:08:22.320 --> 00:09:42.399
+Emacs and the culture of DIY split-MUAs
+
+00:09:42.400 --> 00:13:10.879
+A glimpse of the bigger picture
+
+00:13:10.880 --> 00:17:31.319
+The full ByStar story
+
+00:17:31.320 --> 00:19:20.119
+ByStar DE context, assets, and terminology
+
+00:19:20.120 --> 00:20:21.759
+MARMEE parts list
+
+00:20:21.760 --> 00:20:47.679
+Blee-Gnus parts list
+
+00:20:47.680 --> 00:22:08.839
+Deep integration of BISOS-MARMEE and Blee-Gnus
+
+00:22:08.840 --> 00:23:56.559
+qmail and bystar-qmail
+
+00:23:56.560 --> 00:25:10.759
+MARMEE: common-agent for split-MUA implementations
+
+00:25:10.760 --> 00:26:17.199
+Obtaining, installing, and configuring MARMEE
+
+00:26:17.200 --> 00:27:20.479
+Installing MARMEE
+
+00:27:20.480 --> 00:29:47.759
+Emacs inside of ByStar
+
+00:29:47.760 --> 00:31:36.959
+Emacs common-agent models and interfaces
+
+00:31:36.960 --> 00:32:35.279
+Evolution of Gnus with MARMEE
+
+00:32:35.280 --> 00:33:11.319
+X-Message-SMTP-Method: qmail
+
+00:33:11.320 --> 00:33:39.319
+X-Message-Send-Method
+
+00:33:39.320 --> 00:34:39.599
+Shared common-agents configuration and secrets management
+
+00:34:39.600 --> 00:35:34.079
+Evolution of message-mode into message-polymode
+
+00:35:34.080 --> 00:37:30.960
+Two vertical-slice mail use cases
diff --git a/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt
new file mode 100644
index 00000000..e39711df
--- /dev/null
+++ b/2022/captions/emacsconf-2022-mail--revisiting-the-anatomy-of-emacs-mail-user-agents--mohsen-banan--main.vtt
@@ -0,0 +1,1757 @@
+WEBVTT captioned by mohsen
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:09.719
+Greetings. Salaam. This is Mohsen Banan. محسن بنان.
+
+00:00:09.720 --> 00:00:12.559
+I am a software and internet engineer.
+
+00:00:12.560 --> 00:00:14.519
+I have been interested in email and
+
+00:00:14.520 --> 00:00:17.199
+Emacs for a very long time.
+
+00:00:17.200 --> 00:00:21.159
+My interest in email started with X.400
+
+00:00:21.160 --> 00:00:27.599
+and the Red and Blue CCITT books -- circa 1988.
+
+00:00:27.600 --> 00:00:31.999
+Early on, in the very early 1990s, I jumped ship
+
+00:00:32.000 --> 00:00:35.279
+and joined the Internet email movement.
+
+00:00:35.280 --> 00:00:38.399
+I am the primary author of two mobile email
+
+00:00:38.400 --> 00:00:45.839
+related Internet RFCs, RFC-2188 and RFC-2524.
+
+00:00:45.840 --> 00:00:49.919
+My interest in Emacs started in 1986 --
+
+00:00:49.920 --> 00:00:54.959
+It was Emacs version 17 then. By around 1988
+
+00:00:54.960 --> 00:00:58.479
+when Emacs version 18 was well in place,
+
+00:00:58.480 --> 00:01:01.799
+I started living inside of Emacs.
+
+00:01:01.800 --> 00:01:06.479
+My primary digital environment has been Emacs ever since.
+
+00:01:06.480 --> 00:01:11.319
+It has been a good life.
+
+00:01:11.320 --> 00:01:16.999
+It turns out that Emacs and email mix up really well.
+
+00:01:17.000 --> 00:01:21.519
+Here, in this presentation and in the context of
+
+00:01:21.520 --> 00:01:26.799
+Revisiting The Anatomy of Emacs Mail User Agents,
+
+00:01:26.800 --> 00:01:30.319
+With MARMEE (Multi-Account Resident
+
+00:01:30.320 --> 00:01:33.399
+Message Exchange Environment)
+
+00:01:33.400 --> 00:01:35.559
+I am offering my thoughts on this topic
+
+00:01:35.560 --> 00:01:41.079
+in this Emacs Conference 2022.
+
+NOTE Mail and the digital ecosystem
+
+00:01:41.080 --> 00:01:43.359
+Long ago, I asked myself:
+
+00:01:43.360 --> 00:01:49.119
+"What should my ultimate mail environment be?"
+
+00:01:49.120 --> 00:01:52.140
+Over the past 20+ years, I have been exploring
+
+00:01:52.141 --> 00:01:58.519
+the concept of the "Ultimate Mail User Agent (MUA)".
+
+00:01:58.520 --> 00:02:01.439
+We do care about privacy, autonomy,
+
+00:02:01.440 --> 00:02:05.039
+morality, ethics, society and philosophy,
+
+00:02:05.040 --> 00:02:10.679
+so from the get go, proprietary (Haraam) environments
+
+00:02:10.680 --> 00:02:14.199
+such as Microsoft Office's Outlook
+
+00:02:14.200 --> 00:02:20.159
+and Google Office's Gmail were non-starters for me.
+
+00:02:20.160 --> 00:02:23.159
+But these are significant realities
+
+00:02:23.160 --> 00:02:27.879
+and we need to deal with these realities.
+
+00:02:27.880 --> 00:02:30.199
+Notice how Microsoft and Google
+
+00:02:30.200 --> 00:02:36.079
+have both framed their MUAs in the context of "office".
+
+00:02:36.080 --> 00:02:38.719
+That type of framing is correct.
+
+00:02:38.720 --> 00:02:41.719
+an MUA must be fully integrated
+
+00:02:41.720 --> 00:02:46.559
+in the totality of one's digital ecosystem.
+
+00:02:46.560 --> 00:02:49.759
+So, the Ultimate Mail User Agent
+
+00:02:49.760 --> 00:02:53.399
+must be part of the Ultimate Usage Environment
+
+00:02:53.400 --> 00:02:57.599
+of the Ultimate Digital Ecosystem.
+
+00:02:57.600 --> 00:03:02.799
+In the non-proprietary (Halaal) universe, clearly
+
+00:03:02.800 --> 00:03:07.199
+the ultimate usage environment is Emacs.
+
+00:03:07.200 --> 00:03:10.879
+Emacs is today's most potent and convivial
+
+00:03:10.880 --> 00:03:15.159
+non-proprietary usage environment.
+
+00:03:15.160 --> 00:03:19.399
+So, clearly, the ultimate Mail User Agent
+
+00:03:19.400 --> 00:03:22.879
+must be an integral part of Emacs.
+
+NOTE Emacs and mail
+
+00:03:22.880 --> 00:03:24.157
+Having reached that conclusion,
+
+00:03:24.158 --> 00:03:28.124
+we then need to determine the specifics
+
+00:03:28.125 --> 00:03:33.599
+of the shape and the anatomy of Emacs' MUAs.
+
+00:03:33.600 --> 00:03:36.039
+We could have arrived at this conclusion
+
+00:03:36.040 --> 00:03:38.239
+from the reverse direction as well.
+
+00:03:38.240 --> 00:03:41.599
+Zawinski's Law states:
+
+00:03:41.600 --> 00:03:46.479
+Every program attempts to expand until it can read mail.
+
+00:03:46.480 --> 00:03:49.119
+Those programs which cannot so expand
+
+00:03:49.120 --> 00:03:52.679
+are replaced by ones which can.
+
+00:03:52.680 --> 00:03:56.719
+Jamie's point is very simple and obvious.
+
+00:03:56.720 --> 00:03:59.759
+The "App" that you "live in" all day
+
+00:03:59.760 --> 00:04:05.439
+should be your MUA and mail environment.
+
+00:04:05.440 --> 00:04:09.559
+I ask those who jumped ship, who abandoned Emacs
+
+00:04:09.560 --> 00:04:15.879
+in favor of VS Code: What about mail?
+
+00:04:15.880 --> 00:04:21.279
+Long ago, Emacs expanded to including MUAs.
+
+00:04:21.280 --> 00:04:27.039
+In fact there are many Emacs MUAs that you can choose from.
+
+00:04:27.040 --> 00:04:30.599
+If you are already hip with Emacs And Linux,
+
+00:04:30.600 --> 00:04:34.639
+you should definitely consider doing email in Emacs.
+
+00:04:34.640 --> 00:04:39.079
+But if you are not already hip with Emacs,
+
+00:04:39.080 --> 00:04:43.359
+I mean for new Emacs users, unfortunately,
+
+00:04:43.360 --> 00:04:48.599
+setting up and using email is not straight forward.
+
+00:04:48.600 --> 00:04:54.519
+We (I mean, Emacs developers) should work on that!
+
+00:04:54.520 --> 00:04:57.359
+Emacs offers a good number of MUAs with
+
+00:04:57.360 --> 00:05:01.959
+different characteristics to suit differing tastes.
+
+00:05:01.960 --> 00:05:06.119
+As of 2022, you can choose from the following MUAs:
+
+00:05:06.120 --> 00:05:15.079
+Gnus, VM, WanderLust, Mew, mu4e, notmuch.el, mh-e and Rmail.
+
+00:05:15.080 --> 00:05:17.719
+Over the years I have tried several of these
+
+00:05:17.720 --> 00:05:20.119
+and eventually landed on Gnus.
+
+00:05:20.120 --> 00:05:25.519
+The relevance column in this table simply and only
+
+00:05:25.520 --> 00:05:28.079
+reflects my taste.
+
+00:05:28.080 --> 00:05:32.399
+Throughout the rest of this presentation, I focus on Gnus.
+
+NOTE The audience for this presentation
+
+00:05:32.400 --> 00:05:36.199
+I have 3 types of audiences in mind for this presentation.
+
+00:05:36.200 --> 00:05:39.959
+First, if you are already using Emacs
+
+00:05:39.960 --> 00:05:42.439
+as more than an editor,
+
+00:05:42.440 --> 00:05:47.399
+it makes good sense for you to also use Emacs as your MUA.
+
+00:05:47.400 --> 00:05:50.759
+There may well be some relevant information here for you
+
+00:05:50.760 --> 00:05:52.319
+in that situation.
+
+00:05:52.320 --> 00:05:57.599
+Second, for those interested in philosophy of Emacs,
+
+00:05:57.600 --> 00:06:00.759
+I go on some bigger picture tangents
+
+00:06:00.760 --> 00:06:02.839
+that may be of value to you.
+
+00:06:02.840 --> 00:06:08.839
+Third, I address some Emacs developers with some feedback,
+
+00:06:08.840 --> 00:06:11.319
+some suggestions, and some requests.
+
+00:06:11.320 --> 00:06:14.599
+The general model here is that
+
+00:06:14.600 --> 00:06:17.079
+we would collectively work towards
+
+00:06:17.080 --> 00:06:19.799
+improving what is on the table.
+
+NOTE Monolithic mail user agents
+
+00:06:19.800 --> 00:06:22.719
+When a Mail User Agent is self-contained
+
+00:06:22.720 --> 00:06:26.519
+and includes implementation of mail protocols,
+
+00:06:26.520 --> 00:06:29.079
+we call it a Monolithic-MUA.
+
+00:06:29.080 --> 00:06:33.879
+Just as it is with the physical mail postal service,
+
+00:06:33.880 --> 00:06:36.919
+sending mail and receiving mail
+
+00:06:36.920 --> 00:06:40.639
+are fundamentally separate activities.
+
+00:06:40.640 --> 00:06:42.839
+And then there is mail processing.
+
+00:06:42.840 --> 00:06:45.959
+Based on these categorizations,
+
+00:06:45.960 --> 00:06:49.679
+Emacs has a set of mature libraries
+
+00:06:49.680 --> 00:06:53.359
+for composing mail, sending mail, and receiving mail.
+
+00:06:53.360 --> 00:06:58.119
+These are all independently well-documented
+
+00:06:58.120 --> 00:07:02.479
+and are part of the basic emacs Distribution.
+
+00:07:02.480 --> 00:07:06.239
+Emacs MUAs then use these common libraries
+
+00:07:06.240 --> 00:07:09.519
+to process mail (each somewhat differently).
+
+00:07:09.520 --> 00:07:15.399
+The primary benefit of the Monolithic-MUA approach
+
+00:07:15.400 --> 00:07:19.599
+is that Emacs MUAs then become self-contained
+
+00:07:19.600 --> 00:07:22.959
+and therefore multi-platform.
+
+NOTE Split mail user agents
+
+00:07:22.960 --> 00:07:25.559
+But, when it comes to the question of merits of
+
+00:07:25.560 --> 00:07:30.559
+implementation of mail protocols in Elisp inside of Emacs,
+
+00:07:30.560 --> 00:07:33.959
+there is also another approach:
+
+00:07:33.960 --> 00:07:36.159
+that of a Split-MUA.
+
+00:07:36.160 --> 00:07:40.559
+Concept of a split-MUA is that of
+
+00:07:40.560 --> 00:07:44.959
+splitting the MUA into two different parts:
+
+00:07:44.960 --> 00:07:47.159
+One being the usage environment,
+
+00:07:47.160 --> 00:07:50.319
+and the other being mail protocols processing.
+
+00:07:50.320 --> 00:07:54.719
+The interface between these can be either
+
+00:07:54.720 --> 00:07:57.839
+direct (the upper box)
+
+00:07:57.840 --> 00:08:00.279
+or through protocols (the lower box).
+
+00:08:00.280 --> 00:08:05.159
+With Gnus, we primarily use the direct interface.
+
+00:08:05.160 --> 00:08:09.639
+The split-MUA model has many advantages
+
+00:08:09.640 --> 00:08:12.599
+over the monolithic-MUA model.
+
+00:08:12.600 --> 00:08:17.279
+With Split-MUAs, your messages are local,
+
+00:08:17.280 --> 00:08:19.839
+you can search them privately
+
+00:08:19.840 --> 00:08:22.319
+and access to your email is faster.
+
+NOTE Gnus can be both
+
+00:08:22.320 --> 00:08:28.119
+Gnus can be used as both a Monolithic-MUA
+
+00:08:28.120 --> 00:08:30.599
+and also as a Split-MUA.
+
+00:08:30.600 --> 00:08:35.399
+Gnus and other Emacs MUAs are flexible enough
+
+00:08:35.400 --> 00:08:39.119
+to allow you to create your own split-MUA.
+
+00:08:39.120 --> 00:08:42.519
+For outgoing mail, Gnus can
+
+00:08:42.520 --> 00:08:45.119
+invoke a sendmail-like interface program.
+
+00:08:45.120 --> 00:08:50.007
+For incoming mail, Gnus can access Maildirs directly
+
+00:08:50.008 --> 00:08:53.724
+and let other programs imap-retrieve
+
+00:08:53.725 --> 00:08:56.439
+and update into maildirs.
+
+00:08:56.440 --> 00:08:59.719
+You can then search through your maildirs
+
+00:08:59.720 --> 00:09:01.374
+locally and privately
+
+00:09:01.375 --> 00:09:04.559
+with various mail-oriented search engines,
+
+00:09:04.560 --> 00:09:07.319
+and many have done so.
+
+00:09:07.320 --> 00:09:11.399
+For example, what we are seeing on this slide
+
+00:09:11.400 --> 00:09:15.879
+is from a 2014 Do It Yourself (DIY) recipe
+
+00:09:15.880 --> 00:09:20.319
+that one of our fellow Emacs conference participants,
+
+00:09:20.320 --> 00:09:24.879
+Adolfo, had published at the mentioned URL.
+
+00:09:24.880 --> 00:09:29.719
+The recipe in that slide is based on the following tools:
+
+00:09:29.720 --> 00:09:35.079
+mbsync, mu, mu4e, and msmtp.
+
+00:09:35.080 --> 00:09:38.279
+All our choices are different.
+
+00:09:38.280 --> 00:09:42.399
+There are many such recipes out there on the web.
+
+NOTE Proprietary universes
+
+00:09:42.400 --> 00:09:46.199
+So, here, I don't want to provide
+
+00:09:46.200 --> 00:09:50.439
+yet another Emacs Split-MUA recipe.
+
+00:09:50.440 --> 00:09:51.559
+I want to do more.
+
+00:09:51.560 --> 00:09:56.679
+Instead, I want to target the contours of the ultimate MUA
+
+00:09:56.680 --> 00:10:01.319
+in the non-proprietary universe of digital ecosystems.
+
+00:10:01.320 --> 00:10:05.439
+But, first, let's take a look at what is
+
+00:10:05.440 --> 00:10:07.479
+happening in the proprietary universe.
+
+00:10:07.480 --> 00:10:11.439
+The 5 big American proprietary tech companies
+
+00:10:11.440 --> 00:10:14.399
+(Google, Microsoft, Apple, Facebook and Amazon)
+
+00:10:14.400 --> 00:10:20.439
+have created 5 competing enclaves as mostly separate
+
+00:10:20.440 --> 00:10:22.999
+and isolated digital ecosystem.
+
+00:10:23.000 --> 00:10:27.839
+In this slide, I am focusing on the first 3
+
+00:10:27.840 --> 00:10:31.439
+and each of their office and email environments.
+
+00:10:31.440 --> 00:10:36.319
+Let's clearly recognize that the economic model
+
+00:10:36.320 --> 00:10:40.159
+of these proprietary digital ecosystems is:
+
+00:10:40.160 --> 00:10:42.159
+"Surveillance Capitalism".
+
+00:10:42.160 --> 00:10:45.799
+So, when any of us goes there to get
+
+00:10:45.800 --> 00:10:47.959
+a free-of-charge email account,
+
+00:10:47.960 --> 00:10:53.039
+he has chosen to voluntarily forgo much of his privacy.
+
+00:10:53.040 --> 00:10:55.799
+And many have done so.
+
+00:10:55.800 --> 00:10:59.919
+Sadly, the rest of the world is becoming
+
+00:10:59.920 --> 00:11:02.719
+Americanized through the American Internet.
+
+00:11:02.720 --> 00:11:08.439
+As of 2022, almost %90 of Facebook's
+
+00:11:08.440 --> 00:11:11.959
+daily active users come from outside of the US.
+
+00:11:11.960 --> 00:11:17.159
+Also, with respect to email, each of the enclaves
+
+00:11:17.160 --> 00:11:20.039
+have MUAs that are fully integrated
+
+00:11:20.040 --> 00:11:22.439
+in their digital ecosystems
+
+00:11:22.440 --> 00:11:24.599
+in the form of an office environment
+
+00:11:24.600 --> 00:11:29.839
+comprising of address book, calendar, time management
+
+00:11:29.840 --> 00:11:33.199
+and planning tools and multi-lingual authoring
+
+00:11:33.200 --> 00:11:36.239
+and various other integrated tools.
+
+NOTE Non-proprietary universes
+
+00:11:36.240 --> 00:11:40.839
+Now, let's focus on the right side of this picture.
+
+00:11:40.840 --> 00:11:43.519
+On the non-proprietary side,
+
+00:11:43.520 --> 00:11:46.239
+based on the Western FLOSS model,
+
+00:11:46.240 --> 00:11:49.479
+we have ended up with lots of components.
+
+00:11:49.480 --> 00:11:52.239
+We have Debian as a platform,
+
+00:11:52.240 --> 00:11:58.919
+we have Emacs as an editor-centered office environment
+
+00:11:58.920 --> 00:12:03.439
+and we have Gnus as an incredibly powerful MUA.
+
+00:12:03.440 --> 00:12:07.839
+But on the non-proprietary side we don't have anything
+
+00:12:07.840 --> 00:12:12.079
+that can reasonably be considered a digital ecosystem.
+
+00:12:12.080 --> 00:12:16.439
+I mean, the services aspect is missing.
+
+NOTE By*
+
+00:12:16.440 --> 00:12:20.799
+Over the past two decades I have created
+
+00:12:20.800 --> 00:12:24.399
+quite an elaborate digital ecosystem for myself.
+
+00:12:24.400 --> 00:12:26.759
+It is called: By*.
+
+00:12:26.760 --> 00:12:30.839
+The Libre-Halaal ByStar Digital Ecosystem
+
+00:12:30.840 --> 00:12:35.439
+is being built to provide autonomy-oriented services
+
+00:12:35.440 --> 00:12:37.359
+on internet scale.
+
+00:12:37.360 --> 00:12:42.919
+The * in ByStar stands for Unix's globbing symbol,
+
+00:12:42.920 --> 00:12:46.919
+signifying that our scope is everything.
+
+00:12:46.920 --> 00:12:52.039
+Notice in this bigger picture that in the red box,
+
+00:12:52.040 --> 00:12:58.439
+our focus remains to be Emacs, Gnus and the ultimate MUA.
+
+00:12:58.440 --> 00:13:03.439
+I am not here to sell you ByStar, but perhaps
+
+00:13:03.440 --> 00:13:06.239
+you should be in the market for something like that.
+
+00:13:06.240 --> 00:13:10.879
+We need non-proprietary digital ecosystems.
+
+00:13:10.880 --> 00:13:13.359
+Very briefly, I'll give you
+
+00:13:13.360 --> 00:13:16.319
+some pointers to the full ByStar story.
+
+00:13:16.320 --> 00:13:23.239
+The full ByStar story is a 250 plus pages book titled:
+
+00:13:23.240 --> 00:13:26.079
+Nature Of Polyexistentials,
+
+00:13:26.080 --> 00:13:28.399
+Basis For Abolishment Of
+
+00:13:28.400 --> 00:13:31.319
+The Western Intellectual Property Rights Regime,
+
+00:13:31.320 --> 00:13:33.479
+And Introduction Of
+
+00:13:33.480 --> 00:13:36.359
+The Libre-Halaal ByStar Digital Ecosystem.
+
+00:13:36.360 --> 00:13:42.039
+I have it self-published on my own ByName public web page.
+
+00:13:42.040 --> 00:13:46.639
+The ByStar story starts with understanding of the
+
+00:13:46.640 --> 00:13:48.959
+Nature Of Polyexistentials.
+
+00:13:48.960 --> 00:13:53.839
+Polyexistentials inherently exist in multiples.
+
+00:13:53.840 --> 00:13:56.959
+Software is a polyexistential.
+
+00:13:56.960 --> 00:14:01.919
+Polyexistentials are naturally non-scarce,
+
+00:14:01.920 --> 00:14:06.279
+and making polyexistential artificially scarce,
+
+00:14:06.280 --> 00:14:08.599
+which is what the Western
+
+00:14:08.600 --> 00:14:11.119
+intellectual property rights regime does,
+
+00:14:11.120 --> 00:14:13.599
+is counter to nature.
+
+00:14:13.600 --> 00:14:17.639
+Polyexistentials are unownable
+
+00:14:17.640 --> 00:14:20.039
+and should not be considered property.
+
+00:14:20.040 --> 00:14:25.079
+The Western IPR regime is in conflict with nature.
+
+00:14:25.080 --> 00:14:29.039
+But, the book is more than just philosophy.
+
+00:14:29.040 --> 00:14:32.359
+In that book I also cover
+
+00:14:32.360 --> 00:14:35.799
+the bigger picture of healthy digital ecosystems
+
+00:14:35.800 --> 00:14:39.359
+which also includes the topic of this presentation.
+
+00:14:39.360 --> 00:14:43.399
+I'd be interested in your thoughts and your feedback,
+
+00:14:43.400 --> 00:14:45.679
+if you choose to dig deeper.
+
+00:14:45.680 --> 00:14:50.999
+And if you want to dig deeper, here are some links.
+
+00:14:51.000 --> 00:14:55.079
+By* is about re-decentralization
+
+00:14:55.080 --> 00:14:57.159
+of Internet application services.
+
+00:14:57.160 --> 00:15:00.759
+Among other things, ByStar provides
+
+00:15:00.760 --> 00:15:05.159
+complete own-your-email services. I mean,
+
+00:15:05.160 --> 00:15:10.319
+private Hillary-Clinton-Style mail servers for everyone.
+
+00:15:10.320 --> 00:15:16.519
+There is an overview of ByStar at by-star.net.
+
+NOTE Libre-Halaal
+
+00:15:16.520 --> 00:15:21.199
+You may have noticed that I consistently use
+
+00:15:21.200 --> 00:15:25.479
+the "Libre-Halaal" label with ByStar.
+
+00:15:25.480 --> 00:15:28.919
+Halaal is a very sensitive word.
+
+00:15:28.920 --> 00:15:30.719
+I am a Moslem.
+
+00:15:30.720 --> 00:15:35.919
+But my use of Halaal is not in a religious context.
+
+00:15:35.920 --> 00:15:39.079
+It is in a philosphical context.
+
+00:15:39.080 --> 00:15:42.759
+And the scope of the "Libre-Halaal" label
+
+00:15:42.760 --> 00:15:46.439
+is manner-of-existence of Software and Services.
+
+00:15:46.440 --> 00:15:50.599
+It is not about Halaal-ness with respect to
+
+00:15:50.600 --> 00:15:54.959
+function and use of Software and Services.
+
+00:15:54.960 --> 00:15:58.239
+Unfortunately, the word Halaal
+
+00:15:58.240 --> 00:16:02.319
+and the concept of Halaal does not exist in English.
+
+00:16:02.320 --> 00:16:06.759
+So, first I introduce it into Globish.
+
+00:16:06.760 --> 00:16:12.799
+I have done so in PLPC-120039.
+
+00:16:12.800 --> 00:16:18.199
+Further, I explain as to why labels
+
+00:16:18.200 --> 00:16:22.639
+of Open Source and Free Software are both ill-directed.
+
+00:16:22.640 --> 00:16:25.839
+We then carefully define
+
+00:16:25.840 --> 00:16:29.999
+"Libre-Halaal Software" and "Libre-Halaal Services".
+
+00:16:30.000 --> 00:16:33.919
+Notice that last link.
+
+00:16:33.920 --> 00:16:36.199
+I bet, this is the first time
+
+00:16:36.200 --> 00:16:40.679
+that anyone includes a link to his "Open Business Plan"
+
+00:16:40.680 --> 00:16:43.159
+in an Emacs Conference.
+
+00:16:43.160 --> 00:16:46.559
+I hope others would do this as well.
+
+00:16:46.560 --> 00:16:49.679
+There is appetite out there
+
+00:16:49.680 --> 00:16:53.639
+for privacy- and autonomy-oriented digital ecosystems,
+
+00:16:53.640 --> 00:16:57.759
+and there is no conflict between honest business,
+
+00:16:57.760 --> 00:17:01.039
+honest profit, and Libre-Halaal Software
+
+00:17:01.040 --> 00:17:02.919
+and Libre-Halaal Services.
+
+00:17:02.920 --> 00:17:08.039
+The sub-title of our open business plan is:
+
+00:17:08.040 --> 00:17:12.879
+"An Inversion to the Proprietary Internet Services Model".
+
+00:17:12.880 --> 00:17:20.879
+And here are the same links as a native Reveal slide.
+
+00:17:20.880 --> 00:17:24.679
+If instead of a video, you are viewing
+
+00:17:24.680 --> 00:17:27.399
+this presentation as a Reveal web page,
+
+00:17:27.400 --> 00:17:31.319
+you can just click on the pointers and URLs.
+
+NOTE The BISOS integration framework
+
+00:17:31.320 --> 00:17:36.879
+So, what was the point of bringing ByStar
+
+00:17:36.880 --> 00:17:38.119
+into this presentation?
+
+00:17:38.120 --> 00:17:42.319
+In tangible terms, what have we gotten out of
+
+00:17:42.320 --> 00:17:45.639
+the tangent we took on the ByStar bigger picture?
+
+00:17:45.640 --> 00:17:50.839
+Of course we have the ByStar Digital Ecosystem itself.
+
+00:17:50.840 --> 00:17:54.879
+But that is not immediately relevant to this presentation.
+
+00:17:54.880 --> 00:17:59.959
+Here, through BISOS we now have
+
+00:17:59.960 --> 00:18:04.359
+an integration framework, which we definitely needed.
+
+00:18:04.360 --> 00:18:07.879
+We now have BISOS-MARMEE,
+
+00:18:07.880 --> 00:18:11.519
+Multi-Account Resident Mail Exchange Environment,
+
+00:18:11.520 --> 00:18:13.679
+which is a consistent set
+
+00:18:13.680 --> 00:18:17.639
+of MUA-related software components --- which we need.
+
+00:18:17.640 --> 00:18:23.159
+We also needed to augment Emacs in our own terms,
+
+00:18:23.160 --> 00:18:25.919
+so we have Blee for that,
+
+00:18:25.920 --> 00:18:29.959
+ByStar Libre-Halaal Emacs Environment,
+
+00:18:29.960 --> 00:18:32.919
+is ByStar ecosystemized Emacs.
+
+00:18:32.920 --> 00:18:37.679
+And finally Blee-Gnus, which is
+
+00:18:37.680 --> 00:18:40.639
+Gnus and MARMEE integrated with Blee.
+
+00:18:40.640 --> 00:18:46.479
+With these in place, we can now dive deeper into MARMEE.
+
+00:18:46.480 --> 00:18:53.119
+The idea of MARMEE, is that of packaging together
+
+00:18:53.120 --> 00:18:56.079
+the mail protocols parts of the Split-MUA.
+
+00:18:56.080 --> 00:19:00.799
+MARMEE (which is of course in the context of BISOS)
+
+00:19:00.800 --> 00:19:03.679
+is the green box in this slide.
+
+00:19:03.680 --> 00:19:08.519
+For outgoing mail, we use an altered qmail.
+
+00:19:08.520 --> 00:19:12.679
+We will be looking deeper into qmail a bit later.
+
+00:19:12.680 --> 00:19:17.559
+For incoming mail, we are using offlineimap
+
+00:19:17.560 --> 00:19:20.119
+which is oauth2 aware.
+
+NOTE BISOS-MARMEE
+
+00:19:20.120 --> 00:19:23.439
+Before going into more details,
+
+00:19:23.440 --> 00:19:26.519
+let's take a look at the parts lists for
+
+00:19:26.520 --> 00:19:29.359
+BISOS-MARMEE and Blee-Gnus.
+
+00:19:29.360 --> 00:19:33.719
+MARMEE is a collection of Python-based libraries
+
+00:19:33.720 --> 00:19:37.479
+and Debian packages that provide for rich sending
+
+00:19:37.480 --> 00:19:40.279
+and receiving of email outside of Emacs.
+
+00:19:40.280 --> 00:19:44.239
+Here is our BISOS-MARMEE parts list.
+
+00:19:44.240 --> 00:19:48.599
+MARMEE features include tracked mail Sending
+
+00:19:48.600 --> 00:19:51.919
+for confirmed mail communications
+
+00:19:51.920 --> 00:19:54.599
+and email distribution facilities
+
+00:19:54.600 --> 00:19:57.559
+(say, similar to Constant Contact).
+
+00:19:57.560 --> 00:20:02.079
+For Delivery Status Notification (DSN),
+
+00:20:02.080 --> 00:20:06.039
+we have adopted flufl.bounce.
+
+00:20:06.040 --> 00:20:10.879
+I'll be touching on everything that is qmail-related,
+
+00:20:10.880 --> 00:20:17.319
+namely qmail-remote.cs and mailfront, in a separate slide.
+
+00:20:17.320 --> 00:20:21.759
+notmuch is our choice of mail search engine.
+
+NOTE Blee-Gnus
+
+00:20:21.760 --> 00:20:27.319
+Similarly, here is our Blee-Gnus Parts List.
+
+00:20:27.320 --> 00:20:33.439
+Blee-Gnus is Gnus and MARMEE integrated with BISOS and Blee.
+
+00:20:33.440 --> 00:20:38.599
+Notice mentions of org-msg and polymode here.
+
+00:20:38.600 --> 00:20:42.879
+Later, I'll expand on these in the context of
+
+00:20:42.880 --> 00:20:47.679
+transitioning from Message-Mode to Message-Polymode.
+
+NOTE In combination
+
+00:20:47.680 --> 00:20:52.199
+With these parts in place,
+
+00:20:52.200 --> 00:20:55.279
+now let's see how they will all come together.
+
+00:20:55.280 --> 00:20:59.999
+Gnus is very flexible, and in combination with MARMEE,
+
+00:21:00.000 --> 00:21:03.639
+it can create an incredibly powerful MUA.
+
+00:21:03.640 --> 00:21:07.279
+On this slide, note the boxes
+
+00:21:07.280 --> 00:21:10.319
+that include the FPs label.
+
+00:21:10.320 --> 00:21:14.839
+FP stand for File Parameters.
+
+00:21:14.840 --> 00:21:18.519
+It is the basis of BISOS's configuration
+
+00:21:18.520 --> 00:21:20.039
+and secrets management.
+
+00:21:20.040 --> 00:21:24.319
+Notice that it has consistent agents
+
+00:21:24.320 --> 00:21:27.839
+inside of Emacs and on the OS.
+
+00:21:27.840 --> 00:21:29.919
+This is a big deal
+
+00:21:29.920 --> 00:21:34.719
+in that it can reduce user visible configuration complexity.
+
+NOTE X822-Bus
+
+00:21:34.720 --> 00:21:39.759
+Also, notice the X822-Bus here.
+
+00:21:39.760 --> 00:21:43.999
+The idea of X822-Bus is that of
+
+00:21:44.000 --> 00:21:49.839
+allowing for communication among user's preferences, Gnus
+
+00:21:49.840 --> 00:21:53.599
+and MARMEE-qmail through addition of X- fields
+
+00:21:53.600 --> 00:21:57.959
+in RFC-822 message headers.
+
+00:21:57.960 --> 00:22:03.599
+X822-Bus is used for selection of mail sending agents
+
+00:22:03.600 --> 00:22:08.839
+and specification of delivery status parameters.
+
+NOTE bystar-qmail
+
+00:22:08.840 --> 00:22:12.279
+Of key significance in this picture
+
+00:22:12.280 --> 00:22:15.479
+is our choice of qmail for outgoing mail.
+
+00:22:15.480 --> 00:22:22.519
+Compared to sendmail, postfix, exim,
+
+00:22:22.520 --> 00:22:25.399
+and other conventional MTAs;
+
+00:22:25.400 --> 00:22:31.719
+the qmail ecosystem is far more flexible and potent.
+
+00:22:31.720 --> 00:22:34.599
+We are not using qmail as is.
+
+00:22:34.600 --> 00:22:37.999
+Ours is called bystar-qmail.
+
+00:22:38.000 --> 00:22:41.799
+When we use it as a traditional MTA,
+
+00:22:41.800 --> 00:22:45.439
+we refer to it as PALS-qmail.
+
+00:22:45.440 --> 00:22:52.599
+And when we use it on the MUA side, we call it MARMEE-qmail.
+
+00:22:52.600 --> 00:22:56.599
+Just like Emacs, qmail has
+
+00:22:56.600 --> 00:22:59.959
+a solid core and a flexible periphery.
+
+00:22:59.960 --> 00:23:04.479
+All our alterations have been on the periphery.
+
+00:23:04.480 --> 00:23:07.890
+We have replaced qmail-remote
+
+00:23:07.891 --> 00:23:14.479
+with our own Python implementation called qmail-remote.cs.
+
+00:23:14.480 --> 00:23:20.919
+By being in Python, it can do a lot more a lot more easily.
+
+00:23:20.920 --> 00:23:26.540
+For example, qmail-remote.cs interacts with
+
+00:23:26.541 --> 00:23:33.079
+Google Oauth2 APIs and allows you to send through Gmail.
+
+00:23:33.080 --> 00:23:36.399
+This is shown with the red circle.
+
+00:23:36.400 --> 00:23:43.639
+We have also replaced qmail-smtpd with mailfront,
+
+00:23:43.640 --> 00:23:46.159
+shown with a blue circle.
+
+00:23:46.160 --> 00:23:51.359
+This allows us to use MARMEE Split-MUA
+
+00:23:51.360 --> 00:23:53.999
+through protocol interfaces.
+
+00:23:54.000 --> 00:23:56.559
+Let's take a look at that.
+
+NOTE Using MARMEE with other MUAs outside Emacs
+
+00:23:56.560 --> 00:24:02.719
+Previously we looked at the "Direct Interface" of MARMEE,
+
+00:24:02.720 --> 00:24:08.479
+specifically, qmail-inject and Maildir for Gnus.
+
+00:24:08.480 --> 00:24:11.479
+But what if we wanted to use
+
+00:24:11.480 --> 00:24:15.159
+MARMEE with other MUAs outside of Emacs?
+
+00:24:15.160 --> 00:24:18.799
+That can be done through the "Protocol Interface".
+
+00:24:18.800 --> 00:24:22.039
+MARMEE also includes "mailfront"
+
+00:24:22.040 --> 00:24:27.439
+which can function as an SMTP submit server for localhost.
+
+00:24:27.440 --> 00:24:30.599
+This way, we can configure
+
+00:24:30.600 --> 00:24:36.239
+the outgoing mail part of any MUA to point to the localhost
+
+00:24:36.240 --> 00:24:41.399
+and have MARMEE-qmail function as an outgoing proxy.
+
+NOTE Incoming mail
+
+00:24:41.400 --> 00:24:47.919
+For incoming mail, MARMEE-Split-MUA-Protocol-Interface
+
+00:24:47.920 --> 00:24:51.359
+includes "Courier", which can function
+
+00:24:51.360 --> 00:24:54.079
+as an IMAP server for localhost.
+
+00:24:54.080 --> 00:24:58.519
+This way, we can configure the incoming mail part
+
+00:24:58.520 --> 00:25:02.319
+of any MUA to point to the localhost
+
+00:25:02.320 --> 00:25:06.519
+and have MARMEE function as an incoming proxy
+
+00:25:06.520 --> 00:25:10.759
+by serving the local Maildir to the MUA.
+
+NOTE Licensing and project status
+
+00:25:10.760 --> 00:25:18.079
+All sources for all of ByStar, BISOS,
+
+00:25:18.080 --> 00:25:23.439
+Blee and MARMEE are subject to Affero GPL.
+
+00:25:23.440 --> 00:25:28.319
+The sources and documentation are all republished
+
+00:25:28.320 --> 00:25:30.559
+under various "Organizations"
+
+00:25:30.560 --> 00:25:35.439
+under github.com/mohsenBanan
+
+00:25:35.440 --> 00:25:40.679
+All of ByStar, BISOS, Blee and MARMEE
+
+00:25:40.680 --> 00:25:42.839
+reflect work in progress,
+
+00:25:42.840 --> 00:25:46.319
+and we are NOT recruiting users at this time.
+
+00:25:46.320 --> 00:25:49.279
+For more than two decades,
+
+00:25:49.280 --> 00:25:53.159
+I have been using these all in that bigger context.
+
+00:25:53.160 --> 00:25:56.239
+They are mostly real,
+
+00:25:56.240 --> 00:26:01.399
+but so far, just for myself and a few other engineers.
+
+00:26:01.400 --> 00:26:06.519
+Our model is similar to God's early days.
+
+00:26:06.520 --> 00:26:08.319
+You may ask:
+
+00:26:08.320 --> 00:26:12.119
+"How did God create all of this in just 7 days?"
+
+00:26:12.120 --> 00:26:17.199
+Well, easy, He did not have an installed base to deal with.
+
+NOTE Installing MARMEE
+
+00:26:17.200 --> 00:26:24.519
+You can obtain and install MARMEE in two ways. As is:
+
+00:26:24.520 --> 00:26:29.439
+as standalone-MARMEE, you can just
+
+00:26:29.440 --> 00:26:31.919
+pip install bisos.marmee.
+
+00:26:31.920 --> 00:26:35.879
+For the Gnus part you are completely on your own.
+
+00:26:35.880 --> 00:26:40.279
+Or on a Debian-11, you can just run
+
+00:26:40.280 --> 00:26:43.399
+the bisos bootstrap script.
+
+00:26:43.400 --> 00:26:48.359
+That way you will have all of BISOS, which includes MARMEE
+
+00:26:48.360 --> 00:26:52.159
+and you will have Blee, which includes Blee-Gnus.
+
+00:26:52.160 --> 00:26:54.719
+If you plan to do so,
+
+00:26:54.720 --> 00:26:58.839
+I suggest that you first try it in a disposable VM.
+
+00:26:58.840 --> 00:27:02.159
+BISOS and Blee are large.
+
+00:27:02.160 --> 00:27:06.359
+Many apt and pip packages will be installed!
+
+00:27:06.360 --> 00:27:11.839
+And here are the same links as a native Reveal slide.
+
+00:27:11.840 --> 00:27:17.519
+If you are viewing this presentation as Reveal.js web page,
+
+00:27:17.520 --> 00:27:20.479
+you can just click on the pointers and URLs.
+
+NOTE MARMEE as an Emacs "Common Agent"
+
+00:27:20.480 --> 00:27:25.359
+Let's consider MARMEE as an Emacs "Common Agent".
+
+00:27:25.360 --> 00:27:28.919
+By "Common-Agent" I mean a capability
+
+00:27:28.920 --> 00:27:30.959
+which Emacs builds on
+
+00:27:30.960 --> 00:27:33.759
+and which other Apps can also use.
+
+00:27:33.760 --> 00:27:38.479
+Emacs has a very rich applications development framework
+
+00:27:38.480 --> 00:27:41.119
+for absorbing common-agents.
+
+00:27:41.120 --> 00:27:45.474
+Consider how magit has absorbed git,
+
+00:27:45.475 --> 00:27:49.774
+or how flycheck has absorbed mypy
+
+00:27:49.775 --> 00:27:54.199
+or how EAF does its work outside of Emacs ---
+
+00:27:54.200 --> 00:27:57.919
+that too can be considered a common-agent.
+
+00:27:57.920 --> 00:28:02.039
+The common-agent model permits us
+
+00:28:02.040 --> 00:28:04.599
+to do more outside of Emacs.
+
+00:28:04.600 --> 00:28:08.639
+Common-agents maximize social benefits
+
+00:28:08.640 --> 00:28:10.559
+and are more convivial.
+
+00:28:10.560 --> 00:28:15.479
+For example, any MUA can profit from MARMEE.
+
+00:28:15.480 --> 00:28:18.439
+But we don't have good ways of
+
+00:28:18.440 --> 00:28:21.399
+packaging Emacs and its packages
+
+00:28:21.400 --> 00:28:23.639
+with their common-agents.
+
+00:28:23.640 --> 00:28:28.359
+Instead, we usually end up with DIY recipes.
+
+00:28:28.360 --> 00:28:32.479
+This is why I am contextualizing
+
+00:28:32.480 --> 00:28:35.439
+Emacs inside of Blee and BISOS.
+
+00:28:35.440 --> 00:28:37.999
+That is what they are for.
+
+00:28:38.000 --> 00:28:40.424
+And that is why I consider them
+
+00:28:40.425 --> 00:28:43.199
+immediately relevant to this presentation.
+
+00:28:43.200 --> 00:28:47.719
+With an incredibly powerful Display Engine,
+
+00:28:47.720 --> 00:28:51.279
+and an incredibly powerful Elisp Engine,
+
+00:28:51.280 --> 00:28:55.039
+and an incredibly powerful Input Methods Engine,
+
+00:28:55.040 --> 00:28:59.559
+and an incredibly powerful Common-Agents paradigm,
+
+00:28:59.560 --> 00:29:02.707
+Emacs has the potential of being
+
+00:29:02.708 --> 00:29:06.407
+any non-proprietary digital ecosystem's
+
+00:29:06.408 --> 00:29:08.879
+preferred usage environment.
+
+00:29:08.880 --> 00:29:14.090
+I am in favor of putting more around Emacs
+
+00:29:14.091 --> 00:29:17.440
+and strengthening integration of Emacs
+
+00:29:17.441 --> 00:29:19.719
+with Debian, explicitly,
+
+00:29:19.720 --> 00:29:22.839
+perhaps even at the cost of
+
+00:29:22.840 --> 00:29:26.599
+de-emphasizing its multi-platform attribute.
+
+00:29:26.600 --> 00:29:30.319
+A smaller Emacs is a better Emacs.
+
+00:29:30.320 --> 00:29:33.719
+Notice that in this slide,
+
+00:29:33.720 --> 00:29:37.279
+I have used many arrows in many colors.
+
+00:29:37.280 --> 00:29:45.599
+Much of Emacs's power comes from its ability
+
+00:29:45.600 --> 00:29:47.759
+to absorb and to integrate.
+
+00:29:47.760 --> 00:29:51.919
+Tomohiro is right on the mark when he says,
+
+00:29:51.920 --> 00:29:55.359
+"The reason why Emacs platform is good
+
+00:29:55.360 --> 00:29:58.119
+is that it cooperates with OS,
+
+00:29:58.120 --> 00:30:00.919
+not because it is good by itself."
+
+00:30:00.920 --> 00:30:03.999
+I am suggesting that we should
+
+00:30:04.000 --> 00:30:06.519
+raise the bar from the OS
+
+00:30:06.520 --> 00:30:09.839
+to the entirety of our digital ecosystem.
+
+00:30:09.840 --> 00:30:13.039
+There are many models
+
+00:30:13.040 --> 00:30:15.839
+for Emacs to cooperate with the OS
+
+00:30:15.840 --> 00:30:19.319
+and with applications and with services.
+
+00:30:19.320 --> 00:30:25.439
+The colors of arrows in the previous slide correspond to
+
+00:30:25.440 --> 00:30:28.879
+the model of interface of the common-agent:
+
+00:30:28.880 --> 00:30:33.999
+for example, sub-process invocation, pipe-based
+
+00:30:34.000 --> 00:30:39.359
+asynchronous interface, or file-based interactions.
+
+NOTE Consistent configuration
+
+00:30:39.360 --> 00:30:44.759
+One important aspect of common-agent paradigm is that
+
+00:30:44.760 --> 00:30:50.399
+both the common-agent and its Emacs App
+
+00:30:50.400 --> 00:30:53.039
+need to be configured consistently.
+
+00:30:53.040 --> 00:30:57.959
+In MARMEE and Blee-Gnus,
+
+00:30:57.960 --> 00:31:01.919
+we use File-Params to accomplish this.
+
+00:31:01.920 --> 00:31:06.959
+In BISOS, there is a Python interface to File-Params,
+
+00:31:06.960 --> 00:31:10.239
+there is a Bash interface to File-Params,
+
+00:31:10.240 --> 00:31:15.719
+and in Blee, there is an Elisp interface to File-Params.
+
+00:31:15.720 --> 00:31:18.919
+So, configurations are extended.
+
+00:31:18.920 --> 00:31:23.279
+Furthermore, File-Params can be encrypted,
+
+00:31:23.280 --> 00:31:26.959
+and credentials can be protected and shared.
+
+00:31:26.960 --> 00:31:33.919
+This is a significant improvement over .authinfo
+
+00:31:33.920 --> 00:31:36.959
+and its more recent incarnations.
+
+NOTE Feedback and requests
+
+00:31:36.960 --> 00:31:41.199
+EmacsConf could be a great place
+
+00:31:41.200 --> 00:31:44.374
+for users to provide feedback to developers
+
+00:31:44.375 --> 00:31:47.879
+and for developers to suggest to developers.
+
+00:31:47.880 --> 00:31:52.759
+In that spirit, my primary audience in this part
+
+00:31:52.760 --> 00:31:54.839
+are fellow Emacs developers.
+
+00:31:54.840 --> 00:32:00.039
+BISOS-MARMEE and Blee-Gnus are starting points.
+
+00:32:00.040 --> 00:32:02.439
+We can collectively work
+
+00:32:02.440 --> 00:32:04.679
+towards improving what is in place.
+
+00:32:04.680 --> 00:32:07.919
+Some such improvements involve
+
+00:32:07.920 --> 00:32:11.919
+collaboration among various Emacs developers.
+
+00:32:11.920 --> 00:32:16.599
+Here, I am making some explicit requests
+
+00:32:16.600 --> 00:32:19.559
+from some of the relevant emacs developers.
+
+00:32:19.560 --> 00:32:24.159
+At most, these are requests and invitations.
+
+00:32:24.160 --> 00:32:28.519
+For each of these requests, I am providing links
+
+00:32:28.520 --> 00:32:30.119
+for additional details.
+
+00:32:30.120 --> 00:32:33.039
+In due course, I'll follow up
+
+00:32:33.040 --> 00:32:35.279
+in the Emacs developers mailing list.
+
+NOTE X-Message-SMTP-Method: qmail
+
+00:32:35.280 --> 00:32:41.879
+Gnus uses X-Message-SMTP-Method
+
+00:32:41.880 --> 00:32:45.119
+for selection of Mail-Sending-Agent.
+
+00:32:45.120 --> 00:32:50.519
+Even though all the qmail injection code is still in Gnus,
+
+00:32:50.520 --> 00:32:58.279
+support for "X-Message-SMTP-Method: qmail" is missing.
+
+00:32:58.280 --> 00:33:02.759
+It takes 2 lines of code to revive it.
+
+00:33:02.760 --> 00:33:07.399
+With regards to (1), qmail was previously supported in Gnus.
+
+00:33:07.400 --> 00:33:11.319
+Lars, can you please reactivate it? Thanks.
+
+NOTE X-Message-Send-Method
+
+00:33:11.320 --> 00:33:16.439
+(2) is a terminology suggestion.
+
+00:33:16.440 --> 00:33:21.559
+The term X-Message-SMTP-Method violates conceptual layering.
+
+00:33:21.560 --> 00:33:27.079
+Please consider changing it to X-Message-Send-Method.
+
+00:33:27.080 --> 00:33:33.719
+In a Split-MUA setup, Gnus need not know about SMTP at all.
+
+00:33:33.720 --> 00:33:36.599
+We just need to pass information
+
+00:33:36.600 --> 00:33:39.319
+to a Mail-Sending-Agent selector.
+
+NOTE Sharing config info and secrets with common agents
+
+00:33:39.320 --> 00:33:44.439
+(3) is simply a design suggestion for
+
+00:33:44.440 --> 00:33:46.759
+which I prepared the context.
+
+00:33:46.760 --> 00:33:51.839
+.authinfo and Emacs auth-source library
+
+00:33:51.840 --> 00:33:54.199
+are too Emacs-centric.
+
+00:33:54.200 --> 00:33:57.839
+We need to share config info and secrets
+
+00:33:57.840 --> 00:34:00.799
+between common-agents and Emacs.
+
+00:34:00.800 --> 00:34:03.639
+The File Parameters approach
+
+00:34:03.640 --> 00:34:05.799
+can be a general-purpose solution.
+
+00:34:05.800 --> 00:34:10.839
+Is it reasonable to extend auth-source library to
+
+00:34:10.840 --> 00:34:12.719
+support File Params?
+
+00:34:12.720 --> 00:34:16.519
+I'll cover (4) in the next slide.
+
+00:34:16.520 --> 00:34:21.159
+(5) is a philosophical common suggestion
+
+00:34:21.160 --> 00:34:26.439
+to all Emacs developers. We need to better cultivate
+
+00:34:26.440 --> 00:34:30.879
+the model of Common-Agents integration with Emacs.
+
+00:34:30.880 --> 00:34:39.599
+And here are the same links as a native Reveal slide.
+
+NOTE message-polymode
+
+00:34:39.600 --> 00:34:42.799
+A mail message comprises of
+
+00:34:42.800 --> 00:34:45.599
+Envelope, Header and BodyParts.
+
+00:34:45.600 --> 00:34:49.439
+Each of these have their own syntax (their own mode).
+
+00:34:49.440 --> 00:34:53.639
+Conceivably Each BodyPart has its own mode.
+
+00:34:53.640 --> 00:34:59.439
+So, we need to evolve Message-Mode into Message-Polymode.
+
+00:34:59.440 --> 00:35:03.719
+More or less by default, org-mode has become
+
+00:35:03.720 --> 00:35:08.999
+the beginnings of "Emacs Native Markup Language -- ENML".
+
+00:35:09.000 --> 00:35:14.399
+With org-msg you can write your emails in org-mode ---
+
+00:35:14.400 --> 00:35:16.559
+destined as html.
+
+00:35:16.560 --> 00:35:19.559
+org-msg needs to become
+
+00:35:19.560 --> 00:35:22.239
+an integral part of Message-Polymode.
+
+00:35:22.240 --> 00:35:25.119
+It would be heavenly
+
+00:35:25.120 --> 00:35:29.959
+if Lars, Jérémy and Vitalie could collaborate
+
+00:35:29.960 --> 00:35:34.079
+and give us the needed Message-Polymode. Thank you.
+
+NOTE Vertical slice use cases
+
+00:35:34.080 --> 00:35:38.119
+One way to verify that we have not gone astray
+
+00:35:38.120 --> 00:35:42.759
+in our horizontal bigger pictures is to verify them
+
+00:35:42.760 --> 00:35:46.919
+through the concept of "Vertical Slice Use Cases".
+
+00:35:46.920 --> 00:35:50.799
+Let one use case be reading and writing
+
+00:35:50.800 --> 00:35:54.639
+of mail on multiple gmail accounts with Gnus.
+
+00:35:54.640 --> 00:35:59.319
+Google now requires use of oauth2 tokens
+
+00:35:59.320 --> 00:36:02.439
+which MARMEE can do outside of emacs.
+
+00:36:02.440 --> 00:36:05.679
+There is a recent email thread
+
+00:36:05.680 --> 00:36:09.119
+on that in the emacs-devel mailing list.
+
+00:36:09.120 --> 00:36:14.279
+Let another use case be that of tracking delivery
+
+00:36:14.280 --> 00:36:18.679
+and non-delivery reports for custom envelope addresses
+
+00:36:18.680 --> 00:36:26.039
+of byname.net (part of ByStar) autonomous mail services.
+
+00:36:26.040 --> 00:36:30.319
+I would have loved to walk you through these
+
+00:36:30.320 --> 00:36:32.959
+vertical slice use cases
+
+00:36:32.960 --> 00:36:36.439
+as screen captures of my Blee environment.
+
+00:36:36.440 --> 00:36:40.639
+For that, I need at least another 20 minutes.
+
+00:36:40.640 --> 00:36:43.079
+But my time is up.
+
+00:36:43.080 --> 00:36:46.719
+So, let's consider this as the first
+
+00:36:46.720 --> 00:36:48.919
+in a series of presentations
+
+00:36:48.920 --> 00:36:51.799
+where next in this series could be
+
+00:36:51.800 --> 00:36:55.479
+the mentioned two vertical slice use cases.
+
+00:36:55.480 --> 00:36:59.279
+Perhaps there could be another presentation
+
+00:36:59.280 --> 00:37:02.879
+on this topic in EmacsConf 2023.
+
+00:37:02.880 --> 00:37:06.759
+This document was produced entirely with
+
+00:37:06.760 --> 00:37:10.799
+Libre-Halaal Software, and is published using
+
+00:37:10.800 --> 00:37:13.079
+Libre-Halaal Internet Services.
+
+00:37:13.080 --> 00:37:17.959
+I want to thank all the EmacsConf Organizers
+
+00:37:17.960 --> 00:37:19.519
+for their great work,
+
+00:37:19.520 --> 00:37:30.960
+and Sacha, Leo, and Amin in particular.
diff --git a/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt
new file mode 100644
index 00000000..14147527
--- /dev/null
+++ b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers--chapters.vtt
@@ -0,0 +1,44 @@
+WEBVTT
+
+
+00:00:18.720 --> 00:02:07.680
+Short recap of what the talk was about?
+
+00:02:09.280 --> 00:04:03.914
+What's the incentive to pay?
+
+00:04:04.014 --> 00:04:23.205
+What do you think of projects like OpenQ?
+
+00:04:23.305 --> 00:07:39.789
+Are you aware of SourceCred?
+
+00:07:39.889 --> 00:08:58.080
+How is this different from money?
+
+00:08:58.080 --> 00:10:33.899
+How would you approach a viable experiment for ABE?
+
+00:10:33.999 --> 00:13:28.080
+How do you constrain the cognitive and time burdens of deciding the values of attributed contributions?
+
+00:13:29.360 --> 00:16:29.720
+How are the attribution amounts calculated?
+
+00:16:29.820 --> 00:17:27.360
+Synchronicity with Bastien's talk last year
+
+00:17:28.960 --> 00:21:15.920
+What are your assumptions about human nature?
+
+00:21:17.680 --> 00:21:44.902
+What is the URL of the project?
+
+00:21:45.002 --> 00:22:29.420
+Check out the prototype, "Old Abe"
+
+00:22:29.520 --> 00:23:50.320
+Closing Remarks
+
+00:23:50.320 --> 00:25:09.280
+A flicker of light and following your curiosity
diff --git a/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt
new file mode 100644
index 00000000..80a659b8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--answers.vtt
@@ -0,0 +1,806 @@
+WEBVTT
+
+00:00.000 --> 00:08.160
+Okay, so we seem to be back. Sorry for the little shuffling chairs around. We are now live with
+
+00:08.160 --> 00:16.400
+Sid. Hi, Sid. Let me contextualize a little bit for the people because we are on Gen right now
+
+00:16.400 --> 00:00:18.620
+and the talk was happening on Dev.
+
+NOTE Short recap of what the talk was about?
+
+00:00:18.720 --> 00:00:22.800
+Sid, can I ask you explaining what your talk was about in about
+
+00:22.800 --> 00:28.560
+one to two minutes? Yes, sure. The talk was called Maintaining the Maintainer's Attribution
+
+00:28.560 --> 00:35.200
+as a Model for Open Source Projects, and the idea is that instead of having an economic system based
+
+00:35.200 --> 00:40.160
+on supply and demand, which is capitalism, we have an economic system based on attribution
+
+00:40.160 --> 00:47.120
+and agreement, the power of our words, taking on incentives in the world, and that this can work
+
+00:47.120 --> 00:52.240
+for open source projects as a proving ground, and I think it can scale beyond that, and I hope it
+
+00:52.240 --> 00:59.920
+will scale beyond that in general. Okay, well I think you did, I'm not sure if you rehearsed
+
+00:59.920 --> 01:05.040
+this before, but that was such a perfect elevator speech for your talk. I am beyond amazed.
+
+01:06.720 --> 01:10.960
+Thank you, thank you. It's the adrenaline from being late and all the time zone shifting.
+
+01:12.080 --> 01:19.920
+You're not supposed to mention this, you know. You know, the things we keep telling people,
+
+01:19.920 --> 01:24.560
+you know, is that EmacsConf, yes, you see us rustling and being really grumpy when we don't
+
+01:24.560 --> 01:30.640
+get prereq, but really the live event is one part of EmacsConf, but really the better part of it is
+
+01:30.640 --> 01:37.600
+just having all the talks out of the head of people online, easily viewable, easily accessible
+
+01:37.600 --> 01:42.000
+with subtitles and stuff like this. So don't worry, it's fine if you're all right for submitting a
+
+01:42.000 --> 01:46.720
+prereq, it's fine if you don't show up to the Q&A, eventually we will find you, we will ask you the
+
+01:46.720 --> 01:51.840
+questions and all the data will be out there, so don't worry about it. Yeah, the magic of editing
+
+01:51.840 --> 01:57.360
+and stuff like that, you know. Yes, but we don't have it now, so we'll have to stick, you know,
+
+01:57.360 --> 02:02.800
+time is going to dilute, we'll have to stick with strict adherence to chronology right now. So
+
+02:02.800 --> 02:07.680
+starting with Sid, do you want to take the first question on the pad? Okay, let's look at them.
+
+NOTE What's the incentive to pay?
+
+02:09.280 --> 02:14.960
+So the first question is, this seems to assume that there will be money contributions commensured
+
+02:14.960 --> 02:20.400
+with the value of the project versus everyone freeloading because there's no incentive to pay.
+
+02:21.840 --> 02:26.400
+Right, so actually there is an incentive to pay, so I think what the question is referring to
+
+02:26.400 --> 02:32.720
+is that everyone is going to pay to other projects, or no one is going to pay to projects because
+
+02:32.720 --> 02:38.080
+they're free anyway and you can use them and you don't have to pay, but one of the new things
+
+02:38.080 --> 02:43.920
+with attribution-based economics is the idea that in open source projects we agree, we all
+
+02:43.920 --> 02:50.400
+collectively agree on a fair market price for a project, and this isn't a price in the sense that
+
+02:50.400 --> 02:55.200
+you are prohibited from using the product until you pay the price, but rather it's for an accounting
+
+02:55.200 --> 02:59.920
+purpose, which is that if you pay more than that price, then that means you are now an investor,
+
+03:00.480 --> 03:06.080
+and so you can sort of, that means you are now attributable in future revenues that come to the
+
+03:06.080 --> 03:11.520
+project. So if you think there's a project that's going to do some nice things, you can essentially
+
+03:11.520 --> 03:16.160
+buy shares in it, except these are not ownership shares, they're shares and attribution because
+
+03:16.160 --> 03:22.240
+you contribute value by contributing money and that's attributable, so there is an incentive
+
+03:22.240 --> 03:30.720
+to pay, and I think, but also beyond this, the financial model is incredibly complex,
+
+03:30.720 --> 03:36.160
+it is much simpler than what we have today in a capitalist world, but still finance is a very
+
+03:36.160 --> 03:43.040
+complex thing, and I think we're in the very very early stages of figuring out the financial model,
+
+03:43.040 --> 03:48.480
+and I think there's a number, there's tons of open questions, needs a lot of help from people
+
+03:49.520 --> 03:56.480
+to figure these out, so there's promising angles here, but I think we have a lot to work out as
+
+03:56.480 --> 04:03.360
+well. Should I go to the second question? Yeah, feel free to do so, you are the master, you're
+
+04:03.360 --> 00:04:03.914
+in Q&A.
+
+NOTE What do you think of projects like OpenQ?
+
+00:04:04.014 --> 00:04:11.040
+Okay, so the second question is, are you aware of projects like OpenQ, would that fit the
+
+04:11.040 --> 04:18.960
+model in your opinion? I'm actually not familiar with OpenQ, so maybe I should just move on to the
+
+04:18.960 --> 00:04:23.205
+next question and come back to that if we have time. Sure.
+
+NOTE Are you aware of SourceCred?
+
+00:04:23.305 --> 00:04:25.840
+The next one says, I see incredible
+
+04:25.840 --> 04:30.800
+amounts of overlap with the source cred system, where attribution of antecedents, graph of
+
+04:30.800 --> 04:36.640
+contributions, fair in hindsight, backpropagation. Oh, backpropagation, interesting. I'm sensing a
+
+04:36.640 --> 04:40.560
+pattern though, so you are being exposed to stuff that you do not know, which is amazing, that
+
+04:40.560 --> 04:45.760
+brings an opportunity to do research later on, but feel free to delay those questions until,
+
+04:45.760 --> 04:49.920
+perhaps, I would invite the people who ask those questions in the pad maybe to describe in a little
+
+04:49.920 --> 04:55.520
+blurb that Sid can read, what is the meaning of those particular platforms, and in the meantime,
+
+04:55.520 --> 05:00.000
+Sid, you can move on to the next questions. Sure, but I will say one thing on the subject of both
+
+05:00.000 --> 05:07.200
+of these things, which is that I think it's significantly underappreciated the extent to which
+
+05:07.200 --> 05:13.040
+value is created in the world that is both independently created of other value that happens
+
+05:13.040 --> 05:20.720
+to be very similar, as well as dependently related and that may be unknown, and this is something
+
+05:20.720 --> 05:26.720
+that I call subliminal transmission, which is like if you think about a turbulent flow,
+
+05:26.720 --> 05:30.800
+you know, and that's what our world is, you know, we like to have all these linear narratives and
+
+05:30.800 --> 05:37.840
+simple stories where I think if you take all of Wikipedia, right, even a single person's life
+
+05:37.840 --> 05:42.240
+has more information and richness than all of Wikipedia, so when you think about it in those
+
+05:42.240 --> 05:47.920
+terms, you realize just how small our stories are in expressing what really happens and what has
+
+05:47.920 --> 05:53.040
+really happened in the world, so from that perspective, I think there's this thing called
+
+05:53.040 --> 05:58.720
+subliminal transmission, which is like a turbulent flow where you have little vortices that appear
+
+05:58.720 --> 06:02.480
+here and then they disappear, they're gone, but then you see them again here and they're like
+
+06:02.480 --> 06:05.600
+bigger, but they're the same, and then you see them in a different place and they're not the
+
+06:05.600 --> 06:11.440
+same, they're different, yet somehow the same, and I think our world is like that, and if we have
+
+06:11.440 --> 06:16.960
+an economic system that's capable of not saying that, oh, it should be this other way, which it
+
+06:16.960 --> 06:22.480
+isn't, but in fact we see this is how it is, let's make sure that we recognize this and empower the
+
+06:22.480 --> 06:29.440
+right voices, given that this is how the world is, and from that perspective, I think projects like
+
+06:29.440 --> 06:34.320
+OpenQ and SourceCred and any number of others might exist which are creating value in the world,
+
+06:34.320 --> 06:39.360
+and I think that we all deserve to be empowered, you know, if we're creating similar kinds of
+
+06:39.360 --> 06:44.320
+value, then these are voices that have something useful to say for us moving forward, and they
+
+06:44.320 --> 06:50.640
+deserve to be empowered, so yeah, it doesn't have to be causally related, you know, you can have
+
+06:50.640 --> 06:56.080
+empowerment of all of these different projects because they work together, so yeah, very long
+
+06:56.080 --> 07:00.720
+-winded answer to a short question, or non-question, meta-question.
+
+07:00.720 --> 07:04.480
+You're fine, you can be as long-winded as you want, because honestly you have been so
+
+07:04.480 --> 07:10.080
+eloquent in your answer, and the little ingestors that accompany these little vertices
+
+07:11.440 --> 07:15.520
+do carry on with as much velocity as you want. We will be going until about
+
+07:15.520 --> 07:20.880
+52-53 of the current hours, which means we have about 20 more minutes. Also, we have a lot of
+
+07:20.880 --> 07:25.600
+questions in the pad, so I would prefer if Sid started answering the questions over the pad first,
+
+07:25.600 --> 07:30.400
+but we are going to be opening the pad in about six to seven minutes if you want to join and ask
+
+07:30.400 --> 07:35.520
+questions live to Sid, but in the meantime, Sid, sorry, I'm getting tired, it's late, in the meantime,
+
+07:35.520 --> 00:07:39.789
+Sid, feel free to answer more questions. Sure, okay, thank you.
+
+NOTE How is this different from money?
+
+00:07:39.889 --> 00:07:41.280
+The next question is,
+
+07:41.280 --> 07:46.480
+how is this different from money? Not in some abstract ownership versus attribution way.
+
+07:46.480 --> 07:52.000
+Open-source funding is an incentive problem, which this does not change as far as I can see.
+
+07:54.000 --> 08:00.960
+So, on the one hand, it does add new incentives, as we talked about. I'm not sure about the question
+
+08:00.960 --> 08:06.800
+of how this is different from money. This isn't proposing to replace money in any way.
+
+08:06.800 --> 08:13.920
+Rather, it employs money as, you know, the mechanism by which we recognize value. I think
+
+08:13.920 --> 08:23.440
+money is perhaps something that can be revisited and, you know, reflected upon in the future,
+
+08:23.440 --> 08:28.960
+but I don't think we need to do that at this stage. At this stage, I'm content to rest on the
+
+08:28.960 --> 08:33.520
+black box abstractions of certain things that we've already developed, like money,
+
+08:33.520 --> 08:37.600
+as a means of exchange and as a means of recognizing value, and I think we can use that,
+
+08:37.600 --> 08:43.440
+so I'm not trying to replace money. Open-source funding is an incentive program. This doesn't
+
+08:43.440 --> 08:47.680
+change incentives, so I think we already covered how it does add incentives in the sense that you
+
+08:47.680 --> 08:53.520
+can invest in open-source projects, which is a new incentive, and, you know, we also talked about
+
+08:53.520 --> 08:58.080
+how there are some unopened questions. I'm not sure if this is one of them.
+
+NOTE How would you approach a viable experiment for ABE?
+
+08:58.080 --> 09:07.680
+How would you approach a viable experiment? So, the prototype that we have, that we talked about
+
+09:07.680 --> 09:13.760
+in the talk, so there's a prototype, for those who didn't watch the talk. We have an open-source
+
+09:14.560 --> 09:19.520
+project, you know, it's a GitHub action, and, you know, I love to support other platforms. I'm not
+
+09:19.520 --> 09:24.960
+married to GitHub in any way. I don't have any special affection for GitHub. I don't have any
+
+09:24.960 --> 09:31.520
+special affection for GitHub. But it's a GitHub action at the moment, and what it will do is,
+
+09:31.520 --> 09:37.120
+when you follow all of the processes in the Constitution, which says, you know,
+
+09:37.120 --> 09:43.360
+open-source repository, create an issue that solicits related work reports from members of
+
+09:43.360 --> 09:49.600
+the public, and then create this folder structure which has a report of the contributors and this
+
+09:49.600 --> 09:55.440
+and that, once you do all of that, like initial logistical work, this GitHub action will process
+
+09:55.440 --> 10:00.720
+fresh payments that come in, which you report as single line item files, text files. Everything is
+
+10:00.720 --> 10:07.360
+text input and output, and then, you know, you can basically get all the accounting done for you by
+
+10:07.360 --> 10:14.960
+this system. So, that's what the nature of the experiment is, and I think we're starting with
+
+10:14.960 --> 10:19.840
+just one or two repos, because there's tremendous number of unresolved questions, and it's all going
+
+10:19.840 --> 10:27.360
+to be resolved through dialogue, agreement. We all decide how this thing works, and I think,
+
+10:27.360 --> 00:10:33.899
+you know, there's, yeah, so we'll see about how the experiment goes.
+
+NOTE How do you constrain the cognitive and time burdens of deciding the values of attributed contributions?
+
+00:10:33.999 --> 00:10:36.400
+Next question, given that
+
+10:36.400 --> 10:45.040
+oversight is a social process, how do you constrain the cognitive and time burdens of deciding the
+
+10:45.040 --> 10:54.080
+values of attributed contributions? Okay, this is a great question. So, first of all, you know,
+
+10:54.080 --> 11:00.080
+let's talk about long-term vision, right? Long-term vision, I don't imagine that any of us, that is,
+
+11:00.080 --> 11:04.160
+the actual contributors to the projects, are going to have to worry about this at all.
+
+11:04.160 --> 11:08.240
+We're not going to have to engage in this process of what is called dialectical inheritance
+
+11:08.240 --> 11:13.440
+attribution, which is, you know, it's a lot of work. There's all these standards and precedents,
+
+11:13.440 --> 11:18.800
+and how do you compare ideas versus works versus the materials that went into the project? It's a
+
+11:18.800 --> 11:24.400
+very hard problem, and I think it's something we'll be improving upon for possibly even decades.
+
+11:25.200 --> 11:30.000
+But at that stage, I believe there will be experts, much like today's investment bankers
+
+11:30.000 --> 11:36.400
+and lawyers, investment IP lawyers. These are the people who are going to specialize in it,
+
+11:36.400 --> 11:40.880
+going to be professionals, and that's the kind of work that they're going to do, and we can leave it
+
+11:40.880 --> 11:48.000
+to them. But at this stage, yes, we have to do it. We have to set these principles and standards in
+
+11:48.000 --> 11:55.840
+place. And how do we constrain that? We start with simple heuristics. So, initially, we want to have,
+
+11:55.840 --> 11:59.680
+you know, if you can imagine, this is, I don't know, this is probably a bad metaphor, but if you have,
+
+11:59.680 --> 12:07.040
+like, a big hole and you're trying to patch it, you know, if you put, like, little tiny things on
+
+12:07.040 --> 12:12.240
+it and try to focus on little tiny things, okay, what I'm trying to say is order of magnitude,
+
+12:12.240 --> 12:19.280
+right? Let's solve the problem at the first order of magnitude and then get the little harmonics
+
+12:19.280 --> 12:27.520
+and, like, solve those over time. So, basically, we want to have usable, workable heuristics that
+
+12:27.520 --> 12:33.760
+are low maintenance that solve the majority of the problem for our immediate purposes and then
+
+12:33.760 --> 12:40.960
+iterate on those over time and develop proper models, which I think we will start to do in the
+
+12:40.960 --> 12:47.040
+next phase. The initial phase is heuristics that are easy and low maintenance and useful.
+
+12:47.040 --> 12:53.600
+Right, Sid, I just want to barge in a little bit. I just want to let people know that we have opened
+
+12:53.600 --> 13:00.000
+up the Q&A BBB window right now, so the same spiel as usual. If you want to join Sid and ask questions
+
+13:00.000 --> 13:04.160
+directly, we still have some questions in the pad. Don't worry, Sid will get to them first.
+
+13:04.160 --> 13:09.040
+But if you want to join and have a discussion with Sid, we have until about, we've got about
+
+13:09.040 --> 13:14.240
+20, 18 minutes left of discussion there. So, please do not hesitate. This is a very interesting talk.
+
+13:14.240 --> 13:19.840
+We have a very interesting speaker as well. So, use this opportunity, please. In the meantime,
+
+13:19.840 --> 13:24.720
+Sid, you can answer more questions. Sure. Should we take one from the field?
+
+13:25.360 --> 13:28.080
+I guess while people are thinking about it, I'll take one more question, maybe.
+
+NOTE How are the attribution amounts calculated?
+
+13:29.360 --> 13:37.440
+Okay. So, the next question is, how are the attribution amounts calculated?
+
+13:37.440 --> 13:42.960
+Okay, how are the attribution amounts calculated? This is going to be done through standards.
+
+13:42.960 --> 13:49.040
+So, there is a, there's a repo, you know, if you go to the github.org account, dream-org,
+
+13:49.040 --> 13:57.760
+d-r-y-m-dash-org-slash-foundation. This contains the founding documents of how we will manage this
+
+13:57.760 --> 14:04.080
+process. And it can, it is, it will contain more standards. It has a few at the moment, very high
+
+14:04.080 --> 14:10.240
+level ones, but we will keep adding more standards there that are general enough to be universally
+
+14:10.240 --> 14:16.880
+applicable, and that can be specialized to the individual projects. And the attribution is going
+
+14:16.880 --> 14:22.400
+to be decided by these standards, by the members of the public, members of the community.
+
+14:22.400 --> 14:28.240
+Yeah. And they calculate, they must add up to 100%. So, it's, you know, and that's okay, actually,
+
+14:28.240 --> 14:36.080
+I should say. One of the mechanisms by which attribution will be done initially is this heuristic
+
+14:36.080 --> 14:45.040
+procedure called the Analyze, Appraise, Anonymize Attribute Loop. What that means is we first
+
+14:45.040 --> 14:49.600
+analyze the project, decompose it into its components, and we can do any number of such
+
+14:49.600 --> 14:53.280
+analyses, any number of people can do these analyses, and there can be a decision procedure
+
+14:53.280 --> 14:58.320
+for combining them. But that, I digress. We'll keep it simple first. We analyze the project into its
+
+14:58.320 --> 15:05.520
+components, then we agree on the proportion of value contributed by each of those components,
+
+15:05.520 --> 15:10.480
+then we analyze the activities done by the contributors, and then we analyze the
+
+15:10.480 --> 15:15.120
+activities done by the contributors and anonymize them. And we say, this was done, this was done,
+
+15:15.120 --> 15:20.240
+this was done, this was done. This is how much proportion of value these activities contribute
+
+15:20.240 --> 15:24.720
+to each of these components. And then once you have this chart, this graph of all of these
+
+15:24.720 --> 15:32.880
+connections and proportions of value, then you anonymize and you aggregate the sum of proportions
+
+15:32.880 --> 15:38.480
+of value by contributor. And contributor is not necessarily a person, a contributor is a
+
+15:38.480 --> 15:45.040
+project, it can be an antecedent, it doesn't have to be a direct contributor to the project,
+
+15:45.040 --> 15:50.160
+it doesn't have to be someone who wrote code, it can be a person who created a bug report,
+
+15:50.160 --> 15:57.200
+or a person who had a good idea for the design. And anyway, so once you do this, you aggregate
+
+15:57.200 --> 16:02.800
+by contributor, you have a set of proportions that total up to one, or a set of percentages
+
+16:02.800 --> 16:09.920
+that total up to 100, that dictate how the revenues that come into the project are to
+
+16:09.920 --> 16:21.760
+be divided amongst all of these antecedents and contributors. Let's see, what's the next question?
+
+16:22.800 --> 16:26.240
+Okay, the next question is being written down as we speak.
+
+16:26.240 --> 00:16:29.720
+It's fine, we can wait a little bit.
+
+NOTE Synchronicity with Bastien's talk last year
+
+00:16:29.820 --> 00:16:33.200
+In the meantime, I'll just mention,
+
+16:35.360 --> 16:41.360
+so actually, when we keep track of presentation for Emacs, we do have slugs for them. And this
+
+16:41.360 --> 16:47.440
+year, the slug for your talk, Sid, was made. And it was not an anodyne choice, because last year,
+
+16:47.440 --> 16:53.360
+we also had another talk by a maintainer, or well, the org maintainer, or one of the org maintainers,
+
+16:53.360 --> 16:59.520
+Bastien Guerri. And it feels like Bastien's talk was mostly geared towards sustaining
+
+16:59.520 --> 17:05.360
+maintenance, and your is more about maintaining the software effort in general. And it feels like
+
+17:05.360 --> 17:13.280
+the two talks are related, but yours seems to be more, I wouldn't say visionary, I think they are
+
+17:13.280 --> 17:17.120
+very complimentary in nature. I'm not sure, have you been able to watch Bastien's talk from last
+
+17:17.120 --> 17:22.080
+year? I have not, but that sounds very interesting. I'll definitely check it out after this.
+
+17:22.080 --> 17:27.360
+Right. And I will now stop my blabbering, and you can answer the last question.
+
+NOTE What are your assumptions about human nature?
+
+17:28.960 --> 17:32.640
+The last question is, what are your assumptions about human nature,
+
+17:33.280 --> 17:42.000
+vis-a-vis self-interest versus altruism? The funny thing is, I don't actually feel like
+
+17:42.000 --> 17:50.000
+we need to opine on that, from the perspective of an economic system. I mean, yes, we have to
+
+17:50.000 --> 17:55.360
+recognize that, you know, some people will say, oh, human nature is fundamentally selfish, or,
+
+17:55.360 --> 18:00.320
+you know, we have to be good, and we have to help each other. And I think both of these perspectives
+
+18:00.320 --> 18:07.360
+are not necessarily, you know, I don't know if they're necessarily the right way to think about
+
+18:07.360 --> 18:13.040
+it, because you have the idea about, well, capitalism assumes people are fundamentally
+
+18:13.040 --> 18:17.840
+selfish, or they have to act that way in order to be rational in the system. That's one side of it.
+
+18:17.840 --> 18:22.800
+The other side of it is this notion of altruism, right, that somehow you have to help others,
+
+18:22.800 --> 18:28.320
+and that, you know, there's like a charitable component, and you have all these people who
+
+18:28.960 --> 18:33.520
+make billions and billions of dollars, and then, you know, start giving that away. Which,
+
+18:33.520 --> 18:36.880
+you know, if you're going to make billions and billions of dollars, and you give it away,
+
+18:36.880 --> 18:41.600
+and like help the world, that's better than not giving it away and not helping the world.
+
+18:41.600 --> 18:46.560
+On the other hand, the fact that you got those billions and billions of dollars in a capitalist
+
+18:46.560 --> 18:54.160
+economic system, which fundamentally skews the value recognition in ways that, you know, is very,
+
+18:54.160 --> 18:59.840
+very subversive and very, very minimizing of the source, the true sources of value,
+
+18:59.840 --> 19:06.160
+means that you've led yourself to go down this path and essentially unwittingly and inevitably
+
+19:06.160 --> 19:09.920
+ended up causing a lot of problems, too. Like, it's not necessarily the case that if you're
+
+19:09.920 --> 19:14.560
+wealthy in a capitalist economy, that you've created a lot of value, because yes, you have,
+
+19:14.560 --> 19:19.040
+but at the same time, the net value is not guaranteed to be above zero, really,
+
+19:20.320 --> 19:27.040
+because capitalism can't express all forms of value. So I don't think thinking about self-interest
+
+19:27.040 --> 19:35.680
+versus altruism is the right way to think about things from the perspective of economic systems.
+
+19:35.680 --> 19:42.480
+In an economic system where the incentives are so set up that the maximum value to all
+
+19:42.480 --> 19:47.840
+is recognized the most, then it's inevitable that people want to do that. And it doesn't mean that
+
+19:47.840 --> 19:51.280
+you're a naturalistic person or a selfish person. You're just going to do it because there are
+
+19:51.280 --> 20:00.240
+incentives that are set up that way that everybody agreed on. And I think in such a system, your own
+
+20:00.240 --> 20:07.040
+sort of spiritual inclinations towards this are secondary. Not secondary. I don't want to say
+
+20:07.040 --> 20:14.800
+secondary. I want to say that they are up to you. And your actions in the world will be rewarded to
+
+20:14.800 --> 20:20.320
+the extent that you help others. The more you give, the more you will be empowered. So from
+
+20:20.320 --> 20:25.280
+that perspective, you could say that the system rewards altruism. But at the same time, if you're
+
+20:25.280 --> 20:32.320
+just giving and you're not in a position where... I mean, the system ensures that if you give,
+
+20:32.320 --> 20:36.560
+you're also taken care of, so that you don't have to choose between altruism and selfishness.
+
+20:36.560 --> 20:44.160
+Altruism is empowering yourself. So that's kind of the beauty of this system, really. That's the
+
+20:44.160 --> 20:50.240
+beauty of an attribution-based system is that you become more empowered by giving more. But we don't
+
+20:50.240 --> 20:54.880
+have to get into the spirituality stuff of it, really. It's beside the point as far as the
+
+20:54.880 --> 21:02.400
+mechanisms of the economic system go. All right. I think that was the last question, unless I'm
+
+21:02.400 --> 21:09.920
+mistaken. That's the last one I see. Yes. Well, you did a fine job answering, however, many
+
+21:09.920 --> 21:15.920
+questions before. Again, very lengthy, as you said, but very eloquent, as I will say to you.
+
+NOTE What is the URL of the project?
+
+21:17.680 --> 21:22.080
+There is one question that appeared on ISE, which was the URL of the project. You mentioned
+
+21:22.080 --> 21:27.520
+dream.org. Would you be able to maybe type it out in the chat so that people can
+
+21:27.520 --> 21:32.640
+check it, and I'll place it on ISE for the person that was asking? Or on BBB, it's fine, too.
+
+21:34.000 --> 21:41.520
+It's actually dream-org. Oh, that's why I did dream.org, which was the problem.
+
+21:43.840 --> 00:21:44.902
+It's the GitHub repo.
+
+NOTE Check out the prototype, "Old Abe"
+
+00:21:45.002 --> 00:21:47.280
+And actually, sorry, you should also check out
+
+21:48.480 --> 21:55.840
+dream-org.old-abe. That is the billing prototype, which is the GitHub action,
+
+21:55.840 --> 22:01.520
+which you can add to your repo. And it's got all the startup instructions for how you can
+
+22:01.520 --> 22:08.720
+set up attribution-based economics. So I'll let you type it out. github.com slash dream
+
+22:10.480 --> 22:18.080
+dash org slash old-abe.
+
+22:18.080 --> 22:25.280
+It's good for you for remembering it. I will place this in BBB right now. Sorry,
+
+22:25.280 --> 00:22:29.420
+not in BBB, in the pad so that people can click on it.
+
+NOTE Closing Remarks
+
+00:22:29.520 --> 00:22:32.640
+Sid, is there anything else you'd like to
+
+22:32.640 --> 22:41.200
+say? We are about at the end of the Q&A right now. I guess attribution-based economics is open for
+
+22:41.200 --> 22:50.560
+business, as it were. So if you can go to some of the repos at the dream-org GitHub org account,
+
+22:51.280 --> 22:56.240
+many of those repos are starting attribution-based economics. And simx.el in particular is one for
+
+22:56.240 --> 23:00.560
+the Emacs community. So I encourage you guys. And of course, old-abe, that's another one that
+
+23:00.560 --> 23:04.560
+started. And that's the only one that's actually ready to accept payments and distribute payments,
+
+23:04.560 --> 23:09.120
+because we have done the attributions already, given that it was written in the last few days.
+
+23:09.120 --> 23:16.480
+But the other ones, we might start payments out, I think, on January 1. So between now and January
+
+23:16.480 --> 23:24.480
+1, we'll start doing the attribution process and deciding the antecedents, who's owed what,
+
+23:24.480 --> 23:28.080
+what proportion of value came from whom, and all that stuff between now and then. And then we're
+
+23:28.080 --> 23:36.880
+going to start paying out from the repositories January 1 is the plan. If you can contribute to
+
+23:36.880 --> 23:41.280
+these projects, then that would help prove the model out, and that would create incentives for
+
+23:41.280 --> 23:45.920
+people to join. So I encourage you to do so. Thank you. Well, thank you. You've definitely
+
+23:45.920 --> 23:50.320
+made a very nice case for it, and people can make their own minds now by checking the link.
+
+NOTE A flicker of light and following your curiosity
+
+23:50.320 --> 23:55.280
+We really encourage you to follow up on a lot of the talks. It's one thing. One thing that we always
+
+23:55.280 --> 24:02.080
+say with Sasha to the people, be they speakers, be they user group members, is that Emacs can't,
+
+24:02.080 --> 24:08.000
+and user groups, any kind of community activity for Emacs is about curiosity. And it's one thing
+
+24:08.000 --> 24:14.960
+to ignite the flame of curiosity in some peoples. It's actually much better to actually follow the
+
+24:14.960 --> 24:19.120
+fuse and see where it leads you. Because, you know, it's a little fuse, a little tiny flame,
+
+24:19.120 --> 24:24.000
+a flicker of a flame, a flicker of light going in a direction that might explode so much curiosity
+
+24:24.000 --> 24:32.960
+later down the line. I was talking earlier with Blaine about, you know, oh, last year he was
+
+24:32.960 --> 24:39.280
+presenting, it had only been six, it had only been, I can't speak English, it's 10.45 a.m. in
+
+24:39.280 --> 24:46.000
+my time zone. I'm starting to tire. But he had only started using Emacs six months prior to
+
+24:46.000 --> 24:51.040
+presenting, and he was already so proficient in it. And it feels like, it's kind of like in Lost,
+
+24:51.040 --> 24:55.280
+you know, when you have the rope and you pull on the rope and it brings you so far away. Well,
+
+24:55.280 --> 25:01.200
+do follow this curiosity, be it for what Sid has presented to you today, but for any of the topics
+
+25:01.200 --> 25:04.960
+that we've presented to you today. So thank you so much, Sid, for all your time, all your
+
+25:04.960 --> 25:09.280
+presentation, and your answers. Thank you so much, Leo. Appreciate it. Thanks for having me.
diff --git a/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt
new file mode 100644
index 00000000..195fdb36
--- /dev/null
+++ b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:18.839
+Problems
+
+00:00:18.840 --> 00:00:30.839
+Solution?
+
+00:00:30.840 --> 00:00:55.839
+A common underlying problem
+
+00:00:55.840 --> 00:02:05.759
+Capitalism
+
+00:02:05.760 --> 00:03:49.839
+Copyright
+
+00:03:49.840 --> 00:05:01.759
+An attribution-based economic system is efficient
+
+00:05:01.760 --> 00:07:45.199
+Gyroscopes
+
+00:07:45.200 --> 00:09:05.919
+Prototypes
+
+00:09:05.920 --> 00:10:05.919
+Founding documents
+
+00:10:05.920 --> 00:10:24.319
+Declaration of non-ownership
+
+00:10:24.320 --> 00:11:23.239
+The financial model
+
+00:11:23.240 --> 00:12:49.119
+The attribution model
+
+00:12:49.120 --> 00:13:59.919
+The accounting system
+
+00:13:59.920 --> 00:15:17.599
+drym.org Github account
+
+00:15:17.600 --> 00:17:11.559
+Expanding the boundary
+
+00:17:11.560 --> 00:18:39.159
+Adopting this idea
+
+00:18:39.160 --> 00:19:04.079
+Closing thoughts
+
+00:19:04.080 --> 00:19:56.240
+Taking care of one another
diff --git a/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt
new file mode 100644
index 00000000..3a907943
--- /dev/null
+++ b/2022/captions/emacsconf-2022-maint--maintaining-the-maintainers-attribution-as-an-economic-model-for-open-source--sid-kasivajhula--main.vtt
@@ -0,0 +1,1192 @@
+WEBVTT captioned by sid
+
+NOTE Problems
+
+00:00:00.000 --> 00:00:06.319
+When we think about the problems of the world
+
+00:00:06.320 --> 00:00:12.119
+we see global warming, war, appropriation, poverty,
+
+00:00:12.120 --> 00:00:13.879
+and among numerous other problems,
+
+00:00:13.880 --> 00:00:16.199
+also the inability to make a living
+
+00:00:16.200 --> 00:00:18.839
+as an open source developer.
+
+NOTE Solution?
+
+00:00:18.840 --> 00:00:21.999
+Now this last problem may seem a lot less consequential
+
+00:00:22.000 --> 00:00:23.479
+compared to the other ones,
+
+00:00:23.480 --> 00:00:26.759
+but what if I told you that the solution to this problem
+
+00:00:26.760 --> 00:00:30.839
+and the solutions to the others are one and the same?
+
+NOTE A common underlying problem
+
+00:00:30.840 --> 00:00:33.479
+And it's because there's a common underlying problem
+
+00:00:33.480 --> 00:00:36.119
+at the heart of all of these problems.
+
+00:00:36.120 --> 00:00:39.279
+I'm going to tell you what that problem is in one sentence.
+
+00:00:39.280 --> 00:00:42.519
+You ready for it? It is ...
+
+00:00:42.520 --> 00:00:48.559
+the deviation of market value from _true_ value.
+
+00:00:48.560 --> 00:00:50.439
+Let's think about this in the context of
+
+00:00:50.440 --> 00:00:55.839
+existing economic systems such as capitalism and communism.
+
+NOTE Capitalism
+
+00:00:55.840 --> 00:00:58.679
+And of these, I want to focus on capitalism
+
+00:00:58.680 --> 00:01:01.999
+because it is the only nontrivial economic system, really.
+
+00:01:02.000 --> 00:01:04.799
+Communism is more sort of a political means
+
+00:01:04.800 --> 00:01:06.999
+to achieve economic ends.
+
+00:01:07.000 --> 00:01:09.079
+And the other economic systems exist
+
+00:01:09.080 --> 00:01:11.679
+sort of on a spectrum between these two.
+
+00:01:11.680 --> 00:01:14.319
+So let's focus on capitalism.
+
+00:01:14.320 --> 00:01:19.919
+Capitalism has as its basis of value supply and demand.
+
+00:01:19.920 --> 00:01:21.959
+And consequently, there is a great emphasis
+
+00:01:21.960 --> 00:01:25.199
+on this idea of ownership.
+
+00:01:25.200 --> 00:01:28.719
+Now ownership is an idea that made some kind of sense
+
+00:01:28.720 --> 00:01:31.559
+when you have goods and services
+
+00:01:31.560 --> 00:01:33.119
+that are constrained in some way,
+
+00:01:33.120 --> 00:01:36.119
+that are essentially finite in supply.
+
+00:01:36.120 --> 00:01:37.839
+But when you have things like
+
+00:01:37.840 --> 00:01:41.079
+works of software, art, and music,
+
+00:01:41.080 --> 00:01:43.879
+which are essentially infinite in supply,
+
+00:01:43.880 --> 00:01:46.359
+the idea of ownership and supply and demand
+
+00:01:46.360 --> 00:01:48.319
+don't make sense anymore.
+
+00:01:48.320 --> 00:01:51.679
+And yet we employ the institution of property
+
+00:01:51.680 --> 00:01:56.079
+to constrain supply and introduce the idea of supply
+
+00:01:56.080 --> 00:01:58.399
+just so that we can induce a market value
+
+00:01:58.400 --> 00:02:00.319
+in terms of supply and demand
+
+00:02:00.320 --> 00:02:05.759
+in a capitalist economic system. And it's wrongheaded.
+
+NOTE Copyright
+
+00:02:05.760 --> 00:02:10.319
+How many of us have written copyright declarations
+
+00:02:10.320 --> 00:02:12.919
+like these on our work.
+
+00:02:12.920 --> 00:02:14.719
+It's a lot of work!
+
+00:02:14.720 --> 00:02:18.159
+Especially when we have version control.
+
+00:02:18.160 --> 00:02:19.879
+Now in this example,
+
+00:02:19.880 --> 00:02:23.119
+almost every line is written by a different person,
+
+00:02:23.120 --> 00:02:25.519
+so who owns the code in this case?
+
+00:02:25.520 --> 00:02:27.839
+Who owns the copyright here?
+
+00:02:27.840 --> 00:02:30.039
+Is it some of them, is it all of them,
+
+00:02:30.040 --> 00:02:32.879
+do they share it in some way?
+
+00:02:32.880 --> 00:02:34.879
+It doesn't really make sense,
+
+00:02:34.880 --> 00:02:37.759
+especially when the reason we're employing
+
+00:02:37.760 --> 00:02:40.079
+copyright and ownership in this case
+
+00:02:40.080 --> 00:02:44.079
+is to approximate the idea of attribution,
+
+00:02:44.080 --> 00:02:46.559
+which is what we really care about here.
+
+00:02:46.560 --> 00:02:50.999
+And that brings us to the nature of the solution,
+
+00:02:51.000 --> 00:02:53.159
+which is to move away from an economic system
+
+00:02:53.160 --> 00:02:55.879
+based on ownership and supply and demand,
+
+00:02:55.880 --> 00:02:59.399
+to an economic system based on attribution, instead.
+
+00:02:59.400 --> 00:03:02.479
+That is, moving away from who _owns_ what
+
+00:03:02.480 --> 00:03:07.319
+to who _did_ what and how important was it.
+
+00:03:07.320 --> 00:03:09.719
+And we can do this by the process of
+
+00:03:09.720 --> 00:03:12.959
+Dialectical Inheritance Attribution,
+
+00:03:12.960 --> 00:03:16.639
+which just means that we do it in a collective way
+
+00:03:16.640 --> 00:03:20.639
+using common collectively agreed upon standards
+
+00:03:20.640 --> 00:03:24.239
+that are applied transparently to all.
+
+00:03:24.240 --> 00:03:25.599
+And when we have an economic system
+
+00:03:25.600 --> 00:03:26.919
+that is based on attribution
+
+00:03:26.920 --> 00:03:28.799
+as the source of value in this way,
+
+00:03:28.800 --> 00:03:34.719
+we call it attribution based economics.
+
+00:03:34.720 --> 00:03:39.279
+Now, once we have that, it gives us fairness,
+
+00:03:39.280 --> 00:03:43.639
+effective empowerment of expertise,
+
+00:03:43.640 --> 00:03:46.359
+freedom through incentives rather than through coercion.
+
+00:03:46.360 --> 00:03:49.839
+And privacy as well.
+
+NOTE An attribution-based economic system is efficient
+
+00:03:49.840 --> 00:03:52.359
+But I could tell you all of those things
+
+00:03:52.360 --> 00:03:57.079
+and some may still say, "Why should I care about this?"
+
+00:03:57.080 --> 00:03:58.279
+There are those who would say
+
+00:03:58.280 --> 00:04:00.679
+that fairness is not a good goal,
+
+00:04:00.680 --> 00:04:02.999
+and that might makes right,
+
+00:04:03.000 --> 00:04:04.599
+and that as Darwin showed us,
+
+00:04:04.600 --> 00:04:08.999
+the nature of nature is violence.
+
+00:04:09.000 --> 00:04:12.439
+Now I know that many of us reject this ideology,
+
+00:04:12.440 --> 00:04:16.359
+and we feel in our bones that it is wrong.
+
+00:04:16.360 --> 00:04:19.279
+But luckily we don't have to resort to high philosophy
+
+00:04:19.280 --> 00:04:21.759
+and gut feeling in order to convince ourselves
+
+00:04:21.760 --> 00:04:24.719
+that an attribution-based system is truly better.
+
+00:04:24.720 --> 00:04:26.679
+Because in addition to all of
+
+00:04:26.680 --> 00:04:28.159
+those other properties we talked about,
+
+00:04:28.160 --> 00:04:33.399
+an attribution-based economic system is also efficient.
+
+00:04:33.400 --> 00:04:36.959
+And I say this from the perspective of having
+
+00:04:36.960 --> 00:04:39.799
+an admiration for the efficiency of capitalism.
+
+00:04:39.800 --> 00:04:43.399
+So understand that that is my perspective
+
+00:04:43.400 --> 00:04:45.079
+when I say that this system --
+
+00:04:45.080 --> 00:04:47.479
+an attribution-based economic system --
+
+00:04:47.480 --> 00:04:51.159
+is significantly more efficient than capitalism.
+
+00:04:51.160 --> 00:04:55.839
+And it achieves that by virtue of eliminating the waste
+
+00:04:55.840 --> 00:04:58.479
+that is inherent in adversarial competition,
+
+00:04:58.480 --> 00:05:01.759
+while still preserving market forces!
+
+NOTE Gyroscopes
+
+00:05:01.760 --> 00:05:05.159
+In addition to this property
+
+00:05:05.160 --> 00:05:07.159
+there is also this other property
+
+00:05:07.160 --> 00:05:10.599
+that I think is truly profound,
+
+00:05:10.600 --> 00:05:15.879
+and I want to motivate it by this example of a gyroscope.
+
+00:05:15.880 --> 00:05:19.399
+Now many of us have had the opportunity to play with
+
+00:05:19.400 --> 00:05:21.239
+a gyroscope at some point in our lives.
+
+00:05:21.240 --> 00:05:23.479
+If you haven't, I encourage you to go out and get one
+
+00:05:23.480 --> 00:05:25.799
+and try it out. It also makes a good gift
+
+00:05:25.800 --> 00:05:26.999
+if you're thinking about giving it
+
+00:05:27.000 --> 00:05:28.479
+to somebody else this year.
+
+00:05:28.480 --> 00:05:32.559
+But if you've played with a gyroscope
+
+00:05:32.560 --> 00:05:35.239
+then you've had the experience, perhaps,
+
+00:05:35.240 --> 00:05:37.919
+of putting it on your hand and moving it around.
+
+00:05:37.920 --> 00:05:42.799
+And no matter what you do, it will always maintain its axis.
+
+00:05:42.800 --> 00:05:45.519
+Even if you try to push it
+
+00:05:45.520 --> 00:05:48.239
+and try to make it deviate from that axis,
+
+00:05:48.240 --> 00:05:50.399
+it will fight you. It will resist you,
+
+00:05:50.400 --> 00:05:53.039
+and keep to that axis no matter what.
+
+00:05:53.040 --> 00:05:56.639
+And if you've had this experience,
+
+00:05:56.640 --> 00:05:58.039
+then believe it or not,
+
+00:05:58.040 --> 00:06:02.079
+you have some insight into the nature of economic systems.
+
+00:06:02.080 --> 00:06:07.039
+Because if we try to get an economic system to do something
+
+00:06:07.040 --> 00:06:09.279
+other than what it wants to do,
+
+00:06:09.280 --> 00:06:11.079
+other than what is its nature,
+
+00:06:11.080 --> 00:06:14.839
+then it will resist us and it will fight that change.
+
+00:06:14.840 --> 00:06:17.759
+Now, I don't know about you,
+
+00:06:17.760 --> 00:06:22.719
+but I'd prefer to avoid fighting these gyroscopic forces.
+
+00:06:22.720 --> 00:06:25.039
+I'd rather have these forces work with me
+
+00:06:25.040 --> 00:06:29.479
+rather than against me. Now in a capitalist system,
+
+00:06:29.480 --> 00:06:32.599
+there is another problem, which is that
+
+00:06:32.600 --> 00:06:35.959
+not only do you have these gyroscopic forces at work,
+
+00:06:35.960 --> 00:06:39.159
+but these forces aren't even all working together.
+
+00:06:39.160 --> 00:06:42.119
+They're working against each other, in many cases.
+
+00:06:42.120 --> 00:06:46.439
+They represent misaligned interests.
+
+00:06:46.440 --> 00:06:50.079
+And indeed, these misaligned interests
+
+00:06:50.080 --> 00:06:53.639
+are the very means by which these forces operate at all.
+
+00:06:53.640 --> 00:06:57.559
+So in a way, war is not just
+
+00:06:57.560 --> 00:06:59.679
+an inevitable consequence in this system
+
+00:06:59.680 --> 00:07:05.279
+but is rather the very nature of such a system.
+
+00:07:05.280 --> 00:07:08.359
+In an attribution-based system, on the other hand,
+
+00:07:08.360 --> 00:07:11.399
+by virtue of the source of value
+
+00:07:11.400 --> 00:07:13.079
+being collective attribution,
+
+00:07:13.080 --> 00:07:17.239
+we are able to achieve alignment
+
+00:07:17.240 --> 00:07:19.679
+of all of these interests at every scale,
+
+00:07:19.680 --> 00:07:22.719
+so that at every scale of society,
+
+00:07:22.720 --> 00:07:24.759
+from the smallest to the largest scales,
+
+00:07:24.760 --> 00:07:26.479
+the interests will be aligned,
+
+00:07:26.480 --> 00:07:28.559
+will be consonant and harmonious.
+
+00:07:28.560 --> 00:07:33.799
+I think this is a very important, profound quality
+
+00:07:33.800 --> 00:07:38.119
+that I think is the fundamental problem of economics -
+
+00:07:38.120 --> 00:07:40.479
+the fundamental goal of economics to solve.
+
+00:07:40.480 --> 00:07:43.839
+And I believe that an attribution-based economic system
+
+00:07:43.840 --> 00:07:45.199
+addresses it and solves it.
+
+NOTE Prototypes
+
+00:07:45.200 --> 00:07:50.279
+So without further ado, I want to bring it home
+
+00:07:50.280 --> 00:07:52.479
+to the prototype that we have in mind
+
+00:07:52.480 --> 00:07:53.839
+for the Emacs community.
+
+00:07:53.840 --> 00:07:56.279
+Now we want to start in the Emacs community
+
+00:07:56.280 --> 00:07:58.239
+because Emacs has a long tradition
+
+00:07:58.240 --> 00:08:02.159
+of exploring better ways of doing things
+
+00:08:02.160 --> 00:08:05.279
+and pursuing better alternatives to the status quo.
+
+00:08:05.280 --> 00:08:09.399
+Now, to give you an overview of the prototype
+
+00:08:09.400 --> 00:08:12.639
+that we've implemented for open source projects.
+
+00:08:12.640 --> 00:08:15.439
+The prototype is composed of two broad phases,
+
+00:08:15.440 --> 00:08:18.959
+that is, the appraisal phase and the accounting phase.
+
+00:08:18.960 --> 00:08:21.959
+Any project is composed of ideas, capital and labor.
+
+00:08:21.960 --> 00:08:26.279
+The appraisal phase is involved in assessing the work done
+
+00:08:26.280 --> 00:08:29.119
+in terms of how much value was created
+
+00:08:29.120 --> 00:08:31.959
+and who created the value and how important that value is.
+
+00:08:31.960 --> 00:08:35.199
+The output of this stage is an attributions file.
+
+00:08:35.200 --> 00:08:42.039
+And the second phase, of accounting, is about, you know,
+
+00:08:42.040 --> 00:08:43.679
+how do you handle payments that come in
+
+00:08:43.680 --> 00:08:45.119
+and how do you pay people out.
+
+00:08:45.120 --> 00:08:48.879
+Now the first part has more of a social component to it
+
+00:08:48.880 --> 00:08:50.239
+and the second part has more of
+
+00:08:50.240 --> 00:08:53.839
+a technological component to it that can be automated.
+
+00:08:53.840 --> 00:08:56.239
+So in order to implement this prototype,
+
+00:08:56.240 --> 00:08:57.839
+we have two things.
+
+00:08:57.840 --> 00:09:01.679
+We have founding documents that describe the social aspects,
+
+00:09:01.680 --> 00:09:04.039
+and an accounting system that automates
+
+00:09:04.040 --> 00:09:05.919
+some of the technological aspects.
+
+NOTE Founding documents
+
+00:09:05.920 --> 00:09:10.799
+The founding documents, in the noble tradition
+
+00:09:10.800 --> 00:09:14.559
+of the Gayaneshagowa and the US constitution,
+
+00:09:14.560 --> 00:09:17.799
+include a constitution which describes
+
+00:09:17.800 --> 00:09:20.679
+the guiding principles of ABE,
+
+00:09:20.680 --> 00:09:25.399
+and the two main prongs are forward-looking empowerment
+
+00:09:25.400 --> 00:09:26.639
+and backward-looking fairness.
+
+00:09:26.640 --> 00:09:28.839
+This means that we want to empower
+
+00:09:28.840 --> 00:09:31.599
+those individuals and groups
+
+00:09:31.600 --> 00:09:33.599
+that are most likely to create value in the future,
+
+00:09:33.600 --> 00:09:36.959
+while also recognizing and fairly compensating
+
+00:09:36.960 --> 00:09:38.839
+those who've created value in the past,
+
+00:09:38.840 --> 00:09:41.919
+to set a good example and incentivize others
+
+00:09:41.920 --> 00:09:45.559
+to take chances in creating value.
+
+00:09:45.560 --> 00:09:50.079
+And it describes high level principles of
+
+00:09:50.080 --> 00:09:52.119
+dialectical inheritance attribution
+
+00:09:52.120 --> 00:09:53.879
+as proceeding by means of
+
+00:09:53.880 --> 00:09:55.999
+common, collectively agreed-upon standards
+
+00:09:56.000 --> 00:09:56.919
+that are applied to all.
+
+00:09:56.920 --> 00:09:59.759
+And the key thing here is these improvements feed back
+
+00:09:59.760 --> 00:10:01.919
+to the whole and apply to everyone.
+
+00:10:01.920 --> 00:10:03.639
+And this is an important quality
+
+00:10:03.640 --> 00:10:05.919
+to ensuring fairness and accuracy.
+
+NOTE Declaration of non-ownership
+
+00:10:05.920 --> 00:10:09.839
+There's also a declaration of non-ownership.
+
+00:10:09.840 --> 00:10:13.959
+We saw already that ownership is an overused institution.
+
+00:10:13.960 --> 00:10:20.079
+This just codifies that and allows us to shed
+
+00:10:20.080 --> 00:10:22.439
+the baggage of this idea of ownership
+
+00:10:22.440 --> 00:10:24.319
+where it doesn't make any sense.
+
+NOTE The financial model
+
+00:10:24.320 --> 00:10:28.159
+A third document is the financial model
+
+00:10:28.160 --> 00:10:31.319
+which describes how payments are to be treated,
+
+00:10:31.320 --> 00:10:34.159
+and a key idea here is that when you pay money
+
+00:10:34.160 --> 00:10:37.359
+to an open source project, you know,
+
+00:10:37.360 --> 00:10:40.239
+today you don't really have an incentive to do so,
+
+00:10:40.240 --> 00:10:42.439
+and it essentially is kind of like a donation.
+
+00:10:42.440 --> 00:10:45.999
+But in this model, in an attribution-based model,
+
+00:10:46.000 --> 00:10:48.119
+when you pay money to a project,
+
+00:10:48.120 --> 00:10:49.999
+you're creating value in a way.
+
+00:10:50.000 --> 00:10:51.599
+You're contributing value to the project
+
+00:10:51.600 --> 00:10:53.279
+and that itself is attributable.
+
+00:10:53.280 --> 00:10:56.239
+And the manner in which we'll treat this
+
+00:10:56.240 --> 00:10:58.839
+is in terms of the fair market price that, again,
+
+00:10:58.840 --> 00:11:00.199
+we agree upon collectively.
+
+00:11:00.200 --> 00:11:04.959
+And any payment that exceeds the fair market price
+
+00:11:04.960 --> 00:11:06.399
+is going to be treated as investment.
+
+00:11:06.400 --> 00:11:10.199
+And the goal here for this financial model
+
+00:11:10.200 --> 00:11:11.879
+is for the system to be self-sustaining,
+
+00:11:11.880 --> 00:11:15.439
+so I think there are many open problems here
+
+00:11:15.440 --> 00:11:18.439
+and any finance experts or any other experts
+
+00:11:18.440 --> 00:11:21.479
+who are interested in contributing here,
+
+00:11:21.480 --> 00:11:23.239
+your help is needed, certainly.
+
+NOTE The attribution model
+
+00:11:23.240 --> 00:11:26.759
+There's also an attribution model document,
+
+00:11:26.760 --> 00:11:28.999
+which describes some of the theoretical ideas
+
+00:11:29.000 --> 00:11:33.479
+that would guide dialectical inheritance attribution,
+
+00:11:33.480 --> 00:11:36.919
+and there are many interesting ideas here.
+
+00:11:36.920 --> 00:11:40.359
+One that I'd like to mention is "backpropagation,"
+
+00:11:40.360 --> 00:11:42.559
+which is the idea that
+
+00:11:42.560 --> 00:11:45.199
+as we're improving the standards over time
+
+00:11:45.200 --> 00:11:48.279
+and they're likely to get more accurate and fair over time,
+
+00:11:48.280 --> 00:11:51.559
+we'd like these more accurate and fair standards
+
+00:11:51.560 --> 00:11:56.519
+to "backpropagate" and calibrate the value assignments
+
+00:11:56.520 --> 00:11:57.799
+that were done in the past.
+
+00:11:57.800 --> 00:12:01.079
+And this means that some people might have been
+
+00:12:01.080 --> 00:12:02.839
+underpaid in the past
+
+00:12:02.840 --> 00:12:05.199
+and we would pay them what they were underpaid,
+
+00:12:05.200 --> 00:12:06.479
+or the balance,
+
+00:12:06.480 --> 00:12:08.839
+and some people may have been overpaid.
+
+00:12:08.840 --> 00:12:11.839
+Now in that case we're not going to go and say,
+
+00:12:11.840 --> 00:12:14.439
+"hey we overpaid you, give us the money back."
+
+00:12:14.440 --> 00:12:18.199
+Instead the system as a whole is going to bear
+
+00:12:18.200 --> 00:12:19.519
+the cost of being wrong,
+
+00:12:19.520 --> 00:12:22.159
+and so it's kind of an insurance policy.
+
+00:12:22.160 --> 00:12:25.599
+But I think another more interesting quality here is that
+
+00:12:25.600 --> 00:12:29.959
+the system in practice wouldn't really
+
+00:12:29.960 --> 00:12:32.999
+absorb any negative impact here
+
+00:12:33.000 --> 00:12:34.319
+because there is an incentive
+
+00:12:34.320 --> 00:12:37.599
+for these people who've been overpaid
+
+00:12:37.600 --> 00:12:38.799
+to reinvest that money.
+
+00:12:38.800 --> 00:12:42.839
+So I think they would want to invest the money
+
+00:12:42.840 --> 00:12:45.519
+in other places that the system has valued
+
+00:12:45.520 --> 00:12:49.119
+as being valuable and showing potential.
+
+NOTE The accounting system
+
+00:12:49.120 --> 00:12:54.239
+The second component of the implementation
+
+00:12:54.240 --> 00:12:58.599
+is the accounting system. All accounting is public.
+
+00:12:58.600 --> 00:13:00.879
+All payments into the repo are public
+
+00:13:00.880 --> 00:13:03.399
+and all payments out of the project are also public.
+
+00:13:03.400 --> 00:13:05.479
+We can do some things for privacy,
+
+00:13:05.480 --> 00:13:08.519
+and again, the basis of this system is dialogue.
+
+00:13:08.520 --> 00:13:10.759
+It's not a fundamentally technologically system.
+
+00:13:10.760 --> 00:13:12.799
+It's a fundamentally dialogue-based system,
+
+00:13:12.800 --> 00:13:14.759
+and that, to be honest with you, is everything.
+
+00:13:14.760 --> 00:13:16.999
+It's all systems that we have in place.
+
+00:13:17.000 --> 00:13:21.119
+But by embracing that, it means that
+
+00:13:21.120 --> 00:13:25.039
+we can do whatever we want to do by discussion,
+
+00:13:25.040 --> 00:13:26.039
+and if there's something
+
+00:13:26.040 --> 00:13:27.959
+that we cannot achieve in a technological way,
+
+00:13:27.960 --> 00:13:30.079
+we'll achieve it in a non-technological way.
+
+00:13:30.080 --> 00:13:35.999
+But anyway, the point is, all accounting is public,
+
+00:13:36.000 --> 00:13:40.399
+and text files in the repository
+
+00:13:40.400 --> 00:13:43.919
+form the inputs and outputs of the accounting system
+
+00:13:43.920 --> 00:13:48.879
+which is implemented as a GitHub action.
+
+00:13:48.880 --> 00:13:51.239
+So typically a source repository will have
+
+00:13:51.240 --> 00:13:54.119
+an ABE folder containing these three inputs:
+
+00:13:54.120 --> 00:13:55.599
+attributions, payments,
+
+00:13:55.600 --> 00:13:59.919
+and payouts. And we'll see how that works.
+
+NOTE drym.org Github account
+
+00:13:59.920 --> 00:14:04.839
+This is the drym.org Github organization account.
+
+00:14:04.840 --> 00:14:09.599
+This is an example of a repository that uses
+
+00:14:09.600 --> 00:14:12.439
+the GitHub action accounting system.
+
+00:14:12.440 --> 00:14:16.239
+So there will be a payments folder, a payouts folder,
+
+00:14:16.240 --> 00:14:18.639
+as well as an attributions file.
+
+00:14:18.640 --> 00:14:23.959
+The payments: essentially each file
+
+00:14:23.960 --> 00:14:26.759
+just represents a payment that's made to the repository.
+
+00:14:26.760 --> 00:14:29.079
+Payouts is the same except it's payments
+
+00:14:29.080 --> 00:14:32.359
+made by the admins of the repository to contributors.
+
+00:14:32.360 --> 00:14:37.159
+And the attributions file breaks down
+
+00:14:37.160 --> 00:14:40.679
+the attribution of the value in the repository
+
+00:14:40.680 --> 00:14:47.559
+by contributor. And then the billing system runs
+
+00:14:47.560 --> 00:14:50.359
+on every relevant commit,
+
+00:14:50.360 --> 00:14:53.679
+which is typically changes to the ABE folder,
+
+00:14:53.680 --> 00:14:57.239
+generates a set of transactions
+
+00:14:57.240 --> 00:15:00.519
+that are owed to various people from various payments,
+
+00:15:00.520 --> 00:15:05.079
+and then creates an issue with the outstanding balances
+
+00:15:05.080 --> 00:15:07.279
+that need to be paid out to contributors,
+
+00:15:07.280 --> 00:15:09.519
+and tells you what those balances are.
+
+00:15:09.520 --> 00:15:11.799
+So for repository or project maintainers,
+
+00:15:11.800 --> 00:15:14.879
+it automates all these accounting details
+
+00:15:14.880 --> 00:15:17.599
+and you just have to worry about fulfilling the payments.
+
+NOTE Expanding the boundary
+
+00:15:17.600 --> 00:15:23.519
+An interesting property of the prototype
+
+00:15:23.520 --> 00:15:28.399
+is that boundary incentives expand the boundary,
+
+00:15:28.400 --> 00:15:33.959
+and that is that the incentives in the system
+
+00:15:33.960 --> 00:15:38.439
+are so constructed that those on the periphery
+
+00:15:38.440 --> 00:15:40.439
+of the attribution-based economic system
+
+00:15:40.440 --> 00:15:42.079
+have an incentive to join in.
+
+00:15:42.080 --> 00:15:45.519
+And we'll see how that works.
+
+00:15:45.520 --> 00:15:51.359
+Well, as I mentioned, we're starting this prototype
+
+00:15:51.360 --> 00:15:52.919
+in the Emacs community with the
+
+00:15:52.920 --> 00:15:59.599
+Symex repo. Symex is a structural editing package,
+
+00:15:59.600 --> 00:16:05.319
+and this prototype will recognize direct contributors
+
+00:16:05.320 --> 00:16:08.159
+as well as antecedents and related projects
+
+00:16:08.160 --> 00:16:09.799
+through the process of collective attribution.
+
+00:16:09.800 --> 00:16:14.839
+We all decide how financial contributions to the Symex repo
+
+00:16:14.840 --> 00:16:18.759
+are going to be distributed to the direct contributors
+
+00:16:18.760 --> 00:16:21.039
+as well as to antecedents and related projects.
+
+00:16:21.040 --> 00:16:23.679
+So the power is yours!
+
+00:16:23.680 --> 00:16:27.159
+And that's what I meant when I said
+
+00:16:27.160 --> 00:16:29.519
+that the boundary incentives expand the boundary,
+
+00:16:29.520 --> 00:16:32.359
+because projects that we agree are owed money
+
+00:16:32.360 --> 00:16:37.959
+from the Symex repo now would have an incentive to join,
+
+00:16:37.960 --> 00:16:39.959
+because once they join they would get that money.
+
+00:16:39.960 --> 00:16:43.199
+And we'll also be implementing this in the
+
+00:16:43.200 --> 00:16:47.199
+Racket community. Racket is a Scheme dialect,
+
+00:16:47.200 --> 00:16:50.959
+and Emacs has great support for Racket in Racket Mode
+
+00:16:50.960 --> 00:16:52.159
+so I encourage you to try it.
+
+00:16:52.160 --> 00:16:55.999
+And we'll be prototyping it in the Qi repository.
+
+00:16:56.000 --> 00:16:59.599
+Qi is a language written in Racket which is, you know,
+
+00:16:59.600 --> 00:17:02.719
+it's for functional programming and things like that.
+
+00:17:02.720 --> 00:17:06.239
+And once again, we'll recognize direct contributors
+
+00:17:06.240 --> 00:17:09.239
+as well as antecedents and we all decide
+
+00:17:09.240 --> 00:17:11.559
+and agree on how those are done.
+
+NOTE Adopting this idea
+
+00:17:11.560 --> 00:17:14.119
+So how do you adopt this?
+
+00:17:14.120 --> 00:17:18.559
+You can add the github action to a repo
+
+00:17:18.560 --> 00:17:20.239
+that you are a maintainer of.
+
+00:17:20.240 --> 00:17:23.319
+You can financially support an ABE project.
+
+00:17:23.320 --> 00:17:25.199
+This is important to do
+
+00:17:25.200 --> 00:17:26.919
+because the system won't get started
+
+00:17:26.920 --> 00:17:28.119
+without money as an input.
+
+00:17:28.120 --> 00:17:31.119
+And it also has network effects, as we saw -
+
+00:17:31.120 --> 00:17:33.479
+the more money you contribute,
+
+00:17:33.480 --> 00:17:35.239
+the more incentive there is
+
+00:17:35.240 --> 00:17:36.799
+for other people to join the system.
+
+00:17:36.800 --> 00:17:39.879
+And contributions are also attributable,
+
+00:17:39.880 --> 00:17:41.079
+as we said earlier.
+
+00:17:41.080 --> 00:17:43.719
+Some of them can be treated as investments.
+
+00:17:43.720 --> 00:17:47.999
+Any help you can provide with funding
+
+00:17:48.000 --> 00:17:50.519
+would be attributable and very helpful, of course.
+
+00:17:50.520 --> 00:17:54.079
+And yeah, if you can help us achieve
+
+00:17:54.080 --> 00:17:55.839
+the goal of self-sufficiency
+
+00:17:55.840 --> 00:17:59.039
+without relying on capitalist entry points,
+
+00:17:59.040 --> 00:18:01.759
+that would be very helpful as well.
+
+00:18:01.760 --> 00:18:06.319
+I'd like to acknowledge the help of many individuals
+
+00:18:06.320 --> 00:18:09.399
+for this presentation
+
+00:18:09.400 --> 00:18:12.759
+as well as many of the supporting things
+
+00:18:12.760 --> 00:18:14.919
+that have gone on behind the scenes for years.
+
+00:18:14.920 --> 00:18:19.679
+And in particular for now I want to mention
+
+00:18:19.680 --> 00:18:25.559
+Jair and Ariana who wrote the accounting system
+
+00:18:25.560 --> 00:18:28.319
+that we saw earlier, and Salim who encouraged me
+
+00:18:28.320 --> 00:18:32.799
+to take this social approach to the prototype.
+
+00:18:32.800 --> 00:18:36.559
+And so many more people who have believed and invested
+
+00:18:36.560 --> 00:18:39.159
+in the cause of "attribution, not ownership!"
+
+NOTE Closing thoughts
+
+00:18:39.160 --> 00:18:42.759
+I want to leave you with this closing thought.
+
+00:18:42.760 --> 00:18:46.159
+The electromagnetic attraction between two objects
+
+00:18:46.160 --> 00:18:49.919
+is 10^42 stronger (!) than the gravitational attraction
+
+00:18:49.920 --> 00:18:51.079
+between these same objects.
+
+00:18:51.080 --> 00:18:53.879
+And yet, a stone falls to the Earth
+
+00:18:53.880 --> 00:18:56.679
+under the influence of gravity, not magnetism.
+
+00:18:56.680 --> 00:19:00.879
+The reason is that the e/m forces are polarized,
+
+00:19:00.880 --> 00:19:04.079
+much like our world, and cancel each other out.
+
+NOTE Taking care of one another
+
+00:19:04.080 --> 00:19:07.719
+Now in this world, we are told
+
+00:19:07.720 --> 00:19:09.559
+that we should look out for ourselves
+
+00:19:09.560 --> 00:19:11.879
+because no one is going to look out for us.
+
+00:19:11.880 --> 00:19:14.039
+That we should take care of our own
+
+00:19:14.040 --> 00:19:17.359
+because we can't rely on others to care.
+
+00:19:17.360 --> 00:19:22.479
+An attribution-based economy is nothing like that.
+
+00:19:22.480 --> 00:19:23.959
+We care about each other,
+
+00:19:23.960 --> 00:19:25.439
+we take care of each other,
+
+00:19:25.440 --> 00:19:29.879
+because taking care of one another is valuable,
+
+00:19:29.880 --> 00:19:32.559
+and an attribution-based economic system
+
+00:19:32.560 --> 00:19:39.079
+is capable of recognizing that value, in financial terms.
+
+00:19:39.080 --> 00:19:43.879
+And as a result, we are safe in the embrace of the world.
+
+00:19:43.880 --> 00:19:56.240
+So, um, yeah. Let's go!
diff --git a/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt
new file mode 100644
index 00000000..2918301d
--- /dev/null
+++ b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--answers.vtt
@@ -0,0 +1,563 @@
+WEBVTT
+
+00:00.000 --> 00:14.120
+All right. Hi, again, everyone. So, we are back. And I am with Vavin. Hi, Vavin. How
+
+00:14.120 --> 00:15.120
+are you doing?
+
+00:15.120 --> 00:18.120
+I'm good. How about you?
+
+00:18.120 --> 00:24.040
+I'm doing well. You will note that I now have an extra layer because I was absolutely frozen
+
+00:24.040 --> 00:28.960
+in the first half of this year's EmacsConf. But now, hopefully, I should start getting
+
+00:28.960 --> 00:33.080
+a little warmer. Usually, I'm more stressed, you know, when we only have one track and
+
+00:33.080 --> 00:36.640
+we only have about two minutes between every talk. I need to run all the time. And even
+
+00:36.640 --> 00:40.840
+though we are in the dead of winter in Europe, usually, I'm pretty warm. But today, I am
+
+00:40.840 --> 00:45.920
+so relaxed that I have the mental availability to be cold. Anyway, this is not about me.
+
+00:45.920 --> 00:47.920
+This is about you, Vavin.
+
+00:47.920 --> 00:54.740
+So, for the new joiners, newcomers to the chat, we do have a pad where you can ask questions.
+
+00:54.740 --> 00:59.400
+And we are primarily looking at this pad for the questions. What we'll do afterwards is
+
+00:59.400 --> 01:06.720
+that we'll open up this current room in which we are. And we will allow you to ask questions
+
+01:06.720 --> 01:12.360
+directly to Vavin. And it's a subject, you know, user group that is very close to Sasha
+
+01:12.360 --> 01:17.720
+and my heart because we've done a lot of work towards it. And we might have some knowledge
+
+01:17.720 --> 01:23.440
+to contribute afterwards. But for now, I prefer if we heard about Vavin. So, Vavin, take it
+
+01:23.440 --> 01:24.440
+away.
+
+01:24.440 --> 01:25.440
+Yep.
+
+01:25.440 --> 01:36.640
+I see one question. What about using on multiple computers? I think that's not related or I'm
+
+01:36.640 --> 01:38.440
+not sure what it is about.
+
+01:38.440 --> 01:40.440
+I'm not sure either.
+
+01:40.440 --> 01:46.840
+Yeah, I'll just do the next one. What about collaborative editing with this multiple computers
+
+01:46.840 --> 01:50.920
+with Macs like CRDT or with R2D2?
+
+01:50.920 --> 01:57.920
+I think there's something weird going on. I'll give you just a second.
+
+01:57.920 --> 02:04.120
+I'll just pick up the relevant one in that case.
+
+02:04.120 --> 02:05.680
+Sure, thank you.
+
+02:05.680 --> 02:07.840
+Thoughts on physical meetups.
+
+02:07.840 --> 02:19.560
+Yeah, so this year, I think a few months back, I had thought of doing it. But the way right
+
+02:19.560 --> 02:28.040
+now it is, at least in my region, the community is comparatively small. So usually right now
+
+02:28.040 --> 02:33.480
+the model is working is basically the remote one. And we get people from some people from
+
+02:33.480 --> 02:39.080
+I think China, some people from Australia. So we get to have a couple of people and good
+
+02:39.080 --> 02:46.680
+discussions usually. Whereas for physical meetups, what I've been thinking is maybe
+
+02:46.680 --> 02:52.960
+one off meetup can be physical. Let's say you come together similar to people have been
+
+02:52.960 --> 03:00.680
+watching Emacs on this year. So something like you come together, do the online meetup
+
+03:00.680 --> 03:05.520
+first and then networking and discussions can happen offline. So that was one of my
+
+03:05.520 --> 03:12.880
+idea. Maybe I'll try it with Emacs APAC sooner or later and we'll see how it goes. So that's
+
+03:12.880 --> 03:18.880
+the current plan about physical meetups. And in terms of if you ask me thoughts, they are
+
+03:18.880 --> 03:25.340
+good too. So you get to talk with people face to face, you got to make more connections.
+
+03:25.340 --> 03:30.840
+So yeah, I might experiment some mixed way of doing it right once in a while you meet
+
+03:30.840 --> 03:36.720
+or otherwise you do it online so that people who are not able to join in or travel to that
+
+03:36.720 --> 03:40.160
+particular area or region, they can just join online.
+
+03:40.160 --> 03:48.240
+Yeah, it's a very interesting topic of physical meetups because we, so I participate in one
+
+03:48.240 --> 03:56.880
+of the workshop Emacs Paris and we used to have in-person meetups in Paris and usually
+
+03:56.880 --> 04:02.040
+there were about five to 10 people showing up, which was a good number. But when COVID
+
+04:02.040 --> 04:07.820
+happened and we moved to virtual meetings, we started having a lot more people. Now we
+
+04:07.820 --> 04:12.680
+are averaging about 15 to 20 people at every session and it's amazing. But the problem
+
+04:12.680 --> 04:20.000
+is, I'm knocking on wood really hard, but now that COVID is a little easier to manage
+
+04:20.000 --> 04:25.720
+and that's a lot of people are returning to in-person meetings, it's a little more complicated
+
+04:25.720 --> 04:32.040
+really to say, do we go back to physical meetings even though we have more people on a virtual
+
+04:32.040 --> 04:36.640
+meeting? It causes us to ask many questions about why do we want those meetings to be
+
+04:36.640 --> 04:44.320
+held? And we need to think about this in 2023 with the organizers of Emacs Paris and I think
+
+04:44.320 --> 04:53.840
+Emacs SF also was in the process of thinking about how to go back to physical venues. And
+
+04:53.840 --> 05:01.680
+I think right now the consensus amongst a lot of workshop user group organizers is that
+
+05:01.680 --> 05:06.920
+they would like to have both. So if it was a monthly meeting before, why not have a physical
+
+05:06.920 --> 05:14.960
+meeting every month and a virtual meeting every month as well on a two-week cycle. So
+
+05:14.960 --> 05:25.240
+that's a lot more work, obviously. It's not choosing, it's choosing. I'm not sure how
+
+05:25.240 --> 05:30.400
+big the pool of people you have in Emacs APAC actually is but it feels like it's a much
+
+05:30.400 --> 05:39.720
+larger area than say Emacs Paris for France. So you try it even though. Yeah, exactly.
+
+05:39.720 --> 05:48.320
+So in India, there is the region with this Maharashtra Pune, it is like one end and across
+
+05:48.320 --> 05:54.880
+maybe you can say 500-600 kilometers radius, you have many other cities where more people
+
+05:54.880 --> 06:02.960
+are there. So having all of them at one place is basically event like conference or something.
+
+06:02.960 --> 06:08.400
+Monthly meetup, probably not. So there is one more meetup group I managed, not related
+
+06:08.400 --> 06:14.280
+to Emacs, but we had same question, what to do now? We have many people joining us throughout
+
+06:14.280 --> 06:20.920
+the state and should we have a meetup in one city only? So yeah, I think we'll have to
+
+06:20.920 --> 06:25.400
+experiment and see. Yeah, but it's fun to experiment, it's fun
+
+06:25.400 --> 06:30.160
+to have. We know that we have interested people all around the world, like that it showed
+
+06:30.160 --> 06:34.840
+you the type of workshop that we can have and how to run your own, but we already have
+
+06:34.840 --> 06:39.120
+many workshops around the world. It wasn't the case if you go back three years ago. I
+
+06:39.120 --> 06:44.720
+think if I'm completely speedboarding now, but I think we had about five user groups
+
+06:44.720 --> 06:52.520
+worldwide three years ago, and now we must have something like 12, 13, 14 even, which
+
+06:52.520 --> 06:56.680
+is a massive increase when you think about it. Now that Babin has provided you with the
+
+06:56.680 --> 07:01.440
+tools to do just the same and start your own workshop, and also you have the buddy system
+
+07:01.440 --> 07:07.880
+of Andrea that you saw earlier today, you have more options than ever to be able to
+
+07:07.880 --> 07:13.240
+meet people talking about Emacs. Now, there's obviously EmacsConf as well, which is helping
+
+07:13.240 --> 07:18.800
+and we have a lot of lovely tools to share with you, but I think it's better or it's
+
+07:18.800 --> 07:24.120
+a good compliment to have a monthly checkup with people who might feel a little closer
+
+07:24.120 --> 07:28.920
+to you, either, and closer can have multiple definitions, you know, it can be closer in
+
+07:28.920 --> 07:34.840
+terms of proficiency with Emacs, or it can be closer geographically, which makes it easier
+
+07:34.840 --> 07:39.960
+or culturally, which will make it easier to converse with people. We do have a question
+
+07:39.960 --> 07:44.440
+about hybrid meetings. Do you want to take this one, Babin? It's so related to what we
+
+07:44.440 --> 07:45.440
+were talking about.
+
+07:45.440 --> 07:53.800
+Yep, yep, yep, yeah. So I tried it, not with Emacs one, but with the other one I organized.
+
+07:53.800 --> 07:59.800
+And even I had some thoughts. The only problem is what happens, the people who are joining
+
+07:59.800 --> 08:07.960
+virtually, they usually end up feeling left out. Because people who are in the room, they
+
+08:07.960 --> 08:13.640
+might be discussing something face to face, they might have some discussions. The only
+
+08:13.640 --> 08:21.200
+way I think would work is everyone joins the online link from their own machines. You do
+
+08:21.200 --> 08:27.680
+your regular meetup discussions. And after that, you have some discussions. Because otherwise,
+
+08:27.680 --> 08:33.560
+one side or other side will end up feeling left out. Rather than doing it, I'll just
+
+08:33.560 --> 08:39.160
+keep it one or other, either completely virtual or completely in person.
+
+08:39.160 --> 08:47.240
+Yeah, I think it is really complicated to do a hybrid stream well. I told you the figures
+
+08:47.240 --> 08:52.960
+of the people we had, which was roughly between five to 15 people at most in physical venues.
+
+08:52.960 --> 08:55.800
+Right now, by the way, we should probably say hi to the people in Switzerland who are
+
+08:55.800 --> 09:03.880
+currently watching Emacs in a very nice, warm room. I'm thinking warm because I'm cold.
+
+09:03.880 --> 09:07.320
+It's not only warm in terms of the weather inside the room, but also warm in terms of
+
+09:07.320 --> 09:13.320
+the people around it. Hi, everyone. Hybrid meetings pretty much take the attention
+
+09:13.320 --> 09:18.880
+of two people entirely. One to manage the physical venue, and one to manage the virtual
+
+09:18.880 --> 09:24.480
+interactions. And generally, those two people would be core organizers of the events. And
+
+09:24.480 --> 09:30.520
+that takes a lot of energy. And I think people are a little scared to do such events because
+
+09:30.520 --> 09:34.360
+you also need to manage webcams, you need to manage presentation, how to take questions,
+
+09:34.360 --> 09:41.000
+how to relay audio. And frankly, as someone who organizes or helps organize EmacsConf
+
+09:41.000 --> 09:45.080
+every year, I can tell you that it can be plenty of wrong going on with audio setup,
+
+09:45.080 --> 09:49.880
+video setup, and making sure that everyone is being listened to. But ultimately, we are
+
+09:49.880 --> 09:55.560
+sharing these tools. So maybe we could share the tools for EmacsConf for people to actually
+
+09:55.560 --> 10:00.280
+start running their own workshop. That would be interesting. But please don't send me an
+
+10:00.280 --> 10:03.680
+email asking for this. I need to rest.
+
+10:03.680 --> 10:13.760
+So there is one, I think, thought. Yeah, one thought in the IRC. It is about the time it
+
+10:13.760 --> 10:22.280
+takes for me to organize the meetup. So what I have done is creating the announcement,
+
+10:22.280 --> 10:29.360
+posting it at least on the website, I have automated it. So at times, even I forget that
+
+10:29.360 --> 10:36.120
+when is the meetup and all. But my automation takes care of creating the online website
+
+10:36.120 --> 10:42.760
+entries, announcements and all. So that saves me a lot of time and a lot of cognitive load
+
+10:42.760 --> 10:53.440
+I should say. I don't have to remember I have to announce it. And what happens is, I do
+
+10:53.440 --> 11:00.480
+plan to automate more things like announcements on IRC, announcements on Mastodon and stuff.
+
+11:00.480 --> 11:07.420
+So that will save a lot more time. But usually, that basically means I don't have to do much
+
+11:07.420 --> 11:12.920
+stuff before the meetup. It's like 15 to 20 minutes. And during the meetup, obviously
+
+11:12.920 --> 11:19.040
+I attend along with everyone else. And post meetup, it might take more time. But I haven't
+
+11:19.040 --> 11:26.080
+worked on processing or collecting the video and publishing those. So maybe add more, let's
+
+11:26.080 --> 11:29.280
+say, 30 minutes or so. So yep.
+
+11:29.280 --> 11:36.000
+Yeah, there is definitely something to be said about how do we use the workshops to
+
+11:36.000 --> 11:41.040
+make content that lasts after the workshop. It's a discussion we've been having with some
+
+11:41.040 --> 11:47.520
+of the workshop organizers. I remember mostly Emacs SF again, and also Emacs Paris. We were
+
+11:47.520 --> 11:52.760
+talking about, yes, we record the sessions, but we share the sessions only with members
+
+11:52.760 --> 11:59.440
+of the event. What if we have a really great presentation? It would be such a shame to
+
+11:59.440 --> 12:05.440
+leave it live merely on the BBB record server where only users can see it. No, it's actually
+
+12:05.440 --> 12:09.840
+much better if we could find a way to share it on YouTube, for instance, or any other
+
+12:09.840 --> 12:15.120
+distribution platform where people would be able to share this. With EmacsConf, we share
+
+12:15.120 --> 12:19.960
+all the talks that happen in prior years. What if we could have user groups and workshops
+
+12:19.960 --> 12:23.840
+do the same? That would be amazing. But I think people are feeling a little iffy and
+
+12:23.840 --> 12:28.880
+rightfully so. This is a lot of energy to first make presentations like this for the
+
+12:28.880 --> 12:36.080
+speakers, but then to package them, to caption them for accessibility. We are able to broadcast
+
+12:36.080 --> 12:42.000
+talk this year with captions with no little thanks to Bavin, who is actually helping us
+
+12:42.000 --> 12:47.840
+a lot behind the scenes working on the subtitles. Thank you again so much, Bavin, for all this.
+
+12:47.840 --> 12:52.020
+You will be the first to tell, this is a lot of work, actually. I'm not sure how much time
+
+12:52.020 --> 12:58.400
+you've spent in the last two months working on subtitles, but it's been a long time.
+
+12:58.400 --> 13:03.720
+It does take time. That's why I'm still not sure how much time it will take for me to
+
+13:03.720 --> 13:09.400
+get those talks or recordings out, right? But as a first step, like I mentioned in the
+
+13:09.400 --> 13:17.160
+talk as well, just get it out first and then work towards refining it.
+
+13:17.160 --> 13:24.440
+Yeah, that's the usual saying that good is better than perfect or here and there is better
+
+13:24.440 --> 13:30.760
+than later and never. I think that's a very good plan here. Bavin, we have about five
+
+13:30.760 --> 13:35.200
+more minutes until we need to head into the next store. We have opened the chat room,
+
+13:35.200 --> 13:39.320
+so if people wanted to join and ask questions with Bavin, mostly if you're interested in
+
+13:39.320 --> 13:43.480
+running your own workshop, this would be a golden opportunity to converse with Bavin
+
+13:43.480 --> 13:48.160
+and see how you could get started on this. Or maybe if you want to find people interested
+
+13:48.160 --> 13:53.560
+in starting a workshop, maybe not in BBB today, but it'd be interesting for you to connect
+
+13:53.560 --> 14:00.440
+on the pad or whatever else really to be able to say, oh yeah, I want to start an Emacs
+
+14:00.440 --> 14:04.560
+Michigan meeting or whatever. I'm not sure why I defaulted to Michigan, don't ask me.
+
+14:04.560 --> 14:08.480
+But you would be able to find maybe other people willing to do so and that'd be great.
+
+14:08.480 --> 14:12.080
+Why don't you stop moving my hands like this? This is the one gesture I'm doing today and
+
+14:12.080 --> 14:17.760
+I need to pluralize it a little bit. Do we have any more questions on the pad? I think
+
+14:17.760 --> 14:18.760
+no.
+
+14:18.760 --> 14:25.800
+Not on pad. I think there are two questions in IRC. I'll just quickly answer them. One
+
+14:25.800 --> 14:33.320
+is about automation. So I have my repository, the website repository on GitLab and they
+
+14:33.320 --> 14:40.160
+provide something called pipelines. So you can just schedule things and I have a cronjob
+
+14:40.160 --> 14:47.880
+you can say sort of on their platform itself, which goes and gets triggered on certain days
+
+14:47.880 --> 14:57.920
+and my script basically takes care of publishing a new blog entry basically. And there was
+
+14:57.920 --> 15:08.280
+one question, what is iLuxy? So it is a new Linux user group from Chennai, India. So yeah,
+
+15:08.280 --> 15:15.080
+I think I've been using their mailing list and there have been a couple of people from
+
+15:15.080 --> 15:23.160
+that part of the country who joined the meetup as well.
+
+15:23.160 --> 15:28.240
+And we're definitely trying to make Emacs user group a thing. Like Lug, Linux user group
+
+15:28.240 --> 15:33.520
+has been a thing for decades at this point. And if only we could manage to make, I mean,
+
+15:33.520 --> 15:41.760
+the thing it doesn't sound as well, a huge, probably the worst argument in its favor really,
+
+15:41.760 --> 15:47.000
+but Emacs user group feels like it should be something that is widely adopted as much
+
+15:47.000 --> 15:51.240
+as Linux user groups. Because when you think about it, whether it be Linux or whether it
+
+15:51.240 --> 15:57.080
+be Emacs, those groups are where a lot of people get to experiment with those tools
+
+15:57.080 --> 16:02.600
+and learn, especially a lot of beginners who make it to those meetings. They get propelled
+
+16:02.600 --> 16:07.200
+in the future in terms of how much they learn and it's so much better. You probably heard
+
+16:07.200 --> 16:13.000
+more about this in the Android talk we had earlier today. Right, I'm blabbering on about,
+
+16:13.000 --> 16:18.960
+but it's a topic very dear to my heart and I'm so glad that you managed to feel sorry
+
+16:18.960 --> 16:26.080
+a topic and a presentation. Sorry, I'm mixing up everything there.
+
+16:26.080 --> 16:33.140
+We will soon be moving on to the next stream. So I see that we have a couple of people still
+
+16:33.140 --> 16:38.120
+on BBB, but no one with a microphone. So again, when we open the BBB chat room, if you want
+
+16:38.120 --> 16:42.800
+to join and ask questions, it's all the better. It's good if you want to join and listen,
+
+16:42.800 --> 16:47.520
+but we need people to actually be asking questions because that's when we have the speaker in
+
+16:47.520 --> 16:52.400
+one room and you can gather all the questions. I'm going to give you a little secret. If
+
+16:52.400 --> 16:56.360
+sometimes it doesn't sound like I'm making any sense, it's because on one here, I am
+
+16:56.360 --> 17:00.520
+listening to Bavin. That's the left here. On the right here, I'm listening to production
+
+17:00.520 --> 17:07.640
+and sometimes stuff is burning in the background and I have to take a deep breath and focus
+
+17:07.640 --> 17:12.120
+on, for instance, everyone is talking in my ear. It's really complicated. So what I'll
+
+17:12.120 --> 17:16.880
+be doing is that in about 1 minute and 20 seconds, we'll be moving into the next talk.
+
+17:16.880 --> 17:21.480
+Bavin, thank you so much for taking the time to answer all the questions. You'll probably
+
+17:21.480 --> 17:24.960
+be sleeping fairly soon, right?
+
+17:24.960 --> 17:31.880
+Yeah, please help us in the backstage. But yes, thank you so much for all your help.
+
+17:31.880 --> 17:36.000
+Thank you for your presentation. As for the others, we are about to move to the next talk
+
+17:36.000 --> 17:40.840
+in about 1 minute. So it's going to be a bit of an awkward pause again. Sorry for this,
+
+17:40.840 --> 17:46.800
+but at the top of the next minute, we'll be starting the next talk. See you in a bit,
+
+17:46.800 --> 17:49.400
+I suppose. Thank you again, Bavin.
+
+17:49.400 --> 17:53.760
+Thank you. Thank you for organizing the event. It has been fun.
+
+17:53.760 --> 17:54.880
+Thank you for participating in it.
+
diff --git a/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt
new file mode 100644
index 00000000..b2f37314
--- /dev/null
+++ b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main--chapters.vtt
@@ -0,0 +1,82 @@
+WEBVTT
+
+00:00.000 --> 00:01:10.120
+Introduction
+
+01:10.120 --> 00:02:08.320
+Example from Emacs APAC
+
+02:08.320 --> 00:02:27.400
+"Why should I attend meetups?"
+
+02:27.400 --> 00:02:56.800
+"I am a beginner"
+
+02:56.800 --> 00:03:16.160
+"I am an experienced user"
+
+03:16.160 --> 00:04:10.000
+Finding meetups
+
+04:10.000 --> 00:04:36.840
+How to join
+
+04:36.840 --> 00:05:33.200
+Emacs Calendar
+
+05:33.200 --> 00:06:45.560
+Making the most of a meetup
+
+06:45.560 --> 00:07:19.680
+"What if I want to start my own meetup group?"
+
+07:19.680 --> 00:07:37.880
+"How much effort do I need to put?"
+
+07:37.880 --> 00:07:58.480
+"What if I'm new to Emacs?"
+
+07:58.480 --> 00:08:52.600
+"How do I do it now?"
+
+08:52.600 --> 00:09:49.440
+Why I prefer discussions
+
+09:49.440 --> 00:10:18.240
+What about talks?
+
+10:18.240 --> 00:10:58.480
+Frequency of the meetup
+
+10:58.480 --> 00:11:39.960
+"Should I schedule and just wait?"
+
+11:39.960 --> 00:11:58.920
+Adding your event to the Emacs Calendar
+
+11:58.920 --> 00:13:00.280
+What to do during the meetup
+
+13:00.280 --> 00:14:44.240
+After the meetup
+
+14:44.240 --> 00:14:59.800
+Checklist
+
+14:59.800 --> 00:15:57.240
+Co-organizers
+
+15:57.240 --> 00:17:14.200
+Website
+
+17:14.200 --> 00:17:42.280
+Video conferencing
+
+17:42.280 --> 00:18:01.720
+Communication
+
+18:01.720 --> 00:18:50.080
+Other resources
+
+18:50.080 --> 00:19:35.280
+Connecting with other organizers
diff --git a/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt
new file mode 100644
index 00000000..8830e71e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main.vtt
@@ -0,0 +1,1321 @@
+WEBVTT captioned by bhavin192
+
+00:00.000 --> 00:09.880
+Hello everyone, welcome to my talk.
+
+00:09.880 --> 00:11.160
+I hope you all have been
+
+00:11.160 --> 00:14.680
+enjoying EmacsConf so far, like I am.
+
+00:14.680 --> 00:15.960
+But you might be wondering,
+
+00:15.960 --> 00:18.480
+"How do I meet fellow Emacs users
+
+00:18.480 --> 00:21.560
+after the conference?"
+
+00:21.560 --> 00:23.760
+What if I tell you there is a way?
+
+00:23.760 --> 00:26.680
+The answer is local meetups.
+
+00:26.680 --> 00:29.840
+These are user groups who arrange events
+
+00:29.840 --> 00:34.800
+at some frequency, they meet at some frequency.
+
+00:34.800 --> 00:36.840
+That's what we are going to talk about today:
+
+00:36.840 --> 00:39.480
+attending and organizing Emacs meetups.
+
+00:39.480 --> 00:41.600
+In other words, enjoying your Emacs journey
+
+00:41.600 --> 00:43.880
+with more folks!
+
+00:43.880 --> 00:45.880
+I am Bhavin, I am from India,
+
+00:45.880 --> 00:47.280
+and I have been organizing
+
+00:47.280 --> 00:49.200
+Emacs Asia Pacific meetup
+
+00:49.200 --> 00:52.280
+since last few months [almost 2 years].
+
+00:52.280 --> 00:54.600
+We will be talking about online meetups
+
+00:54.600 --> 00:57.440
+most of the time.
+
+00:57.440 --> 00:00:59.251
+The beauty of online meetups is,
+
+00:00:59.251 --> 00:01:01.480
+you can join any meetups
+
+01:01.480 --> 01:03.360
+if the time permits,
+
+01:03.360 --> 01:05.080
+if the time zone is same.
+
+01:05.080 --> 01:07.080
+And there is no barrier.
+
+01:07.080 --> 01:10.120
+So let's get started.
+
+01:10.120 --> 01:14.120
+Let's see how a meetup looks like.
+
+01:14.120 --> 01:18.040
+We will see one of the Emacs APAC meetup's
+
+01:18.040 --> 01:25.640
+snippet, basically.
+
+01:25.640 --> 01:29.200
+[Ihor]: There is something called org-indent-mode.
+
+01:29.200 --> 01:33.040
+So, it's like this org-adapt-indentation
+
+01:33.040 --> 01:34.720
+which is like electric indent.
+
+01:34.720 --> 01:37.480
+Like when you press enter, it will indent.
+
+01:37.480 --> 01:41.520
+There is org-indent-mode, which does not require you
+
+01:41.520 --> 01:44.560
+to actually make the indents physically
+
+01:44.560 --> 01:45.600
+in the file.
+
+01:45.600 --> 01:54.320
+It will make things appear indented.
+
+01:54.320 --> 01:55.880
+This one?
+
+01:55.880 --> 01:56.400
+Yeah.
+
+01:56.400 --> 01:57.200
+[Bhavin]: org-adapt-indentation.
+
+01:57.200 --> 02:03.120
+Okay.
+
+02:03.120 --> 02:04.800
+Looks interesting, right?
+
+02:04.800 --> 02:08.320
+So, let's get into more details.
+
+02:08.320 --> 02:09.520
+You might have a question:
+
+02:09.520 --> 02:11.400
+"Why I should attend meetups?"
+
+02:11.400 --> 02:12.240
+That's a good question.
+
+02:12.240 --> 02:14.640
+You should always ask "why".
+
+02:14.640 --> 02:19.160
+It's an opportunity to learn together.
+
+02:19.160 --> 02:21.640
+You basically meet like-minded people,
+
+02:21.640 --> 02:23.560
+like-minded Emacs users,
+
+02:23.560 --> 02:27.400
+and you can always have fun, right?
+
+02:27.400 --> 02:29.160
+You still might have a question:
+
+02:29.160 --> 02:31.040
+"I am a beginner."
+
+02:31.040 --> 02:34.080
+I would say that's a great avenue for you.
+
+02:34.080 --> 02:36.640
+You get to discover more things.
+
+02:36.640 --> 02:38.800
+You can get help if you are facing
+
+02:38.800 --> 02:41.120
+any issues, any errors.
+
+02:41.120 --> 02:42.920
+And always keep in mind that it's okay
+
+02:42.920 --> 02:44.280
+if you don't understand everything
+
+02:44.280 --> 02:45.160
+from the discussions.
+
+02:45.160 --> 02:49.800
+There are going to be times where everything is…,
+
+02:49.800 --> 02:51.960
+all the topics you are not able to understand,
+
+02:51.960 --> 02:56.800
+which is totally fine.
+
+02:56.800 --> 02:58.760
+"I am an experienced user."
+
+02:58.760 --> 03:00.240
+I would say that's even better
+
+03:00.240 --> 03:01.720
+because you can help others
+
+03:01.720 --> 03:03.680
+during the meetup.
+
+03:03.680 --> 03:06.440
+And usually, in Emacs or in general,
+
+03:06.440 --> 03:08.200
+there is always something new to learn.
+
+03:08.200 --> 03:10.160
+There are plenty of packages.
+
+03:10.160 --> 03:11.080
+There might be something
+
+03:11.080 --> 03:12.440
+you have never tried.
+
+03:12.440 --> 03:13.760
+And there are always going to be
+
+03:13.760 --> 03:16.160
+different workflows of using something.
+
+03:16.160 --> 03:23.520
+So now, how do I become part of a meetup, right?
+
+03:23.520 --> 03:26.920
+"How do I become part of a meetup group?"
+
+03:26.920 --> 03:29.000
+The first step you might be doing is
+
+03:29.000 --> 03:30.920
+finding a meetup.
+
+03:30.920 --> 03:32.200
+There is this page,
+
+03:32.200 --> 03:35.120
+EmacsWiki page called Usergroups,
+
+03:35.120 --> 03:37.000
+currently maintained
+
+03:37.000 --> 03:38.680
+by Leo and Sacha.
+
+03:38.680 --> 03:46.600
+So, let's see how that page looks like.
+
+03:46.600 --> 03:48.040
+As you can see, this page tells you
+
+03:48.040 --> 03:51.160
+about all the upcoming events.
+
+03:51.160 --> 00:04:05.485
+And it also has a list of all the meetup groups.
+
+00:04:05.485 --> 00:04:10.000
+So, you can find all the groups there.
+
+04:10.000 --> 04:11.760
+Once you find one,
+
+04:11.760 --> 04:13.480
+you need to join them, right?
+
+04:13.480 --> 04:17.880
+How to join differs from group to group
+
+04:17.880 --> 04:20.520
+but usually you will find a way to subscribe
+
+04:20.520 --> 04:23.160
+to their mailing list or RSS feed,
+
+04:23.160 --> 04:24.520
+join their IRC channels.
+
+04:24.520 --> 04:27.200
+They might have accounts on some platforms
+
+04:27.200 --> 04:29.960
+like Mobilizon or meetup.com.
+
+04:29.960 --> 04:31.400
+You can just go there and join,
+
+04:31.400 --> 04:32.320
+so that you get notified
+
+04:32.320 --> 04:36.840
+whenever there is a new event.
+
+04:36.840 --> 04:39.120
+Now, seeing that list,
+
+04:39.120 --> 04:42.080
+you might say, "There are too many events
+
+04:42.080 --> 04:42.920
+of my interest."
+
+04:42.920 --> 04:47.000
+Don't worry, there is a solution.
+
+04:47.000 --> 04:49.280
+There is an Emacs calendar,
+
+04:49.280 --> 04:51.960
+you can subscribe to this calendar.
+
+04:51.960 --> 04:55.120
+Let's see what all events
+
+04:55.120 --> 04:56.800
+are there in this particular calendar.
+
+04:56.800 --> 05:00.120
+This month there is Emacs Berlin to start with
+
+05:00.120 --> 05:02.840
+and then there is EmacsConf,
+
+05:02.840 --> 05:06.360
+then Emacs APAC is also there.
+
+05:06.360 --> 05:15.520
+Let's see…, there is a companion website
+
+05:15.520 --> 05:17.840
+for this calendar as well.
+
+05:17.840 --> 05:19.240
+Let's go to the website also.
+
+05:19.240 --> 05:24.600
+You will see all the options, how to import it.
+
+05:24.600 --> 05:26.240
+There is ICS file,
+
+05:26.240 --> 05:28.120
+there are different time zones,
+
+05:28.120 --> 05:29.200
+Org mode files.
+
+05:29.200 --> 05:33.200
+You can just go there and subscribe.
+
+05:33.200 --> 05:38.520
+"How do I make most of it?
+
+05:38.520 --> 05:40.640
+If I am attending a meetup,
+
+05:40.640 --> 05:42.120
+how do I make most of it?"
+
+05:42.120 --> 05:44.480
+I would say never hesitate
+
+05:44.480 --> 05:45.520
+from asking questions.
+
+05:45.520 --> 05:46.600
+If there is something new,
+
+05:46.600 --> 05:47.840
+something you don't understand,
+
+05:47.840 --> 05:49.240
+just go ahead and ask questions.
+
+05:49.240 --> 05:51.320
+Ask for help if you are stuck somewhere.
+
+05:51.320 --> 05:54.040
+There are going to be new things,
+
+05:54.040 --> 05:56.120
+so make sure you note them down,
+
+05:56.120 --> 05:58.400
+and you can try those later.
+
+05:58.400 --> 06:04.600
+If possible, have a microphone or webcam on,
+
+06:04.600 --> 06:07.120
+so that you can connect with others very easily.
+
+06:07.120 --> 06:10.560
+If that's not an option for some reason,
+
+06:10.560 --> 06:12.520
+it's fine, you can always use chat
+
+06:12.520 --> 06:13.720
+and interact with everyone.
+
+06:13.720 --> 06:18.560
+So, don't make that a reason for not attending.
+
+06:18.560 --> 06:20.360
+Go ahead and attend,
+
+06:20.360 --> 06:22.640
+even if you just have chat as an option
+
+06:22.640 --> 06:23.720
+to interact with others.
+
+06:23.720 --> 06:27.480
+"Wait, I still have questions."
+
+06:27.480 --> 06:28.520
+Definitely.
+
+06:28.520 --> 06:30.360
+If you have more questions,
+
+06:30.360 --> 06:31.640
+go ahead and post those.
+
+06:31.640 --> 06:34.440
+I will come to them at the end.
+
+06:34.440 --> 06:42.840
+Now we know how to attend,
+
+06:42.840 --> 00:06:44.651
+what are the things you need to do
+
+00:06:44.651 --> 00:06:45.560
+if you want to attend.
+
+06:45.560 --> 00:06:48.418
+"What if I want to start my own meetup group?"
+
+00:06:48.418 --> 00:06:51.520
+Because there is no regional group,
+
+06:51.520 --> 06:53.560
+or there is something very specific
+
+06:53.560 --> 06:55.560
+which you want to start a group about.
+
+06:55.560 --> 07:01.800
+Again, "Why should I start a meetup group?"
+
+07:01.800 --> 07:05.080
+It is a way, I would say, to give back
+
+07:05.080 --> 07:08.880
+to the community by creating a platform
+
+07:08.880 --> 07:10.560
+for people to interact.
+
+07:10.560 --> 00:07:15.440
+You give speakers a platform,
+
+07:15.440 --> 07:17.520
+you also give a platform to the attendees.
+
+07:17.520 --> 07:19.680
+And obviously to have fun with others.
+
+07:19.680 --> 07:25.640
+There are some common questions
+
+07:25.640 --> 07:26.880
+which might come up,
+
+07:26.880 --> 00:07:28.051
+something like,
+
+00:07:28.051 --> 00:07:29.720
+"How much effort do I need to put?"
+
+07:29.720 --> 07:32.600
+Personally, I don't have to put
+
+07:32.600 --> 07:34.520
+more than two hours a month,
+
+07:34.520 --> 07:36.760
+that's including the time
+
+07:36.760 --> 07:37.880
+I attend the meetup.
+
+07:37.880 --> 07:42.600
+"What if I'm new to Emacs?"
+
+07:42.600 --> 07:43.600
+That's totally fine.
+
+07:43.600 --> 07:45.920
+You don't have to know Emacs,
+
+07:45.920 --> 07:47.200
+you don't have to be an expert
+
+07:47.200 --> 07:48.400
+to start a meetup group.
+
+07:48.400 --> 07:49.600
+That's totally fine.
+
+07:49.600 --> 07:51.480
+You will have more folks joining in
+
+07:51.480 --> 07:54.120
+with different experiences.
+
+07:54.120 --> 07:57.160
+That's totally fine to be a beginner
+
+07:57.160 --> 07:58.480
+in Emacs to start a meetup.
+
+07:58.480 --> 08:02.440
+"How do I do it now?"
+
+08:02.440 --> 08:05.680
+So, let's look at some specifics,
+
+08:05.680 --> 08:08.280
+some questions you might need to answer
+
+08:08.280 --> 08:10.520
+in order to start your meetup group.
+
+08:10.520 --> 08:13.640
+Format of the meetup.
+
+08:13.640 --> 08:17.120
+What participants will do during the meetup?
+
+08:17.120 --> 08:20.920
+Let's see one of the options,
+
+08:20.920 --> 08:23.680
+this is one of my favorites.
+
+08:23.680 --> 08:26.640
+Keep it simple, a bit unstructured
+
+08:26.640 --> 08:28.320
+and have free flowing discussions.
+
+08:28.320 --> 08:30.640
+What does that mean?
+
+08:30.640 --> 08:32.720
+That basically means letting people
+
+08:32.720 --> 08:35.480
+ask questions, share new things they have found,
+
+08:35.480 --> 08:39.840
+let them ask doubts, let them ask for help.
+
+08:39.840 --> 08:44.200
+During this free flowing discussions,
+
+08:44.200 --> 08:46.920
+you can go through Emacs News as well,
+
+08:46.920 --> 08:49.760
+go through the topics, and you might find
+
+08:49.760 --> 08:52.600
+something interesting which you can talk about.
+
+08:52.600 --> 08:57.280
+Why I prefer discussions?
+
+08:57.280 --> 09:00.840
+Discussions basically give an opportunity
+
+09:00.840 --> 09:03.880
+to all the participants to participate.
+
+09:03.880 --> 09:06.640
+They get to talk about what they know
+
+09:06.640 --> 09:09.000
+rather than just having one way talk.
+
+09:09.000 --> 09:12.120
+They can basically participate
+
+09:12.120 --> 09:13.600
+by putting up their thoughts.
+
+09:13.600 --> 09:17.200
+Everyone gets to learn more
+
+09:17.200 --> 09:18.480
+as topics change.
+
+09:18.480 --> 09:21.120
+Usually during these free flowing discussions,
+
+09:21.120 --> 09:22.800
+topics keep changing
+
+09:22.800 --> 09:25.120
+and that's how you get to learn more.
+
+09:25.120 --> 09:29.000
+This also has less friction for the speakers.
+
+09:29.000 --> 00:09:31.651
+They won't have a burden that,
+
+00:09:31.651 --> 00:09:34.485
+"Okay, I have a talk in the meetup
+
+00:09:34.485 --> 00:09:35.600
+I need to prepare."
+
+09:35.600 --> 09:38.320
+That just increases friction for them
+
+09:38.320 --> 09:39.040
+to participate.
+
+09:39.040 --> 09:42.080
+If you are having a free flowing discussion,
+
+09:42.080 --> 00:09:44.685
+it's basically just a matter of saying,
+
+00:09:44.685 --> 00:09:47.200
+"Hey, maybe I would like to share my screen,
+
+09:47.200 --> 09:49.440
+and I'll talk about this particular thing."
+
+09:49.440 --> 09:53.560
+What about talks?
+
+09:53.560 --> 09:55.240
+Everyone loves talks, even I do.
+
+09:55.240 --> 09:58.880
+So, make sure you are also accommodating talks,
+
+09:58.880 --> 10:00.800
+allow people to submit talks,
+
+10:00.800 --> 10:03.960
+and have talks plus discussions.
+
+10:03.960 --> 10:07.560
+You can also host watch parties.
+
+10:07.560 --> 10:09.320
+You can pick up
+
+10:09.320 --> 10:11.160
+any of the talks from EmacsConf
+
+10:11.160 --> 10:14.240
+for anything which is out there,
+
+10:14.240 --> 10:15.840
+and you can watch it together,
+
+10:15.840 --> 10:17.240
+and you can have discussion
+
+10:17.240 --> 10:18.240
+about that particular talk.
+
+10:18.240 --> 10:23.000
+The next question
+
+10:23.000 --> 10:24.400
+you might need to answer
+
+10:24.400 --> 10:25.640
+is frequency of the meetup.
+
+10:25.640 --> 10:28.800
+How often the group is going to meet?
+
+10:28.800 --> 10:32.880
+One option is recurring meetups.
+
+10:32.880 --> 10:37.080
+So something like, you meet every month
+
+10:37.080 --> 10:39.000
+on a specific day time.
+
+10:39.000 --> 10:43.640
+Another option is one-off meetups.
+
+10:43.640 --> 10:46.240
+You can meet whenever you have
+
+10:46.240 --> 10:47.520
+some specific talk,
+
+10:47.520 --> 10:49.600
+some specific discussion topic.
+
+10:49.600 --> 10:52.680
+What you can do about the timing is,
+
+10:52.680 --> 10:54.680
+if you are targeting a specific region,
+
+10:54.680 --> 10:56.840
+make sure [people from] all the time zones
+
+10:56.840 --> 10:58.480
+from that region are able to attend.
+
+10:58.480 --> 11:04.480
+Now you have figured out everything
+
+11:04.480 --> 11:06.200
+and you are going to schedule the meetup.
+
+11:06.200 --> 11:08.280
+So, "Should I schedule and just wait?"
+
+11:08.280 --> 11:08.760
+No.
+
+11:08.760 --> 11:10.960
+Go ahead and spread the word about it.
+
+11:10.960 --> 11:12.560
+Let's see what we can do.
+
+11:12.560 --> 11:16.480
+You can post on social media about your event.
+
+11:16.480 --> 11:19.840
+Usually do it a week or two before,
+
+11:19.840 --> 11:24.200
+so that people can plan their other things.
+
+11:24.200 --> 11:27.640
+Share it on local GNU/Linux user groups.
+
+11:27.640 --> 11:30.360
+They might have IRC channels, mailing lists,
+
+11:30.360 --> 11:32.240
+so you should share your event there.
+
+11:32.240 --> 11:35.120
+Reddit seems to be a popular place as well.
+
+11:35.120 --> 11:37.520
+Many people follow and are there,
+
+11:37.520 --> 11:39.960
+so you can post about your event there as well.
+
+11:39.960 --> 11:43.640
+The next option is adding your event
+
+11:43.640 --> 11:45.000
+to Emacs calendar.
+
+11:45.000 --> 11:47.760
+You should get your event added
+
+11:47.760 --> 11:49.680
+to the EmacsWiki and the calendar,
+
+11:49.680 --> 11:51.080
+which we saw in the first part.
+
+11:51.080 --> 11:53.680
+And the instructions are given there.
+
+11:53.680 --> 11:55.640
+So, whenever you schedule a meetup,
+
+11:55.640 --> 11:58.000
+you should definitely add your event
+
+11:58.000 --> 11:58.920
+to those places.
+
+11:58.920 --> 12:02.800
+Next thing you should do is…,
+
+12:02.800 --> 12:04.240
+these are few points
+
+12:04.240 --> 12:07.720
+which you should do during the meetup.
+
+12:07.720 --> 12:10.760
+You should start with the introductions.
+
+12:10.760 --> 12:14.560
+Introductions serve as an icebreaker, usually.
+
+12:14.560 --> 12:18.240
+They make everyone speak about themselves,
+
+12:18.240 --> 12:20.200
+so that everyone knows each other
+
+12:20.200 --> 12:21.120
+a bit at least.
+
+12:21.120 --> 12:24.880
+Make sure it is possible for others
+
+12:24.880 --> 12:27.520
+to participate via chat.
+
+12:27.520 --> 12:30.920
+So, if there are some messages in the chat,
+
+12:30.920 --> 12:32.840
+make sure you relay those to others
+
+12:32.840 --> 12:35.680
+who are talking via audio/video.
+
+12:35.680 --> 12:39.440
+Share your website at the end,
+
+12:39.440 --> 12:41.720
+so that people know and they can follow it,
+
+12:41.720 --> 12:44.360
+and they can join the next event.
+
+12:44.360 --> 12:48.280
+The next is keeping track of time.
+
+12:48.280 --> 12:50.560
+Make sure you keep track of time.
+
+12:50.560 --> 12:52.720
+Have some time, let's say, 1 hour
+
+12:52.720 --> 12:54.760
+or slightly more than that
+
+12:54.760 --> 12:56.600
+and time-bound your event,
+
+12:56.600 --> 12:58.760
+so that we respect everyone's time
+
+12:58.760 --> 13:00.280
+and we conclude in time.
+
+13:00.280 --> 13:05.000
+Now your meetup was done,
+
+13:05.000 --> 13:06.960
+it was good, people attended.
+
+13:06.960 --> 13:07.800
+What's next?
+
+13:07.800 --> 13:10.600
+Publishing the recordings, I would say.
+
+13:10.600 --> 13:14.800
+You should consider publishing the talks
+
+13:14.800 --> 13:15.760
+or discussions both.
+
+13:15.760 --> 13:20.240
+The reason being people can revisit the things.
+
+13:20.240 --> 13:21.960
+Usually people go back
+
+13:21.960 --> 13:23.640
+and watch the recordings again.
+
+13:23.640 --> 13:26.200
+And those who were not able to attend,
+
+13:26.200 --> 13:27.640
+they can also participate
+
+13:27.640 --> 13:28.880
+by watching the recording.
+
+13:28.880 --> 13:32.040
+You can do even more.
+
+13:32.040 --> 13:34.640
+You can have captions for the videos,
+
+13:34.640 --> 13:37.280
+so that people can enjoy the talks
+
+13:37.280 --> 13:40.600
+way better than just audio video.
+
+13:40.600 --> 13:43.400
+And you can even have written summaries
+
+13:43.400 --> 00:13:44.451
+of the discussions,
+
+00:13:44.451 --> 00:13:45.960
+something like with links.
+
+13:45.960 --> 13:48.560
+Let's see some of the examples of summaries.
+
+13:48.560 --> 13:55.080
+This is one of the summaries
+
+13:55.080 --> 13:56.880
+for Austin meetup
+
+13:56.880 --> 13:59.200
+and this is written by someone
+
+13:59.200 --> 14:01.400
+who is participating during that meetup.
+
+14:01.400 --> 14:04.000
+You can see they have put up their thoughts,
+
+14:04.000 --> 14:05.520
+what they think about something
+
+14:05.520 --> 14:08.160
+they got to know in the event.
+
+14:08.160 --> 14:14.280
+Another example we can see is M-x Research.
+
+14:14.280 --> 14:16.800
+You can see they have put up
+
+14:16.800 --> 14:18.960
+all the discussion points.
+
+14:18.960 --> 14:21.320
+They even have action items from the meetup.
+
+14:21.320 --> 14:25.240
+One more example we can see is Emacs APAC.
+
+14:25.240 --> 14:28.280
+What I have done here is,
+
+14:28.280 --> 14:30.360
+I have mentioned the topic and links,
+
+14:30.360 --> 14:32.840
+who shared what.
+
+14:32.840 --> 14:36.720
+And that's about post meetup stuff.
+
+14:36.720 --> 14:38.280
+You can keep it simple.
+
+14:38.280 --> 14:40.960
+Just start with hosting your video recordings,
+
+14:40.960 --> 14:44.240
+and just start with basic links and details.
+
+14:44.240 --> 14:50.480
+So, are we ready to start a meetup?
+
+14:50.480 --> 14:52.880
+Definitely.
+
+14:52.880 --> 14:54.640
+Let's see some of the points
+
+14:54.640 --> 14:56.120
+or checklist, I would say,
+
+14:56.120 --> 14:57.640
+you should do before you start
+
+14:57.640 --> 14:58.200
+a meetup group.
+
+14:58.200 --> 14:59.800
+What are the next steps?
+
+14:59.800 --> 15:04.440
+Have a co-organizer.
+
+15:04.440 --> 15:07.960
+So, have at least one co-organizer or person
+
+15:07.960 --> 15:09.640
+to talk to during the meetup,
+
+15:09.640 --> 15:12.600
+so that even if no one shows up
+
+15:12.600 --> 15:14.320
+you will have someone to talk to
+
+15:14.320 --> 15:16.240
+and you both can discuss
+
+15:16.240 --> 15:20.160
+about the topic you decided to.
+
+15:20.160 --> 15:22.200
+If your friend or the person
+
+15:22.200 --> 15:23.760
+you have reached out to
+
+15:23.760 --> 15:26.760
+are hesitant to become a "co-organizer",
+
+15:26.760 --> 15:28.960
+because that feels like responsibility,
+
+15:28.960 --> 15:29.720
+it's fine.
+
+15:29.720 --> 15:32.360
+You can ask them to just come with you
+
+15:32.360 --> 15:36.480
+and have the discussion during the event.
+
+15:36.480 --> 15:38.720
+And like Andrea explained
+
+15:38.720 --> 15:40.200
+in his talk about 'buddy',
+
+15:40.200 --> 15:43.520
+buddy is someone who is helping you
+
+15:43.520 --> 15:45.000
+with your Emacs journey.
+
+15:45.000 --> 15:48.800
+Buddies and their mentees
+
+15:48.800 --> 15:52.280
+can make their meeting public,
+
+15:52.280 --> 15:56.040
+and that can be a good way to start
+
+15:56.040 --> 15:57.240
+or spin-off a meetup.
+
+15:57.240 --> 16:01.920
+Have a website for your meetup.
+
+16:01.920 --> 16:04.440
+You should definitely have a website
+
+16:04.440 --> 16:05.920
+where people can go and read
+
+16:05.920 --> 16:08.640
+about your event or the group.
+
+16:08.640 --> 16:10.280
+Keep it simple.
+
+16:10.280 --> 16:13.440
+Have RSS feed, so that people can subscribe.
+
+16:13.440 --> 16:15.520
+And whenever you have new talks,
+
+16:15.520 --> 16:17.680
+make sure you add those talks
+
+16:17.680 --> 16:18.880
+to the announcement pages.
+
+16:18.880 --> 16:23.960
+Let's quickly see some of the example websites.
+
+16:23.960 --> 16:32.480
+The first one here is again
+
+16:32.480 --> 16:34.160
+Emacs Asia-Pacific event.
+
+16:34.160 --> 16:36.880
+You can see we have details,
+
+16:36.880 --> 16:41.080
+what is the timing, how to submit a talk,
+
+16:41.080 --> 16:42.000
+how to attend.
+
+16:42.000 --> 16:45.720
+Next example is Emacs Berlin.
+
+16:45.720 --> 16:47.480
+So, you can see they have mentioned
+
+16:47.480 --> 16:48.680
+what is the next event,
+
+16:48.680 --> 16:51.440
+which were the previous events,
+
+16:51.440 --> 16:53.840
+how to participate, how to stay updated.
+
+16:53.840 --> 16:57.040
+And similarly, there is M-x Research as well.
+
+16:57.040 --> 16:59.080
+They have mentioned what are the events,
+
+16:59.080 --> 17:00.600
+what are the upcoming events and all.
+
+17:00.600 --> 17:09.280
+You can just get started
+
+17:09.280 --> 17:11.160
+by taking any of the websites,
+
+17:11.160 --> 17:13.040
+and just modify it to your liking.
+
+17:13.040 --> 17:14.200
+That's totally fine.
+
+17:14.200 --> 17:17.640
+The next thing you will need
+
+17:17.640 --> 17:19.080
+is a video conferencing tool.
+
+17:19.080 --> 17:23.360
+It should support video, screen share, chat.
+
+17:23.360 --> 17:25.120
+These are the few of
+
+17:25.120 --> 17:27.680
+the free software options.
+
+17:27.680 --> 17:29.240
+One is BigBlueButton
+
+17:29.240 --> 17:31.000
+and another is Jitsi Meet.
+
+17:31.000 --> 17:33.040
+You can request for an account
+
+17:33.040 --> 17:36.840
+on the given instance to EmacsConf organizers
+
+17:36.840 --> 17:38.280
+on this mailing list,
+
+17:38.280 --> 17:40.400
+or you can stick to any
+
+17:40.400 --> 17:42.280
+of the Jitsi Meet instances.
+
+17:42.280 --> 17:45.960
+Communication media.
+
+17:45.960 --> 17:47.280
+You should have at least some way
+
+17:47.280 --> 17:51.120
+for people to interact post meetup
+
+17:51.120 --> 17:53.000
+or before the meetup.
+
+17:53.000 --> 00:17:57.385
+You can use any of the existing IRC channels, #emacsconf,
+
+00:17:57.386 --> 00:17:59.880
+or maybe you can use the existing
+
+17:59.880 --> 18:01.720
+GNU/Linux user groups lists.
+
+18:01.720 --> 18:07.600
+I would recommend you to read or watch
+
+18:07.600 --> 18:11.000
+"Starting an Emacs meetup" by Harry Schwartz.
+
+18:11.000 --> 18:13.080
+They have mentioned details
+
+18:13.080 --> 18:14.840
+about in-person meetups,
+
+18:14.840 --> 18:17.720
+but there are many important points
+
+18:17.720 --> 18:20.080
+to consider in that post
+
+18:20.080 --> 18:21.320
+as well as in the recording.
+
+18:21.320 --> 18:23.200
+So, go ahead and definitely watch
+
+18:23.200 --> 18:24.840
+before you start your meetup.
+
+18:24.840 --> 18:29.560
+If you need any help with
+
+18:29.560 --> 18:32.520
+BigBlueButton account, hosting,
+
+18:32.520 --> 18:35.280
+or captioning the talk recordings
+
+18:35.280 --> 18:37.160
+for very specific or good talks,
+
+18:37.160 --> 18:38.880
+don't hesitate to reach out to
+
+18:38.880 --> 18:40.480
+EmacsConf organizers.
+
+18:40.480 --> 18:42.320
+There are many volunteers
+
+18:42.320 --> 18:43.560
+subscribed to that list,
+
+18:43.560 --> 18:45.920
+so you will definitely find
+
+18:45.920 --> 18:50.080
+someone to help you.
+
+18:50.080 --> 18:50.760
+I had one idea.
+
+18:50.760 --> 18:53.240
+If you are one of the organizers,
+
+18:53.240 --> 18:55.400
+or if you plan to start a meetup,
+
+18:55.400 --> 18:57.360
+I was thinking if
+
+18:57.360 --> 18:59.280
+we can have a common platform
+
+18:59.280 --> 19:00.400
+for all the organizers
+
+19:00.400 --> 19:01.240
+to discuss what they are doing,
+
+19:01.240 --> 19:04.000
+what they are experimenting.
+
+19:04.000 --> 19:06.920
+If you are interested,
+
+19:06.920 --> 19:10.400
+drop me an email at this email address.
+
+19:10.400 --> 19:13.200
+If I get somewhere with this idea,
+
+19:13.200 --> 19:15.440
+I will definitely involve everyone
+
+19:15.440 --> 19:16.280
+who is interested.
+
+19:16.280 --> 19:21.240
+With that, we come to the end of my talk.
+
+19:21.240 --> 19:23.440
+I would like to thank Sacha and Leo
+
+19:23.440 --> 19:26.560
+for their inputs while I was creating this talk,
+
+19:26.560 --> 19:30.040
+and thank you for joining.
+
+19:30.040 --> 19:35.280
+Now it is time for the questions.
diff --git a/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt
new file mode 100644
index 00000000..8f23ceb4
--- /dev/null
+++ b/2022/captions/emacsconf-2022-meetups--attending-and-organizing-emacs-meetups--bhavin-gandhi--main_es.vtt
@@ -0,0 +1,1322 @@
+WEBVTT Kind: captions; Language: es; Captioned by quiliro
+
+00:00.000 --> 00:09.880
+Hola a todos y todas. Bienvenidos y bienvenidas a mi conferencia.
+
+00:09.880 --> 00:11.160
+Espero que todos y todas hayan disfrutado hasta ahora
+
+00:11.160 --> 00:14.680
+de EmacsConf, como lo hago yo.
+
+00:14.680 --> 00:15.960
+Pero podrían preguntarse,
+
+00:15.960 --> 00:18.480
+"¿Cómo me encuentro con usuarios y usuarias de Emacs
+
+00:18.480 --> 00:21.560
+luego de la conferencia?"
+
+00:21.560 --> 00:23.760
+¿Qué pasaría si les digo que hay una manera?
+
+00:23.760 --> 00:26.680
+La respuesta son los encuentros locales.
+
+00:26.680 --> 00:29.840
+Estos son grupos locales que organizan eventos
+
+00:29.840 --> 00:34.800
+Se encuentran con cierta frecuencia.
+
+00:34.800 --> 00:36.840
+Eso es de lo que vamos a hablar hoy:
+
+00:36.840 --> 00:39.480
+asistir a encuentros de Emacs y también organizarlos.
+
+00:39.480 --> 00:41.600
+En otras palabras,
+
+00:41.600 --> 00:43.880
+disfrutar de tu peregrinaje por Emacs con más gente!
+
+00:43.880 --> 00:45.880
+Soy Bhavin. Vengo de India,
+
+00:45.880 --> 00:47.280
+y he organizado
+
+00:47.280 --> 00:49.200
+el encuentro Emacs Asia Pacific
+
+00:49.200 --> 00:52.280
+desde hace casi 2 años.
+
+00:52.280 --> 00:54.600
+Hablaré acerca de los encuentros en línea
+
+00:54.600 --> 00:57.440
+la mayoría del tiempo.
+
+00:57.440 --> 00:00:59.251
+La belleza de los encuentros en línea es
+
+00:00:59.251 --> 00:01:01.480
+que puedes unirte a cualquier encuentro,
+
+01:01.480 --> 01:03.360
+si tu tiempo lo permite,
+
+01:03.360 --> 01:05.080
+sin importar la zona horaria.
+
+01:05.080 --> 01:07.080
+... y no existen barreras.
+
+01:07.080 --> 01:10.120
+Así que comencemos.
+
+01:10.120 --> 01:14.120
+Veamos qué aspecto tienen los encuentros.
+
+01:14.120 --> 01:18.040
+Básicalmente, veremos una parte
+
+01:18.040 --> 01:25.640
+de un encuentro Emacs APAC.
+
+01:25.640 --> 01:29.200
+[Ihor]: Existe algo llamado org-indent-mode.
+
+01:29.200 --> 01:33.040
+[Ihor]: Es como org-adapt-indentation
+
+01:33.040 --> 01:34.720
+[Ihor]: que es como la indentación eléctrica.
+
+01:34.720 --> 01:37.480
+[Ihor]: Cuando presionas enter, [el texto] será indentado.
+
+01:37.480 --> 01:41.520
+[Ihor]: Existe org-indent-mode, que no requiere
+
+01:41.520 --> 01:44.560
+[Ihor]: que insertes las indentaciones físicamente
+
+01:44.560 --> 01:45.600
+[Ihor]: en el archivo.
+
+01:45.600 --> 01:54.320
+[Ihor]: Hará que las cosas parezcan indentadas.
+
+01:54.320 --> 01:55.880
+¿Este?
+
+01:55.880 --> 01:56.400
+
+[Ihor]: Sí.
+
+01:56.400 --> 01:57.200
+org-adapt-indentation
+
+01:57.200 --> 02:03.120
+De acuerdo.
+
+02:03.120 --> 02:04.800
+Parece interesante, ¿verdad?
+
+02:04.800 --> 02:08.320
+Así que entremos en detalles.
+
+02:08.320 --> 02:09.520
+Podrías tener una pregunta:
+
+02:09.520 --> 02:11.400
+"¿Por qué debo asistir a encuentros?"
+
+02:11.400 --> 02:12.240
+Esa es una buena pregunta.
+
+02:12.240 --> 02:14.640
+Siempre debieras preguntar "¿por qué".
+
+02:14.640 --> 02:19.160
+Es una oportunidad de aprender juntos y juntas.
+
+02:19.160 --> 02:21.640
+Tú basicamente te encuentras con gente que piensa igual,
+
+02:21.640 --> 02:23.560
+usuarios y usuarias de Emacs que piensan igual.
+
+02:23.560 --> 02:27.400
+... y siempre puedes divertirte, ¿verdad?
+
+02:27.400 --> 02:29.160
+Podrías tener una preocupación:
+
+02:29.160 --> 02:31.040
+"Soy un novato o una novata."
+
+02:31.040 --> 02:34.080
+Yo diría que hay una gran oportunidad para tí.
+
+02:34.080 --> 02:36.640
+Puedes descubrir más cosas.
+
+02:36.640 --> 02:38.800
+Puedes conseguir ayuda, si encuentras
+
+02:38.800 --> 02:41.120
+dificultades, errores.
+
+02:41.120 --> 02:42.920
+Y siempre recuerda que estará bien
+
+02:42.920 --> 02:44.280
+si no entiendes todo
+
+02:44.280 --> 02:45.160
+en las conversaciones.
+
+02:45.160 --> 02:49.800
+Habrá momentos cuando todo sea...
+
+02:49.800 --> 02:51.960
+que otros temas no sean comprensibles;
+
+02:51.960 --> 02:56.800
+lo cual es totalmente comprensible.
+
+02:56.800 --> 02:58.760
+"Soy un usuario experimentado o una usuaria experimentada."
+
+02:58.760 --> 03:00.240
+Diría que esta situación es aún mejor
+
+03:00.240 --> 03:01.720
+porque puedes ayudar a otros y otras
+
+03:01.720 --> 03:03.680
+durante un encuentro.
+
+03:03.680 --> 03:06.440
+Y usualmente, en Emacs o en general,
+
+03:06.440 --> 03:08.200
+siempre hay algo nuevo que aprender.
+
+03:08.200 --> 03:10.160
+Hay abundancia de paquetes.
+
+03:10.160 --> 03:11.080
+Podría haber algo
+
+03:11.080 --> 03:12.440
+que nunca haz probado.
+
+03:12.440 --> 03:13.760
+Y siempre habrá
+
+03:13.760 --> 03:16.160
+diferentes flujos de trabajo para usar [un paquete].
+
+03:16.160 --> 03:23.520
+Así que ahora te preguntarás: ¿cómo me vuelvo parte de un encuentro? ¿Verdad?
+
+03:23.520 --> 03:26.920
+"¿Cómo me vuelvo parte del grupo de un encuentro?"
+
+03:26.920 --> 03:29.000
+El primer paso que podrías emprender
+
+03:29.000 --> 03:30.920
+es buscar un encuentro.
+
+03:30.920 --> 03:32.200
+Existe una página
+
+03:32.200 --> 03:35.120
+del EmacsWiki https://www.emacswiki.org/emacs/Usergroups
+
+03:35.120 --> 03:37.000
+mantenida actualmente
+
+03:37.000 --> 03:38.680
+por Leo y por Sacha.
+
+03:38.680 --> 03:46.600
+Así que, veamos cómo se ve esa página.
+
+03:46.600 --> 03:48.040
+Como puedes ver, esta página se refiere
+
+03:48.040 --> 03:51.160
+a todos los eventos que vendrán.
+
+03:51.160 --> 00:04:05.485
+Además, tiene una lista de todos los grupos de encuentros.
+
+00:04:05.485 --> 00:04:10.000
+Así que, puedes encontrar todos los grupos ahí.
+
+04:10.000 --> 04:11.760
+En cuanto encuentres uno,
+
+04:11.760 --> 04:13.480
+debes unirte a ellos, ¿verdad?
+
+04:13.480 --> 04:17.880
+Cómo unirte difiere de grupo a grupo
+
+04:17.880 --> 04:20.520
+pero usualmente encontrarás una forma de suscribirte
+
+04:20.520 --> 04:23.160
+a su lista de correo o a sus noticias RSS,
+
+04:23.160 --> 04:24.520
+únete a su canal de IRC.
+
+04:24.520 --> 04:27.200
+Podrían tener cuentas en diferentes plataformas
+
+04:27.200 --> 04:29.960
+como Mobilizon o meetup.com [cuidado de que contengan Javascript privativo].
+
+04:29.960 --> 04:31.400
+Puedes ir allá y unirte,
+
+04:31.400 --> 04:32.320
+para que te notifiquen
+
+04:32.320 --> 04:36.840
+cuando hay un evento nuevo.
+
+04:36.840 --> 04:39.120
+Ahora, al ver esa lista
+
+04:39.120 --> 04:42.080
+puedes decir, "Hay demasiados eventos
+
+04:42.080 --> 04:42.920
+de mi interés."
+
+04:42.920 --> 04:47.000
+No te preocupes. Hay una solución.
+
+04:47.000 --> 04:49.280
+Existe un calendario Emacs.
+
+04:49.280 --> 04:51.960
+Puedes suscribirte a este calendario.
+
+04:51.960 --> 04:55.120
+Veamos qué eventos
+
+04:55.120 --> 04:56.800
+hay en este calendario en particular.
+
+04:56.800 --> 05:00.120
+Este mes hay Emacs Berlin para comenzar
+
+05:00.120 --> 05:02.840
+y luego hay EmacsConf.
+
+05:02.840 --> 05:06.360
+Luego hay Emacs APAC, que también está ahí.
+
+05:06.360 --> 05:15.520
+Veamos ... existe un sitio web acompañante
+
+05:15.520 --> 05:17.840
+para este calendario también.
+
+05:17.840 --> 05:19.240
+Vayamos a ese sitio web.
+
+05:19.240 --> 05:24.600
+Verás todas las opciones, como importarlo a tu software.
+
+05:24.600 --> 05:26.240
+Hay un archivo ICS.
+
+05:26.240 --> 05:28.120
+Hay diferentes zonas horarias,
+
+05:28.120 --> 05:29.200
+archivos Org mode.
+
+05:29.200 --> 05:33.200
+Puedes simplemente ir allá y suscribirte.
+
+05:33.200 --> 05:38.520
+"¿Cómo lo aprovecho al máximo?
+
+05:38.520 --> 05:40.640
+Si asisto a un encuentro,
+
+05:40.640 --> 05:42.120
+¿cómo aprovecho al máximo?"
+
+05:42.120 --> 05:44.480
+Yo diría que nunca dudes
+
+05:44.480 --> 05:45.520
+en hacer preguntas.
+
+05:45.520 --> 05:46.600
+Si hay algo nuevo,
+
+05:46.600 --> 05:47.840
+algo que no entiendas,
+
+05:47.840 --> 05:49.240
+solamente haz las preguntas.
+
+05:49.240 --> 05:51.320
+Pide ayuda, si te encuentras atascado con algún problema.
+
+05:51.320 --> 05:54.040
+También existirán asuntos nuevos.
+
+05:54.040 --> 05:56.120
+Así que asegúrate de tomar nota
+
+05:56.120 --> 05:58.400
+y podrás intentar probarlos luego.
+
+05:58.400 --> 06:04.600
+Si es posible, ten listo un micrófono o cámara web encendidas.
+
+06:04.600 --> 06:07.120
+De esa manera podrás conectarte con otres de manera rápida.
+
+06:07.120 --> 06:10.560
+Si esa no es una opción por alguna razón,
+
+06:10.560 --> 06:12.520
+está bien. Siempre puedes usar el chat
+
+06:12.520 --> 06:13.720
+e interactuar con todas y con todos.
+
+06:13.720 --> 06:18.560
+Así que esa no es una razón para no asistir.
+
+06:18.560 --> 06:20.360
+Anímate y asiste,
+
+06:20.360 --> 06:22.640
+aunque solamente tengas el chat como única opción
+
+06:22.640 --> 06:23.720
+para interactuar con otras y otros.
+
+06:23.720 --> 06:27.480
+"Espera. Aún tengo preguntas."
+
+06:27.480 --> 06:28.520
+Seguro.
+
+06:28.520 --> 06:30.360
+Si tienes más preguntas,
+
+06:30.360 --> 06:31.640
+plantéalas.
+
+06:31.640 --> 06:34.440
+Llegaré a ellas al final.
+
+06:34.440 --> 06:42.840
+Ahora sabemos cómo asistir,
+
+06:42.840 --> 00:06:44.651
+cuáles son las cosas que debes hacer
+
+00:06:44.651 --> 00:06:45.560
+si deseas asistir.
+
+06:45.560 --> 00:06:48.418
+"¿Qué pasa si deseo iniciar mi propio grupo de encuentro?"
+
+00:06:48.418 --> 00:06:51.520
+porque no hay un grupo regional
+
+06:51.520 --> 06:53.560
+o existe un tema muy específico
+
+06:53.560 --> 06:55.560
+del que quieres tener un grupo particular.
+
+06:55.560 --> 07:01.800
+De nuevo, "¿Por qué debería iniciar un grupo de encuentro?"
+
+07:01.800 --> 07:05.080
+Es una manera, diría yo, para tener reciprocidad
+
+07:05.080 --> 07:08.880
+con la comunidad, mediante la creación de una plataforma
+
+07:08.880 --> 07:10.560
+para que la gente interactúe.
+
+07:10.560 --> 00:07:15.440
+Ofreces a los conferencistas una plataforma.
+
+07:15.440 --> 07:17.520
+También le ofreces una platforma a los asistentes.
+
+07:17.520 --> 07:19.680
+Y, obviamente, para divertirse junto con otros.
+
+07:19.680 --> 07:25.640
+Hay preguntas comunes
+
+07:25.640 --> 07:26.880
+que pueden presentarse.
+
+07:26.880 --> 00:07:28.051
+Algo como:
+
+00:07:28.051 --> 00:07:29.720
+"¿Cuánto esfuerzo se requiere?"
+
+07:29.720 --> 07:32.600
+Personalmente, yo no debo poner
+
+07:32.600 --> 07:34.520
+más de dos horas por mes.
+
+07:34.520 --> 07:36.760
+Eso incluye el tiempo
+
+07:36.760 --> 07:37.880
+para atender al encuentro.
+
+07:37.880 --> 07:42.600
+"¿Qué pasa si soy novato en Emacs?"
+
+07:42.600 --> 07:43.600
+Eso no importa.
+
+07:43.600 --> 07:45.920
+No necesitas saber Emacs.
+
+07:45.920 --> 07:47.200
+No necesitas ser un experto
+
+07:47.200 --> 07:48.400
+par iniciar un groupo de encuentro.
+
+07:48.400 --> 07:49.600
+Está muy bien.
+
+07:49.600 --> 07:51.480
+Tendrás más gente que se una
+
+07:51.480 --> 07:54.120
+con diferente experiencia.
+
+07:54.120 --> 07:57.160
+Es totalmente aceptable ser un novato
+
+07:57.160 --> 07:58.480
+en Emacs para iniciar un encuentro.
+
+07:58.480 --> 08:02.440
+"Ahora, ¿cómo lo hago?"
+
+08:02.440 --> 08:05.680
+Así que, veamos algunos detalles,
+
+08:05.680 --> 08:08.280
+algunas preguntas que podrías necesitar contestar
+
+08:08.280 --> 08:10.520
+para iniciar tu grupo de encuentro.
+
+08:10.520 --> 08:13.640
+Formato del encuentro.
+
+08:13.640 --> 08:17.120
+¿Qué harán los participantes durante el encuentro?
+
+08:17.120 --> 08:20.920
+Veamos una de las opciones.
+
+08:20.920 --> 08:23.680
+Esta es una de mis favoritas.
+
+08:23.680 --> 08:26.640
+Mantenlo sencillo, un poco desestructurado
+
+08:26.640 --> 08:28.320
+y asegúrate de que las conversaciones fluyan libremente.
+
+08:28.320 --> 08:30.640
+¿Qué sígnifica eso?
+
+08:30.640 --> 08:32.720
+Basicamente significa dejar a las personas
+
+08:32.720 --> 08:35.480
+preguntar, compartir nuevas cosas que han encontrado.
+
+08:35.480 --> 08:39.840
+Permíteles preguntar sobre sus dudas. Premíteles pedir ayuda.
+
+08:39.840 --> 08:44.200
+Durante estas conversaciones de libre flujo,
+
+08:44.200 --> 08:46.920
+puedes también cubrir Noticas de Emacs.
+
+08:46.920 --> 08:49.760
+Revisa los temas y podrías encontrar
+
+08:49.760 --> 08:52.600
+algo interesante de lo que puedas hablar.
+
+08:52.600 --> 08:57.280
+¿Por qué prefiero las conversaciones?
+
+08:57.280 --> 09:00.840
+Básicamente, las conversaciones brindan una oportunidad
+
+09:00.840 --> 09:03.880
+para todos los asistentes a participar.
+
+09:03.880 --> 09:06.640
+Logran hablar de lo que conocen,
+
+09:06.640 --> 09:09.000
+en lugar de solamente tener un monólogo.
+
+09:09.000 --> 09:12.120
+Pueden participar, básicamente
+
+09:12.120 --> 09:13.600
+al exponer sus pensamientos.
+
+09:13.600 --> 09:17.200
+Todos consiguen aprender más
+
+09:17.200 --> 09:18.480
+mientras cambian los temas.
+
+09:18.480 --> 09:21.120
+Usualmente durante estas conversaciones de libre flujo,
+
+09:21.120 --> 09:22.800
+los temas siguen cambiando
+
+09:22.800 --> 09:25.120
+y esa es la manera en que consigues aprender más.
+
+09:25.120 --> 09:29.000
+Esto también ofrece menos fricción para les conferencistas.
+
+09:29.000 --> 00:09:31.651
+No sentirán el peso de:
+
+00:09:31.651 --> 00:09:34.485
+"De acuerdo, tengo que dar una conferencia en este encuentro
+
+00:09:34.485 --> 00:09:35.600
+que requiero preparar."
+
+09:35.600 --> 09:38.320
+Eso solamente incrementa la fricción para que ellos
+
+09:38.320 --> 09:39.040
+participen.
+
+09:39.040 --> 09:42.080
+Si logras una conversación de libre flujo,
+
+09:42.080 --> 00:09:44.685
+solamente es asunto de decir:
+
+00:09:44.685 --> 00:09:47.200
+"Hey, Quizá quiera compartir mi pantalla
+
+09:47.200 --> 09:49.440
+y hablaré de este tema en particular."
+
+09:49.440 --> 09:53.560
+¿Qué hay sobre las conferencias?
+
+09:53.560 --> 09:55.240
+Todos adoran las conferencias, incluso yo.
+
+09:55.240 --> 09:58.880
+Así que asegúrate de acomodar las conferencias también.
+
+09:58.880 --> 10:00.800
+Permite a la gente presentar sus conferencias
+
+10:00.800 --> 10:03.960
+y sostén conferencias y conversaciones.
+
+10:03.960 --> 10:07.560
+También puedes sostener proyecciones.
+
+10:07.560 --> 10:09.320
+Puedes tomar
+
+10:09.320 --> 10:11.160
+cualquiera de las conferencias de EmacsConf,
+
+10:11.160 --> 10:14.240
+de lo que quiera que se encuentre ahí,
+
+10:14.240 --> 10:15.840
+y puedes mirarla juntos.
+
+10:15.840 --> 10:17.240
+Luego pueden tener una conversación
+
+10:17.240 --> 10:18.240
+acerca de esa conferencia en particular.
+
+10:18.240 --> 10:23.000
+La siguiente pregunta
+
+10:23.000 --> 10:24.400
+que podrías necesitar contestar
+
+10:24.400 --> 10:25.640
+es acerca de la frecuencia de los encuentros.
+
+10:25.640 --> 10:28.800
+¿Qué tan a menudo se reunirá el grupo?
+
+10:28.800 --> 10:32.880
+Una opción son los encuentros recurrentes.
+
+10:32.880 --> 10:37.080
+Así que algo como, reunirse cada mes
+
+10:37.080 --> 10:39.000
+un día específico a cierta hora.
+
+10:39.000 --> 10:43.640
+Otra opción son los encuentros de una sola ocasión.
+
+10:43.640 --> 10:46.240
+Puedes reunirte cuando sea
+
+10:46.240 --> 10:47.520
+que ofrezcas una conferencia en particular,
+
+10:47.520 --> 10:49.600
+algún tema específico de conversación.
+
+10:49.600 --> 10:52.680
+Lo que harías sobre los usos horarios es,
+
+10:52.680 --> 10:54.680
+si apuntas a una región específica,
+
+10:54.680 --> 10:56.840
+asegúrate que todos puedan asistir
+
+10:56.840 --> 10:58.480
+desde los distintos usos horarios de esa región.
+
+10:58.480 --> 11:04.480
+Ahora haz descifrado todo
+
+11:04.480 --> 11:06.200
+y que vas a agendar el encuentro.
+
+11:06.200 --> 11:08.280
+Así que "¿Debiría agendar y solamente esperar?"
+
+11:08.280 --> 11:08.760
+No.
+
+11:08.760 --> 11:10.960
+Difunde la noticia.
+
+11:10.960 --> 11:12.560
+Veamos qué podemos hacer.
+
+11:12.560 --> 11:16.480
+Puedes publicar en redes sociales el evento.
+
+11:16.480 --> 11:19.840
+Usualmente se debe hacer con una o dos semanas de antelación
+
+11:19.840 --> 11:24.200
+para que la gente pueda planificar sus otros asuntos.
+
+11:24.200 --> 11:27.640
+Compártelo en los grupos locales de usuarios de GNU con linux.
+
+11:27.640 --> 11:30.360
+Podrían tener canales de IRC, listas de correo.
+
+11:30.360 --> 11:32.240
+Así que debes compartir [la convocatoria] a tu evento ahí.
+
+11:32.240 --> 11:35.120
+Reddit también parece ser un lugar popular para anunciar.
+
+11:35.120 --> 11:37.520
+Hay mucha gente y seguidores que están ahí.
+
+11:37.520 --> 11:39.960
+Así que puedes anunciar sobre tu evento ahí tambien.
+
+11:39.960 --> 11:43.640
+La siguiente opción es agregar tu evento
+
+11:43.640 --> 11:45.000
+al calendario Emacs.
+
+11:45.000 --> 11:47.760
+Debes conseguir que tu evento se añada
+
+11:47.760 --> 11:49.680
+a EmacsWiki y al calendario,
+
+11:49.680 --> 11:51.080
+que vimos en la primera parte [de esta conferencia].
+
+11:51.080 --> 11:53.680
+Y las instrucciones se encuentran ahí.
+
+11:53.680 --> 11:55.640
+Así que, cuando sea que agendes un encuentro,
+
+11:55.640 --> 11:58.000
+debes definitivamente añadir tu evento
+
+11:58.000 --> 11:58.920
+a aquellos lugares.
+
+11:58.920 --> 12:02.800
+Lo siguiente que debes hacer es ...
+
+12:02.800 --> 12:04.240
+estos son algunos puntos
+
+12:04.240 --> 12:07.720
+que debes realizar durante el encuentro.
+
+12:07.720 --> 12:10.760
+Debes iniciar con las introducciones.
+
+12:10.760 --> 12:14.560
+Las introducciones sirven para romper el hielo, usualmente.
+
+12:14.560 --> 12:18.240
+Hacen que todos hablen acerca de sí mismos
+
+12:18.240 --> 12:20.200
+para que todos se conozcan
+
+12:20.200 --> 12:21.120
+al menos un poco.
+
+12:21.120 --> 12:24.880
+Haz posible que otros
+
+12:24.880 --> 12:27.520
+participen via chat.
+
+12:27.520 --> 12:30.920
+De tal manera que, si hay mensajes en el chat,
+
+12:30.920 --> 12:32.840
+asegúrate de relegarlos
+
+12:32.840 --> 12:35.680
+a quienes están hablando via audio/video.
+
+12:35.680 --> 12:39.440
+Comparte tu sitio web al final
+
+12:39.440 --> 12:41.720
+para que las personas lo sepan y lo sigan
+
+12:41.720 --> 12:44.360
+y para que puedan venir al siguiente evento.
+
+12:44.360 --> 12:48.280
+Lo siguiente es controlar el tiempo.
+
+12:48.280 --> 12:50.560
+Asegúrate de controlar el tiempo.
+
+12:50.560 --> 12:52.720
+Reserva un tiempo, puede ser una hora,
+
+12:52.720 --> 12:54.760
+o algo más que eso,
+
+12:54.760 --> 12:56.600
+y fija ese horario para tu evento
+
+12:56.600 --> 12:58.760
+con el fin de respetar el tiempo de todos
+
+12:58.760 --> 13:00.280
+y que se termine a tiempo.
+
+13:00.280 --> 13:05.000
+Ahora tu encuentro termina,
+
+13:05.000 --> 13:06.960
+fue bueno y la gente vino.
+
+13:06.960 --> 13:07.800
+¿Qué sigue?
+
+13:07.800 --> 13:10.600
+Publicar las grabaciones, diría yo.
+
+13:10.600 --> 13:14.800
+Deberías considerar publicar las conferencias
+
+13:14.800 --> 13:15.760
+o las conversaciones, o ambas.
+
+13:15.760 --> 13:20.240
+La razón es que las personas pueden revisitarlas.
+
+13:20.240 --> 13:21.960
+Usualmente, la gente vuelve
+
+13:21.960 --> 13:23.640
+y mira las grabaciones nuevamente.
+
+13:23.640 --> 13:26.200
+Y aquellos que no pudieron asistir,
+
+13:26.200 --> 13:27.640
+ellos también pueden participar
+
+13:27.640 --> 13:28.880
+al observar la grabación.
+
+13:28.880 --> 13:32.040
+Puedes hacer aún más.
+
+13:32.040 --> 13:34.640
+Puedes tener subtítulos para los vídeos
+
+13:34.640 --> 13:37.280
+para que la gente pueda disfrutar de las conferencias
+
+13:37.280 --> 13:40.600
+de mejor manera que solamente el audio y el vídeo.
+
+13:40.600 --> 13:43.400
+E inclusive tú puedes tener resúmenes escritos
+
+13:43.400 --> 00:13:44.451
+de las conversaciones,
+
+00:13:44.451 --> 00:13:45.960
+o algo parecido con los hipervínculos.
+
+13:45.960 --> 13:48.560
+Veamos algunos de los ejemplos con los resúmenes.
+
+13:48.560 --> 13:55.080
+Este es uno de los resúmenes
+
+13:55.080 --> 13:56.880
+del encuentro en Austin [Texas, EEUUA]
+
+13:56.880 --> 13:59.200
+y fue escrito por alguien
+
+13:59.200 --> 14:01.400
+quien participó durante el encuentro.
+
+14:01.400 --> 14:04.000
+Puedes ver que publicó sus pensamientos,
+
+14:04.000 --> 14:05.520
+lo que pensaban sobre un asunto
+
+14:05.520 --> 14:08.160
+que aprendieron en el evento.
+
+14:08.160 --> 14:14.280
+Otro ejemplo que podemos ver es M-x investigar.
+
+14:14.280 --> 14:16.800
+Puedes ver lo que han publicado ...
+
+14:16.800 --> 14:18.960
+todos los puntos de la conversación.
+
+14:18.960 --> 14:21.320
+Incluso han recopilado puntos de acción mediante el encuentro.
+
+14:21.320 --> 14:25.240
+Un ejemplo más que podemos ver es Emacs APAC.
+
+14:25.240 --> 14:28.280
+Lo que he hecho es,
+
+14:28.280 --> 14:30.360
+yo he mencionado el tema y los hipervínculos ...
+
+14:30.360 --> 14:32.840
+quién compartió qué.
+
+14:32.840 --> 14:36.720
+Y eso es lo que hay sobre asuntos para después del evento.
+
+14:36.720 --> 14:38.280
+Puedes mantenerlo sencillo.
+
+14:38.280 --> 14:40.960
+Solamente inicia con alojar las grabaciones de vídeo
+
+14:40.960 --> 14:44.240
+y solamente inicia con los hipervínculos básicas y con los detalles.
+
+14:44.240 --> 14:50.480
+Así que, ¿estamos listos para iniciar un encuentro?
+
+14:50.480 --> 14:52.880
+¡Definitivamente!
+
+14:52.880 --> 14:54.640
+Repasemos algunos de los puntos
+
+14:54.640 --> 14:56.120
+o hagamos una lista, yo diría,
+
+14:56.120 --> 14:57.640
+sobre lo que debes hacer antes de iniciar
+
+14:57.640 --> 14:58.200
+un grupo de encuentro.
+
+14:58.200 --> 14:59.800
+¿Cuáles son los siguientes pasos?
+
+14:59.800 --> 15:04.440
+Consigue un co-organizador.
+
+15:04.440 --> 15:07.960
+Entonces, ten al menos un co-organizador
+
+15:07.960 --> 15:09.640
+o persona con quien hablar durante el encuentro
+
+15:09.640 --> 15:12.600
+para que, aunque nadie más venga,
+
+15:12.600 --> 15:14.320
+tengas con quien hablar
+
+15:14.320 --> 15:16.240
+y ambos pueden conversar
+
+15:16.240 --> 15:20.160
+sobre el tema que pretendían.
+
+15:20.160 --> 15:22.200
+Si tu amigo o la persona
+
+15:22.200 --> 15:23.760
+que conseguiste
+
+15:23.760 --> 15:26.760
+duda en convertirse en co-organizadora
+
+15:26.760 --> 15:28.960
+porque siente que es una responsabilidad,
+
+15:28.960 --> 15:29.720
+está bien.
+
+15:29.720 --> 15:32.360
+Puedes pedirle que solamente te acompañe
+
+15:32.360 --> 15:36.480
+y sostén la conversación durante el evento.
+
+15:36.480 --> 15:38.720
+Y, como Andrea explicó
+
+15:38.720 --> 15:40.200
+en su conferencia sobre los 'compañeros',
+
+15:40.200 --> 15:43.520
+'compañero' es quien te ayuda
+
+15:43.520 --> 15:45.000
+en tu travesía de Emacs.
+
+15:45.000 --> 15:48.800
+Compañeros y pupilos
+
+15:48.800 --> 15:52.280
+pueden hacer de su encuentro uno que sea público
+
+15:52.280 --> 15:56.040
+y esa puede ser una buena manera de comenzar
+
+15:56.040 --> 15:57.240
+a poner a rodar un encuentro.
+
+15:57.240 --> 16:01.920
+Ten un sitio web para tu encuentro.
+
+16:01.920 --> 16:04.440
+Definitivamente debes tener un sitio web
+
+16:04.440 --> 16:05.920
+donde la gente pueda leer
+
+16:05.920 --> 16:08.640
+sobre tu evento o sobre el grupo.
+
+16:08.640 --> 16:10.280
+Mantenlo simple.
+
+16:10.280 --> 16:13.440
+Levanta noticias de RSS para que las personas puedan suscribirse.
+
+16:13.440 --> 16:15.520
+Y cuando tengas nuevas conferencias,
+
+16:15.520 --> 16:17.680
+asegúrate de añadir esas conferencias
+
+16:17.680 --> 16:18.880
+a las páginas de anuncios.
+
+16:18.880 --> 16:23.960
+Rápidamente, veamos algunos sitios web de ejemplo.
+
+16:23.960 --> 16:32.480
+El primero es nuevamente
+
+16:32.480 --> 16:34.160
+el del evento de Emacs Asia-Pacific.
+
+16:34.160 --> 16:36.880
+Puedes ver que mostramos detalles,
+
+16:36.880 --> 16:41.080
+el horario, cómo proponer una conferencia,
+
+16:41.080 --> 16:42.000
+cómo asistir.
+
+16:42.000 --> 16:45.720
+El siguiente ejemplo es Emacs Berlin.
+
+16:45.720 --> 16:47.480
+Ahí puedes ver que han mencionado
+
+16:47.480 --> 16:48.680
+cuál es el siguiente evento,
+
+16:48.680 --> 16:51.440
+cuáles fueron los eventos previos,
+
+16:51.440 --> 16:53.840
+cómo participar, cómo mantenerse actualizado.
+
+16:53.840 --> 16:57.040
+Y de igual manera, existe M-x investigar.
+
+16:57.040 --> 16:59.080
+Han mencionado cuáles son los eventos,
+
+16:59.080 --> 17:00.600
+cuáles son los eventos venideros y todo lo demás.
+
+17:00.600 --> 17:09.280
+Puedes iniciar,
+
+17:09.280 --> 17:11.160
+simplemente tomando cualquiera de estos sitios web
+
+17:11.160 --> 17:13.040
+y solamente modifícalos a tu gusto.
+
+17:13.040 --> 17:14.200
+Es totalmente aceptable.
+
+17:14.200 --> 17:17.640
+Lo siguiente que requerirás
+
+17:17.640 --> 17:19.080
+es de una herramienta para videoconferencia.
+
+17:19.080 --> 17:23.360
+Debería soportar vídeo, compartir escritorio, chat.
+
+17:23.360 --> 17:25.120
+Estas son algunas
+
+17:25.120 --> 17:27.680
+de las opciones en software libre.
+
+17:27.680 --> 17:29.240
+Una es BigBlueButton
+
+17:29.240 --> 17:31.000
+y otra es Jitsi Meet.
+
+17:31.000 --> 17:33.040
+Puedes solicitar una cuenta en la instancia apropiada
+
+17:33.040 --> 17:36.840
+a los organizadores de EmacsConf
+
+17:36.840 --> 17:38.280
+que están en esta lista de correo,
+
+17:38.280 --> 17:40.400
+o puedes mantenerte en cualquiera
+
+17:40.400 --> 17:42.280
+de las instancias de Jitsi Meet.
+
+17:42.280 --> 17:45.960
+Medios de comunicación.
+
+17:45.960 --> 17:47.280
+Deberías tener al menos una manera
+
+17:47.280 --> 17:51.120
+para que la gente interactúe después del encuentro
+
+17:51.120 --> 17:53.000
+y antes del encuentro.
+
+17:53.000 --> 17:55.760
+Puedes utilizar cualquiera de los canales existentes en IRC,
+
+17:55.760 --> 17:59.880
+#emacsconf, o quizá desees
+
+17:59.880 --> 18:01.720
+usar las listas de grupos de usuarios de GNU con Linux.
+
+18:01.720 --> 18:07.600
+Recomendaría que leas o mires
+
+18:07.600 --> 18:11.000
+"Starting an Emacs meetup" por Harry Schwartz.
+
+18:11.000 --> 18:13.080
+Ha mencionado los detalles
+
+18:13.080 --> 18:14.840
+sobre encuentros personales
+
+18:14.840 --> 18:17.720
+pero hay mucho puntos importantes
+
+18:17.720 --> 18:20.080
+a considerar en esa publicación
+
+18:20.080 --> 18:21.320
+tanto como en la grabación.
+
+18:21.320 --> 18:23.200
+Así que, ve y definitivamente mira [ese vídeo]
+
+18:23.200 --> 18:24.840
+antes de iniciar tu encuentro.
+
+18:24.840 --> 18:29.560
+Si necesitas ayuda
+
+18:29.560 --> 18:32.520
+con la cuenta, el alojamiento
+
+18:32.520 --> 18:35.280
+o para poner subtítulos a las grabaciones de BigBlueButton
+
+18:35.280 --> 18:37.160
+para conferencias muy específicas o buenas,
+
+18:37.160 --> 18:38.880
+no dudes en buscar
+
+18:38.880 --> 18:40.480
+a los organizadores de EmacsConf.
+
+18:40.480 --> 18:42.320
+Hay muchos voluntarios
+
+18:42.320 --> 18:43.560
+suscritos a esa lista [de correo].
+
+18:43.560 --> 18:45.920
+Así que definitivamente encontrarás
+
+18:45.920 --> 18:50.080
+alguien quien te ayude.
+
+18:50.080 --> 18:50.760
+Tuve una idea.
+
+18:50.760 --> 18:53.240
+Si tu eres uno de les organizadores
+
+18:53.240 --> 18:55.400
+o si planeas iniciar un encuentro,
+
+18:55.400 --> 18:57.360
+pensaba en que si tendríamos
+
+18:57.360 --> 18:59.280
+una plataforma común
+
+18:59.280 --> 19:00.400
+para que todos les organizadores
+
+19:00.400 --> 19:01.240
+conversen sobre lo que están haciendo,
+
+19:01.240 --> 19:04.000
+lo que están expermentando.
+
+19:04.000 --> 19:06.920
+Si estás interesado, envíame un correo a este correo electrónico
+
+19:06.920 --> 19:10.400
+bhavin192 [arroba] geeksocket [punto] in.
+
+19:10.400 --> 19:13.200
+Si logro llegar a algún lado con esta idea,
+
+19:13.200 --> 19:15.440
+definitivamente involucraré a todos
+
+19:15.440 --> 19:16.280
+quienes estén interesados.
+
+19:16.280 --> 19:21.240
+Con eso, llegamos al final de mi conferencia.
+
+19:21.240 --> 19:23.440
+Me gustaría agradecer a Sacha y a Leo
+
+19:23.440 --> 19:26.560
+por sus recomendaciones mientras creaba esta conferencia
+
+19:26.560 --> 19:30.040
+y a ustedes por unirse.
+
+19:30.040 --> 19:35.280
+Ahora es el momento para las preguntas.
diff --git a/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt
new file mode 100644
index 00000000..f9ec7319
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--answers.vtt
@@ -0,0 +1,611 @@
+WEBVTT
+
+00:00.000 --> 00:09.660
+About five seconds until we go live.
+
+00:09.660 --> 00:10.660
+And we are live!
+
+00:10.660 --> 00:11.660
+Hello again!
+
+00:11.660 --> 00:15.580
+It's the first time you're seeing me today, and hopefully you're still laughing from
+
+00:15.580 --> 00:18.940
+the little joke Carl had at the end of his talk.
+
+00:18.940 --> 00:20.940
+Hi Carl, how are you doing?
+
+00:20.940 --> 00:26.260
+I'm fine thanks, how are you doing?
+
+00:26.260 --> 00:29.700
+I'm doing pretty fine, but I am currently struggling to make my windows slightly larger
+
+00:29.700 --> 00:31.240
+because what am I doing?
+
+00:31.240 --> 00:34.920
+Okay, okay, I think people can see me relatively well right now.
+
+00:34.920 --> 00:38.120
+Yeah, I am doing well, and thank you for the joke.
+
+00:38.120 --> 00:42.960
+It feels like when I see people wearing suits during a BBB presentation, or sorry, not a
+
+00:42.960 --> 00:47.880
+BBB presentation, an EmacsConc presentation, I feel like it's a reply to my own style and
+
+00:47.880 --> 00:48.880
+I feel attacked.
+
+00:48.880 --> 00:53.200
+But I will just confirm, how do I do this without making too much of a fool, I will
+
+00:53.200 --> 01:00.260
+lower my standing desk, and you can see that I am actually wearing trousers.
+
+01:00.260 --> 01:04.000
+So yes, I am wearing socks and sandals because it's really cold right now and it's very comfortable
+
+01:04.000 --> 01:05.000
+as well.
+
+01:05.000 --> 01:11.580
+Don't ask me on this, but I am technically more dressed than you are.
+
+01:11.580 --> 01:17.580
+Well this was a lederhose, actually a quite nice lederhose, which you wear for specific
+
+01:17.580 --> 01:18.580
+occasions.
+
+01:18.580 --> 01:23.440
+It's not considered as something special.
+
+01:23.440 --> 01:28.320
+No, definitely, but it is looking a little bit odd to my French style.
+
+01:28.320 --> 01:32.400
+Yeah, especially the combination, yes, you're right.
+
+01:32.400 --> 01:36.680
+Right, we could be talking about hours for this, but I suppose people are not actually
+
+01:36.680 --> 01:39.720
+here to hear us talk about this, but about you talk.
+
+01:39.720 --> 01:44.720
+I'm not going to make the affront of asking if you've got the pad open, considering that
+
+01:44.720 --> 01:48.520
+you have been managing the pad and helping us manage the pad for what, three years now,
+
+01:48.520 --> 01:49.520
+or something?
+
+01:49.520 --> 01:57.240
+Yeah, but this year, actually, it's doing great without my help, so yeah.
+
+01:57.240 --> 02:00.100
+Actually there are already two answers.
+
+02:00.100 --> 02:04.360
+Somebody was nice enough to copy my answers from the IRC to here.
+
+02:04.360 --> 02:10.440
+Can you filter out blocked tasks on stuff like your agenda, on specific agenda view,
+
+02:10.440 --> 02:14.920
+when you want to know what you can do next?
+
+02:14.920 --> 02:20.120
+That's a tricky question.
+
+02:20.120 --> 02:25.280
+The blocked tasks are never shown on the agenda by default.
+
+02:25.280 --> 02:36.200
+Whenever there is no scheduled timestamp attached to a heading, it's not visible on my agenda.
+
+02:36.200 --> 02:43.400
+If you use the dependencies, as I described it in the demo, you will see that the scheduled
+
+02:43.400 --> 02:51.520
+timestamp, or date stamp, is only added when the previous one is marked as done, or canceled.
+
+02:51.520 --> 02:57.480
+So therefore, blocked tasks are never shown on the agenda by default, if you use it in
+
+02:57.480 --> 03:01.520
+this, in that way.
+
+03:01.520 --> 03:06.720
+The functionality seems quite nice, but the markup seems pretty heavy in the property
+
+03:06.720 --> 03:07.720
+drawers.
+
+03:07.720 --> 03:17.320
+Do you ever have any issues having so much meta-level information?
+
+03:17.320 --> 03:27.960
+No, as long as I don't have to type it manually, I don't see any issue at all, so far.
+
+03:27.960 --> 03:35.000
+Because I tend to have very, rather large org-mode files in any way.
+
+03:35.000 --> 03:41.840
+So far, I haven't thought of, oh my gosh, this is so bloated, I need to simplify it.
+
+03:41.840 --> 03:45.320
+Not yet.
+
+03:45.320 --> 03:52.360
+Looking for the IRC, if there is something going on.
+
+03:52.360 --> 03:56.120
+If not, we'll be able to, because this is the showdown people were waiting.
+
+03:56.120 --> 04:02.720
+Two years ago, you wrote an article about Algrom not being good, and I'm being polite.
+
+04:02.720 --> 04:05.160
+We need to fight this out right now.
+
+04:05.160 --> 04:07.000
+Yeah, sure.
+
+04:07.000 --> 04:18.120
+Actually, I do think that Zettelkasten methods are interesting, but so far, I haven't seen
+
+04:18.120 --> 04:21.400
+much use in my personal use.
+
+04:21.400 --> 04:26.960
+But I can imagine that, for example, if you're working on a PhD thesis, or you're studying
+
+04:26.960 --> 04:31.780
+in some research field and so forth, it's quite handy.
+
+04:31.780 --> 04:40.800
+The only thing my concept so far doesn't have what the usual Zettelkasten methods do provide
+
+04:40.800 --> 04:46.960
+is this visual navigation method, which I would not use anyway.
+
+04:46.960 --> 04:53.960
+So I don't see any purpose at all for Zettelkasten methods for my personal use cases, as long
+
+04:53.960 --> 05:01.160
+as I don't think that this visual navigation would be very handy in my case.
+
+05:01.160 --> 05:07.880
+I'm very happy with the bidirectional links, because they get me from A to B, and I can
+
+05:07.880 --> 05:12.700
+connect ideas and headings and tasks and whatnot.
+
+05:12.700 --> 05:20.440
+So this is basically the most important part of Zettelkasten method from my perspective.
+
+05:20.440 --> 05:26.880
+And this is what these bidirectional links and dependencies provide for me in my personal
+
+05:26.880 --> 05:27.880
+setup.
+
+05:27.880 --> 05:34.080
+Yeah, and I was taking a jab at it, because even you, with your own article, you were
+
+05:34.080 --> 05:41.080
+saying how, you know, it's a title to grab attention, but actually you had a lot of things
+
+05:41.080 --> 05:42.080
+Yeah, it was trick-based.
+
+05:42.080 --> 05:48.200
+Yeah, I didn't want to say the word, you know, I'm trying to be, like, I didn't read the
+
+05:48.200 --> 05:51.960
+actual title that should title the article.
+
+05:51.960 --> 05:55.760
+But yeah, I think you were also interested in what we were discussing yesterday.
+
+05:55.760 --> 06:00.240
+I can't remember which talk, because we had a number of org talks, but when I was discussing
+
+06:00.240 --> 06:05.680
+in one of the Q&A the concept of a slip box for multiple peoples, you seemed to be interested
+
+06:05.680 --> 06:07.800
+in this topic as well.
+
+06:07.800 --> 06:08.800
+Yes.
+
+06:08.800 --> 06:15.440
+Yeah, my personal interest is in personal information management, but collaborative
+
+06:15.440 --> 06:20.540
+information management is of course a very related and important part, and I have some
+
+06:20.540 --> 06:27.240
+background by writing a PhD thesis on organizing information and files and whatnot, and therefore
+
+06:27.240 --> 06:37.460
+I'm interested in the ideas how to make a collaborative, let's say, something that might
+
+06:37.460 --> 06:42.200
+actually work within a work group or even larger.
+
+06:42.200 --> 06:49.960
+There are some things that overlap between personal information management and collaborative,
+
+06:49.960 --> 07:01.680
+for example, I'm sure you know the vocabulary problem, where people do have different mental
+
+07:01.680 --> 07:08.520
+models of the same stuff, so therefore finding one common phrase or one common word is a
+
+07:08.520 --> 07:15.200
+difficult task to do, and you get these kind of troubles all over the place if you go into
+
+07:15.200 --> 07:16.680
+that direction.
+
+07:16.680 --> 07:23.560
+Yeah, this is why I think just like a lot of software solutions, they need to be backed
+
+07:23.560 --> 07:25.720
+up by strong methodology on the side.
+
+07:25.720 --> 07:30.080
+It feels like it's always a balance when you have the tools that are helping you enable
+
+07:30.080 --> 07:39.160
+something like Emacs, like Org, like Zorcast, EL, Orgrom, or any kind of the, I don't want
+
+07:39.160 --> 07:44.040
+to say Orgrom clone, it's like Dark Souls, when everything becomes a Dark Souls clone,
+
+07:44.040 --> 07:50.840
+that's not the point, we have Zorcast and modes in Emacs that allow you to do this no-taking,
+
+07:50.840 --> 07:51.840
+so that's the tools.
+
+07:51.840 --> 07:55.960
+And then you have the methods on the other end, which are about how do you use those
+
+07:55.960 --> 08:00.800
+tools to work with multiple people, we're only talking about collective sandbox here.
+
+08:00.800 --> 08:06.760
+And yeah, there is obviously the vocabulary discussion, the point that Carl just mentioned,
+
+08:06.760 --> 08:11.200
+there are some solutions methodologically, like you can have a taxonomy of all the words
+
+08:11.200 --> 08:16.760
+you're using, if you have a list of patterns, for instance, it's good to fix the language
+
+08:16.760 --> 08:21.600
+within a file, so that you can have something that people can read.
+
+08:21.600 --> 08:27.840
+It's kind of like, you have dictionaries, obviously, but it reminds me of some very
+
+08:27.840 --> 08:32.720
+specific dictionaries, like the hacker dictionary, when you have a lot of entries, where people
+
+08:32.720 --> 08:38.200
+can learn the lingua, how to use the internet, how to chat on IOC, stuff like this, it feels
+
+08:38.200 --> 08:45.320
+like a group sandbox is always going to be oriented towards solving a particular project,
+
+08:45.320 --> 08:49.600
+I think, and I think taxonomy and vocabulary would be very important to have.
+
+08:49.600 --> 08:54.280
+Anyway, I don't want to take too much, this is a very interesting topic, obviously, you
+
+08:54.280 --> 09:00.080
+wrote a PhD on it, and I wrote software on it, and you've wrote software on it as well,
+
+09:00.080 --> 09:06.640
+but we should probably talk about this later, at least, but maybe come up with something
+
+09:06.640 --> 09:08.640
+to present in a year or so.
+
+09:08.640 --> 09:09.640
+Okay.
+
+09:09.640 --> 09:17.480
+So, somebody wrote the BBB is not open yet, I don't know if it's on purpose or not.
+
+09:17.480 --> 09:18.480
+I'll do this now.
+
+09:18.480 --> 09:21.640
+You'll see me whisper, you'll see something very fancy, look at me, I'm going to press
+
+09:21.640 --> 09:24.600
+the button, you're going to see something appear at the bottom to talk to production,
+
+09:24.600 --> 09:30.440
+this is the thing that I've developed since yesterday, it's amazing, wasn't it?
+
+09:30.440 --> 09:32.840
+This was technology, right there.
+
+09:32.840 --> 09:37.320
+So yes, the BBB will be open in about 30 seconds to one minute.
+
+09:37.320 --> 09:42.080
+And people, it's the first one of the day, so I'll do the reminder.
+
+09:42.080 --> 09:48.440
+In order to join us in a room right now, where I'm talking with Carl, you will need to go
+
+09:48.440 --> 09:56.280
+to the talk page, so you can find all the talks on emaskov.org-2022.
+
+09:56.280 --> 10:02.000
+Then you find the talk by Carl Voigt, you can look for his name, you click on the link
+
+10:02.000 --> 10:06.800
+over there and at the top you will have a link to the BBB room in which we are currently. Also
+
+10:06.800 --> 10:13.840
+if you're on IRC you will just have gotten a notification about joining the room. So in the
+
+10:13.840 --> 10:18.400
+meantime Carl, how about we answer some of the new questions that you have on the pad whilst people
+
+10:18.400 --> 10:29.680
+get warmed up. Sure. So the next one, does this change how you use to-do keywords next to do
+
+10:29.680 --> 10:40.880
+blocked? Avoiding some or starting to use others? No. I don't see any connection. And my keywords
+
+10:40.880 --> 10:56.160
+are next, oops, next, started, waiting, done, cancelled. That's basically it if you're interested.
+
+10:56.160 --> 11:02.800
+But my configuration is online anyway. I can paste the link later. And yes, I can paste the link to
+
+11:02.800 --> 11:12.880
+my thesis as well as ask on the IRC. Carl, if you don't mind, I do have a quick question because
+
+11:12.880 --> 11:19.360
+I'm going to forget otherwise. We have someone in IRC asking you, is your PhD published? I'm not a
+
+11:19.360 --> 11:26.560
+PhD but your thesis is published. Yes, of course. Everything of my PhD is public including the actual
+
+11:26.560 --> 11:33.760
+research work, the hard figures of the user experiments and the derived functions, everything
+
+11:33.760 --> 11:41.920
+of course. The later one actually should be also in org mode so 100% reproducible which was very
+
+11:41.920 --> 11:47.200
+important to me. Would you have a link, so maybe not right now but in the pad, could you include a
+
+11:47.200 --> 11:53.760
+link later on? I've already wrote down a question for that on my own so that I don't forget to
+
+11:53.760 --> 11:58.240
+answer it afterwards. Okay, amazing. Thank you. You can continue with the questions. We also have
+
+11:58.240 --> 12:02.400
+people joining on. I see microphones now and some of the people joining on BBB so I'm excited. I'm
+
+12:02.400 --> 12:07.680
+getting ready for your questions. But in the meantime, Carl, feel free to go. I'm answering
+
+12:07.680 --> 12:15.200
+all the questions in the pad anyway so if somebody is asking something in the BBB, I'm open to it.
+
+12:15.200 --> 12:21.360
+Right, there is just one other thing I need to say. We need to move with the next talk in about
+
+12:21.360 --> 12:27.440
+eight minutes. So, Carl, if you could maybe not rush but answer fairly quickly the last questions
+
+12:27.440 --> 12:35.680
+on the pad, then we can move on to live Q&A inside BBB. Sure. OrgBrain has stuff like parent links
+
+12:35.680 --> 12:40.560
+and directional links, sibling links, and if org.roam.else had nothing else interesting,
+
+12:40.560 --> 12:48.560
+what about, like, the previous stuff? I'm going to be honest, I'm not sure what the previous stuff
+
+12:48.560 --> 12:59.360
+was either. So, referring to side window, where it's not only the linked heading, so not only the
+
+12:59.360 --> 13:08.240
+link is shown but actually some heading title and short contents below it. So, that's very handy
+
+13:08.240 --> 13:13.520
+when you are looking, like, or is it relevant, or it's not relevant.
+
+13:16.720 --> 13:25.040
+To me, it's not relevant at the moment. I don't have the requirement for specific link types
+
+13:25.760 --> 13:32.080
+or directions. I like how, Carl, you feel obligated to write and speak at the same time.
+
+13:32.080 --> 13:36.240
+Like, you can let go of your responsibility as the pad. We have another volunteer helping you
+
+13:36.240 --> 13:42.000
+with the pad right now, so don't worry about it. Perfect. So, do you find that the links are fragile,
+
+13:42.000 --> 13:50.080
+hard to maintain? No, not at all. The only thing that I have to remark here is probably that
+
+13:50.080 --> 13:58.640
+sometimes I rename the links when the heading actually was renamed afterward and the link name
+
+13:58.640 --> 14:06.640
+isn't reflecting the actual heading. Then I do a quick search and replace all of my Org Mode files,
+
+14:06.640 --> 14:13.840
+but that's basically it. So, no, I really love the bi-directional and uni-directional links,
+
+14:14.640 --> 14:23.440
+and it doesn't give me any burden to maintain them. Would it be of interest to, like, make auto
+
+14:23.440 --> 14:35.840
+description for links in Org? You have an ID, you don't have any description, but then
+
+14:35.840 --> 14:44.240
+description is generated automatically. My IDs are auto-generated and they are generated from
+
+14:44.240 --> 14:50.880
+the heading title, so usually my links are pretty much self-explanatory.
+
+14:50.880 --> 14:58.640
+Oh, so what you're referring to is that you have a link, then you rename the linked heading,
+
+14:58.640 --> 15:05.440
+and then you change the link ID. Oh yeah, that's true. Links are not synchronized with their
+
+15:05.440 --> 15:15.120
+headings once they are generated, but usually a heading title is not changed that often by me,
+
+15:15.120 --> 15:24.960
+so this is not a really important problem in my use cases. PhD thesis unlinked later.
+
+15:24.960 --> 15:33.440
+Why not Org UUIDs for IDs and the Preferences human-readable ones? Yeah, I hate UUIDs because
+
+15:33.440 --> 15:42.640
+they tell me nothing at all, so I want to get an idea to what I'm linking to. Therefore, I've got
+
+15:42.640 --> 15:52.800
+rid of all UUIDs in my setup and I prefer something that gives me as a user an idea of
+
+15:52.800 --> 16:04.000
+what's happening when I open up this link. Sorry, have you been able to hear me? Is it
+
+16:04.000 --> 16:10.000
+the first OTS mic of the conference? Wow, this is amazing. I was mispressing the button, I think.
+
+16:10.000 --> 16:14.320
+I apologize humbly, deeply, and sincerely about the hot mic. No problem.
+
+16:19.360 --> 16:26.640
+Do you have or use anything for what links here to this heading in a more occurred grep style
+
+16:26.640 --> 16:36.560
+buffer and auto? No, not yet. I'm not using that, but I may be able to what links to here
+
+16:36.560 --> 16:42.480
+by looking for the ID. All the heading IDs start with a date stamp and then a
+
+16:43.440 --> 16:52.160
+string which is made up from the heading title. If I want to see what links to this specific heading
+
+16:52.160 --> 17:01.200
+without having backlinks, I usually use org occur within the buffer and get the result right away.
+
+17:01.200 --> 17:08.640
+All right, I'm just going to give you, I have the bad role here, I have to be the man with
+
+17:08.640 --> 17:14.320
+the watch telling you that we have about three minutes left in this talk and afterwards we'll
+
+17:14.320 --> 17:18.240
+need to move on to the next one. So you have about two minutes. Carla, I didn't ask you if
+
+17:18.240 --> 17:22.640
+you had anything else to add over your talk. I wish we had more time to discuss because it's
+
+17:22.640 --> 17:26.400
+a very interesting topic, but sadly we will have to get going with the next talk in two minutes.
+
+17:26.400 --> 17:33.280
+So the next two minutes are yours. I continue answering questions on the
+
+17:33.280 --> 17:46.720
+pad of course and you'll see me around on the IRC. I'm still around in IRC. I will answer all
+
+17:46.720 --> 17:54.400
+the questions on the pad even after we continue and everybody who wants to get in touch and talk
+
+17:54.400 --> 18:01.920
+about this stuff may find me on the internet. Sure, there is still the nebulous concept.
+
+18:01.920 --> 18:07.520
+Every Microsoft says we should have a meeting room for maintainers or for people well invested
+
+18:07.520 --> 18:14.000
+into org and melpa stuff and package writing because it feels like if we have so many ideas
+
+18:14.640 --> 18:18.640
+and so far the only person who's been able to implement every single idea they have is
+
+18:18.640 --> 18:25.600
+Alfa Papa because I have no idea how they do it. That's actually a group of people I think.
+
+18:26.640 --> 18:33.440
+Yes, we need to check if Alfa Papa appeared in two different rooms at the same time. I need to
+
+18:33.440 --> 18:42.000
+confirm this for my own sanity. But yeah, barring Adam from being able to do this, we have so many
+
+18:42.000 --> 18:46.400
+ideas and it feels like if we were talking about them with other people we might be able to implement.
+
+18:46.400 --> 18:49.760
+I've been asking about the cloning machine so maybe Alfa Papa got one.
+
+18:51.200 --> 18:56.560
+Yeah, well anyway I'm sorry for cutting the conversation a little short but we will have
+
+18:56.560 --> 19:02.480
+to get started with the next talk. So thank you so much Karl for taking the time first to send a
+
+19:02.480 --> 19:07.440
+recording to us for answering questions now and also for being a volunteer for eMaximum. Thank
+
+19:07.440 --> 19:14.000
+you so much for all of those three things. Oh, you're welcome. We will probably see you next
+
+19:14.000 --> 19:20.160
+year. I am now definitely set on expecting a Cardboard talk every year and you will have to
+
+19:20.160 --> 19:25.600
+top it next year. I'm not sure what you will find to make the end funny but you have set the bar
+
+19:25.600 --> 19:31.840
+quite high and you need to go even higher this time. Next time without the Leda Jose oil.
+
+19:33.280 --> 19:38.240
+As long as you don't show up, put more clothes, not fewer garments, please.
+
+19:38.240 --> 19:45.520
+We will have to get started with the next talk. Thank you so much Karl. No, I'm sorry. We need to
+
+19:45.520 --> 19:49.760
+get moving to the next talk. I'll be closing the BBB room and we'll start with the next talk at
+
+19:49.760 --> 19:58.160
+the top of the minute in 30 seconds. Bye-bye everyone. Bye. All right, we are not live anymore.
+
+19:58.160 --> 20:01.920
+Thank you so much Karl. I have to get going. We need to make sure everything works now.
+
+20:01.920 --> 20:07.840
+Sure. Bye. Bye-bye.
+
diff --git a/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt
new file mode 100644
index 00000000..a5b85095
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main--chapters.vtt
@@ -0,0 +1,34 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:18.680
+Introduction
+
+00:00:18.680 --> 00:01:42.680
+Setting up the demo
+
+00:01:42.680 --> 00:03:03.920
+Linking between headings
+
+00:03:03.920 --> 00:03:51.640
+Link drawers
+
+00:03:51.640 --> 00:04:09.960
+Bi-directional links
+
+00:04:09.960 --> 00:05:07.680
+Projects
+
+00:05:07.680 --> 00:05:51.600
+Dependencies
+
+00:05:51.600 --> 00:06:39.320
+Jumping between dependencies
+
+00:06:39.320 --> 00:07:49.120
+Closing the project
+
+00:07:49.120 --> 00:08:15.640
+Task dependencies between files
+
+00:08:15.640 --> 00:08:56.000
+Conclusion
diff --git a/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt
new file mode 100644
index 00000000..d67d0a64
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgsuperlinks--linking-headings-with-orgsuperlinks-poormans-zettelkasten--karl-voit--main.vtt
@@ -0,0 +1,508 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:05.600
+Hello, my name is Karl Voit
+
+00:00:05.600 --> 00:00:08.720
+and I'm going to show you a little demo
+
+00:00:08.720 --> 00:00:10.920
+on how I'm working with links
+
+00:00:10.920 --> 00:00:12.760
+between arbitrary headings
+
+00:00:12.760 --> 00:00:16.240
+and how I define dependencies between tasks
+
+00:00:16.240 --> 00:00:18.680
+when I'm working with projects and so forth.
+
+00:00:18.680 --> 00:00:22.680
+For that purpose, I've created a repository
+
+00:00:22.680 --> 00:00:27.680
+that contains the files we are going to work with,
+
+00:00:27.680 --> 00:00:30.000
+with the overall setup and so forth.
+
+00:00:30.000 --> 00:00:32.840
+So you just have to download this repository
+
+00:00:32.840 --> 00:00:36.400
+and you're able to replay everything
+
+00:00:36.400 --> 00:00:38.120
+which you are going to see here.
+
+00:00:38.120 --> 00:00:44.360
+If you've downloaded the configuration of the demo,
+
+00:00:44.360 --> 00:00:49.160
+you see those files, and you start the Emacs
+
+00:00:49.160 --> 00:00:52.800
+with an empty configuration
+
+00:00:52.800 --> 00:00:59.480
+and link demo file, like that.
+
+00:00:59.480 --> 00:01:03.800
+So let me just briefly increase the font size.
+
+00:01:03.800 --> 00:01:05.760
+Setting up the demo is easy.
+
+00:01:05.760 --> 00:01:08.600
+I've done the key visualization,
+
+00:01:08.600 --> 00:01:11.840
+the webcam part, and I've started the Emacs
+
+00:01:11.840 --> 00:01:13.920
+and increased the font size.
+
+00:01:13.920 --> 00:01:17.720
+And the last thing and the most important thing
+
+00:01:17.720 --> 00:01:18.680
+you need to do here
+
+00:01:18.680 --> 00:01:20.360
+is executing the babel block,
+
+00:01:20.360 --> 00:01:23.800
+which consists of more or less dirty Elisp code
+
+00:01:23.800 --> 00:01:27.040
+that installs the necessary packages, functions,
+
+00:01:27.040 --> 00:01:29.800
+and bindings required in this demo.
+
+00:01:29.800 --> 00:01:32.400
+You need to acknowledge the execution
+
+00:01:32.400 --> 00:01:36.160
+with yes and return, and after a couple of seconds,
+
+00:01:36.160 --> 00:01:37.920
+everything is downloaded
+
+00:01:37.920 --> 00:01:42.680
+and set up nicely for your demo.
+
+00:01:42.680 --> 00:01:45.040
+The first demo is the demo
+
+00:01:45.040 --> 00:01:46.960
+where I'm going to show you
+
+00:01:46.960 --> 00:01:48.480
+how I'm working with links
+
+00:01:48.480 --> 00:01:50.120
+between arbitrary headings.
+
+00:01:50.120 --> 00:01:52.440
+It consists of two commands,
+
+00:01:52.440 --> 00:01:55.480
+org-super-links-quick-insert-inline-link,
+
+00:01:55.480 --> 00:01:56.640
+and the second one is
+
+00:01:56.640 --> 00:01:59.160
+org-super-links-quick-insert-drawer-link.
+
+00:01:59.160 --> 00:02:01.040
+So the difference is,
+
+00:02:01.040 --> 00:02:03.720
+the first one is an inline link,
+
+00:02:03.720 --> 00:02:07.640
+and the second one only depends
+
+00:02:07.640 --> 00:02:09.960
+on the drawers of the headings.
+
+00:02:09.960 --> 00:02:12.800
+So let's show you what I mean.
+
+00:02:12.800 --> 00:02:15.240
+If I'm inserting here the inline link
+
+00:02:15.240 --> 00:02:18.680
+to the second one, which I have to choose
+
+00:02:18.680 --> 00:02:21.200
+from the result set here,
+
+00:02:21.200 --> 00:02:26.440
+you see that there is this second heading link
+
+00:02:26.440 --> 00:02:29.480
+included here in the first heading.
+
+00:02:29.480 --> 00:02:34.920
+Let's open up the first and second heading.
+
+00:02:34.920 --> 00:02:37.120
+You see that I can jump this link
+
+00:02:37.120 --> 00:02:40.520
+to the second heading. The first heading
+
+00:02:40.520 --> 00:02:42.000
+as well as the second heading
+
+00:02:42.000 --> 00:02:43.880
+get human readable IDs,
+
+00:02:43.880 --> 00:02:46.040
+which I personally prefer.
+
+00:02:46.040 --> 00:02:49.320
+The second one gets
+
+00:02:49.320 --> 00:02:51.600
+a backheading in a link drawer,
+
+00:02:51.600 --> 00:02:53.680
+which was created automatically.
+
+00:02:53.680 --> 00:02:57.440
+So this is a method where I link arbitrary headings,
+
+00:02:57.440 --> 00:02:59.167
+and that's the main reason
+
+00:02:59.168 --> 00:03:01.214
+why I personally don't need any
+
+00:03:01.215 --> 00:03:03.920
+Zettelkasten-based method like Org Roam.
+
+00:03:03.920 --> 00:03:08.600
+The next command which I want to show you
+
+00:03:08.600 --> 00:03:13.480
+is the link between those drawers.
+
+00:03:13.480 --> 00:03:17.720
+So in order to link the third to the fourth,
+
+00:03:17.720 --> 00:03:20.320
+I need to look for the fourth.
+
+00:03:20.320 --> 00:03:24.200
+In this case, you do not see
+
+00:03:24.200 --> 00:03:27.400
+any inline link like here above,
+
+00:03:27.400 --> 00:03:31.520
+but you see the :PROPERTIES: drawers
+
+00:03:31.520 --> 00:03:35.400
+and the :LINKS: drawers in both headings.
+
+00:03:35.400 --> 00:03:38.480
+So there is a forward- and a back-link
+
+00:03:38.480 --> 00:03:40.200
+between those two headings,
+
+00:03:40.200 --> 00:03:42.920
+and if you see a links drawer
+
+00:03:42.920 --> 00:03:45.440
+you know that there are
+
+00:03:45.440 --> 00:03:47.560
+linked headings you can follow.
+
+00:03:47.560 --> 00:03:51.640
+I do find this method very very handy.
+
+00:03:51.640 --> 00:03:53.600
+Of course, this doesn't only work
+
+00:03:53.600 --> 00:03:57.120
+within one single Org mode file.
+
+00:03:57.120 --> 00:04:01.440
+It works between arbitrary Org mode files
+
+00:04:01.440 --> 00:04:02.633
+as long as they are
+
+00:04:02.634 --> 00:04:05.760
+part of your Org Mode agenda list.
+
+00:04:05.760 --> 00:04:08.280
+So that was the first heading
+
+00:04:08.280 --> 00:04:09.960
+with the bi-directional links.
+
+00:04:09.960 --> 00:04:11.640
+The second one is a little bit
+
+00:04:11.640 --> 00:04:13.080
+more complicated than that
+
+00:04:13.080 --> 00:04:17.280
+because I show you how I'm working with projects.
+
+00:04:17.280 --> 00:04:19.533
+Usually, I start the project
+
+00:04:19.534 --> 00:04:22.080
+by adding a "Why?" statement
+
+00:04:22.080 --> 00:04:25.200
+so that I remember why this project
+
+00:04:25.200 --> 00:04:27.440
+needs to be done in the first place.
+
+00:04:27.440 --> 00:04:32.280
+I do a brainstorming on the tasks
+
+00:04:32.280 --> 00:04:33.933
+that need to be done in the project
+
+00:04:33.934 --> 00:04:36.280
+as a simple list.
+
+00:04:36.280 --> 00:04:39.360
+With this handy command (C-c *),
+
+00:04:39.360 --> 00:04:43.840
+I'm converting it to a list of Org mode headings.
+
+00:04:43.840 --> 00:04:47.040
+Now let's add the NEXT keyword,
+
+00:04:47.040 --> 00:04:49.000
+which is my default to-do keyword,
+
+00:04:49.001 --> 00:04:49.760
+to the first heading.
+
+00:04:49.760 --> 00:04:53.320
+You notice that there is a CREATED property
+
+00:04:53.320 --> 00:04:56.480
+which is not relevant to the demo itself,
+
+00:04:56.480 --> 00:04:57.840
+but it's part of my setup.
+
+00:04:57.840 --> 00:05:00.840
+I really like those created headings
+
+00:05:00.840 --> 00:05:03.640
+because when I add arbitrary headings,
+
+00:05:03.640 --> 00:05:07.680
+this CREATED property is added automatically.
+
+00:05:07.680 --> 00:05:11.480
+So now I want to define a dependency
+
+00:05:11.480 --> 00:05:12.967
+between "Empty garage"
+
+00:05:12.968 --> 00:05:14.800
+and "Paint walls and floor."
+
+00:05:14.800 --> 00:05:18.480
+I do that by invoking my command here,
+
+00:05:18.480 --> 00:05:22.520
+and look for the "Paint walls" heading.
+
+00:05:22.520 --> 00:05:28.600
+In this dialogue, you may add a scheduled date
+
+00:05:28.600 --> 00:05:30.233
+and/or a deadline date
+
+00:05:30.234 --> 00:05:34.240
+and/or a to-do statement. For this demo
+
+00:05:34.240 --> 00:05:37.640
+I only choose the to-do keyword.
+
+00:05:37.640 --> 00:05:39.400
+You notice that there is
+
+00:05:39.400 --> 00:05:41.000
+this TRIGGER property added.
+
+00:05:41.000 --> 00:05:43.280
+That's default behavior of org-edna
+
+00:05:43.280 --> 00:05:47.200
+which is managing the dependencies, in my case.
+
+00:05:47.200 --> 00:05:51.600
+In the other one, there is this BLOCKER property.
+
+00:05:51.600 --> 00:05:55.360
+It's very handy to know that those IDs
+
+00:05:55.360 --> 00:05:57.880
+might be used for jumping
+
+00:05:57.880 --> 00:06:00.640
+between those dependencies again.
+
+00:06:00.640 --> 00:06:03.600
+Those two headings don't have to be necessarily
+
+00:06:03.600 --> 00:06:05.560
+in the very same Org Mode file.
+
+00:06:05.560 --> 00:06:07.920
+They may be scattered around
+
+00:06:07.920 --> 00:06:11.000
+your Org Mode agenda files all over the place.
+
+00:06:11.000 --> 00:06:16.160
+So continuing this definition of dependency
+
+00:06:16.160 --> 00:06:19.040
+between the second and the third one...
+
+00:06:19.040 --> 00:06:23.000
+I'm using the search "Bring back stuff"...
+
+00:06:23.000 --> 00:06:24.800
+the search functionality...
+
+00:06:24.800 --> 00:06:28.800
+I choose the NEXT keyword here, its dependency.
+
+00:06:28.800 --> 00:06:32.480
+The same holds true for the last two.
+
+00:06:32.480 --> 00:06:37.400
+"Is painted", for example. I'm going to use
+
+00:06:37.400 --> 00:06:39.320
+the NEXT keyword again.
+
+00:06:39.320 --> 00:06:44.520
+I tend to use the last task of any project
+
+00:06:44.520 --> 00:06:47.120
+to close the overall project.
+
+00:06:47.120 --> 00:06:49.880
+So if I show you this one,
+
+00:06:49.880 --> 00:06:57.040
+I'm using the dependency to "Garage" project,
+
+00:06:57.040 --> 00:07:02.200
+and this time I'm using the DONE keyword.
+
+00:07:02.200 --> 00:07:04.920
+Of course, the properties
+
+00:07:04.920 --> 00:07:07.920
+look like that all the time,
+
+00:07:07.920 --> 00:07:11.640
+so there is a trigger from the first task
+
+00:07:11.640 --> 00:07:13.920
+to the second one, and there is a blocker
+
+00:07:13.920 --> 00:07:17.120
+from the second one back to the first one,
+
+00:07:17.120 --> 00:07:21.640
+and when I'm actually doing the project,
+
+00:07:21.640 --> 00:07:25.520
+I may now mark the first task as DONE,
+
+00:07:25.520 --> 00:07:28.360
+and you notice that the second one
+
+00:07:28.360 --> 00:07:31.440
+automatically gets a next keyword.
+
+00:07:31.440 --> 00:07:34.600
+This happened, of course, for all those tasks.
+
+00:07:34.600 --> 00:07:38.920
+The neat thing is when I close the last one,
+
+00:07:38.920 --> 00:07:42.760
+the overall project gets its DONE keyword as well.
+
+00:07:42.760 --> 00:07:46.360
+So this is how I'm working with
+
+00:07:46.360 --> 00:07:49.120
+projects and dependencies.
+
+00:07:49.120 --> 00:07:53.720
+Most of the time, task dependencies
+
+00:07:53.720 --> 00:07:58.160
+are not even within the same Org Mode subheading,
+
+00:07:58.160 --> 00:08:01.600
+let's say. Also, I'm using dependencies
+
+00:08:01.600 --> 00:08:03.720
+between different Org Mode files.
+
+00:08:03.720 --> 00:08:07.160
+This is a very, very cool way of defining
+
+00:08:07.160 --> 00:08:10.040
+what to do next in a project,
+
+00:08:10.040 --> 00:08:12.667
+without looking for tasks
+
+00:08:12.668 --> 00:08:15.640
+that can't be done at that stage.
+
+00:08:15.640 --> 00:08:20.240
+You can have a look at the details of the demo
+
+00:08:20.240 --> 00:08:23.800
+by checking out the files in the repository.
+
+00:08:23.800 --> 00:08:27.080
+That's it for the demo,
+
+00:08:27.080 --> 00:08:30.720
+and therefore I thank you for your patience.
+
+00:08:30.720 --> 00:08:32.160
+I wish you good luck,
+
+00:08:32.160 --> 00:08:39.520
+and I hope that I could show you one or two tricks
+
+00:08:39.520 --> 00:08:42.080
+that you can add to your Org Mode setup
+
+00:08:42.080 --> 00:08:47.040
+in order to help you with your daily work.
+
+00:08:47.040 --> 00:08:56.000
+So bye from me, till next time.
diff --git a/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--answers.vtt b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--answers.vtt
new file mode 100644
index 00000000..7f9550b2
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--answers.vtt
@@ -0,0 +1,2348 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:26.000
+ [MUSIC PLAYING]
+
+00:00:26.000 --> 00:00:36.000
+ [MUSIC PLAYING]
+
+00:00:36.000 --> 00:00:42.480
+ And so this little application--
+
+00:00:42.480 --> 00:00:46.480
+ well, I'll skip that and just kind of jump right
+
+00:00:46.480 --> 00:00:49.760
+ into my thesis for those of you that
+
+00:00:49.760 --> 00:00:53.360
+ might be planning to duck out for the RMS talk,
+
+00:00:53.360 --> 00:00:55.520
+ starting in a little bit.
+
+00:00:55.520 --> 00:00:59.360
+ So essentially, my thesis here is really
+
+00:00:59.360 --> 00:01:04.800
+ that the Emacs toolchain can easily
+
+00:01:04.800 --> 00:01:10.280
+ be combined with other skills and used in kind of a Unix
+
+00:01:10.280 --> 00:01:13.280
+ paradigm of having sort of different tools
+
+00:01:13.280 --> 00:01:14.960
+ to do different steps.
+
+00:01:14.960 --> 00:01:17.760
+ We might actually use the same tool
+
+00:01:17.760 --> 00:01:19.240
+ to implement a couple of steps.
+
+00:01:19.240 --> 00:01:22.080
+ But with that paradigm, each step
+
+00:01:22.080 --> 00:01:24.960
+ is an individual item that can be sort of dropped in
+
+00:01:24.960 --> 00:01:26.400
+ and replaced.
+
+00:01:26.400 --> 00:01:29.560
+ So over the course of the talk, hopefully I'll
+
+00:01:29.560 --> 00:01:31.080
+ come back to that thesis.
+
+00:01:31.080 --> 00:01:35.800
+ But I'll now jump back and start walking through what is
+
+00:01:35.800 --> 00:01:37.040
+ orgvm?
+
+00:01:37.040 --> 00:01:39.560
+ So this is a very simple proof of concept program.
+
+00:01:39.560 --> 00:01:44.200
+ We'll just jump over to perhaps a prettier view of the
+
+00:01:44.200 --> 00:01:44.880
+ source
+
+00:01:44.880 --> 00:01:45.520
+ code for it.
+
+00:01:45.520 --> 00:01:49.200
+ This is implemented-- oops.
+
+00:01:49.200 --> 00:01:53.160
+ There's some cruft, I think, in my local.
+
+00:01:53.160 --> 00:01:56.560
+ All right, so there's config block at the top.
+
+00:01:56.560 --> 00:01:58.120
+ And we'll be jumping back and forth
+
+00:01:58.120 --> 00:02:01.880
+ between the code and the documentation.
+
+00:02:01.880 --> 00:02:04.080
+ So the first thing I want to point out
+
+00:02:04.080 --> 00:02:05.960
+ is that this is written in Node.js.
+
+00:02:05.960 --> 00:02:08.600
+ But I think you'll find it'd be pretty trivial to implement
+
+00:02:08.600 --> 00:02:10.840
+ in any language.
+
+00:02:10.840 --> 00:02:13.960
+ Certainly, you're more than welcome to use this.
+
+00:02:13.960 --> 00:02:17.920
+ I'd be happy to accept your patches or feature requests
+
+00:02:17.920 --> 00:02:20.080
+ and things like that.
+
+00:02:20.080 --> 00:02:21.680
+ Of course, bug reports.
+
+00:02:21.680 --> 00:02:25.760
+ But I'd also encourage others to roll their own.
+
+00:02:25.760 --> 00:02:28.760
+ You might well come up with a different version of this
+
+00:02:28.760 --> 00:02:29.600
+ that's even cooler.
+
+00:02:29.600 --> 00:02:32.160
+ And we can learn from each other.
+
+00:02:32.160 --> 00:02:34.200
+ If you heard one of my talks before,
+
+00:02:34.200 --> 00:02:36.200
+ you probably recognize a common theme.
+
+00:02:36.200 --> 00:02:40.320
+ I'm a big fan of head-first development
+
+00:02:40.320 --> 00:02:43.540
+ as a way to get invested in both the tool chain and a
+
+00:02:43.540 --> 00:02:44.120
+ culture.
+
+00:02:44.120 --> 00:02:49.560
+ All right, so let's come back to orgvm.
+
+00:02:49.560 --> 00:02:52.280
+ First of all, we'll start with the itch I was trying to
+
+00:02:52.280 --> 00:02:52.840
+ scratch.
+
+00:02:52.840 --> 00:02:58.240
+ I wanted to be able to quickly use a web browser
+
+00:02:58.240 --> 00:03:00.680
+ to browse my org documents.
+
+00:03:00.680 --> 00:03:03.530
+ It's particularly handy when the documents are full of
+
+00:03:03.530 --> 00:03:03.960
+ cross
+
+00:03:03.960 --> 00:03:05.640
+ links to each other.
+
+00:03:05.640 --> 00:03:10.080
+ That meant I wanted to automatically export,
+
+00:03:10.080 --> 00:03:12.280
+ particularly to HTML.
+
+00:03:12.280 --> 00:03:17.280
+ But it made sense for me to include Markdown, PDF,
+
+00:03:17.280 --> 00:03:18.880
+ or whatever format I want.
+
+00:03:18.880 --> 00:03:22.760
+ Because many times, I'm going to look at that file
+
+00:03:22.760 --> 00:03:29.480
+ and then pop it into an email or upload it somewhere.
+
+00:03:29.480 --> 00:03:33.240
+ And then finally, it should be, therefore,
+
+00:03:33.240 --> 00:03:36.840
+ pretty easy to download the document rather than view it
+
+00:03:36.840 --> 00:03:38.320
+ once I'm done.
+
+00:03:38.320 --> 00:03:42.200
+ So let's just run a quick demo.
+
+00:03:42.200 --> 00:03:44.760
+ You'll see I'm still a Windows user.
+
+00:03:44.760 --> 00:03:45.960
+ Yeah, I'm working on it.
+
+00:03:45.960 --> 00:03:52.320
+ So all right, first thing that we're going to do
+
+00:03:52.320 --> 00:03:53.320
+ is fire up the program.
+
+00:03:53.320 --> 00:04:00.200
+ Actually, for simplicity, let's just
+
+00:04:00.200 --> 00:04:01.760
+ admit we live in a DOS world.
+
+00:04:01.760 --> 00:04:19.760
+ And as you can see, there's not much to it
+
+00:04:19.760 --> 00:04:21.520
+ to get the application running.
+
+00:04:22.680 --> 00:04:22.680
+
+
+00:04:22.680 --> 00:04:25.960
+ So with that done, then, I can run out to my local host.
+
+00:04:25.960 --> 00:04:36.780
+ And we'll just start by plugging in the name of an org file
+
+00:04:36.780 --> 00:04:37.560
+.
+
+00:04:37.560 --> 00:04:45.820
+ So I've got a little org file that I prepared that just
+
+00:04:45.820 --> 00:04:46.640
+ kind
+
+00:04:46.640 --> 00:04:49.040
+ of provides a proof of concept to this.
+
+00:04:49.040 --> 00:04:53.560
+ And you can see, as imagined, we're automatically
+
+00:04:53.560 --> 00:04:54.640
+ turning that org file.
+
+00:04:54.640 --> 00:04:56.320
+ Let's just take a quick look at it.
+
+00:04:56.320 --> 00:05:10.280
+ And here's that file now.
+
+00:05:10.280 --> 00:05:11.960
+ But you can see nothing up my sleeve.
+
+00:05:11.960 --> 00:05:14.000
+ This is a very basic org file that I
+
+00:05:14.000 --> 00:05:16.560
+ use for testing this program.
+
+00:05:16.560 --> 00:05:17.640
+ Images work.
+
+00:05:17.640 --> 00:05:21.800
+ We've got some nicely syntax highlighted code
+
+00:05:21.800 --> 00:05:25.560
+ blocks in a couple different languages.
+
+00:05:25.560 --> 00:05:29.760
+ And not really that much going on there.
+
+00:05:29.760 --> 00:05:33.760
+ All right, let's come back to the documentation.
+
+00:05:33.760 --> 00:05:36.680
+ I pretty well covered this, I think.
+
+00:05:36.680 --> 00:05:39.720
+ But you'll need a relatively recent version of Emacs.
+
+00:05:39.720 --> 00:05:43.640
+ I haven't taken any pains to make this backward compatible.
+
+00:05:43.640 --> 00:05:46.000
+ To be fair, I haven't tested it extensively.
+
+00:05:46.000 --> 00:05:50.320
+ It may well work on Emacs 26 or older versions.
+
+00:05:50.320 --> 00:05:55.120
+ I'm personally running 27.1 and 28,
+
+00:05:55.120 --> 00:05:57.080
+ as well as recent builds of 29.
+
+00:05:57.080 --> 00:06:02.560
+ There's some quick start instructions here,
+
+00:06:02.560 --> 00:06:03.900
+ which I'm going to take as read.
+
+00:06:03.900 --> 00:06:09.160
+ You probably saw the key element of this, which
+
+00:06:09.160 --> 00:06:11.920
+ involves starting the program.
+
+00:06:11.920 --> 00:06:13.520
+ You do-- I will call out Yale.
+
+00:06:13.520 --> 00:06:15.320
+ If you're trying to play with this yourself,
+
+00:06:15.320 --> 00:06:20.080
+ don't forget to run the npm install command.
+
+00:06:20.080 --> 00:06:23.240
+ That'll bring in express.js, which the JavaScript we're
+
+00:06:23.240 --> 00:06:24.920
+ about to look at is built on.
+
+00:06:24.920 --> 00:06:33.480
+ So let's just take a look at the usage patterns real quick.
+
+00:06:33.480 --> 00:06:35.920
+ To use this, we're simply giving the document name
+
+00:06:35.920 --> 00:06:42.760
+ without the org extension in whatever file path--
+
+00:06:42.760 --> 00:06:46.960
+ or I'm sorry, whatever we've configured the server
+
+00:06:46.960 --> 00:06:50.800
+ to run on, in this case, port 3000.
+
+00:06:50.800 --> 00:06:52.960
+ I also want to call attention to the fact
+
+00:06:52.960 --> 00:06:55.880
+ that nothing in this program protects you
+
+00:06:55.880 --> 00:06:57.240
+ from damaging yourself.
+
+00:06:57.240 --> 00:07:00.560
+ This isn't meant as a production capability.
+
+00:07:00.560 --> 00:07:03.290
+ This is something that's used to publish your own note
+
+00:07:03.290 --> 00:07:04.840
+ files
+
+00:07:04.840 --> 00:07:06.520
+ and roll them up to yourself.
+
+00:07:06.520 --> 00:07:08.680
+ That's something I'll definitely look at adding,
+
+00:07:08.680 --> 00:07:12.240
+ but I want people to be careful of it
+
+00:07:12.240 --> 00:07:14.720
+ while this is in an alpha state.
+
+00:07:14.720 --> 00:07:22.960
+ So the default response is HTML, and we saw that here.
+
+00:07:22.960 --> 00:07:26.240
+ But we also can modify the response format.
+
+00:07:26.240 --> 00:07:29.800
+ We're currently supporting HTML, Markdown, and PDF.
+
+00:07:29.800 --> 00:07:34.280
+ And that's really enough to select a different format.
+
+00:07:34.280 --> 00:07:36.640
+ That's really nothing more than adding--
+
+00:07:36.640 --> 00:07:45.040
+ [AUDIO OUT]
+
+00:07:45.040 --> 00:07:48.040
+ --type, OK.
+
+00:07:48.040 --> 00:07:50.680
+ Not sure what's going on there.
+
+00:07:50.680 --> 00:07:57.080
+ OK, well, there goes my demo.
+
+00:07:57.080 --> 00:07:59.440
+ Shows me for doing my talk live.
+
+00:08:03.920 --> 00:08:06.960
+ But this, fortunately, this error message
+
+00:08:06.960 --> 00:08:08.840
+ is a nice segue to the part of the talk
+
+00:08:08.840 --> 00:08:10.240
+ that I'd really like to focus on,
+
+00:08:10.240 --> 00:08:13.520
+ hopefully bringing me back to that thesis.
+
+00:08:13.520 --> 00:08:17.760
+ So as we start to look at code, what we're looking for
+
+00:08:17.760 --> 00:08:21.640
+ is really this Emacs Lisp that's getting generated here.
+
+00:08:21.640 --> 00:08:24.000
+ And you'll notice that's the stuff
+
+00:08:24.000 --> 00:08:27.600
+ I thought was important to produce as diagnostics
+
+00:08:27.600 --> 00:08:29.840
+ for the programs running as well.
+
+00:08:29.840 --> 00:08:34.000
+ So spoiler, this e-lisp is dynamically
+
+00:08:34.000 --> 00:08:35.400
+ generated by the program.
+
+00:08:35.400 --> 00:08:38.160
+ And that's really the core of the way
+
+00:08:38.160 --> 00:08:42.680
+ org VM or my org VM works.
+
+00:08:42.680 --> 00:08:47.360
+ So this should look pretty similar to the view of the code
+
+00:08:47.360 --> 00:08:48.880
+ we had a moment ago.
+
+00:08:48.880 --> 00:08:51.840
+ You can see I've got some bases.
+
+00:08:51.840 --> 00:08:53.680
+ This is all hard-coded into the program,
+
+00:08:53.680 --> 00:08:56.720
+ nothing fancy going on here.
+
+00:08:56.720 --> 00:09:00.280
+ The debug is simply controlling that diagnostic output
+
+00:09:00.280 --> 00:09:01.560
+ that we looked at.
+
+00:09:01.560 --> 00:09:04.240
+ There's some other, hopefully fairly self-explanatory
+
+00:09:04.240 --> 00:09:09.160
+ programs or properties, where to find Emacs and so forth.
+
+00:09:09.160 --> 00:09:16.320
+ And then finally, we come in to the meat of it,
+
+00:09:16.320 --> 00:09:21.840
+ the variables that are used to control what e-lisp we
+
+00:09:21.840 --> 00:09:24.280
+ can generate dynamically.
+
+00:09:24.280 --> 00:09:27.400
+ So here, we're controlling the extension
+
+00:09:27.400 --> 00:09:29.360
+ that it should look for org files.
+
+00:09:29.360 --> 00:09:31.560
+ Hopefully not too many people out there
+
+00:09:31.560 --> 00:09:34.080
+ with a weird extension for the org files,
+
+00:09:34.080 --> 00:09:37.920
+ but this should support that.
+
+00:09:37.920 --> 00:09:40.120
+ I'm afraid that is something I've been known to do.
+
+00:09:40.120 --> 00:09:49.520
+ Then we define a list of additional export types.
+
+00:09:49.520 --> 00:09:50.760
+ Here's one that ought to work.
+
+00:09:50.760 --> 00:09:53.200
+ Let's take a look at type equals org.
+
+00:09:54.720 --> 00:09:54.720
+
+
+00:09:54.720 --> 00:09:59.320
+ And, aha, it's giving us the file.
+
+00:09:59.320 --> 00:10:00.680
+ So I'm not going to open that up,
+
+00:10:00.680 --> 00:10:02.400
+ but now we can see that that's definitely
+
+00:10:02.400 --> 00:10:09.200
+ working for certain versions of working.
+
+00:10:09.200 --> 00:10:14.280
+ So this list of type parameters is
+
+00:10:14.280 --> 00:10:15.720
+ controlling the supported types.
+
+00:10:15.720 --> 00:10:18.550
+ Hopefully it should be fairly easy to add in different ones
+
+00:10:18.550 --> 00:10:18.800
+.
+
+00:10:18.800 --> 00:10:21.480
+ The fancy footwork here is just a list
+
+00:10:21.480 --> 00:10:23.480
+ of the types that we're going to be using.
+
+00:10:23.480 --> 00:10:29.320
+ The fancy footwork here involves, first of all,
+
+00:10:29.320 --> 00:10:32.240
+ there's the extension and the MIME type.
+
+00:10:32.240 --> 00:10:36.520
+ That's, as you might guess, used to control the response
+
+00:10:36.520 --> 00:10:37.040
+ content
+
+00:10:37.040 --> 00:10:38.720
+ type.
+
+00:10:38.720 --> 00:10:40.920
+ We also have this replace variable.
+
+00:10:40.920 --> 00:10:44.000
+ This prevents-- there's an optimization
+
+00:10:44.000 --> 00:10:48.840
+ to send an existing PDF or HTML file if that's already
+
+00:10:48.840 --> 00:10:53.520
+ there, but only if the original source org file hasn't
+
+00:10:53.520 --> 00:10:56.240
+ been modified since.
+
+00:10:56.240 --> 00:10:59.920
+ This replace effectively can turn that off.
+
+00:10:59.920 --> 00:11:03.040
+ If I remove the replace equals true attribute,
+
+00:11:03.040 --> 00:11:07.600
+ then I'll be prevented from overwriting that.
+
+00:11:07.600 --> 00:11:10.320
+ In other words, I'll always send a cached version.
+
+00:11:10.320 --> 00:11:13.880
+ That might be helpful if, for example, you've
+
+00:11:13.880 --> 00:11:16.560
+ got hand-tuned PDFs and you don't want to accidentally
+
+00:11:16.560 --> 00:11:17.200
+ overwrite them.
+
+00:11:19.120 --> 00:11:19.120
+
+
+00:11:19.120 --> 00:11:23.480
+ All right, let's get into the code a little bit more.
+
+00:11:23.480 --> 00:11:28.280
+ I'm going to skip past the really good stuff
+
+00:11:28.280 --> 00:11:32.520
+ and jump into the boring parts so that we have them
+
+00:11:32.520 --> 00:11:34.240
+ as context.
+
+00:11:34.240 --> 00:11:37.160
+ Here's the default path.
+
+00:11:37.160 --> 00:11:41.880
+ And it is going to send me the readme from the project--
+
+00:11:41.880 --> 00:11:47.120
+ from the project repo if I don't specify a path.
+
+00:11:47.120 --> 00:11:51.240
+ And then we have a couple of different endpoints
+
+00:11:51.240 --> 00:11:52.480
+ that we support.
+
+00:11:52.480 --> 00:11:55.560
+ We'll come back to this first one.
+
+00:11:55.560 --> 00:11:59.600
+ For now, let's start with the more normal one, which
+
+00:11:59.600 --> 00:12:01.760
+ is just giving us a file name.
+
+00:12:01.760 --> 00:12:04.160
+ So we can see we start by figuring out
+
+00:12:04.160 --> 00:12:08.520
+ what the physical file name should be called.
+
+00:12:08.520 --> 00:12:10.280
+ And assuming that that exists--
+
+00:12:15.600 --> 00:12:17.080
+ sorry, I've confused myself.
+
+00:12:17.080 --> 00:12:23.000
+ So this is the caching or the optimization
+
+00:12:23.000 --> 00:12:25.640
+ that I mentioned, sending the existing file.
+
+00:12:25.640 --> 00:12:31.360
+ This file exists is where the optimization is
+
+00:12:31.360 --> 00:12:38.680
+ that regenerates the file if the source
+
+00:12:38.680 --> 00:12:41.840
+ or document for the HTML generator has changed.
+
+00:12:45.080 --> 00:12:46.760
+ Again, this is a short talk, so I'm not
+
+00:12:46.760 --> 00:12:49.320
+ going to go into all the nuances of this JavaScript code.
+
+00:12:49.320 --> 00:12:52.800
+ It's pretty far from an Emacs-related thing.
+
+00:12:52.800 --> 00:12:56.040
+ So with that said, then, the rest of this program
+
+00:12:56.040 --> 00:12:59.360
+ is really mostly just handling the different error.
+
+00:12:59.360 --> 00:13:01.000
+ I didn't understand that type.
+
+00:13:01.000 --> 00:13:02.080
+ I don't know the document.
+
+00:13:02.080 --> 00:13:03.040
+ I failed.
+
+00:13:03.040 --> 00:13:06.480
+ Otherwise, there's the caching.
+
+00:13:06.480 --> 00:13:14.520
+ And here's really where things get interesting,
+
+00:13:14.520 --> 00:13:19.200
+ where we've generated some ELISP,
+
+00:13:19.200 --> 00:13:22.280
+ and then we're calling Emacs with that ELISP.
+
+00:13:22.280 --> 00:13:24.760
+ If everything works, we'll send the file.
+
+00:13:24.760 --> 00:13:27.800
+ If it doesn't, we'll send the 500.
+
+00:13:27.800 --> 00:13:30.920
+ And we've already seen the 500, so we know that works.
+
+00:13:30.920 --> 00:13:33.760
+ All right, let's get to the interesting part.
+
+00:13:33.760 --> 00:13:37.320
+ Sorry, one more footnote.
+
+00:13:37.320 --> 00:13:39.320
+ There is a capability built in that will
+
+00:13:39.320 --> 00:13:41.040
+ allow us to execute an org block.
+
+00:13:41.040 --> 00:13:42.840
+ Let's see if that's working in our local.
+
+00:13:44.800 --> 00:13:44.800
+
+
+00:13:44.800 --> 00:13:47.200
+ I'll remind myself how to do it.
+
+00:13:47.200 --> 00:13:49.560
+ It's run.
+
+00:13:49.560 --> 00:13:53.320
+ I think it's called test.
+
+00:13:53.320 --> 00:13:56.360
+ And that's returning a 500.
+
+00:13:56.360 --> 00:13:58.400
+ I'm suspecting that's running because I'm running
+
+00:13:58.400 --> 00:13:59.760
+ in command instead of bash.
+
+00:13:59.760 --> 00:14:06.040
+ Oh, yeah, so the failure is happening
+
+00:14:06.040 --> 00:14:07.720
+ after I generate the ELISP.
+
+00:14:07.720 --> 00:14:10.280
+ I'm pretty confident that is what the actual problem is.
+
+00:14:10.280 --> 00:14:12.760
+ If we have time, I'll jump back over there
+
+00:14:12.760 --> 00:14:19.280
+ and relaunch it in mingity-bash.
+
+00:14:19.280 --> 00:14:21.440
+ And we can see it actually work.
+
+00:14:21.440 --> 00:14:24.200
+ But this works pretty well for me on my work laptop.
+
+00:14:24.200 --> 00:14:25.860
+ I didn't have to make any changes to it.
+
+00:14:25.860 --> 00:14:28.120
+ So I have a fairly high amount of confidence,
+
+00:14:28.120 --> 00:14:32.400
+ at least in trivial cases, this works pretty well.
+
+00:14:32.400 --> 00:14:37.800
+ All right, so what I actually wanted to talk about today--
+
+00:14:37.800 --> 00:14:42.400
+ and I'm going to be kind of hand-waving around this ES5
+
+00:14:42.400 --> 00:14:46.480
+ class that I've got and kind of the way that works.
+
+00:14:46.480 --> 00:14:49.840
+ Hopefully, this will be pretty familiar to you
+
+00:14:49.840 --> 00:14:53.440
+ if you are a JavaScript programmer.
+
+00:14:53.440 --> 00:14:58.660
+ The interesting stuff comes when we want to build some LISP
+
+00:14:58.660 --> 00:14:59.000
+.
+
+00:15:01.960 --> 00:15:09.410
+ Here, you can see that I really don't have a whole lot of
+
+00:15:09.410 --> 00:15:09.720
+ code
+
+00:15:09.720 --> 00:15:11.280
+ around formatting LISP.
+
+00:15:11.280 --> 00:15:14.360
+ You can see that I've special-cased
+
+00:15:14.360 --> 00:15:19.840
+ whether the arguments that were passed
+
+00:15:19.840 --> 00:15:20.880
+ happen to be a function.
+
+00:15:20.880 --> 00:15:25.480
+ If they are, I'm going to call that function.
+
+00:15:25.480 --> 00:15:31.720
+ And then the result will be formatted as LISP.
+
+00:15:31.720 --> 00:15:35.040
+ So this would be a recursive call here.
+
+00:15:35.040 --> 00:15:40.960
+ Otherwise, I'm just going to return the arguments.
+
+00:15:40.960 --> 00:15:48.440
+ Sorry, otherwise, I will slap a pair of parentheses
+
+00:15:48.440 --> 00:15:53.440
+ around the result of walking that list
+
+00:15:53.440 --> 00:15:57.880
+ if I get formatting each element of the list of arguments
+
+00:15:57.880 --> 00:16:02.600
+ that this format LISP process calls
+
+00:16:02.600 --> 00:16:04.920
+ and separating them with spaces.
+
+00:16:04.920 --> 00:16:10.880
+ So in short form, this program walks through a list.
+
+00:16:10.880 --> 00:16:14.000
+ If the list it receives is a function,
+
+00:16:14.000 --> 00:16:16.080
+ it calls that function.
+
+00:16:16.080 --> 00:16:19.320
+ Once that's handled or otherwise,
+
+00:16:19.320 --> 00:16:22.720
+ we simply walk the list, taking the arguments,
+
+00:16:22.720 --> 00:16:26.000
+ concatenating them on strings, and finally,
+
+00:16:26.000 --> 00:16:28.560
+ wrap the results in parentheses.
+
+00:16:28.560 --> 00:16:31.760
+ So what I didn't mention there but might be obvious
+
+00:16:31.760 --> 00:16:36.120
+ is if I have a nested list, the inner list
+
+00:16:36.120 --> 00:16:38.600
+ will be subjected to the same treatment.
+
+00:16:38.600 --> 00:16:43.000
+ So this is a recursive sort of algorithm.
+
+00:16:43.000 --> 00:16:51.520
+ All right, so now when I go to export,
+
+00:16:51.520 --> 00:16:53.520
+ actually, in the interest of time,
+
+00:16:53.520 --> 00:16:55.800
+ I'm going to avoid walking through that piece of code
+
+00:16:55.800 --> 00:16:58.840
+ and let's focus instead on the more interesting part
+
+00:16:58.840 --> 00:17:02.360
+ of how that LISP gets encoded.
+
+00:17:02.360 --> 00:17:07.520
+ So coming back to the PDF is a good example here
+
+00:17:07.520 --> 00:17:10.320
+ because it's got a special case.
+
+00:17:10.320 --> 00:17:14.280
+ You can see I've specified this export fun or export
+
+00:17:14.280 --> 00:17:15.320
+ function.
+
+00:17:15.320 --> 00:17:19.560
+ That's a property none of these other types have.
+
+00:17:22.400 --> 00:17:27.280
+ And you can see it contains a meat LISP telling us
+
+00:17:27.280 --> 00:17:29.760
+ how to call the export for it.
+
+00:17:29.760 --> 00:17:32.680
+ Let's go see how that's used.
+
+00:17:32.680 --> 00:17:35.720
+ At the very end of what I just skipped over,
+
+00:17:35.720 --> 00:17:40.600
+ the detailed how the org export process works,
+
+00:17:40.600 --> 00:17:45.040
+ you'll see that I am ending with a step
+
+00:17:45.040 --> 00:17:48.000
+ to call the export function.
+
+00:17:48.000 --> 00:17:54.520
+ Here, I look to see whether I have an export function
+
+00:17:54.520 --> 00:17:55.400
+ property.
+
+00:17:55.400 --> 00:18:00.920
+ If I do, I call that function.
+
+00:18:00.920 --> 00:18:06.760
+ And if I don't, I build this list with the default org
+
+00:18:06.760 --> 00:18:14.320
+ export to file function using the file name and an output
+
+00:18:14.320 --> 00:18:15.640
+ file name.
+
+00:18:15.640 --> 00:18:18.480
+ So this, hopefully, is pretty familiar to anybody
+
+00:18:18.480 --> 00:18:22.950
+ that's manually messed around with calling org export to
+
+00:18:22.950 --> 00:18:23.560
+ file.
+
+00:18:23.560 --> 00:18:25.800
+ If it isn't, you can pretty well trust me for it.
+
+00:18:25.800 --> 00:18:28.280
+ There's nothing very special going on.
+
+00:18:28.280 --> 00:18:30.760
+ This looks rather like--
+
+00:18:30.760 --> 00:18:37.240
+ poor example there.
+
+00:18:37.240 --> 00:18:38.960
+ Let's go back to our markdown.
+
+00:18:38.960 --> 00:18:46.320
+ [AUDIO OUT]
+
+00:18:46.320 --> 00:18:47.720
+ And there, we can see--
+
+00:18:47.720 --> 00:18:49.840
+ - I'm going to make a quick announcement.
+
+00:18:49.840 --> 00:18:50.760
+ Can you hear me?
+
+00:18:50.760 --> 00:18:52.480
+ - Yes, go for it.
+
+00:18:52.480 --> 00:18:54.280
+ - OK, let me just show my face.
+
+00:18:54.280 --> 00:18:55.400
+ Oh, I'm not showing my face.
+
+00:18:55.400 --> 00:18:55.640
+ Damn it.
+
+00:18:55.640 --> 00:18:57.000
+ OK, I'll make the announcement.
+
+00:18:57.000 --> 00:18:58.600
+ You won't see my face quite yet.
+
+00:18:58.600 --> 00:19:00.360
+ We are about to get started.
+
+00:19:00.360 --> 00:19:02.440
+ Well, we actually just got started on dev
+
+00:19:02.440 --> 00:19:06.040
+ with the talk by RMS.
+
+00:19:06.040 --> 00:19:08.920
+ So if you want to hop over to watch the talk by RMS,
+
+00:19:08.920 --> 00:19:09.760
+ feel free to do so.
+
+00:19:09.760 --> 00:19:12.240
+ Otherwise, we will be continuing on Gen with Corwin
+
+00:19:12.240 --> 00:19:14.520
+ to finish his talk and have a Q&A. Corwin,
+
+00:19:14.520 --> 00:19:16.080
+ you can feel free to go now.
+
+00:19:16.080 --> 00:19:18.560
+ - OK, bye, everybody.
+
+00:19:18.560 --> 00:19:22.800
+ And for those sticking around, I'm
+
+00:19:22.800 --> 00:19:25.040
+ just going to keep pressing on with this.
+
+00:19:25.040 --> 00:19:30.240
+ In fact, I'm going to dive back into the part
+
+00:19:30.240 --> 00:19:35.400
+ that I skipped here, which is the rest of how
+
+00:19:35.400 --> 00:19:37.400
+ this export functionality works.
+
+00:19:37.400 --> 00:19:41.400
+ So just to make sure the dot is tied together,
+
+00:19:41.400 --> 00:19:44.440
+ the core of how this program works
+
+00:19:44.440 --> 00:19:49.320
+ is generating some ELISP and then passing it
+
+00:19:49.320 --> 00:19:51.680
+ to Emacs in batch mode.
+
+00:19:51.680 --> 00:19:53.280
+ So if that wasn't perfectly clear,
+
+00:19:53.280 --> 00:19:57.240
+ that's really what's going on with this program.
+
+00:19:57.240 --> 00:19:59.240
+ The rest of the implementation is just
+
+00:19:59.240 --> 00:20:01.840
+ a way to do that or certain features that
+
+00:20:01.840 --> 00:20:08.440
+ are supported in that generated ELISP, if you will.
+
+00:20:08.440 --> 00:20:11.720
+ So this is, you could say, the minimum implementation
+
+00:20:11.720 --> 00:20:16.220
+ I could come up with to create a web server for my local
+
+00:20:16.220 --> 00:20:16.560
+ org
+
+00:20:16.560 --> 00:20:17.320
+ documents.
+
+00:20:17.320 --> 00:20:24.440
+ And I will also interrupt myself to just pull up
+
+00:20:24.440 --> 00:20:28.040
+ the etherpad real quick.
+
+00:20:28.040 --> 00:20:29.600
+ Actually, if somebody is listening
+
+00:20:29.600 --> 00:20:34.720
+ and can share a link to that, I closed my browser window
+
+00:20:34.720 --> 00:20:36.400
+ with my links in it.
+
+00:20:36.400 --> 00:20:44.520
+ But sure, I'm happy to take questions at any point, Leo,
+
+00:20:44.520 --> 00:20:48.480
+ if there are any questions for me.
+
+00:20:48.480 --> 00:20:49.720
+ Are you hanging out with me?
+
+00:20:49.720 --> 00:20:53.360
+ Instead of watching RMS, you can go.
+
+00:20:53.360 --> 00:20:54.600
+ I'm teasing.
+
+00:20:54.600 --> 00:20:58.840
+ No, I mean, we know that some people can
+
+00:20:58.840 --> 00:21:00.000
+ have both streams open.
+
+00:21:00.000 --> 00:21:01.560
+ It's fine.
+
+00:21:01.560 --> 00:21:03.320
+ And right now, it's not the Q&A with RMS.
+
+00:21:03.320 --> 00:21:04.640
+ It's just the presentation.
+
+00:21:04.640 --> 00:21:07.040
+ So feel free to hang out a little longer
+
+00:21:07.040 --> 00:21:09.080
+ if you just want the live stuff.
+
+00:21:09.080 --> 00:21:09.960
+ Don't worry about it.
+
+00:21:09.960 --> 00:21:10.760
+ You're fine.
+
+00:21:10.760 --> 00:21:13.720
+ Yeah, and forgive me, everybody.
+
+00:21:13.720 --> 00:21:16.280
+ If you were hoping for a quick, succinct talk,
+
+00:21:16.280 --> 00:21:18.960
+ I happen to know I was going to be opposite RMS.
+
+00:21:18.960 --> 00:21:23.240
+ So I awarded myself the liberty of rambling.
+
+00:21:23.240 --> 00:21:26.840
+ So if you do have a question, something that I alluded to
+
+00:21:26.840 --> 00:21:29.800
+ and haven't come back to yet, you should, by all means,
+
+00:21:29.800 --> 00:21:30.320
+ prompt me.
+
+00:21:30.320 --> 00:21:33.800
+ A comment I might do--
+
+00:21:33.800 --> 00:21:35.400
+ I'm just giving you a little heads up.
+
+00:21:35.400 --> 00:21:38.640
+ I might need to go help at some point of a dev.
+
+00:21:38.640 --> 00:21:43.120
+ So if I need to do so, I will let you know right now
+
+00:21:43.120 --> 00:21:44.280
+ inside the BBB room.
+
+00:21:44.280 --> 00:21:46.160
+ And you'll be on your own to manage the chat.
+
+00:21:46.160 --> 00:21:47.960
+ And you can just talk backstage to us
+
+00:21:47.960 --> 00:21:50.240
+ to manage what we do with the stream, OK?
+
+00:21:50.240 --> 00:21:52.160
+ Yep, that should be no problem at all.
+
+00:21:52.160 --> 00:21:53.760
+ I've got my pad up now.
+
+00:21:53.760 --> 00:21:55.160
+ Thank you, Chancellor.
+
+00:21:55.160 --> 00:21:58.040
+ And I'm sorry about butchering your name there.
+
+00:21:58.040 --> 00:22:03.360
+ And yep, I've got my chat open.
+
+00:22:03.360 --> 00:22:06.400
+ And I think I'm pretty well set to self-manage.
+
+00:22:06.400 --> 00:22:07.640
+ Oh, I don't have a camera on.
+
+00:22:07.640 --> 00:22:09.360
+ So you can't see me giving you the thumbs up.
+
+00:22:09.360 --> 00:22:09.860
+ OK, good.
+
+00:22:09.860 --> 00:22:16.000
+ All right, so let's just walk through,
+
+00:22:16.000 --> 00:22:18.400
+ because it's sort of an interesting code.
+
+00:22:18.400 --> 00:22:20.560
+ Let's just take a look real quick
+
+00:22:20.560 --> 00:22:24.720
+ at how we generated our e-list here,
+
+00:22:24.720 --> 00:22:26.520
+ because it is--
+
+00:22:26.520 --> 00:22:27.640
+ there we go.
+
+00:22:27.640 --> 00:22:29.240
+ It is a little bit interesting.
+
+00:22:29.240 --> 00:22:32.040
+ So here is the method.
+
+00:22:32.040 --> 00:22:34.080
+ So I didn't get into detail on this.
+
+00:22:34.080 --> 00:22:37.680
+ But there's an ES5 class that represents an org mode
+
+00:22:37.680 --> 00:22:38.920
+ document.
+
+00:22:38.920 --> 00:22:42.260
+ It has the static debug property that, as you might imagine
+
+00:22:42.260 --> 00:22:42.400
+,
+
+00:22:42.400 --> 00:22:45.480
+ can be overridden by that debug setting
+
+00:22:45.480 --> 00:22:48.440
+ we looked at in the defaults.
+
+00:22:48.440 --> 00:22:51.440
+ We also have a static variable that--
+
+00:22:51.440 --> 00:22:57.440
+ a static property that does nothing more than getting
+
+00:22:57.440 --> 00:23:00.360
+ the path to emacs out of those defaults.
+
+00:23:00.360 --> 00:23:02.120
+ Similarly, we have a class method
+
+00:23:02.120 --> 00:23:09.520
+ to spawn out an emacs, as I mentioned, in batch mode,
+
+00:23:09.520 --> 00:23:12.720
+ eval-ing some arbitrary list that's passed in.
+
+00:23:12.720 --> 00:23:20.480
+ All right, so the type--
+
+00:23:20.480 --> 00:23:23.080
+ this is where things start to get interesting.
+
+00:23:23.080 --> 00:23:26.480
+ So this is an implementation detail,
+
+00:23:26.480 --> 00:23:30.040
+ but-- that it's written as a static method.
+
+00:23:30.040 --> 00:23:32.160
+ But essentially, what's going on here
+
+00:23:32.160 --> 00:23:34.840
+ is looking up from that type list
+
+00:23:34.840 --> 00:23:37.480
+ to try to find a type that's passed in,
+
+00:23:37.480 --> 00:23:41.240
+ and that's returning one of these blocks.
+
+00:23:41.240 --> 00:23:44.800
+ Let's say I requested HTML, which would be the default.
+
+00:23:44.800 --> 00:23:48.760
+ Then I'm going to get this set of properties back.
+
+00:23:50.760 --> 00:23:50.760
+
+
+00:23:50.760 --> 00:23:51.260
+ All right.
+
+00:23:51.260 --> 00:24:04.200
+ Essentially, this program generates a program
+
+00:24:04.200 --> 00:24:10.840
+ or a little block of executable elisp.
+
+00:24:10.840 --> 00:24:15.920
+ However, in some cases, where if the load path has
+
+00:24:15.920 --> 00:24:20.920
+ been customized in that type block,
+
+00:24:20.920 --> 00:24:25.000
+ or I think that's the only case I supported.
+
+00:24:25.000 --> 00:24:28.960
+ There was another complexity I removed.
+
+00:24:28.960 --> 00:24:32.000
+ So in that case, then I can simply
+
+00:24:32.000 --> 00:24:33.560
+ replace that program with a let.
+
+00:24:33.560 --> 00:24:41.680
+ Either way, I'm going to have everything I generate
+
+00:24:41.680 --> 00:24:45.840
+ be encapsulated in a single block.
+
+00:24:45.840 --> 00:24:49.240
+ The-- then I'm calling that format list process
+
+00:24:49.240 --> 00:24:52.760
+ that we talked about, appending to that--
+
+00:24:52.760 --> 00:25:01.680
+ or inserting into, you could say, the outer scope.
+
+00:25:01.680 --> 00:25:05.000
+ And we start by finding the file.
+
+00:25:05.000 --> 00:25:11.400
+ We then load any libraries that might be needed.
+
+00:25:11.400 --> 00:25:13.520
+ In some cases, the type might not
+
+00:25:13.520 --> 00:25:15.160
+ have any external libraries.
+
+00:25:15.160 --> 00:25:18.440
+ So we just-- so that's a no op.
+
+00:25:18.440 --> 00:25:24.120
+ And then finally, we're going to execute
+
+00:25:24.120 --> 00:25:27.160
+ that logic I mentioned before about selecting
+
+00:25:27.160 --> 00:25:30.160
+ either the default or export to file,
+
+00:25:30.160 --> 00:25:36.200
+ or else whatever elisp we've staged for exporting
+
+00:25:36.200 --> 00:25:38.160
+ that particular file type.
+
+00:25:38.160 --> 00:25:41.480
+ And again, in the case of PDF, there's
+
+00:25:41.480 --> 00:25:46.240
+ a special function that's used to trigger that export.
+
+00:25:46.240 --> 00:25:49.160
+ Or you may be aware that that's a little more complicated.
+
+00:25:49.160 --> 00:25:50.840
+ There's intermediate forms there.
+
+00:25:50.840 --> 00:25:56.760
+ All right.
+
+00:25:56.760 --> 00:26:01.320
+ So just reminding myself if there's anything else
+
+00:26:01.320 --> 00:26:03.760
+ I have to cover on background.
+
+00:26:03.760 --> 00:26:07.440
+ And I think that pretty well covers the basics.
+
+00:26:07.440 --> 00:26:09.880
+ All right, let's look at that source block execute.
+
+00:26:09.880 --> 00:26:14.600
+ This is the other use of the format list function.
+
+00:26:14.600 --> 00:26:16.800
+ So here, rather than looking at the type
+
+00:26:16.800 --> 00:26:24.720
+ and passing that through our org export method,
+
+00:26:24.720 --> 00:26:29.080
+ and then that type is used to get the list
+
+00:26:29.080 --> 00:26:30.840
+ that we want to create.
+
+00:26:30.840 --> 00:26:37.600
+ In the case of source block execute,
+
+00:26:37.600 --> 00:26:40.520
+ we're kind of rolling it a lot more by hand.
+
+00:26:40.520 --> 00:26:43.920
+ So this gives us a good chance to sort of unwind
+
+00:26:43.920 --> 00:26:49.600
+ how that list looks when it's staged as JavaScript data.
+
+00:26:49.600 --> 00:26:52.760
+ So here again, I wrap everything in a progon.
+
+00:26:52.760 --> 00:26:58.480
+ I start by preventing an interactive prompt
+
+00:26:58.480 --> 00:27:01.240
+ for the Babel execution.
+
+00:27:01.240 --> 00:27:04.960
+ And then we load languages.
+
+00:27:04.960 --> 00:27:12.240
+ This relates to another piece of our configuration
+
+00:27:12.240 --> 00:27:17.600
+ where we've specified a set of languages
+
+00:27:17.600 --> 00:27:19.920
+ that it's OK to execute.
+
+00:27:19.920 --> 00:27:24.120
+ So if that type isn't in this list,
+
+00:27:24.120 --> 00:27:28.800
+ then we won't be able to execute it in line
+
+00:27:28.800 --> 00:27:32.720
+ through our trivial little web server.
+
+00:27:32.720 --> 00:27:33.640
+ All right.
+
+00:27:33.640 --> 00:27:40.600
+ With that done, then, loading the selected language,
+
+00:27:40.600 --> 00:27:43.960
+ we then once again open the file.
+
+00:27:43.960 --> 00:27:46.360
+ And we're-- whoops.
+
+00:27:46.360 --> 00:27:51.800
+ Let bind a return value, which is
+
+00:27:51.800 --> 00:27:55.840
+ calculated by using org source block execute on the name
+
+00:27:55.840 --> 00:27:58.040
+ of the block that's given.
+
+00:27:58.040 --> 00:28:05.160
+ And then we use a temp buffer to write that out
+
+00:28:05.160 --> 00:28:06.640
+ to a temporary file.
+
+00:28:06.640 --> 00:28:08.440
+ This is actually a little clumsy,
+
+00:28:08.440 --> 00:28:12.720
+ but I haven't put the effort in to have this written out
+
+00:28:12.720 --> 00:28:17.480
+ to the standard output cleanly instead of using a temp file
+
+00:28:17.480 --> 00:28:17.840
+.
+
+00:28:17.840 --> 00:28:20.480
+ So under-- this is another example of where it may not
+
+00:28:20.480 --> 00:28:22.520
+ be production-- well, it definitely
+
+00:28:22.520 --> 00:28:27.680
+ is not production-worthy code in that under heavy load,
+
+00:28:27.680 --> 00:28:30.860
+ this would certainly break with collisions on the Babel
+
+00:28:30.860 --> 00:28:32.040
+ file,
+
+00:28:32.040 --> 00:28:34.120
+ the name of the Babel file.
+
+00:28:34.120 --> 00:28:37.480
+ In any case, once we've staged up our ELISP, which is--
+
+00:28:37.480 --> 00:28:42.560
+ this is basically variable interpolation,
+
+00:28:42.560 --> 00:28:47.680
+ then we just call emacs on that.
+
+00:28:47.680 --> 00:28:49.720
+ And if we look down to where that's called,
+
+00:28:49.720 --> 00:28:54.640
+ you can see that the org Babel file name calculated here.
+
+00:28:54.640 --> 00:28:58.040
+ [AUDIO OUT]
+
+00:28:58.040 --> 00:29:15.000
+ Is there a problem?
+
+00:29:15.000 --> 00:29:15.760
+ No, I'm fine.
+
+00:29:15.760 --> 00:29:18.000
+ I'm just lost in my code.
+
+00:29:18.000 --> 00:29:19.040
+ OK, cool.
+
+00:29:19.040 --> 00:29:21.160
+ Oh, means, oh, I need to intervene.
+
+00:29:21.160 --> 00:29:22.240
+ What is going on?
+
+00:29:22.240 --> 00:29:23.200
+ Carry on, please.
+
+00:29:23.200 --> 00:29:24.120
+ No, I'm fine, Leo.
+
+00:29:24.120 --> 00:29:25.480
+ Thank you.
+
+00:29:25.480 --> 00:29:27.280
+ All right, so then--
+
+00:29:27.280 --> 00:29:28.680
+ so you can see we get--
+
+00:29:28.680 --> 00:29:36.720
+ we send the Babel file here, which
+
+00:29:36.720 --> 00:29:41.640
+ is calculated manually.
+
+00:29:41.640 --> 00:29:45.440
+ A bit sloppy there, since I have essentially the same--
+
+00:29:45.440 --> 00:29:47.000
+ I have two different places where
+
+00:29:47.000 --> 00:29:52.480
+ I'm calculating the org doc file in two different ways.
+
+00:29:52.480 --> 00:29:54.720
+ Have I encouraged you to write your own yet?
+
+00:29:54.720 --> 00:29:56.440
+ Or send patches.
+
+00:29:56.440 --> 00:30:01.240
+ All right, so that's pretty much the nuts and bolts
+
+00:30:01.240 --> 00:30:02.400
+ of this program.
+
+00:30:02.400 --> 00:30:06.720
+ Let's go back to just seeing if we can't make it run.
+
+00:30:22.120 --> 00:30:22.620
+ All right.
+
+00:30:22.620 --> 00:30:45.880
+ All right, well, I apologize for not
+
+00:30:45.880 --> 00:30:49.560
+ having taken the time to stage my demo this morning.
+
+00:30:49.560 --> 00:30:52.680
+ I'm going to try to make it better for you.
+
+00:30:52.680 --> 00:30:59.920
+ But apparently, it's going to be non-trivial
+
+00:30:59.920 --> 00:31:04.520
+ to make the program work.
+
+00:31:04.520 --> 00:31:07.160
+ Let's just-- before I completely give up,
+
+00:31:07.160 --> 00:31:13.320
+ let's go ahead and try our Babel execute.
+
+00:31:13.320 --> 00:31:14.800
+ And that, too, is failing.
+
+00:31:14.800 --> 00:31:18.040
+ So there's something unhappy in my local world.
+
+00:31:18.040 --> 00:31:19.040
+ There it goes.
+
+00:31:19.040 --> 00:31:26.600
+ But in any case, let's go ahead and just take a look at
+
+00:31:26.600 --> 00:31:28.000
+ that.
+
+00:31:28.000 --> 00:31:30.640
+ Let's see.
+
+00:31:30.640 --> 00:31:31.600
+ Control Enter.
+
+00:31:31.600 --> 00:31:40.200
+ Let's take a look at that generated ELS
+
+00:31:40.200 --> 00:31:42.840
+ and compare it to-- whoa--
+
+00:31:42.840 --> 00:31:44.000
+ and compare it to--
+
+00:31:44.000 --> 00:31:52.400
+ I'm just going to format this manually,
+
+00:31:52.400 --> 00:31:56.000
+ because I've forgotten my key bindings to auto-format it.
+
+00:31:56.000 --> 00:32:02.240
+ There we go.
+
+00:32:02.240 --> 00:32:07.960
+ All right.
+
+00:32:07.960 --> 00:32:13.120
+ So now we can see, as promised, there's really
+
+00:32:13.120 --> 00:32:16.200
+ nothing going on here other than the interpolation
+
+00:32:16.200 --> 00:32:18.640
+ of the variables in.
+
+00:32:18.640 --> 00:32:24.360
+ We're inserting-- we're using an insert and write file
+
+00:32:24.360 --> 00:32:27.800
+ method, which is, again, rather sloppy,
+
+00:32:27.800 --> 00:32:32.040
+ to generate the text file.
+
+00:32:32.040 --> 00:32:32.880
+ All right.
+
+00:32:32.880 --> 00:32:34.760
+ Let's come back to our documentation
+
+00:32:34.760 --> 00:32:39.760
+ and see if we can put a bow on the project.
+
+00:32:39.760 --> 00:32:43.760
+ So I hope I've convinced you that this was actually
+
+00:32:43.760 --> 00:32:45.480
+ rather easy to do.
+
+00:32:45.480 --> 00:32:52.440
+ The entirety of my index.js file is 262 lines,
+
+00:32:52.440 --> 00:32:59.810
+ and that includes a good 40 of whitespace and configuration
+
+00:32:59.810 --> 00:33:00.280
+.
+
+00:33:03.760 --> 00:33:06.840
+ It has only one dependency, the Express, which
+
+00:33:06.840 --> 00:33:08.240
+ really builds the web server.
+
+00:33:08.240 --> 00:33:11.520
+ Any language you'd rather implement this in
+
+00:33:11.520 --> 00:33:14.120
+ will have a similar capability for building
+
+00:33:14.120 --> 00:33:16.280
+ some type of trivial web server.
+
+00:33:16.280 --> 00:33:18.400
+ And I think you may find--
+
+00:33:18.400 --> 00:33:22.640
+ I certainly found that a large portion of the code base
+
+00:33:22.640 --> 00:33:28.080
+ is really making the errors meaningful,
+
+00:33:28.080 --> 00:33:32.420
+ in that, in some cases, sending an appropriate HTTP status
+
+00:33:32.420 --> 00:33:34.360
+ based on what happened.
+
+00:33:34.360 --> 00:33:41.160
+ In other cases-- let's see if I've got an explicit throw
+
+00:33:41.160 --> 00:33:41.520
+ left
+
+00:33:41.520 --> 00:33:42.640
+ in here--
+
+00:33:42.640 --> 00:33:45.840
+ in other cases, just trapping different types
+
+00:33:45.840 --> 00:33:47.440
+ of failure conditions.
+
+00:33:47.440 --> 00:33:54.000
+ I'm going to look at my pad, and I do see a question here.
+
+00:33:54.000 --> 00:33:55.120
+ So let me jump in here.
+
+00:33:55.120 --> 00:33:58.880
+ [VIDEO PLAYBACK]
+
+00:33:58.880 --> 00:34:00.640
+ - Cohen, just to make sure, are you switching to Q&A?
+
+00:34:00.640 --> 00:34:02.380
+ Are you finished with your presentation?
+
+00:34:02.380 --> 00:34:05.260
+ - Well, as I said, I'm happy to take Q&A throughout.
+
+00:34:05.260 --> 00:34:08.420
+ But yes, let's say yes to that.
+
+00:34:08.420 --> 00:34:10.900
+ - OK, so Cohen, what I'm going to need to do now--
+
+00:34:10.900 --> 00:34:12.140
+ you are in charge of the room.
+
+00:34:12.140 --> 00:34:14.060
+ We are going to open up the room so
+
+00:34:14.060 --> 00:34:17.220
+ that if people have questions watching right now on Gen,
+
+00:34:17.220 --> 00:34:18.700
+ feel free to come in.
+
+00:34:18.700 --> 00:34:22.780
+ And there was something else I needed to say.
+
+00:34:22.780 --> 00:34:24.620
+ Yes, Cohen, if there's any problem,
+
+00:34:24.620 --> 00:34:25.700
+ whisper to us on Mumble.
+
+00:34:25.700 --> 00:34:27.500
+ So you might want to unmute Mumble
+
+00:34:27.500 --> 00:34:29.620
+ and be able to listen to us over there.
+
+00:34:29.620 --> 00:34:32.480
+ - I can't do that, Leo.
+
+00:34:32.480 --> 00:34:36.440
+ If I unmute, Mumble is going to bleed through.
+
+00:34:36.440 --> 00:34:36.960
+ - OK, sure.
+
+00:34:36.960 --> 00:34:41.160
+ Well, if you have any problem, type in emacsconf-org.ch
+
+00:34:41.160 --> 00:34:41.160
+annel,
+
+00:34:41.160 --> 00:34:42.520
+ and we'll be with you, OK?
+
+00:34:42.520 --> 00:34:43.520
+ - Or I'll PM somebody.
+
+00:34:43.520 --> 00:34:45.760
+ But I don't anticipate having any problems.
+
+00:34:45.760 --> 00:34:49.040
+ I'll put something in org when I run out of steam here.
+
+00:34:49.040 --> 00:34:50.400
+ How's that?
+
+00:34:50.400 --> 00:34:51.160
+ - Amazing, cool.
+
+00:34:51.160 --> 00:34:53.320
+ So I will have to leave the room, though.
+
+00:34:53.320 --> 00:34:56.800
+ I'm leaving the recording going so that we have your Q&A.
+
+00:34:56.800 --> 00:34:58.080
+ And whenever you're available--
+
+00:34:58.080 --> 00:35:02.180
+ - I'll shut off the recording when I close the room.
+
+00:35:02.180 --> 00:35:02.980
+ - OK, great.
+
+00:35:02.980 --> 00:35:04.460
+ Good luck, Cohen.
+
+00:35:04.460 --> 00:35:06.500
+ - Thank you.
+
+00:35:06.500 --> 00:35:09.780
+ All right, and if you're still with me, well, thanks.
+
+00:35:09.780 --> 00:35:13.620
+ I appreciate that.
+
+00:35:13.620 --> 00:35:16.740
+ I did offer to be opposite RMS.
+
+00:35:16.740 --> 00:35:20.060
+ And I'm in no way offended if people do want to jump over,
+
+00:35:20.060 --> 00:35:23.540
+ especially as that starts to shift over to Q&A.
+
+00:35:23.540 --> 00:35:26.980
+ I'm taking Leo's leaving as a pretty good indication
+
+00:35:26.980 --> 00:35:28.780
+ that that's happening now-ish.
+
+00:35:28.780 --> 00:35:34.750
+ So I totally understand if folks are more excited to do
+
+00:35:34.750 --> 00:35:35.020
+ that.
+
+00:35:35.020 --> 00:35:37.940
+ Meanwhile, let me just jump over to the question
+
+00:35:37.940 --> 00:35:38.660
+ that I received.
+
+00:35:38.660 --> 00:35:46.460
+ I'll show the pad here so that I save myself
+
+00:35:46.460 --> 00:35:47.860
+ reading the question out.
+
+00:35:47.860 --> 00:35:48.940
+ But I'll paraphrase it.
+
+00:35:48.940 --> 00:35:52.660
+ Why am I not running the web server in emacs?
+
+00:35:52.660 --> 00:35:54.380
+ That would be a great way to do it.
+
+00:35:54.380 --> 00:35:57.100
+ I chose to build it in Node.js because that
+
+00:35:57.100 --> 00:35:58.460
+ was trivially easy for me.
+
+00:36:22.140 --> 00:36:24.780
+ And then finally, am I using org info.js?
+
+00:36:24.780 --> 00:36:27.540
+ No, I learned about this essentially at this conference.
+
+00:36:27.540 --> 00:36:30.660
+ So that's something I'll be learning more about.
+
+00:36:30.660 --> 00:36:32.460
+ And it could well influence this project.
+
+00:36:32.460 --> 00:36:34.900
+ [TYPING]
+
+00:36:34.900 --> 00:36:56.180
+ All right, and thanks for the questions.
+
+00:36:59.020 --> 00:37:02.820
+ All right, I'm going to slow my roll just a little bit here
+
+00:37:02.820 --> 00:37:06.980
+ because I think I kind of have all the time in the world.
+
+00:37:06.980 --> 00:37:11.540
+ I will be wrapping up within about 15 or 20 minutes
+
+00:37:11.540 --> 00:37:15.620
+ at the latest just to avoid stressing out
+
+00:37:15.620 --> 00:37:19.100
+ my fellow organizers, especially Leo and Sasha that
+
+00:37:19.100 --> 00:37:22.260
+ have the bulk of the heavy lifting this year.
+
+00:37:22.260 --> 00:37:26.820
+ And amen, and really, thanks all to everybody.
+
+00:37:26.820 --> 00:37:29.540
+ God, the nicest part of doing my own talk
+
+00:37:29.540 --> 00:37:31.980
+ is that I get to say that.
+
+00:37:31.980 --> 00:37:35.460
+ It's just so much fun to contribute to emacsConf.
+
+00:37:35.460 --> 00:37:38.740
+ And if you're at all interested, there's
+
+00:37:38.740 --> 00:37:43.100
+ plenty of completely backstage, behind the curtain role.
+
+00:37:43.100 --> 00:37:45.340
+ Behind the curtain roles doesn't mean
+
+00:37:45.340 --> 00:37:49.020
+ you have to be somebody that likes talking or being
+
+00:37:49.020 --> 00:37:50.060
+ on webcam.
+
+00:37:50.060 --> 00:37:52.300
+ Sorry that my camera isn't working this year.
+
+00:37:52.300 --> 00:37:53.980
+ I spent quite a while fussing with that
+
+00:37:53.980 --> 00:37:56.740
+ and lost all my time to get my prereq working.
+
+00:37:56.740 --> 00:38:10.140
+ All right, so trying to think where I can take us
+
+00:38:10.140 --> 00:38:11.540
+ without my demo working.
+
+00:38:11.540 --> 00:38:14.540
+ I was really hoping to show the org Babel piece.
+
+00:38:14.540 --> 00:38:15.580
+ That's really fun.
+
+00:38:15.580 --> 00:38:20.420
+ So let me just mention briefly how I'm using this at work.
+
+00:38:20.420 --> 00:38:25.980
+ So at work, I'll have some type of org document.
+
+00:38:25.980 --> 00:38:27.700
+ And usually, it's a project.
+
+00:38:27.700 --> 00:38:32.900
+ So the title of the document is My Project.
+
+00:38:32.900 --> 00:38:37.820
+ And then I'll have a requirements section.
+
+00:38:37.820 --> 00:38:43.540
+ And I'll have a meeting notes section.
+
+00:38:43.540 --> 00:38:44.980
+ That's probably the key thing.
+
+00:38:44.980 --> 00:38:49.540
+ And then as the project goes on, I'll start having--
+
+00:38:49.540 --> 00:38:50.740
+ I'm a solutions architect.
+
+00:38:50.740 --> 00:38:55.420
+ So my job is formalizing design in large part.
+
+00:38:55.420 --> 00:39:01.740
+ So then I'll have a design documents section.
+
+00:39:01.740 --> 00:39:05.020
+ And this is where I'll be doing a lot of my work.
+
+00:39:05.020 --> 00:39:07.220
+ So I'll start out saying--
+
+00:39:07.220 --> 00:39:26.620
+ [AUDIO OUT]
+
+00:39:26.620 --> 00:39:29.340
+ And maybe Bob is a subject matter expert
+
+00:39:29.340 --> 00:39:32.460
+ whose buy-in I need to have on how we're going
+
+00:39:32.460 --> 00:39:34.820
+ to do the high-level design.
+
+00:39:34.820 --> 00:39:38.470
+ Maybe a lead engineer or a dev manager or something like
+
+00:39:38.470 --> 00:39:39.460
+ that.
+
+00:39:39.460 --> 00:39:43.580
+ All right, as my work goes on, then this
+
+00:39:43.580 --> 00:39:47.620
+ will start getting into more detail.
+
+00:39:47.620 --> 00:40:16.620
+ [AUDIO OUT]
+
+00:40:16.620 --> 00:40:18.660
+ And things of this nature.
+
+00:40:18.660 --> 00:40:20.180
+ As things get further and further,
+
+00:40:20.180 --> 00:40:21.740
+ I'll actually have documentation
+
+00:40:21.740 --> 00:40:22.820
+ that I'm adding in here.
+
+00:40:22.820 --> 00:40:28.900
+ Oh, I see.
+
+00:40:28.900 --> 00:40:29.740
+ It's a big mess.
+
+00:40:29.740 --> 00:40:32.140
+ All right, well, we'll just reuse this.
+
+00:40:32.140 --> 00:40:40.380
+ So I can insert those all in line.
+
+00:40:40.380 --> 00:40:44.140
+ And now for the fun part, let's see if the most trivial
+
+00:40:44.140 --> 00:40:44.460
+ case
+
+00:40:44.460 --> 00:40:45.460
+ is working here.
+
+00:40:47.460 --> 00:40:47.460
+
+
+00:40:47.460 --> 00:40:49.940
+ [CLICK]
+
+00:40:49.940 --> 00:40:51.180
+ No.
+
+00:40:51.180 --> 00:40:52.900
+ All right, completely broken.
+
+00:40:52.900 --> 00:40:57.260
+ Let me drag.
+
+00:40:57.260 --> 00:41:05.180
+ All right, well, apologies again for the poor quality
+
+00:41:05.180 --> 00:41:06.260
+ of my demo today.
+
+00:41:06.260 --> 00:41:13.900
+ And let me just look real quick at my Etherpad once more.
+
+00:41:13.900 --> 00:41:16.820
+ And I'll glance at BBB to see if there's anybody
+
+00:41:16.820 --> 00:41:18.140
+ jumping in with questions.
+
+00:41:18.140 --> 00:41:23.740
+ And then I'll go back to IRC and look for questions there.
+
+00:41:23.740 --> 00:41:33.180
+ OK, and I don't see any additional questions on the pad.
+
+00:41:33.180 --> 00:41:35.780
+ I'm just going to scan IRC real quick.
+
+00:41:35.780 --> 00:41:42.460
+ I suspect that the TreeSitter comment isn't for me.
+
+00:41:42.460 --> 00:41:44.900
+ [CHUCKLES]
+
+00:41:44.900 --> 00:41:56.620
+ All right, and I'm not seeing a lot of questions there.
+
+00:41:56.620 --> 00:42:04.340
+ So I'm just going to vamp for just a minute or two.
+
+00:42:04.340 --> 00:42:07.980
+ As I mentioned, I'm a conference volunteer.
+
+00:42:07.980 --> 00:42:09.700
+ This is my third year volunteering
+
+00:42:09.700 --> 00:42:11.940
+ with the conference.
+
+00:42:11.940 --> 00:42:15.140
+ And probably if you take one thing away from my talk,
+
+00:42:15.140 --> 00:42:17.740
+ it should be I really like volunteering
+
+00:42:17.740 --> 00:42:18.500
+ for the conference.
+
+00:42:18.500 --> 00:42:19.900
+ It's fun.
+
+00:42:19.900 --> 00:42:23.500
+ It makes me feel sort of close to the pulse.
+
+00:42:23.500 --> 00:42:26.660
+ And it gives me a chance to just interact
+
+00:42:26.660 --> 00:42:29.260
+ with people that have very different perspectives
+
+00:42:29.260 --> 00:42:32.740
+ on Emacs, which is something that I really value a lot.
+
+00:42:32.740 --> 00:42:40.220
+ Emacs, like anything else sort of in the internet world,
+
+00:42:40.220 --> 00:42:42.940
+ has a real echo chamber factor.
+
+00:42:42.940 --> 00:42:47.660
+ If you do or don't use Package, you probably
+
+00:42:47.660 --> 00:42:49.380
+ interact with a lot of people that
+
+00:42:49.380 --> 00:42:53.500
+ feel the same way about that.
+
+00:42:53.500 --> 00:42:57.420
+ And so I really recommend volunteering for EmacsConf
+
+00:42:57.420 --> 00:43:01.340
+ as a way to sort of mix it up and get
+
+00:43:01.340 --> 00:43:05.250
+ to know people that may not use Emacs the same way that you
+
+00:43:05.250 --> 00:43:05.540
+ do.
+
+00:43:08.380 --> 00:43:10.420
+ Or perhaps more on topic, though,
+
+00:43:10.420 --> 00:43:14.300
+ the log line for this talk is it's really quite easy
+
+00:43:14.300 --> 00:43:20.760
+ to build a program that uses Emacs in a pipeline capability
+
+00:43:20.760 --> 00:43:20.980
+.
+
+00:43:20.980 --> 00:43:23.780
+ I think there's a ton of opportunity in this space.
+
+00:43:23.780 --> 00:43:27.700
+ This particular example is just a trivial web server
+
+00:43:27.700 --> 00:43:29.540
+ written
+
+00:43:29.540 --> 00:43:30.780
+ using Node.js.
+
+00:43:30.780 --> 00:43:39.660
+ But as was pointed out, we could have used LNode as a web
+
+00:43:39.660 --> 00:43:40.060
+ server
+
+00:43:40.060 --> 00:43:44.060
+ and done the entire thing within Emacs Lisp.
+
+00:43:44.060 --> 00:43:49.980
+ Or really, almost any technology would get us this
+
+00:43:49.980 --> 00:43:52.900
+ capability.
+
+00:43:52.900 --> 00:43:54.660
+ From an implementation standpoint,
+
+00:43:54.660 --> 00:43:59.270
+ I had a lot of fun building this trivial little e-lisp pars
+
+00:43:59.270 --> 00:43:59.580
+er.
+
+00:43:59.580 --> 00:44:03.220
+ And I'm rather pleased with the fact
+
+00:44:03.220 --> 00:44:07.340
+ that the entirety of that--
+
+00:44:07.340 --> 00:44:14.180
+ the entire algorithm for turning JavaScript or JSON data,
+
+00:44:14.180 --> 00:44:20.420
+ we could say, into e-lisp is really a one-liner.
+
+00:44:20.420 --> 00:44:25.820
+ Albeit a nasty one-liner, that was pretty cool
+
+00:44:25.820 --> 00:44:28.180
+ to discover how simple that was.
+
+00:44:28.180 --> 00:44:31.220
+ So in my mind, that opens up a lot of possibility.
+
+00:44:31.220 --> 00:44:32.940
+ If it's this easy in JavaScript, I
+
+00:44:32.940 --> 00:44:35.700
+ wouldn't expect it to be hard, any more difficult
+
+00:44:35.700 --> 00:44:36.860
+ in your favorite language.
+
+00:44:36.860 --> 00:44:41.140
+ Glance one more time to see if there
+
+00:44:41.140 --> 00:44:42.940
+ happen to be any other questions.
+
+00:44:42.940 --> 00:44:47.300
+ And not seeing any, I'm going to go ahead and start
+
+00:44:47.300 --> 00:44:49.500
+ wrapping up my chat now.
+
+00:44:49.500 --> 00:44:51.620
+ It will take me a couple of minutes to do that.
+
+00:44:51.620 --> 00:44:54.580
+ So if you do have any other questions that you
+
+00:44:54.580 --> 00:44:56.460
+ want to drop into the pad or any comments,
+
+00:44:56.460 --> 00:44:59.740
+ you're more than welcome to hit me with those
+
+00:44:59.740 --> 00:45:03.820
+ as I coordinate closing this chat, this talk,
+
+00:45:03.820 --> 00:45:06.100
+ with the organizer team.
+
+00:45:06.100 --> 00:45:09.580
+ [AUDIO OUT]
+
+00:45:09.580 --> 00:45:12.580
+ [AUDIO OUT]
+
+00:45:14.580 --> 00:45:14.580
+
+
+00:45:14.580 --> 00:45:17.580
+ [AUDIO OUT]
+
+00:45:17.580 --> 00:45:20.580
+ [AUDIO OUT]
+
+00:45:22.580 --> 00:45:22.580
+
+
+00:45:22.580 --> 00:45:25.580
+ [AUDIO OUT]
+
+00:45:25.580 --> 00:45:33.580
+ [AUDIO OUT]
+
+00:45:33.580 --> 00:45:44.580
+ [AUDIO OUT]
+
+00:45:44.580 --> 00:45:47.620
+ [AUDIO OUT]
+
+00:45:47.620 --> 00:45:50.620
+ [AUDIO OUT]
+
+00:45:50.620 --> 00:45:53.620
+ [AUDIO OUT]
+
+00:45:53.620 --> 00:45:56.620
+ [AUDIO OUT]
+
+00:45:56.620 --> 00:45:59.620
+ [AUDIO OUT]
+
+00:46:01.620 --> 00:46:01.620
+
+
+00:46:01.620 --> 00:46:04.620
+ [AUDIO OUT]
+
diff --git a/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt
new file mode 100644
index 00000000..b1835675
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main--chapters.vtt
@@ -0,0 +1,80 @@
+WEBVTT
+
+
+00:00:36.000 --> 00:01:31.080
+Introduction
+
+00:01:31.080 --> 00:02:01.880
+What is orgvm?
+
+00:02:01.880 --> 00:02:49.560
+Nodejs
+
+00:02:49.560 --> 00:03:38.320
+The itch I was trying to scratch
+
+00:03:38.320 --> 00:05:29.760
+Demo
+
+00:05:29.760 --> 00:06:24.920
+Needs a relatively recent version of Emacs
+
+00:06:24.920 --> 00:08:13.520
+Usage patterns
+
+00:08:13.520 --> 00:09:09.160
+Emacs Lisp
+
+00:09:09.160 --> 00:10:38.720
+Variables
+
+00:10:38.720 --> 00:11:17.200
+Replace
+
+00:11:19.120 --> 00:13:06.480
+Getting into the code some more
+
+00:13:06.480 --> 00:13:37.320
+Generating Elisp
+
+00:13:37.320 --> 00:14:32.400
+Org blocks
+
+00:14:32.400 --> 00:16:43.000
+Building some Lisp
+
+00:16:43.000 --> 00:19:25.040
+How Elisp gets encoded
+
+00:19:25.040 --> 00:22:09.860
+How the export works
+
+00:22:09.860 --> 00:26:07.440
+Walking through the code
+
+00:26:07.440 --> 00:32:39.760
+Executing the source block
+
+00:32:39.760 --> 00:33:55.120
+Conclusion
+
+00:33:58.880 --> 00:35:48.940
+Questions and answers
+
+00:35:48.940 --> 00:35:58.460
+Why am I not running the web server in Emacs?
+
+00:36:22.140 --> 00:37:35.460
+Is this using org-info-js?
+
+00:37:35.460 --> 00:38:15.580
+EmacsConf
+
+00:38:15.580 --> 00:42:04.340
+How I'm using this at work
+
+00:42:04.340 --> 00:43:05.540
+Volunteering for EmacsConf
+
+00:43:08.380 --> 00:45:06.100
+It's easy to build a program that uses Emacs in the pipeline
diff --git a/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt
new file mode 100644
index 00000000..7ee7fca6
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgvm--orgvm-a-simple-http-server-for-org--corwin-brust--main.vtt
@@ -0,0 +1,2258 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:36.000 --> 00:00:42.480
+And so this little application--
+
+00:00:42.480 --> 00:00:42.503
+well, I'll skip that and just kind of
+
+00:00:42.504 --> 00:00:49.142
+jump right into my thesis for those of you
+
+00:00:49.143 --> 00:00:53.360
+that might be planning to duck out for the RMS talk,
+
+00:00:53.360 --> 00:00:55.520
+starting in a little bit.
+
+00:00:55.520 --> 00:00:55.545
+So essentially, my thesis here is really that
+
+00:00:55.546 --> 00:00:59.378
+the Emacs toolchain can easily be combined
+
+00:00:59.379 --> 00:01:08.793
+with other skills and used in kind of
+
+00:01:08.794 --> 00:01:13.280
+a Unix paradigm of having sort of different tools
+
+00:01:13.280 --> 00:01:14.960
+to do different steps.
+
+00:01:14.960 --> 00:01:17.760
+We might actually use the same tool
+
+00:01:17.760 --> 00:01:19.240
+to implement a couple of steps.
+
+00:01:19.240 --> 00:01:22.080
+But with that paradigm, each step
+
+00:01:22.080 --> 00:01:22.086
+is an individual item that can be sort of
+
+00:01:22.087 --> 00:01:26.400
+dropped in and replaced.
+
+00:01:26.400 --> 00:01:26.420
+So over the course of the talk,
+
+00:01:26.421 --> 00:01:31.080
+hopefully I'll come back to that thesis.
+
+NOTE What is orgvm?
+
+00:01:31.080 --> 00:01:31.086
+But I'll now jump back and start walking through
+
+00:01:31.087 --> 00:01:37.040
+what is orgvm?
+
+00:01:37.040 --> 00:01:39.560
+So this is a very simple proof of concept program.
+
+00:01:39.560 --> 00:01:39.586
+We'll just jump over to perhaps
+
+00:01:39.587 --> 00:01:45.520
+a prettier view of the source code for it.
+
+00:01:45.520 --> 00:01:49.200
+This is implemented-- oops.
+
+00:01:49.200 --> 00:01:53.160
+There's some cruft, I think, in my local.
+
+00:01:53.160 --> 00:01:56.560
+All right, so this config block at the top...
+
+00:01:56.560 --> 00:01:58.120
+And we'll be jumping back and forth
+
+00:01:58.120 --> 00:02:01.880
+between the code and the documentation.
+
+NOTE Nodejs
+
+00:02:01.880 --> 00:02:04.080
+So the first thing I want to point out
+
+00:02:04.080 --> 00:02:05.960
+is that this is written in Node.js,
+
+00:02:05.960 --> 00:02:08.600
+but I think you'll find it'd be pretty trivial to implement
+
+00:02:08.600 --> 00:02:10.840
+in any language.
+
+00:02:10.840 --> 00:02:13.960
+Certainly, you're more than welcome to use this.
+
+00:02:13.960 --> 00:02:17.920
+I'd be happy to accept your patches or feature requests
+
+00:02:17.920 --> 00:02:20.080
+and things like that.
+
+00:02:20.080 --> 00:02:21.680
+Of course, bug reports.
+
+00:02:21.680 --> 00:02:25.760
+But I'd also encourage others to roll their own.
+
+00:02:25.760 --> 00:02:28.760
+You might well come up with a different version of this
+
+00:02:28.760 --> 00:02:29.600
+that's even cooler.
+
+00:02:29.600 --> 00:02:32.160
+And we can learn from each other.
+
+00:02:32.160 --> 00:02:34.200
+If you heard one of my talks before,
+
+00:02:34.200 --> 00:02:36.200
+you probably recognize a common theme.
+
+00:02:36.200 --> 00:02:40.320
+I'm a big fan of head-first development
+
+00:02:40.320 --> 00:02:40.336
+as a way to get invested in both
+
+00:02:40.337 --> 00:02:44.120
+the tool chain and a culture.
+
+00:02:44.120 --> 00:02:49.560
+All right, so let's come back to orgvm.
+
+NOTE The itch I was trying to scratch
+
+00:02:49.560 --> 00:02:49.586
+First of all, we'll start with
+
+00:02:49.587 --> 00:02:52.840
+the itch I was trying to scratch.
+
+00:02:52.840 --> 00:02:58.240
+I wanted to be able to quickly use a web browser
+
+00:02:58.240 --> 00:03:00.680
+to browse my Org documents.
+
+00:03:00.680 --> 00:03:01.420
+It's particularly handy when the documents
+
+00:03:01.421 --> 00:03:05.640
+are full of cross links to each other.
+
+00:03:05.640 --> 00:03:10.080
+That meant I wanted to automatically export,
+
+00:03:10.080 --> 00:03:12.280
+particularly to HTML.
+
+00:03:12.280 --> 00:03:17.280
+But it made sense for me to include Markdown, PDF,
+
+00:03:17.280 --> 00:03:18.880
+or whatever format I want.
+
+00:03:18.880 --> 00:03:22.760
+Because many times, I'm going to look at that file
+
+00:03:22.760 --> 00:03:29.480
+and then pop it into an email or upload it somewhere.
+
+00:03:29.480 --> 00:03:33.240
+And then finally, it should be, therefore,
+
+00:03:33.240 --> 00:03:33.753
+pretty easy to download the document
+
+00:03:33.754 --> 00:03:38.320
+rather than view it, once I'm done.
+
+NOTE Demo
+
+00:03:38.320 --> 00:03:42.200
+So let's just run a quick demo.
+
+00:03:42.200 --> 00:03:44.760
+You'll see I'm still a Windows user.
+
+00:03:44.760 --> 00:03:45.960
+Yeah, I'm working on it.
+
+00:03:45.960 --> 00:03:52.320
+So all right, first thing that we're going to do
+
+00:03:52.320 --> 00:03:53.320
+is fire up the program.
+
+00:03:53.320 --> 00:04:00.200
+Actually, for simplicity, let's just
+
+00:04:00.200 --> 00:04:01.760
+admit we live in a DOS world.
+
+00:04:01.760 --> 00:04:19.760
+And as you can see, there's not much to it
+
+00:04:19.760 --> 00:04:21.520
+to get the application running.
+
+00:04:22.680 --> 00:04:25.960
+So with that done, then, I can run out to my localhost.
+
+00:04:25.960 --> 00:04:36.780
+And we'll just start by plugging in the name of an Org file.
+
+00:04:37.560 --> 00:04:37.586
+So I've got a little Org file that I prepared
+
+00:04:37.587 --> 00:04:49.040
+that just kind of provides a proof of concept to this.
+
+00:04:49.040 --> 00:04:53.560
+And you can see, as imagined, we're automatically
+
+00:04:53.560 --> 00:04:54.640
+turning that Org file...
+
+00:04:54.640 --> 00:04:56.320
+Let's just take a quick look at it.
+
+00:04:56.320 --> 00:05:10.280
+And here's that file now.
+
+00:05:10.280 --> 00:05:11.960
+You can see, nothing up my sleeve.
+
+00:05:11.960 --> 00:05:11.961
+This is a very basic Org file
+
+00:05:11.962 --> 00:05:16.560
+that I use for testing this program.
+
+00:05:16.560 --> 00:05:17.640
+Images work.
+
+00:05:17.640 --> 00:05:21.836
+We've got some nicely syntax-highlighted code blocks
+
+00:05:21.837 --> 00:05:25.560
+in a couple different languages,
+
+00:05:25.560 --> 00:05:29.760
+and not really that much going on there.
+
+NOTE Needs a relatively recent version of Emacs
+
+00:05:29.760 --> 00:05:33.760
+All right, let's come back to the documentation.
+
+00:05:33.760 --> 00:05:36.680
+I pretty well covered this, I think.
+
+00:05:36.680 --> 00:05:39.720
+But you'll need a relatively recent version of Emacs.
+
+00:05:39.720 --> 00:05:43.640
+I haven't taken any pains to make this backward compatible.
+
+00:05:43.640 --> 00:05:46.000
+To be fair, I haven't tested it extensively.
+
+00:05:46.000 --> 00:05:50.320
+It may well work on Emacs 26 or older versions.
+
+00:05:50.320 --> 00:05:55.120
+I'm personally running 27.1 and 28,
+
+00:05:55.120 --> 00:05:57.080
+as well as recent builds of 29.
+
+00:05:57.080 --> 00:06:02.560
+There's some quick start instructions here,
+
+00:06:02.560 --> 00:06:03.900
+which I'm going to take as read.
+
+00:06:03.900 --> 00:06:08.600
+You probably saw the key element of this,
+
+00:06:08.601 --> 00:06:11.920
+which involves starting the program.
+
+00:06:11.920 --> 00:06:13.520
+You do-- I will call out Yale.
+
+00:06:13.520 --> 00:06:15.320
+If you're trying to play with this yourself,
+
+00:06:15.320 --> 00:06:20.080
+don't forget to run the npm install command.
+
+00:06:20.080 --> 00:06:20.086
+That'll bring in express.js,
+
+00:06:20.087 --> 00:06:24.920
+which the JavaScript we're about to look at is built on.
+
+NOTE Usage patterns
+
+00:06:24.920 --> 00:06:33.480
+So let's just take a look at the usage patterns real quick.
+
+00:06:33.480 --> 00:06:35.920
+To use this, we're simply giving the document name
+
+00:06:35.920 --> 00:06:42.760
+without the .org extension in whatever file path--
+
+00:06:42.760 --> 00:06:46.960
+or I'm sorry, whatever we've configured the server
+
+00:06:46.960 --> 00:06:50.800
+to run on, in this case, port 3000.
+
+00:06:50.800 --> 00:06:52.960
+I also want to call attention to the fact
+
+00:06:52.960 --> 00:06:55.880
+that nothing in this program protects you
+
+00:06:55.880 --> 00:06:57.240
+from damaging yourself.
+
+00:06:57.240 --> 00:07:00.560
+This isn't meant as a production capability.
+
+00:07:00.560 --> 00:07:00.586
+This is something that's used to publish
+
+00:07:00.587 --> 00:07:04.840
+your own note files
+
+00:07:04.840 --> 00:07:06.520
+and roll them out to yourself.
+
+00:07:06.520 --> 00:07:08.680
+That's something I'll definitely look at adding,
+
+00:07:08.680 --> 00:07:12.240
+but I want people to be careful of it
+
+00:07:12.240 --> 00:07:14.720
+while this is in an alpha state.
+
+00:07:14.720 --> 00:07:22.960
+So the default response is HTML, and we saw that here.
+
+00:07:22.960 --> 00:07:26.240
+But we also can modify the response format.
+
+00:07:26.240 --> 00:07:29.800
+We're currently supporting HTML, Markdown, and PDF.
+
+00:07:29.800 --> 00:07:34.280
+And that's really enough to select a different format.
+
+00:07:34.280 --> 00:07:48.040
+That's really nothing more than adding type. Okay.
+
+00:07:48.040 --> 00:07:50.680
+Not sure what's going on there.
+
+00:07:50.680 --> 00:07:57.080
+Okay, well, there goes my demo.
+
+00:07:57.080 --> 00:07:59.440
+Shows me for doing my talk live.
+
+00:08:03.920 --> 00:08:06.960
+But this, fortunately, this error message
+
+00:08:06.960 --> 00:08:08.840
+is a nice segue to the part of the talk
+
+00:08:08.840 --> 00:08:10.240
+that I'd really like to focus on,
+
+00:08:10.240 --> 00:08:13.520
+hopefully bringing me back to that thesis.
+
+NOTE Emacs Lisp
+
+00:08:13.520 --> 00:08:17.760
+So as we start to look at code, what we're looking for
+
+00:08:17.760 --> 00:08:21.640
+is really this Emacs Lisp that's getting generated here.
+
+00:08:21.640 --> 00:08:24.000
+And you'll notice that's the stuff
+
+00:08:24.000 --> 00:08:27.600
+I thought was important to produce as diagnostics
+
+00:08:27.600 --> 00:08:29.840
+for the programs running as well.
+
+00:08:29.840 --> 00:08:34.000
+So, spoiler, this Elisp is dynamically
+
+00:08:34.000 --> 00:08:35.400
+generated by the program.
+
+00:08:35.400 --> 00:08:38.160
+And that's really the core of the way
+
+00:08:38.160 --> 00:08:42.680
+orgvm or my orgvm works.
+
+00:08:42.680 --> 00:08:47.360
+So this should look pretty similar to the view of the code
+
+00:08:47.360 --> 00:08:48.880
+we had a moment ago.
+
+00:08:48.880 --> 00:08:51.840
+You can see I've got some bases.
+
+00:08:51.840 --> 00:08:53.680
+This is all hard-coded into the program,
+
+00:08:53.680 --> 00:08:56.720
+nothing fancy going on here.
+
+00:08:56.720 --> 00:09:00.280
+The debug is simply controlling that diagnostic output
+
+00:09:00.280 --> 00:09:01.560
+that we looked at.
+
+00:09:01.560 --> 00:09:04.240
+There's some other, hopefully fairly self-explanatory
+
+00:09:04.240 --> 00:09:09.160
+programs or properties, where to find Emacs and so forth.
+
+NOTE Variables
+
+00:09:09.160 --> 00:09:16.320
+And then finally, we come in to the meat of it,
+
+00:09:16.320 --> 00:09:16.336
+the variables that are used to control what Elisp
+
+00:09:16.337 --> 00:09:24.280
+we can generate dynamically.
+
+00:09:24.280 --> 00:09:27.400
+So here, we're controlling the extension
+
+00:09:27.400 --> 00:09:29.360
+that it should look for Org files.
+
+00:09:29.360 --> 00:09:31.560
+Hopefully not too many people out there
+
+00:09:31.560 --> 00:09:34.080
+with a weird extension for the Org files,
+
+00:09:34.080 --> 00:09:37.920
+but this should support that.
+
+00:09:37.920 --> 00:09:40.120
+I'm afraid that is something I've been known to do.
+
+00:09:40.120 --> 00:09:49.520
+Then we define a list of additional export types.
+
+00:09:49.520 --> 00:09:50.760
+Here's one that ought to work.
+
+00:09:50.760 --> 00:09:53.200
+Let's take a look at type=org.
+
+00:09:54.720 --> 00:09:59.320
+And, aha, it's giving us the file.
+
+00:09:59.320 --> 00:10:00.680
+So I'm not going to open that up,
+
+00:10:00.680 --> 00:10:02.420
+but now we can see that that's definitely working,
+
+00:10:02.421 --> 00:10:09.200
+for certain versions of working.
+
+00:10:09.200 --> 00:10:14.280
+So this list of type parameters is
+
+00:10:14.280 --> 00:10:15.720
+controlling the supported types.
+
+00:10:15.720 --> 00:10:18.550
+Hopefully it should be fairly easy to add in different ones.
+
+00:10:18.800 --> 00:10:21.480
+The fancy footwork here is just a list
+
+00:10:21.480 --> 00:10:23.480
+of the types that we're going to be using.
+
+00:10:23.480 --> 00:10:29.320
+The fancy footwork here involves, first of all,
+
+00:10:29.320 --> 00:10:32.240
+there's the extension and the MIME type.
+
+00:10:32.240 --> 00:10:32.253
+That's, as you might guess, used to control
+
+00:10:32.254 --> 00:10:38.720
+the response content type.
+
+NOTE Replace
+
+00:10:38.720 --> 00:10:40.920
+We also have this replace variable.
+
+00:10:40.920 --> 00:10:44.000
+This prevents-- there's an optimization
+
+00:10:44.000 --> 00:10:48.836
+to send an existing PDF or HTML file
+
+00:10:48.837 --> 00:10:50.463
+if that's already there,
+
+00:10:50.464 --> 00:10:51.003
+but only if the original source Org file
+
+00:10:51.004 --> 00:10:56.240
+hasn't been modified since.
+
+00:10:56.240 --> 00:10:59.920
+This `replace` effectively can turn that off.
+
+00:10:59.920 --> 00:11:03.040
+If I remove the `replace: true` attribute,
+
+00:11:03.040 --> 00:11:07.600
+then I'll be prevented from overwriting that.
+
+00:11:07.600 --> 00:11:10.320
+In other words, I'll always send a cached version.
+
+00:11:10.320 --> 00:11:13.878
+That might be helpful if, for example,
+
+00:11:13.879 --> 00:11:15.065
+you've got hand-tuned PDFs
+
+00:11:15.066 --> 00:11:17.200
+and you don't want to accidentally overwrite them.
+
+NOTE Getting into the code some more
+
+00:11:19.120 --> 00:11:23.480
+All right, let's get into the code a little bit more.
+
+00:11:23.480 --> 00:11:28.280
+I'm going to skip past the really good stuff
+
+00:11:28.280 --> 00:11:28.295
+and jump into the boring parts
+
+00:11:28.296 --> 00:11:34.240
+so that we have them as context.
+
+00:11:34.240 --> 00:11:37.160
+Here's the default path.
+
+00:11:37.160 --> 00:11:41.880
+And it is going to send me the readme from the project--
+
+00:11:41.880 --> 00:11:47.120
+from the project repo if I don't specify a path.
+
+00:11:47.120 --> 00:11:51.240
+And then we have a couple of different endpoints
+
+00:11:51.240 --> 00:11:52.480
+that we support.
+
+00:11:52.480 --> 00:11:55.560
+We'll come back to this first one.
+
+00:11:55.560 --> 00:11:55.586
+For now, let's start with the more normal one,
+
+00:11:55.587 --> 00:12:01.760
+which is just giving us a file name.
+
+00:12:01.760 --> 00:12:04.160
+So we can see we start by figuring out
+
+00:12:04.160 --> 00:12:08.520
+what the physical file name should be called.
+
+00:12:08.520 --> 00:12:10.280
+And assuming that that exists--
+
+00:12:15.600 --> 00:12:17.080
+sorry, I've confused myself.
+
+00:12:17.080 --> 00:12:23.000
+So this is the caching or the optimization
+
+00:12:23.000 --> 00:12:25.640
+that I mentioned, sending the existing file.
+
+00:12:25.640 --> 00:12:31.360
+This file exists is where the optimization is
+
+00:12:31.360 --> 00:12:38.680
+that regenerates the file if the source
+
+00:12:38.680 --> 00:12:41.840
+or document for the HTML generator has changed.
+
+00:12:45.080 --> 00:12:46.760
+Again, this is a short talk, so I'm not
+
+00:12:46.760 --> 00:12:49.320
+going to go into all the nuances of this JavaScript code.
+
+00:12:49.320 --> 00:12:52.800
+It's pretty far from an Emacs-related thing.
+
+00:12:52.800 --> 00:12:56.040
+So with that said, then, the rest of this program
+
+00:12:56.040 --> 00:12:59.360
+is really mostly just handling the different errors:
+
+00:12:59.360 --> 00:13:01.000
+"I didn't understand that type."
+
+00:13:01.000 --> 00:13:02.080
+"I don't know the document."
+
+00:13:02.080 --> 00:13:03.040
+"I failed."
+
+00:13:03.040 --> 00:13:06.480
+Otherwise, there's the caching.
+
+NOTE Generating Elisp
+
+00:13:06.480 --> 00:13:14.520
+And here's really where things get interesting,
+
+00:13:14.520 --> 00:13:19.200
+where we've generated some Elisp,
+
+00:13:19.200 --> 00:13:22.280
+and then we're calling Emacs with that Elisp.
+
+00:13:22.280 --> 00:13:24.760
+If everything works, we'll send the file.
+
+00:13:24.760 --> 00:13:27.800
+If it doesn't, we'll send the 500.
+
+00:13:27.800 --> 00:13:30.920
+And we've already seen the 500, so we know that works.
+
+00:13:30.920 --> 00:13:33.760
+All right, let's get to the interesting part.
+
+00:13:33.760 --> 00:13:37.320
+Sorry, one more footnote.
+
+NOTE Org blocks
+
+00:13:37.320 --> 00:13:39.320
+There is a capability built in that will
+
+00:13:39.320 --> 00:13:41.040
+allow us to execute an Org block.
+
+00:13:41.040 --> 00:13:42.840
+Let's see if that's working in our local.
+
+00:13:44.800 --> 00:13:47.200
+I'll remind myself how to do it.
+
+00:13:47.200 --> 00:13:49.560
+It's run.
+
+00:13:49.560 --> 00:13:53.320
+I think it's called test.
+
+00:13:53.320 --> 00:13:56.360
+And that's returning a 500.
+
+00:13:56.360 --> 00:13:58.400
+I'm suspecting that's running because I'm running
+
+00:13:58.400 --> 00:13:59.760
+in command instead of bash.
+
+00:13:59.760 --> 00:14:06.040
+Oh, yeah, so the failure is happening
+
+00:14:06.040 --> 00:14:07.720
+after I generate the Elisp.
+
+00:14:07.720 --> 00:14:10.280
+I'm pretty confident that is what the actual problem is.
+
+00:14:10.280 --> 00:14:12.760
+If we have time, I'll jump back over there
+
+00:14:12.760 --> 00:14:19.280
+and relaunch it in mingw bash.
+
+00:14:19.280 --> 00:14:21.440
+And we can see it actually work.
+
+00:14:21.440 --> 00:14:24.200
+But this works pretty well for me on my work laptop.
+
+00:14:24.200 --> 00:14:25.860
+I didn't have to make any changes to it.
+
+00:14:25.860 --> 00:14:28.120
+So I have a fairly high amount of confidence,
+
+00:14:28.120 --> 00:14:32.400
+at least in trivial cases, this works pretty well.
+
+NOTE Building some Lisp
+
+00:14:32.400 --> 00:14:37.800
+All right, so what I actually wanted to talk about today--
+
+00:14:37.800 --> 00:14:41.730
+and I'm going to be kind of hand-waving around
+
+00:14:41.731 --> 00:14:46.480
+this ES5 class that I've got and kind of the way that works.
+
+00:14:46.480 --> 00:14:49.840
+Hopefully, this will be pretty familiar to you
+
+00:14:49.840 --> 00:14:53.440
+if you are a JavaScript programmer.
+
+00:14:53.440 --> 00:14:58.660
+The interesting stuff comes when we want to build some Lisp.
+
+00:15:01.960 --> 00:15:01.961
+Here, you can see that I really don't have
+
+00:15:01.962 --> 00:15:11.280
+a whole lot of code around formatting LISP.
+
+00:15:11.280 --> 00:15:14.360
+You can see that I've special-cased
+
+00:15:14.360 --> 00:15:19.840
+whether the arguments that were passed
+
+00:15:19.840 --> 00:15:20.880
+happen to be a function.
+
+00:15:20.880 --> 00:15:25.480
+If they are, I'm going to call that function.
+
+00:15:25.480 --> 00:15:31.720
+And then the result will be formatted as Lisp.
+
+00:15:31.720 --> 00:15:35.040
+So this would be a recursive call here.
+
+00:15:35.040 --> 00:15:40.960
+Otherwise, I'm just going to return the arguments.
+
+00:15:40.960 --> 00:15:48.440
+Sorry, otherwise, I will slap a pair of parentheses
+
+00:15:48.440 --> 00:15:57.878
+around the result of walking that list if I get...
+
+00:15:57.879 --> 00:15:57.880
+formatting each element of the list of arguments
+
+00:15:57.880 --> 00:16:02.600
+that this `formatLisp` process calls
+
+00:16:02.600 --> 00:16:04.920
+and separating them with spaces.
+
+00:16:04.920 --> 00:16:10.880
+So in short form, this program walks through a list.
+
+00:16:10.880 --> 00:16:14.000
+If the list it receives is a function,
+
+00:16:14.000 --> 00:16:16.080
+it calls that function.
+
+00:16:16.080 --> 00:16:19.320
+Once that's handled or otherwise,
+
+00:16:19.320 --> 00:16:22.720
+we simply walk the list, taking the arguments,
+
+00:16:22.720 --> 00:16:26.000
+concatenating them on strings, and finally,
+
+00:16:26.000 --> 00:16:28.560
+wrap the results in parentheses.
+
+00:16:28.560 --> 00:16:31.760
+So what I didn't mention there but might be obvious
+
+00:16:31.760 --> 00:16:36.120
+is if I have a nested list, the inner list
+
+00:16:36.120 --> 00:16:38.600
+will be subjected to the same treatment.
+
+00:16:38.600 --> 00:16:43.000
+So this is a recursive sort of algorithm.
+
+NOTE How Elisp gets encoded
+
+00:16:43.000 --> 00:16:51.520
+All right, so now when I go to export,
+
+00:16:51.520 --> 00:16:53.520
+actually, in the interest of time,
+
+00:16:53.520 --> 00:16:55.800
+I'm going to avoid walking through that piece of code
+
+00:16:55.800 --> 00:16:58.840
+and let's focus instead on the more interesting part
+
+00:16:58.840 --> 00:17:02.360
+of how that Lisp gets encoded.
+
+00:17:02.360 --> 00:17:07.520
+So coming back to the PDF is a good example here,
+
+00:17:07.520 --> 00:17:10.320
+because it's got a special case.
+
+00:17:10.320 --> 00:17:10.336
+You can see I've specified this `exportFun`
+
+00:17:10.337 --> 00:17:15.320
+or export function.
+
+00:17:15.320 --> 00:17:19.560
+That's a property none of these other types have.
+
+00:17:22.400 --> 00:17:27.280
+And you can see it contains some Elisp telling us
+
+00:17:27.280 --> 00:17:29.760
+how to call the export for it.
+
+00:17:29.760 --> 00:17:32.680
+Let's go see how that's used.
+
+00:17:32.680 --> 00:17:35.720
+At the very end of what I just skipped over,
+
+00:17:35.720 --> 00:17:40.600
+the detailed "how the Org export process works,"
+
+00:17:40.600 --> 00:17:45.040
+you'll see that I am ending with a step
+
+00:17:45.040 --> 00:17:48.000
+to call the export function.
+
+00:17:48.000 --> 00:17:48.003
+Here, I look to see whether I have
+
+00:17:48.004 --> 00:17:55.400
+an export function property.
+
+00:17:55.400 --> 00:18:00.920
+If I do, I call that function.
+
+00:18:00.920 --> 00:18:00.920
+And if I don't, I build this list with the default
+
+00:18:00.921 --> 00:18:07.071
+`org-export-to-file` function
+
+00:18:07.072 --> 00:18:15.640
+using the filename and an output filename.
+
+00:18:15.640 --> 00:18:18.480
+So this, hopefully, is pretty familiar to anybody
+
+00:18:18.480 --> 00:18:18.503
+that's manually messed around
+
+00:18:18.504 --> 00:18:23.560
+with calling `org-export-to-file`.
+
+00:18:23.560 --> 00:18:25.800
+If it isn't, you can pretty well trust me for it.
+
+00:18:25.800 --> 00:18:28.280
+There's nothing very special going on.
+
+00:18:28.280 --> 00:18:30.760
+This looks rather like...
+
+00:18:30.760 --> 00:18:37.240
+Poor example there.
+
+00:18:37.240 --> 00:18:38.960
+Let's go back to our markdown.
+
+00:18:46.320 --> 00:18:47.720
+And there, we can see--
+
+00:18:47.720 --> 00:18:49.840
+[Leo]: I'm going to make a quick announcement.
+
+00:18:49.840 --> 00:18:50.760
+Can you hear me?
+
+00:18:50.760 --> 00:18:52.480
+[Corwin]: Yes, go for it.
+
+00:18:52.480 --> 00:18:54.280
+[Leo]: OK, let me just show my face.
+
+00:18:54.280 --> 00:18:55.400
+Oh, I'm not showing my face.
+
+00:18:55.400 --> 00:18:55.640
+Damn it.
+
+00:18:55.640 --> 00:18:57.000
+OK, I'll make the announcement.
+
+00:18:57.000 --> 00:18:58.600
+You won't see my face quite yet.
+
+00:18:58.600 --> 00:19:00.360
+We are about to get started.
+
+00:19:00.360 --> 00:19:02.440
+Well, we actually just got started on dev
+
+00:19:02.440 --> 00:19:06.040
+with the talk by RMS.
+
+00:19:06.040 --> 00:19:08.920
+So if you want to hop over to watch the talk by RMS,
+
+00:19:08.920 --> 00:19:09.760
+feel free to do so.
+
+00:19:09.760 --> 00:19:12.240
+Otherwise, we will be continuing on Gen with Corwin
+
+00:19:12.240 --> 00:19:12.253
+to finish his talk and have a Q&A.
+
+00:19:12.254 --> 00:19:16.080
+Corwin, you can feel free to go now.
+
+00:19:16.080 --> 00:19:18.560
+[Corwin]: Okay, bye, everybody.
+
+00:19:18.560 --> 00:19:22.795
+And for those sticking around,
+
+00:19:22.796 --> 00:19:25.040
+I'm just going to keep pressing on with this.
+
+NOTE How the export works
+
+00:19:25.040 --> 00:19:30.240
+In fact, I'm going to dive back into the part
+
+00:19:30.240 --> 00:19:35.400
+that I skipped here, which is the rest of how
+
+00:19:35.400 --> 00:19:37.400
+this export functionality works.
+
+00:19:37.400 --> 00:19:41.400
+So just to make sure the dot is tied together,
+
+00:19:41.400 --> 00:19:44.440
+the core of how this program works
+
+00:19:44.440 --> 00:19:49.320
+is generating some Elisp and then passing it
+
+00:19:49.320 --> 00:19:51.680
+to Emacs in batch mode.
+
+00:19:51.680 --> 00:19:53.280
+So if that wasn't perfectly clear,
+
+00:19:53.280 --> 00:19:57.240
+that's really what's going on with this program.
+
+00:19:57.240 --> 00:19:59.240
+The rest of the implementation is just
+
+00:19:59.240 --> 00:20:01.840
+a way to do that or certain features that
+
+00:20:01.840 --> 00:20:08.440
+are supported in that generated Elisp, if you will.
+
+00:20:08.440 --> 00:20:11.720
+So this is, you could say, the minimum implementation
+
+00:20:11.720 --> 00:20:11.753
+I could come up with to create a web server
+
+00:20:11.754 --> 00:20:17.320
+for my local Org documents.
+
+00:20:17.320 --> 00:20:24.440
+And I will also interrupt myself to just pull up
+
+00:20:24.440 --> 00:20:28.040
+the Etherpad real quick.
+
+00:20:28.040 --> 00:20:29.600
+Actually, if somebody is listening
+
+00:20:29.600 --> 00:20:34.720
+and can share a link to that, I closed my browser window
+
+00:20:34.720 --> 00:20:36.400
+with my links in it.
+
+00:20:36.400 --> 00:20:44.520
+But sure, I'm happy to take questions at any point, Leo,
+
+00:20:44.520 --> 00:20:48.480
+if there are any questions for me.
+
+00:20:48.480 --> 00:20:49.720
+Are you hanging out with me,
+
+00:20:49.720 --> 00:20:53.360
+instead of watching RMS? You can go.
+
+00:20:53.360 --> 00:20:54.600
+I'm teasing.
+
+00:20:54.600 --> 00:20:58.840
+[Leo]: No, I mean, we know that some people can
+
+00:20:58.840 --> 00:21:00.000
+have both streams open.
+
+00:21:00.000 --> 00:21:01.560
+It's fine.
+
+00:21:01.560 --> 00:21:03.320
+And right now, it's not the Q&A with RMS.
+
+00:21:03.320 --> 00:21:04.640
+It's just the presentation.
+
+00:21:04.640 --> 00:21:07.040
+So feel free to hang out a little longer
+
+00:21:07.040 --> 00:21:09.080
+if you just want the live stuff.
+
+00:21:09.080 --> 00:21:09.960
+Don't worry about it.
+
+00:21:09.960 --> 00:21:10.760
+You're fine.
+
+00:21:10.760 --> 00:21:13.720
+[Corwin]: Yeah, and forgive me, everybody,
+
+00:21:13.720 --> 00:21:16.280
+if you were hoping for a quick, succinct talk.
+
+00:21:16.280 --> 00:21:18.960
+I happen to know I was going to be opposite RMS,
+
+00:21:18.960 --> 00:21:23.240
+so I awarded myself the liberty of rambling.
+
+00:21:23.240 --> 00:21:26.840
+So if you do have a question, something that I alluded to
+
+00:21:26.840 --> 00:21:29.800
+and haven't come back to yet, you should, by all means,
+
+00:21:29.800 --> 00:21:30.320
+prompt me.
+
+00:21:30.320 --> 00:21:33.800
+[Leo]: Corwin, I might do--
+
+00:21:33.800 --> 00:21:35.400
+I'm just giving you a little heads up.
+
+00:21:35.400 --> 00:21:38.640
+I might need to go help at some point of dev.
+
+00:21:38.640 --> 00:21:43.120
+So if I need to do so, I will let you know right now
+
+00:21:43.120 --> 00:21:44.280
+inside the BBB room,
+
+00:21:44.280 --> 00:21:46.160
+and you'll be on your own to manage the chat.
+
+00:21:46.160 --> 00:21:47.960
+And you can just talk backstage to us
+
+00:21:47.960 --> 00:21:50.240
+to manage what we do with the stream, OK?
+
+00:21:50.240 --> 00:21:52.160
+[Corwin]: Yep, that should be no problem at all.
+
+00:21:52.160 --> 00:21:53.760
+I've got my pad up now.
+
+00:21:53.760 --> 00:21:55.160
+Thank you, ??.
+
+00:21:55.160 --> 00:21:58.040
+And I'm sorry about butchering your name there.
+
+00:21:58.040 --> 00:22:03.360
+And yep, I've got my chat open.
+
+00:22:03.360 --> 00:22:06.400
+And I think I'm pretty well set to self-manage.
+
+00:22:06.400 --> 00:22:07.640
+Oh, I don't have a camera on.
+
+00:22:07.640 --> 00:22:09.360
+So you can't see me giving you the thumbs up.
+
+00:22:09.360 --> 00:22:09.860
+[Leo]: Okay, good.
+
+NOTE Walking through the code
+
+00:22:09.860 --> 00:22:16.000
+All right, so let's just walk through,
+
+00:22:16.000 --> 00:22:18.400
+because it's sort of an interesting code.
+
+00:22:18.400 --> 00:22:20.560
+Let's just take a look real quick
+
+00:22:20.560 --> 00:22:24.720
+at how we generated our Elisp here,
+
+00:22:24.720 --> 00:22:26.520
+because it is--
+
+00:22:26.520 --> 00:22:27.640
+there we go.
+
+00:22:27.640 --> 00:22:29.240
+It is a little bit interesting.
+
+00:22:29.240 --> 00:22:32.040
+So here is the method.
+
+00:22:32.040 --> 00:22:34.080
+So I didn't get into detail on this.
+
+00:22:34.080 --> 00:22:34.086
+But there's an ES5 class that represents
+
+00:22:34.087 --> 00:22:38.920
+an Org mode document.
+
+00:22:38.920 --> 00:22:38.920
+It has the static debug property that,
+
+00:22:38.921 --> 00:22:42.400
+as you might imagine,
+
+00:22:42.400 --> 00:22:45.480
+can be overridden by that debug setting
+
+00:22:45.480 --> 00:22:48.440
+we looked at in the defaults.
+
+00:22:48.440 --> 00:22:51.440
+We also have a static variable that--
+
+00:22:51.440 --> 00:22:57.440
+a static property that does nothing more than getting
+
+00:22:57.440 --> 00:23:00.360
+the path to Emacs out of those defaults.
+
+00:23:00.360 --> 00:23:02.120
+Similarly, we have a class method
+
+00:23:02.120 --> 00:23:09.520
+to spawn out an Emacs, as I mentioned, in batch mode,
+
+00:23:09.520 --> 00:23:12.720
+eval-ing some arbitrary Lisp that's passed in.
+
+00:23:12.720 --> 00:23:20.480
+All right, so the type--
+
+00:23:20.480 --> 00:23:23.080
+this is where things start to get interesting.
+
+00:23:23.080 --> 00:23:26.480
+So this is an implementation detail,
+
+00:23:26.480 --> 00:23:30.040
+but-- that it's written as a static method.
+
+00:23:30.040 --> 00:23:32.160
+But essentially, what's going on here
+
+00:23:32.160 --> 00:23:34.840
+is looking up from that type list
+
+00:23:34.840 --> 00:23:37.480
+to try to find a type that's passed in,
+
+00:23:37.480 --> 00:23:41.240
+and that's returning one of these blocks.
+
+00:23:41.240 --> 00:23:44.800
+Let's say I requested HTML, which would be the default.
+
+00:23:44.800 --> 00:23:48.760
+Then I'm going to get this set of properties back.
+
+00:23:50.760 --> 00:23:51.260
+All right.
+
+00:23:51.260 --> 00:24:04.200
+Essentially, this program generates a program
+
+00:24:04.200 --> 00:24:10.840
+or a little block of executable elisp.
+
+00:24:10.840 --> 00:24:15.920
+However, in some cases, where if the `load-path` has
+
+00:24:15.920 --> 00:24:20.920
+been customized in that type block,
+
+00:24:20.920 --> 00:24:25.000
+or I think that's the only case I supported.
+
+00:24:25.000 --> 00:24:28.960
+There was another complexity I removed.
+
+00:24:28.960 --> 00:24:32.000
+So in that case, then I can simply
+
+00:24:32.000 --> 00:24:33.560
+replace that program with a let.
+
+00:24:33.560 --> 00:24:41.680
+Either way, I'm going to have everything I generate
+
+00:24:41.680 --> 00:24:45.840
+be encapsulated in a single block.
+
+00:24:45.840 --> 00:24:49.240
+The-- then I'm calling that formatLisp process
+
+00:24:49.240 --> 00:24:52.760
+that we talked about, appending to that--
+
+00:24:52.760 --> 00:25:01.680
+or inserting into, you could say, the outer scope.
+
+00:25:01.680 --> 00:25:05.000
+And we start by finding the file.
+
+00:25:05.000 --> 00:25:11.400
+We then load any libraries that might be needed.
+
+00:25:11.400 --> 00:25:13.520
+In some cases, the type might not
+
+00:25:13.520 --> 00:25:15.160
+have any external libraries.
+
+00:25:15.160 --> 00:25:18.440
+So we just-- so that's a no-op.
+
+00:25:18.440 --> 00:25:24.120
+And then finally, we're going to execute
+
+00:25:24.120 --> 00:25:27.160
+that logic I mentioned before about selecting
+
+00:25:27.160 --> 00:25:30.160
+either the default org-export-to-file,
+
+00:25:30.160 --> 00:25:36.200
+or else whatever Elisp we've staged for exporting
+
+00:25:36.200 --> 00:25:38.160
+that particular file type.
+
+00:25:38.160 --> 00:25:43.112
+And again, in the case of PDF, there's a special function
+
+00:25:43.113 --> 00:25:46.240
+that's used to trigger that export.
+
+00:25:46.240 --> 00:25:49.160
+Or you may be aware that that's a little more complicated.
+
+00:25:49.160 --> 00:25:50.840
+There's intermediate forms there.
+
+00:25:50.840 --> 00:25:56.760
+All right.
+
+00:25:56.760 --> 00:26:01.320
+So just reminding myself if there's anything else
+
+00:26:01.320 --> 00:26:03.760
+I have to cover on background.
+
+00:26:03.760 --> 00:26:07.440
+And I think that pretty well covers the basics.
+
+NOTE Executing the source block
+
+00:26:07.440 --> 00:26:09.880
+All right, let's look at that source block execute.
+
+00:26:09.880 --> 00:26:14.600
+This is the other use of the format list function.
+
+00:26:14.600 --> 00:26:16.800
+So here, rather than looking at the type
+
+00:26:16.800 --> 00:26:24.720
+and passing that through our Org export method,
+
+00:26:24.720 --> 00:26:29.080
+and then that type is used to get the list
+
+00:26:29.080 --> 00:26:30.840
+that we want to create.
+
+00:26:30.840 --> 00:26:37.600
+In the case of source block execute,
+
+00:26:37.600 --> 00:26:40.520
+we're kind of rolling it a lot more by hand.
+
+00:26:40.520 --> 00:26:43.920
+So this gives us a good chance to sort of unwind
+
+00:26:43.920 --> 00:26:49.600
+how that list looks when it's staged as JavaScript data.
+
+00:26:49.600 --> 00:26:52.760
+So here again, I wrap everything in a `progn`.
+
+00:26:52.760 --> 00:26:58.480
+I start by preventing an interactive prompt
+
+00:26:58.480 --> 00:27:01.240
+for the Babel execution.
+
+00:27:01.240 --> 00:27:04.960
+And then we load languages.
+
+00:27:04.960 --> 00:27:12.240
+This relates to another piece of our configuration
+
+00:27:12.240 --> 00:27:17.600
+where we've specified a set of languages
+
+00:27:17.600 --> 00:27:19.920
+that it's OK to execute.
+
+00:27:19.920 --> 00:27:24.120
+So if that type isn't in this list,
+
+00:27:24.120 --> 00:27:28.800
+then we won't be able to execute it in line
+
+00:27:28.800 --> 00:27:32.720
+through our trivial little web server.
+
+00:27:32.720 --> 00:27:33.640
+All right.
+
+00:27:33.640 --> 00:27:40.600
+With that done, then, loading the selected language,
+
+00:27:40.600 --> 00:27:43.960
+we then once again open the file.
+
+00:27:43.960 --> 00:27:46.360
+And we're-- whoops.
+
+00:27:46.360 --> 00:27:51.800
+Let-bind a return value, which is
+
+00:27:51.800 --> 00:27:55.166
+calculated by using Org source block execute [`org-sbe`]
+
+00:27:55.167 --> 00:27:58.040
+on the name of the block that's given.
+
+00:27:58.040 --> 00:28:05.160
+And then we use a temp buffer to write that out
+
+00:28:05.160 --> 00:28:06.640
+to a temporary file.
+
+00:28:06.640 --> 00:28:08.440
+This is actually a little clumsy,
+
+00:28:08.440 --> 00:28:12.720
+but I haven't put the effort in to have this written out
+
+00:28:12.720 --> 00:28:17.480
+to the standard output cleanly instead of using a temp file.
+
+00:28:17.840 --> 00:28:20.480
+So under-- this is another example of where it may not
+
+00:28:20.480 --> 00:28:22.520
+be production-- well, it definitely
+
+00:28:22.520 --> 00:28:27.680
+is not production-worthy code in that under heavy load,
+
+00:28:27.680 --> 00:28:30.166
+this would certainly break with collisions
+
+00:28:30.167 --> 00:28:32.040
+on the Babel file,
+
+00:28:32.040 --> 00:28:34.120
+the name of the Babel file.
+
+00:28:34.120 --> 00:28:37.480
+In any case, once we've staged up our Elisp, which is--
+
+00:28:37.480 --> 00:28:42.560
+this is basically variable interpolation,
+
+00:28:42.560 --> 00:28:47.680
+then we just call Emacs on that.
+
+00:28:47.680 --> 00:28:49.720
+And if we look down to where that's called,
+
+00:28:49.720 --> 00:28:54.640
+you can see that the Org Babel filename calculated here.
+
+00:29:12.795 --> 00:29:15.000
+[Leo]: Is there a problem?
+
+00:29:15.000 --> 00:29:15.760
+[Corwin]: No, I'm fine.
+
+00:29:15.760 --> 00:29:18.000
+I'm just lost in my code.
+
+00:29:18.000 --> 00:29:19.040
+[Leo]: OK, cool.
+
+00:29:19.040 --> 00:29:21.160
+Uh-oh means, oh, I need to intervene.
+
+00:29:21.160 --> 00:29:22.240
+What is going on?
+
+00:29:22.240 --> 00:29:23.200
+Carry on, please.
+
+00:29:23.200 --> 00:29:24.120
+[Corwin]: No, I'm fine, Leo.
+
+00:29:24.120 --> 00:29:25.480
+Thank you.
+
+00:29:25.480 --> 00:29:27.280
+All right, so then--
+
+00:29:27.280 --> 00:29:28.680
+so you can see we get--
+
+00:29:28.680 --> 00:29:35.537
+we send the Babel file here,
+
+00:29:35.538 --> 00:29:41.640
+which is calculated manually.
+
+00:29:41.640 --> 00:29:45.440
+A bit sloppy there, since I have essentially the same--
+
+00:29:45.440 --> 00:29:47.000
+I have two different places where
+
+00:29:47.000 --> 00:29:52.480
+I'm calculating the Org doc file in two different ways.
+
+00:29:52.480 --> 00:29:54.720
+Have I encouraged you to write your own yet?
+
+00:29:54.720 --> 00:29:56.440
+Or send patches.
+
+00:29:56.440 --> 00:30:01.240
+All right, so that's pretty much the nuts and bolts
+
+00:30:01.240 --> 00:30:02.400
+of this program.
+
+00:30:02.400 --> 00:30:06.720
+Let's go back to just seeing if we can't make it run.
+
+00:30:22.120 --> 00:30:22.620
+All right.
+
+00:30:22.620 --> 00:30:45.880
+All right, well, I apologize for not
+
+00:30:45.880 --> 00:30:49.560
+having taken the time to stage my demo this morning.
+
+00:30:49.560 --> 00:30:52.680
+I'm going to try to make it better for you.
+
+00:30:52.680 --> 00:30:59.920
+But apparently, it's going to be non-trivial
+
+00:30:59.920 --> 00:31:04.520
+to make the program work.
+
+00:31:04.520 --> 00:31:07.160
+Let's just-- before I completely give up,
+
+00:31:07.160 --> 00:31:13.320
+let's go ahead and try our Babel execute.
+
+00:31:13.320 --> 00:31:14.800
+And that, too, is failing.
+
+00:31:14.800 --> 00:31:18.040
+So there's something unhappy in my local world.
+
+00:31:18.040 --> 00:31:19.040
+There it goes.
+
+00:31:19.040 --> 00:31:26.600
+But in any case, let's go ahead and just take a look at
+
+00:31:26.600 --> 00:31:28.000
+that.
+
+00:31:28.000 --> 00:31:30.640
+Let's see.
+
+00:31:30.640 --> 00:31:31.600
+Control Enter.
+
+00:31:36.628 --> 00:31:40.200
+Let's take a look at that generated .el
+
+00:31:40.200 --> 00:31:42.840
+and compare it to-- whoa--
+
+00:31:42.840 --> 00:31:44.000
+and compare it to--
+
+00:31:44.000 --> 00:31:52.400
+I'm just going to format this manually,
+
+00:31:52.400 --> 00:31:56.000
+because I've forgotten my key bindings to auto-format it.
+
+00:31:56.000 --> 00:32:02.240
+There we go.
+
+00:32:02.240 --> 00:32:07.960
+All right.
+
+00:32:07.960 --> 00:32:13.120
+So now we can see, as promised, there's really
+
+00:32:13.120 --> 00:32:16.200
+nothing going on here other than the interpolation
+
+00:32:16.200 --> 00:32:18.640
+of the variables in.
+
+00:32:18.640 --> 00:32:24.360
+We're inserting-- we're using an insert and write file
+
+00:32:24.360 --> 00:32:27.800
+method, which is, again, rather sloppy,
+
+00:32:27.800 --> 00:32:32.040
+to generate the text file.
+
+00:32:32.040 --> 00:32:32.880
+All right.
+
+00:32:32.880 --> 00:32:34.760
+Let's come back to our documentation
+
+00:32:34.760 --> 00:32:39.760
+and see if we can put a bow on the project.
+
+NOTE Conclusion
+
+00:32:39.760 --> 00:32:43.760
+So I hope I've convinced you that this was actually
+
+00:32:43.760 --> 00:32:45.480
+rather easy to do.
+
+00:32:45.480 --> 00:32:52.440
+The entirety of my index.js file is 262 lines,
+
+00:32:52.440 --> 00:32:59.810
+and that includes a good 40 of whitespace and configuration.
+
+00:33:03.760 --> 00:33:06.505
+It has only one dependency, the Express,
+
+00:33:06.506 --> 00:33:08.240
+which really builds the web server.
+
+00:33:08.240 --> 00:33:11.520
+Any language you'd rather implement this in
+
+00:33:11.520 --> 00:33:14.120
+will have a similar capability for building
+
+00:33:14.120 --> 00:33:16.280
+some type of trivial web server.
+
+00:33:16.280 --> 00:33:18.400
+And I think you may find--
+
+00:33:18.400 --> 00:33:22.640
+I certainly found that a large portion of the code base
+
+00:33:22.640 --> 00:33:28.080
+is really making the errors meaningful,
+
+00:33:28.080 --> 00:33:32.420
+in that, in some cases, sending an appropriate HTTP status
+
+00:33:32.420 --> 00:33:34.360
+based on what happened.
+
+00:33:34.360 --> 00:33:38.002
+In other cases-- let's see if
+
+00:33:38.003 --> 00:33:42.640
+I've got an explicit `throw` left in here--
+
+00:33:42.640 --> 00:33:45.840
+in other cases, just trapping different types
+
+00:33:45.840 --> 00:33:47.440
+of failure conditions.
+
+00:33:47.440 --> 00:33:54.000
+I'm going to look at my pad, and I do see a question here.
+
+00:33:54.000 --> 00:33:55.120
+So let me jump in here.
+
+NOTE Questions and answers
+
+00:33:58.880 --> 00:34:00.640
+[Leo]: Corwin, just to make sure, are you switching to Q&A?
+
+00:34:00.640 --> 00:34:02.380
+Are you finished with your presentation?
+
+00:34:02.380 --> 00:34:05.260
+[Corwin]: Well, as I said, I'm happy to take Q&A throughout.
+
+00:34:05.260 --> 00:34:08.420
+But yes, let's say yes to that.
+
+00:34:08.420 --> 00:34:10.900
+[Leo]: Okay, so Corwin, what I'm going to need to do now--
+
+00:34:10.900 --> 00:34:12.140
+you are in charge of the room.
+
+00:34:12.140 --> 00:34:14.060
+We are going to open up the room so
+
+00:34:14.060 --> 00:34:17.220
+that if people have questions watching right now on Gen,
+
+00:34:17.220 --> 00:34:18.700
+feel free to come in.
+
+00:34:18.700 --> 00:34:22.780
+And there was something else I needed to say.
+
+00:34:22.780 --> 00:34:24.620
+Yes, Corwin, if there's any problem,
+
+00:34:24.620 --> 00:34:25.700
+whisper to us on Mumble.
+
+00:34:25.700 --> 00:34:27.500
+So you might want to unmute Mumble
+
+00:34:27.500 --> 00:34:29.620
+and be able to listen to us over there.
+
+00:34:29.620 --> 00:34:32.480
+[Corwin]: I can't do that, Leo.
+
+00:34:32.480 --> 00:34:36.440
+If I unmute, Mumble is going to bleed through.
+
+00:34:36.440 --> 00:34:36.960
+[Leo]: Okay, sure.
+
+00:34:36.960 --> 00:34:39.416
+Well, if you have any problem,
+
+00:34:39.417 --> 00:34:41.160
+type in #emacsconf-org channel,
+
+00:34:41.160 --> 00:34:42.520
+and we'll be with you, OK?
+
+00:34:42.520 --> 00:34:43.520
+[Corwin]: Or I'll PM somebody.
+
+00:34:43.520 --> 00:34:45.760
+But I don't anticipate having any problems.
+
+00:34:45.760 --> 00:34:49.040
+I'll put something in -org when I run out of steam here.
+
+00:34:49.040 --> 00:34:50.400
+How's that?
+
+00:34:50.400 --> 00:34:51.160
+[Leo]: Amazing, cool.
+
+00:34:51.160 --> 00:34:53.320
+So I will have to leave the room, though.
+
+00:34:53.320 --> 00:34:56.800
+I'm leaving the recording going so that we have your Q&A.
+
+00:34:56.800 --> 00:34:58.080
+And whenever you're available--
+
+00:34:58.080 --> 00:35:02.180
+[Corwin]: I'll shut off the recording when I close the room.
+
+00:35:02.180 --> 00:35:02.980
+[Leo]: Okay, great.
+
+00:35:02.980 --> 00:35:04.460
+Good luck, Corwin.
+
+00:35:04.460 --> 00:35:06.500
+[Corwin]: Thank you.
+
+00:35:06.500 --> 00:35:09.780
+All right, and if you're still with me, well, thanks.
+
+00:35:09.780 --> 00:35:13.620
+I appreciate that.
+
+00:35:13.620 --> 00:35:16.740
+I did offer to be opposite RMS.
+
+00:35:16.740 --> 00:35:20.060
+And I'm in no way offended if people do want to jump over,
+
+00:35:20.060 --> 00:35:23.540
+especially as that starts to shift over to Q&A.
+
+00:35:23.540 --> 00:35:26.980
+I'm taking Leo's leaving as a pretty good indication
+
+00:35:26.980 --> 00:35:28.780
+that that's happening now-ish.
+
+00:35:28.780 --> 00:35:31.385
+So I totally understand
+
+00:35:31.386 --> 00:35:35.020
+if folks are more excited to do that.
+
+00:35:35.020 --> 00:35:37.940
+Meanwhile, let me just jump over to the question
+
+00:35:37.940 --> 00:35:38.660
+that I received.
+
+00:35:38.660 --> 00:35:46.460
+I'll show the pad here so that I save myself
+
+00:35:46.460 --> 00:35:47.860
+reading the question out.
+
+00:35:47.860 --> 00:35:48.940
+But I'll paraphrase it.
+
+NOTE Why am I not running the web server in Emacs?
+
+00:35:48.940 --> 00:35:52.660
+Why am I not running the web server in Emacs?
+
+00:35:52.660 --> 00:35:54.380
+That would be a great way to do it.
+
+00:35:54.380 --> 00:35:56.340
+I chose to build it in Node.js
+
+00:35:56.341 --> 00:35:58.460
+because that was trivially easy for me.
+
+NOTE Is this using org-info-js?
+
+00:36:22.140 --> 00:36:24.780
+And then finally, am I using org-info-js?
+
+00:36:24.780 --> 00:36:27.540
+No, I learned about this essentially at this conference.
+
+00:36:27.540 --> 00:36:30.660
+So that's something I'll be learning more about.
+
+00:36:30.660 --> 00:36:32.460
+And it could well influence this project.
+
+00:36:34.900 --> 00:36:56.180
+All right, and thanks for the questions.
+
+00:36:59.020 --> 00:37:02.820
+All right, I'm going to slow my roll just a little bit here
+
+00:37:02.820 --> 00:37:06.980
+because I think I kind of have all the time in the world.
+
+00:37:06.980 --> 00:37:11.540
+I will be wrapping up within about 15 or 20 minutes
+
+00:37:11.540 --> 00:37:15.620
+at the latest just to avoid stressing out
+
+00:37:15.620 --> 00:37:18.827
+my fellow organizers, especially Leo and Sacha
+
+00:37:18.828 --> 00:37:22.260
+that have the bulk of the heavy lifting this year,
+
+00:37:22.260 --> 00:37:26.820
+and Amin, and really, thanks all to everybody.
+
+00:37:26.820 --> 00:37:29.540
+God, the nicest part of doing my own talk
+
+00:37:29.540 --> 00:37:31.980
+is that I get to say that.
+
+00:37:31.980 --> 00:37:35.460
+It's just so much fun to contribute to EmacsConf.
+
+NOTE EmacsConf
+
+00:37:35.460 --> 00:37:38.740
+And if you're at all interested, there's
+
+00:37:38.740 --> 00:37:43.100
+plenty of completely backstage, behind the curtain role.
+
+00:37:43.100 --> 00:37:45.340
+Behind the curtain roles doesn't mean
+
+00:37:45.340 --> 00:37:47.865
+you have to be somebody that likes
+
+00:37:47.866 --> 00:37:50.060
+talking or being on webcam.
+
+00:37:50.060 --> 00:37:52.300
+Sorry that my camera isn't working this year.
+
+00:37:52.300 --> 00:37:53.980
+I spent quite a while fussing with that
+
+00:37:53.980 --> 00:37:56.740
+and lost all my time to get my prerec working.
+
+00:37:56.740 --> 00:38:10.140
+All right, so trying to think where I can take us
+
+00:38:10.140 --> 00:38:11.540
+without my demo working.
+
+00:38:11.540 --> 00:38:14.540
+I was really hoping to show the Org Babel piece.
+
+00:38:14.540 --> 00:38:15.580
+That's really fun.
+
+NOTE How I'm using this at work
+
+00:38:15.580 --> 00:38:20.420
+So let me just mention briefly how I'm using this at work.
+
+00:38:20.420 --> 00:38:25.980
+So at work, I'll have some type of Org document.
+
+00:38:25.980 --> 00:38:27.700
+And usually, it's a project.
+
+00:38:27.700 --> 00:38:32.900
+So the title of the document is My Project.
+
+00:38:32.900 --> 00:38:37.820
+And then I'll have a requirements section.
+
+00:38:37.820 --> 00:38:43.540
+And I'll have a meeting notes section.
+
+00:38:43.540 --> 00:38:44.980
+That's probably the key thing.
+
+00:38:44.980 --> 00:38:49.540
+And then as the project goes on, I'll start having--
+
+00:38:49.540 --> 00:38:50.740
+I'm a solutions architect.
+
+00:38:50.740 --> 00:38:55.420
+So my job is formalizing design in large part.
+
+00:38:55.420 --> 00:39:01.740
+So then I'll have a design documents section.
+
+00:39:01.740 --> 00:39:05.020
+And this is where I'll be doing a lot of my work.
+
+00:39:05.020 --> 00:39:07.220
+So I'll start out saying--
+
+00:39:26.620 --> 00:39:29.340
+And maybe Bob is a subject matter expert
+
+00:39:29.340 --> 00:39:32.460
+whose buy-in I need to have on how we're going
+
+00:39:32.460 --> 00:39:34.820
+to do the high-level design.
+
+00:39:34.820 --> 00:39:37.296
+Maybe a lead engineer or a dev manager
+
+00:39:37.297 --> 00:39:39.460
+or something like that.
+
+00:39:39.460 --> 00:39:42.653
+All right, as my work goes on,
+
+00:39:42.654 --> 00:39:47.620
+then this will start getting into more detail.
+
+00:40:16.620 --> 00:40:18.660
+And things of this nature.
+
+00:40:18.660 --> 00:40:20.180
+As things get further and further,
+
+00:40:20.180 --> 00:40:21.740
+I'll actually have documentation
+
+00:40:21.740 --> 00:40:22.820
+that I'm adding in here.
+
+00:40:22.820 --> 00:40:28.900
+Oh, I see.
+
+00:40:28.900 --> 00:40:29.740
+It's a big mess.
+
+00:40:29.740 --> 00:40:32.140
+All right, well, we'll just reuse this.
+
+00:40:32.140 --> 00:40:40.380
+So I can insert those all in line.
+
+00:40:40.380 --> 00:40:42.157
+And now for the fun part,
+
+00:40:42.158 --> 00:40:44.460
+let's see if the most trivial case
+
+00:40:44.460 --> 00:40:45.460
+is working here.
+
+00:40:49.940 --> 00:40:51.180
+No.
+
+00:40:51.180 --> 00:40:52.900
+All right, completely broken.
+
+00:40:52.900 --> 00:40:57.260
+Let me drag.
+
+00:40:57.260 --> 00:41:05.180
+All right, well, apologies again for the poor quality
+
+00:41:05.180 --> 00:41:06.260
+of my demo today.
+
+00:41:06.260 --> 00:41:13.900
+And let me just look real quick at my Etherpad once more.
+
+00:41:13.900 --> 00:41:16.820
+And I'll glance at BBB to see if there's anybody
+
+00:41:16.820 --> 00:41:18.140
+jumping in with questions.
+
+00:41:18.140 --> 00:41:23.740
+And then I'll go back to IRC and look for questions there.
+
+00:41:23.740 --> 00:41:33.180
+OK, and I don't see any additional questions on the pad.
+
+00:41:33.180 --> 00:41:35.780
+I'm just going to scan IRC real quick.
+
+00:41:35.780 --> 00:41:42.460
+I suspect that the TreeSitter comment isn't for me.
+
+00:41:44.900 --> 00:41:56.620
+All right, and I'm not seeing a lot of questions there.
+
+00:41:56.620 --> 00:42:04.340
+So I'm just going to vamp for just a minute or two.
+
+NOTE Volunteering for EmacsConf
+
+00:42:04.340 --> 00:42:07.980
+As I mentioned, I'm a conference volunteer.
+
+00:42:07.980 --> 00:42:09.700
+This is my third year volunteering
+
+00:42:09.700 --> 00:42:11.940
+with the conference.
+
+00:42:11.940 --> 00:42:15.140
+And probably if you take one thing away from my talk,
+
+00:42:15.140 --> 00:42:17.740
+it should be I really like volunteering
+
+00:42:17.740 --> 00:42:18.500
+for the conference.
+
+00:42:18.500 --> 00:42:19.900
+It's fun.
+
+00:42:19.900 --> 00:42:23.500
+It makes me feel sort of close to the pulse.
+
+00:42:23.500 --> 00:42:27.296
+And it gives me a chance to just interact with people
+
+00:42:27.297 --> 00:42:30.106
+that have very different perspectives on Emacs,
+
+00:42:30.107 --> 00:42:32.740
+which is something that I really value a lot.
+
+00:42:32.740 --> 00:42:40.220
+Emacs, like anything else sort of in the internet world,
+
+00:42:40.220 --> 00:42:42.940
+has a real echo chamber factor.
+
+00:42:42.940 --> 00:42:46.504
+If you do or don't like use-package,
+
+00:42:46.505 --> 00:42:49.135
+you probably interact with a lot of people
+
+00:42:49.136 --> 00:42:53.500
+that feel the same way about that.
+
+00:42:53.500 --> 00:42:57.420
+And so I really recommend volunteering for EmacsConf
+
+00:42:57.420 --> 00:43:01.340
+as a way to sort of mix it up and get
+
+00:43:01.340 --> 00:43:03.858
+to know people that may not use Emacs
+
+00:43:03.859 --> 00:43:05.540
+the same way that you do.
+
+NOTE It's easy to build a program that uses Emacs in the pipeline
+
+00:43:08.380 --> 00:43:10.420
+Or perhaps more on topic, though,
+
+00:43:10.420 --> 00:43:14.300
+the log line for this talk is it's really quite easy
+
+00:43:14.300 --> 00:43:20.760
+to build a program that uses Emacs in a pipeline capability.
+
+00:43:20.980 --> 00:43:23.780
+I think there's a ton of opportunity in this space.
+
+00:43:23.780 --> 00:43:27.700
+This particular example is just a trivial web server
+
+00:43:27.700 --> 00:43:30.780
+written using Node.js.
+
+00:43:30.780 --> 00:43:31.545
+But as was pointed out, we could have used elnode
+
+00:43:31.546 --> 00:43:40.060
+as a web server
+
+00:43:40.060 --> 00:43:44.060
+and done the entire thing within Emacs Lisp.
+
+00:43:44.060 --> 00:43:48.765
+Or really, almost any technology
+
+00:43:48.766 --> 00:43:52.900
+would get us this capability.
+
+00:43:52.900 --> 00:43:54.660
+From an implementation standpoint,
+
+00:43:54.660 --> 00:43:56.847
+I had a lot of fun building
+
+00:43:56.848 --> 00:43:59.580
+this trivial little Elisp parser,
+
+00:43:59.580 --> 00:44:03.220
+and I'm rather pleased with the fact
+
+00:44:03.220 --> 00:44:07.340
+that the entirety of that--
+
+00:44:07.340 --> 00:44:14.180
+the entire algorithm for turning JavaScript or JSON data,
+
+00:44:14.180 --> 00:44:20.420
+we could say, into Elisp is really a one-liner,
+
+00:44:20.420 --> 00:44:25.820
+albeit a nasty one-liner. That was pretty cool
+
+00:44:25.820 --> 00:44:28.180
+to discover how simple that was.
+
+00:44:28.180 --> 00:44:31.220
+So in my mind, that opens up a lot of possibility.
+
+00:44:31.220 --> 00:44:32.889
+If it's this easy in JavaScript,
+
+00:44:32.890 --> 00:44:34.708
+I wouldn't expect it to be hard,
+
+00:44:34.709 --> 00:44:36.860
+any more difficult in your favorite language.
+
+00:44:36.860 --> 00:44:41.140
+Glance one more time to see if there
+
+00:44:41.140 --> 00:44:42.940
+happen to be any other questions.
+
+00:44:42.940 --> 00:44:47.300
+And not seeing any, I'm going to go ahead and start
+
+00:44:47.300 --> 00:44:49.500
+wrapping up my chat now.
+
+00:44:49.500 --> 00:44:51.620
+It will take me a couple of minutes to do that.
+
+00:44:51.620 --> 00:44:54.580
+So if you do have any other questions that you
+
+00:44:54.580 --> 00:44:56.460
+want to drop into the pad or any comments,
+
+00:44:56.460 --> 00:44:59.740
+you're more than welcome to hit me with those
+
+00:44:59.740 --> 00:45:03.820
+as I coordinate closing this chat, this talk,
+
+00:45:03.820 --> 00:45:06.100
+with the organizer team.
diff --git a/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt b/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt
new file mode 100644
index 00000000..6a5b2f48
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main--chapters.vtt
@@ -0,0 +1,71 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:32.079
+Introduction
+
+00:00:32.080 --> 00:01:08.799
+Project housekeeping
+
+00:01:08.800 --> 00:02:04.679
+Continuous integration
+
+00:02:04.680 --> 00:03:32.559
+Funding contributors
+
+00:03:32.560 --> 00:03:58.639
+New features
+
+00:03:58.640 --> 00:04:36.519
+An assortment of export improvements
+
+00:04:36.520 --> 00:05:12.279
+A collection of babel improvements
+
+00:05:12.280 --> 00:06:04.159
+A multitude of general org-mode improvements
+
+00:06:04.160 --> 00:07:31.599
+Citations
+
+00:07:31.600 --> 00:07:48.319
+Quality of life improvements
+
+00:07:48.320 --> 00:09:02.479
+Org fold
+
+00:09:02.480 --> 00:10:07.359
+Org element cache
+
+00:10:07.360 --> 00:11:02.719
+Org persist
+
+00:11:02.720 --> 00:11:40.199
+More careful resource downloading
+
+00:11:40.200 --> 00:12:15.799
+Bug fixes
+
+00:12:15.800 --> 00:12:42.799
+Asynchronous session evaluation
+
+00:12:42.800 --> 00:13:18.279
+Nicer tangle mode syntax
+
+00:13:18.280 --> 00:13:52.599
+A flourishing ecosystem
+
+00:13:52.600 --> 00:14:10.119
+Org-modern
+
+00:14:10.120 --> 00:15:44.039
+citeproc-org
+
+00:15:44.040 --> 00:17:06.319
+Continuing work on the Org format
+
+00:17:06.320 --> 00:17:41.919
+Mailing list management
+
+00:17:41.920 --> 00:19:51.880
+Further engraving
diff --git a/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt b/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt
new file mode 100644
index 00000000..32e3022e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-orgyear--this-year-in-org--timothy--main.vtt
@@ -0,0 +1,1220 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.679
+Hello. If you're listening to this talk,
+
+00:00:04.680 --> 00:00:06.239
+then you should be at least a bit interested
+
+00:00:06.240 --> 00:00:09.199
+in Org mode, which is fantastic
+
+00:00:09.200 --> 00:00:11.252
+because there have been quite a few
+
+00:00:11.253 --> 00:00:14.599
+interesting developments over the past year or so.
+
+00:00:14.600 --> 00:00:19.399
+I'm Timothy, as you may have gathered from the last talk,
+
+00:00:19.400 --> 00:00:21.799
+and I'm also quite involved with the Org project,
+
+00:00:21.800 --> 00:00:23.999
+so I'd like to go through a few of those developments
+
+00:00:24.000 --> 00:00:27.439
+over the past year or so and give you a few hints as well
+
+00:00:27.440 --> 00:00:32.079
+as to what potentially lies around the corner with Org mode.
+
+NOTE Project housekeeping
+
+00:00:32.080 --> 00:00:35.879
+The starters, slightly on the more boring side
+
+00:00:35.880 --> 00:00:37.679
+but rather significant change to the project,
+
+00:00:37.680 --> 00:00:40.799
+occurred with the housekeeping or organisation.
+
+00:00:40.800 --> 00:00:43.519
+The codebase for the Org project has actually shifted over
+
+00:00:43.520 --> 00:00:46.799
+from a self-hosted Gogs instance over to Savannah,
+
+00:00:46.800 --> 00:00:49.719
+which means it's now living right alongside
+
+00:00:49.720 --> 00:00:51.519
+the Emacs codebase.
+
+00:00:51.520 --> 00:00:53.279
+This has been accompanied by the creation
+
+00:00:53.280 --> 00:00:58.219
+of a whole bunch of Org-related repos under
+
+00:00:58.220 --> 00:01:03.359
+Bastien's (Org's maintainer) personal sourceHut account.
+
+00:01:03.360 --> 00:01:06.759
+We've got the source of the website, the Org wiki Worg,
+
+00:01:06.760 --> 00:01:08.799
+as well as Org contrib.
+
+NOTE Continuous integration
+
+00:01:08.800 --> 00:01:13.119
+Another recent addition to this list of Org-related repos
+
+00:01:13.120 --> 00:01:17.799
+is the new Org mode tests--continuous integration.
+
+00:01:17.800 --> 00:01:22.039
+Now, this is rather important, because while we do recommend
+
+00:01:22.040 --> 00:01:25.879
+that all contributors actually run make tests
+
+00:01:25.880 --> 00:01:29.799
+before submitting patches to the Org project,
+
+00:01:29.800 --> 00:01:31.279
+this doesn't always happen.
+
+00:01:31.280 --> 00:01:34.559
+It can also actually be a bit harder than you expect
+
+00:01:34.560 --> 00:01:35.719
+to run the tests because there are a lot
+
+00:01:35.720 --> 00:01:37.759
+of trans-dependencies you get with Org;
+
+00:01:37.760 --> 00:01:40.199
+for instance, with all of the various Babel libraries
+
+00:01:40.200 --> 00:01:42.599
+which actually require other packages
+
+00:01:42.600 --> 00:01:46.079
+or programming language to be installed on the system.
+
+00:01:46.080 --> 00:01:50.079
+Having a single self-contained test system
+
+00:01:50.080 --> 00:01:53.319
+to actually make sure that Org can be regularly
+
+00:01:53.320 --> 00:01:57.519
+and thoroughly tested should be a great help for actually
+
+00:01:57.520 --> 00:02:04.679
+ensuring the quality of the contributions.
+
+NOTE Funding contributors
+
+00:02:04.680 --> 00:02:07.079
+The funding structure for Org has also undergone a bit
+
+00:02:07.080 --> 00:02:10.559
+of a shift. Historically, we've just directed everybody
+
+00:02:10.560 --> 00:02:14.199
+who's interested in financially supporting the Org project
+
+00:02:14.200 --> 00:02:18.639
+to the maintainer Bastien's personal GitHub sponsors
+
+00:02:18.640 --> 00:02:22.399
+and LibrePay accounts. Now, early this year,
+
+00:02:22.400 --> 00:02:27.519
+Bastion has created the Librepay Org mode team account,
+
+00:02:27.520 --> 00:02:29.039
+which means that you can actually now
+
+00:02:29.040 --> 00:02:33.159
+support the Org project as opposed to
+
+00:02:33.160 --> 00:02:34.479
+the person leading the Org project.
+
+00:02:34.480 --> 00:02:39.159
+Currently, this just distributes donations between Bastien,
+
+00:02:39.160 --> 00:02:42.079
+Ihor, and myself. However, the idea is that
+
+00:02:42.080 --> 00:02:45.039
+as the active contributors for the Org project
+
+00:02:45.040 --> 00:02:50.839
+come and go over time, the list of people on this team
+
+00:02:50.840 --> 00:02:56.999
+can be changed as seems sensible. The hope here is that
+
+00:02:57.000 --> 00:03:00.159
+it will simplify both how easy it is
+
+00:03:00.160 --> 00:03:02.559
+to actually financially support the Org project
+
+00:03:02.560 --> 00:03:04.359
+as well as how easily people contributing
+
+00:03:04.360 --> 00:03:09.599
+to the Org project can be supported.
+
+00:03:09.600 --> 00:03:13.479
+If you're interested in supporting the Org project,
+
+00:03:13.480 --> 00:03:15.439
+there's never been a better time than now
+
+00:03:15.440 --> 00:03:16.919
+to have a look at this
+
+00:03:16.920 --> 00:03:23.159
+and let anybody who might also might be interested know.
+
+00:03:23.160 --> 00:03:25.279
+Hopefully, this leads to a healthier funding structure
+
+00:03:25.280 --> 00:03:28.199
+that will scale better into the long term
+
+00:03:28.200 --> 00:03:32.559
+and thus better support the work that happens with Org.
+
+NOTE New features
+
+00:03:32.560 --> 00:03:37.079
+Now, the project itself has of course also seen quite a bit
+
+00:03:37.080 --> 00:03:38.519
+of development over the past year.
+
+00:03:38.520 --> 00:03:44.159
+We've had about 800 comments from 80 contributors.
+
+00:03:44.160 --> 00:03:46.519
+Within these comments, there's been a lot of polishing
+
+00:03:46.520 --> 00:03:48.759
+quality-of-life improvements,
+
+00:03:48.760 --> 00:03:50.519
+and also quite a few new features.
+
+00:03:50.520 --> 00:03:52.799
+Now, I haven't got nearly enough time
+
+00:03:52.800 --> 00:03:54.159
+to go through this exhaustively,
+
+00:03:54.160 --> 00:03:58.639
+so we're just going to go through a quick highlight reel.
+
+NOTE An assortment of export improvements
+
+00:03:58.640 --> 00:04:00.239
+There's a collection of export improvements
+
+00:04:00.240 --> 00:04:04.319
+from things which affect all export backends,
+
+00:04:04.320 --> 00:04:07.319
+like including remote content
+
+00:04:07.320 --> 00:04:09.599
+and adding new things like DOI links
+
+00:04:09.600 --> 00:04:11.519
+and support for encrypted Org files,
+
+00:04:11.520 --> 00:04:14.679
+as well as a whole lot of export-backend-specific changes.
+
+00:04:14.680 --> 00:04:17.159
+For example, quite a few backends--
+
+00:04:17.160 --> 00:04:18.519
+I've mentioned the LaTeX one here,
+
+00:04:18.520 --> 00:04:23.119
+but also others such as Texinfo--have now got
+
+00:04:23.120 --> 00:04:26.799
+rich support for various types of attributes and objects.
+
+00:04:26.800 --> 00:04:31.919
+The HTML backend has had a few things boosted up and well,
+
+00:04:31.920 --> 00:04:33.519
+if you want to see the full list,
+
+00:04:33.520 --> 00:04:36.519
+just take a look at the release notes.
+
+NOTE A collection of babel improvements
+
+00:04:36.520 --> 00:04:39.319
+We've also seen a similar collection of improvements
+
+00:04:39.320 --> 00:04:43.519
+with the Babel backends. Once again, this is scattered--
+
+00:04:43.520 --> 00:04:46.519
+or well, it can be split into two sets of changes.
+
+00:04:46.520 --> 00:04:49.599
+There's some which affect all of Babel, essentially.
+
+00:04:49.600 --> 00:04:52.599
+For instance, the new syntax of parsing
+
+00:04:52.600 --> 00:04:56.479
+the raw content of code blocks, or the changes with Noweb.
+
+00:04:56.480 --> 00:05:01.919
+For example, :noweb-prefix is a new option that can be used.
+
+00:05:01.920 --> 00:05:03.239
+And then there's also a collection
+
+00:05:03.240 --> 00:05:07.439
+of backend-specific changes. So ASCII graphics with PlantUML
+
+00:05:07.440 --> 00:05:12.279
+or enhanced return capabilities with the ob-python library.
+
+NOTE A multitude of general org-mode improvements
+
+00:05:12.280 --> 00:05:17.479
+And then of course, as before, a whole collection
+
+00:05:17.480 --> 00:05:19.839
+of more changes which you can find in the release notes.
+
+00:05:19.840 --> 00:05:22.839
+Last but by no means least,
+
+00:05:22.840 --> 00:05:26.239
+there have been quite a few changes within the rest of Org.
+
+00:05:26.240 --> 00:05:30.839
+So this is, once again, far too many things to list,
+
+00:05:30.840 --> 00:05:33.759
+but it's things like improved refiling,
+
+00:05:33.760 --> 00:05:36.639
+capture templates, image preview sizing,
+
+00:05:36.640 --> 00:05:38.159
+clocktable settings, agenda tweaks,
+
+00:05:38.160 --> 00:05:41.159
+and well, a whole lot more.
+
+00:05:41.160 --> 00:05:45.039
+Yes, basically, the essence of what's here
+
+00:05:45.040 --> 00:05:47.999
+is a lot of little changes
+
+00:05:48.000 --> 00:05:50.799
+which just address particular use cases in ways
+
+00:05:50.800 --> 00:05:55.052
+that I don't think anybody's going to be seeing
+
+00:05:55.053 --> 00:05:55.786
+the impact of all of them,
+
+00:05:55.787 --> 00:05:57.559
+but I think most people should at least
+
+00:05:57.560 --> 00:06:00.119
+find one or two things
+
+00:06:00.120 --> 00:06:04.159
+which actually improve their own usage.
+
+NOTE Citations
+
+00:06:04.160 --> 00:06:06.079
+Now these are the sort of assorted
+
+00:06:06.080 --> 00:06:07.399
+relatively minor improvements,
+
+00:06:07.400 --> 00:06:09.959
+but there are also some major ones.
+
+00:06:09.960 --> 00:06:12.159
+And one in particular, citations.
+
+00:06:12.160 --> 00:06:15.879
+So I think this has been, at this point,
+
+00:06:15.880 --> 00:06:17.079
+over a decade in the making,
+
+00:06:17.080 --> 00:06:21.919
+but Org finally has first-class support for citations.
+
+00:06:21.920 --> 00:06:23.759
+And I have to say, it is marvellous.
+
+00:06:23.760 --> 00:06:27.239
+You'd hope so, after the labour. I think it is.
+
+00:06:27.240 --> 00:06:30.119
+It can be said that it's actually worth the wait.
+
+00:06:30.120 --> 00:06:31.679
+I think out of the various options you've got now,
+
+00:06:31.680 --> 00:06:34.279
+(for example, the way that Pandoc
+
+00:06:34.280 --> 00:06:35.599
+and Markdown otherwise[??] do it)
+
+00:06:35.600 --> 00:06:40.519
+Org has a fantastically succinct and flexible
+
+00:06:40.520 --> 00:06:45.959
+syntax for citations, which scales really well for all sorts
+
+00:06:45.960 --> 00:06:47.199
+of different use cases.
+
+00:06:47.200 --> 00:06:51.159
+Additionally, on the backend side of things,
+
+00:06:51.160 --> 00:06:55.359
+we've now got a generalised way for handling citations
+
+00:06:55.360 --> 00:06:57.839
+which has been quite helpful for the--I think
+
+00:06:57.840 --> 00:07:00.359
+I could say rather rapid development
+
+00:07:00.360 --> 00:07:03.279
+of multiple citation backends for Org.
+
+00:07:03.280 --> 00:07:07.639
+And I think it's just fantastic, really, seeing
+
+00:07:07.640 --> 00:07:09.839
+how quickly Org has gone
+
+00:07:09.840 --> 00:07:12.239
+from having no support for citations
+
+00:07:12.240 --> 00:07:13.239
+at the start of this year
+
+00:07:13.240 --> 00:07:17.559
+to what can be described as
+
+00:07:17.560 --> 00:07:20.199
+a wonderfully rich and flexible support
+
+00:07:20.200 --> 00:07:23.559
+with, well, multiple backends for citations.
+
+00:07:23.560 --> 00:07:27.519
+I think that's something that we can really be proud of.
+
+00:07:27.520 --> 00:07:30.039
+And it's been a fantastic contribution
+
+00:07:30.040 --> 00:07:31.599
+for everybody involved in this process.
+
+NOTE Quality of life improvements
+
+00:07:31.600 --> 00:07:36.119
+Okay, so we've had features.
+
+00:07:36.120 --> 00:07:38.039
+There have also been a whole lot of
+
+00:07:38.040 --> 00:07:39.559
+quality of life improvements.
+
+00:07:39.560 --> 00:07:43.479
+Once again, many more than I can reasonably mention here.
+
+00:07:43.480 --> 00:07:46.079
+So I'm just going to flick it through
+
+00:07:46.080 --> 00:07:48.319
+a few of them. A few big ones though,
+
+NOTE Org fold
+
+00:07:48.320 --> 00:07:52.519
+Ihor is responsible for three lovely developments with Org,
+
+00:07:52.520 --> 00:07:55.119
+one of which is Org fold. So this is a generalisation
+
+00:07:55.120 --> 00:07:57.239
+of the way that content is folded in Org.
+
+00:07:57.240 --> 00:08:00.679
+And I think quite a few of you will actually underestimate
+
+00:08:00.680 --> 00:08:01.679
+how much can be folded in Org.
+
+00:08:01.680 --> 00:08:03.039
+It's not just a matter of headlines.
+
+00:08:03.040 --> 00:08:07.919
+It's headlines, code blocks, lists, environments,
+
+00:08:07.920 --> 00:08:10.519
+all sorts of things can actually be folded in Org.
+
+00:08:10.520 --> 00:08:14.679
+And the introduction of Org fold is important
+
+00:08:14.680 --> 00:08:18.919
+for two reasons. One is that it has allowed for
+
+00:08:18.920 --> 00:08:21.479
+text-property-based folding,
+
+00:08:21.480 --> 00:08:24.479
+which in Emacs versions less than 29
+
+00:08:24.480 --> 00:08:27.719
+has a huge difference in performance,
+
+00:08:27.720 --> 00:08:29.959
+which is particularly apparent with larger files.
+
+00:08:29.960 --> 00:08:32.639
+The second significant thing about this is that
+
+00:08:32.640 --> 00:08:36.479
+it now actually provides a more general way
+
+00:08:36.480 --> 00:08:39.879
+to actually describe changes to the folding structure.
+
+00:08:39.880 --> 00:08:42.559
+So before there was direct modification of
+
+00:08:42.560 --> 00:08:45.959
+messing with overlays scattered around the Org code base.
+
+00:08:45.960 --> 00:08:49.399
+Now we have a much more well organised system
+
+00:08:49.400 --> 00:08:53.319
+where we use Org fold to say what is and isn't folded
+
+00:08:53.320 --> 00:08:54.799
+and to manage the state of all of that,
+
+00:08:54.800 --> 00:08:59.239
+which is, I think, just from a sort of design,
+
+00:08:59.240 --> 00:09:02.479
+sort of project design approach, a much better system.
+
+NOTE Org element cache
+
+00:09:02.480 --> 00:09:06.599
+We've also got the Org element cache by Ihor.
+
+00:09:06.600 --> 00:09:09.239
+This is actually something which was discussed
+
+00:09:09.240 --> 00:09:12.039
+quite a while ago, but has somewhat stalled
+
+00:09:12.040 --> 00:09:14.679
+due to the difficulty of cache invalidation.
+
+00:09:14.680 --> 00:09:17.279
+Ihor has sunk a tremendous amount of effort into this
+
+00:09:17.280 --> 00:09:19.759
+and has improved it to the point
+
+00:09:19.760 --> 00:09:21.799
+where we've now actually been able to
+
+00:09:21.800 --> 00:09:25.639
+enable this by default. So what this basically does is
+
+00:09:25.640 --> 00:09:27.999
+it records lots of information
+
+00:09:28.000 --> 00:09:30.159
+about the structure of the Org document
+
+00:09:30.160 --> 00:09:34.119
+and allows for, well, with the appropriate modifications
+
+00:09:34.120 --> 00:09:37.359
+that Ihor has also made throughout the Org element library
+
+00:09:37.360 --> 00:09:41.559
+to use this information to speed up various operations
+
+00:09:41.560 --> 00:09:44.879
+based on the Org document syntax tree.
+
+00:09:44.880 --> 00:09:48.279
+And so this has been quite--
+
+00:09:48.280 --> 00:09:49.839
+the improvements have been scattered all over the place,
+
+00:09:49.840 --> 00:09:52.719
+but for a good example for libraries
+
+00:09:52.720 --> 00:09:57.719
+or anybody who's wanting to quickly map over Org elements
+
+00:09:57.720 --> 00:10:00.639
+is `org-element-cache-map', which now provides
+
+00:10:00.640 --> 00:10:04.559
+a much, much faster way to map over
+
+00:10:04.560 --> 00:10:07.359
+all of the Org elements in a document.
+
+NOTE Org persist
+
+00:10:07.360 --> 00:10:10.799
+This also ties into the third major feature from Ihor
+
+00:10:10.800 --> 00:10:13.919
+which I'd like to mention, which is Org persist.
+
+00:10:13.920 --> 00:10:17.959
+So this provides a method of persisting values
+
+00:10:17.960 --> 00:10:20.279
+across Emacs sessions, basically saving them
+
+00:10:20.280 --> 00:10:21.799
+to a file somewhere and loading them.
+
+00:10:21.800 --> 00:10:25.719
+Now this works for Elisp values and it also works for files,
+
+00:10:25.720 --> 00:10:29.679
+which we made use of with the improved capabilities
+
+00:10:29.680 --> 00:10:32.479
+for remote files and exports.
+
+00:10:32.480 --> 00:10:35.799
+This has also been used with the `org-element-cache' data.
+
+00:10:35.800 --> 00:10:37.479
+So now, if you've got a massive Org file
+
+00:10:37.480 --> 00:10:41.159
+and you open it once, that data can be saved to
+
+00:10:41.160 --> 00:10:44.319
+with the Org element cache to Org persist,
+
+00:10:44.320 --> 00:10:46.679
+and the next time you load this file
+
+00:10:46.680 --> 00:10:47.919
+in another Emacs session,
+
+00:10:47.920 --> 00:10:50.959
+we can just start with the cached data
+
+00:10:50.960 --> 00:10:53.119
+instead of having to construct everything from scratch,
+
+00:10:53.120 --> 00:10:56.439
+which is quite nice. Once again, a change which
+
+00:10:56.440 --> 00:10:57.719
+much like the other ones,
+
+00:10:57.720 --> 00:11:00.359
+we will see more of an impact in larger files,
+
+00:11:00.360 --> 00:11:02.719
+but a very welcome one everywhere.
+
+NOTE More careful resource downloading
+
+00:11:02.720 --> 00:11:06.799
+Now with remote files, there's also been the beginnings
+
+00:11:06.800 --> 00:11:09.239
+of a bit of an effort with Org
+
+00:11:09.240 --> 00:11:13.119
+to improve the approach we have to safety.
+
+00:11:13.120 --> 00:11:14.999
+So in this case previously,
+
+00:11:15.000 --> 00:11:17.639
+Org would unconditionally download
+
+00:11:17.640 --> 00:11:19.559
+all the remotes of files that's all referenced.
+
+00:11:19.560 --> 00:11:23.759
+And now, it's actually going to maintain a list of
+
+00:11:23.760 --> 00:11:25.519
+sort of safe resources and prompt you
+
+00:11:25.520 --> 00:11:26.639
+when it's surprised by something,
+
+00:11:26.640 --> 00:11:29.886
+to work out whether it should
+
+00:11:29.887 --> 00:11:31.839
+just download this one resource,
+
+00:11:31.840 --> 00:11:35.279
+mark the whole domain as safe, and a few other options.
+
+00:11:35.280 --> 00:11:36.759
+We're also going to probably see
+
+00:11:36.760 --> 00:11:39.079
+a similar approach extend to, for instance,
+
+00:11:39.080 --> 00:11:40.199
+bits of Babel execution in the future.
+
+NOTE Bug fixes
+
+00:11:40.200 --> 00:11:45.359
+Okay bug fixes. It will be remiss of me not to mention that
+
+00:11:45.360 --> 00:11:46.919
+along with all of the features
+
+00:11:46.920 --> 00:11:49.359
+and quality of life improvements,
+
+00:11:49.360 --> 00:11:51.879
+there has been a huge pile of bug fixes.
+
+00:11:51.880 --> 00:11:57.319
+I think the best way to actually get a look at this
+
+00:11:57.320 --> 00:11:59.039
+would be to look at the release notes
+
+00:11:59.040 --> 00:12:00.599
+or maybe even the actual commit log,
+
+00:12:00.600 --> 00:12:04.119
+but you could also just take my word and say that
+
+00:12:04.120 --> 00:12:05.639
+there have been a whole load of them
+
+00:12:05.640 --> 00:12:11.599
+over the past year. So just yes, the code base, I think,
+
+00:12:11.600 --> 00:12:15.799
+is just gradually getting into better and better shape.
+
+NOTE Asynchronous session evaluation
+
+00:12:15.800 --> 00:12:18.199
+Asynchronous session evaluation is I think possibly
+
+00:12:18.200 --> 00:12:19.679
+the final quality-of-life improvement
+
+00:12:19.680 --> 00:12:22.119
+I want to mention. This came early in the year,
+
+00:12:22.120 --> 00:12:24.639
+just with ob-python, and it's been delayed
+
+00:12:24.640 --> 00:12:26.479
+because in order to actually make it work,
+
+00:12:26.480 --> 00:12:29.399
+they've required some fundamental changes to the way
+
+00:12:29.400 --> 00:12:31.079
+that ob-comint works.
+
+00:12:31.080 --> 00:12:33.599
+Now that's been implemented,
+
+00:12:33.600 --> 00:12:36.679
+we've since seen support extended to ob-R,
+
+00:12:36.680 --> 00:12:38.719
+and hopefully, we'll see more languages join this list
+
+00:12:38.720 --> 00:12:42.799
+in the not-too-distant future.
+
+NOTE Nicer tangle mode syntax
+
+00:12:42.800 --> 00:12:45.799
+Now I guess one bonus which I tacked on just for fun is
+
+00:12:45.800 --> 00:12:47.639
+it's now more convenient than ever
+
+00:12:47.640 --> 00:12:52.039
+to actually specify the permissions for tangled files.
+
+00:12:52.040 --> 00:12:54.999
+Previously you had to give a list expression
+
+00:12:55.000 --> 00:12:55.839
+which should be evaluated.
+
+00:12:55.840 --> 00:12:58.319
+Now you can give it directly in octal form
+
+00:12:58.320 --> 00:12:59.719
+instead of being a list expression
+
+00:12:59.720 --> 00:13:01.959
+that produces an integer representation
+
+00:13:01.960 --> 00:13:03.639
+of the octal permissions.
+
+00:13:03.640 --> 00:13:08.439
+Or you can use ls style: rwx and dashes.
+
+00:13:08.440 --> 00:13:13.079
+Or even just chmod. I want to be able to execute this
+
+00:13:13.080 --> 00:13:16.386
+as a user, which will basically modify
+
+00:13:16.387 --> 00:13:18.279
+the default permission to add that capability.
+
+NOTE A flourishing ecosystem
+
+00:13:18.280 --> 00:13:22.679
+Alrighty. So that's the Org project itself,
+
+00:13:22.680 --> 00:13:24.799
+but there's also a whole ecosystem.
+
+00:13:24.800 --> 00:13:27.439
+So what have we got here?
+
+00:13:27.440 --> 00:13:30.319
+Well a whole bunch of Zettelkasten
+
+00:13:30.320 --> 00:13:32.599
+or personal-knowledge-base-type projects.
+
+00:13:32.600 --> 00:13:36.239
+One of which is logseq, so that's an online open source
+
+00:13:36.240 --> 00:13:39.639
+Zettelkasten which supports both Markdown
+
+00:13:39.640 --> 00:13:41.799
+and also Org mode as a first-class format.
+
+00:13:41.800 --> 00:13:45.599
+Then of course we have Org Roam, which provides
+
+00:13:45.600 --> 00:13:48.879
+a Zettelkasten built directly on top of Org within Emacs.
+
+00:13:48.880 --> 00:13:51.639
+Both of these are seen considerably interesting
+
+00:13:51.640 --> 00:13:52.599
+over the past year.
+
+NOTE Org-modern
+
+00:13:52.600 --> 00:13:56.799
+Moving on to visuals, minad has produced
+
+00:13:56.800 --> 00:14:00.439
+another lovely minad package in the form of org-modern
+
+00:14:00.440 --> 00:14:04.559
+which just spruces up the visuals of all documents
+
+00:14:04.560 --> 00:14:09.519
+and seems to have been quite well received recently
+
+00:14:09.520 --> 00:14:10.119
+since its release.
+
+NOTE citeproc-org
+
+00:14:10.120 --> 00:14:13.159
+Building on top of the citations from earlier,
+
+00:14:13.160 --> 00:14:14.559
+Andras Simonyi has produced
+
+00:14:14.560 --> 00:14:16.559
+the wonderful citeproc-org library,
+
+00:14:16.560 --> 00:14:20.799
+which, if you're not familiar,
+
+00:14:20.800 --> 00:14:24.999
+allows the capabilities of the citation style language
+
+00:14:25.000 --> 00:14:26.639
+which has now become something
+
+00:14:26.640 --> 00:14:27.999
+which is quite widely supported
+
+00:14:28.000 --> 00:14:31.079
+to be used for Org citation exports.
+
+00:14:31.080 --> 00:14:33.799
+This means that you've got access to I think at this point
+
+00:14:33.800 --> 00:14:35.799
+is it thousands or tens of thousands
+
+00:14:35.800 --> 00:14:39.879
+of different bibliography and citation formats
+
+00:14:39.880 --> 00:14:42.919
+which is obviously a huge boon to org citations.
+
+00:14:42.920 --> 00:14:46.559
+Lastly, just to be slightly critical,
+
+00:14:46.560 --> 00:14:49.519
+I'm actually going to mention the Neovim Org mode project,
+
+00:14:49.520 --> 00:14:52.079
+because I think this really shows the interest
+
+00:14:52.080 --> 00:14:55.359
+in Org as the format, beyond just Emacs.
+
+00:14:55.360 --> 00:14:58.239
+I think I haven't gone into it much here,
+
+00:14:58.240 --> 00:15:00.919
+but there's been quite a lot of development
+
+00:15:00.920 --> 00:15:04.559
+with external tools making use of the Org format.
+
+00:15:04.560 --> 00:15:07.519
+Clearly, we've done quite a few things right,
+
+00:15:07.520 --> 00:15:11.599
+and so I think it's interesting to see the interest
+
+00:15:11.600 --> 00:15:13.319
+that exists outside of Emacs,
+
+00:15:13.320 --> 00:15:15.239
+even without all the lovely tooling we've built,
+
+00:15:15.240 --> 00:15:18.599
+just out of appreciation of the formatting, its potential.
+
+00:15:18.600 --> 00:15:21.079
+Speaking of the format, though,
+
+00:15:21.080 --> 00:15:24.159
+we've also seen three new parsers on the scene this year.
+
+00:15:24.160 --> 00:15:27.359
+We've got one in Julia, Haskell
+
+00:15:27.360 --> 00:15:28.599
+and another one for Tree sitter.
+
+00:15:28.600 --> 00:15:30.999
+The last one, I think, is currently the least capable,
+
+00:15:31.000 --> 00:15:32.479
+but also potentially the most interesting
+
+00:15:32.480 --> 00:15:36.959
+in terms of what possibilities it allows for.
+
+00:15:36.960 --> 00:15:42.079
+Okay. So that's a quick speed run through
+
+00:15:42.080 --> 00:15:44.039
+some of the developments over the past year.
+
+NOTE Continuing work on the Org format
+
+00:15:44.040 --> 00:15:47.959
+What's coming next? So there's been
+
+00:15:47.960 --> 00:15:50.999
+quite a lot of work done with the Org syntax document.
+
+00:15:51.000 --> 00:15:54.199
+In fact, I've completely written it,
+
+00:15:54.200 --> 00:15:57.239
+and we've now taken it up to spec
+
+00:15:57.240 --> 00:15:59.799
+to actually accurately describe the way
+
+00:15:59.800 --> 00:16:03.199
+that the Org format is, as of Org 9.6.
+
+00:16:03.200 --> 00:16:08.079
+Now, I think this is quite an important document
+
+00:16:08.080 --> 00:16:09.799
+for the growth in parsing tools
+
+00:16:09.800 --> 00:16:11.279
+to help actually ensure
+
+00:16:11.280 --> 00:16:16.439
+that the way that external tools process Org
+
+00:16:16.440 --> 00:16:20.079
+is actually in sync with the way that Org mode does.
+
+00:16:20.080 --> 00:16:22.559
+I think it's worth doing everything we can, really,
+
+00:16:22.560 --> 00:16:24.839
+to avoid the sort of implementation drift
+
+00:16:24.840 --> 00:16:27.719
+that we've seen with Markdown.
+
+00:16:27.720 --> 00:16:29.839
+I don't want anything near that.
+
+00:16:29.840 --> 00:16:32.486
+This is also quite good for the Org format itself because,
+
+00:16:32.487 --> 00:16:34.479
+in the process of going through this sort of effort,
+
+00:16:34.480 --> 00:16:38.199
+it brings attention to irregularities in the syntax
+
+00:16:38.200 --> 00:16:41.519
+which you might want to resolve, and as well as
+
+00:16:41.520 --> 00:16:43.919
+helping the robustness of org mode itself.
+
+00:16:43.920 --> 00:16:46.279
+So ultimately, this is to everybody's benefit, really.
+
+00:16:46.280 --> 00:16:51.799
+It's also my personal hope that this might actually
+
+00:16:51.800 --> 00:16:54.879
+get to the point where we consider submitting this
+
+00:16:54.880 --> 00:16:59.039
+as a text format to the Internet Engineering Task Force
+
+00:16:59.040 --> 00:17:06.319
+as a new text format. So that would be quite nice.
+
+NOTE Mailing list management
+
+00:17:06.320 --> 00:17:09.639
+The Org project itself has a layer on top
+
+00:17:09.640 --> 00:17:13.679
+of the mailing list called Woof developed by Bastien,
+
+00:17:13.680 --> 00:17:16.119
+and that's about to have another major release.
+
+00:17:16.120 --> 00:17:21.359
+So what this is going to do is improve the ease of which
+
+00:17:21.360 --> 00:17:23.319
+we can actually monitor what's going on
+
+00:17:23.320 --> 00:17:27.079
+with the mailing list. So this is when people have patches,
+
+00:17:27.080 --> 00:17:29.599
+bug reports, or other types of things
+
+00:17:29.600 --> 00:17:30.519
+raised on the mailing list.
+
+00:17:30.520 --> 00:17:34.039
+It's a nice way to collect the status of those
+
+00:17:34.040 --> 00:17:35.039
+and put them all in one place.
+
+00:17:35.040 --> 00:17:37.879
+So improvements to this improve the ease of which
+
+00:17:37.880 --> 00:17:40.399
+the Org mode project can be managed,
+
+00:17:40.400 --> 00:17:41.919
+which is always quite nice to see.
+
+NOTE Further engraving
+
+00:17:41.920 --> 00:17:46.319
+There's also been--jumping back to the export
+
+00:17:46.320 --> 00:17:48.359
+which is mentioned right at the start of this presentation--
+
+00:17:48.360 --> 00:17:51.839
+we've got the introduction of engraved faces
+
+00:17:51.840 --> 00:17:54.479
+to LaTeX export. Now what's quite interesting about this
+
+00:17:54.480 --> 00:17:57.599
+is that it's actually used as Emacs' native font lock
+
+00:17:57.600 --> 00:18:01.239
+and allows for processing that in a generalized way
+
+00:18:01.240 --> 00:18:03.839
+to different output formats. So at the moment,
+
+00:18:03.840 --> 00:18:06.919
+this is just integrated with ox-latex,
+
+00:18:06.920 --> 00:18:11.199
+but it contains the functionality needed for HTML and ASCII,
+
+00:18:11.200 --> 00:18:13.719
+and it could also be extended to other formats like ODT.
+
+00:18:13.720 --> 00:18:18.279
+So we could potentially have full syntax highlighting
+
+00:18:18.280 --> 00:18:20.959
+based on Emacs exported to, well,
+
+00:18:20.960 --> 00:18:24.199
+really all of the Org mode backends,
+
+00:18:24.200 --> 00:18:27.359
+except, I suppose, the plain text ones like Markdown.
+
+00:18:27.360 --> 00:18:29.759
+And I think from both the capabilities perspective--
+
+00:18:29.760 --> 00:18:33.039
+because I think, really, font lock in Emacs
+
+00:18:33.040 --> 00:18:34.199
+from Emacs major modes
+
+00:18:34.200 --> 00:18:37.159
+tends to blow basically everything else vaguely used
+
+00:18:37.160 --> 00:18:39.239
+out of the water, whether it be listings, minted
+
+00:18:39.240 --> 00:18:44.999
+or other efforts--and also from a consistency point of view,
+
+00:18:45.000 --> 00:18:49.719
+this could be quite a nice development.
+
+00:18:49.720 --> 00:18:51.119
+Alrighty. Now this talk is "This Year in Org,"
+
+00:18:51.120 --> 00:18:52.599
+and I think you all may have guessed
+
+00:18:52.600 --> 00:18:57.759
+this is very much tied into my work with This Month in Org
+
+00:18:57.760 --> 00:19:00.119
+which started, I think, a bit over a year ago.
+
+00:19:00.120 --> 00:19:04.919
+And so, as you're all avid readers,
+
+00:19:04.920 --> 00:19:05.919
+I'm sure you've noticed
+
+00:19:05.920 --> 00:19:08.519
+that there haven't been as many posts as of late.
+
+00:19:08.520 --> 00:19:11.879
+Now this isn't because my interest in This Month in Org
+
+00:19:11.880 --> 00:19:15.879
+has been diminishing. Simply, it's the consequence
+
+00:19:15.880 --> 00:19:18.759
+of an evaporation of my free time.
+
+00:19:18.760 --> 00:19:22.359
+However, This Month in Org is still going to stick around.
+
+00:19:22.360 --> 00:19:26.159
+The only change really is that the title is going to be--
+
+00:19:26.160 --> 00:19:27.999
+probably continue to be
+
+00:19:28.000 --> 00:19:30.039
+a bit more aspirational than descriptive
+
+00:19:30.040 --> 00:19:32.959
+in the near future. We'll see how this goes.
+
+00:19:32.960 --> 00:19:36.719
+Well, thanks for listening to this overview
+
+00:19:36.720 --> 00:19:38.599
+of the state of Org at the moment,
+
+00:19:38.600 --> 00:19:51.880
+and hopefully, I'll see you next year.
diff --git a/2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt b/2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt
new file mode 100644
index 00000000..21f8c560
--- /dev/null
+++ b/2022/captions/emacsconf-2022-python--short-hyperlinks-to-python-docs--eduardo-ochs--main.vtt
@@ -0,0 +1,852 @@
+WEBVTT captioned by eduardo
+Kind: captions:
+Language: en-GB
+
+00:00:00.000 --> 00:00:04.000
+Hi! My name is Eduardo Ochs. I'm the author
+
+00:00:04.000 --> 00:00:06.000
+of an Emacs package called eev...
+
+00:00:06.000 --> 00:00:10.000
+and eev is about taking executable notes
+
+00:00:10.000 --> 00:00:13.000
+of everything that you do, and this
+
+00:00:13.000 --> 00:00:16.000
+presentation is about how I use this...
+
+00:00:16.000 --> 00:00:18.000
+how I finally found a way to take
+
+00:00:18.000 --> 00:00:22.000
+executable notes of what the python docs
+
+00:00:22.000 --> 00:00:23.000
+say.
+
+00:00:23.000 --> 00:00:28.000
+Let me explain that in another way. I've
+
+00:00:28.000 --> 00:00:31.000
+try to Learn Python many times, but
+
+00:00:31.000 --> 00:00:34.000
+hm, my brain is wired in a weird way, so
+
+00:00:34.000 --> 00:00:37.000
+it didn't work... and finally a few
+
+00:00:37.000 --> 00:00:40.000
+months ago I found a way of studying
+
+00:00:40.000 --> 00:00:44.000
+Python that finally clicked for me.
+
+00:00:44.000 --> 00:00:47.000
+The idea is that... well, it's here in
+
+00:00:47.000 --> 00:00:50.000
+the title - is a way to create short
+
+00:00:50.000 --> 00:00:52.000
+hyperlinks to the
+
+00:00:52.000 --> 00:00:54.000
+documentation of python.
+
+00:00:54.000 --> 00:00:56.000
+Here's an example.
+
+00:00:56.000 --> 00:01:00.000
+This file contains some some chunks
+
+00:01:00.000 --> 00:01:03.000
+of code from the Python tutorial and
+
+00:01:03.000 --> 00:01:05.000
+some links to the places in which
+
+00:01:05.000 --> 00:01:07.000
+I found these chunks of code.
+
+00:01:07.000 --> 00:01:12.000
+for example, if I run this link here
+
+00:01:12.000 --> 00:01:14.000
+it opens a certain page of the Python
+
+00:01:14.000 --> 00:01:18.000
+tutorial in my browser - note that it
+
+00:01:18.000 --> 00:01:19.000
+opens the local copy of the
+
+00:01:19.000 --> 00:01:22.000
+documentation -
+
+00:01:22.000 --> 00:01:25.000
+and if I
+
+00:01:25.000 --> 00:01:29.000
+run this link here it opens the source
+
+00:01:29.000 --> 00:01:30.000
+in .rst
+
+00:01:30.000 --> 00:01:34.000
+of the same page. So the first link opens
+
+00:01:34.000 --> 00:01:37.000
+the HTML and this one opens the
+
+00:01:37.000 --> 00:01:39.000
+RST. This is useful because in the
+
+00:01:39.000 --> 00:01:40.000
+beginning
+
+00:01:40.000 --> 00:01:44.000
+I was copying these chunks of code in
+
+00:01:44.000 --> 00:01:46.000
+the obvious way - I would simply
+
+00:01:46.000 --> 00:01:50.000
+visit the the documentation in HTML and
+
+00:01:50.000 --> 00:01:51.000
+I would mark
+
+00:01:51.000 --> 00:01:54.000
+a chunk... a snippet of code here and I
+
+00:01:54.000 --> 00:01:58.000
+would copy it to my notes.
+
+00:01:58.000 --> 00:02:01.000
+And then after a while I
+
+00:02:01.000 --> 00:02:03.000
+realized that it was much easier to
+
+00:02:03.000 --> 00:02:07.000
+simply go to the RST sources and to copy
+
+00:02:07.000 --> 00:02:10.000
+the chunks of code from there... and
+
+00:02:10.000 --> 00:02:14.000
+note that these links look quite similar.
+
+00:02:14.000 --> 00:02:17.000
+There's one difference here, that is
+
+00:02:17.000 --> 00:02:20.000
+this `r` that is prepended to the name
+
+00:02:20.000 --> 00:02:23.000
+of the function... the `r` means
+
+00:02:23.000 --> 00:02:26.000
+"open the RST"...
+
+00:02:26.000 --> 00:02:30.000
+and if I use the suffix `w` it means
+
+00:02:30.000 --> 00:02:32.000
+use the documentation on the web instead
+
+00:02:32.000 --> 00:02:34.000
+of using the local copy.
+
+00:02:34.000 --> 00:02:36.000
+So this one
+
+00:02:36.000 --> 00:02:38.000
+opens a local copy
+
+00:02:38.000 --> 00:02:42.000
+and this one
+
+00:02:42.000 --> 00:02:46.000
+takes a while
+
+00:02:46.000 --> 00:02:49.000
+and opens the
+
+00:02:49.000 --> 00:02:52.000
+the page of the documentation in the
+
+00:02:52.000 --> 00:02:56.000
+site of Python blah blah...
+
+00:02:56.000 --> 00:02:58.000
+and this thing here is
+
+00:02:58.000 --> 00:03:02.000
+executable in the usual eev sense, that
+
+00:03:02.000 --> 00:03:05.000
+we ca... if we type f8 several times here
+
+00:03:05.000 --> 00:03:08.000
+the f8s on the lines that start
+
+00:03:08.000 --> 00:03:12.000
+with red stars create a target buffer
+
+00:03:12.000 --> 00:03:14.000
+here... and in this case it creates a
+
+00:03:14.000 --> 00:03:17.000
+target buffer running Python, and if I
+
+00:03:17.000 --> 00:03:20.000
+type f8 on these other lines these are
+
+00:03:20.000 --> 00:03:23.000
+the lines are sent
+
+00:03:23.000 --> 00:03:25.000
+to that REPL.
+
+00:03:25.000 --> 00:03:30.000
+But anyway, let me go back.
+
+00:03:30.000 --> 00:03:32.000
+Most of the things that I'm going to
+
+00:03:32.000 --> 00:03:35.000
+present here are in the tutorial of this...
+
+00:03:35.000 --> 00:03:37.000
+package...
+
+00:03:37.000 --> 00:03:41.000
+we can go to the source code
+
+00:03:41.000 --> 00:03:44.000
+here in the eev directory - it's a file
+
+00:03:44.000 --> 00:03:50.000
+called eev-rstdoc.el but the best
+
+00:03:50.000 --> 00:03:53.000
+docs are in the tutorial, here...
+
+00:03:53.000 --> 00:03:56.000
+and the tutorial also has some
+
+00:03:56.000 --> 00:03:58.000
+executable
+
+00:03:58.000 --> 00:04:02.000
+chunks... some snippets of python
+
+00:04:02.000 --> 00:04:05.000
+code that are executable, but they
+
+00:04:05.000 --> 00:04:07.000
+don't have those nice colors... so
+
+00:04:07.000 --> 00:04:11.000
+apologies for that.
+
+00:04:11.000 --> 00:04:13.000
+We need to run this thing here to make
+
+00:04:13.000 --> 00:04:15.000
+everything work.
+
+00:04:15.000 --> 00:04:17.000
+This thing will define some functions
+
+00:04:17.000 --> 00:04:19.000
+with funny names that I will
+
+00:04:19.000 --> 00:04:26.000
+explain later.
+
+00:04:26.000 --> 00:04:30.000
+Let me explain something new.
+
+00:04:30.000 --> 00:04:35.000
+let's compare all these
+
+00:04:35.000 --> 00:04:38.000
+links here. They take this argument
+
+00:04:38.000 --> 00:04:41.000
+here and they expand the the argument in
+
+00:04:41.000 --> 00:04:44.000
+a certain way. For example this string is
+
+00:04:44.000 --> 00:04:49.000
+expanded to this long URL here... note that
+
+00:04:49.000 --> 00:04:52.000
+it got a prefix here,
+
+00:04:52.000 --> 00:04:56.000
+that's quite long... it got the .html here,
+
+00:04:56.000 --> 00:04:59.000
+and then the hash and the anchor here...
+
+00:04:59.000 --> 00:05:03.000
+and each one of the functions in the
+
+00:05:03.000 --> 00:05:06.000
+pydoc family expands this
+
+00:05:06.000 --> 00:05:09.000
+argument in a different way.
+
+00:05:09.000 --> 00:05:12.000
+The one that that opens the doc in the
+
+00:05:12.000 --> 00:05:16.000
+web uses another prefix -
+
+00:05:16.000 --> 00:05:20.000
+this one - and the one that opens the rst
+
+00:05:20.000 --> 00:05:24.000
+file ignores the part after the hash
+
+00:05:24.000 --> 00:05:28.000
+for technical reasons... I was never
+
+00:05:28.000 --> 00:05:30.000
+able to to find a good way to convert
+
+00:05:30.000 --> 00:05:33.000
+this hash into a string to search for,
+
+00:05:33.000 --> 00:05:35.000
+so to make something that goes to
+
+00:05:35.000 --> 00:05:38.000
+the right section in the link to the rst
+
+00:05:38.000 --> 00:05:42.000
+doc I have to convert by hand, and by
+
+00:05:42.000 --> 00:05:46.000
+trial and error, this thing here into a
+
+00:05:46.000 --> 00:05:48.000
+pointer to that section, like
+
+00:05:48.000 --> 00:05:50.000
+this one...
+
+00:05:50.000 --> 00:05:55.000
+in which the "_numeric-types:"
+
+00:05:55.000 --> 00:05:58.000
+is here.
+
+00:05:58.000 --> 00:06:02.000
+So all these links here are based on
+
+00:06:02.000 --> 00:06:04.000
+expansion, and this is easy to
+
+00:06:04.000 --> 00:06:05.000
+understand...
+
+00:06:05.000 --> 00:06:08.000
+but suppose that I want to
+
+00:06:08.000 --> 00:06:11.000
+create a link like this, or suppose that
+
+00:06:11.000 --> 00:06:16.000
+I'm browsing the docs here
+
+00:06:16.000 --> 00:06:21.000
+and I just I follow some some links...
+
+00:06:21.000 --> 00:06:31.000
+let me do something random here...
+
+00:06:31.000 --> 00:06:34.000
+suppose that I decide that this
+
+00:06:34.000 --> 00:06:35.000
+section is very interesting. How can I
+
+00:06:35.000 --> 00:06:39.000
+create a link to that? I can
+
+00:06:39.000 --> 00:06:44.000
+use this pilcrow symbol and the
+
+00:06:44.000 --> 00:06:45.000
+"Copy link address",
+
+00:06:45.000 --> 00:06:49.000
+and copy the link to
+
+00:06:49.000 --> 00:06:51.000
+my notes...
+
+00:06:51.000 --> 00:06:55.000
+and then the Python family...
+
+00:06:55.000 --> 00:06:58.000
+well, we saw the the functions in the
+
+00:06:58.000 --> 00:07:00.000
+Python family have a certain way - have
+
+00:07:00.000 --> 00:07:03.000
+several ways of expanding these
+
+00:07:03.000 --> 00:07:06.000
+short arguments... and they also have a
+
+00:07:06.000 --> 00:07:07.000
+certain way of
+
+00:07:07.000 --> 00:07:11.000
+shortening URLs like this one. If I type
+
+00:07:11.000 --> 00:07:12.000
+`M-x pdk` the message is this one.
+
+00:07:12.000 --> 00:07:17.000
+`pdk` is a mnemonic for
+
+00:07:17.000 --> 00:07:20.000
+"Python doc kill", and this
+
+00:07:20.000 --> 00:07:23.000
+"kill" means "copy to the kill ring"
+
+00:07:23.000 --> 00:07:27.000
+so if I type `M-x pdk` here it
+
+00:07:27.000 --> 00:07:31.000
+considers that this thing is a link
+
+00:07:31.000 --> 00:07:34.000
+to the python Docs, and it
+
+00:07:34.000 --> 00:07:36.000
+shortens this link in a certain way, and
+
+00:07:36.000 --> 00:07:42.000
+it kills a short link.
+
+00:07:42.000 --> 00:07:45.000
+I can insert the short link with C-y
+
+00:07:45.000 --> 00:07:46.000
+(yank)
+
+00:07:46.000 --> 00:07:49.000
+and then I can test this link to be sure
+
+00:07:49.000 --> 00:07:52.000
+that it points to where I want, and
+
+00:07:52.000 --> 00:07:55.000
+then I can delete this thing, and ta-da,
+
+00:07:55.000 --> 00:07:57.000
+now I have a short link, and of course I
+
+00:07:57.000 --> 00:08:00.000
+can modify this link by adding a suffix
+
+00:08:00.000 --> 00:08:02.000
+here...
+
+00:08:02.000 --> 00:08:06.000
+and in this case here
+
+00:08:06.000 --> 00:08:09.000
+I will have to change the identifier
+
+00:08:09.000 --> 00:08:12.000
+to something else...
+
+00:08:12.000 --> 00:08:18.000
+but I'm not going to do that now.
+
+00:08:18.000 --> 00:08:20.000
+This module of eev comes with three
+
+00:08:20.000 --> 00:08:24.000
+families predefined. One is a family that
+
+00:08:24.000 --> 00:08:26.000
+points to the the documentation of
+
+00:08:26.000 --> 00:08:28.000
+Python itself, another one points the
+
+00:08:28.000 --> 00:08:30.000
+documentation of SymPy, that is a program
+
+00:08:30.000 --> 00:08:34.000
+for symbolic computation, like for doing
+
+00:08:34.000 --> 00:08:37.000
+mathematics equations...
+
+00:08:37.000 --> 00:08:40.000
+and the other one points to the
+
+00:08:40.000 --> 00:08:43.000
+documentation of MatPlotLib.
+
+00:08:43.000 --> 00:08:47.000
+How do these families work?
+
+00:08:47.000 --> 00:08:51.000
+Each family has to be defined in two
+
+00:08:51.000 --> 00:08:53.000
+parts.
+
+00:08:53.000 --> 00:08:55.000
+Remember that
+
+00:08:55.000 --> 00:08:58.000
+eev has lots of functions
+
+00:08:58.000 --> 00:09:03.000
+like this one... this one
+
+00:09:03.000 --> 00:09:06.000
+is the most basic, and it is explained
+
+00:09:06.000 --> 00:09:08.000
+here, in this section of the main
+
+00:09:08.000 --> 00:09:13.000
+tutorial. This section explains that
+
+00:09:13.000 --> 00:09:16.000
+a sexp like this one produces lots of
+
+00:09:16.000 --> 00:09:19.000
+functions - produces a family of
+
+00:09:19.000 --> 00:09:23.000
+functions - and it does that by producing
+
+00:09:23.000 --> 00:09:25.000
+a certain chunk of code and then
+
+00:09:25.000 --> 00:09:28.000
+executing this chunk of code... and if we
+
+00:09:28.000 --> 00:09:31.000
+add a certain prefix here... `find-` and we
+
+00:09:31.000 --> 00:09:35.000
+execute this we can... instead of executing
+
+00:09:35.000 --> 00:09:37.000
+that chunk of code we can see what is
+
+00:09:37.000 --> 00:09:39.000
+that chunk of code. In the case of `code-c-d`
+
+00:09:39.000 --> 00:09:43.000
+it is this. It is a `setq`, several
+
+00:09:43.000 --> 00:09:47.000
+`defun`s, and some comments here, with
+
+00:09:47.000 --> 00:09:49.000
+links to the documentation.
+
+00:09:49.000 --> 00:09:52.000
+In the case of rstdoc it's the same.
+
+00:09:52.000 --> 00:09:54.000
+We have this function here that defines
+
+00:09:54.000 --> 00:09:56.000
+the function in the python family...
+
+00:09:56.000 --> 00:09:59.000
+and we can run this to understand what
+
+00:09:59.000 --> 00:10:03.000
+this `code-rstdoc` does.
+
+00:10:03.000 --> 00:10:05.000
+It creates this temporary buffer here...
+
+00:10:05.000 --> 00:10:09.000
+with lots of `defun`s, a `code-c-d` here,
+
+00:10:09.000 --> 00:10:10.000
+and lots of comments here... and the
+
+00:10:10.000 --> 00:10:13.000
+comments include some tests. For example
+
+00:10:13.000 --> 00:10:16.000
+we can use these functions here to test
+
+00:10:16.000 --> 00:10:21.000
+how the expansion works.
+
+00:10:21.000 --> 00:10:23.000
+And
+
+00:10:23.000 --> 00:10:26.000
+note that in this buffer here we don't
+
+00:10:26.000 --> 00:10:28.000
+have the paths that that this family
+
+00:10:28.000 --> 00:10:31.000
+uses. We don't have for example
+
+00:10:31.000 --> 00:10:33.000
+the URL that points to the site of
+
+00:10:33.000 --> 00:10:36.000
+Python, to the directory that contains
+
+00:10:36.000 --> 00:10:40.000
+the reference manual, or whatever... all
+
+00:10:40.000 --> 00:10:42.000
+these things are in another part of the
+
+00:10:42.000 --> 00:10:44.000
+definition of that family - that is a
+
+00:10:44.000 --> 00:10:45.000
+variable.
+
+00:10:45.000 --> 00:10:48.000
+If we execute this we go to the
+
+00:10:48.000 --> 00:10:50.000
+source code of eev-rstdoc,
+
+00:10:50.000 --> 00:10:54.000
+to the parts in which
+
+00:10:54.000 --> 00:10:57.000
+this variable is defined...
+
+00:10:57.000 --> 00:10:59.000
+and
+
+00:10:59.000 --> 00:11:01.000
+for each family we have a variable like
+
+00:11:01.000 --> 00:11:02.000
+this,
+
+00:11:02.000 --> 00:11:05.000
+whose value is a property
+
+00:11:05.000 --> 00:11:07.000
+list with several fields...
+
+00:11:07.000 --> 00:11:09.000
+these first fields are very easy to
+
+00:11:09.000 --> 00:11:10.000
+understand - they are used in the
+
+00:11:10.000 --> 00:11:16.000
+expansion... this one too. And these
+
+00:11:16.000 --> 00:11:19.000
+two fields are used in the shrinking -
+
+00:11:19.000 --> 00:11:21.000
+in the shortening - and
+
+00:11:21.000 --> 00:11:25.000
+this field here
+
+00:11:25.000 --> 00:11:28.000
+tells what is the name of the
+
+00:11:28.000 --> 00:11:30.000
+killing function
+
+00:11:30.000 --> 00:11:33.000
+so the fields of this thing here are
+
+00:11:33.000 --> 00:11:34.000
+used
+
+00:11:34.000 --> 00:11:36.000
+to generate...
+
+00:11:36.000 --> 00:11:39.000
+some fields are used to generate the
+
+00:11:39.000 --> 00:11:41.000
+code that appears here, and some fields
+
+00:11:41.000 --> 00:11:44.000
+are simply
+
+00:11:44.000 --> 00:11:47.000
+read by functions like this one, that
+
+00:11:47.000 --> 00:11:51.000
+consults the variable.
+
+00:11:51.000 --> 00:11:53.000
+Now the natural question is: how can we
+
+00:11:53.000 --> 00:11:57.000
+define new families? Or: how can we change
+
+00:11:57.000 --> 00:11:59.000
+a family like this one to point to
+
+00:11:59.000 --> 00:12:03.000
+another version of Python?
+
+00:12:03.000 --> 00:12:06.000
+There are some template-based functions
+
+00:12:06.000 --> 00:12:09.000
+for doing that. They are explained in
+
+00:12:09.000 --> 00:12:10.000
+this section of the tutorial...
+
+00:12:10.000 --> 00:12:14.000
+where is that?...
+
+00:12:14.000 --> 00:12:17.000
+oh God, it's far away...
+
+00:12:17.000 --> 00:12:20.000
+here.
+
+00:12:20.000 --> 00:12:23.000
+Suppose that we have a package foo, that
+
+00:12:23.000 --> 00:12:25.000
+we want to create a family that points
+
+00:12:25.000 --> 00:12:27.000
+to the docs
+
+00:12:27.000 --> 00:12:31.000
+of that package foo... so, we
+
+00:12:31.000 --> 00:12:32.000
+can execute this thing here, and it
+
+00:12:32.000 --> 00:12:34.000
+generates this
+
+00:12:34.000 --> 00:12:37.000
+this thing from a template.
+
+00:12:37.000 --> 00:12:40.000
+If we just want to modify a current
+
+00:12:40.000 --> 00:12:42.000
+definition we can run something like
+
+00:12:42.000 --> 00:12:44.000
+this - note that the family `:py`
+
+00:12:44.000 --> 00:12:47.000
+already exists, and instead of using
+
+00:12:47.000 --> 00:12:51.000
+placeholders in some of these
+
+00:12:51.000 --> 00:12:53.000
+URLs it will use the current values of
+
+00:12:53.000 --> 00:12:55.000
+the fields...
+
+00:12:55.000 --> 00:12:59.000
+so we can also use this modify
+
+00:12:59.000 --> 00:13:01.000
+existing families.
+
+00:13:01.000 --> 00:13:05.000
+Well these are the technical details.
+
+00:13:05.000 --> 00:13:08.000
+Now the natural question is: why do I
+
+00:13:08.000 --> 00:13:12.000
+want this? This doesn't
+
+00:13:12.000 --> 00:13:14.000
+any sense to me! Why should I
+
+00:13:14.000 --> 00:13:15.000
+try this?
+
+00:13:15.000 --> 00:13:18.000
+And the best answer: is for most people
+
+00:13:18.000 --> 00:13:21.000
+this way of using
+
+00:13:21.000 --> 00:13:24.000
+executable notes do not make any sense
+
+00:13:24.000 --> 00:13:27.000
+at all at first sight...
+
+00:13:27.000 --> 00:13:30.000
+so what I'm trying to do is: I'm trying
+
+00:13:30.000 --> 00:13:33.000
+to write to these tutorials with
+
+00:13:33.000 --> 00:13:35.000
+many examples that are very easy to run,
+
+00:13:35.000 --> 00:13:38.000
+and that examine data structures,
+
+00:13:38.000 --> 00:13:40.000
+and functions, and test things,
+
+00:13:40.000 --> 00:13:46.000
+and so on... so my main argument
+
+00:13:46.000 --> 00:13:48.000
+for convincing people to
+
+00:13:48.000 --> 00:13:52.000
+test this is: this is trivial to test -
+
+00:13:52.000 --> 00:13:54.000
+simply install eev and run this thing
+
+00:13:54.000 --> 00:13:56.000
+here, and run the examples, and probably
+
+00:13:56.000 --> 00:13:58.000
+you're going to find that this
+
+00:13:58.000 --> 00:14:01.000
+tutorial is fun to follow.
+
+00:14:01.000 --> 00:14:03.000
+So that's it! =)
diff --git a/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt
new file mode 100644
index 00000000..7365f8e9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--answers.vtt
@@ -0,0 +1,1133 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.160
+ We'll hit start recording.
+
+00:00:02.160 --> 00:00:03.400
+ All right, everyone.
+
+00:00:03.400 --> 00:00:05.840
+ Thanks, Andrew, for the great talk.
+
+00:00:05.840 --> 00:00:06.840
+ Super cool.
+
+00:00:06.840 --> 00:00:09.240
+ So now we have the live Q&A with Andrew.
+
+00:00:09.240 --> 00:00:12.440
+ Folks, you can start by asking your questions on the pad.
+
+00:00:12.440 --> 00:00:14.680
+ And we will also open up this big blue button
+
+00:00:14.680 --> 00:00:17.160
+ room in a few minutes for folks who
+
+00:00:17.160 --> 00:00:19.920
+ want to join here and ask questions here directly
+
+00:00:19.920 --> 00:00:21.320
+ to Andrew.
+
+00:00:21.320 --> 00:00:24.080
+ Thanks again, and take it away, Andrew.
+
+00:00:24.080 --> 00:00:26.400
+ OK, thank you.
+
+00:00:26.400 --> 00:00:29.720
+ Let's start from pod questions.
+
+00:00:29.720 --> 00:00:35.560
+ The first one, do I use this to have multiple configs
+
+00:00:35.560 --> 00:00:35.880
+ running
+
+00:00:35.880 --> 00:00:39.560
+ side by side for deep comparison?
+
+00:00:39.560 --> 00:00:43.920
+ Actually, I have two configurations primary here.
+
+00:00:43.920 --> 00:00:46.640
+ The first one is my main configuration
+
+00:00:46.640 --> 00:00:51.600
+ for the whole environment, which manages all the dot files.
+
+00:00:51.600 --> 00:00:55.080
+ And the second one is virtualenv-like.
+
+00:00:55.080 --> 00:00:59.600
+ It creates a new shell with some environment variables.
+
+00:00:59.600 --> 00:01:01.000
+ It's set inside it.
+
+00:01:01.000 --> 00:01:05.920
+ And it includes Emacs load path and other things
+
+00:01:05.920 --> 00:01:10.240
+ to make Emacs able to explore packages
+
+00:01:10.240 --> 00:01:13.040
+ inside this small environment.
+
+00:01:13.040 --> 00:01:18.120
+ And it removes all unnecessary environment variables,
+
+00:01:18.120 --> 00:01:20.160
+ which pollutes the environment.
+
+00:01:20.160 --> 00:01:25.800
+ So we have quite a small scope on which only Emacs
+
+00:01:25.800 --> 00:01:28.480
+ and a few other packages are available.
+
+00:01:28.480 --> 00:01:31.280
+ And as you saw at the end of the talk,
+
+00:01:31.280 --> 00:01:33.880
+ it was the example of such small environment
+
+00:01:33.880 --> 00:01:38.500
+ where I set up Emacs and all the dependencies from ground
+
+00:01:38.500 --> 00:01:38.920
+ up.
+
+00:01:38.920 --> 00:01:40.760
+ And actually, the similar thing I
+
+00:01:40.760 --> 00:01:43.760
+ use for development of my projects,
+
+00:01:43.760 --> 00:01:45.440
+ I have their project environments
+
+00:01:45.440 --> 00:01:47.640
+ made in the same way.
+
+00:01:47.640 --> 00:01:52.400
+ But usually, I use my primary Emacs instance.
+
+00:01:52.400 --> 00:01:55.880
+ But sometimes, it can be kind of mixed.
+
+00:01:55.880 --> 00:01:59.080
+ I have a few talks on my YouTube channel.
+
+00:01:59.080 --> 00:02:03.630
+ And you can check them out to get more information about it
+
+00:02:03.630 --> 00:02:04.000
+.
+
+00:02:04.000 --> 00:02:04.560
+ The second--
+
+00:02:04.560 --> 00:02:05.060
+ Sorry.
+
+00:02:05.060 --> 00:02:06.320
+ One quick request, Andrew.
+
+00:02:06.320 --> 00:02:08.780
+ People are saying if you could maybe speak up a little bit
+
+00:02:08.780 --> 00:02:11.170
+ more so that they could hear you better, that would be
+
+00:02:11.170 --> 00:02:11.760
+ great.
+
+00:02:11.760 --> 00:02:12.840
+ OK, sure.
+
+00:02:12.840 --> 00:02:14.560
+ Thank you.
+
+00:02:14.560 --> 00:02:16.760
+ The second question.
+
+00:02:16.760 --> 00:02:20.080
+ Are you using Gix system or Gix on top of another distro?
+
+00:02:20.080 --> 00:02:22.480
+ If system, any tips?
+
+00:02:22.480 --> 00:02:24.920
+ I tried Gix system, but found getting started
+
+00:02:24.920 --> 00:02:27.760
+ was very difficult due to lack of Wi-Fi firmware
+
+00:02:27.760 --> 00:02:31.640
+ and incomplete documentation.
+
+00:02:31.640 --> 00:02:35.280
+ Personally, I use Gix system, Gix home,
+
+00:02:35.280 --> 00:02:38.200
+ Gix as a package manager, and also as a deployment tool
+
+00:02:38.200 --> 00:02:40.880
+ for a few services.
+
+00:02:40.880 --> 00:02:44.700
+ I started from very basic setup where I didn't have
+
+00:02:44.700 --> 00:02:45.360
+ anything
+
+00:02:45.360 --> 00:02:49.080
+ and build it piece by piece, including
+
+00:02:49.080 --> 00:02:52.400
+ building Gix home project.
+
+00:02:52.400 --> 00:02:56.680
+ So yeah, I use Gix system and all the things.
+
+00:02:56.680 --> 00:03:02.040
+ And talking about Wi-Fi, first option
+
+00:03:02.040 --> 00:03:04.680
+ is to buy a Wi-Fi adapter, which doesn't
+
+00:03:04.680 --> 00:03:07.080
+ require proprietary firmware.
+
+00:03:07.080 --> 00:03:11.040
+ And another option is finding the firmware and installing
+
+00:03:11.040 --> 00:03:12.000
+ it.
+
+00:03:12.000 --> 00:03:13.760
+ So it's up to you.
+
+00:03:13.760 --> 00:03:17.840
+ Everything actually is relatively easy,
+
+00:03:17.840 --> 00:03:23.600
+ and you can relatively easy find the way to do it.
+
+00:03:23.600 --> 00:03:25.560
+ The third question.
+
+00:03:25.560 --> 00:03:29.360
+ One of the issues I have had managing Emacs packages
+
+00:03:29.360 --> 00:03:32.360
+ with Gix is a conflict between Gix package
+
+00:03:32.360 --> 00:03:35.160
+ attest read-only and the Emacs package
+
+00:03:35.160 --> 00:03:37.840
+ attest hackable in real time.
+
+00:03:37.840 --> 00:03:40.680
+ Any suggestions to resolve this?
+
+00:03:40.680 --> 00:03:45.600
+ Yes, I have suggestions to resolve this.
+
+00:03:45.600 --> 00:03:46.600
+ Actually, it's true.
+
+00:03:46.600 --> 00:03:50.560
+ Everything which is in GNU store is read-only.
+
+00:03:50.560 --> 00:03:55.680
+ Everything which is built with Gix is almost set in stone,
+
+00:03:55.680 --> 00:04:00.720
+ and you can't edit it in real time.
+
+00:04:00.720 --> 00:04:02.720
+ But what I do--
+
+00:04:02.720 --> 00:04:03.760
+ can I share my screen?
+
+00:04:03.760 --> 00:04:09.160
+ One second.
+
+00:04:09.160 --> 00:04:14.140
+ I will press a few buttons, and I hope you will see it soon
+
+00:04:14.140 --> 00:04:14.360
+.
+
+00:04:16.360 --> 00:04:16.360
+
+
+00:04:16.360 --> 00:04:18.080
+ Or maybe not so soon.
+
+00:04:18.080 --> 00:04:26.600
+ What I basically do, I take parts of the ELISP,
+
+00:04:26.600 --> 00:04:30.240
+ and I have them inside my scheme file
+
+00:04:30.240 --> 00:04:36.640
+ that I use to define my home environment and other things.
+
+00:04:36.640 --> 00:04:38.560
+ I don't know-- oh, OK.
+
+00:04:38.560 --> 00:04:39.640
+ That's it.
+
+00:04:39.640 --> 00:04:43.560
+ For example, here, this part is a scheme code.
+
+00:04:43.560 --> 00:04:46.640
+ But this part is pure ELISP code.
+
+00:04:46.640 --> 00:04:56.400
+ And I can use a direct region and use Emacs ELISP mode here
+
+00:04:56.400 --> 00:04:56.440
+.
+
+00:04:56.440 --> 00:05:01.160
+ I will need parts, edit those parts, and select.
+
+00:05:01.160 --> 00:05:05.520
+ And when I'm fine with all the edits I did here--
+
+00:05:05.520 --> 00:05:08.400
+ for example, I can evaluate this form using
+
+00:05:08.400 --> 00:05:10.760
+ Control-X, Control-E, and so on.
+
+00:05:10.760 --> 00:05:13.300
+ And when I'm good with the results,
+
+00:05:13.300 --> 00:05:16.920
+ I can just save it and rebuild my whole home environment
+
+00:05:16.920 --> 00:05:21.360
+ and see it on a fresh Emacs instance load
+
+00:05:21.360 --> 00:05:26.760
+ from the new configuration and see if everything
+
+00:05:26.760 --> 00:05:28.880
+ works here as well.
+
+00:05:28.880 --> 00:05:32.760
+ So it's a little less interactive
+
+00:05:32.760 --> 00:05:35.000
+ than the usual Emacs configuration,
+
+00:05:35.000 --> 00:05:36.480
+ but still works quite well.
+
+00:05:40.800 --> 00:05:43.540
+ A question-- what is next for RD?
+
+00:05:43.540 --> 00:05:48.420
+ Actually, I have short-term plans and a little more
+
+00:05:48.420 --> 00:05:49.660
+ long-term plans.
+
+00:05:49.660 --> 00:05:52.580
+ Short-term plan is to make a first release
+
+00:05:52.580 --> 00:05:54.740
+ by the end of this year.
+
+00:05:54.740 --> 00:05:58.860
+ And this release-- actually, RD is quite usable currently,
+
+00:05:58.860 --> 00:06:02.220
+ but there is not much documentation and not
+
+00:06:02.220 --> 00:06:04.620
+ so many examples.
+
+00:06:04.620 --> 00:06:09.060
+ So I would like to prepare a documentation
+
+00:06:09.060 --> 00:06:15.500
+ getting started guide, live CD that you can use
+
+00:06:15.500 --> 00:06:23.020
+ for exploration purpose and for installation.
+
+00:06:23.020 --> 00:06:31.380
+ And also, I would like to find one or two maintainers which
+
+00:06:31.380 --> 00:06:37.260
+ will help with upcoming patches, because it's already
+
+00:06:37.260 --> 00:06:40.300
+ at least a few people who use it on a daily basis,
+
+00:06:40.300 --> 00:06:42.860
+ and they send a lot of patches.
+
+00:06:42.860 --> 00:06:46.860
+ And sometimes I have a hard time keeping up
+
+00:06:46.860 --> 00:06:49.660
+ with the speed of creating patches.
+
+00:06:49.660 --> 00:06:53.540
+ So the short-term plans is to make a first release
+
+00:06:53.540 --> 00:06:54.860
+ by the end of the year.
+
+00:06:54.860 --> 00:07:00.140
+ The long-term plans we can discuss later, I think.
+
+00:07:00.140 --> 00:07:03.580
+ And I will share them in RD announced mailing list.
+
+00:07:06.220 --> 00:07:12.980
+ OK, I think that's it for patterns.
+
+00:07:12.980 --> 00:07:14.580
+ Let me check RC.
+
+00:07:14.580 --> 00:07:30.060
+ I have-- OK, it seems that I answered all questions
+
+00:07:30.060 --> 00:07:31.540
+ that I found.
+
+00:07:31.540 --> 00:07:33.180
+ Let me know if something appears.
+
+00:07:33.180 --> 00:07:39.580
+ [AUDIO OUT]
+
+00:07:39.580 --> 00:07:40.580
+ Cool, thanks, Andrew.
+
+00:07:40.580 --> 00:07:44.820
+ And yeah, I think we still have over 10 minutes, maybe
+
+00:07:44.820 --> 00:07:49.460
+ 12 minutes or so of live Q&A time on the stream.
+
+00:07:49.460 --> 00:07:51.180
+ So if people still have more questions,
+
+00:07:51.180 --> 00:07:53.180
+ please feel free to either add them on the pad,
+
+00:07:53.180 --> 00:07:54.540
+ or I think you should now also be
+
+00:07:54.540 --> 00:08:00.020
+ able to join this big blue button room to ask directly.
+
+00:08:00.020 --> 00:08:04.100
+ OK, I see one more question.
+
+00:08:04.100 --> 00:08:08.100
+ But I'm not sure what does it mean.
+
+00:08:08.100 --> 00:08:10.380
+ Do you use Emacs without this?
+
+00:08:10.380 --> 00:08:13.940
+ If so, for what purpose?
+
+00:08:13.940 --> 00:08:17.780
+ And how does it feel compared to RD?
+
+00:08:17.780 --> 00:08:20.980
+ OK, it's a question in general.
+
+00:08:20.980 --> 00:08:24.020
+ No, I don't use Emacs without RD.
+
+00:08:24.020 --> 00:08:28.700
+ Actually, all the Emacs configurations I use
+
+00:08:28.700 --> 00:08:33.340
+ is based on RD and built from that.
+
+00:08:33.340 --> 00:08:43.580
+ There is a way to add almost everything
+
+00:08:43.580 --> 00:08:45.940
+ you have in your basic Emacs configuration
+
+00:08:45.940 --> 00:08:52.540
+ to your RD Emacs configuration by creating a file
+
+00:08:52.540 --> 00:08:56.780
+ in your usual .config/emacsd directory
+
+00:08:56.780 --> 00:09:01.740
+ and loading it from your .init/el directory.
+
+00:09:01.740 --> 00:09:07.940
+ So you actually can have a very usual Emacs configuration
+
+00:09:07.940 --> 00:09:12.420
+ workflow in addition to RD.
+
+00:09:12.420 --> 00:09:16.500
+ But I don't use it because it's not a reproducible way
+
+00:09:16.500 --> 00:09:20.940
+ to do things because such workflow means
+
+00:09:20.940 --> 00:09:25.220
+ that I need to install packages separately somehow,
+
+00:09:25.220 --> 00:09:31.740
+ either with gix install or maybe some other package manager
+
+00:09:31.740 --> 00:09:31.740
+,
+
+00:09:31.740 --> 00:09:37.610
+ or maybe this package manager, like package.al or straight.
+
+00:09:37.610 --> 00:09:37.860
+al.
+
+00:09:37.860 --> 00:09:44.060
+ And it doesn't work well in the long term
+
+00:09:44.060 --> 00:09:46.620
+ because if I move such configuration, which
+
+00:09:46.620 --> 00:09:52.700
+ partially RD and partially usual Emacs configuration,
+
+00:09:52.700 --> 00:09:58.980
+ it will break on the new machine or maybe somewhere else
+
+00:09:58.980 --> 00:10:03.700
+ where I would like to move this configuration later.
+
+00:10:03.700 --> 00:10:23.700
+ OK.
+
+00:10:23.700 --> 00:10:27.700
+ We have a last slot for Q and A in the pad.
+
+00:10:27.700 --> 00:10:39.380
+ [LAUGHS]
+
+00:10:39.380 --> 00:10:43.940
+ Thank you, everyone, for joining this talk.
+
+00:10:43.940 --> 00:10:46.820
+ It was a pleasure to interview you.
+
+00:10:46.820 --> 00:10:52.780
+ I will be here for at least an hour or so
+
+00:10:52.780 --> 00:10:56.340
+ before I will go preparing to sleep.
+
+00:10:56.340 --> 00:11:02.740
+ So you can reach me by email, RC, here in big blue button
+
+00:11:02.740 --> 00:11:07.220
+ or some other way, probably.
+
+00:11:07.220 --> 00:11:09.660
+ Are there any plans to push things
+
+00:11:09.660 --> 00:11:12.660
+ from RD to gix main channel?
+
+00:11:12.660 --> 00:11:16.420
+ Actually, I have a commit access to gix,
+
+00:11:16.420 --> 00:11:20.300
+ and I try to upstream everything that
+
+00:11:20.300 --> 00:11:25.060
+ can be beneficial for both RD and gix to gix
+
+00:11:25.060 --> 00:11:30.740
+ and use it from the upstream.
+
+00:11:30.740 --> 00:11:35.320
+ But sometimes on some question, we didn't reach an
+
+00:11:35.320 --> 00:11:35.900
+ agreement,
+
+00:11:35.900 --> 00:11:40.660
+ or sometimes it's much easier to implement it
+
+00:11:40.660 --> 00:11:46.500
+ in a more rapid way, which probably I
+
+00:11:46.500 --> 00:11:52.380
+ wouldn't like to add to gix because it will require
+
+00:11:52.380 --> 00:11:56.340
+ too much time trying to fit to some gix.
+
+00:11:56.340 --> 00:11:59.140
+ So I keep it only in RD.
+
+00:11:59.140 --> 00:12:04.020
+ But the things that I see beneficial for both projects,
+
+00:12:04.020 --> 00:12:07.460
+ I try to share and to move them to gix.
+
+00:12:21.500 --> 00:12:22.220
+ Sounds great.
+
+00:12:22.220 --> 00:12:23.780
+ And another reminder for the folks
+
+00:12:23.780 --> 00:12:26.460
+ that you can join big blue button also directly.
+
+00:12:26.460 --> 00:12:29.340
+ If you want to type your questions into chat here
+
+00:12:29.340 --> 00:12:32.580
+ or just ask them over mic or with a microphone,
+
+00:12:32.580 --> 00:12:33.540
+ you can do that as well.
+
+00:12:33.540 --> 00:12:46.260
+ I think we still have about actually 10 or 12 more minutes.
+
+00:12:46.260 --> 00:12:48.100
+ I think I underestimated what we had.
+
+00:12:48.100 --> 00:12:50.100
+ So we still have plenty of time for questions.
+
+00:12:50.100 --> 00:12:56.500
+ [AUDIO OUT]
+
+00:12:56.500 --> 00:13:01.540
+ Added one more slot for Gondi in case someone
+
+00:13:01.540 --> 00:13:05.180
+ would like to fill it.
+
+00:13:05.180 --> 00:13:06.740
+ Thanks.
+
+00:13:06.740 --> 00:13:34.220
+ [AUDIO OUT]
+
+00:13:34.220 --> 00:13:39.260
+ How difficult is to add support for new packages to gix?
+
+00:13:39.260 --> 00:13:44.020
+ Have you found that's burdensome versus package L
+
+00:13:44.020 --> 00:13:48.540
+ or other in Emacs package management approach?
+
+00:13:48.540 --> 00:13:53.940
+ Actually, I find it quite easy to create packages for gix.
+
+00:13:53.940 --> 00:13:59.460
+ Maybe because I'm quite familiar with gix source code.
+
+00:13:59.460 --> 00:14:03.580
+ But maybe because it's not that difficult,
+
+00:14:03.580 --> 00:14:11.660
+ you just open a respective model like rd packages or gnu
+
+00:14:11.660 --> 00:14:13.540
+ packages in gix repository.
+
+00:14:13.540 --> 00:14:15.660
+ And you define the package you want.
+
+00:14:15.660 --> 00:14:19.100
+ And you define the dependencies you want.
+
+00:14:19.100 --> 00:14:25.540
+ Actually, a lot of packages already here in gix.
+
+00:14:25.540 --> 00:14:29.580
+ And some of the packages I package in rd
+
+00:14:29.580 --> 00:14:31.660
+ and later move to the gix.
+
+00:14:31.660 --> 00:14:37.300
+ So it's not hard to reference the dependencies
+
+00:14:37.300 --> 00:14:40.780
+ and find the dependencies already declared for you.
+
+00:14:40.780 --> 00:14:46.420
+ But what's more important, you can use dependencies not
+
+00:14:46.420 --> 00:14:46.780
+ only
+
+00:14:46.780 --> 00:14:49.660
+ on Emacs packages, but also on system packages.
+
+00:14:49.660 --> 00:14:53.300
+ For example, in my git package, you
+
+00:14:53.300 --> 00:14:55.700
+ can use a reference to git binary
+
+00:14:55.700 --> 00:14:58.820
+ and predefine the path to the git binary
+
+00:14:58.820 --> 00:15:03.540
+ inside a package configuration by fetching the source code
+
+00:15:03.540 --> 00:15:04.860
+ or something like that.
+
+00:15:04.860 --> 00:15:11.220
+ So any package that requires some system package to work
+
+00:15:11.220 --> 00:15:14.180
+ can use the system package as a dependency.
+
+00:15:14.180 --> 00:15:18.780
+ And it is a big benefit comparing
+
+00:15:18.780 --> 00:15:21.500
+ to other packaging solutions, which
+
+00:15:21.500 --> 00:15:25.460
+ can depend only on Elisp packages.
+
+00:15:25.460 --> 00:15:36.340
+ [AUDIO OUT]
+
+00:15:36.340 --> 00:15:40.060
+ Do you reckon rd is currently opinionated,
+
+00:15:40.060 --> 00:15:44.180
+ or is it a one-size-fits-all framework?
+
+00:15:44.180 --> 00:15:49.020
+ I would say it's quite opinionated.
+
+00:15:49.020 --> 00:15:52.620
+ I started from really bare-bone Emacs.
+
+00:15:52.620 --> 00:15:55.100
+ And I suffered for a while.
+
+00:15:55.100 --> 00:15:58.620
+ And I did features one by one very carefully,
+
+00:15:58.620 --> 00:16:02.500
+ crafting the current state of rd-emacs.
+
+00:16:02.500 --> 00:16:08.180
+ And it's, as I already said, vanilla flavored.
+
+00:16:08.180 --> 00:16:12.180
+ I try to stick with Emacs key bindings
+
+00:16:12.180 --> 00:16:15.700
+ to use built-in packages over external packages,
+
+00:16:15.700 --> 00:16:21.460
+ or use packages which are in the same way,
+
+00:16:21.460 --> 00:16:26.100
+ work in a similar manner to built-in packages.
+
+00:16:26.100 --> 00:16:29.740
+ So it's not usual.
+
+00:16:29.740 --> 00:16:37.060
+ It's not that user-friendly as Doom Emacs or Space Emacs.
+
+00:16:37.060 --> 00:16:45.580
+ It's more like a Prelude, or even more vanilla flavored
+
+00:16:45.580 --> 00:16:47.380
+ than Prelude.
+
+00:16:47.380 --> 00:16:50.420
+ But the good thing is that you can declare a feature
+
+00:16:50.420 --> 00:16:51.340
+ yourself.
+
+00:16:51.340 --> 00:16:55.260
+ And if you don't like something about rd-emacs provided
+
+00:16:55.260 --> 00:16:59.860
+ by features created by me or other contributors,
+
+00:16:59.860 --> 00:17:03.500
+ you can use the features declared by yourself
+
+00:17:03.500 --> 00:17:06.060
+ or by other people.
+
+00:17:06.060 --> 00:17:11.140
+ And one of the plans that I have according to rd,
+
+00:17:11.140 --> 00:17:13.940
+ which we are discussing on mailing list right now,
+
+00:17:13.940 --> 00:17:20.140
+ is contrib directory, which can include features provided
+
+00:17:20.140 --> 00:17:21.660
+ by different people.
+
+00:17:21.660 --> 00:17:28.500
+ For example, it's quite often asked to add evils support.
+
+00:17:28.500 --> 00:17:31.540
+ But I don't use evils.
+
+00:17:31.540 --> 00:17:35.460
+ And I don't want to maintain this package.
+
+00:17:35.460 --> 00:17:38.140
+ But I understand that many people
+
+00:17:38.140 --> 00:17:43.140
+ use such a way of interacting with text editor.
+
+00:17:43.140 --> 00:17:45.660
+ So it would be cool if someone who actually
+
+00:17:45.660 --> 00:17:48.420
+ using this feature will be maintaining it
+
+00:17:48.420 --> 00:17:51.020
+ in contrib directory.
+
+00:17:51.020 --> 00:17:55.180
+ And this feature will be sound with all other features
+
+00:17:55.180 --> 00:17:55.460
+ which
+
+00:17:55.460 --> 00:17:58.340
+ provided by rd itself.
+
+00:17:58.340 --> 00:18:05.100
+ And I think this way, it can cover more people needs
+
+00:18:05.100 --> 00:18:07.940
+ that it can cover right now.
+
+00:18:07.940 --> 00:18:11.260
+ So it will fit more people.
+
+00:18:11.260 --> 00:18:17.820
+ But the core rd won't be expanding its scope.
+
+00:18:17.820 --> 00:18:19.020
+ It will be quite focused.
+
+00:18:19.020 --> 00:18:27.940
+ How to get into rd is already documentation
+
+00:18:27.940 --> 00:18:31.060
+ and getting started guide.
+
+00:18:31.060 --> 00:18:34.740
+ There is a repository on source hut,
+
+00:18:34.740 --> 00:18:42.700
+ github.com/github/sourcehut/abcdw/rd.
+
+00:18:42.700 --> 00:18:47.620
+ And here you can see a very small readme,
+
+00:18:47.620 --> 00:18:52.540
+ which probably doesn't give you too much understanding of
+
+00:18:52.540 --> 00:18:52.780
+ what
+
+00:18:52.780 --> 00:18:53.580
+ is going on.
+
+00:18:53.580 --> 00:18:56.860
+ But it has all the necessary links.
+
+00:18:56.860 --> 00:18:58.740
+ It has a link to manual.
+
+00:18:58.740 --> 00:19:02.860
+ It has information of mailing lists,
+
+00:19:02.860 --> 00:19:05.940
+ which you can use to get help.
+
+00:19:05.940 --> 00:19:14.620
+ It has information about IRC channel in manual.
+
+00:19:14.620 --> 00:19:18.540
+ And you can join this channel and ask questions here.
+
+00:19:18.540 --> 00:19:22.060
+ And of course, you can take the source code
+
+00:19:22.060 --> 00:19:23.860
+ and take a look at it.
+
+00:19:23.860 --> 00:19:29.500
+ And currently, we have examples.
+
+00:19:29.500 --> 00:19:37.380
+ And here in examples, my whole configuration of my team
+
+00:19:37.380 --> 00:19:38.340
+ is present.
+
+00:19:38.340 --> 00:19:43.580
+ It's a little bit drafty.
+
+00:19:43.580 --> 00:19:47.380
+ I would like to reorganize this a little
+
+00:19:47.380 --> 00:19:50.340
+ to make it easier to follow.
+
+00:19:50.340 --> 00:19:55.140
+ And before first release, I hope I will do so.
+
+00:19:55.140 --> 00:20:04.140
+ But you can use it as an example, build on [INAUDIBLE]
+
+00:20:04.140 --> 00:20:09.700
+ Unfortunately, the documentation
+
+00:20:09.700 --> 00:20:12.180
+ is not very extensive.
+
+00:20:12.180 --> 00:20:17.740
+ So you can find it a little hard to follow.
+
+00:20:17.740 --> 00:20:24.140
+ Or maybe you can find it missing some important things.
+
+00:20:24.140 --> 00:20:29.140
+ But before first release, I hope the situation
+
+00:20:29.140 --> 00:20:30.900
+ will become a little better.
+
+00:20:30.900 --> 00:20:33.860
+ But anyway, you can always ask questions
+
+00:20:33.860 --> 00:20:35.420
+ until the documentation is ready.
+
+00:20:35.420 --> 00:20:44.060
+ Can you mix RD with custom Emacs init file?
+
+00:20:44.060 --> 00:20:45.220
+ Yes, you can.
+
+00:20:45.220 --> 00:20:47.780
+ I already mentioned it.
+
+00:20:47.780 --> 00:20:53.220
+ You can just define in your init.el
+
+00:20:53.220 --> 00:20:57.100
+ the statement that you load some other file
+
+00:20:57.100 --> 00:21:02.860
+ and use this file as your usual init.el file.
+
+00:21:02.860 --> 00:21:06.460
+ It will work completely OK.
+
+00:21:06.460 --> 00:21:13.780
+ And you can partially migrate to RD by using such approach.
+
+00:21:13.780 --> 00:21:17.540
+ But I don't recommend this approach in long term.
+
+00:21:17.540 --> 00:21:19.020
+ I already mentioned it.
+
+00:21:19.020 --> 00:21:24.140
+ But having usual init.el file and managing your
+
+00:21:24.140 --> 00:21:25.340
+ dependencies
+
+00:21:25.340 --> 00:21:29.580
+ using package.el or straight.el doesn't
+
+00:21:29.580 --> 00:21:33.140
+ cover system dependencies and other stuff, which
+
+00:21:33.140 --> 00:21:38.900
+ will lead to maybe irreproducible configurations.
+
+00:21:38.900 --> 00:21:49.780
+ [AUDIO OUT]
+
+00:21:49.780 --> 00:21:51.700
+ It's the heads up that we have about two more
+
+00:21:51.700 --> 00:21:53.180
+ minutes of live Q&A time.
+
+00:21:53.180 --> 00:21:55.100
+ And then after that, the stream will move on.
+
+00:21:55.100 --> 00:21:58.300
+ But people are welcome to continue asking questions,
+
+00:21:58.300 --> 00:22:01.460
+ either on the pad or IRC or by joining the Speakable button
+
+00:22:01.460 --> 00:22:02.380
+ room directly.
+
+00:22:02.380 --> 00:22:04.380
+ Thanks again, Andrew.
+
+00:22:04.380 --> 00:22:23.700
+ [AUDIO OUT]
+
+00:22:23.700 --> 00:22:27.660
+ Actually, I didn't expect so much questions.
+
+00:22:27.660 --> 00:22:33.340
+ And when I first took a look at the pad
+
+00:22:33.340 --> 00:22:38.700
+ and thought, OK, those six slots for Q&A will be enough.
+
+00:22:38.700 --> 00:22:45.100
+ Yeah, it's always a nice surprise, I guess.
+
+00:22:45.100 --> 00:23:04.140
+ [AUDIO OUT]
+
+00:23:04.140 --> 00:23:07.780
+ I hope everyone will be OK with jumping windows around,
+
+00:23:07.780 --> 00:23:10.420
+ because I switch between workspaces.
+
+00:23:10.420 --> 00:23:12.660
+ And it may be a little too noisy.
+
+00:23:12.660 --> 00:23:16.780
+ [AUDIO OUT]
+
+00:23:16.780 --> 00:23:18.660
+ Yeah, I think it's fine for the most part.
+
+00:23:18.660 --> 00:23:20.380
+ It was a bit of an interesting thing
+
+00:23:20.380 --> 00:23:23.500
+ trying to keep up the stream with it, because by default,
+
+00:23:23.500 --> 00:23:26.020
+ we maximize the speaker's webcam.
+
+00:23:26.020 --> 00:23:27.900
+ But then you're also sharing your screen
+
+00:23:27.900 --> 00:23:29.180
+ and sharing important details.
+
+00:23:29.180 --> 00:23:32.780
+ So we were also trying to get that on the stream as well.
+
+00:23:32.780 --> 00:23:33.660
+ But yeah, it was fine.
+
+00:23:33.660 --> 00:23:41.260
+ [AUDIO OUT]
+
+00:23:41.260 --> 00:23:46.780
+ OK, I think that there's no more questions.
+
+00:23:46.780 --> 00:23:53.980
+ And we can finish in this section.
+
+00:23:53.980 --> 00:23:55.580
+ All right, sounds good.
+
+00:23:55.580 --> 00:23:58.020
+ Thanks again, Andrew, for the great talk.
+
+00:23:58.020 --> 00:24:02.780
+ As a fellow Tiling Window Manager user and GNU gigs--
+
+00:24:02.780 --> 00:24:06.180
+ well, former committer, but still very much enthusiast,
+
+00:24:06.180 --> 00:24:07.540
+ I'm very much interested in this.
+
+00:24:07.540 --> 00:24:09.820
+ So I know I'll definitely be checking your work out.
+
+00:24:09.820 --> 00:24:11.660
+ So thanks again.
+
+00:24:11.660 --> 00:24:13.860
+ Thank you very much for organization
+
+00:24:13.860 --> 00:24:15.820
+ and all your contributions.
+
+00:24:15.820 --> 00:24:17.540
+ Very much appreciated.
+
+00:24:17.540 --> 00:24:18.100
+ Thank you.
+
+00:24:18.100 --> 00:24:18.600
+ Thank you.
+
+00:24:18.600 --> 00:24:19.340
+ Appreciate it.
+
+00:24:19.340 --> 00:24:20.140
+ All right, take care.
+
+00:24:20.140 --> 00:24:22.580
+ And we'll see you around.
+
+00:24:22.580 --> 00:24:23.580
+ Bye-bye.
+
+00:24:23.580 --> 00:24:25.140
+ Bye.
+
+00:24:25.140 --> 00:24:28.500
+ [AUDIO OUT]
+
+00:24:30.500 --> 00:24:30.500
+
+
diff --git a/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt
new file mode 100644
index 00000000..dc0c9307
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:52.040
+Introduction
+
+00:00:52.040 --> 00:03:34.840
+The challenge
+
+00:03:34.840 --> 00:05:04.920
+Functional package managers
+
+00:05:04.920 --> 00:07:20.360
+Guix Home
+
+00:07:20.360 --> 00:08:15.520
+rde
+
+00:08:15.520 --> 00:11:37.440
+Vanilla-flavoured
+
+00:11:37.440 --> 00:13:52.520
+Removing features
+
+00:13:52.520 --> 00:15:14.080
+Another example
+
+00:15:14.080 --> 00:16:54.400
+Multiple steps
+
+00:16:54.400 --> 00:18:07.480
+A small Emacs configuration
+
+00:18:07.480 --> 00:22:19.000
+Enabling features
+
+00:22:19.000 --> 00:23:33.760
+Summary
diff --git a/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt
new file mode 100644
index 00000000..99a9e201
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rde--rde-emacs-introduction--andrew-tropin--main.vtt
@@ -0,0 +1,1129 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:11.480
+Hello and welcome everyone at EmacsConf 2022.
+
+00:00:11.480 --> 00:00:13.400
+I'm Andrew Tropin, and today
+
+00:00:13.400 --> 00:00:16.280
+we will talk about my Emacs setup.
+
+00:00:16.280 --> 00:00:19.360
+I will tell you the story behind it.
+
+00:00:19.360 --> 00:00:23.960
+We will discuss what rde and rde Emacs are,
+
+00:00:23.960 --> 00:00:28.760
+and we'll make a small Emacs configuration.
+
+00:00:28.760 --> 00:00:30.920
+My original motivation was to have
+
+00:00:30.920 --> 00:00:34.000
+a ready for work development environment
+
+00:00:34.000 --> 00:00:36.640
+which is reliable and guaranteed to work
+
+00:00:36.640 --> 00:00:37.840
+every time I need it,
+
+00:00:37.840 --> 00:00:42.680
+preferably performant and consistent.
+
+00:00:42.680 --> 00:00:44.160
+I say development environment,
+
+00:00:44.160 --> 00:00:45.720
+but it actually applies to
+
+00:00:45.720 --> 00:00:47.600
+many other working environment,
+
+00:00:47.600 --> 00:00:52.040
+especially text-heavy.
+
+00:00:52.040 --> 00:00:54.040
+An easy and obvious solution is to
+
+00:00:54.040 --> 00:00:57.640
+pick one of existing configuration frameworks
+
+00:00:57.640 --> 00:01:00.760
+like Spacemacs, Doom Emacs, Prelude,
+
+00:01:00.760 --> 00:01:02.520
+or something else,
+
+00:01:02.520 --> 00:01:05.040
+and to get a pre-configured Emacs
+
+00:01:05.040 --> 00:01:09.040
+in a minute with all bells and whistles.
+
+00:01:09.040 --> 00:01:12.480
+But the problem is: only Emacs.
+
+00:01:12.480 --> 00:01:16.400
+In reality, your working environment consists
+
+00:01:16.400 --> 00:01:18.680
+not only from elisp packages,
+
+00:01:18.680 --> 00:01:21.360
+but also from system packages
+
+00:01:21.360 --> 00:01:23.320
+and their configurations, project libraries,
+
+00:01:23.320 --> 00:01:27.080
+compilers, building tools, etc.,
+
+00:01:27.080 --> 00:01:31.600
+and thus you already have at least
+
+00:01:31.600 --> 00:01:34.880
+three, or more likely, five things
+
+00:01:34.880 --> 00:01:37.120
+for managing your environment:
+
+00:01:37.120 --> 00:01:39.640
+configuration, Emacs configuration framework,
+
+00:01:39.640 --> 00:01:42.880
+Emacs package manager, system package manager,
+
+00:01:42.880 --> 00:01:46.600
+system/dot files configuration manager,
+
+00:01:46.600 --> 00:01:49.080
+project/language package manager
+
+00:01:49.080 --> 00:01:51.800
+and maybe something else.
+
+00:01:51.800 --> 00:01:56.360
+Even having our Emacs configuration
+
+00:01:56.360 --> 00:01:59.800
+and package manager covered by framework
+
+00:01:59.800 --> 00:02:02.080
+we still have a lot of things
+
+00:02:02.080 --> 00:02:04.240
+which we have to interact with,
+
+00:02:04.240 --> 00:02:08.640
+keep in sync, and more importantly,
+
+00:02:08.640 --> 00:02:12.480
+each of them can break.
+
+00:02:12.480 --> 00:02:17.320
+But by "works every time," I mean
+
+00:02:17.320 --> 00:02:19.560
+even if I updated my system packages,
+
+00:02:19.560 --> 00:02:23.880
+configurations, I migrated to a different machine,
+
+00:02:23.880 --> 00:02:29.120
+someone on my team updated project dependencies,
+
+00:02:29.120 --> 00:02:31.960
+I can get back to work in a matter of seconds,
+
+00:02:31.960 --> 00:02:39.040
+or maybe in some cases, minutes.
+
+00:02:39.040 --> 00:02:40.400
+If I have multiple tools
+
+00:02:40.400 --> 00:02:43.720
+for managing my environment
+
+00:02:43.720 --> 00:02:45.720
+and even one of them is broken,
+
+00:02:45.720 --> 00:02:48.360
+the whole setup is broken.
+
+00:02:48.360 --> 00:02:51.080
+Also, if one of them doesn't support
+
+00:02:51.080 --> 00:02:53.560
+deterministic rollback,
+
+00:02:53.560 --> 00:02:58.200
+I can't guarantee the reliability
+
+00:02:58.200 --> 00:02:59.200
+of my working environment.
+
+00:02:59.200 --> 00:03:01.360
+I can't be sure that I will be able to
+
+00:03:01.360 --> 00:03:02.800
+rescue or revive it.
+
+00:03:02.800 --> 00:03:06.760
+The less points of failure we have,
+
+00:03:06.760 --> 00:03:09.720
+the easier to stay sane.
+
+00:03:09.720 --> 00:03:13.080
+Imagine some late breakage notice
+
+00:03:13.080 --> 00:03:17.880
+when you did update a few hours or days ago
+
+00:03:17.880 --> 00:03:20.920
+and found it later, and you have
+
+00:03:20.920 --> 00:03:25.320
+a few different tools involved.
+
+00:03:25.320 --> 00:03:28.280
+It will be really hard to find the cause
+
+00:03:28.280 --> 00:03:34.840
+and to make everything work again.
+
+00:03:34.840 --> 00:03:37.880
+Is it possible to have one tool
+
+00:03:37.880 --> 00:03:44.360
+to cover all the needs I described above?
+
+00:03:44.360 --> 00:03:48.520
+Yes, almost. With this tool,
+
+00:03:48.520 --> 00:03:50.320
+you can get a reliable setup.
+
+00:03:50.320 --> 00:03:57.400
+Now, I talk about functional package managers.
+
+00:03:57.400 --> 00:04:00.680
+Functional package managers allow us to
+
+00:04:00.680 --> 00:04:03.720
+manage systems, users, Emacs, project/
+
+00:04:03.720 --> 00:04:07.560
+language packages, and their configurations.
+
+00:04:07.560 --> 00:04:10.880
+But more importantly, it allows to do it
+
+00:04:10.880 --> 00:04:13.200
+in a declarative and reproducible manner.
+
+00:04:13.200 --> 00:04:16.840
+That means you just define what you need,
+
+00:04:16.840 --> 00:04:19.680
+and those tools build it for you.
+
+00:04:19.680 --> 00:04:24.320
+No matter what was before, you get what you asked for.
+
+00:04:24.320 --> 00:04:26.200
+It doesn't matter what time of day,
+
+00:04:26.200 --> 00:04:29.640
+what you did before, what other packages
+
+00:04:29.640 --> 00:04:31.680
+you have installed previously.
+
+00:04:31.680 --> 00:04:34.440
+You just ask for something, and you get it.
+
+00:04:34.440 --> 00:04:41.440
+Two years ago, I did a talk at EmacsConf 2020
+
+00:04:41.440 --> 00:04:43.840
+where I demonstrated a prototype of
+
+00:04:43.840 --> 00:04:47.480
+Emacs configuration managed by Nix.
+
+00:04:47.480 --> 00:04:50.480
+Originally, I wanted to base my work on
+
+00:04:50.480 --> 00:04:56.160
+an already existing Emacs configuration framework.
+
+00:04:56.160 --> 00:05:01.360
+But later, I decided that it will be easier
+
+00:05:01.360 --> 00:05:02.440
+and a little more flexible
+
+00:05:02.440 --> 00:05:04.920
+to start from ground up.
+
+00:05:04.920 --> 00:05:06.960
+After the first prototype in Nix,
+
+00:05:06.960 --> 00:05:12.120
+I decided to switch to Guix. To make it short,
+
+00:05:12.120 --> 00:05:14.600
+Guix is another functional package manager,
+
+00:05:14.600 --> 00:05:21.840
+but more freedom- and reproducibility-oriented,
+
+00:05:21.840 --> 00:05:24.200
+and written in only one language (Guile Scheme)
+
+00:05:24.200 --> 00:05:29.880
+instead of few custom-made Nix DSL, Bash, and C++.
+
+00:05:29.880 --> 00:05:34.240
+So now I can write Lisp code, while this code
+
+00:05:34.240 --> 00:05:37.040
+writes another Lisp code. Very neat indeed.
+
+00:05:37.040 --> 00:05:42.760
+Unfortunately, at the moment, there was no tool
+
+00:05:42.760 --> 00:05:45.400
+to manage user configurations,
+
+00:05:45.400 --> 00:05:48.400
+also known as dotfiles, with Guix.
+
+00:05:48.400 --> 00:05:52.680
+So I wrote one. And now it's a part of GNU Guix
+
+00:05:52.680 --> 00:05:54.160
+and called Guix Home.
+
+00:05:54.160 --> 00:05:58.840
+What do we get from this one tool?
+
+00:05:58.840 --> 00:06:05.240
+We can use one language to describe the whole system,
+
+00:06:05.240 --> 00:06:09.080
+the home environment, the project environment,
+
+00:06:09.080 --> 00:06:10.240
+and everything else.
+
+00:06:10.240 --> 00:06:13.000
+We don't need to worry about
+
+00:06:13.000 --> 00:06:17.000
+to keep different tools in sync
+
+00:06:17.000 --> 00:06:19.760
+and to integrate them between each other.
+
+00:06:19.760 --> 00:06:23.080
+Also, using one language to describe
+
+00:06:23.080 --> 00:06:25.440
+the whole configuration makes it possible
+
+00:06:25.440 --> 00:06:28.640
+to share values between different parts of the system.
+
+00:06:28.640 --> 00:06:32.920
+For example, color scheme, fonts, and much more.
+
+00:06:32.920 --> 00:06:39.440
+To sum up the first part of the talk:
+
+00:06:39.440 --> 00:06:43.320
+I want a working environment which is ready for work,
+
+00:06:43.320 --> 00:06:47.960
+configured in minutes to almost what I want.
+
+00:06:47.960 --> 00:06:50.800
+That means it should have some batteries included.
+
+00:06:50.800 --> 00:06:52.000
+It should be reliable.
+
+00:06:52.000 --> 00:06:54.840
+I want to get back to work in seconds
+
+00:06:54.840 --> 00:06:56.160
+even if I broke something
+
+00:06:56.160 --> 00:06:58.200
+or someone else broke something.
+
+00:06:58.200 --> 00:07:03.560
+For example, using rollbacks.
+
+00:07:03.560 --> 00:07:07.320
+It would be nice if it will be performant.
+
+00:07:07.320 --> 00:07:08.640
+It's a little subjective thing,
+
+00:07:08.640 --> 00:07:12.360
+but it's nice when things are snappy.
+
+00:07:12.360 --> 00:07:16.160
+And it's cool when things are consistent.
+
+00:07:16.160 --> 00:07:17.800
+Different interfaces have
+
+00:07:17.800 --> 00:07:20.360
+the same way of interactions with them.
+
+00:07:20.360 --> 00:07:25.920
+Let's get to the next part,
+
+00:07:25.920 --> 00:07:29.120
+and let's discuss what rde is.
+
+00:07:29.120 --> 00:07:33.360
+Originally it was my dotfiles repo,
+
+00:07:33.360 --> 00:07:35.720
+but it grew into something bigger.
+
+00:07:35.720 --> 00:07:39.320
+Now, it's a set of tools on top of
+
+00:07:39.320 --> 00:07:41.680
+GNU Guix, Guix System, and Guix Home.
+
+00:07:41.680 --> 00:07:45.800
+You can treat it as a GNU/Linux distribution,
+
+00:07:45.800 --> 00:07:48.720
+system and home environment manager
+
+00:07:48.720 --> 00:07:50.880
+or configuration framework,
+
+00:07:50.880 --> 00:07:52.920
+project environment manager
+
+00:07:52.920 --> 00:07:55.160
+(like virtualenv, but on steroids),
+
+00:07:55.160 --> 00:07:58.200
+and Emacs distribution.
+
+00:07:58.200 --> 00:08:02.840
+Usually, you just pick a few features,
+
+00:08:02.840 --> 00:08:05.654
+parameterize them and ask the tool
+
+00:08:05.655 --> 00:08:08.120
+to create an operating system for you,
+
+00:08:08.120 --> 00:08:10.280
+a home environment, project environment,
+
+00:08:10.280 --> 00:08:11.560
+or Emacs configuration.
+
+00:08:11.560 --> 00:08:15.520
+That's it. That's simple.
+
+00:08:15.520 --> 00:08:22.080
+And what rde Emacs is and how it tastes...
+
+00:08:22.080 --> 00:08:26.360
+It's like an ice cream, vanilla-flavored.
+
+00:08:26.360 --> 00:08:30.880
+No fancy macros for configuration, just plain Elisp.
+
+00:08:30.880 --> 00:08:34.954
+You can find in almost every
+
+00:08:34.955 --> 00:08:36.480
+personal Emacs configuration,
+
+00:08:36.480 --> 00:08:42.640
+built-in or vanilla-flavored packages
+
+00:08:42.640 --> 00:08:45.588
+are in priority over external
+
+00:08:45.589 --> 00:08:46.760
+or very fancy packages.
+
+00:08:46.760 --> 00:08:52.200
+There is practical reason for this.
+
+00:08:52.200 --> 00:08:55.454
+Maybe sometimes you don't get the things
+
+00:08:55.455 --> 00:08:57.720
+you're used to in other text editors,
+
+00:08:57.720 --> 00:09:01.920
+or maybe even in other Emacs frameworks,
+
+00:09:01.920 --> 00:09:05.880
+but we want to keep the final result consistent,
+
+00:09:05.880 --> 00:09:08.720
+so you can apply the same interaction patterns
+
+00:09:08.720 --> 00:09:13.480
+in different situations and extend your expectations
+
+00:09:13.480 --> 00:09:15.000
+from one tool to another,
+
+00:09:15.000 --> 00:09:16.560
+from one package to another.
+
+00:09:16.560 --> 00:09:19.400
+For example, we encourage people
+
+00:09:19.400 --> 00:09:22.600
+to use the minibuffer completion
+
+00:09:22.600 --> 00:09:26.720
+with orderless and vertico for many tasks:
+
+00:09:26.720 --> 00:09:30.680
+code navigation, file navigation,
+
+00:09:30.680 --> 00:09:32.120
+looking through your emails,
+
+00:09:32.120 --> 00:09:35.160
+or just for jumping around.
+
+00:09:35.160 --> 00:09:36.320
+Let's see.
+
+00:09:36.320 --> 00:09:39.480
+First, create a new Emacs instance
+
+00:09:39.480 --> 00:09:45.280
+and open a repository with my configuration.
+
+00:09:45.280 --> 00:09:54.040
+You can see the source code.
+
+00:09:54.040 --> 00:09:58.760
+Let's open another file which contains
+
+00:09:58.760 --> 00:09:59.960
+Emacs-related features.
+
+00:09:59.960 --> 00:10:02.280
+You can see I use imenu,
+
+00:10:02.280 --> 00:10:08.360
+and I can filter the list using minibuffer.
+
+00:10:08.360 --> 00:10:16.600
+Now let's open the Magit interface,
+
+00:10:16.600 --> 00:10:18.920
+and now I want to navigate through
+
+00:10:18.920 --> 00:10:22.240
+this long list of things here.
+
+00:10:22.240 --> 00:10:25.560
+Some of them staged. Some of them are recent commits.
+
+00:10:25.560 --> 00:10:28.400
+Some of them are untracked at all.
+
+00:10:28.400 --> 00:10:31.040
+I can open imenu: the same interface,
+
+00:10:31.040 --> 00:10:34.640
+but for now, I can navigate around
+
+00:10:34.640 --> 00:10:41.320
+the Magit sections and files which are present here.
+
+00:10:41.320 --> 00:10:45.120
+If I want to navigate project files,
+
+00:10:45.120 --> 00:10:47.520
+I use almost the same interface.
+
+00:10:47.520 --> 00:10:51.720
+I can use the same patterns to filter out
+
+00:10:51.720 --> 00:11:00.400
+files in my project or items in magit-imenu.
+
+00:11:00.400 --> 00:11:07.720
+Very similar and very consistent.
+
+00:11:07.720 --> 00:11:11.920
+Also, we try to have hotkeys consistent
+
+00:11:11.920 --> 00:11:16.680
+across different packages and parts of Emacs.
+
+00:11:16.680 --> 00:11:21.720
+We usually don't provide alternatives on what to use.
+
+00:11:21.720 --> 00:11:25.520
+We provide only one package for one task.
+
+00:11:25.520 --> 00:11:28.154
+But of course this is
+
+00:11:28.155 --> 00:11:29.880
+a configuration framework after all.
+
+00:11:29.880 --> 00:11:32.800
+You can declare your own features,
+
+00:11:32.800 --> 00:11:35.788
+implement them yourself,
+
+00:11:35.789 --> 00:11:37.440
+and use whatever you want.
+
+00:11:37.440 --> 00:11:45.240
+Let's get to some real-world examples.
+
+00:11:45.240 --> 00:11:48.221
+It's always easy to show
+
+00:11:48.222 --> 00:11:50.200
+how things get appended,
+
+00:11:50.200 --> 00:11:51.760
+how things get installed,
+
+00:11:51.760 --> 00:11:55.288
+but usually people don't show
+
+00:11:55.289 --> 00:11:56.360
+how they remove things,
+
+00:11:56.360 --> 00:11:58.800
+because it's usually painful.
+
+00:11:58.800 --> 00:12:02.120
+But in our case, it's not.
+
+00:12:02.120 --> 00:12:10.840
+Let's take my configuration,
+
+00:12:10.840 --> 00:12:12.960
+let's find feature-emacs-vertico.
+
+00:12:12.960 --> 00:12:19.821
+Vertico's just used to show
+
+00:12:19.822 --> 00:12:25.880
+this fancy completion UI
+
+00:12:25.880 --> 00:12:27.400
+that you can see here.
+
+00:12:27.400 --> 00:12:30.960
+If I disable this feature
+
+00:12:30.960 --> 00:12:43.080
+and rebuild my home environment,
+
+00:12:43.080 --> 00:12:46.360
+Emacs will lack this feature.
+
+00:12:46.360 --> 00:12:55.400
+It may take some time. It was quite fast,
+
+00:12:55.400 --> 00:13:00.400
+I didn't expect it.
+
+00:13:00.400 --> 00:13:02.880
+I have Emacs. As you can see here,
+
+00:13:02.880 --> 00:13:06.280
+now it doesn't have this completion UI anymore.
+
+00:13:06.280 --> 00:13:09.280
+I just commented it out,
+
+00:13:09.280 --> 00:13:13.320
+rebuilt my home environment,
+
+00:13:13.320 --> 00:13:15.600
+and this thing disappeared from Emacs.
+
+00:13:15.600 --> 00:13:19.960
+But what if I broke something?
+
+00:13:19.960 --> 00:13:28.440
+I just call guix home roll-back command
+
+00:13:28.440 --> 00:13:31.200
+and launch Emacs again, and you see
+
+00:13:31.200 --> 00:13:32.800
+now we have vertico back.
+
+00:13:32.800 --> 00:13:36.080
+Very good.
+
+00:13:36.080 --> 00:13:41.280
+Reliability is one of the most important qualities
+
+00:13:41.280 --> 00:13:43.920
+of working environment.
+
+00:13:43.920 --> 00:13:46.400
+We can always get back to
+
+00:13:46.400 --> 00:13:48.440
+the working state of our environment
+
+00:13:48.440 --> 00:13:52.520
+and be sure that we do the things we want.
+
+00:13:52.520 --> 00:13:57.720
+Now let's see another example.
+
+00:13:57.720 --> 00:13:59.960
+Here I have a mastodon,
+
+00:13:59.960 --> 00:14:03.600
+a post which contains a gemini link.
+
+00:14:03.600 --> 00:14:11.560
+I can click it, and you see it opens emacsclient,
+
+00:14:11.560 --> 00:14:14.480
+it renders this gemini capsule,
+
+00:14:14.480 --> 00:14:17.800
+and we can read all the posts of this guy.
+
+00:14:17.800 --> 00:14:21.000
+Very cool.
+
+00:14:21.000 --> 00:14:26.760
+But what if I go back to my configuration,
+
+00:14:26.760 --> 00:14:32.400
+we'll find a feature related to elpher,
+
+00:14:32.400 --> 00:14:36.080
+the application which handles gemini links,
+
+00:14:36.080 --> 00:14:38.320
+we'll comment it out,
+
+00:14:38.320 --> 00:14:41.720
+and we'll rebuild my home environment.
+
+00:14:41.720 --> 00:14:47.120
+What I expect here is that
+
+00:14:47.120 --> 00:14:48.440
+when I will be clicking the link,
+
+00:14:48.440 --> 00:15:02.320
+emacsclient won't pop up anymore.
+
+00:15:02.320 --> 00:15:02.720
+Cool.
+
+00:15:02.720 --> 00:15:06.600
+We rebuilt it and let's click the link.
+
+00:15:06.600 --> 00:15:08.360
+Now you see, it just opens another tab
+
+00:15:08.360 --> 00:15:10.760
+which doesn't do anything useful.
+
+00:15:10.760 --> 00:15:14.080
+Cool.
+
+00:15:14.080 --> 00:15:15.520
+Why it is important?
+
+00:15:15.520 --> 00:15:19.640
+It is important because every time
+
+00:15:19.640 --> 00:15:24.640
+you install something and you want to remove it,
+
+00:15:24.640 --> 00:15:29.320
+some parts depending on it can be broken.
+
+00:15:29.320 --> 00:15:31.840
+And also important in the other way around.
+
+00:15:31.840 --> 00:15:34.920
+Sometimes you want to install something,
+
+00:15:34.920 --> 00:15:36.640
+and it requires a few steps.
+
+00:15:36.640 --> 00:15:40.600
+For example, if you want to have
+
+00:15:40.600 --> 00:15:43.160
+a docker.el in your Emacs,
+
+00:15:43.160 --> 00:15:49.080
+you need not only docker.el itself
+
+00:15:49.080 --> 00:15:51.360
+and configuration for it,
+
+00:15:51.360 --> 00:15:55.240
+you also need to add your user to the docker group.
+
+00:15:55.240 --> 00:15:59.000
+But before it, you need to create this group,
+
+00:15:59.000 --> 00:16:00.454
+and you also need to
+
+00:16:00.455 --> 00:16:02.800
+define a system service and run it.
+
+00:16:02.800 --> 00:16:05.800
+Also you need to install docker package,
+
+00:16:05.800 --> 00:16:11.640
+docker-cli package, and containerd package.
+
+00:16:11.640 --> 00:16:15.440
+You can forget every of this small step,
+
+00:16:15.440 --> 00:16:20.480
+but if it in your declarative configuration
+
+00:16:20.480 --> 00:16:23.588
+in one place, and you just ask
+
+00:16:23.589 --> 00:16:27.821
+to enable this feature, each of those steps
+
+00:16:27.822 --> 00:16:30.880
+will be performed automatically.
+
+00:16:30.880 --> 00:16:33.200
+If you don't need docker anymore,
+
+00:16:33.200 --> 00:16:34.840
+you just disable the feature,
+
+00:16:34.840 --> 00:16:38.480
+and all the effect of all those steps
+
+00:16:38.480 --> 00:16:42.840
+will be removed from your system.
+
+00:16:42.840 --> 00:16:46.640
+I won't be showing it because it probably will
+
+00:16:46.640 --> 00:16:48.920
+take more time for reconfiguring,
+
+00:16:48.920 --> 00:16:54.400
+but you can experiment with it on your own.
+
+00:16:54.400 --> 00:17:00.840
+Let's do another interesting thing.
+
+00:17:00.840 --> 00:17:05.921
+Let's construct a small
+
+00:17:05.922 --> 00:17:07.720
+Emacs configuration from scratch.
+
+00:17:07.720 --> 00:17:10.920
+Who's this?
+
+00:17:10.920 --> 00:17:14.240
+I will open a file which contains only
+
+00:17:14.240 --> 00:17:18.720
+emacs-portable feature and feature-user-info.
+
+00:17:18.720 --> 00:17:21.120
+Now I will build an environment,
+
+00:17:21.120 --> 00:17:24.480
+and inside this environment,
+
+00:17:24.480 --> 00:17:26.640
+I will launch a new Emacs instance.
+
+00:17:26.640 --> 00:17:28.800
+As you see, it's very different
+
+00:17:28.800 --> 00:17:30.440
+from what you saw previously.
+
+00:17:30.440 --> 00:17:32.120
+And it's almost barebones.
+
+00:17:32.120 --> 00:17:39.520
+It doesn't contain anything
+
+00:17:39.520 --> 00:17:41.760
+except user-mail-address
+
+00:17:41.760 --> 00:17:45.080
+which is set to my mail address,
+
+00:17:45.080 --> 00:17:46.880
+and user-full-name.
+
+00:17:46.880 --> 00:17:50.760
+How it works:
+
+00:17:50.760 --> 00:17:54.000
+In feature-user-info, I define a few values.
+
+00:17:54.000 --> 00:18:01.120
+Those values are obtained by Emacs
+
+00:18:01.120 --> 00:18:03.280
+feature-emacs-portable
+
+00:18:03.280 --> 00:18:07.480
+and set inside Emacs configuration.
+
+00:18:07.480 --> 00:18:12.840
+But let's enable a few more features.
+
+00:18:12.840 --> 00:18:15.400
+I will do it in one go
+
+00:18:15.400 --> 00:18:22.120
+because we already saw how it works overall.
+
+00:18:22.120 --> 00:18:30.160
+Let's build another Emacs with Emacs configuration.
+
+00:18:30.160 --> 00:18:39.280
+The interesting thing about this Emacs instance
+
+00:18:39.280 --> 00:18:44.560
+is that it doesn't contain anything
+
+00:18:44.560 --> 00:18:46.520
+that I have in my usual Emacs.
+
+00:18:46.520 --> 00:18:49.360
+For example, I don't have much here.
+
+00:18:49.360 --> 00:18:55.040
+I don't have make installed, and so on.
+
+00:18:55.040 --> 00:19:06.640
+But we have feature-loader-portable package
+
+00:19:06.640 --> 00:19:09.960
+which just requires a few configure packages.
+
+00:19:09.960 --> 00:19:13.320
+Let's move it to a separate workspace.
+
+00:19:13.320 --> 00:19:21.680
+First of all, configure-rde-emacs-portable
+
+00:19:21.680 --> 00:19:23.720
+which just sets a few variables.
+
+00:19:23.720 --> 00:19:27.280
+rde configure-keycast which just shows
+
+00:19:27.280 --> 00:19:31.200
+something on the modeline
+
+00:19:31.200 --> 00:19:34.440
+which demonstrates the last hotkey pressed
+
+00:19:34.440 --> 00:19:40.080
+and the command which was invoked.
+
+00:19:40.080 --> 00:19:41.640
+We can enable which-key,
+
+00:19:41.640 --> 00:19:45.040
+and now when I type a prefix,
+
+00:19:45.040 --> 00:19:48.600
+I can see all the possible continuations
+
+00:19:48.600 --> 00:19:49.360
+for this prefix.
+
+00:19:49.360 --> 00:19:51.880
+I can enable vertico,
+
+00:19:51.880 --> 00:19:58.160
+and you can see, now we have nice completion UI.
+
+00:19:58.160 --> 00:20:03.560
+We can enable completion-related improvements
+
+00:20:03.560 --> 00:20:07.560
+and now I have not only UI itself, but also
+
+00:20:07.560 --> 00:20:15.320
+some notes here near each command,
+
+00:20:15.320 --> 00:20:17.800
+and ability to use regular expressions
+
+00:20:17.800 --> 00:20:21.480
+or some orderless matching.
+
+00:20:21.480 --> 00:20:26.400
+We can enable eshell,
+
+00:20:26.400 --> 00:20:31.320
+and now I have a hotkey for invoking Emacs shell.
+
+00:20:31.320 --> 00:20:35.920
+I don't have hotkey for vterm yet,
+
+00:20:35.920 --> 00:20:37.360
+but I can enable it,
+
+00:20:37.360 --> 00:20:40.800
+and now I have a terminal inside my Emacs.
+
+00:20:40.800 --> 00:20:43.240
+As you can see my usual shell is Zsh,
+
+00:20:43.240 --> 00:20:46.040
+but here I have a plain bash.
+
+00:20:46.040 --> 00:20:52.280
+Let's enable feature-git,
+
+00:20:52.280 --> 00:21:04.720
+and now I will be able to open my project.
+
+00:21:04.720 --> 00:21:11.488
+And inside this project,
+
+00:21:11.489 --> 00:21:14.640
+I will be able to open Magit
+
+00:21:14.640 --> 00:21:19.880
+and navigate around using imenu.
+
+00:21:19.880 --> 00:21:26.160
+Let's do few more things.
+
+00:21:26.160 --> 00:21:29.640
+Let's enable Org Roam
+
+00:21:29.640 --> 00:21:43.840
+so I will be able to open my EmacsConf notes.
+
+00:21:43.840 --> 00:21:48.240
+Let's enable configure-emacs.
+
+00:21:48.240 --> 00:21:53.320
+As you can see, the way it displayed updated.
+
+00:21:53.320 --> 00:21:59.520
+Let's enable configure-appearance,
+
+00:21:59.520 --> 00:22:03.880
+and you see the appearance of Emacs changed radically.
+
+00:22:03.880 --> 00:22:06.560
+And also, let's change the faces.
+
+00:22:06.560 --> 00:22:13.040
+And now you see almost my setup
+
+00:22:13.040 --> 00:22:14.800
+that you saw previously,
+
+00:22:14.800 --> 00:22:19.000
+but we build it from small tiny pieces.
+
+00:22:19.000 --> 00:22:27.520
+A little summary:
+
+00:22:27.520 --> 00:22:32.280
+rde is the one tool that you can use
+
+00:22:32.280 --> 00:22:34.440
+to manage the whole computing experience.
+
+00:22:34.440 --> 00:22:38.080
+It consists of composable components,
+
+00:22:38.080 --> 00:22:41.720
+and actually, it provides
+
+00:22:41.720 --> 00:22:43.240
+a reliable configuration framework.
+
+00:22:43.240 --> 00:22:46.360
+You always have a rollback.
+
+00:22:46.360 --> 00:22:49.320
+You always can switch to a generation
+
+00:22:49.320 --> 00:22:50.560
+you used a week ago.
+
+00:22:50.560 --> 00:22:57.520
+And of course, it's reproducible and declarative
+
+00:22:57.520 --> 00:22:58.680
+which is also very cool.
+
+00:22:58.680 --> 00:23:05.788
+rde Emacs is a part of rde
+
+00:23:05.789 --> 00:23:06.920
+but it can be used separately.
+
+00:23:06.920 --> 00:23:11.280
+You can think of it as an Emacs distribution
+
+00:23:11.280 --> 00:23:14.040
+which is vanilla-flavored, consistent,
+
+00:23:14.040 --> 00:23:15.960
+well-integrated, and self-contained.
+
+00:23:15.960 --> 00:23:19.560
+That's it for today.
+
+00:23:19.560 --> 00:23:22.054
+Don't hesitate to contact me
+
+00:23:22.055 --> 00:23:23.840
+via email or any other way.
+
+00:23:23.840 --> 00:23:28.154
+Thank you everyone for your attention
+
+00:23:28.155 --> 00:23:33.760
+and see you in a bit.
diff --git a/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt b/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt
new file mode 100644
index 00000000..713879c1
--- /dev/null
+++ b/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main--chapters.vtt
@@ -0,0 +1,56 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:20.479
+Introduction
+
+00:00:20.480 --> 00:00:51.799
+The end goal
+
+00:00:51.800 --> 00:02:11.519
+Constants and variables
+
+00:02:11.520 --> 00:02:40.039
+ROI
+
+00:02:40.040 --> 00:03:32.239
+Demo
+
+00:03:32.240 --> 00:04:02.239
+Detecting input
+
+00:04:02.240 --> 00:04:26.399
+Creating a table
+
+00:04:26.400 --> 00:05:17.959
+C-c C-c
+
+00:05:17.960 --> 00:07:12.999
+Our first formula
+
+00:07:13.000 --> 00:08:11.719
+Basic arithmetic
+
+00:08:11.720 --> 00:09:53.599
+Debugging
+
+00:09:53.600 --> 00:12:07.039
+Flags
+
+00:12:07.040 --> 00:12:50.039
+Recalculating
+
+00:12:50.040 --> 00:14:56.776
+Multiple formulas
+
+00:14:56.777 --> 00:16:36.201
+Formatting
+
+00:16:36.202 --> 00:18:12.202
+Conditional prompts
+
+00:18:12.203 --> 00:21:57.856
+Custom formulas
+
+00:21:57.857 --> 00:24:44.280
+Automatically updating
diff --git a/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt b/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt
new file mode 100644
index 00000000..5747aac9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-realestate--real-estate-and-org-table-formulas--daniel-gopar--main.vtt
@@ -0,0 +1,1736 @@
+WEBVTT captioned by tom
+
+
+00:00:00.000 --> 00:00:05.453
+Hey, I'm Gopar and this is the
+
+00:00:05.454 --> 00:00:07.639
+Real Estate and Org Mode Table Formulas talk.
+
+00:00:07.640 --> 00:00:09.879
+Not very creative, but it is what it is.
+
+00:00:09.880 --> 00:00:13.051
+Now I just want to say that everything I talk about here
+
+00:00:13.052 --> 00:00:15.902
+is in the Org Mode in the Emacs manual.
+
+00:00:15.903 --> 00:00:17.909
+I posted a link to the web version,
+
+00:00:17.910 --> 00:00:20.479
+but it should be inside of Emacs as well.
+
+00:00:20.480 --> 00:00:25.096
+Now before I start, I want to showcase the end goal.
+
+00:00:25.097 --> 00:00:26.806
+That way you know if you guys want to
+
+00:00:26.807 --> 00:00:28.739
+actually see the talk or not.
+
+00:00:28.740 --> 00:00:30.491
+So I always think that's pretty cool to see
+
+00:00:30.492 --> 00:00:31.517
+what you're actually going to build
+
+00:00:31.518 --> 00:00:32.679
+before you start building it.
+
+00:00:32.680 --> 00:00:34.285
+Alright. So let me start off with the goal,
+
+00:00:34.286 --> 00:00:38.762
+the end goal. Here we have a simple table formula
+
+00:00:38.763 --> 00:00:42.613
+and we have some constants, some values inside the list--
+
+00:00:42.614 --> 00:00:44.639
+inside the table, I'm sorry,
+
+00:00:44.640 --> 00:00:47.672
+and some other stuff that we will get to,
+
+00:00:47.673 --> 00:00:49.279
+but for now... I don't want to spoil too much.
+
+00:00:49.280 --> 00:00:50.327
+I just want to give you a demo
+
+00:00:50.328 --> 00:00:51.799
+of how it actually works.
+
+00:00:51.800 --> 00:00:56.094
+We have a few values. Let me first go over the constants.
+
+00:00:56.095 --> 00:00:57.581
+We have PMI, which stands for
+
+00:00:57.582 --> 00:00:57.590
+private mortgage insurance,
+
+00:00:57.591 --> 00:01:00.536
+so it's insurance that you'll have to pay
+
+00:01:00.537 --> 00:01:03.639
+depending on how much money you put into the deal.
+
+00:01:03.640 --> 00:01:06.067
+The property tax, which is self-explanatory,
+
+00:01:06.068 --> 00:01:09.316
+the tax that you owe for owning the property,
+
+00:01:09.317 --> 00:01:11.106
+and then home insurance,
+
+00:01:11.107 --> 00:01:13.439
+and the interest rate at the loan that you get.
+
+00:01:13.440 --> 00:01:15.666
+So, here we have a few columns.
+
+00:01:15.667 --> 00:01:17.411
+The first one is called House,
+
+00:01:17.412 --> 00:01:20.623
+which I usually just put a description of the house
+
+00:01:20.624 --> 00:01:21.126
+with the link of the posting,
+
+00:01:21.127 --> 00:01:22.493
+the price of the house,
+
+00:01:22.494 --> 00:01:26.189
+the percentage down payment (this I play around with
+
+00:01:26.190 --> 00:01:27.473
+to see how much the deal will be structured),
+
+00:01:27.474 --> 00:01:30.528
+the down payment (which is calculated from
+
+00:01:30.529 --> 00:01:31.754
+the previous two columns),
+
+00:01:31.755 --> 00:01:34.144
+the monthly mortgage (which is calculated as well),
+
+00:01:34.145 --> 00:01:37.995
+and then the tenant income (which is what I suppose
+
+00:01:37.996 --> 00:01:41.005
+would be an example of the tenant income
+
+00:01:41.006 --> 00:01:42.752
+that I can potentially make off the property,
+
+00:01:42.753 --> 00:01:45.539
+the 1% rule and the ROI.
+
+00:01:45.540 --> 00:01:47.707
+I'll quickly go over the last two columns.
+
+00:01:47.708 --> 00:01:49.200
+So first is the 1% rule.
+
+00:01:49.300 --> 00:01:50.879
+The 1% rule is essentially
+
+00:01:50.880 --> 00:01:53.588
+a "rule," in quotes, that says that
+
+00:01:53.589 --> 00:01:56.277
+if a property matches this specific formula,
+
+00:01:56.278 --> 00:01:58.319
+it is a good deal to look into.
+
+00:01:58.320 --> 00:02:00.889
+So for example, the first two pass,
+
+00:02:00.890 --> 00:02:02.676
+and the last one does not pass.
+
+00:02:02.677 --> 00:02:04.104
+The last one, at a quick glance,
+
+00:02:04.105 --> 00:02:05.471
+we can just ignore it and say,
+
+00:02:05.472 --> 00:02:06.476
+"hey, that's not going to fly,"
+
+00:02:06.477 --> 00:02:07.999
+we'll just ignore it.
+
+00:02:08.000 --> 00:02:09.890
+I won't go too much into details.
+
+00:02:09.891 --> 00:02:11.519
+That's just a brief summary.
+
+00:02:11.520 --> 00:02:14.148
+So now the ROI is the return on investment.
+
+00:02:14.149 --> 00:02:17.599
+So it says "how much of a return am I getting
+
+00:02:17.600 --> 00:02:18.959
+on the amount that I invested?"
+
+00:02:18.960 --> 00:02:21.167
+So let's say you put in $12,000,
+
+00:02:21.168 --> 00:02:23.455
+and at the end of the year, you cashflow $6,000.
+
+00:02:23.456 --> 00:02:26.126
+So if you calculate the ROI off of that,
+
+00:02:26.127 --> 00:02:28.476
+you get a 50% return on investment.
+
+00:02:28.477 --> 00:02:30.085
+In two years, you'll make your money back,
+
+00:02:30.086 --> 00:02:31.733
+which is pretty good.
+
+00:02:31.734 --> 00:02:32.718
+Then all the rest of the years,
+
+00:02:32.719 --> 00:02:34.347
+you'll just slowly be reaping in all that,
+
+00:02:34.348 --> 00:02:36.639
+all the excess cash flow.
+
+00:02:36.640 --> 00:02:40.039
+But yeah, that's it in a nutshell.
+
+00:02:40.040 --> 00:02:42.269
+So let me demo it real quick.
+
+00:02:42.270 --> 00:02:44.258
+So for example, I'm going to change the down payment,
+
+00:02:44.259 --> 00:02:45.744
+but I want you to pay attention
+
+00:02:45.745 --> 00:02:48.213
+to this column [down payment]
+
+00:02:48.214 --> 00:02:49.839
+and the monthly mortgage column.
+
+00:02:49.840 --> 00:02:51.726
+So right here [down payment] is $25,000,
+
+00:02:51.727 --> 00:02:53.472
+and here [monthly mortgage] is around $1,200,
+
+00:02:53.473 --> 00:02:55.179
+a little under $1,300.
+
+00:02:55.180 --> 00:02:57.349
+So what happens if I say, you know,
+
+00:02:57.350 --> 00:02:58.795
+what I'm going to change the down payment
+
+00:02:58.796 --> 00:03:00.948
+to 5% instead, because I just
+
+00:03:00.949 --> 00:03:02.559
+don't want to put 10.
+
+00:03:02.560 --> 00:03:04.125
+So let's just put say 5.
+
+00:03:04.126 --> 00:03:06.274
+Then I tab out of here, and voila -
+
+00:03:06.275 --> 00:03:08.522
+you see it updated to half of $25,000.
+
+00:03:08.523 --> 00:03:09.946
+So now it's $12,000,
+
+00:03:09.947 --> 00:03:10.689
+and this [monthly mortgage] went up
+
+00:03:10.690 --> 00:03:12.233
+over actually $1,300,
+
+00:03:12.234 --> 00:03:14.783
+and then this [1% rule] hasn't changed at all
+
+00:03:14.784 --> 00:03:17.679
+and the ROI is there.
+
+00:03:17.680 --> 00:03:19.147
+So one thing that I should mention is
+
+00:03:19.148 --> 00:03:20.193
+everything that I'm putting here
+
+00:03:20.194 --> 00:03:21.279
+is just example numbers,
+
+00:03:21.280 --> 00:03:25.634
+should not be taken into literal real estate advice.
+
+00:03:25.635 --> 00:03:26.859
+I just want to put that out there.
+
+00:03:26.860 --> 00:03:28.367
+These are just examples to show you
+
+00:03:28.368 --> 00:03:30.519
+how you can potentially make it on your own,
+
+00:03:30.520 --> 00:03:32.239
+do the formulas on your own.
+
+00:03:32.240 --> 00:03:35.650
+Alright, so another cool thing that I did was
+
+00:03:35.651 --> 00:03:37.737
+if there is no tenant income and I tab,
+
+00:03:37.738 --> 00:03:40.048
+it says "Enter Tenant Income".
+
+00:03:40.049 --> 00:03:41.032
+So if I don't put anything,
+
+00:03:41.033 --> 00:03:42.399
+it will automatically tell me, hey,
+
+00:03:42.400 --> 00:03:44.919
+I can't calculate without the tenant income.
+
+00:03:44.920 --> 00:03:46.607
+I can also do this right here [ROI field],
+
+00:03:46.608 --> 00:03:48.475
+say the same thing, Enter Tenant Income,
+
+00:03:48.476 --> 00:03:50.563
+but I just didn't put it for whatever reason, but
+
+00:03:50.564 --> 00:03:53.812
+after this video, you should be easily able to
+
+00:03:53.813 --> 00:03:57.399
+put it without much struggle.
+
+00:03:57.400 --> 00:04:00.130
+Alright, so if that's something you're interested in,
+
+00:04:00.131 --> 00:04:02.239
+then keep watching.
+
+00:04:02.240 --> 00:04:05.239
+So let's go over the basics first.
+
+00:04:05.240 --> 00:04:07.399
+So, how do we create a table?
+
+00:04:07.400 --> 00:04:10.368
+Well, we can do M-x org-table-create.
+
+00:04:10.369 --> 00:04:14.301
+If we run that it, will prompt us in a minibuffer.
+
+00:04:14.302 --> 00:04:16.892
+It says table size, columns times row.
+
+00:04:16.893 --> 00:04:18.177
+Usually it's rows times columns,
+
+00:04:18.178 --> 00:04:19.502
+but it is what it is.
+
+00:04:19.602 --> 00:04:20.465
+So let's just leave
+
+00:04:20.466 --> 00:04:24.959
+the default of 5 times 2, and voila, we get this.
+
+00:04:24.960 --> 00:04:26.399
+Beautiful. Awesome.
+
+00:04:26.400 --> 00:04:29.510
+So the other way is using the magical C-c C-c
+
+00:04:29.511 --> 00:04:32.401
+in Org Mode, which basically is context-aware
+
+00:04:32.402 --> 00:04:36.053
+and does anything, does the right thing like,
+
+00:04:36.054 --> 00:04:38.599
+almost 100% of the time, which is pretty amazing.
+
+00:04:38.600 --> 00:04:42.431
+Alright, let's just say I write a pipe, some words,
+
+00:04:42.432 --> 00:04:44.679
+and then another pipe, Gopar, and then
+
+00:04:44.680 --> 00:04:47.268
+another pipe. Let's just say we're trying to
+
+00:04:47.269 --> 00:04:50.599
+write it out via text, because in Org mode
+
+00:04:50.600 --> 00:04:51.546
+everything has text.
+
+00:04:51.547 --> 00:04:53.379
+There's nothing fancy about it.
+
+00:04:53.380 --> 00:04:57.672
+If I do C-c C-c, Org mode should automatically be
+
+00:04:57.673 --> 00:04:59.839
+context-aware that this area is a table.
+
+00:04:59.840 --> 00:05:04.294
+So, C-c C-c, boom. So if I press enter, another column.
+
+00:05:04.295 --> 00:05:06.963
+If I press tab, it should automatically move me.
+
+00:05:06.964 --> 00:05:09.391
+So yeah, so that's pretty much it.
+
+00:05:09.392 --> 00:05:11.919
+That's how you get started into the column.
+
+00:05:11.920 --> 00:05:15.591
+So, I'm assuming most of the people here already know that.
+
+00:05:15.592 --> 00:05:17.959
+This is just the primary basic review.
+
+00:05:17.960 --> 00:05:19.807
+So, let's first go...
+
+00:05:19.808 --> 00:05:22.819
+Let's go dive right into our first formula.
+
+00:05:22.820 --> 00:05:24.766
+So I copied some values over here,
+
+00:05:24.767 --> 00:05:27.696
+just to save time, and the columns.
+
+00:05:27.697 --> 00:05:29.163
+So, let's go ahead and say that
+
+00:05:29.164 --> 00:05:30.749
+we have single family house,
+
+00:05:30.750 --> 00:05:33.018
+and the price is a hundred thousand.
+
+00:05:33.019 --> 00:05:34.163
+And, Let's say that I want the price,
+
+00:05:34.164 --> 00:05:36.431
+the down payment that I want to put is 10%.
+
+00:05:36.432 --> 00:05:40.527
+Right. Alright. 10%. Now if I tab
+
+00:05:40.528 --> 00:05:42.393
+or go to the next column, nothing happens.
+
+00:05:42.394 --> 00:05:43.879
+Why is that? Well, it's because
+
+00:05:43.880 --> 00:05:44.984
+(you probably guessed it)
+
+00:05:44.985 --> 00:05:47.755
+we haven't written or tied any table formulas.
+
+00:05:47.756 --> 00:05:49.563
+So we're saying, alright, enough talk.
+
+00:05:49.564 --> 00:05:50.440
+How do we do that?
+
+00:05:50.540 --> 00:05:52.093
+Well, the answer is very simple.
+
+00:05:52.094 --> 00:05:54.983
+We do a pound sign (#), if I can find it.
+
+00:05:54.984 --> 00:05:58.712
+#+ and then we do TBL for table
+
+00:05:58.713 --> 00:06:01.119
+and then FM for formula.
+
+00:06:01.120 --> 00:06:03.428
+So, table formula, and the column.
+
+00:06:03.429 --> 00:06:04.934
+So this, you're already halfway
+
+00:06:04.935 --> 00:06:07.063
+to writing your first table formula.
+
+00:06:07.064 --> 00:06:09.171
+So let's say we want to automatically,
+
+00:06:09.172 --> 00:06:10.978
+Let's just, for exercise,
+
+00:06:10.979 --> 00:06:13.189
+we want to put the down payment,
+
+00:06:13.190 --> 00:06:14.615
+just put some type of value in there,
+
+00:06:14.616 --> 00:06:16.382
+just to make sure that it's working.
+
+00:06:16.383 --> 00:06:20.992
+So the way Org Mode refers to columns is,
+
+00:06:20.993 --> 00:06:24.140
+we start with the dollar sign ($) and then
+
+00:06:24.141 --> 00:06:26.868
+we put the number that the column is.
+
+00:06:26.869 --> 00:06:29.113
+Indexes start with one, not a zero.
+
+00:06:29.114 --> 00:06:31.623
+As most of us watching are programmers,
+
+00:06:31.624 --> 00:06:33.792
+we're probably used to starting with zero,
+
+00:06:33.793 --> 00:06:34.959
+but it starts with one.
+
+00:06:34.960 --> 00:06:38.330
+So one, two, three, four, five.
+
+00:06:38.331 --> 00:06:39.654
+So down payment is the fifth column,
+
+00:06:39.655 --> 00:06:42.303
+we say five, and then we say equal to,
+
+00:06:42.304 --> 00:06:44.288
+let's say Gopar.
+
+00:06:44.289 --> 00:06:47.937
+Then we do C-c C-c to evaluate it,
+
+00:06:47.938 --> 00:06:50.545
+and the table is automatically updated.
+
+00:06:50.546 --> 00:06:50.857
+Look at that.
+
+00:06:50.957 --> 00:06:55.862
+So when you do just this, dollar sign ($) 5,
+
+00:06:55.863 --> 00:06:57.706
+it updates every single column.
+
+00:06:57.806 --> 00:07:00.679
+There is a way to specify that this cell only and
+
+00:07:00.680 --> 00:07:03.224
+this cell only but this is out of scope and it's
+
+00:07:03.324 --> 00:07:05.639
+not that hard it's just not in this video.
+
+00:07:05.640 --> 00:07:08.774
+I would recommend, I commend you, or, actually
+
+00:07:08.874 --> 00:07:12.999
+I recommend that you go check out the manual for that.
+
+00:07:13.000 --> 00:07:17.624
+All right so, let's say we want to do some basic
+
+00:07:17.724 --> 00:07:19.224
+arithmetic we want to do some list values
+
+00:07:19.324 --> 00:07:20.390
+instead of just putting in text.
+
+00:07:20.490 --> 00:07:21.440
+So how do we do that?
+
+00:07:21.540 --> 00:07:24.457
+Well, we have to pull the expression that we want
+
+00:07:24.557 --> 00:07:25.007
+to put in.
+
+00:07:25.107 --> 00:07:27.859
+So, for example, if we want to add we'll do 20 plus
+
+00:07:27.959 --> 00:07:31.357
+20 and if we do C-c C-C to evaluate it, it should
+
+00:07:31.457 --> 00:07:34.224
+update every single column, the entire column,
+
+00:07:34.324 --> 00:07:38.540
+the fifth column I mean and, tada, it does.
+
+00:07:38.640 --> 00:07:41.799
+Cool! So now let's say we want to do a little bit
+
+00:07:41.899 --> 00:07:42.556
+more advanced.
+
+00:07:42.656 --> 00:07:44.907
+Let's say we want to add the previous column to
+
+00:07:45.007 --> 00:07:47.007
+this column, so how do we refer to this one?
+
+00:07:47.107 --> 00:07:50.890
+Well, 1-2-3-4 is the fourth column, so we would
+
+00:07:50.990 --> 00:07:55.831
+just simply do $4 and this should automatically
+
+00:07:55.931 --> 00:07:58.057
+be referring to this column (% DP).
+
+00:07:58.157 --> 00:08:02.190
+So we'll do 10 + 20, it's going to be 30 over here,
+
+00:08:02.490 --> 00:08:04.174
+and let's do C-C C-c.
+
+00:08:04.274 --> 00:08:07.024
+Ooh, error, what happened?
+
+00:08:07.124 --> 00:08:08.874
+Oh my god, oh my god.
+
+00:08:08.974 --> 00:08:11.719
+Well, this seems scary but no worries.
+
+00:08:11.720 --> 00:08:14.077
+This is where debugging comes in pretty handy,
+
+00:08:14.078 --> 00:08:16.740
+which is actually our next section as you can see.
+
+00:08:16.940 --> 00:08:19.324
+So, what happens if we do, if we go into the
+
+00:08:19.424 --> 00:08:21.340
+debugging section, what is the first step?
+
+00:08:21.440 --> 00:08:24.790
+Well, the first step is to try out, is to enable
+
+00:08:24.890 --> 00:08:26.416
+formula debugger.
+
+00:08:26.516 --> 00:08:31.294
+So, if you do C-c {, it will turn on a minor mode
+
+00:08:31.394 --> 00:08:35.509
+that whenever you evaluate a table formula,
+
+00:08:35.510 --> 00:08:38.290
+the debugger will be enabled,
+
+00:08:38.291 --> 00:08:39.357
+will automatically kick in.
+
+00:08:39.457 --> 00:08:41.073
+And if you want to disable the debugger,
+
+00:08:41.074 --> 00:08:43.774
+you just run the command again, and it will turn off.
+
+00:08:43.874 --> 00:08:46.607
+So, let's go ahead and run it. C-c {.
+
+00:08:46.608 --> 00:08:48.790
+As you can see in the mini buffer, it says,
+
+00:08:48.791 --> 00:08:51.441
+"formula debugging has been turned on". Awesome!
+
+00:08:51.541 --> 00:08:53.157
+So if we go back to our table
+
+00:08:53.158 --> 00:08:58.400
+and we try to run this, and see what's going on, we see...
+
+00:08:58.500 --> 00:09:00.440
+Oh, first off, before we look
+
+00:09:00.441 --> 00:09:01.390
+at the buffer that just opened,
+
+00:09:01.391 --> 00:09:02.490
+look at the mini buffer,
+
+00:09:02.491 --> 00:09:04.974
+it says "Debugging Formula. Continue to next?"
+
+00:09:05.074 --> 00:09:07.874
+So if you have multiple or a series of formulas,
+
+00:09:07.974 --> 00:09:09.690
+it will say, "hey, do you want to debug this one
+
+00:09:09.691 --> 00:09:10.374
+or the next one?"
+
+00:09:10.474 --> 00:09:11.958
+So this is just saying, "hey, do you want to go
+
+00:09:12.058 --> 00:09:13.090
+into the next formula?"
+
+00:09:13.190 --> 00:09:14.990
+And since there's no next formula,
+
+00:09:14.991 --> 00:09:16.057
+debugger will just exit out
+
+00:09:16.058 --> 00:09:18.199
+and leave you with the other buffer to see.
+
+00:09:18.299 --> 00:09:19.949
+For now, we'll just click no.
+
+00:09:20.049 --> 00:09:22.590
+Right now, it doesn't matter if you click yes or no
+
+00:09:22.591 --> 00:09:23.540
+because there's only one formula,
+
+00:09:23.640 --> 00:09:26.072
+but we'll just click no, and let's go ahead and
+
+00:09:26.172 --> 00:09:27.657
+pay attention to the new buffer.
+
+00:09:27.757 --> 00:09:29.807
+Well, over here it might seem a little confusing,
+
+00:09:29.808 --> 00:09:32.390
+but don't worry, we're just going to ignore most of this.
+
+00:09:32.490 --> 00:09:33.890
+The first thing that we're going to pay
+
+00:09:33.990 --> 00:09:35.457
+attention is to the original.
+
+00:09:35.557 --> 00:09:38.067
+So it says, okay, this is the original, so we have
+
+00:09:38.167 --> 00:09:41.124
+a quote expression, which is just trying to add the
+
+00:09:41.324 --> 00:09:41.740
+fourth column.
+
+00:09:41.840 --> 00:09:42.840
+And if we go over here
+
+00:09:42.841 --> 00:09:44.207
+once everything is finalized,
+
+00:09:44.208 --> 00:09:47.107
+it says "hey, we're trying to add this 10,
+
+00:09:47.207 --> 00:09:50.240
+but it's actually a string 10, and added to 20.
+
+00:09:50.340 --> 00:09:52.325
+So of course it's going to be an error, so now we
+
+00:09:52.425 --> 00:09:53.999
+know what the error is.
+
+00:09:54.099 --> 00:09:56.090
+So you're saying all right cool, awesome, now how
+
+00:09:56.190 --> 00:09:58.840
+do we transform that string into a number?
+
+00:09:58.940 --> 00:10:02.607
+Well, Org Mode formulas have these flags
+
+00:10:02.608 --> 00:10:05.674
+that you can use, and essentially a flag looks like this.
+
+00:10:05.774 --> 00:10:10.257
+It's a semicolon (;) followed by some letter
+
+00:10:10.258 --> 00:10:13.270
+or some identifier
+
+00:10:13.370 --> 00:10:16.490
+that will let Org mode know that hey,
+
+00:10:16.590 --> 00:10:18.290
+this should be turned into a number
+
+00:10:18.291 --> 00:10:20.207
+or this should be turned into whatever.
+
+00:10:20.307 --> 00:10:22.724
+There's different ones for alpha literal
+
+00:10:22.725 --> 00:10:23.863
+and for a bunch of...
+
+00:10:23.963 --> 00:10:25.274
+I think there's even "i" for "integer",
+
+00:10:25.474 --> 00:10:26.819
+so it depends what you want.
+
+00:10:26.919 --> 00:10:28.202
+So for now we're just going to put "number"
+
+00:10:28.203 --> 00:10:29.490
+because it's a real number.
+
+00:10:29.590 --> 00:10:33.699
+If we do this and the debugger is still on,
+
+00:10:33.707 --> 00:10:35.274
+(remember because it automatically
+
+00:10:35.374 --> 00:10:36.374
+stays on until we turn it off),
+
+00:10:36.474 --> 00:10:41.540
+if we reevaluate the the formula,
+
+00:10:41.640 --> 00:10:43.624
+we should be able to see it.
+
+00:10:43.724 --> 00:10:47.379
+But first, before I do that, let's check step two.
+
+00:10:47.479 --> 00:10:52.240
+I'll now rerun formulas with C-c * and table,
+
+00:10:52.340 --> 00:10:54.639
+which calls org-table-recalculate.
+
+00:10:54.640 --> 00:10:58.507
+To do this, you actually have to be inside the table.
+
+00:10:58.607 --> 00:11:02.354
+Otherwise, Org mode will try to do some other stuff
+
+00:11:02.454 --> 00:11:04.325
+because it is context-aware, so depending on
+
+00:11:04.425 --> 00:11:06.324
+the context it might do something else.
+
+00:11:06.424 --> 00:11:09.124
+So if we do C-c *...
+
+00:11:09.224 --> 00:11:12.724
+As you can see the debugger has kicked in,
+
+00:11:12.824 --> 00:11:14.102
+says, "Do you want to continue to next?"
+
+00:11:14.202 --> 00:11:17.580
+Let's press yes (y), and it has been applied.
+
+00:11:17.680 --> 00:11:20.971
+So as you can see, it only updated one column--
+
+00:11:21.071 --> 00:11:22.977
+I'm sorry, one row--and the thing is,
+
+00:11:23.077 --> 00:11:28.007
+when you run this, the recalculate, it will only
+
+00:11:28.107 --> 00:11:30.361
+run for the current row that you're in.
+
+00:11:30.461 --> 00:11:32.785
+If you want to run for the entire table,
+
+00:11:32.885 --> 00:11:36.240
+you're going to do C-u C-c *.
+
+00:11:36.340 --> 00:11:38.407
+Before I do that, let me turn off the debugger
+
+00:11:38.507 --> 00:11:40.807
+since we no longer are in need of it.
+
+00:11:40.907 --> 00:11:44.977
+So C-c {, and debugging has been turned off.
+
+00:11:45.077 --> 00:11:50.807
+Now let me do C-u C-c * and as you can see
+
+00:11:50.808 --> 00:11:54.320
+the other rows also calculated, updated as well.
+
+00:11:54.420 --> 00:11:54.924
+Beautiful!
+
+00:11:55.024 --> 00:11:58.507
+So as I mentioned, feel free to look / browse the
+
+00:11:58.607 --> 00:12:00.107
+documentation for more flags
+
+00:12:00.108 --> 00:12:02.640
+because each flag has its own special meaning
+
+00:12:02.641 --> 00:12:07.139
+and will do different things, which is pretty cool.
+
+00:12:07.140 --> 00:12:08.124
+All right, cool.
+
+00:12:08.224 --> 00:12:10.007
+We're done with debugging and we fixed it.
+
+00:12:10.107 --> 00:12:12.075
+So there, now we know how to create formulas
+
+00:12:12.076 --> 00:12:14.207
+and how to debug them whenever they break,
+
+00:12:14.307 --> 00:12:15.040
+which is awesome.
+
+00:12:15.140 --> 00:12:18.324
+All right, but remember how I said that you can
+
+00:12:18.424 --> 00:12:23.659
+only debug... Whenever you run recalculate,
+
+00:12:23.660 --> 00:12:25.340
+It will only run the first formula?
+
+00:12:25.440 --> 00:12:28.439
+Well, let's say you want to have multiple formulas?
+
+00:12:28.539 --> 00:12:30.807
+This is completely valid, except the bad thing is
+
+00:12:30.907 --> 00:12:34.090
+that you have to do C-c C-c C-c on each each one,
+
+00:12:34.190 --> 00:12:39.457
+because C-u C-c * won't recalculate everything.
+
+00:12:39.557 --> 00:12:40.350
+It won't.
+
+00:12:40.450 --> 00:12:41.557
+Sadly, it doesn't do it.
+
+00:12:41.657 --> 00:12:44.189
+There is a way that you can do it,
+
+00:12:44.289 --> 00:12:46.459
+which is hacking together some elisp.
+
+00:12:46.460 --> 00:12:47.474
+You can probably find it
+
+00:12:47.475 --> 00:12:48.707
+or you can probably make it yourself
+
+00:12:48.807 --> 00:12:51.107
+if you look around, but that's out of scope for this.
+
+00:12:51.207 --> 00:12:57.099
+So now, how do we... We can write all the formulas
+
+00:12:57.100 --> 00:12:59.007
+we want in one single line.
+
+00:12:59.107 --> 00:13:01.740
+There's a way to to distinguish
+
+00:13:01.741 --> 00:13:03.340
+when one ends and one begins
+
+00:13:03.341 --> 00:13:04.707
+and that is the double colon (::).
+
+00:13:04.807 --> 00:13:07.607
+So right there, and a new formula will begin.
+
+00:13:07.707 --> 00:13:08.374
+So for example,
+
+00:13:08.474 --> 00:13:12.224
+let's say for the seventh column we say "gopar".
+
+00:13:12.324 --> 00:13:17.407
+If I do C-c C-c, it'll run every single thing
+
+00:13:17.507 --> 00:13:19.226
+so that... "gopar". Tada!
+
+00:13:19.326 --> 00:13:20.624
+There, awesome.
+
+00:13:20.724 --> 00:13:22.440
+But this is going to get very annoying if you're
+
+00:13:22.540 --> 00:13:25.007
+simply trying to edit formulas like this, right?
+
+00:13:25.107 --> 00:13:26.933
+So that's where the nicer debugging,
+
+00:13:27.033 --> 00:13:28.790
+nicer editing section comes in.
+
+00:13:28.890 --> 00:13:32.299
+So, yes, just like as mentioned, table calls
+
+00:13:32.300 --> 00:13:33.507
+only the first formula.
+
+00:13:33.607 --> 00:13:36.349
+So what's the step onto this nicer editing section?
+
+00:13:36.449 --> 00:13:40.424
+Try out "C-c ," or `org-edit-special`.
+
+00:13:40.524 --> 00:13:44.557
+So let's go back to the table formula and call it...
+
+00:13:44.657 --> 00:13:47.590
+oh my god, look at that,
+
+00:13:47.690 --> 00:13:49.890
+a new buffer just for editing,
+
+00:13:49.990 --> 00:13:52.599
+and each formula is in its own line to make
+
+00:13:52.699 --> 00:13:54.624
+it easier, which is beautiful!
+
+00:13:54.724 --> 00:13:58.715
+So, let's just say I want to do another calculation.
+
+00:13:58.815 --> 00:14:02.607
+Let's do eight times eight, which should be 64,
+
+00:14:02.707 --> 00:14:04.740
+and we have no need of putting this flag
+
+00:14:04.741 --> 00:14:07.440
+because the flag only affects it on the input coming in.
+
+00:14:07.540 --> 00:14:09.074
+I should have mentioned that earlier.
+
+00:14:09.174 --> 00:14:10.774
+Only input coming in.
+
+00:14:10.874 --> 00:14:13.174
+There is ways to affect the output,
+
+00:14:13.274 --> 00:14:16.474
+which we'll also cover in this topic later on,
+
+00:14:16.574 --> 00:14:19.131
+but for now, you can either leave the end flag
+
+00:14:19.231 --> 00:14:21.990
+or leave it out. It will still work fine.
+
+00:14:21.991 --> 00:14:23.507
+Let's just leave it out for now.
+
+00:14:23.508 --> 00:14:26.624
+Let's just do C-c C-c to make sure
+
+00:14:26.625 --> 00:14:30.690
+that everything is working. 64. Beautiful.
+
+00:14:30.790 --> 00:14:33.066
+So there you have it. You can have multiple formulas
+
+00:14:33.166 --> 00:14:34.778
+just stacked up into one line,
+
+00:14:34.878 --> 00:14:36.390
+and whenever you need to edit it,
+
+00:14:36.391 --> 00:14:38.257
+just go into that into that line
+
+00:14:38.357 --> 00:14:41.024
+and "C-c ,", and tada!
+
+00:14:41.124 --> 00:14:44.350
+You have this ready, good to go, and for editing.
+
+00:14:44.450 --> 00:14:45.824
+Oh and if you want to exit out,
+
+00:14:45.825 --> 00:14:48.940
+also just do "C-c ," again and you're back.
+
+00:14:49.040 --> 00:14:51.890
+I did not mention that. Sweet!
+
+00:14:51.990 --> 00:14:54.774
+So now we know how to have
+
+00:14:54.775 --> 00:14:57.006
+a better editing experience. Sweet!
+
+00:14:57.106 --> 00:15:00.240
+So now comes the formatting section which I talked about.
+
+00:15:00.340 --> 00:15:01.874
+So what's the first step?
+
+00:15:01.974 --> 00:15:05.507
+Well for formatting, Org mode uses
+
+00:15:05.508 --> 00:15:08.574
+the printf function from C.
+
+00:15:08.674 --> 00:15:10.374
+So those who are familiar with C,
+
+00:15:10.375 --> 00:15:12.823
+you'll feel right at home because the way you format it
+
+00:15:12.923 --> 00:15:13.940
+is exactly the same way.
+
+00:15:14.040 --> 00:15:16.557
+So for example, this will print off
+
+00:15:16.558 --> 00:15:18.873
+a floating number with two decimal points.
+
+00:15:18.973 --> 00:15:21.540
+As you can see here, this is how you will use it.
+
+00:15:21.640 --> 00:15:26.324
+It will be after the semicolon and it will be "%.2f".
+
+00:15:26.424 --> 00:15:28.157
+So let's go ahead and test that out.
+
+00:15:28.158 --> 00:15:30.590
+Actually, let's go ahead to our latest function--
+
+00:15:30.690 --> 00:15:32.340
+I mean, to our latest formula.
+
+00:15:32.440 --> 00:15:33.840
+Let's go ahead to the nicer buffer
+
+00:15:33.841 --> 00:15:39.207
+and let's do, Ctrl... Let's enter the semicolon,
+
+00:15:39.208 --> 00:15:45.324
+and then let's put the percent sign, we do 2f.
+
+00:15:45.424 --> 00:15:49.174
+Actually, let's make it five
+
+00:15:49.175 --> 00:15:52.590
+just to differentiate from the formula, and let's see.
+
+00:15:52.690 --> 00:15:57.174
+Let's run it, and tada!
+
+00:15:57.274 --> 00:16:00.179
+So yeah, as you can see, five decimal points.
+
+00:16:00.180 --> 00:16:01.857
+and if we want zero decimal points, we can also
+
+00:16:01.957 --> 00:16:04.957
+just move point zero, and tada!
+
+00:16:05.057 --> 00:16:06.124
+Just like that.
+
+00:16:06.224 --> 00:16:08.774
+We can also just leave it as is how it was before,
+
+00:16:08.874 --> 00:16:10.874
+because before, we didn't even actually need it,
+
+00:16:10.875 --> 00:16:13.014
+but yeah, just an example.
+
+00:16:13.114 --> 00:16:15.090
+And just a reminder, there are
+
+00:16:15.091 --> 00:16:17.357
+plenty more ways of formatting,
+
+00:16:17.358 --> 00:16:19.640
+just look at the documentation.
+
+00:16:19.740 --> 00:16:21.724
+There will be more. Basically every single thing
+
+00:16:21.725 --> 00:16:25.574
+that you need, just use the documentation as reference.
+
+00:16:25.674 --> 00:16:28.340
+Cool! So now we know how to debug,
+
+00:16:28.341 --> 00:16:29.774
+how to write formulas
+
+00:16:29.775 --> 00:16:32.824
+and how to get a better, nicer editing buffer
+
+00:16:32.825 --> 00:16:35.124
+for the formula so we don't have to do it all
+
+00:16:35.125 --> 00:16:36.240
+in a single line.
+
+00:16:36.340 --> 00:16:38.657
+So, what about conditional prompts, like I was
+
+00:16:38.757 --> 00:16:43.390
+showing in the first table in the end goal?
+
+00:16:43.490 --> 00:16:47.299
+Well that's actually pretty simple because we already
+
+00:16:47.300 --> 00:16:48.324
+know how to do this.
+
+00:16:48.424 --> 00:16:51.133
+Yes, if you think about it for a second, if we are
+
+00:16:51.233 --> 00:16:54.221
+able to pull lisp s-expressions, then we are able to
+
+00:16:54.321 --> 00:16:56.290
+basically do it already. Here's an example.
+
+00:16:56.390 --> 00:17:01.807
+We're saying if the second column is empty, is zero--
+
+00:17:01.907 --> 00:17:04.619
+so actually, this should be with the N flag
+
+00:17:04.620 --> 00:17:06.940
+because we will transform empty values as zero,
+
+00:17:07.040 --> 00:17:08.819
+and that's how Org mode will read those.
+
+00:17:08.820 --> 00:17:12.424
+It's saying if the second flag is zero,
+
+00:17:12.425 --> 00:17:16.952
+then I want you to put "Enter the values."
+
+00:17:17.052 --> 00:17:20.440
+And if it's not empty, we're going to put
+
+00:17:20.540 --> 00:17:22.190
+"Values entered." We're going to recognize.
+
+00:17:22.290 --> 00:17:24.240
+So let's go ahead and actually do this.
+
+00:17:24.540 --> 00:17:28.990
+So let's grab this, and let's type it in.
+
+00:17:29.090 --> 00:17:36.457
+So let's go ahead. "Enter the values," because it
+
+00:17:36.557 --> 00:17:37.390
+doesn't have any.
+
+00:17:37.490 --> 00:17:42.440
+So let's go ahead and say "Hello EmacsConf"
+
+00:17:42.441 --> 00:17:47.224
+and let's go ahead and run it again.
+
+00:17:47.324 --> 00:17:48.457
+Since there are values,
+
+00:17:48.458 --> 00:17:51.574
+it's going to overwrite what's here and put value entered.
+
+00:17:51.674 --> 00:17:53.398
+So let's go ahead.
+
+00:17:53.498 --> 00:17:55.690
+Tada, so there you go.
+
+00:17:55.790 --> 00:18:00.524
+So that is pretty much how you do conditional props,
+
+00:18:00.624 --> 00:18:01.940
+which is pretty straightforward
+
+00:18:01.941 --> 00:18:02.724
+once you think about it
+
+00:18:02.725 --> 00:18:05.440
+because if you are able to insert Lisp expressions,
+
+00:18:05.441 --> 00:18:08.240
+then you are able to just do that check
+
+00:18:08.241 --> 00:18:11.074
+and do the conditional check yourself.
+
+00:18:11.174 --> 00:18:13.540
+So, custom formulas.
+
+00:18:13.640 --> 00:18:15.324
+Yeah, you'll see what I mean.
+
+00:18:15.424 --> 00:18:19.924
+We want to be able to put our own custom functions,
+
+00:18:20.024 --> 00:18:23.890
+and you probably have an idea how to do this already.
+
+00:18:23.990 --> 00:18:27.059
+Yes, we also know how to do this already.
+
+00:18:27.060 --> 00:18:30.357
+Before I continue, I'm going to say that I already
+
+00:18:30.457 --> 00:18:31.940
+have some formulas that I use
+
+00:18:31.941 --> 00:18:33.374
+which are not part of this talk
+
+00:18:33.375 --> 00:18:37.390
+because they're just functions that calculate some stuff.
+
+00:18:37.490 --> 00:18:39.990
+So for example, they calculate the monthly mortgage,
+
+00:18:40.090 --> 00:18:43.257
+the monthly PMI, property tax, homeowners insurance,
+
+00:18:43.357 --> 00:18:44.757
+so a bunch of other stuff.
+
+00:18:44.857 --> 00:18:49.729
+I have these functions already and they are a bit off,
+
+00:18:49.829 --> 00:18:52.212
+but for this example, they're doing everything.
+
+00:18:52.312 --> 00:18:54.390
+It's close enough, so don't worry too much.
+
+00:18:54.490 --> 00:18:56.824
+Just an example, you can have your own function
+
+00:18:56.924 --> 00:18:59.213
+that does something else like calculate
+
+00:18:59.313 --> 00:19:01.540
+a REI B rental or something like that.
+
+00:19:01.640 --> 00:19:03.219
+So you can do whatever you want.
+
+00:19:03.220 --> 00:19:04.724
+As long as you can call via Lisp,
+
+00:19:04.824 --> 00:19:07.899
+you can call it in Org mode, in the table formulas.
+
+00:19:07.900 --> 00:19:11.337
+So let's exit out of there.
+
+00:19:11.437 --> 00:19:13.807
+Now that we know how to do everything,
+
+00:19:13.808 --> 00:19:20.924
+let me go back to the original table and go from there.
+
+00:19:21.024 --> 00:19:26.524
+Let me close all these out actually.
+
+00:19:26.624 --> 00:19:29.524
+Now let's go back and revisit this table,
+
+00:19:29.624 --> 00:19:31.619
+since we'll be much, much more familiar
+
+00:19:31.620 --> 00:19:35.418
+except for one thing, which I will explain.
+
+00:19:35.518 --> 00:19:38.040
+So we have the constants right there
+
+00:19:38.041 --> 00:19:39.690
+and we have the house prices
+
+00:19:39.691 --> 00:19:42.499
+and we have everything just like I mentioned before.
+
+00:19:42.500 --> 00:19:44.023
+The main part that we want to look at
+
+00:19:44.123 --> 00:19:45.024
+is the table formula.
+
+00:19:45.124 --> 00:19:47.474
+So let's open up our special editing buffer,
+
+00:19:47.574 --> 00:19:49.674
+"C-c ,",
+
+00:19:49.774 --> 00:19:52.390
+and as you can see, I have some right here.
+
+00:19:52.490 --> 00:19:53.524
+So, the fifth column I'm saying,
+
+00:19:53.624 --> 00:19:55.824
+"Hey, we're gonna call this function
+
+00:19:55.924 --> 00:19:58.557
+rei-calculate-down-payment, and I'm gonna
+
+00:19:58.657 --> 00:20:00.757
+pass in the third column and fourth column
+
+00:20:00.758 --> 00:20:02.339
+and I'm going to pass in t." (true)
+
+00:20:02.340 --> 00:20:05.874
+I believe this is just to normalize,
+
+00:20:07.174 --> 00:20:12.057
+to convert to the proper decimal place,
+
+00:20:12.157 --> 00:20:14.079
+so let's not worry too much about that.
+
+00:20:14.179 --> 00:20:16.690
+Then for the sixth column, we're going to say
+
+00:20:16.790 --> 00:20:18.045
+"I calculate the monthly mortgage."
+
+00:20:18.145 --> 00:20:20.124
+We're going to pass in the third column
+
+00:20:20.224 --> 00:20:21.339
+the INTEREST_RATE, which we have
+
+00:20:21.439 --> 00:20:22.979
+defined over here in the constants.
+
+00:20:22.980 --> 00:20:26.274
+The 30, I believe this is for 30 years,
+
+00:20:26.374 --> 00:20:29.323
+PMI, the PROPERTY_TAX and HOME_INSURANCE,
+
+00:20:29.423 --> 00:20:30.774
+and then the fourth column.
+
+00:20:30.874 --> 00:20:33.824
+Then everything is going to be accepted as numbers,
+
+00:20:33.924 --> 00:20:35.074
+and we're going to have two decimals
+
+00:20:35.174 --> 00:20:36.174
+at the end of the place.
+
+00:20:36.274 --> 00:20:37.507
+So, what else?
+
+00:20:37.607 --> 00:20:40.074
+Over here is where we have our conditionals.
+
+00:20:40.174 --> 00:20:42.274
+We're saying, "hey, if the seventh column is 0,
+
+00:20:42.374 --> 00:20:44.302
+press 'Enter Tenant Income'."
+
+00:20:44.402 --> 00:20:48.407
+Over here as well, if the seventh column is zero,
+
+00:20:48.507 --> 00:20:51.724
+we're going to press 'Enter Tenant Income'
+
+00:20:51.824 --> 00:20:53.605
+and for this one we're going to say,
+
+00:20:53.705 --> 00:20:55.940
+"Hey, we're going to normalize the price."
+
+00:20:56.040 --> 00:20:59.240
+I believe this is a 1% rule.
+
+00:20:59.340 --> 00:21:01.390
+This could have been extracted into a function,
+
+00:21:01.490 --> 00:21:03.939
+but I just did the calculation right here.
+
+00:21:04.239 --> 00:21:07.890
+This, I believe, is the ROI, 12 months.
+
+00:21:07.990 --> 00:21:11.007
+This is just calculating the cash flow.
+
+00:21:11.107 --> 00:21:14.907
+This is a very rudimentary function or formula.
+
+00:21:15.407 --> 00:21:16.732
+Do not use this because there is way more
+
+00:21:16.733 --> 00:21:18.840
+to go into calculating the cash flow
+
+00:21:18.841 --> 00:21:21.499
+and also, it differs from person to person.
+
+00:21:21.599 --> 00:21:23.774
+Some people are more conservative,
+
+00:21:23.874 --> 00:21:26.959
+other people are way more liberal, so it just
+
+00:21:26.960 --> 00:21:28.874
+depends how you want to calculate it.
+
+00:21:28.974 --> 00:21:34.240
+As you can see, we have the N flag for numeric number
+
+00:21:34.241 --> 00:21:36.090
+and then we're saying we're formatting
+
+00:21:36.190 --> 00:21:37.694
+to one decimal place.
+
+00:21:37.794 --> 00:21:43.207
+The %% sign is just to input a percent sign as itself.
+
+00:21:43.208 --> 00:21:45.419
+Otherwise, Org mode is going to think
+
+00:21:45.420 --> 00:21:47.940
+it's some type of a formatter, which it's not.
+
+00:21:48.040 --> 00:21:49.140
+If you do... As I mentioned,
+
+00:21:49.240 --> 00:21:51.690
+if you've used the printf function in C or C++,
+
+00:21:51.790 --> 00:21:55.507
+then you probably know how to use it.
+
+00:21:55.607 --> 00:22:01.824
+Okay, so this is pretty much everything in a nutshell.
+
+00:22:01.924 --> 00:22:04.970
+So, one thing that I do want to say
+
+00:22:05.070 --> 00:22:06.379
+is the last section,
+
+00:22:06.479 --> 00:22:07.774
+which is automatically updating,
+
+00:22:07.874 --> 00:22:10.174
+which is the part that blew my mind
+
+00:22:10.175 --> 00:22:11.457
+when I realized that Org Mode can do this.
+
+00:22:11.557 --> 00:22:12.477
+So how do we do it?
+
+00:22:12.577 --> 00:22:14.659
+Well, you probably guessed just from looking at
+
+00:22:14.660 --> 00:22:18.324
+at the first table that we have right now.
+
+00:22:18.424 --> 00:22:20.774
+We add a column at the beginning
+
+00:22:20.874 --> 00:22:22.857
+of the table with a percent (%)--
+
+00:22:22.957 --> 00:22:24.857
+I'm sorry, with the pound sign (#)
+
+00:22:24.957 --> 00:22:28.457
+or hashtag as the younger kids call it.
+
+00:22:28.557 --> 00:22:31.045
+So this is what we do.
+
+00:22:31.145 --> 00:22:32.819
+We added a column at the beginning of the
+
+00:22:32.820 --> 00:22:34.984
+table, we do pound sign (#).
+
+00:22:35.084 --> 00:22:35.790
+So this is what it's for.
+
+00:22:35.890 --> 00:22:38.839
+This lets Org mode know that "hey,
+
+00:22:38.840 --> 00:22:41.140
+I want the values, the table formulas,
+
+00:22:41.240 --> 00:22:43.957
+to automatically run on each tab change."
+
+00:22:44.057 --> 00:22:46.240
+Now I believe that you can make it so that
+
+00:22:46.340 --> 00:22:49.123
+it changes, so that it updates on every keystroke.
+
+00:22:49.223 --> 00:22:51.024
+I think that's too much.
+
+00:22:51.124 --> 00:22:53.007
+And then you can also make it so that
+
+00:22:53.107 --> 00:22:56.019
+only certain rows update or certain columns.
+
+00:22:56.020 --> 00:22:58.219
+There's a plethora of things that you can do.
+
+00:22:58.319 --> 00:23:00.924
+You should definitely read up on the documentation,
+
+00:23:01.024 --> 00:23:03.425
+because you will probably make a way better talk,
+
+00:23:03.525 --> 00:23:06.974
+a way more advanced talk than I on this one,
+
+00:23:07.074 --> 00:23:09.574
+so I'm looking forward for that.
+
+00:23:09.674 --> 00:23:12.459
+But this is essentially how you build
+
+00:23:12.460 --> 00:23:15.507
+a Org mode table formula that will help you know
+
+00:23:15.508 --> 00:23:17.125
+if a property is correct.
+
+00:23:17.225 --> 00:23:22.340
+So, let's go ahead and as a final out to this demo,
+
+00:23:22.440 --> 00:23:25.419
+let's go ahead and enter a new column.
+
+00:23:25.420 --> 00:23:30.174
+Org-mode automatically puts the pound sign (#),
+
+00:23:30.274 --> 00:23:35.440
+which is awesome, and let's just say 'Emacs House',
+
+00:23:35.540 --> 00:23:39.590
+and let's say it is 100k.
+
+00:23:39.690 --> 00:23:44.339
+So 100k, and as you can see it's already trying to
+
+00:23:44.340 --> 00:23:46.040
+calculate the monthly mortgage,
+
+00:23:46.140 --> 00:23:47.090
+but we'll see about that,
+
+00:23:47.190 --> 00:23:49.879
+and let's just put 10% down.
+
+00:23:49.880 --> 00:23:53.057
+So 10% of 100k should be 10,000.
+
+00:23:53.157 --> 00:23:56.407
+So 10,000, correct, and the monthly mortgage is that
+
+00:23:56.408 --> 00:24:00.090
+and let's just say the tenant income is,
+
+00:24:00.190 --> 00:24:01.657
+as you can see right here,
+
+00:24:01.757 --> 00:24:05.874
+tenant income is, let's say 1500.
+
+00:24:05.974 --> 00:24:07.274
+Is it passing the 1% rule?
+
+00:24:07.374 --> 00:24:09.424
+Yep! What's my ROI?
+
+00:24:09.524 --> 00:24:13.879
+118%, which is kind of cool actually.
+
+00:24:13.880 --> 00:24:14.707
+That's a nice deal.
+
+00:24:14.907 --> 00:24:17.657
+So this is a rudimentary way of
+
+00:24:17.757 --> 00:24:20.319
+calculating deals in Org mode.
+
+00:24:20.419 --> 00:24:44.380
+I hope you found it interesting, and yeah, that is it.
diff --git a/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt
new file mode 100644
index 00000000..9dac1e1f
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers--chapters.vtt
@@ -0,0 +1,109 @@
+WEBVTT
+
+00:00:56.800 --> 00:03:24.599
+Pragmatically, how are people that buy into these ideals, and especially those that build the software, meant to live/thrive, short of renouncing many of the luxuries of modern life, as many have been struggling to reconcile both, it appears? Wouldn't it be smarter and more productive longer-term to solve that problem too?
+
+00:03:24.600 --> 00:04:28.679
+I have been admiring your work for free software for many years now. I am a bit concerned about what will happen to the GNU project when you retire (not soon, I hope!!). Have you planned how to manage the GNU project in the long run?
+
+00:04:52.520 --> 00:07:10.799
+In response to your aversion to JavaScript support in Emacs: In the same way that to revolt against the nonfree spirit in software development one has to develop software, and that to fight nonfree compilers one has to write a free compiler - can you fairly consider rejection of JavaScript as a tool conducive to improving the state of free JavaScript? A server can send back any MIME type to execute on your machine, JS was just the most convenient.
+
+00:07:27.000 --> 00:08:38.999
+With all the recent additions and optimizations to Emacs Lisp (lexical scoping, native compilation etc.) would you deem Emacs Lisp suitable for general purpose programming outside Emacs (i.e. scripting, running web servers). If not, why?
+
+00:08:44.760 --> 00:09:27.439
+Could you give a few examples of the medium-sized jobs necessary for WYSIWYG-editor support in Emacs?
+
+00:09:33.480 --> 00:10:48.639
+Should GNU (or someone else) define a safe-subset of HTML/CSS/JS to make web browsers simpler and safer (e.g. by preventing JS from contacting servers)?
+
+00:10:57.440 --> 00:13:50.479
+How can we ensure the continuity of an understanding of the more arcane parts of the [Emacs] source code, and increase their evolvability, notably with regards to display, single-threading limitations, etc.?
+
+00:13:50.480 --> 00:14:50.279
+Are there any problems or disadvantages using the GNU AGPL for non-networked software like Emacs packages?
+
+00:14:50.280 --> 00:16:36.839
+Is there a list of Emacs issues which can be solved by programmers with different levels? For example my level is A, I know basic elisp and C. How can I help?
+
+00:16:36.840 --> 00:17:19.359
+What roadblocks kept some of the other efforts from being used with Emacs?
+
+00:17:36.240 --> 00:17:55.119
+What do you use emacs for beyond editing?
+
+00:17:55.120 --> 00:18:37.279
+Song about e-mail
+
+00:18:49.556 --> 00:19:59.039
+Emacs is used by a small population relative to the population that could benefit from it. Do you have any thoughts on how to expand the user base more broadly even among software developers?
+
+00:20:05.760 --> 00:22:42.439
+Would a namespace system similar to Common Lisp packages but without :USE work in Emacs? Modern CL implementations have package local nicknames to create package local prefixes.
+
+00:22:42.440 --> 00:24:26.919
+With Emacs 29 adding more (awesome) features into vanilla Emacs, how should we ensure vanilla Emacs does not get bloated with many similar features? (example: ido/icomplete, vc/magit)
+
+00:24:26.920 --> 00:25:35.039
+Do you recommend reaching out in [high] schools for volunteers instead of universities because they are more prone to value the objectives of freedom?
+
+00:25:35.040 --> 00:27:14.879
+What was the thought process behind making Emacs Lisp dynamically scoped when you first created it? What advantages did it provide over the alternative?
+
+00:27:18.766 --> 00:29:28.839
+It's hard to pick up Emacs if you do not speak English. Can something be done to address that?
+
+00:29:28.840 --> 00:33:54.479
+Do you use Org or Org mode, and if so, to what extent?
+
+00:33:54.480 --> 00:35:19.039
+What do you have in mind for more modular Emacs development?
+
+00:35:19.040 --> 00:36:18.639
+Reframing the school question
+
+00:36:18.640 --> 00:37:48.799
+In light of that critique of JavaScript not being about the language per se but rather the "culture of blindly getting and running packages/libraries", what's so different with what's currently done by the vast majority of Emacs/Elisp users to just install packages blindly?
+
+00:37:48.800 --> 00:38:54.879
+Do you still intend to merge your patch to the "shorthands" feature to the master branch?
+
+00:38:54.880 --> 00:40:27.919
+Do you think the freedom e.g., we have in Emacs, becomes a hurdle for some people to pursue more important things in the world? I used to do a lot of Emacs programming, but I recently try to stay away from tinkering on Emacs.
+
+00:40:27.920 --> 00:43:28.839
+Question about software freedom: how does it apply to software that are art/media experiences, like videogames? In your view, Is the creator of a videogame obliged to release it under a free license?
+
+00:43:35.915 --> 00:45:45.567
+Have you seen Haketilo? It seems similar to LibreJS.
+
+00:45:45.568 --> 00:47:09.799
+Do you have any suggestions for helping propective contributers streamline
+the copyright assignment needed to contribute to Emacs (and other FSF software
+projects)?
+
+00:47:09.800 --> 00:49:31.279
+Can complexity induced by company-funded free/libre code become a problem, when the company pulls out, leaving the code potentially unmaintainable?
+
+00:49:31.280 --> 00:52:06.250
+What do you think of Hyperbole or EEV instead of org mode, or other things for the stuff that org mode does "second brain / knowledge base", or GTD 'getting things done' etc... among other things in Emacs or other Emacs packages
+
+00:52:06.251 --> 00:53:02.999
+Are there plans to bring modal editing (eg. evil-mode, viper) to Emacs core and did your opinion on modal editing change over the years?
+
+00:53:03.000 --> 00:54:04.839
+What is your opinion on the current state of large machine
+learning/AI models?
+
+00:54:14.302 --> 00:55:38.839
+I thought it was a virtue to separate the content from the style orappearance of information. Part of being free is also to view information in the format that you want. Does your WYSIWYG idea erode this virtue and lead to more thinking -- perhaps undue thinking about style over substance?
+
+00:55:38.840 --> 00:56:30.759
+Do you ever dabble in retro-computing, e.g. logging into TOPS10/20 systems SDF, etc?
+
+00:56:38.196 --> 00:58:04.479
+Do you know Gemini?
+
+00:58:04.480 --> 00:59:49.960
+stallmansupport.org
diff --git a/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt
new file mode 100644
index 00000000..eee7b8cc
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--answers.vtt
@@ -0,0 +1,2217 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:02.492
+[Amin]: Yep, thanks RMS for the great talk.
+
+00:00:02.493 --> 00:00:04.759
+Now it's time for questions and answers.
+
+00:00:04.760 --> 00:00:13.519
+I will paste the questions here and RMS will choose which ones to answer.
+
+00:00:13.520 --> 00:00:17.501
+[Richard]: Please don't post a lot of questions in the Mumble chat
+
+00:00:17.502 --> 00:00:19.239
+and fill up the buffer.
+
+00:00:19.240 --> 00:00:25.359
+There's a limit to what I can see on the screen, so make sure it's visible.
+
+00:00:25.360 --> 00:00:27.159
+Don't get too far ahead.
+
+00:00:27.160 --> 00:00:42.279
+[Amin]: Sure, I will only paste one or two questions at a time.
+
+00:00:42.280 --> 00:00:43.639
+I think it would also be helpful
+
+00:00:43.640 --> 00:00:47.359
+if you read out the questions as you answer them, Richard.
+
+00:00:47.360 --> 00:00:56.799
+[Richard]: Okay.
+
+NOTE Pragmatically, how are people that buy into these ideals, and especially those that build the software, meant to live/thrive, short of renouncing many of the luxuries of modern life, as many have been struggling to reconcile both it appears. Wouldn't it be smarter and more productive longer-term to solve that problem too?
+
+00:00:56.800 --> 00:01:01.079
+Well, this question is a little silly.
+
+00:01:01.080 --> 00:01:05.159
+It's based on sort of all or none thinking.
+
+00:01:05.160 --> 00:01:09.079
+Pragmatically, how are people that buy into these ideals?
+
+00:01:09.080 --> 00:01:11.199
+I find that term offensive.
+
+00:01:11.200 --> 00:01:16.479
+And especially those that build the software meant to live/thrive,
+
+00:01:16.480 --> 00:01:20.839
+short of renouncing many of the luxuries of modern life.
+
+00:01:20.840 --> 00:01:24.239
+It's repackaged standard.
+
+00:01:24.240 --> 00:01:30.319
+You'll die if you don't write proprietary software.
+
+00:01:30.320 --> 00:01:33.839
+But most people in the world don't write proprietary software
+
+00:01:33.840 --> 00:01:36.079
+and that doesn't kill them.
+
+00:01:36.080 --> 00:01:41.799
+Whatever you do to make money, if you're reasonably well paid at it,
+
+00:01:41.800 --> 00:01:44.119
+which if you're working in software, I hope you are,
+
+00:01:44.120 --> 00:01:49.479
+that enables you to have a lot of time to do something else,
+
+00:01:49.480 --> 00:01:53.199
+like write some free software, even supposing you find no way
+
+00:01:53.200 --> 00:02:01.639
+to make any money from the free software world, but that's just the worst case.
+
+00:02:01.640 --> 00:02:08.079
+And for a lot of people, the life they find isn't the worst case.
+
+00:02:08.080 --> 00:02:13.559
+So I think it's basically, the question is an exaggeration.
+
+00:02:13.560 --> 00:02:16.399
+We don't need to worry about it.
+
+00:02:16.400 --> 00:02:22.479
+There are many businesses which do hire people to write free software.
+
+00:02:22.480 --> 00:02:26.079
+So write whatever free program for the business
+
+00:02:26.080 --> 00:02:28.079
+that the business wants you to write.
+
+00:02:28.080 --> 00:02:32.759
+And make sure you get permission to write your own software
+
+00:02:32.760 --> 00:02:34.639
+and release it as free software
+
+00:02:34.640 --> 00:02:38.239
+and contribute it to free software projects,
+
+00:02:38.240 --> 00:02:46.759
+and you'll be able to contribute.
+
+00:02:46.760 --> 00:02:48.439
+How can I help?
+
+00:02:48.440 --> 00:02:52.519
+In addition, one very big part of the software business
+
+00:02:52.520 --> 00:02:56.359
+is custom software development for a client.
+
+00:02:56.360 --> 00:02:59.919
+One client at a time, basically.
+
+00:02:59.920 --> 00:03:05.519
+And if that business is not treating its clients as suckers,
+
+00:03:05.520 --> 00:03:10.719
+it will release the code to them under a free software license.
+
+00:03:10.720 --> 00:03:14.039
+Okay, there you are. You're getting paid to write free software.
+
+00:03:14.040 --> 00:03:24.599
+Perfectly ethical.
+
+NOTE I have been admiring your work for free software for many years now. I am a bit concerned about what will happen to the GNU project when you retire (not soon, I hope!!). Have you planned how to manage the GNU project in the long run?
+
+00:03:24.600 --> 00:03:28.719
+I have been admiring your work for free software for many years now.
+
+00:03:28.720 --> 00:03:33.639
+I'm a bit concerned about what will happen to the GNU project when you retire.
+
+00:03:33.640 --> 00:03:37.359
+Have you planned how to manage the GNU project in the long run?
+
+00:03:37.360 --> 00:03:45.359
+I haven't found a way. I had an idea for what to do.
+
+00:03:45.360 --> 00:03:54.639
+I hoped to train some people who were activists and committed supporters
+
+00:03:54.640 --> 00:04:01.159
+to start making some decisions without me and I would give them feedback.
+
+00:04:01.160 --> 00:04:10.199
+But I didn't succeed in getting them to discuss issues and propose decisions.
+
+00:04:10.200 --> 00:04:11.719
+Well, I guess I'll have to try again. Over.
+
+00:04:11.720 --> 00:04:28.679
+Just a second. I have to go and open the door.
+
+NOTE In response to your aversion to JavaScript support in Emacs: In the same way that to revolt against the nonfree spirit in software development one has to develop software, and that to fight nonfree compilers one has to write a free compiler - can you fairly consider rejection of JavaScript as a tool conducive to improving the state of free JavaScript? A server can send back any MIME type to execute on your machine, JS was just the most convenient.
+
+00:04:52.520 --> 00:04:55.479
+In response to your aversion to JavaScript support in Emacs
+
+00:04:55.480 --> 00:04:58.039
+in the same way that to revolt against
+
+00:04:58.040 --> 00:05:00.479
+the non-free spirit in software development,
+
+00:05:00.480 --> 00:05:04.439
+one has to develop software and that to fight non-free compilers,
+
+00:05:04.440 --> 00:05:05.999
+one has to write a free compiler.
+
+00:05:06.000 --> 00:05:11.199
+Can you fairly consider rejection of JavaScript as a tool conducive
+
+00:05:11.200 --> 00:05:14.159
+to improving the state of free JavaScript?
+
+00:05:14.160 --> 00:05:16.759
+There's a fundamental confusion here.
+
+00:05:16.760 --> 00:05:23.439
+The problem with JavaScript is not comparable to the problem of
+
+00:05:23.440 --> 00:05:31.519
+non-free C compilers or C++ compilers or Java compilers.
+
+00:05:31.520 --> 00:05:36.839
+This is a totally different kind of issue.
+
+00:05:36.840 --> 00:05:40.479
+We have free JavaScript support.
+
+00:05:40.480 --> 00:05:45.839
+Free browsers contain that.
+
+00:05:45.840 --> 00:05:48.519
+That's not the issue.
+
+00:05:48.520 --> 00:05:52.399
+The issue is what about the programs you're going to run?
+
+00:05:52.400 --> 00:05:58.359
+If you're talking about C, well, if you're going to run a C program,
+
+00:05:58.360 --> 00:06:02.799
+it's because at compile at first, it's because you got the source code.
+
+00:06:02.800 --> 00:06:09.039
+Probably it's free software or else it's a private project,
+
+00:06:09.040 --> 00:06:14.919
+internal project, and there's no particular danger in that.
+
+00:06:14.920 --> 00:06:18.399
+If JavaScript were just like that,
+
+00:06:18.400 --> 00:06:21.319
+there'd be no particular danger in JavaScript either.
+
+00:06:21.320 --> 00:06:26.959
+The problem is that hundreds of thousands of websites,
+
+00:06:26.960 --> 00:06:33.199
+or is it millions, are sending JavaScript programs to their visitors
+
+00:06:33.200 --> 00:06:35.919
+who don't even know what JavaScript is,
+
+00:06:35.920 --> 00:06:39.159
+who are not programmers, who have no idea what's going on.
+
+00:06:39.160 --> 00:06:43.439
+So these programs are usually non-free.
+
+00:06:43.440 --> 00:06:48.599
+They end up in the user's browser, they run, many of them are malware.
+
+00:06:48.600 --> 00:06:51.039
+So what's going to happen?
+
+00:06:51.040 --> 00:06:57.679
+Basically, JavaScript is a platform for websites to mistreat users.
+
+00:06:57.680 --> 00:06:59.679
+I know it can be used in other ways,
+
+00:06:59.680 --> 00:07:06.319
+but socially, the existence of those other ways makes little difference.
+
+00:07:06.320 --> 00:07:10.799
+The important thing about JavaScript is the danger that it creates.
+
+NOTE With all the recent additions and optimizations to Emacs Lisp (lexical scoping, native compilation etc.) would you deem Emacs Lisp suitable for general purpose programming outside Emacs (i.e. scripting, running web servers). If not, why?
+
+00:07:27.000 --> 00:07:32.279
+This question is about the idea of using Emacs Lisp
+
+00:07:32.280 --> 00:07:37.919
+for general purpose programming that has nothing to do with Emacs.
+
+00:07:37.920 --> 00:07:44.479
+Well, in theory, I guess, in principle, there's nothing wrong with that.
+
+00:07:44.480 --> 00:07:56.879
+But I think that would be a distraction, and I'd rather we didn't do it.
+
+00:07:56.880 --> 00:08:02.359
+Now, if we had a thousand great programmers ready to do that,
+
+00:08:02.360 --> 00:08:05.999
+and every other thing we could use, sure.
+
+00:08:06.000 --> 00:08:12.639
+But the fact is, we don't. And I'd really rather--
+
+00:08:12.640 --> 00:08:17.479
+There are many platforms that are fine to write programs on.
+
+00:08:17.480 --> 00:08:26.399
+So I'd rather we work on making Emacs better at editing
+
+00:08:26.400 --> 00:08:30.799
+and improving Emacs Lisp in the ways that help that goal,
+
+00:08:30.800 --> 00:08:38.999
+and leave developing general purpose programming platforms to other languages.
+
+NOTE Could you give a few examples of the medium-sized jobs necessary for WYSIWYG-editor support in Emacs?
+
+00:08:44.760 --> 00:08:51.559
+Could I give a list of the specific medium-sized jobs
+
+00:08:51.560 --> 00:08:54.959
+necessary for WYSIWYG editing?
+
+00:08:54.960 --> 00:08:58.999
+Well, I can't really. I don't have a list of one.
+
+00:08:59.000 --> 00:09:04.399
+And I'd really appreciate it if people started putting together such a list.
+
+00:09:04.400 --> 00:09:08.839
+But if you look at every feature that LibreOffice has
+
+00:09:08.840 --> 00:09:14.399
+that Emacs doesn't have, I think you will get a list.
+
+00:09:14.400 --> 00:09:17.679
+Now, maybe some of those are not that important.
+
+00:09:17.680 --> 00:09:23.759
+Maybe only a subset of them would make the list of really important ones.
+
+00:09:23.760 --> 00:09:27.439
+But I think that will give everybody a start.
+
+NOTE Should GNU (or someone else) define a safe-subset of HTML/CSS/JS to make web browsers simpler and safer (e.g. by preventing JS from contacting servers)?
+
+00:09:33.480 --> 00:09:39.159
+Should GNU or someone else define a safe subset of HTML, CSS, JS
+
+00:09:39.160 --> 00:09:41.559
+to make web browsers simpler and safer?
+
+00:09:41.560 --> 00:09:46.519
+You know, that would be an interesting thing to explore.
+
+00:09:46.520 --> 00:09:48.879
+But I don't know whether it can be done.
+
+00:09:48.880 --> 00:09:53.439
+The thing is, one of the dangerous things about JavaScript
+
+00:09:53.440 --> 00:09:55.959
+is browser profiling.
+
+00:09:55.960 --> 00:10:02.559
+Every machine runs a program at a slightly different speed.
+
+00:10:02.560 --> 00:10:09.399
+And the idea of browser profiling is that the website sends a JavaScript program
+
+00:10:09.400 --> 00:10:13.399
+to run on every visitor's browser.
+
+00:10:13.400 --> 00:10:19.999
+And it's actually a collection of benchmarks.
+
+00:10:20.000 --> 00:10:26.079
+And the collection of results is different for each user's computer.
+
+00:10:26.080 --> 00:10:30.919
+And so it enables the website to recognize each one when it comes back
+
+00:10:30.920 --> 00:10:34.799
+even if there's no cookie to help it.
+
+00:10:34.800 --> 00:10:42.719
+So, which features are sufficient to make possible browser profiling?
+
+00:10:42.720 --> 00:10:46.799
+There may be no particular unusual feature that's crucial.
+
+00:10:46.800 --> 00:10:48.639
+But arithmetic might be enough.
+
+NOTE How can we ensure the continuity of an understanding of the more arcane parts of the [Emacs] source code, and increase their evolvability, notably with regards to display, single-threading limitations, etc.?
+
+00:10:57.440 --> 00:11:00.679
+How can we ensure the continuity of an understanding
+
+00:11:00.680 --> 00:11:02.999
+of the more arcane parts of source code
+
+00:11:03.000 --> 00:11:08.279
+and increase their evolvability, notably with regard to display,
+
+00:11:08.280 --> 00:11:14.879
+single-threading limitations, etc.?
+
+00:11:14.880 --> 00:11:19.759
+Well, single-threading is a very specific thing.
+
+00:11:19.760 --> 00:11:26.559
+And the furthest that I've bothered to think about it is
+
+00:11:26.560 --> 00:11:33.799
+how can we enable easily multiple list program threads
+
+00:11:33.800 --> 00:11:35.199
+to be running in parallel.
+
+00:11:35.200 --> 00:11:39.759
+But if you're talking about multi-threading in display,
+
+00:11:39.760 --> 00:11:42.239
+I don't know if that even helps.
+
+00:11:42.240 --> 00:11:48.599
+Of course, my machine doesn't really enable me to run
+
+00:11:48.600 --> 00:11:57.719
+multiple threads in a single program, so it never mattered to me.
+
+00:11:57.720 --> 00:12:06.319
+Basically, now, development of a display code
+
+00:12:06.320 --> 00:12:12.239
+not in regard to threads, well, that's more feasible.
+
+00:12:12.240 --> 00:12:19.279
+But the thing is, generally, any new feature is likely to require
+
+00:12:19.280 --> 00:12:25.799
+changes in the buffer data structure to represent the use of the feature.
+
+00:12:25.800 --> 00:12:29.199
+And I think that's going to be the hard part.
+
+00:12:29.200 --> 00:12:33.479
+So, display won't be the hard part, and it won't be the first part.
+
+00:12:33.480 --> 00:12:37.599
+The first part is figuring out how you're going to represent a buffer
+
+00:12:37.600 --> 00:12:43.519
+with a certain display bell or whistle in it.
+
+00:12:43.520 --> 00:12:47.719
+And once you've worked that out and worked out how it's going to work well
+
+00:12:47.720 --> 00:12:51.359
+in editing, then I think you'll be able to figure out
+
+00:12:51.360 --> 00:12:55.119
+what display has to do to handle it.
+
+00:12:55.120 --> 00:13:01.079
+Of course, you have to decide that data structure,
+
+00:13:01.080 --> 00:13:05.199
+thinking about how display is going to handle it efficiently.
+
+00:13:05.200 --> 00:13:13.119
+If the data structure is bad, it won't be possible to display efficiently.
+
+00:13:13.120 --> 00:13:15.759
+So you need to think about that at that stage.
+
+00:13:15.760 --> 00:13:19.599
+But the actual work is working out the data structure
+
+00:13:19.600 --> 00:13:21.559
+and the editing to handle it.
+
+00:13:21.560 --> 00:13:31.639
+Do you recommend reaching out to schools for volunteers instead of universities
+
+00:13:31.640 --> 00:13:35.639
+because they're more prone to value the objectives of freedom?
+
+00:13:35.640 --> 00:13:38.519
+Well, reaching out for what?
+
+00:13:38.520 --> 00:13:43.719
+Reaching out to try to teach people about freedom?
+
+00:13:43.720 --> 00:13:47.479
+Or reaching out to find more developers?
+
+00:13:47.480 --> 00:13:50.479
+Maybe that person could respond.
+
+NOTE Are there any problems or disadvantages using the GNU AGPL for non-networked software like Emacs packages?
+
+00:13:50.480 --> 00:14:05.199
+Is there any problem or disadvantage in using the GNU AGPL
+
+00:14:05.200 --> 00:14:08.519
+for non-network software like Emacs packages?
+
+00:14:08.520 --> 00:14:10.239
+I don't see one.
+
+00:14:10.240 --> 00:14:17.359
+The reason why I didn't put the AGPL clause into the regular GNU GPL
+
+00:14:17.360 --> 00:14:22.319
+is it seemed a bit radical and I figured the community
+
+00:14:22.320 --> 00:14:27.079
+would be happier if that radical change didn't happen
+
+00:14:27.080 --> 00:14:31.839
+in the GNU general public license itself.
+
+00:14:31.840 --> 00:14:35.839
+I would like the person who asked the previous question
+
+00:14:35.840 --> 00:14:40.719
+to respond to what I said so I can get that answer
+
+00:14:40.720 --> 00:14:43.519
+and finish answering her question.
+
+00:14:43.520 --> 00:14:46.119
+Right.
+
+00:14:46.120 --> 00:14:50.279
+I will let you know if we end up hearing back from you--from per.
+
+NOTE Is there a list of Emacs issues which can be solved by programmers with different levels? For example my level is A, I know basic elisp and C. How can I help?
+
+00:14:50.280 --> 00:15:03.439
+Is there a list of Emacs issues which can be solved by programmers
+
+00:15:03.440 --> 00:15:05.079
+with different levels?
+
+00:15:05.080 --> 00:15:07.319
+I don't know of one.
+
+00:15:07.320 --> 00:15:14.159
+I tend to think that people who know basic programs
+
+00:15:14.160 --> 00:15:20.359
+the basic level of list programming can't contribute yet.
+
+00:15:20.360 --> 00:15:25.919
+They might be able to start debugging problems.
+
+00:15:25.920 --> 00:15:30.359
+It won't be easy but that might be a good first thing to do.
+
+00:15:30.360 --> 00:15:36.359
+Look at bugs that are waiting and see if you can debug one of them
+
+00:15:36.360 --> 00:15:39.519
+and then when you find out what's actually going wrong
+
+00:15:39.520 --> 00:15:44.159
+you can send that to the developers and it will very likely
+
+00:15:44.160 --> 00:15:46.679
+enable them to fix the problem quickly.
+
+00:15:46.680 --> 00:15:52.279
+In the process you'll learn a lot about programs
+
+00:15:52.280 --> 00:15:54.039
+and how programs are actually written
+
+00:15:54.040 --> 00:15:56.959
+and how to understand the code you actually come across.
+
+00:15:56.960 --> 00:16:02.439
+With features like Org mode and enriched mode,
+
+00:16:02.440 --> 00:16:06.759
+it seems that Emacs is getting closer to the goal of WYSIWYG.
+
+00:16:06.760 --> 00:16:10.799
+Well it's got somewhat closer but it has a very long way to go.
+
+00:16:10.800 --> 00:16:15.119
+If you compare it with something like LibreOffice
+
+00:16:15.120 --> 00:16:17.039
+you'll see how long away there is to go.
+
+00:16:17.040 --> 00:16:31.399
+There was an effort called GuileEmacs a while back
+
+00:16:31.400 --> 00:16:36.839
+which was some effort to get Guile to be able to compile and run Emacs Lisp.
+
+NOTE What roadblocks kept some of the other efforts from being used with Emacs?
+
+00:16:36.840 --> 00:16:40.959
+[Amin]: You mentioned there were still some challenges relating to Guile.
+
+00:16:40.960 --> 00:16:45.879
+What roadblocks kept some of the other efforts from being used with Emacs?
+
+00:16:45.880 --> 00:16:50.275
+[Richard]: Well we never finished solving the problem
+
+00:16:50.276 --> 00:16:55.239
+of reconciling Guile data types with Emacs Lisp data types.
+
+00:16:55.240 --> 00:17:02.439
+We got an idea for how to deal with the fact that
+
+00:17:02.440 --> 00:17:08.599
+Scheme handling of nil is different from Lisp handling of nil.
+
+00:17:08.600 --> 00:17:14.679
+The idea was that maybe this would get us close enough it could actually work.
+
+00:17:14.680 --> 00:17:19.359
+But I don't think anyone fully implemented it and made it actually work.
+
+NOTE What do you use emacs for beyond editing?
+
+00:17:36.240 --> 00:17:39.759
+What do you use Emacs for beyond editing?
+
+00:17:39.760 --> 00:17:42.679
+Well I use it for reading and writing email.
+
+00:17:42.680 --> 00:17:44.759
+That's what I mainly do.
+
+00:17:44.760 --> 00:17:47.839
+That's what I do most of the day.
+
+00:17:47.840 --> 00:17:52.559
+I could... I mean should I sing my song?
+
+00:17:52.560 --> 00:17:55.119
+Sure.
+
+NOTE Song about e-mail
+
+00:17:55.120 --> 00:18:02.639
+I've been answering my email all the goddamn day.
+
+00:18:02.640 --> 00:18:10.879
+I've been answering my email 'cause my work gets done that way.
+
+00:18:10.880 --> 00:18:14.879
+Can't you feel the fingers aching?
+
+00:18:14.880 --> 00:18:18.479
+Type until early in the morn.
+
+00:18:18.480 --> 00:18:22.319
+Can't you see the letters blurring?
+
+00:18:22.320 --> 00:18:25.799
+It's just an ad for porn.
+
+00:18:25.800 --> 00:18:30.519
+You can see how out of date that song is 'cause we don't
+
+00:18:30.520 --> 00:18:32.039
+get ads for porn much anymore.
+
+00:18:32.400 --> 00:18:37.279
+[Amin]: Thanks for the performance.
+
+NOTE Emacs is used by a small population relative to the population that could benefit from it. Do you have any thoughts on how to expand the user base more broadly even among software developers?
+
+00:18:49.556 --> 00:18:52.919
+[Richard]: Emacs is used by a small population relative to
+
+00:18:52.920 --> 00:18:54.639
+the population that could benefit from it.
+
+00:18:54.640 --> 00:18:59.519
+Do you have any thoughts on how to expand the user base more broadly,
+
+00:18:59.520 --> 00:19:02.159
+even among software developers?
+
+00:19:02.160 --> 00:19:11.679
+No. Basically, the fact is that on that aspect of things,
+
+00:19:11.680 --> 00:19:20.759
+VS Code has an advantage and the advantage comes from Microsoft.
+
+00:19:20.760 --> 00:19:28.159
+It's pushing that together as part of a large collection
+
+00:19:28.160 --> 00:19:32.839
+of evil proprietary software that subjugates its users.
+
+00:19:32.840 --> 00:19:36.119
+But those users don't understand that issue.
+
+00:19:36.120 --> 00:19:40.639
+So, I mean, I sure wish I could come up with an idea
+
+00:19:40.640 --> 00:19:44.279
+for how to spread awareness of free software
+
+00:19:44.280 --> 00:19:46.599
+and the injustice of non-free software.
+
+00:19:46.600 --> 00:19:52.879
+The best one that I know of is to show them the TEDx talk that you saw.
+
+00:19:52.880 --> 00:19:57.239
+If you show that to people, they'll get at least a basic idea
+
+00:19:57.240 --> 00:19:59.039
+of what's at stake here and why.
+
+NOTE Would a namespace system similar to Common Lisp packages but without :USE work in Emacs? Modern CL implementations have package local nicknames to create package local prefixes.
+
+00:20:05.760 --> 00:20:10.719
+Would a namespace system similar to Common Lisp packages but without :USE
+
+00:20:10.720 --> 00:20:12.199
+work in Emacs?
+
+00:20:12.200 --> 00:20:14.319
+I suppose it would.
+
+00:20:14.320 --> 00:20:18.399
+I mean, basically, the thing that's really broken about
+
+00:20:18.400 --> 00:20:21.599
+Common Lisp packages is use.
+
+00:20:21.600 --> 00:20:29.999
+But it's not crucial, or at least it's not crucial to allow that to exist
+
+00:20:30.000 --> 00:20:32.119
+for arbitrary use.
+
+00:20:32.120 --> 00:20:37.079
+Maybe you want to have something saying where a package can specify
+
+00:20:37.080 --> 00:20:42.759
+whether to use the standard system functions and variables and so on.
+
+00:20:42.760 --> 00:20:49.679
+But there is a drawback to Common Lisp packages,
+
+00:20:49.680 --> 00:21:01.719
+which is that all of the aspects of any given symbol have to go together.
+
+00:21:01.720 --> 00:21:07.319
+So if compile-foo is a variable and it's also a function,
+
+00:21:07.320 --> 00:21:09.999
+and it's also a property name,
+
+00:21:10.000 --> 00:21:15.359
+then if your symbol foo is aliased to compile-foo,
+
+00:21:15.360 --> 00:21:21.839
+that means it's aliased as a function, aliased as a variable,
+
+00:21:21.840 --> 00:21:23.959
+and aliased as a property name.
+
+00:21:23.960 --> 00:21:30.319
+And aliased is anything else that you're going to point to from list structure.
+
+00:21:30.320 --> 00:21:35.799
+So it's not going to work really smoothly.
+
+00:21:35.800 --> 00:21:42.239
+And I tend to think that we're better off with a naming convention.
+
+00:21:42.240 --> 00:21:50.599
+Since the use feature of Common Lisp packages causes trouble,
+
+00:21:50.600 --> 00:21:57.919
+well if you don't use that, why is it better to write compile-foo
+
+00:21:57.920 --> 00:22:03.479
+and have that be foo in the compile package than to write compile-foo?
+
+00:22:03.480 --> 00:22:09.959
+The packages are almost equivalent to name prefixes.
+
+00:22:09.960 --> 00:22:18.799
+And I think that there is an advantage of clarity to writing the name prefixes,
+
+00:22:18.800 --> 00:22:20.639
+even in the same file.
+
+00:22:20.640 --> 00:22:28.759
+That abbreviation, which is meant to just shorten the code and make it simpler,
+
+00:22:28.760 --> 00:22:32.319
+looks simpler, I believe doesn't actually help.
+
+00:22:32.320 --> 00:22:42.439
+And I say that based on many years of writing code that way.
+
+NOTE With Emacs 29 adding more (awesome) features into vanilla Emacs, how should we ensure vanilla Emacs does not get bloated with many similar features? (example: ido/icomplete, vc/magit)
+
+00:22:42.440 --> 00:22:48.719
+With Emacs 29 adding more awesome features into Vanilla Emacs,
+
+00:22:48.720 --> 00:22:52.919
+how should we ensure vanilla Emacs does not get bloated
+
+00:22:52.920 --> 00:22:54.879
+with many similar features?
+
+00:22:54.880 --> 00:23:03.799
+Example, ido/icomplete, vc/magit.
+
+00:23:03.800 --> 00:23:08.759
+Well, to some extent we can't. Users do things differently.
+
+00:23:08.760 --> 00:23:13.679
+I have never used Magit because I don't want to get used to using anything
+
+00:23:13.680 --> 00:23:18.839
+that's not, packages that are not actually part of Emacs.
+
+00:23:18.840 --> 00:23:25.199
+Now, a couple of years ago, the author of Maggot said he was starting to work
+
+00:23:25.200 --> 00:23:30.919
+on getting the copyright assignments to include Magit in Emacs.
+
+00:23:30.920 --> 00:23:36.159
+But I was unable to get any information on how this is progressing.
+
+00:23:36.160 --> 00:23:44.599
+So because I've never actually seen Magit and because Git is actually not
+
+00:23:44.600 --> 00:23:50.559
+the VC system that I use most, I don't know if I'd want to use Magit.
+
+00:23:50.560 --> 00:23:53.199
+I'd probably be happier using VC.
+
+00:23:53.200 --> 00:23:59.959
+I'm told that they have extremely different basic approaches to doing things.
+
+00:23:59.960 --> 00:24:03.319
+They're not just slight variants of each other.
+
+00:24:03.320 --> 00:24:07.039
+Now, having multiple slight variants, you know,
+
+00:24:07.040 --> 00:24:10.919
+things doing similar jobs in little different ways,
+
+00:24:10.920 --> 00:24:13.959
+that could be seen as redundant.
+
+00:24:13.960 --> 00:24:23.759
+But when packages have very different approaches, I think that's not redundant.
+
+00:24:23.760 --> 00:24:26.919
+Clarified version of earlier question.
+
+NOTE Do you recommend reaching out in [high] schools for volunteers instead of universities because they are more prone to value the objectives of freedom?
+
+00:24:26.920 --> 00:24:31.599
+Do you recommend reaching out in schools for volunteers for both advocacy
+
+00:24:31.600 --> 00:24:35.239
+and development instead of universities?
+
+00:24:35.240 --> 00:24:40.839
+I think that you'll find few people in high schools.
+
+00:24:40.840 --> 00:24:46.799
+I think the question when it says schools means high schools.
+
+00:24:46.800 --> 00:24:51.079
+I think you will find only very rarely someone in high school
+
+00:24:51.080 --> 00:24:57.279
+who is good enough at programming to start actually developing things.
+
+00:24:57.280 --> 00:25:00.239
+Once in a while, I guess.
+
+00:25:00.240 --> 00:25:07.039
+As an activist, I think somewhat more often.
+
+00:25:07.040 --> 00:25:09.919
+But the main thing is, do you know how to have a rapport
+
+00:25:09.920 --> 00:25:13.039
+with high school students?
+
+00:25:13.040 --> 00:25:16.359
+If you do, it would be a great thing to try.
+
+00:25:16.360 --> 00:25:26.519
+We have had some projects of teaching free software to people in public schools.
+
+00:25:26.520 --> 00:25:32.559
+And if you want to work on that, I suggest sending me an email
+
+00:25:32.560 --> 00:25:35.039
+and I'll put you in touch with someone who's done it.
+
+NOTE What was the thought process behind making Emacs Lisp dynamically scoped when you first created it? What advantages did it provide over the alternative?
+
+00:25:35.040 --> 00:25:44.719
+What was the thought process behind making Emacs Lisp dynamically scoped?
+
+00:25:44.720 --> 00:25:46.039
+It was easy.
+
+00:25:46.040 --> 00:25:53.159
+I knew perfectly well how to write a simple, small Lisp interpreter
+
+00:25:53.160 --> 00:25:55.039
+that was dynamically scoped.
+
+00:25:55.040 --> 00:26:03.919
+And small was absolutely necessary at the time because I was trying to make it
+
+00:26:03.920 --> 00:26:12.079
+able to run in a machine whose total address space was one megabyte.
+
+00:26:12.080 --> 00:26:16.639
+So the code had to be small.
+
+00:26:16.640 --> 00:26:25.239
+Why did I implement if and I believe not cond?
+
+00:26:25.240 --> 00:26:30.359
+Why did I implement or and not unless?
+
+00:26:30.360 --> 00:26:33.439
+Because you didn't need those others.
+
+00:26:33.440 --> 00:26:39.839
+You could write your Lisp code with a smaller Lisp interpreter
+
+00:26:39.840 --> 00:26:49.759
+if you didn't have those other convenient traditional standard parts of Lisp.
+
+00:26:49.760 --> 00:26:54.519
+So I stripped Emacs Lisp down to bare bones.
+
+00:26:54.520 --> 00:27:01.679
+Of course, nowadays that's not necessary anymore.
+
+00:27:01.680 --> 00:27:08.239
+Emacs used to be criticized as eight megabytes and constantly swapping.
+
+00:27:08.240 --> 00:27:10.799
+And someone pointed out to me ten years ago
+
+00:27:10.800 --> 00:27:13.079
+that if something's only eight megabytes,
+
+00:27:13.080 --> 00:27:14.879
+it's not going to swap at all anymore.
+
+NOTE It's hard to pick up Emacs if you do not speak English. Can something be done to address that?
+
+00:27:18.766 --> 00:27:21.759
+It's hard to pick up Emacs if you do not speak English.
+
+00:27:21.760 --> 00:27:24.679
+Can something be done to address that?
+
+00:27:24.680 --> 00:27:28.239
+Well, what do you actually suggest?
+
+00:27:28.240 --> 00:27:30.039
+Is it the documentation?
+
+00:27:30.040 --> 00:27:34.279
+Is it the names of commands?
+
+00:27:34.280 --> 00:27:39.319
+Is it the doc strings or is it the manual or both?
+
+00:27:39.320 --> 00:27:43.879
+Is it the messages that Emacs displays?
+
+00:27:43.880 --> 00:27:47.679
+I mean, each of these is a different issue technically.
+
+00:27:47.680 --> 00:27:51.759
+Now, the easiest thing to deal with would be the messages
+
+00:27:51.760 --> 00:27:53.679
+because in other GNU packages,
+
+00:27:53.680 --> 00:27:57.639
+we have a system for internationalizing messages.
+
+00:27:57.640 --> 00:28:01.079
+It's hard to adapt it directly to Emacs
+
+00:28:01.080 --> 00:28:06.199
+because it's designed for programs, tools, or applications
+
+00:28:06.200 --> 00:28:09.639
+that have a fixed set of messages to display.
+
+00:28:09.640 --> 00:28:12.239
+Emacs doesn't. You load in a different Lisp program,
+
+00:28:12.240 --> 00:28:14.359
+it's got a different set of messages.
+
+00:28:14.360 --> 00:28:17.119
+How exactly do you want to handle this?
+
+00:28:17.120 --> 00:28:18.439
+But it could be done.
+
+00:28:18.440 --> 00:28:20.879
+It's not a terribly hard problem.
+
+00:28:20.880 --> 00:28:25.559
+If you're interested, please work on it.
+
+00:28:25.560 --> 00:28:29.719
+What about the command names?
+
+00:28:29.720 --> 00:28:35.319
+Well, you could imagine coming up with an alternate set of command names
+
+00:28:35.320 --> 00:28:40.159
+and maybe a different character instead of M-x
+
+00:28:40.160 --> 00:28:46.839
+so that it would read only the translated command names
+
+00:28:46.840 --> 00:28:51.319
+and the ordinary Emacs command names wouldn't get in the way.
+
+00:28:51.320 --> 00:28:57.719
+M-x might still be there, but if you type this other thing, M-foobar,
+
+00:28:57.720 --> 00:29:05.799
+then it would only complete over the command names in the other language.
+
+00:29:05.800 --> 00:29:10.479
+This might be pretty simple to do technically,
+
+00:29:10.480 --> 00:29:16.559
+although working out the details might take a good deal of thought.
+
+00:29:16.560 --> 00:29:20.999
+And then docstrings?
+
+00:29:21.000 --> 00:29:25.799
+Well, you could just write another set of them
+
+00:29:25.800 --> 00:29:28.839
+and have other help commands to display them.
+
+NOTE Do you use Org or Org mode, and if so, to what extent?
+
+00:29:28.840 --> 00:29:36.159
+Do you use Org or Org mode, and if so, to what extent?
+
+00:29:36.160 --> 00:29:39.759
+I have never used them, and here's why.
+
+00:29:39.760 --> 00:29:48.359
+I think that the design process of Org mode went awry,
+
+00:29:48.360 --> 00:29:52.959
+not at the very beginning, but at the next stage.
+
+00:29:52.960 --> 00:29:56.759
+Originally, Org mode was an outlining mode.
+
+00:29:56.760 --> 00:29:58.559
+It's not something I wanted to use.
+
+00:29:58.560 --> 00:30:02.999
+I had nothing against including it, but I didn't ever try to use it.
+
+00:30:03.000 --> 00:30:08.719
+The documentation of it somehow wasn't easy for me to grasp,
+
+00:30:08.720 --> 00:30:11.719
+especially since I had no actual use for it,
+
+00:30:11.720 --> 00:30:16.079
+no reason to go through and remember all those things.
+
+00:30:16.080 --> 00:30:24.599
+Anyway, then people started developing other facilities to use the Org syntax,
+
+00:30:24.600 --> 00:30:27.599
+and they're totally unrelated to each other.
+
+00:30:27.600 --> 00:30:30.599
+They just happen to use the Org syntax,
+
+00:30:30.600 --> 00:30:34.719
+and some of them, occasionally, I thought it might be interesting to use this,
+
+00:30:34.720 --> 00:30:38.639
+but to use it, first I'd have to learn the Org syntax,
+
+00:30:38.640 --> 00:30:43.199
+and that was a task that had already proved discouraging.
+
+00:30:43.200 --> 00:30:46.759
+Now, the mistaken design, I think,
+
+00:30:46.760 --> 00:30:51.159
+was to integrate all those other facilities with Org mode.
+
+00:30:51.160 --> 00:30:54.239
+They should all have been separate, modularly separate,
+
+00:30:54.240 --> 00:30:59.439
+so that you could maybe use them with Org mode if you wanted to,
+
+00:30:59.440 --> 00:31:03.199
+but also use them separately from Org mode,
+
+00:31:03.200 --> 00:31:05.279
+and they'd be documented separately,
+
+00:31:05.280 --> 00:31:08.999
+and those I wanted to use, I would have learned to use.
+
+00:31:09.000 --> 00:31:10.999
+But that was hard to do.
+
+00:31:11.000 --> 00:31:16.639
+They had been welded together such that it was not easy to separate them.
+
+00:31:16.640 --> 00:31:20.439
+I really wish they'd get separated, but that's not an easy job.
+
+00:31:20.440 --> 00:31:23.759
+Each one needs to be remodularized.
+
+00:31:23.760 --> 00:31:31.759
+Anyway, there is something for which I think Org mode could become an advance.
+
+00:31:31.760 --> 00:31:39.759
+I'm not saying it isn't useful for people who like what it does,
+
+00:31:39.760 --> 00:31:46.399
+but it might play an important role if it were extended to do it,
+
+00:31:46.400 --> 00:31:53.639
+and that is we could use a replacement for Texinfo.
+
+00:31:53.640 --> 00:31:57.639
+Texinfo's syntax is arcane.
+
+00:31:57.640 --> 00:32:05.559
+It was based on what I could implement on top of TeX in 1984 or so.
+
+00:32:05.560 --> 00:32:15.519
+And, well, Org mode, Org syntax doesn't make all the distinctions,
+
+00:32:15.520 --> 00:32:20.599
+all the semantic markup distinctions that we can make in Texinfo.
+
+00:32:20.600 --> 00:32:25.839
+If it did, which would require extending it,
+
+00:32:25.840 --> 00:32:33.399
+then it might become a good format to write GNU manuals in.
+
+00:32:33.400 --> 00:32:37.639
+It could conceivably become a better format than we have now,
+
+00:32:37.640 --> 00:32:39.719
+and that would be a good thing.
+
+00:32:39.720 --> 00:32:43.599
+Not that many people know Texinfo syntax.
+
+00:32:43.600 --> 00:32:47.479
+It's not widely used except for GNU manuals.
+
+00:32:47.480 --> 00:32:52.439
+But probably more people know Org syntax,
+
+00:32:52.440 --> 00:32:57.239
+and if it were extended so that it did in a fairly natural way
+
+00:32:57.240 --> 00:33:02.319
+all the things that Texinfo does and maybe some additional ones,
+
+00:33:02.320 --> 00:33:05.279
+then it could be superior.
+
+00:33:05.280 --> 00:33:11.239
+And then we could gradually switch our manuals over to it.
+
+00:33:11.240 --> 00:33:14.119
+But we need to be able to generate all the output formats
+
+00:33:14.120 --> 00:33:15.359
+that we can generate now.
+
+00:33:15.360 --> 00:33:19.999
+That means HTML to put on websites.
+
+00:33:20.000 --> 00:33:27.159
+That means either info files or perhaps another form of the HTML output
+
+00:33:27.160 --> 00:33:30.079
+that would be good for an info browser,
+
+00:33:30.080 --> 00:33:34.079
+including the one inside Emacs and the one that's separate.
+
+00:33:34.080 --> 00:33:42.479
+And generating input to TeX so that it would generate pretty-looking manuals,
+
+00:33:42.480 --> 00:33:46.719
+which is one of the advantages of Texinfo.
+
+00:33:46.720 --> 00:33:48.719
+This is not a gigantic job.
+
+00:33:48.720 --> 00:33:54.479
+I'd say this is a medium-sized job, or maybe two or three medium-sized jobs.
+
+NOTE What do you have in mind for more modular Emacs development?
+
+00:33:54.480 --> 00:34:05.879
+What do you have in mind for more modular Emacs development?
+
+00:34:05.880 --> 00:34:13.479
+I think that that's...
+
+00:34:13.480 --> 00:34:17.679
+There's no specific feature that I have in mind to solve that.
+
+00:34:17.680 --> 00:34:21.719
+It's more of an approach to how you develop things.
+
+00:34:21.720 --> 00:34:28.719
+It's thinking about modularity when you write each package that you write,
+
+00:34:28.720 --> 00:34:34.119
+because you will find situations where it has to interact
+
+00:34:34.120 --> 00:34:37.439
+in various ways with other packages.
+
+00:34:37.440 --> 00:34:40.879
+And sometimes you'll find the other packages have hooks
+
+00:34:40.880 --> 00:34:42.719
+that will enable you to do it.
+
+00:34:42.720 --> 00:34:45.239
+And sometimes you'll find that
+
+00:34:45.240 --> 00:34:47.679
+the hook you'd really need for this is missing.
+
+00:34:47.680 --> 00:34:52.519
+In that case, the best thing to do might be to add
+
+00:34:52.520 --> 00:34:58.479
+a suitable, fairly general hook that can be used for your job
+
+00:34:58.480 --> 00:35:00.879
+to the other existing package,
+
+00:35:00.880 --> 00:35:08.399
+so that instead of a rigid connection to other parts of Emacs,
+
+00:35:08.400 --> 00:35:09.599
+which is somewhat unmodular,
+
+00:35:09.600 --> 00:35:12.999
+you could use a general-purpose hook,
+
+00:35:13.000 --> 00:35:17.039
+which you designed because it could do a lot of things,
+
+00:35:17.040 --> 00:35:19.039
+including the thing you need to do.
+
+NOTE Reframing the school question
+
+00:35:19.040 --> 00:35:32.039
+It might be interesting to reframe the school question.
+
+00:35:32.040 --> 00:35:34.399
+I think it is related to the first part,
+
+00:35:34.400 --> 00:35:36.959
+how to bring Libre software into schools.
+
+00:35:36.960 --> 00:35:42.159
+For example, my entry point was LaTeX in school.
+
+00:35:42.160 --> 00:35:44.439
+Well, it's okay.
+
+00:35:44.440 --> 00:35:50.599
+I don't see anything wrong with that, by all means, if it works.
+
+00:35:50.600 --> 00:36:00.479
+Now, my naive, perhaps, guess is that it wouldn't arouse much interest,
+
+00:36:00.480 --> 00:36:05.879
+because I suspect most people would rather use a WYSIWYG text editor
+
+00:36:05.880 --> 00:36:13.959
+than a text formatter like LaTeX, any text formatter.
+
+00:36:13.960 --> 00:36:18.639
+But if your experience is otherwise, go ahead.
+
+NOTE In light of that critique of JavaScript not being about the language per se but rather the "culture of blindly getting and running packages/libraries", what's so different with what's currently done by the vast majority of Emacs/Elisp users to just install packages blindly?
+
+00:36:18.640 --> 00:36:28.799
+In the light of that critique of JavaScript not being about language per se,
+
+00:36:28.800 --> 00:36:33.759
+but rather the culture of blindly getting and running packages, libraries.
+
+00:36:33.760 --> 00:36:36.119
+What's so different with what's currently done by the vast
+
+00:36:36.120 --> 00:36:42.199
+majority of EmacsLib users to just install packages blindly?
+
+00:36:42.200 --> 00:36:44.199
+Well, they know they're installing a package,
+
+00:36:44.200 --> 00:36:46.799
+and that makes all the difference.
+
+00:36:46.800 --> 00:36:50.879
+And people can post various versions of a package,
+
+00:36:50.880 --> 00:36:53.679
+and then people can compare them and say,
+
+00:36:53.680 --> 00:36:59.279
+"Hey, I looked at that version there, and it has a horrible bug."
+
+00:36:59.280 --> 00:37:03.959
+And so the community can do something about that.
+
+00:37:03.960 --> 00:37:09.519
+With JavaScript sent by websites, there is no way to do anything like that.
+
+00:37:09.520 --> 00:37:13.039
+And in addition, most of those programs are not free.
+
+00:37:13.040 --> 00:37:16.559
+How would you know? If you're not running LibreJS,
+
+00:37:16.560 --> 00:37:20.799
+you don't know what JavaScript programs are being installed
+
+00:37:20.800 --> 00:37:25.319
+into your browser at any given moment, or whether they're free.
+
+00:37:25.320 --> 00:37:31.119
+You know, very likely you'll just get a bunch of obfuscript,
+
+00:37:31.120 --> 00:37:35.559
+and you won't know what the source code is, or whether you could even find it.
+
+00:37:35.560 --> 00:37:41.399
+These things don't happen with EmacsList packages.
+
+00:37:41.400 --> 00:37:48.799
+At least not when they're in reputable package archives.
+
+NOTE Do you still intend to merge your patch to the "shorthands" feature to the master branch?
+
+00:37:48.800 --> 00:37:55.839
+Do you still intend to merge your patch to the shorthands feature
+
+00:37:55.840 --> 00:37:57.519
+to the master branch?
+
+00:37:57.520 --> 00:38:05.159
+Yes, but I've seen that something needs to be done with the docstrings,
+
+00:38:05.160 --> 00:38:17.679
+because s.el mentions in its docstrings the function names used in s.el,
+
+00:38:17.680 --> 00:38:27.199
+and the magnars string library that works just by renaming those symbols
+
+00:38:27.200 --> 00:38:31.119
+really would want to alter the docstrings too.
+
+00:38:31.120 --> 00:38:34.719
+And now there are multiple ways of doing that.
+
+00:38:34.720 --> 00:38:39.519
+One of them maybe is to edit the s.el source file
+
+00:38:39.520 --> 00:38:42.559
+so it'll do the right thing in either case.
+
+00:38:42.560 --> 00:38:48.879
+That would need a new docstring construct.
+
+00:38:48.880 --> 00:38:52.159
+Well, we've added many docstring constructs.
+
+00:38:52.160 --> 00:38:54.879
+We could add one more. It's not that hard a thing.
+
+NOTE Do you think the freedom e.g., we have in Emacs, becomes a hurdle for some people to pursue more important things in the world? I used to do a lot of Emacs programming, but I recently try to stay away from tinkering on Emacs.
+
+00:38:54.880 --> 00:39:05.799
+Do you think the freedom, e.g., we have in Emacs becomes a hurdle
+
+00:39:05.800 --> 00:39:09.319
+for some people to pursue more important things in the world?
+
+00:39:09.320 --> 00:39:12.359
+Is there something more important in the world?
+
+00:39:12.360 --> 00:39:17.399
+I used to do a lot of Emacs programming, but recently I decided to stay away
+
+00:39:17.400 --> 00:39:22.199
+from tink-linking, from tinking Emacs.
+
+00:39:22.200 --> 00:39:27.159
+I'm not sure what-- tinking is a strange word to me, tinkering with maybe.
+
+00:39:27.160 --> 00:39:33.559
+Well, there may be more important things for you to do than extend Emacs.
+
+00:39:33.560 --> 00:39:39.239
+On the other hand, when you look at all the distractions that the world offers
+
+00:39:39.240 --> 00:39:42.439
+that distract a lot more people than this,
+
+00:39:42.440 --> 00:39:47.799
+it really seems unfair to criticize Emacs because it's something
+
+00:39:47.800 --> 00:39:50.959
+you could put a lot of time into tinkering with.
+
+00:39:50.960 --> 00:39:54.599
+Look how much time people put into playing video games,
+
+00:39:54.600 --> 00:39:58.199
+which achieves nothing except distracting them.
+
+00:39:58.200 --> 00:40:04.599
+And if you distract yourself by playing with Emacs Lisp code,
+
+00:40:04.600 --> 00:40:07.399
+that's surely better.
+
+00:40:07.400 --> 00:40:10.919
+It has a chance of resulting in something
+
+00:40:10.920 --> 00:40:17.919
+actually useful and a chance that you'd learn something
+
+00:40:17.920 --> 00:40:27.919
+that's more important as learning than how to win a certain video game.
+
+NOTE Question about software freedom: how does it apply to software that are art/media experiences, like videogames? In your view, Is the creator of a videogame obliged to release it under a free license?
+
+00:40:27.920 --> 00:40:29.919
+Questions about software freedom.
+
+00:40:29.920 --> 00:40:34.719
+How does it apply to software that are art/media experiences
+
+00:40:34.720 --> 00:40:36.919
+like video games in your view?
+
+00:40:36.920 --> 00:40:42.719
+Well, I'd say that a video game typically is a collection of things,
+
+00:40:42.720 --> 00:40:49.319
+some of which are programs and some of which are art.
+
+00:40:49.320 --> 00:40:54.719
+And so once you analyze the game in that way,
+
+00:40:54.720 --> 00:40:59.479
+if you agree with my ideas about what the moral rules are
+
+00:40:59.480 --> 00:41:04.319
+for each of those categories, you can apply them separately
+
+00:41:04.320 --> 00:41:06.759
+to each thing in the collection.
+
+00:41:06.760 --> 00:41:12.279
+Programs are operational. They do things for you.
+
+00:41:12.280 --> 00:41:15.879
+And anything that does things for you should be free.
+
+00:41:15.880 --> 00:41:20.999
+The art that is simply displayed is not of that kind,
+
+00:41:21.000 --> 00:41:26.239
+so it doesn't, in my view, have to be free.
+
+00:41:26.240 --> 00:41:29.359
+It does have to be shareable.
+
+00:41:29.360 --> 00:41:36.199
+You have to be free to non-commercially redistribute an exact copy.
+
+00:41:36.200 --> 00:41:40.039
+When I talk about sharing, that's what it means, precisely that.
+
+00:41:40.040 --> 00:41:45.319
+Non-commercially redistribute exact copies to others when you wish.
+
+00:41:45.320 --> 00:41:58.359
+How would technologies like WebAssembly fit with the JavaScript issues?
+
+00:41:58.360 --> 00:42:00.519
+They don't change anything much.
+
+00:42:00.520 --> 00:42:06.079
+Basically, if the program is JavaScript source code
+
+00:42:06.080 --> 00:42:09.999
+that you could actually read, well, then if it had a free license on it,
+
+00:42:10.000 --> 00:42:11.279
+it would be free software.
+
+00:42:11.280 --> 00:42:16.319
+And if the free license is indicated in the standardized format
+
+00:42:16.320 --> 00:42:24.959
+that LibreJS understands, it would actually recognize it as free software.
+
+00:42:24.960 --> 00:42:30.759
+If it's obfuscated, then it's not the source code.
+
+00:42:30.760 --> 00:42:35.599
+And if it's WebAssembly, then it's not the source code.
+
+00:42:35.600 --> 00:42:41.999
+So those are both compiled versions of source code that isn't in the page.
+
+00:42:42.000 --> 00:42:45.759
+So they make things somewhat nastier,
+
+00:42:45.760 --> 00:42:51.159
+in the sense that you couldn't have much chance of reading it
+
+00:42:51.160 --> 00:42:52.999
+and seeing what it does.
+
+00:42:53.000 --> 00:42:55.479
+But either way, it's not free,
+
+00:42:55.480 --> 00:43:00.599
+even if it's source code with no free license, it's still not free.
+
+00:43:00.600 --> 00:43:03.639
+If it's a compiled version rather than source,
+
+00:43:03.640 --> 00:43:07.359
+that's a little further away from being free.
+
+00:43:07.360 --> 00:43:11.599
+But further away from being free doesn't make it worse.
+
+00:43:11.600 --> 00:43:13.599
+It's equally bad.
+
+00:43:13.600 --> 00:43:18.559
+If it gets further away from being free,
+
+00:43:18.560 --> 00:43:23.439
+that means the work that you might have to do to free it is more,
+
+00:43:23.440 --> 00:43:26.239
+but it's not worse.
+
+00:43:26.240 --> 00:43:28.839
+Non-free is bad.
+
+NOTE Have you seen Haketilo? It seems similar to LibreJS.
+
+00:43:35.915 --> 00:43:38.959
+Have you seen Haketilo?
+
+00:43:38.960 --> 00:43:41.679
+It seems similar to LibreJS.
+
+00:43:41.680 --> 00:43:44.519
+Haketilo is meant to enable people
+
+00:43:44.520 --> 00:43:49.199
+to get some of the benefits of the free software community
+
+00:43:49.200 --> 00:43:54.439
+with free replacement JavaScript programs for websites.
+
+00:43:54.440 --> 00:44:00.879
+So potentially it offers a real solution to the JavaScript problem.
+
+00:44:00.880 --> 00:44:05.039
+It has a long way to go from what I hear.
+
+00:44:05.040 --> 00:44:07.999
+If you want to work on it, please do.
+
+00:44:08.000 --> 00:44:14.159
+Of course, writing free replacement JavaScript
+
+00:44:14.160 --> 00:44:16.919
+for a million websites is an enormous job,
+
+00:44:16.920 --> 00:44:19.319
+but maybe we could do it for some sites.
+
+00:44:19.320 --> 00:44:24.319
+It depends how many people get enthusiastic about doing it
+
+00:44:24.320 --> 00:44:25.959
+and how many sites cooperate.
+
+00:44:25.960 --> 00:44:32.719
+Is writing free software replacement to GitHub Copilot
+
+00:44:32.720 --> 00:44:36.759
+with proper license attribution a good idea?
+
+00:44:36.760 --> 00:44:44.959
+Maybe, but remember that Copilot is not a program. Copilot is a service.
+
+00:44:44.960 --> 00:44:50.119
+It is something that somebody else's computer will do for you.
+
+00:44:50.120 --> 00:44:55.439
+It's a computation that someone else's server will do for you when you ask.
+
+00:44:55.440 --> 00:45:06.239
+And so what are the practical problems of doing that? I'm not sure.
+
+00:45:06.240 --> 00:45:13.479
+The point is, of course, the server runs by running a program.
+
+00:45:13.480 --> 00:45:17.439
+The service operates by running programs.
+
+00:45:17.440 --> 00:45:21.119
+But still, a service is a very different kind of thing from a program.
+
+00:45:21.120 --> 00:45:28.999
+People who use Copilot don't get any sort of copy of Copilot.
+
+00:45:29.000 --> 00:45:33.319
+All they do is send something they're working on to that server
+
+00:45:33.320 --> 00:45:34.999
+and they get something back.
+
+00:45:35.000 --> 00:45:45.567
+So it might be a good idea.
+
+NOTE
+Do you have any suggestions for helping propective contributers streamline
+the copyright assignment needed to contribute to Emacs (and other FSF software
+projects)?
+
+00:45:45.568 --> 00:45:48.359
+Do you have any suggestions for helping prospective contributors
+
+00:45:48.360 --> 00:45:53.359
+streamline the copyright assignment needed to contribute to Emacs?
+
+00:45:53.360 --> 00:45:57.279
+I don't think that's needed.
+
+00:45:57.280 --> 00:46:04.359
+Basically, the copyright assignment itself is pretty easy
+
+00:46:04.360 --> 00:46:06.599
+and doesn't take very long.
+
+00:46:06.600 --> 00:46:09.919
+What is sometimes harder is the copyright disclaimer,
+
+00:46:09.920 --> 00:46:14.959
+the employer disclaimer, where your employer,
+
+00:46:14.960 --> 00:46:20.399
+if you're employed to program, or if your job includes programming
+
+00:46:20.400 --> 00:46:24.399
+or could include programming, we want to be sure that your employer
+
+00:46:24.400 --> 00:46:30.559
+is not going to say that you had no right to contribute that to any program
+
+00:46:30.560 --> 00:46:37.799
+because it belonged to the employer all along and you broke the rules
+
+00:46:37.800 --> 00:46:42.319
+and the project you contributed to is shafted.
+
+00:46:42.320 --> 00:46:50.679
+Well, we are working on some simplifications to that text
+
+00:46:50.680 --> 00:46:55.119
+in the hope of making it easier to get companies to say yes to it.
+
+00:46:55.120 --> 00:46:59.039
+But fundamentally, they've got to say yes to it.
+
+00:46:59.040 --> 00:47:06.279
+We need them to say yes to it.
+
+00:47:06.280 --> 00:47:08.719
+We can't make them say yes to it.
+
+00:47:08.720 --> 00:47:09.799
+We can only ask.
+
+NOTE Can complexity induced by company-funded free/libre code become a problem, when the company pulls out, leaving the code potentially unmaintainable?
+
+00:47:09.800 --> 00:47:13.759
+Can complexity induced by company funded...
+
+00:47:13.760 --> 00:47:17.119
+Sorry, it talks about open code.
+
+00:47:17.120 --> 00:47:21.359
+I don't know what that means.
+
+00:47:21.360 --> 00:47:23.759
+Is this talking about free software?
+
+00:47:23.760 --> 00:47:27.759
+[Amin]: I think it would be safe to assume that they are indeed
+
+00:47:27.760 --> 00:47:28.959
+talking about free software.
+
+00:47:28.960 --> 00:47:34.119
+[Richard]: Okay, because I don't use the term open to classify programs.
+
+00:47:34.120 --> 00:47:39.359
+I'm not a supporter of open source and I never was.
+
+00:47:39.360 --> 00:47:42.519
+And the reason is very important.
+
+00:47:42.520 --> 00:47:50.199
+I touched on this briefly in the TEDx video.
+
+00:47:50.200 --> 00:47:58.639
+But basically, the idea of the free software movement is that users deserve
+
+00:47:58.640 --> 00:48:04.559
+the freedom to study, change and redistribute the code that they use.
+
+00:48:04.560 --> 00:48:09.879
+And it is an injustice to deny that to users.
+
+00:48:09.880 --> 00:48:13.719
+And therefore, software must be free.
+
+00:48:13.720 --> 00:48:16.159
+It's wrong if it's not free.
+
+00:48:16.160 --> 00:48:22.879
+Well, the people who created the idea of open source about 14 years later,
+
+00:48:22.880 --> 00:48:27.719
+they wanted to avoid bringing up that question.
+
+00:48:27.720 --> 00:48:31.999
+And they more or less succeeded when people talk about open source.
+
+00:48:32.000 --> 00:48:38.959
+Occasionally, that question has seeped in from the free software community.
+
+00:48:38.960 --> 00:48:41.599
+But most of the time, it never occurs to them.
+
+00:48:41.600 --> 00:48:47.519
+They simply take for granted that it's legitimate for a program not to be open.
+
+00:48:47.520 --> 00:48:52.759
+Well, that's missing the point that I consider most important.
+
+00:48:52.760 --> 00:48:57.679
+So whenever I talk about this area, I talk about it in
+
+00:48:57.680 --> 00:49:04.039
+terms of free, libre, freedom-respecting software.
+
+00:49:04.040 --> 00:49:09.839
+So, can complexity-induced by company-funded free code
+
+00:49:09.840 --> 00:49:12.399
+become a problem when the company pulls out,
+
+00:49:12.400 --> 00:49:16.239
+leaving the code potentially unmaintainable?
+
+00:49:16.240 --> 00:49:21.999
+Well, I'd say over-complicated free programs
+
+00:49:22.000 --> 00:49:24.879
+which don't have community contributors
+
+00:49:24.880 --> 00:49:27.359
+can fall into that problem.
+
+00:49:27.360 --> 00:49:31.279
+It's not limited to programs developed by companies, I think.
+
+NOTE What do you think of Hyperbole or EEV instead of org mode, or other things for the stuff that org mode does "second brain / knowledge base", or GTD 'getting things done' etc... among other things in Emacs or other Emacs packages
+
+00:49:31.280 --> 00:49:42.239
+What do you think of Hyperbole or EEV instead of Org mode?
+
+00:49:42.240 --> 00:49:46.759
+Well, I don't actually know that much about either of them.
+
+00:49:46.760 --> 00:49:49.439
+I don't know what EEV is.
+
+00:49:49.440 --> 00:49:54.257
+I've heard of Hyperbole, but it was many years ago that I looked at it,
+
+00:49:54.258 --> 00:49:56.399
+and I don't remember what I saw.
+
+00:49:56.400 --> 00:50:03.199
+So, I'm sorry I can't have an educated opinion about those specific things.
+
+00:50:03.200 --> 00:50:07.319
+It would be interesting for somebody to study that.
+
+00:50:07.320 --> 00:50:10.319
+Now, there'd be a lot to study.
+
+00:50:10.320 --> 00:50:14.999
+After all, Org mode consists of an outlining mode together
+
+00:50:15.000 --> 00:50:20.119
+with lots of other specific features that have been welded onto it.
+
+00:50:20.120 --> 00:50:26.479
+And if they were separated, made modular, separate parts of Emacs,
+
+00:50:26.480 --> 00:50:31.599
+it would be a lot easier to adapt some of them to work with hyperbole
+
+00:50:31.600 --> 00:50:32.799
+if we wanted to.
+
+00:50:32.800 --> 00:50:34.879
+Of course, do we want to?
+
+00:50:34.880 --> 00:50:36.359
+That's another question.
+
+00:50:36.360 --> 00:50:38.519
+What is EEV?
+
+00:50:38.520 --> 00:50:46.279
+I think it's similar in many ways to hyperbole.
+
+00:50:46.280 --> 00:50:50.039
+I haven't used either of them too much myself, but yeah,
+
+00:50:50.040 --> 00:50:51.759
+they are fairly similar as far as I know.
+
+00:50:51.760 --> 00:50:55.759
+If they're fairly similar, I guess that brings up the question,
+
+00:50:55.760 --> 00:50:58.319
+is either of them actually part of Emacs?
+
+00:50:58.320 --> 00:51:04.639
+I think hyperbole is a GNU package.
+
+00:51:04.640 --> 00:51:07.719
+I'm not sure if it's part of Emacs or GNU ELPA.
+
+00:51:07.720 --> 00:51:10.879
+It might be, but EEV is not as of yet.
+
+00:51:10.880 --> 00:51:12.159
+But both are free software.
+
+00:51:12.160 --> 00:51:19.159
+Well, it might be that it doesn't make sense to include them both in any sense.
+
+00:51:19.160 --> 00:51:21.159
+People can write them and distribute them,
+
+00:51:21.160 --> 00:51:23.679
+but that doesn't mean we need to pick them up.
+
+00:51:23.680 --> 00:51:28.359
+We might want to compare them and see which one is better
+
+00:51:28.360 --> 00:51:32.799
+and then look at whether it could be improved further
+
+00:51:32.800 --> 00:51:35.319
+by bringing in features from the other.
+
+00:51:35.320 --> 00:51:40.199
+This is what you do if those two things exist
+
+00:51:40.200 --> 00:51:42.519
+and you want to make the best possible thing
+
+00:51:42.520 --> 00:51:44.999
+to add, for instance, to Emacs.
+
+00:51:45.000 --> 00:51:56.319
+But since I don't know any specifics anymore, and with EEV I never did,
+
+00:51:56.320 --> 00:52:01.639
+I don't want to state any sort of a priori preference.
+
+00:52:01.640 --> 00:52:06.250
+I don't have one.
+
+NOTE Are there plans to bring modal editing (eg. evil-mode, viper) to Emacs core and did your opinion on modal editing change over the years?
+
+00:52:06.251 --> 00:52:10.959
+Are there plans to bring modal editing to Emacs core?
+
+00:52:10.960 --> 00:52:11.759
+What does that mean?
+
+00:52:11.760 --> 00:52:19.399
+[Amin]: I think they're speaking about projects or editing modes such as VI,
+
+00:52:19.400 --> 00:52:23.639
+where by default whatever you type is not getting inserted,
+
+00:52:23.640 --> 00:52:28.319
+but you can navigate between different modes
+
+00:52:28.320 --> 00:52:30.199
+and one of them being text insertion.
+
+00:52:30.200 --> 00:52:35.759
+[Richard]: Well, I don't have a wish for that.
+
+00:52:35.760 --> 00:52:38.399
+Now, I mean, it's not somehow morally anathema.
+
+00:52:38.400 --> 00:52:49.279
+I mean, it's not as if it were a non-free program.
+
+00:52:49.280 --> 00:52:58.439
+But it wouldn't be easy to design that in such a way that
+
+00:52:58.440 --> 00:53:02.999
+it fit into the framework of existing Emacs without doing any violence to it.
+
+NOTE What is your opinion on the current state of large machine
+learning/AI models?
+
+00:53:03.000 --> 00:53:16.719
+What is your opinion of the current state of large machine learning models?
+
+00:53:16.720 --> 00:53:20.919
+Even if the model is released under a free license,
+
+00:53:20.920 --> 00:53:25.399
+it cannot be modified in a meaningful way?
+
+00:53:25.400 --> 00:53:29.039
+I don't think that's true.
+
+00:53:29.040 --> 00:53:33.279
+A person who was in the field of machine learning
+
+00:53:33.280 --> 00:53:35.839
+told me that you can modify it.
+
+00:53:35.840 --> 00:53:38.999
+You can modify it by starting with what you've got
+
+00:53:39.000 --> 00:53:40.839
+and doing some further training,
+
+00:53:40.840 --> 00:53:47.159
+and you don't need, I'm told, the previously used training data to train it,
+
+00:53:47.160 --> 00:53:49.439
+to modify it.
+
+00:53:49.440 --> 00:53:53.399
+Based on that, I concluded that the trained neural network
+
+00:53:53.400 --> 00:53:56.879
+can be treated as source code.
+
+00:53:56.880 --> 00:54:01.079
+And after all, it's not made from any other kind of source code.
+
+00:54:01.080 --> 00:54:04.839
+So, in some sense, what else could the source code be?
+
+NOTE I thought it was a virtue to separate the content from the style or
+appearance of information. Part of being free is also to view information in the
+format that you want. Does your WYSIWYG idea erode this virtue and lead to more
+thinking -- perhaps undue thinking about style over substance?
+
+00:54:14.302 --> 00:54:17.519
+I thought it was a virtue to separate the content
+
+00:54:17.520 --> 00:54:19.719
+from the style or appearance of information.
+
+00:54:19.720 --> 00:54:24.759
+Part of being free is also to view information in the format you want.
+
+00:54:24.760 --> 00:54:29.959
+Does your WYSIWYG idea erode this virtue and lead to more thinking,
+
+00:54:29.960 --> 00:54:34.359
+perhaps undue thinking about style over substance?
+
+00:54:34.360 --> 00:54:38.919
+Well, I don't know, actually.
+
+00:54:38.920 --> 00:54:43.959
+I know that in LibreOffice you can make named styles,
+
+00:54:43.960 --> 00:54:46.959
+and you can apply them to parts of the text,
+
+00:54:46.960 --> 00:54:51.239
+and later on you can change what any given named style
+
+00:54:51.240 --> 00:54:53.719
+means in terms of appearance.
+
+00:54:53.720 --> 00:55:03.319
+So, is that enough independence of appearance from semantics?
+
+00:55:03.320 --> 00:55:06.319
+I am hardly a power user of LibreOffice.
+
+00:55:06.320 --> 00:55:09.239
+I've come across that feature. I've never used it.
+
+00:55:09.240 --> 00:55:17.559
+The only things I write with it are pretty simple.
+
+00:55:17.560 --> 00:55:23.519
+I have a feeling that I've been doing this for a rather long time.
+
+00:55:23.520 --> 00:55:27.279
+Do you recall when I started answering questions?
+
+00:55:27.280 --> 00:55:29.799
+I think it was something like an hour ago.
+
+00:55:29.800 --> 00:55:35.759
+Yeah, I think so. About an hour or 45 minutes-ish.
+
+00:55:35.760 --> 00:55:38.839
+Well, then I'll do a few questions more.
+
+NOTE Do you ever dabble in retro-computing, e.g. logging into TOPS10/20 systems SDF, etc?
+
+00:55:38.840 --> 00:55:42.679
+Do you ever dabble in retrocomputing?
+
+00:55:42.680 --> 00:55:47.319
+No. I decided it's a waste of time.
+
+00:55:47.320 --> 00:55:51.759
+It basically would be tinkering that would not develop
+
+00:55:51.760 --> 00:55:56.039
+anything of any importance or use.
+
+00:55:56.040 --> 00:56:02.839
+And I know that if I'm going to enjoy developing something,
+
+00:56:02.840 --> 00:56:06.079
+I could enjoy it developing anything.
+
+00:56:06.080 --> 00:56:10.239
+You know, I could enjoy just as much developing something
+
+00:56:10.240 --> 00:56:17.199
+that I think is needed right now for non-retrocomputing
+
+00:56:17.200 --> 00:56:20.679
+as I could enjoy working on retrocomputing.
+
+00:56:20.680 --> 00:56:26.079
+So I decided never to let retrocomputing
+
+00:56:26.080 --> 00:56:30.759
+distract my attention from useful computing.
+
+NOTE Do you know Gemini?
+
+00:56:38.196 --> 00:56:40.359
+Do you know the Gemini Project -
+
+00:56:40.360 --> 00:56:45.239
+a network of very simplified markdown-like text files without images
+
+00:56:45.240 --> 00:56:52.759
+and third-party materials transmitted via an open public free protocol,
+
+00:56:52.760 --> 00:56:56.519
+which is not HTTPS?
+
+00:56:56.520 --> 00:56:58.839
+I don't remember if I ever heard of that before.
+
+00:56:58.840 --> 00:57:02.639
+Sorry, I have no opinion about it.
+
+00:57:02.640 --> 00:57:10.799
+But I think that the lack of images will turn out to be a considerable drawback.
+
+00:57:10.800 --> 00:57:14.159
+I mean, imagine a website.
+
+00:57:14.160 --> 00:57:19.439
+Well, there are lots of reasons you might want to put in images.
+
+00:57:19.440 --> 00:57:27.559
+It's not limited just to making it look snazzy and distracting.
+
+00:57:27.560 --> 00:57:32.159
+There are a lot of pictures you might want to include and diagrams,
+
+00:57:32.160 --> 00:57:37.719
+and scientific papers include pictures and diagrams.
+
+00:57:37.720 --> 00:57:41.359
+It would be crippling if they couldn't be in there.
+
+00:57:41.360 --> 00:57:46.519
+So basically, I think that exclusion of images is a big loss.
+
+00:57:46.520 --> 00:57:56.879
+[Amin]: Thanks. I think that's so far all the questions I see on the pad,
+
+00:57:56.880 --> 00:58:00.319
+but let's give it maybe another minute or two
+
+00:58:00.320 --> 00:58:04.479
+if people have any other question or two to get in before we call this close.
+
+NOTE stallmansupport.org
+
+00:58:04.480 --> 00:58:27.520
+[Richard] Well, I'd like to mention that if you've heard
+
+00:58:27.521 --> 00:58:43.959
+rumors of attacks against me that people have made, it's mostly false,
+
+00:58:43.960 --> 00:58:50.079
+and you can find out more by looking at stallmansupport.org.
+
+00:58:50.080 --> 00:58:55.359
+So I refer you there, and I hope you'll take a look.
+
+00:58:55.360 --> 00:59:04.639
+[Amin]: Yes, thank you.
+
+00:59:04.640 --> 00:59:08.599
+All right, I think that's pretty much all the questions that we have.
+
+00:59:08.600 --> 00:59:10.559
+Thanks again, Richard, both for your great talk
+
+00:59:10.560 --> 00:59:14.319
+and also for taking this much time answering so many questions.
+
+00:59:14.320 --> 00:59:17.999
+We really appreciate it.
+
+00:59:18.000 --> 00:59:21.639
+[Richard]: Well, this is what I do.
+
+00:59:21.640 --> 00:59:28.839
+GNU and the Free Software Movement are what I've dedicated my life to,
+
+00:59:28.840 --> 00:59:34.679
+and since I'm still alive, I've got more to dedicate to them.
+
+00:59:34.680 --> 00:59:40.319
+[Amin]: Wonderful, and we all hope that it keeps on coming
+
+00:59:40.320 --> 00:59:43.839
+and you're able to continue for a very long time into the future.
+
+00:59:43.840 --> 00:59:46.079
+[Richard]: Happy hacking.
+
+00:59:46.080 --> 00:59:49.960
+[Amin]: Happy hacking. Bye.
diff --git a/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt
new file mode 100644
index 00000000..24aba25c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main--chapters.vtt
@@ -0,0 +1,32 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:02:33.540
+GNU Emacs and its purpose
+
+00:02:33.640 --> 00:03:46.280
+Lisp as the extension language
+
+00:03:46.280 --> 00:06:14.640
+JavaScript versus freedom
+
+00:06:14.640 --> 00:07:23.307
+Updating "An Introduction to Emacs Lisp Programming"
+
+00:07:23.407 --> 00:08:31.707
+More memorable package names
+
+00:08:31.807 --> 00:10:23.620
+Simplifying the command interface
+
+00:10:23.620 --> 00:11:22.220
+Modularity
+
+00:11:22.220 --> 00:12:55.460
+Editing formatted text
+
+00:12:55.460 --> 00:15:31.300
+Not the equivalent of a modern web browser
+
+00:15:31.300 --> 00:17:01.500
+Getting involved
diff --git a/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt
new file mode 100644
index 00000000..5873b47b
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rms--what-id-like-to-see-in-emacs--main.vtt
@@ -0,0 +1,756 @@
+WEBVTT captioned by anush
+
+NOTE GNU Emacs and its purpose
+
+00:00:00.000 --> 00:00:08.960
+Hello! I'm going to talk about what I would like to see
+
+00:00:08.960 --> 00:00:11.240
+in GNU Emacs in the future,
+
+00:00:11.240 --> 00:00:17.600
+and what I would prefer not to find there.
+
+00:00:17.600 --> 00:00:22.080
+This is all within the context
+
+00:00:22.080 --> 00:00:25.360
+of GNU Emacs and its purpose.
+
+00:00:25.360 --> 00:00:30.600
+GNU Emacs is a part of the GNU operating system,
+
+00:00:30.600 --> 00:00:33.300
+and the purpose of the GNU operating system
+
+00:00:33.400 --> 00:00:38.840
+is not simply to do a good job technically,
+
+00:00:38.840 --> 00:00:42.640
+not simply to be good to use.
+
+00:00:42.640 --> 00:00:45.760
+Its main purpose, its overall purpose,
+
+00:00:45.760 --> 00:00:48.560
+is to give people freedom,
+
+00:00:48.560 --> 00:00:54.760
+and to help them value and defend that freedom.
+
+00:00:54.760 --> 00:01:00.160
+A GNU package, by being a convenient, well-written program,
+
+00:01:00.160 --> 00:01:06.000
+should contribute to that overall ethical and social goal,
+
+00:01:06.000 --> 00:01:10.440
+and not only to the usefulness of our software.
+
+00:01:10.440 --> 00:01:14.080
+This is true for GNU Emacs
+
+00:01:14.080 --> 00:01:18.720
+as much as it is for any other free program we’ve developed.
+
+00:01:18.720 --> 00:01:25.320
+In fact, GNU Emacs is the first GNU program that I released.
+
+00:01:25.320 --> 00:01:28.800
+I had written some other things before that,
+
+00:01:28.800 --> 00:01:30.600
+but didn't release them at that time.
+
+00:01:30.600 --> 00:01:34.200
+There was no particular use in doing so.
+
+00:01:34.200 --> 00:01:36.007
+So it was through GNU Emacs
+
+00:01:36.107 --> 00:01:38.307
+that I learned about various things
+
+00:01:38.407 --> 00:01:44.240
+such as software licenses and how to defend freedom.
+
+00:01:44.240 --> 00:01:50.407
+You're of course familiar with what GNU Emacs is today,
+
+00:01:50.507 --> 00:01:54.240
+thanks to the contributions of thousands of other people
+
+00:01:54.340 --> 00:01:56.967
+who came after me.
+
+00:01:57.067 --> 00:01:58.880
+What would I like?
+
+00:01:58.880 --> 00:02:01.433
+What would other people like?
+
+00:02:01.533 --> 00:02:06.480
+Lots of people come to Emacs familiar with VS Code,
+
+00:02:06.480 --> 00:02:10.520
+and they say, "Please make Emacs more like VS Code.
+
+00:02:10.520 --> 00:02:15.840
+Change everything that you did in the 1980s and 90s
+
+00:02:15.840 --> 00:02:18.320
+to be like that other thing."
+
+00:02:18.320 --> 00:02:24.200
+That wouldn't be feasible even if we wanted to.
+
+00:02:24.200 --> 00:02:30.440
+Our goal is not to be... not resembling VS Code.
+
+00:02:30.440 --> 00:02:33.540
+Any resemblance is coincidental.
+
+NOTE Lisp as the extension language
+
+00:02:33.640 --> 00:02:37.940
+But in particular,
+
+00:02:38.040 --> 00:02:43.774
+we do not want to have extension languages other than Lisp.
+
+00:02:43.874 --> 00:02:47.474
+Emacs Lisp is the variant of Lisp
+
+00:02:47.574 --> 00:02:49.474
+that we've always supported,
+
+00:02:49.574 --> 00:02:52.960
+which has evolved along with Emacs.
+
+00:02:52.960 --> 00:02:57.400
+We can conceivably have Scheme as well,
+
+00:02:57.400 --> 00:03:01.040
+if we can sufficiently solve the problems,
+
+00:03:01.140 --> 00:03:03.760
+the technical problems of making Scheme
+
+00:03:03.760 --> 00:03:06.480
+and Emacs Lisp interoperate.
+
+00:03:06.480 --> 00:03:11.600
+We did some design work, I think that was with Tom Lord,
+
+00:03:11.600 --> 00:03:15.880
+whom the community will greatly miss.
+
+00:03:15.880 --> 00:03:19.240
+In the 1990s, there are challenges that remain;
+
+00:03:19.340 --> 00:03:21.360
+maybe it can be done.
+
+00:03:21.360 --> 00:03:27.960
+But a non-Lispy language would be a mistake.
+
+00:03:27.960 --> 00:03:33.000
+It would divert our development focus into areas
+
+00:03:33.000 --> 00:03:37.480
+that we don't need, languages that are less powerful,
+
+00:03:37.480 --> 00:03:46.280
+less beautiful, and less desirable for the purpose.
+
+NOTE JavaScript versus freedom
+
+00:03:46.280 --> 00:03:52.120
+However, the language that we above all shouldn't support
+
+00:03:52.120 --> 00:03:57.233
+is JavaScript. That's not because of the language itself.
+
+00:03:57.333 --> 00:04:00.480
+I don't know the JavaScript language,
+
+00:04:00.480 --> 00:04:04.200
+I've heard people say it's rather clumsy
+
+00:04:04.200 --> 00:04:07.520
+and not well designed, but I don't know this.
+
+00:04:07.520 --> 00:04:12.400
+In any case, it's not what my views are based on.
+
+00:04:12.400 --> 00:04:14.740
+There's something much worse about JavaScript,
+
+00:04:14.840 --> 00:04:18.800
+which is not the language itself, but how people use it.
+
+00:04:18.800 --> 00:04:23.640
+Namely, it's been adopted as a way for a network server
+
+00:04:23.640 --> 00:04:26.120
+to send a program to your machine
+
+00:04:26.120 --> 00:04:30.120
+without your even noticing, so that this program,
+
+00:04:30.120 --> 00:04:35.007
+written by you don't know who, will run on your computer
+
+00:04:35.107 --> 00:04:37.200
+and do you don't know what.
+
+00:04:37.200 --> 00:04:39.674
+And you're supposed to just trust
+
+00:04:39.774 --> 00:04:43.640
+all and sundry developers of software
+
+00:04:43.640 --> 00:04:45.840
+for the sites you visit,
+
+00:04:45.840 --> 00:04:51.320
+which very commonly do malicious things, often unknown
+
+00:04:51.320 --> 00:04:55.680
+to the people who are running the server itself.
+
+00:04:55.680 --> 00:04:59.320
+They paid someone else to design a website
+
+00:04:59.320 --> 00:05:01.307
+and they probably said, oh,
+
+00:05:01.407 --> 00:05:04.440
+make it fashionable and attractive.
+
+00:05:04.440 --> 00:05:09.760
+And they didn't insist, don't snoop on the visitors,
+
+00:05:09.760 --> 00:05:12.840
+even if they understood what the issue was.
+
+00:05:12.840 --> 00:05:20.480
+So these sites snoop. It's a serious problem.
+
+00:05:20.480 --> 00:05:24.080
+The problem comes not from the language JavaScript,
+
+00:05:24.080 --> 00:05:28.680
+but from the fact that browsers, by default,
+
+00:05:28.680 --> 00:05:32.440
+will pull in JavaScript code that gets sent to them
+
+00:05:32.440 --> 00:05:35.833
+and run it to do anything at all.
+
+00:05:35.933 --> 00:05:39.320
+Emacs is supposed to defend your freedom.
+
+00:05:39.320 --> 00:05:42.520
+It's supposed to help you to defend your freedom,
+
+00:05:42.520 --> 00:05:45.640
+and lead you to defend your freedom,
+
+00:05:45.640 --> 00:05:47.200
+which means it shouldn't lead you
+
+00:05:47.200 --> 00:05:50.960
+to throw your freedom away as soon as you visit a site
+
+00:05:50.960 --> 00:05:53.920
+that tries to send you a non-free program
+
+00:05:53.920 --> 00:05:58.280
+to run straight off of that other machine.
+
+00:05:58.280 --> 00:06:04.080
+So it's important not to lead users
+
+00:06:04.080 --> 00:06:06.520
+to do computing this way.
+
+00:06:06.520 --> 00:06:10.800
+So what are some good things
+
+00:06:10.800 --> 00:06:14.640
+that we would want instead of this?
+
+NOTE Updating "An Introduction to Emacs Lisp Programming"
+
+00:06:14.640 --> 00:06:19.774
+One thing we want
+
+00:06:19.874 --> 00:06:26.474
+is to update the "Introduction to Emacs Lisp Programming"
+
+00:06:26.574 --> 00:06:29.480
+by the late Bob Chassell.
+
+00:06:29.480 --> 00:06:34.720
+It's a book that makes it easy for even non-programmers
+
+00:06:34.720 --> 00:06:38.000
+to learn to write simple programs in Emacs Lisp.
+
+00:06:38.000 --> 00:06:41.200
+And from there, they can go on to do better.
+
+00:06:41.200 --> 00:06:44.800
+We made a pretty big change in Emacs Lisp
+
+00:06:44.800 --> 00:06:49.480
+a few years ago, implementing lexical scoping by default.
+
+00:06:49.480 --> 00:06:57.360
+Originally, Emacs Lisp used to be entirely dynamic scoping,
+
+00:06:57.360 --> 00:07:01.960
+like some of the earliest Lisp interpreters.
+
+00:07:01.960 --> 00:07:06.520
+This is a change that should have a careful job
+
+00:07:06.520 --> 00:07:10.560
+of updating for the introduction.
+
+00:07:10.560 --> 00:07:14.600
+I'm sure we've made it clear in the reference manual,
+
+00:07:14.600 --> 00:07:18.400
+but that's not what beginners read first.
+
+00:07:18.400 --> 00:07:23.307
+We need something to teach them in lexical scoping.
+
+NOTE More memorable package names
+
+00:07:23.407 --> 00:07:30.440
+Another thing we could use is to make it easier
+
+00:07:30.440 --> 00:07:33.880
+to understand the facilities that we have.
+
+00:07:33.880 --> 00:07:38.560
+For instance, I think every package
+
+00:07:38.560 --> 00:07:42.200
+that you might load into your Emacs and run
+
+00:07:42.200 --> 00:07:47.680
+should have a name that helps you remember what job it does.
+
+00:07:47.680 --> 00:07:51.274
+It doesn't have to be super long to tell you
+
+00:07:51.374 --> 00:07:53.507
+what job that package does.
+
+00:07:53.607 --> 00:07:56.774
+You can read the description to learn that.
+
+00:07:56.874 --> 00:07:59.600
+But once you've read the description,
+
+00:07:59.600 --> 00:08:02.974
+it should be memorable. When you see that name again,
+
+00:08:03.074 --> 00:08:06.507
+you should realize, oh, that's the package I could use
+
+00:08:06.607 --> 00:08:11.880
+to do "less" and so. We've had a tendency
+
+00:08:11.880 --> 00:08:17.840
+to give packages names for the sake of pure wordplay
+
+00:08:17.940 --> 00:08:23.474
+or lack of obvious meaning,
+
+00:08:23.574 --> 00:08:28.188
+and I think we should add on, to those packages,
+
+00:08:28.189 --> 00:08:31.707
+names that people will remember.
+
+NOTE Simplifying the command interface
+
+00:08:31.807 --> 00:08:39.200
+Also, there are ways we can simplify the command interface
+
+00:08:39.200 --> 00:08:43.760
+of Emacs. For instance, there are many different parameters
+
+00:08:43.760 --> 00:08:48.000
+users can specify that can have several values,
+
+00:08:48.000 --> 00:08:51.707
+and sometimes you do various kinds of editing
+
+00:08:51.807 --> 00:08:54.440
+in one session. That's normal in Emacs,
+
+00:08:54.440 --> 00:08:57.740
+and you might want different parameter settings
+
+00:08:57.840 --> 00:09:00.307
+for different kinds of editing.
+
+00:09:00.407 --> 00:09:06.200
+So you specify parameter value A, do some editing,
+
+00:09:06.200 --> 00:09:10.240
+you specify parameter value B, and do some editing,
+
+00:09:10.240 --> 00:09:13.720
+and you'd switch back and forth, so you want
+
+00:09:13.720 --> 00:09:17.440
+to switch back and forth between these parameters.
+
+00:09:17.440 --> 00:09:22.607
+I think we should aim ...
+
+00:09:22.707 --> 00:09:26.640
+People have added various commands to switch
+
+00:09:26.740 --> 00:09:30.400
+between the last two or n values of this parameter,
+
+00:09:30.500 --> 00:09:32.674
+and another command to switch
+
+00:09:32.774 --> 00:09:36.740
+between the last two or n values of this [other] parameter,
+
+00:09:36.840 --> 00:09:41.360
+and then that parameter, you know, and that parameter.
+
+00:09:41.360 --> 00:09:44.667
+I think we should be able to have
+
+00:09:44.767 --> 00:09:49.120
+a switch between the last n values command
+
+00:09:49.120 --> 00:09:54.320
+that works on various different parameters,
+
+00:09:54.320 --> 00:09:57.040
+and thus makes it easy to remember
+
+00:09:57.040 --> 00:09:59.240
+that there is this facility.
+
+00:09:59.340 --> 00:10:03.774
+Because right now the commands to do that are all ad-hoc,
+
+00:10:03.874 --> 00:10:08.540
+and if you don't use a toggling among the last n values
+
+00:10:08.640 --> 00:10:11.740
+of a given parameter, you won't know how to do it.
+
+00:10:11.840 --> 00:10:15.267
+It won't be obvious that there is a way,
+
+00:10:15.367 --> 00:10:17.667
+so you'd have to go to a suitable manual
+
+00:10:17.767 --> 00:10:20.100
+and study for a while to think of that.
+
+00:10:20.100 --> 00:10:23.620
+We could make this easily discoverable.
+
+NOTE Modularity
+
+00:10:23.620 --> 00:10:30.140
+There is another kind of modularity that's important,
+
+00:10:30.140 --> 00:10:34.100
+and that is modularity at the level of maintenance.
+
+00:10:34.100 --> 00:10:38.207
+This is something all programmers know about, of course,
+
+00:10:38.307 --> 00:10:43.300
+but in Emacs, various parts interact with other parts,
+
+00:10:43.300 --> 00:10:47.980
+and we've tried to make them modular in design
+
+00:10:47.980 --> 00:10:50.380
+by using lots of hooks,
+
+00:10:50.380 --> 00:10:54.380
+but we haven't gone as far as we could.
+
+00:10:54.380 --> 00:10:58.060
+With some effort, we could find calls
+
+00:10:58.060 --> 00:11:00.220
+from over here to over there
+
+00:11:00.220 --> 00:11:03.140
+that could be replaced by use of hooks,
+
+00:11:03.140 --> 00:11:05.940
+so that we could reduce the extent
+
+00:11:05.940 --> 00:11:09.874
+to which you need to know about one part of Emacs
+
+00:11:09.974 --> 00:11:12.607
+to maintain another part of Emacs,
+
+00:11:12.707 --> 00:11:17.580
+and I think that as we keep adding more facilities to Emacs,
+
+00:11:17.580 --> 00:11:22.220
+this kind of modularity will be an investment that pays off.
+
+NOTE Editing formatted text
+
+00:11:22.220 --> 00:11:27.140
+There’s one big area of features
+
+00:11:27.240 --> 00:11:30.700
+that I would like to see in Emacs,
+
+00:11:30.800 --> 00:11:33.180
+and that's the ability to edit
+
+00:11:33.180 --> 00:11:40.340
+formatted documents in WYSIWYG, to be able to edit
+
+00:11:40.340 --> 00:11:47.940
+a letter or a scientific mathematical paper with formulas
+
+00:11:47.940 --> 00:11:52.900
+or a nicely laid out manual,
+
+00:11:52.900 --> 00:11:56.660
+looking at what it's really going to look like.
+
+00:11:56.660 --> 00:12:00.460
+Now we have free software to do this.
+
+00:12:00.460 --> 00:12:04.660
+For instance, I use LibreOffice some of the time.
+
+00:12:04.660 --> 00:12:08.100
+Sometimes it's faster than writing something
+
+00:12:08.100 --> 00:12:11.860
+to be formatted with a text formatter
+
+00:12:11.860 --> 00:12:16.180
+and then formatting it. But when I use LibreOffice,
+
+00:12:16.180 --> 00:12:19.220
+I always miss the commands and facilities,
+
+00:12:19.220 --> 00:12:22.574
+the editing facilities of Emacs.
+
+00:12:22.674 --> 00:12:26.500
+I'd like to have them both together, something with
+
+00:12:26.500 --> 00:12:30.340
+the text formatting capabilities of LibreOffice
+
+00:12:30.340 --> 00:12:36.060
+or even better of TeX, but the editing commands
+
+00:12:36.060 --> 00:12:40.300
+and facilities of Emacs. This would be a big job,
+
+00:12:40.300 --> 00:12:45.980
+but it can be made up of a lot of medium-sized jobs.
+
+00:12:45.980 --> 00:12:50.020
+If people start working on those medium-sized jobs,
+
+00:12:50.020 --> 00:12:52.060
+then in a number of years
+
+00:12:52.060 --> 00:12:55.460
+we'll have something absolutely amazing.
+
+NOTE Not the equivalent of a modern web browser
+
+00:12:55.460 --> 00:13:01.140
+But one thing I think we really shouldn't have
+
+00:13:01.140 --> 00:13:06.500
+is the equivalent of a modern web browser.
+
+00:13:06.500 --> 00:13:10.940
+The World Wide Web started out in the 1990s
+
+00:13:10.940 --> 00:13:13.774
+in a much simpler form,
+
+00:13:13.874 --> 00:13:17.820
+where a web page described its contents,
+
+00:13:17.820 --> 00:13:21.180
+and the web browser laid them out,
+
+00:13:21.180 --> 00:13:23.707
+and the user could parameterize
+
+00:13:23.807 --> 00:13:27.140
+how to lay out various kinds of situations.
+
+00:13:27.140 --> 00:13:31.707
+This was not only convenient for users
+
+00:13:31.807 --> 00:13:35.874
+who wanted to control things and understand things,
+
+00:13:35.974 --> 00:13:39.640
+it was also freedom-respecting
+
+00:13:39.740 --> 00:13:43.020
+because the layout was done by your browser.
+
+00:13:43.020 --> 00:13:48.100
+If you had a free browser, you were in control,
+
+00:13:48.100 --> 00:13:51.620
+even though the browser was complicated already.
+
+00:13:51.620 --> 00:13:54.707
+But starting around two decades ago,
+
+00:13:54.807 --> 00:13:58.820
+there was an explosion in the complexity of browsers
+
+00:13:58.820 --> 00:14:02.780
+as companies wanted to have more and more control
+
+00:14:02.780 --> 00:14:07.700
+over exactly what would appear on a user's screen.
+
+00:14:07.700 --> 00:14:12.374
+So they invented lots of features to control that,
+
+00:14:12.474 --> 00:14:15.907
+features where the user couldn't really customize
+
+00:14:16.007 --> 00:14:18.307
+how something would actually appear
+
+00:14:18.407 --> 00:14:21.207
+because the whole point was that
+
+00:14:21.307 --> 00:14:23.707
+the company could control that.
+
+00:14:23.807 --> 00:14:27.020
+And JavaScript was sort of the ultimate level
+
+00:14:27.020 --> 00:14:32.007
+of "the company controls everything."
+
+00:14:32.107 --> 00:14:38.500
+Because of this, going beyond the simple level
+
+00:14:38.500 --> 00:14:43.540
+of web page formatting features in Emacs
+
+00:14:43.540 --> 00:14:50.940
+is basically heading down a path that leads to subjugation.
+
+00:14:50.940 --> 00:14:54.740
+It's a path that we need to stay away from.
+
+00:14:54.740 --> 00:15:00.307
+It's a path to an unjust world of computing
+
+00:15:00.407 --> 00:15:03.420
+that you can easily see around you.
+
+00:15:03.420 --> 00:15:08.600
+Web browsers nowadays are designed to display ads
+
+00:15:08.700 --> 00:15:11.567
+that you may not want to see.
+
+00:15:11.667 --> 00:15:17.900
+They're designed for DRM.
+
+00:15:17.900 --> 00:15:22.420
+They're designed for companies to snoop on you
+
+00:15:22.420 --> 00:15:26.300
+in unobvious ways. And all of that
+
+00:15:26.300 --> 00:15:28.980
+we should protect ourselves from,
+
+00:15:28.980 --> 00:15:31.300
+protect our users from.
+
+NOTE Getting involved
+
+00:15:31.300 --> 00:15:39.980
+So I hope that some of you will be enthusiastic
+
+00:15:39.980 --> 00:15:42.060
+about some of these changes,
+
+00:15:42.060 --> 00:15:46.940
+especially towards editing formatted text.
+
+00:15:46.940 --> 00:15:51.980
+If you want to get involved, we have
+
+00:15:51.980 --> 00:15:57.820
+a development discussion list called emacs-devel@gnu.org.
+
+00:15:57.820 --> 00:16:02.380
+You can join that. You can also,
+
+00:16:02.380 --> 00:16:05.740
+if you get interested in working on a package
+
+00:16:05.740 --> 00:16:09.500
+and you're not an experienced Emacs Lisp developer,
+
+00:16:09.500 --> 00:16:13.640
+it's a very good idea to look for an experienced developer
+
+00:16:13.740 --> 00:16:14.980
+to talk with.
+
+00:16:14.980 --> 00:16:19.220
+Make sure you can write programs in Emacs Lisp first.
+
+00:16:19.220 --> 00:16:24.260
+It's not useful to take up the expert’s time learning that.
+
+00:16:24.260 --> 00:16:27.307
+You can still learn it from the introduction.
+
+00:16:27.407 --> 00:16:31.660
+But after that, when it's a matter of how to design
+
+00:16:31.660 --> 00:16:36.180
+your favorite package, do have a discussion with developers.
+
+00:16:36.180 --> 00:16:39.060
+They'll give you design ideas
+
+00:16:39.060 --> 00:16:43.180
+that will help you make a package that we put into Emacs.
+
+00:16:43.180 --> 00:17:01.500
+Now it's time for questions.
diff --git a/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt b/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt
new file mode 100644
index 00000000..05297798
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main--chapters.vtt
@@ -0,0 +1,73 @@
+WEBVTT - EmacsConf 2022, Ramin Honary: "Build a Zettelkasten with the Hyperbole Rolodex"
+
+00:00:00.000 --> 00:01:41.039
+Introduction
+
+00:01:41.040 --> 00:01:41.039
+Key takeaway
+
+00:02:17.00 --> 00:02:46.319
+Overview of Zettelkasten
+
+00:02:46.320 --> 00:03:25.359
+Tools I use in day-to-day writing
+
+00:03:25.360 --> 00:04:03.519
+Quick overview of Hyperbole
+
+00:04:03.520 --> 00:04:55.239
+Explain HyRolo
+
+00:04:55.240 --> 00:05:44.279
+Configuration of Hyperbole using ~use-package~
+
+00:05:44.280 --> 00:06:37.599
+The Hyperbole menu-driven user interface
+
+00:06:37.600 --> 00:08:23.759
+Getting started with *HyRolo*: Create a /zettel/
+
+00:08:23.760 --> 00:09:27.121
+Searching the *HyRolo* database
+
+00:09:27.120 --> 00:10:06.959
+Demo *HyRolo* search
+
+00:10:06.960 --> 00:10:42.519
+Search operators AND/OR/NOT
+
+00:10:42.520 --> 00:12:01.759
+Navigating the search results
+
+00:12:01.760 --> 00:12:25.559
+Editing entries creates timestamps
+
+00:12:25.560 --> 00:12:56.039
+How is *HyRolo* a zettelkasten?
+
+00:12:56.040 --> 00:14:26.799
+Demo interlinked notes via *HyRolo* search
+
+00:14:26.800 --> 00:15:35.079
+Explaining how Hyperbole hyperlinks work
+
+00:15:35.080 --> 00:16:04.679
+Demo Hyperbole "implicit links"
+
+00:16:04.680 --> 00:16:04.679
+Explain Hyperbole "explicit links"
+
+00:16:04.680 --> 00:18:32.719
+Demo creating an explicit link
+
+00:18:32.720 --> 00:19:19.879
+Demo creating an /zettel/ entry for a person
+
+00:19:19.880 --> 00:20:10.559
+Demo explicit linking new entry to others
+
+00:20:10.560 --> 00:21:12.479
+How "explicit buttons" encode actions
+
+00:21:12.480 --> 00:21:43.920
+Conclusion
diff --git a/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt b/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt
new file mode 100644
index 00000000..2ec7490e
--- /dev/null
+++ b/2022/captions/emacsconf-2022-rolodex--build-a-zettelkasten-with-the-hyperbole-rolodex--ramin-honary--main.vtt
@@ -0,0 +1,1315 @@
+WEBVTT - EmacsConf 2022, Ramin Honary: "Build a Zettelkasten with the Hyperbole Rolodex" captioned by ramin
+
+00:00:00.000 --> 00:00:06.759
+Hello, attendees of EmacsConf 2022!
+
+00:00:06.760 --> 00:00:08.839
+The title of my talk is:
+
+00:00:08.840 --> 00:00:16.159
+"Build a Zettelkasten with the Hyperbole Rolodex."
+
+00:00:16.160 --> 00:00:17.479
+My name is Ramin Honary.
+
+00:00:17.480 --> 00:00:19.279
+I work as a software engineer
+
+00:00:19.280 --> 00:00:22.839
+writing apps for a small machine learning consultancy.
+
+00:00:22.840 --> 00:00:24.839
+I have been using Emacs since roughly 2018
+
+00:00:24.840 --> 00:00:26.479
+after having switched from a workflow
+
+00:00:26.480 --> 00:00:29.439
+using Vim together with Screen/Tmux for over a decade.
+
+00:00:29.440 --> 00:00:31.439
+Today I'd like to talk a bit about
+
+00:00:31.440 --> 00:00:34.039
+the Hyperbole package for Emacs.
+
+00:00:34.040 --> 00:00:36.159
+Others are presenting talks later today
+
+00:00:36.160 --> 00:00:37.479
+about Hyperbole as well,
+
+00:00:37.480 --> 00:00:39.839
+including some of the the authors and maintainers,
+
+00:00:39.840 --> 00:00:41.879
+so I won't go into too much detail
+
+00:00:41.880 --> 00:00:43.559
+about how Hyperbole works.
+
+00:00:43.560 --> 00:00:45.039
+Instead, I want to present
+
+00:00:45.040 --> 00:00:46.839
+a more concrete use case for Hyperbole,
+
+00:00:46.840 --> 00:00:49.279
+which is how to use it to facilitate
+
+00:00:49.280 --> 00:00:51.919
+the Zettelkasten method.
+
+00:00:51.920 --> 00:00:53.759
+Most Emacs users will probably be
+
+00:00:53.760 --> 00:00:56.039
+more familiar with Org Roam.
+
+00:00:56.040 --> 00:00:58.679
+Org Roam may even be the first thing that comes to mind
+
+00:00:58.680 --> 00:01:00.399
+when you hear the word "Zettelkasten."
+
+00:01:00.400 --> 00:01:02.479
+But personally, I use Hyperbole
+
+00:01:02.480 --> 00:01:05.039
+because I found it easier to get started with
+
+00:01:05.040 --> 00:01:07.479
+using it as an ideas database.
+
+00:01:07.480 --> 00:01:09.599
+All you need to do is install the Hyperbole package
+
+00:01:09.600 --> 00:01:11.399
+(which is available on GNU-ELPA)
+
+00:01:11.400 --> 00:01:13.759
+and then set a few customization options.
+
+00:01:13.760 --> 00:01:15.399
+There is nothing else you really need to do
+
+00:01:15.400 --> 00:01:16.079
+to get started.
+
+00:01:16.080 --> 00:01:19.759
+And also, Hyperbole works nicely with Org Mode.
+
+00:01:19.760 --> 00:01:21.799
+So Hyperbole's built-in functionality
+
+00:01:21.800 --> 00:01:24.919
+can be used as a nice, light-weight alternative
+
+00:01:24.920 --> 00:01:28.199
+to other Emacs Zettelkasten packages.
+
+00:01:28.200 --> 00:01:30.599
+This talk is for people who are curious about
+
+00:01:30.600 --> 00:01:34.159
+getting started with the Zettelkasten method,
+
+00:01:34.160 --> 00:01:36.079
+but are not ready to commit
+
+00:01:36.080 --> 00:01:41.039
+to a more purpose-built solution like Org Roam.
+
+00:01:41.040 --> 00:01:42.719
+So the thing I'd like people
+
+00:01:42.720 --> 00:01:44.599
+to take away from this presentation
+
+00:01:44.600 --> 00:01:46.759
+is that the Hyperbole Emacs package
+
+00:01:46.760 --> 00:01:50.639
+provides you with a flat-file database called "HyRolo"
+
+00:01:50.640 --> 00:01:53.239
+which you can use to store ideas.
+
+00:01:53.240 --> 00:01:55.999
+Then you can use what Hyperbole calls "buttons"
+
+00:01:56.000 --> 00:01:57.239
+(which are hyperlinks)
+
+00:01:57.240 --> 00:02:00.519
+to execute arbitrary Emacs commands
+
+00:02:00.520 --> 00:02:03.159
+and by inserting links into your database
+
+00:02:03.160 --> 00:02:06.159
+that execute queries against the database itself.
+
+00:02:06.160 --> 00:02:08.959
+These query-action links serve as
+
+00:02:08.960 --> 00:02:10.319
+a means to link ideas together,
+
+00:02:10.320 --> 00:02:13.439
+thus creating a functioning "Zettelkasten."
+
+00:02:13.440 --> 00:02:15.479
+If this doesn't make sense to you,
+
+00:02:15.480 --> 00:02:19.839
+I'll explain what all of this means presently.
+
+00:02:19.840 --> 00:02:24.359
+So just a quick overview of what "Zettelkasten" is.
+
+00:02:24.360 --> 00:02:26.199
+Note that most of what I say
+
+00:02:26.200 --> 00:02:27.359
+about the Zettelkasten method
+
+00:02:27.360 --> 00:02:29.759
+comes from a guy called Sascha Fast,
+
+00:02:29.760 --> 00:02:33.119
+and his website: zettelkasten.de .
+
+00:02:33.120 --> 00:02:34.999
+So a Zettelkasten is, in brief,
+
+00:02:35.000 --> 00:02:38.199
+a database containing many nodes of interconnected ideas,
+
+00:02:38.200 --> 00:02:40.759
+each idea being a single quantity of knowledge
+
+00:02:40.760 --> 00:02:42.039
+(about a paragraph)
+
+00:02:42.040 --> 00:02:46.319
+and linked to other related ideas.
+
+00:02:46.320 --> 00:02:47.959
+Also, let me quickly mention
+
+00:02:47.960 --> 00:02:49.679
+that there are actually many tools I use
+
+00:02:49.680 --> 00:02:51.879
+that assist me with the zettelkasten method:
+
+00:02:51.880 --> 00:02:53.599
+Hyperbole for hyperlinks;
+
+00:02:53.600 --> 00:02:56.079
+Embark for general text editing;
+
+00:02:56.080 --> 00:02:57.279
+Org Mode for markup;
+
+00:02:57.280 --> 00:02:59.439
+Dired for managing large sets of files;
+
+00:02:59.440 --> 00:03:01.959
+Consult, Vertico, Orderless, Marginalia;
+
+00:03:01.960 --> 00:03:04.519
+for interactive search through directories and documents;
+
+00:03:04.520 --> 00:03:06.359
+and Magit for revision control,
+
+00:03:06.360 --> 00:03:08.159
+and syncing my database of ideas
+
+00:03:08.160 --> 00:03:10.199
+across a few of my computers.
+
+00:03:10.200 --> 00:03:12.959
+Each of these tools provides some unique functionality,
+
+00:03:12.960 --> 00:03:15.439
+but today I will be focusing mostly on Hyperbole
+
+00:03:15.440 --> 00:03:17.039
+and how it is especially useful
+
+00:03:17.040 --> 00:03:19.839
+for the task of linking information together
+
+00:03:19.840 --> 00:03:21.399
+which is the most important aspect
+
+00:03:21.400 --> 00:03:25.359
+of the Zettelkasten methodology.
+
+00:03:25.360 --> 00:03:28.399
+And now I'll briefly go over what Hyperbole is.
+
+00:03:28.400 --> 00:03:31.159
+At it's core, Hyperbole is a simple markup language
+
+00:03:31.160 --> 00:03:34.519
+specifically designed to markup hyperlinks.
+
+00:03:34.520 --> 00:03:38.439
+Now, a hyperlink usually is only able to jump to
+
+00:03:38.440 --> 00:03:40.959
+ordinary URLs and file paths.
+
+00:03:40.960 --> 00:03:44.319
+Hyperbole extends the function of a hyperlink to provide
+
+00:03:44.320 --> 00:03:45.999
+a simple human-readable markup
+
+00:03:46.000 --> 00:03:49.639
+for executing Emacs commands (called "button actions")
+
+00:03:49.640 --> 00:03:52.359
+and then, on top of this core functionality,
+
+00:03:52.360 --> 00:03:53.239
+a few mini applications
+
+00:03:53.240 --> 00:03:56.839
+for example "HyRolo" and "Koutline",
+
+00:03:56.840 --> 00:04:00.959
+have been built to make Hyperbole more generally useful
+
+00:04:00.960 --> 00:04:03.519
+as a personal information management tool.
+
+00:04:03.520 --> 00:04:07.959
+"HyRolo" is the feature that I use as my Zettelkasten,
+
+00:04:07.960 --> 00:04:10.999
+and in particular, the HyRolo search feature
+
+00:04:11.000 --> 00:04:12.319
+in combination with
+
+00:04:12.320 --> 00:04:16.719
+the usual Hyperbole hyperlink markup language.
+
+00:04:16.720 --> 00:04:19.199
+So let me just quote the Hyperbole manual:
+
+00:04:19.200 --> 00:04:24.759
+"Hyperbole includes HyRolo for convenient management of
+
+00:04:24.760 --> 00:04:27.439
+hierarchical, record-oriented information.
+
+00:04:27.440 --> 00:04:30.879
+Most often, this is used for contact management
+
+00:04:30.880 --> 00:04:33.519
+but it can quickly be adapted to most any
+
+00:04:33.520 --> 00:04:37.199
+record-oriented lookup task requiring fast retrieval."
+
+00:04:37.200 --> 00:04:38.839
+So in other words, for example,
+
+00:04:38.840 --> 00:04:41.399
+it can be used to run search queries
+
+00:04:41.400 --> 00:04:44.679
+across the full set of nodes in a set of Org-Mode files.
+
+00:04:44.680 --> 00:04:47.679
+This means we can use an Org-Mode file
+
+00:04:47.680 --> 00:04:49.639
+as a flat-file database
+
+00:04:49.640 --> 00:04:52.159
+in which entries in the database can be linked together.
+
+00:04:52.160 --> 00:04:55.239
+This, in essence, is a what a Zettelkasten is.
+
+00:04:55.240 --> 00:04:58.959
+HyRolo needs almost no configuration,
+
+00:04:58.960 --> 00:05:00.239
+even if you are using it
+
+00:05:00.240 --> 00:05:01.719
+for the purpose of Zettelkasten,
+
+00:05:01.720 --> 00:05:03.839
+but you should at least make sure
+
+00:05:03.840 --> 00:05:05.599
+you set the location of the database
+
+00:05:05.600 --> 00:05:08.159
+in your Emacs config file, using the Customize system
+
+00:05:08.160 --> 00:05:10.359
+or however you prefer to configure your Emacs.
+
+00:05:10.360 --> 00:05:13.799
+I use "use-package", and on this slide I have here
+
+00:05:13.800 --> 00:05:15.879
+an abridged version of what my "init.el" file
+
+00:05:15.880 --> 00:05:18.199
+looks like for the Hyperbole package.
+
+00:05:18.200 --> 00:05:21.159
+A few relevant environment variables are set:
+
+00:05:21.160 --> 00:05:23.879
+the "hyrolo-file-list" variable
+
+00:05:23.880 --> 00:05:26.919
+selects where to find Rolo database files
+
+00:05:26.920 --> 00:05:29.279
+for the purpose of search. I have it set
+
+00:05:29.280 --> 00:05:31.919
+to just the Zettelkasten flat file database.
+
+00:05:31.920 --> 00:05:35.199
+And I also set "hyrolo-date-format" variable.
+
+00:05:35.200 --> 00:05:37.879
+Each database entry has a time stamp, and
+
+00:05:37.880 --> 00:05:40.239
+I use the time stamp as a unique ID
+
+00:05:40.240 --> 00:05:43.279
+for each entry (that is, each idea node)
+
+00:05:43.280 --> 00:05:44.279
+in the database.
+
+00:05:44.280 --> 00:05:48.199
+Finally, before I get into the actual demo,
+
+00:05:48.200 --> 00:05:49.599
+let me quickly explain
+
+00:05:49.600 --> 00:05:51.559
+the Hyperbole mini-buffer menu system.
+
+00:05:51.560 --> 00:05:54.599
+Mini-buffer menus in Hyperbole work just like
+
+00:05:54.600 --> 00:05:55.559
+in an ordinary GUI,
+
+00:05:55.560 --> 00:05:58.759
+except you typically enter into the mini-buffer menu
+
+00:05:58.760 --> 00:06:01.159
+with a key binding instead of a mouse click.
+
+00:06:01.160 --> 00:06:03.319
+To open the Hyperbole menu,
+
+00:06:03.320 --> 00:06:06.479
+you use the Hyperbole universal leader key
+
+00:06:06.480 --> 00:06:09.519
+that's C-h h, which by the way,
+
+00:06:09.520 --> 00:06:13.239
+this rebinds the "view-hello-file" command,
+
+00:06:13.240 --> 00:06:15.759
+which is a command that probably most people never use.
+
+00:06:15.760 --> 00:06:20.919
+So all Hyperbole menu key sequences begin with C-h h.
+
+00:06:20.920 --> 00:06:23.239
+Please remember this:
+
+00:06:23.240 --> 00:06:25.159
+as I explain how to do things,
+
+00:06:25.160 --> 00:06:26.959
+please don't worry too much
+
+00:06:26.960 --> 00:06:28.679
+about the key sequences I use
+
+00:06:28.680 --> 00:06:30.319
+to perform certain actions.
+
+00:06:30.320 --> 00:06:32.319
+Really, I am just navigating
+
+00:06:32.320 --> 00:06:33.479
+the Hyperbole mini-buffer menus.
+
+00:06:33.480 --> 00:06:37.599
+It is a very discoverable and fluid user interface.
+
+00:06:37.600 --> 00:06:42.159
+Anyway, now that we have configured our Rolo database,
+
+00:06:42.160 --> 00:06:45.399
+let's see how we enter new ideas into the database.
+
+00:06:45.400 --> 00:06:48.879
+And I will start with an empty database,
+
+00:06:48.880 --> 00:06:53.639
+then I'll switch over to a more complete database
+
+00:06:53.640 --> 00:06:57.039
+that I prepared for this demo. So...
+
+00:06:57.040 --> 00:07:04.159
+first we type the Hyperbole universal leader key C-h h,
+
+00:07:04.160 --> 00:07:08.919
+and then, you can see the menus down here
+
+00:07:08.920 --> 00:07:15.279
+we type "r" for "Rolo" and "a" for "add".
+
+00:07:15.280 --> 00:07:19.479
+That's C-h h r a to enter a new idea.
+
+00:07:19.480 --> 00:07:23.319
+And this command is available globally so,
+
+00:07:23.320 --> 00:07:26.599
+much like with the "org-capture" feature in Org-Mode,
+
+00:07:26.600 --> 00:07:28.879
+you can run this command at any time,
+
+00:07:28.880 --> 00:07:32.479
+at the very moment you want to enter an idea.
+
+00:07:32.480 --> 00:07:36.159
+First we are prompted for an entry title,
+
+00:07:36.160 --> 00:07:38.799
+and if you were using HyRolo as a contact list,
+
+00:07:38.800 --> 00:07:40.959
+this is where you would enter the person's name.
+
+00:07:40.960 --> 00:07:43.199
+I am using it as a Zettelkasten,
+
+00:07:43.200 --> 00:07:45.439
+so I instead enter a title for my idea.
+
+00:07:45.440 --> 00:07:46.839
+I'll just type in...
+
+00:07:46.840 --> 00:07:53.159
+and as soon as I press enter after this prompt,
+
+00:07:53.160 --> 00:07:55.999
+my Zettelkasten org file is opened,
+
+00:07:56.000 --> 00:08:02.879
+a new entry with the timestamp is created,
+
+00:08:02.880 --> 00:08:06.319
+and the cursor is placed at this entry
+
+00:08:06.320 --> 00:08:09.079
+ready for me to enter the body text of the idea.
+
+00:08:09.080 --> 00:08:14.799
+I'll type that in...
+
+00:08:14.800 --> 00:08:18.039
+Now I save the "idea" file (C-x C-s)
+
+00:08:18.040 --> 00:08:20.879
+and switch back to what I was working on before
+
+00:08:20.880 --> 00:08:23.759
+with the usual C-x 0 (delete-window) command.
+
+00:08:23.760 --> 00:08:26.279
+Next, I'd like to talk about
+
+00:08:26.280 --> 00:08:28.719
+the HyRolo database search feature,
+
+00:08:28.720 --> 00:08:30.879
+which is very useful.
+
+00:08:30.880 --> 00:08:33.719
+The HyRolo search feature uses
+
+00:08:33.720 --> 00:08:35.319
+only Emacs built-in functions
+
+00:08:35.320 --> 00:08:36.599
+and there is no indexing
+
+00:08:36.600 --> 00:08:38.679
+as with tools like "mlocate" or Org-Roam.
+
+00:08:38.680 --> 00:08:41.439
+So far, I have not had any trouble with efficiency.
+
+00:08:41.440 --> 00:08:42.759
+I don't know if at some point in the future,
+
+00:08:42.760 --> 00:08:44.079
+it will start slowing down.
+
+00:08:44.080 --> 00:08:46.199
+Emacs built-in search functionality
+
+00:08:46.200 --> 00:08:47.679
+is already pretty efficient as it is.
+
+00:08:47.680 --> 00:08:50.839
+It could also be that I am in the habit
+
+00:08:50.840 --> 00:08:55.679
+of storing larger bodies of text in separate files,
+
+00:08:55.680 --> 00:08:57.559
+and not in the flat file database.
+
+00:08:57.560 --> 00:08:58.999
+Anyway, you can search
+
+00:08:59.000 --> 00:09:02.239
+by regex, by string, or by words.
+
+00:09:02.240 --> 00:09:03.799
+I personally find the string search
+
+00:09:03.800 --> 00:09:04.719
+to be the most useful.
+
+00:09:04.720 --> 00:09:07.479
+The difference between word search and string search
+
+00:09:07.480 --> 00:09:09.199
+is that string search provides
+
+00:09:09.200 --> 00:09:12.119
+logical query operators like AND, OR, XOR, and NOT.
+
+00:09:12.120 --> 00:09:14.199
+Once you run a search query,
+
+00:09:14.200 --> 00:09:16.479
+a "*HyRolo*" buffer is opened
+
+00:09:16.480 --> 00:09:18.159
+with the query's results.
+
+00:09:18.160 --> 00:09:20.439
+And this is a read-only-mode buffer
+
+00:09:20.440 --> 00:09:23.239
+with a few useful single-key action bindings
+
+00:09:23.240 --> 00:09:25.079
+for navigating the list of results
+
+00:09:25.080 --> 00:09:27.119
+which I will now demonstrate.
+
+00:09:27.120 --> 00:09:31.879
+By the way, I have now switched over
+
+00:09:31.880 --> 00:09:34.639
+to a larger example Rolo database that I have created
+
+00:09:34.640 --> 00:09:36.559
+to demonstrate more of the HyRolo features.
+
+00:09:36.560 --> 00:09:39.479
+The HyRolo search is available
+
+00:09:39.480 --> 00:09:40.679
+in the Hyperbole mini-buffer menu
+
+00:09:40.680 --> 00:09:42.239
+so it is always available to you.
+
+00:09:42.240 --> 00:09:46.959
+Start with the Hyperbole universal leader key C-h h
+
+00:09:46.960 --> 00:09:53.839
+then "r" for Rolo and "s" for search. That is C-h h r s.
+
+00:09:53.840 --> 00:09:56.039
+Now we are prompted for a search string:
+
+00:09:56.040 --> 00:10:02.519
+I type in "Alice Abelton", and when I press enter,
+
+00:10:02.520 --> 00:10:03.999
+the search results pop up
+
+00:10:04.000 --> 00:10:06.959
+and the number of results is printed in the mini-buffer.
+
+00:10:06.960 --> 00:10:09.599
+We could also enter a search expression
+
+00:10:09.600 --> 00:10:12.159
+similar to a Lisp S-expression
+
+00:10:12.160 --> 00:10:14.759
+with logical operators like AND or NOT,
+
+00:10:14.760 --> 00:10:19.279
+but you would not need to quote the search terms.
+
+00:10:19.280 --> 00:10:24.519
+So, for example (C-h h r s), I could write
+
+00:10:24.520 --> 00:10:30.279
+"(and university character)" within parentheses
+
+00:10:30.280 --> 00:10:31.959
+and this would find entries
+
+00:10:31.960 --> 00:10:33.799
+that only contain both of the words
+
+00:10:33.800 --> 00:10:35.759
+"university" and "character".
+
+00:10:35.760 --> 00:10:39.239
+For the most part, I only really ever use
+
+00:10:39.240 --> 00:10:41.719
+the ordinary string search without logical operators.
+
+00:10:41.720 --> 00:10:44.759
+So as you can see, a search result buffer
+
+00:10:44.760 --> 00:10:47.239
+called "*HyRolo*" has popped up
+
+00:10:47.240 --> 00:10:48.359
+with all of the matching entries.
+
+00:10:48.360 --> 00:10:51.319
+And the search results buffer is a read-only buffer
+
+00:10:51.320 --> 00:10:54.319
+with several useful navigation key bindings:
+
+00:10:54.320 --> 00:11:01.399
+I can press "o" to switch to "overview" mode,
+
+00:11:01.400 --> 00:11:03.959
+which shows all of the headings, but no content.
+
+00:11:03.960 --> 00:11:05.479
+This would include subheadings
+
+00:11:05.480 --> 00:11:07.959
+with like 2 stars in front of it or 3 stars
+
+00:11:07.960 --> 00:11:12.159
+I can press "a" to switch to "show all mode"
+
+00:11:12.160 --> 00:11:14.559
+which shows all of the content under each heading.
+
+00:11:14.560 --> 00:11:17.079
+If I know I am looking for a keyword
+
+00:11:17.080 --> 00:11:17.999
+in a top-level heading,
+
+00:11:18.000 --> 00:11:22.639
+I can press "t" to switch to the "top-level" view mode
+
+00:11:22.640 --> 00:11:25.439
+which shows only the top-level headings.
+
+00:11:25.440 --> 00:11:27.119
+As is always the case
+
+00:11:27.120 --> 00:11:28.879
+with the Emacs default key bindings,
+
+00:11:28.880 --> 00:11:32.359
+"n" and "p" move the cursor down and up lines,
+
+00:11:32.360 --> 00:11:34.519
+so I can navigate the cursor downward
+
+00:11:34.520 --> 00:11:37.599
+to an entry that looks interesting.
+
+00:11:37.600 --> 00:11:40.279
+I can press "s" to show the content
+
+00:11:40.280 --> 00:11:41.519
+of that particular entry.
+
+00:11:41.520 --> 00:11:44.799
+I can press "h" to hide the entry again.
+
+00:11:44.800 --> 00:11:49.479
+And I can press "e" or M-RET on the entry heading
+
+00:11:49.480 --> 00:11:53.279
+to "edit" that heading (that entry),
+
+00:11:53.280 --> 00:11:56.279
+which will open the Org-Mode file,
+
+00:11:56.280 --> 00:11:59.039
+that is, the Zettelkasten database file
+
+00:11:59.040 --> 00:12:01.759
+with the cursor at this particular entry.
+
+00:12:01.760 --> 00:12:07.639
+Be warned that editing an entry creates a new timestamp,
+
+00:12:07.640 --> 00:12:10.159
+which I do not need, and there is currently
+
+00:12:10.160 --> 00:12:12.039
+no way to avoid this behavior.
+
+00:12:12.040 --> 00:12:15.199
+I work around this by simply using the undo command
+
+00:12:15.200 --> 00:12:20.039
+which removes the unwanted timestamp.
+
+00:12:20.040 --> 00:12:25.559
+And so that is how I use the HyRolo search functionality.
+
+00:12:25.560 --> 00:12:31.999
+Now... since the most important aspect of Zettelkasten
+
+00:12:32.000 --> 00:12:33.839
+is linking ideas in the database,
+
+00:12:33.840 --> 00:12:37.039
+how do we actually make this work in HyRolo?
+
+00:12:37.040 --> 00:12:40.039
+So this is the secret sauce of Hyperbole,
+
+00:12:40.040 --> 00:12:41.119
+and the key take-away
+
+00:12:41.120 --> 00:12:43.279
+for this presentation (as I said earlier).
+
+00:12:43.280 --> 00:12:46.679
+Hyperbole provides markup syntax
+
+00:12:46.680 --> 00:12:50.079
+for executing arbitrary Emacs commands
+
+00:12:50.080 --> 00:12:53.759
+so you can link HyRolo entries together
+
+00:12:53.760 --> 00:12:56.039
+using the HyRolo search function.
+
+00:12:56.040 --> 00:12:58.279
+Let me demonstrate this now.
+
+00:12:58.280 --> 00:13:03.879
+I am back in my example HyRolo database,
+
+00:13:03.880 --> 00:13:06.239
+and if you take a closer look
+
+00:13:06.240 --> 00:13:11.399
+you can see some of the hyperlinks
+
+00:13:11.400 --> 00:13:13.119
+that I already created
+
+00:13:13.120 --> 00:13:15.839
+with the angle-round bracket syntax.
+
+00:13:15.840 --> 00:13:19.279
+Now with the cursor inside of these brackets,
+
+00:13:19.280 --> 00:13:23.439
+I can press M-RET to "click" on this link.
+
+00:13:23.440 --> 00:13:27.799
+As you can see, the search query
+
+00:13:27.800 --> 00:13:32.039
+corresponding to this hyperlink here has executed
+
+00:13:32.040 --> 00:13:34.919
+and popped up the "*HyRolo*" search results buffer.
+
+00:13:34.920 --> 00:13:38.719
+There is only one linked entry,
+
+00:13:38.720 --> 00:13:41.399
+but the list of ideas that are produced
+
+00:13:41.400 --> 00:13:43.759
+by the search query in this buffer here
+
+00:13:43.760 --> 00:13:45.639
+are the list of all of the other ideas
+
+00:13:45.640 --> 00:13:47.799
+that are related to this hyperlink
+
+00:13:47.800 --> 00:13:49.479
+that we just clicked on here.
+
+00:13:49.480 --> 00:13:52.199
+(Let me get rid of the other window...)
+
+00:13:52.200 --> 00:13:55.239
+Now from within this "*HyRolo*" buffer,
+
+00:13:55.240 --> 00:13:57.839
+I can navigate to another hyperlink...
+
+00:13:57.840 --> 00:14:03.759
+and clicking on that updates the "*HyRolo*" buffer
+
+00:14:03.760 --> 00:14:04.799
+with new results again.
+
+00:14:04.800 --> 00:14:10.119
+I can just keep navigating through
+
+00:14:10.120 --> 00:14:13.959
+all the Zettelkasten entries in this way.
+
+00:14:13.960 --> 00:14:18.639
+And so this is it.
+
+00:14:18.640 --> 00:14:22.719
+This is my simple but effective Zettelkasten,
+
+00:14:22.720 --> 00:14:25.119
+constructed entirely with the functionality
+
+00:14:25.120 --> 00:14:26.799
+already built-in to Hyperbole.
+
+00:14:26.800 --> 00:14:32.599
+In the remaining time,
+
+00:14:32.600 --> 00:14:36.999
+I'd like to talk about how Hyperbole hyperlinks work,
+
+00:14:37.000 --> 00:14:38.799
+because it's slightly different
+
+00:14:38.800 --> 00:14:40.759
+from how hyperlinks work in Org Mode
+
+00:14:40.760 --> 00:14:49.199
+or with the Emacs clickable text properties.
+
+00:14:49.200 --> 00:14:52.239
+The easiest way to create a hyperlink button
+
+00:14:52.240 --> 00:14:55.279
+that runs an Emacs command
+
+00:14:55.280 --> 00:14:59.479
+is simply to type the Emacs command as an S-expression,
+
+00:14:59.480 --> 00:15:03.399
+but with angle brackets instead of parentheses.
+
+00:15:03.400 --> 00:15:05.679
+If you were looking closely,
+
+00:15:05.680 --> 00:15:08.639
+you probably already saw a hyperlink of this form,
+
+00:15:08.640 --> 00:15:10.559
+an angle-bracketed Emacs command.
+
+00:15:10.560 --> 00:15:13.159
+This hyperlink simply calls
+
+00:15:13.160 --> 00:15:18.079
+the "hyrolo-fgrep" function with this string argument.
+
+00:15:18.080 --> 00:15:20.839
+and so clicking on this button
+
+00:15:20.840 --> 00:15:23.119
+is equivalent to running a HyRolo search
+
+00:15:23.120 --> 00:15:27.319
+with the C-h h r s key sequence.
+
+00:15:27.320 --> 00:15:31.399
+As you can see, clicking on it
+
+00:15:31.400 --> 00:15:32.919
+produced the search results
+
+00:15:32.920 --> 00:15:35.079
+for entries associated with that string query.
+
+00:15:35.080 --> 00:15:41.079
+It's also possible to label an action
+
+00:15:41.080 --> 00:15:43.599
+with a so-called "implicit link",
+
+00:15:43.600 --> 00:15:47.079
+and that's this angle-and-square bracketed notation.
+
+00:15:47.080 --> 00:15:51.999
+If I click on this button,
+
+00:15:52.000 --> 00:15:54.159
+it will activate this action
+
+00:15:54.160 --> 00:16:01.359
+to the right of the colon separator,
+
+00:16:01.360 --> 00:16:03.639
+and there are the relevant search results
+
+00:16:03.640 --> 00:16:04.679
+from that string query.
+
+00:16:04.680 --> 00:16:09.119
+Finally, there are "explicit links",
+
+00:16:09.120 --> 00:16:11.239
+which I find to be especially useful
+
+00:16:11.240 --> 00:16:12.599
+for the Zettelkasten method.
+
+00:16:12.600 --> 00:16:15.239
+I've already shown an example
+
+00:16:15.240 --> 00:16:17.079
+of using an explicit link before.
+
+00:16:17.080 --> 00:16:20.759
+What makes explicit links so useful is, firstly,
+
+00:16:20.760 --> 00:16:23.919
+that the button works with just the label alone.
+
+00:16:23.920 --> 00:16:26.599
+There is no need to write an S-expression or anything.
+
+00:16:26.600 --> 00:16:28.919
+You can write the link label
+
+00:16:28.920 --> 00:16:31.959
+inline with the body text of the idea.
+
+00:16:31.960 --> 00:16:34.879
+(For example, like this.)
+
+00:16:34.880 --> 00:16:38.999
+Explicit links are identified by their label,
+
+00:16:39.000 --> 00:16:40.839
+so they are especially good for
+
+00:16:40.840 --> 00:16:43.119
+the names of people and places.
+
+00:16:43.120 --> 00:16:46.399
+By the way, this Zettelkasten database is for
+
+00:16:46.400 --> 00:16:47.919
+a fictional story I started writing
+
+00:16:47.920 --> 00:16:50.079
+for the purpose of demonstrating HyRolo
+
+00:16:50.080 --> 00:16:52.879
+in this presentation, and I had so much fun writing it
+
+00:16:52.880 --> 00:16:54.999
+that I may actually continue developing this story.
+
+00:16:55.000 --> 00:16:58.639
+Anyway, let's create a new explicit link
+
+00:16:58.640 --> 00:17:01.679
+and a new idea entry for a character in the story.
+
+00:17:01.680 --> 00:17:10.239
+So suppose I want to create a new idea node entry
+
+00:17:10.240 --> 00:17:11.959
+for this fictional character here,
+
+00:17:11.960 --> 00:17:15.359
+and I'll also want to link this entry to that node.
+
+00:17:15.360 --> 00:17:17.839
+Since hyperlinks are just string search,
+
+00:17:17.840 --> 00:17:19.799
+we don't actually need to have
+
+00:17:19.800 --> 00:17:22.279
+an entry in the database for this character.
+
+00:17:22.280 --> 00:17:24.879
+The worst that can happen is that the hyperlink
+
+00:17:24.880 --> 00:17:27.319
+executes a search that returns no results.
+
+00:17:27.320 --> 00:17:29.079
+So it's OK to create the hyperlink
+
+00:17:29.080 --> 00:17:31.879
+before we have an actual entry for this person.
+
+00:17:31.880 --> 00:17:36.719
+(I'll just M-w copy the name.)
+
+00:17:36.720 --> 00:17:40.919
+Now I use the universal Hyperbole leader key C-h h,
+
+00:17:40.920 --> 00:17:44.519
+and then "e" for "explicit links"
+
+00:17:44.520 --> 00:17:49.359
+and "c" for "create". That's C-h h e c.
+
+00:17:49.360 --> 00:17:52.639
+We are prompted for an entry label
+
+00:17:52.640 --> 00:17:56.119
+but it defaults to the text highlighted by the region,
+
+00:17:56.120 --> 00:17:57.959
+so I just press enter.
+
+00:17:57.960 --> 00:18:00.479
+Now it prompts for a button type,
+
+00:18:00.480 --> 00:18:03.119
+so I select "hyrolo-fgrep"
+
+00:18:03.120 --> 00:18:06.479
+(and there's Orderless helping me go faster),
+
+00:18:06.480 --> 00:18:10.319
+and since "hyrolo-fgrep" requires
+
+00:18:10.320 --> 00:18:12.679
+a string argument for the search query,
+
+00:18:12.680 --> 00:18:14.479
+I am prompted for the query string.
+
+00:18:14.480 --> 00:18:21.839
+I'll type in "character:", (yank "Kerri Katz's" name)
+
+00:18:21.840 --> 00:18:26.839
+and there we are, the link has been created, and
+
+00:18:26.840 --> 00:18:31.159
+(let me just get rid of the # character)
+
+00:18:31.160 --> 00:18:32.719
+I can try it out.
+
+00:18:32.720 --> 00:18:36.199
+There's no search results. That's fine.
+
+00:18:36.200 --> 00:18:38.959
+We haven't created an idea entry yet
+
+00:18:38.960 --> 00:18:40.799
+for this character now.
+
+00:18:40.800 --> 00:18:43.399
+So let's go ahead and do that now.
+
+00:18:43.400 --> 00:18:45.679
+If we remember how to create a new idea,
+
+00:18:45.680 --> 00:18:52.359
+it's C-h h r a, and then I type "character:"
+
+00:18:52.360 --> 00:18:56.799
+and then yank the name again.
+
+00:18:56.800 --> 00:18:58.399
+Now a new node has been created,
+
+00:18:58.400 --> 00:19:04.359
+and I can start describing this character.
+
+00:19:04.360 --> 00:19:08.839
+Notice that I like to precede my characters
+
+00:19:08.840 --> 00:19:11.479
+with the keyword "character:" colon.
+
+00:19:11.480 --> 00:19:14.919
+This technique helps me to create hyperlinks
+
+00:19:14.920 --> 00:19:16.999
+using more descriptive search queries
+
+00:19:17.000 --> 00:19:19.879
+that return fewer but more useful search results.
+
+00:19:19.880 --> 00:19:23.839
+And finally, I can create an explicit link
+
+00:19:23.840 --> 00:19:26.039
+from this character back to
+
+00:19:26.040 --> 00:19:28.839
+the other character (her boyfriend).
+
+00:19:28.840 --> 00:19:31.159
+I just type in "<(Bertrand Becket)>",
+
+00:19:31.160 --> 00:19:37.039
+and this explicit link has already been created
+
+00:19:37.040 --> 00:19:39.679
+so I don't need to create it again. It just works.
+
+00:19:39.680 --> 00:19:41.879
+Hyperbole identifies buttons by their label,
+
+00:19:41.880 --> 00:19:44.719
+so as long as an explicit link button with that label
+
+00:19:44.720 --> 00:19:46.039
+has been created before,
+
+00:19:46.040 --> 00:19:51.079
+I just can type in the button with markup by hand,
+
+00:19:51.080 --> 00:19:53.279
+and then I can just use it.
+
+00:19:53.280 --> 00:19:57.839
+Now I am back to the search results
+
+00:19:57.840 --> 00:19:59.319
+for the boyfriend character.
+
+00:19:59.320 --> 00:20:04.159
+I hope you can see how minimal but useful
+
+00:20:04.160 --> 00:20:07.759
+is this particular Zettelkasten technique I have
+
+00:20:07.760 --> 00:20:10.559
+that uses this "HyRolo".
+
+00:20:10.560 --> 00:20:19.359
+I should also make clear that Hyperbole explicit links
+
+00:20:19.360 --> 00:20:22.279
+are encoded in a separate file in the same directory
+
+00:20:22.280 --> 00:20:24.279
+as the Zettelkasten flat-file database.
+
+00:20:24.280 --> 00:20:37.079
+(So, let's go back to that and C-x C-f ".hypb").
+
+00:20:37.080 --> 00:20:41.239
+You should not edit this file by hand,
+
+00:20:41.240 --> 00:20:43.599
+but it is human readable,
+
+00:20:43.600 --> 00:20:45.399
+so it works well with Git
+
+00:20:45.400 --> 00:20:47.079
+and other revision control systems.
+
+00:20:47.080 --> 00:20:49.559
+Whenever an explicit link is activated,
+
+00:20:49.560 --> 00:20:52.559
+it consults this file and runs the associated action,
+
+00:20:52.560 --> 00:20:55.839
+which, in the Zettelkasten use case,
+
+00:20:55.840 --> 00:20:58.799
+will always be to run a HyRolo search query.
+
+00:20:58.800 --> 00:21:02.039
+The advantage of keeping a separate table of links
+
+00:21:02.040 --> 00:21:03.919
+is that you can edit the link action
+
+00:21:03.920 --> 00:21:06.999
+(that is, the search query) in just one place,
+
+00:21:07.000 --> 00:21:10.559
+and the updated button action works everywhere
+
+00:21:10.560 --> 00:21:12.479
+without having to change any other files.
+
+00:21:12.480 --> 00:21:18.399
+So, that is all for today.
+
+00:21:18.400 --> 00:21:20.519
+Thank you so much for listening to my talk.
+
+00:21:20.520 --> 00:21:23.079
+I'll be available for questions
+
+00:21:23.080 --> 00:21:24.919
+for the next 20 minutes or so.
+
+00:21:24.920 --> 00:21:27.959
+If there are any questions that I cannot answer,
+
+00:21:27.960 --> 00:21:29.439
+you will have a chance to ask
+
+00:21:29.440 --> 00:21:31.799
+the author of Hyperbole himself, Bob Weiner,
+
+00:21:31.800 --> 00:21:34.239
+later today after his presentation.
+
+00:21:34.240 --> 00:21:43.920
+Thanks for your attention!
diff --git a/2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt b/2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt
new file mode 100644
index 00000000..007fa710
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sat-open--opening-remarks--main--chapters.vtt
@@ -0,0 +1,29 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:32.839
+General and Development tracks
+
+00:00:32.840 --> 00:01:02.119
+Conversations
+
+00:01:02.120 --> 00:01:30.679
+Etherpad
+
+00:01:31.600 --> 00:02:01.359
+Internet Relay Chat
+
+00:02:01.360 --> 00:02:22.439
+Accessibility and open captions
+
+00:02:22.440 --> 00:02:34.519
+status.emacsconf.org, #emacsconf-org
+
+00:02:34.520 --> 00:02:42.959
+Guidelines for conduct
+
+00:02:42.960 --> 00:03:05.359
+Recordings
+
+00:03:05.360 --> 00:03:20.720
+Let's have fun
diff --git a/2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt b/2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt
new file mode 100644
index 00000000..2fc69a17
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sat-open--opening-remarks--main.vtt
@@ -0,0 +1,273 @@
+WEBVTT captioned by sachac
+
+NOTE General and Development tracks
+#+OUTPUT: /home/sacha/proj/emacsconf/emacsconf-2022-sat-open--opening-remarks--main.webm
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-20-35.png]]
+
+00:00:00.000 --> 00:00:03.519
+Welcome to EmacsConf 2022, where we get to find out
+
+00:00:03.520 --> 00:00:06.239
+just how crazy a text editor can get.
+
+00:00:06.240 --> 00:00:08.319
+There were so many interesting talks
+
+00:00:08.320 --> 00:00:11.319
+that we couldn't figure out how to fit them in two days,
+
+00:00:11.320 --> 00:00:14.119
+so this year we're experimenting with having two tracks.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-29-06.png]]
+
+00:00:14.120 --> 00:00:16.119
+There's a General track and a Development track,
+
+00:00:16.120 --> 00:00:17.959
+but really, you'll probably find
+
+00:00:17.960 --> 00:00:19.599
+interesting things on both tracks
+
+00:00:19.600 --> 00:00:22.159
+no matter what your level of experience is,
+
+00:00:22.160 --> 00:00:25.079
+so don't feel limited to one or the other.
+
+00:00:25.080 --> 00:00:26.999
+If we all figure out this track thing together,
+
+00:00:27.000 --> 00:00:29.879
+that could mean being able to have even more Emacs talks
+
+00:00:29.880 --> 00:00:32.839
+next year, so let's give it a try!
+
+NOTE Conversations
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-22-47.png]]
+
+00:00:32.840 --> 00:00:35.719
+The best parts of EmacsConf are the conversations.
+
+00:00:35.720 --> 00:00:38.279
+The wiki has a page on how to watch and participate,
+
+00:00:38.280 --> 00:00:40.839
+and I'll give you a quick overview as well.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-23-52.png]]
+
+00:00:40.840 --> 00:00:43.999
+You can watch both streams at live.emacsconf.org
+
+00:00:44.000 --> 00:00:46.279
+using free and open source software.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_01-00-29.png]]
+
+00:00:46.280 --> 00:00:48.199
+The schedule shows the General track on top
+
+00:00:48.200 --> 00:00:49.959
+and the Development track on the bottom,
+
+00:00:49.960 --> 00:00:52.159
+so you can see what else is going on.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-24-24.png]]
+
+00:00:52.160 --> 00:00:54.559
+The track pages have quick shortcuts so that you can
+
+00:00:54.560 --> 00:00:57.359
+find out more about talks, open the Etherpads,
+
+00:00:57.360 --> 00:01:00.799
+and join the Q&A sessions. The watch page has more tips
+
+00:01:00.800 --> 00:01:02.119
+on how to make the most of Q&A.
+
+NOTE Etherpad
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-24-44.png]]
+
+00:01:02.120 --> 00:01:05.759
+If you can, please add notes and ask questions
+
+00:01:05.760 --> 00:01:08.519
+in the Etherpad for the talk. That makes it easier
+
+00:01:08.520 --> 00:01:10.079
+for everyone to share their notes,
+
+00:01:10.080 --> 00:01:13.119
+and speakers and hosts can read the questions from there.
+
+00:01:13.120 --> 00:01:16.039
+We'll copy the notes to the talk pages afterwards.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-25-06.png]]
+
+00:01:16.040 --> 00:01:18.319
+We have one pad for each talk this year,
+
+00:01:18.320 --> 00:01:20.919
+so you can follow the links to get to the next one
+
+00:01:20.920 --> 00:01:23.959
+or go back to the schedule and get the link from there.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-25-27.png]]
+
+00:01:23.960 --> 00:01:25.599
+If you have general feedback about
+
+00:01:25.600 --> 00:01:27.759
+the conference itself, please put it in
+
+00:01:27.760 --> 00:01:30.679
+pad.emacsconf.org/2022 .
+
+NOTE Internet Relay Chat
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-25-47.png]]
+
+00:01:31.600 --> 00:01:34.479
+Internet Relay Chat or IRC can be another great way
+
+00:01:34.480 --> 00:01:37.279
+to be part of lots of conversations.
+
+NOTE
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-26-04.png]]
+
+00:01:37.280 --> 00:01:40.319
+You can use chat.emacsconf.org to join the IRC channels
+
+00:01:40.320 --> 00:01:43.199
+through your web browser. The tabs on the left can help you
+
+00:01:43.200 --> 00:01:45.239
+switch between the different channels.
+
+00:01:45.240 --> 00:01:47.719
+There's #emacsconf-gen for the General track
+
+00:01:47.720 --> 00:01:50.239
+and #emacsconf-dev for the Development track.
+
+00:01:50.240 --> 00:01:53.439
+If you need to reach us, you can join #emacsconf-org
+
+00:01:53.440 --> 00:01:57.879
+or e-mail emacsconf-org-private@gnu.org.
+
+00:01:57.880 --> 00:02:01.359
+You can use #emacsconf for hallway conversations.
+
+NOTE Accessibility and open captions
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-26-32.png]]
+
+00:02:01.360 --> 00:02:03.919
+Once again, we're going to be streaming with open captions
+
+00:02:03.920 --> 00:02:06.639
+for most of the talks this year, thanks to our speakers and
+
+00:02:06.640 --> 00:02:09.919
+captioning volunteers. The captioned talks are indicated
+
+00:02:09.920 --> 00:02:12.519
+on the schedule, and with any luck, we'll be posting
+
+00:02:12.520 --> 00:02:16.119
+transcripts on talk pages shortly after the talks start.
+
+00:02:16.120 --> 00:02:18.919
+If you need additional accommodations, please let us know
+
+00:02:18.920 --> 00:02:20.319
+in #emacsconf-org and we'll see
+
+00:02:20.320 --> 00:02:22.439
+if we can make things happen.
+
+NOTE status.emacsconf.org, #emacsconf-org
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-26-55.png]]
+
+00:02:22.440 --> 00:02:26.319
+If something goes down, we'll update status.emacsconf.org.
+
+00:02:26.320 --> 00:02:27.799
+If it doesn't look like we've noticed yet,
+
+00:02:27.800 --> 00:02:31.599
+please let us know in the #emacsconf-org IRC channel,
+
+00:02:31.600 --> 00:02:34.519
+where we will be quietly panicking.
+
+NOTE Guidelines for conduct
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-27-19.png]]
+
+00:02:34.520 --> 00:02:36.959
+In all of these conversations, please keep in mind
+
+00:02:36.960 --> 00:02:39.759
+our guidelines for conduct. You can find them on the wiki,
+
+00:02:39.760 --> 00:02:42.959
+and they basically boil down to: please be nice. Thank you!
+
+NOTE Recordings
+#+CAPTION:
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-27-53.png]]
+
+00:02:42.960 --> 00:02:47.519
+We'll be posting the prerecorded videos as soon as possible.
+
+00:02:47.520 --> 00:02:50.039
+Assuming things go well, you might be able to check out
+
+00:02:50.040 --> 00:02:52.719
+quick replays on the Toobnix channel, which you can
+
+00:02:52.720 --> 00:02:55.679
+find on the watch page in the wiki. We'll post the live
+
+00:02:55.680 --> 00:02:58.759
+talks and Q&A sessions some time after the conference.
+
+00:02:58.760 --> 00:03:01.799
+If you'd like to get an update, you can subscribe to
+
+00:03:01.800 --> 00:03:05.359
+the emacsconf-discuss mailing list.
+
+NOTE Let's have fun
+[[file:/home/sacha/screenshots/Screenshot_2022-12-03_00-28-14.png]]
+
+00:03:05.360 --> 00:03:06.599
+All right, let's get going.
+
+00:03:06.600 --> 00:03:09.639
+Leo Vivier is going to be hosting the general track,
+
+00:03:09.640 --> 00:03:12.399
+and Amin Bandali will host the development track.
+
+00:03:12.400 --> 00:03:15.319
+The other volunteers and I will run around mostly backstage,
+
+00:03:15.320 --> 00:03:18.159
+and you'll probably meet us in the closing remarks.
+
+00:03:18.160 --> 00:03:20.720
+Let's have fun at EmacsConf 2022!
diff --git a/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt b/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt
new file mode 100644
index 00000000..6c118a7b
--- /dev/null
+++ b/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main--chapters.vtt
@@ -0,0 +1,26 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:51.919
+Introduction
+
+00:00:51.920 --> 00:02:30.679
+Packages: Lectorg, Reorg, HBH
+
+00:02:30.680 --> 00:03:14.919
+Org Mode
+
+00:03:14.920 --> 00:04:18.679
+The ecosystem of Lectorg: Elisp and Python
+
+00:04:18.680 --> 00:04:49.159
+How Lectorg works
+
+00:04:49.160 --> 00:06:15.799
+Math
+
+00:06:15.800 --> 00:07:25.759
+Business
+
+00:07:25.760 --> 00:08:08.480
+Conclusion
diff --git a/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt b/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt
new file mode 100644
index 00000000..92b99925
--- /dev/null
+++ b/2022/captions/emacsconf-2022-school--back-to-school-with-emacs--daniel-rosel--main.vtt
@@ -0,0 +1,383 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:04.879
+Taking notes on a computer can be challenging,
+
+00:00:04.880 --> 00:00:08.279
+especially if you compare computer notes
+
+00:00:08.280 --> 00:00:11.959
+with handwritten notes. When you're handwriting,
+
+00:00:11.960 --> 00:00:16.159
+you don't focus as much on taking those notes.
+
+00:00:16.160 --> 00:00:19.559
+Well, you don't focus as much on *how* you take the notes,
+
+00:00:19.560 --> 00:00:24.119
+you more so focus on what you're taking.
+
+00:00:24.120 --> 00:00:27.719
+You don't get that same experience
+
+00:00:27.720 --> 00:00:30.519
+if you're writing your notes on a computer.
+
+00:00:30.520 --> 00:00:32.119
+When writing notes on a computer,
+
+00:00:32.120 --> 00:00:38.439
+you mostly focus on typing or alignment.
+
+00:00:38.440 --> 00:00:42.159
+Those are things that are kind of solved already
+
+00:00:42.160 --> 00:00:45.359
+by certain software such as Org Mode,
+
+00:00:45.360 --> 00:00:48.599
+which is fantastic when it comes to note-taking,
+
+00:00:48.600 --> 00:00:51.919
+but I still believe it could be much better.
+
+NOTE Packages: Lectorg, Reorg, HBH
+
+00:00:51.920 --> 00:00:56.639
+That's why I've developed the package called Lectorg.
+
+00:00:56.640 --> 00:01:01.799
+It's a collection of scripts and snippets which allow you
+
+00:01:01.800 --> 00:01:04.959
+to improve your note-taking experience on the computer,
+
+00:01:04.960 --> 00:01:09.919
+of course, making you more focused on the subject
+
+00:01:09.920 --> 00:01:14.439
+rather than the process of taking notes.
+
+00:01:14.440 --> 00:01:16.559
+So why use Emacs? Well, again,
+
+00:01:16.560 --> 00:01:18.719
+if compared with other software,
+
+00:01:18.720 --> 00:01:21.799
+it has a lot more customizability
+
+00:01:21.800 --> 00:01:24.679
+and it can also unify pretty much anything you need
+
+00:01:24.680 --> 00:01:31.079
+in student life or work life into one place.
+
+00:01:31.080 --> 00:01:35.639
+The problems that Lectorg solves are kind of,
+
+00:01:35.640 --> 00:01:37.879
+as I mentioned, already solved partially
+
+00:01:37.880 --> 00:01:40.479
+by Org Mode itself.
+
+00:01:40.480 --> 00:01:44.599
+What I've done is simply make a bunch of additions
+
+00:01:44.600 --> 00:01:47.359
+to Org Mode through an external package,
+
+00:01:47.360 --> 00:01:51.279
+but I've also developed other sub-modules,
+
+00:01:51.280 --> 00:01:54.439
+one of them being HBH, which allows me
+
+00:01:54.440 --> 00:02:01.399
+to easily plan out my days HBH, hour by hour,
+
+00:02:01.400 --> 00:02:04.679
+therefore I can plan out my days on an hourly basis
+
+00:02:04.680 --> 00:02:09.439
+practically. But I've also built something called Reorg
+
+00:02:09.440 --> 00:02:11.999
+which, for those of you that are familiar
+
+00:02:12.000 --> 00:02:14.599
+with the Remarkable tablet, allows you
+
+00:02:14.600 --> 00:02:19.999
+to integrate notes from your Remarkable into Emacs--
+
+00:02:20.000 --> 00:02:22.439
+into your Org Mode notes basically.
+
+00:02:22.440 --> 00:02:25.199
+Now I believe there's already another talk on integrating
+
+00:02:25.200 --> 00:02:26.919
+handwritten notes into Emacs,
+
+00:02:26.920 --> 00:02:30.679
+so I won't get too much into that.
+
+NOTE Org Mode
+
+00:02:30.680 --> 00:02:36.079
+So again, at the heart of Lectorg is Org Mode,
+
+00:02:36.080 --> 00:02:38.479
+which for those of you that might not be familiar,
+
+00:02:38.480 --> 00:02:43.759
+Org Mode is one of the best pieces of software
+
+00:02:43.760 --> 00:02:49.039
+when it comes to basically capturing any sort of text,
+
+00:02:49.040 --> 00:02:51.559
+managing that text, exporting it
+
+00:02:51.560 --> 00:02:53.959
+into various different formats,
+
+00:02:53.960 --> 00:02:57.279
+which is perfect for taking notes
+
+00:02:57.280 --> 00:02:59.399
+because you can either export them,
+
+00:02:59.400 --> 00:03:02.119
+take them on the go if you don't have access
+
+00:03:02.120 --> 00:03:03.879
+to your computer all the time,
+
+00:03:03.880 --> 00:03:05.839
+or you can share them with friends, which...
+
+00:03:05.840 --> 00:03:11.359
+Well, that is somewhat self-explanatory
+
+00:03:11.360 --> 00:03:14.919
+in how that can help you or others.
+
+NOTE The ecosystem of Lectorg: Elisp and Python
+
+00:03:14.920 --> 00:03:16.559
+Now the ecosystem of Lectorg,
+
+00:03:16.560 --> 00:03:21.719
+it's a bit chaotic as of right now. It's a package itself,
+
+00:03:21.720 --> 00:03:25.759
+Lectorg.el, which also partially relies on
+
+00:03:25.760 --> 00:03:27.759
+a collection of Python scripts
+
+00:03:27.760 --> 00:03:30.039
+as I didn't have that much time
+
+00:03:30.040 --> 00:03:34.119
+to develop the software strictly in Elisp,
+
+00:03:34.120 --> 00:03:37.599
+but it still gets the job done,
+
+00:03:37.600 --> 00:03:43.719
+and I believe that there is no speed hindrance.
+
+00:03:43.720 --> 00:03:46.519
+Now to further improve Lectorg,
+
+00:03:46.520 --> 00:03:49.279
+I'd love to ask for your help
+
+00:03:49.280 --> 00:03:53.079
+if you have encountered any sort of issue
+
+00:03:53.080 --> 00:03:56.839
+when it comes to note-taking or academics in general,
+
+00:03:56.840 --> 00:03:59.759
+I would love to integrate your solution
+
+00:03:59.760 --> 00:04:04.399
+(or if you don't have one, we can come up with one)
+
+00:04:04.400 --> 00:04:07.519
+into Lectorg. Also, if anyone would be willing
+
+00:04:07.520 --> 00:04:13.439
+to transcribe those Python scripts
+
+00:04:13.440 --> 00:04:18.679
+into a more Lisp approach, then that'd be fabulous.
+
+NOTE How Lectorg works
+
+00:04:18.680 --> 00:04:24.319
+So let's look at how Lectorg works in practice.
+
+00:04:24.320 --> 00:04:26.039
+We'll look at two examples,
+
+00:04:26.040 --> 00:04:28.319
+one of taking notes for math
+
+00:04:28.320 --> 00:04:33.319
+and the other for business, I believe.
+
+00:04:33.320 --> 00:04:36.039
+Now I have to mention that all of the things
+
+00:04:36.040 --> 00:04:38.279
+that I do in that example
+
+00:04:38.280 --> 00:04:43.919
+do not cover all the functions and features of Lectorg.
+
+00:04:43.920 --> 00:04:49.159
+There is decent documentation on the Lectorg GitLab page,
+
+NOTE Math
+
+00:04:49.160 --> 00:04:57.519
+so do check that out for further reference.
+
+00:04:57.520 --> 00:04:59.319
+For our first example, we're going to start off
+
+00:04:59.320 --> 00:05:04.239
+with taking notes for statistics. Now what I'm doing here
+
+00:05:04.240 --> 00:05:06.479
+is opening Lectorg Hub, which allows me
+
+00:05:06.480 --> 00:05:10.879
+to associate certain resources with this particular course.
+
+00:05:10.880 --> 00:05:15.679
+Here, I've opened the book which I have associated
+
+00:05:15.680 --> 00:05:19.319
+with this course, and I'm going to go ahead
+
+00:05:19.320 --> 00:05:22.519
+and start taking some notes
+
+00:05:22.520 --> 00:05:26.639
+on the cumulative distribution function here.
+
+00:05:26.640 --> 00:05:29.999
+Now what OrgMode allows you to do
+
+00:05:30.000 --> 00:05:34.599
+is integrate LaTeX into regular text quite easily,
+
+00:05:34.600 --> 00:05:38.239
+preview it, and then later export it.
+
+00:05:38.240 --> 00:05:48.599
+Now here we can see the first usage of a snippet !m,
+
+00:05:48.600 --> 00:05:59.639
+which inserts a block for entering a LaTeX equation.
+
+00:05:59.640 --> 00:06:00.839
+What I'm trying to do here
+
+00:06:00.840 --> 00:06:04.999
+is take a screenshot of the figures in the book,
+
+00:06:05.000 --> 00:06:10.679
+which is done with org-download (not a part of Lectorg,
+
+00:06:10.680 --> 00:06:15.799
+but a very useful tool). Now that is it for math.
+
+NOTE Business
+
+00:06:15.800 --> 00:06:18.039
+Let's look at something a bit different.
+
+00:06:18.040 --> 00:06:20.199
+We're going to take a look at business,
+
+00:06:20.200 --> 00:06:24.519
+more specifically, taking notes on the product lifecycle.
+
+00:06:24.520 --> 00:06:27.559
+Here on the left, I have certain notes from class
+
+00:06:27.560 --> 00:06:31.079
+which are not complete.
+
+00:06:31.080 --> 00:06:34.679
+As you can see at the top, there's a comment
+
+00:06:34.680 --> 00:06:42.719
+also done using Lectorg which puts this file into a TODO
+
+00:06:42.720 --> 00:06:46.719
+so that I can get back to it whenever I want
+
+00:06:46.720 --> 00:06:48.879
+or schedule this TODO.
+
+00:06:48.880 --> 00:06:54.439
+Now I'm taking notes on a video lecture,
+
+00:06:54.440 --> 00:07:07.639
+which I've opened, again, through Lectorg hub.
+
+00:07:07.640 --> 00:07:09.759
+As you can see right now, I'm inserting
+
+00:07:09.760 --> 00:07:12.479
+another snippet for Plantuml,
+
+00:07:12.480 --> 00:07:15.319
+which immediately exports it to a file,
+
+00:07:15.320 --> 00:07:19.799
+and again I'm going to be using org-download here
+
+00:07:19.800 --> 00:07:25.759
+to insert another figure at the top.
+
+NOTE Conclusion
+
+00:07:25.760 --> 00:07:33.359
+I hope this demonstration was useful.
+
+00:07:33.360 --> 00:07:35.599
+Once again, it did not demonstrate everything.
+
+00:07:35.600 --> 00:07:37.839
+You can find more on GitLab.
+
+00:07:37.840 --> 00:07:44.399
+I hope some of you might consider using Lectorg
+
+00:07:44.400 --> 00:07:46.839
+in your academic life or perhaps even
+
+00:07:46.840 --> 00:07:51.319
+in some areas of business. I believe that is
+
+00:07:51.320 --> 00:07:53.759
+everything I have to demonstrate for today.
+
+00:07:53.760 --> 00:07:57.439
+Thank you for listening to this talk,
+
+00:07:57.440 --> 00:08:08.480
+have a nice rest of the day.
diff --git a/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt
new file mode 100644
index 00000000..b211c55f
--- /dev/null
+++ b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers--chapters.vtt
@@ -0,0 +1,32 @@
+WEBVTT captioned by Sebastian
+
+
+00:00:00.000 --> 00:00:24.000
+Introduction
+
+00:00:24.000 --> 00:03:21.000
+Q1 - Do you use flipping notes and do you keep them in org-roam?
+
+00:03:21.000 --> 00:06:00.000
+Q2 - Does it work only for PDFs or does it work for more formats?
+
+00:06:00.000 --> 00:07:04.000
+Q3 - Why use OrgNoter in place of Zotero PDF Reader?
+
+00:07:04.000 --> 00:08:16.000
+Q4 - Thoughts on the future of Zettelkasten
+
+00:08:16.000 --> 00:12:03.000
+Q4.5 - Collaborative Zettelkasten notes
+
+00:12:03.000 --> 00:15:26.000
+Q5 - How do you find a way to get a nice overview of multiple notes to rearrange them?
+
+00:15:26.000 --> 00:18:29.000
+Q6 - Can we use Zettelkasten for coding too?
+
+00:18:29.000 --> 00:19:33.000
+Q7 - Is Zetteldesk available in Melpa? - Yes
+
+00:19:33.000 --> 00:22:03.000
+Conclusion - thoughts about Zettelkasten
diff --git a/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt
new file mode 100644
index 00000000..6ad95d62
--- /dev/null
+++ b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--answers.vtt
@@ -0,0 +1,1232 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:06.000
+ I'm fine. So we can start, right?
+
+00:00:06.000 --> 00:00:09.100
+ Yeah, sure. I mean, you pretty much know the drill.
+
+00:00:09.100 --> 00:00:11.050
+ Everyone watching the show now already knows the drill. V
+
+00:00:11.050 --> 00:00:13.090
+idianus is going to read the questions. If you want to read
+
+00:00:13.090 --> 00:00:16.000
+ the questions on your own, you can open up the pad.
+
+00:00:16.000 --> 00:00:18.080
+ Otherwise, Vidianus will be reading the questions and
+
+00:00:18.080 --> 00:00:20.210
+ answering them in line. And I'll be making jazz in the
+
+00:00:20.210 --> 00:00:22.780
+ background whenever something doesn't work. So Vidianus,
+
+00:00:22.780 --> 00:00:24.000
+ the floor is yours.
+
+00:00:24.000 --> 00:00:32.310
+ Okay. So do you use flitting notes as well? Do you keep
+
+00:00:32.310 --> 00:00:33.780
+ them in the org room? And flitting notes are a very
+
+00:00:33.780 --> 00:00:35.580
+ interesting subject. In the initial draft of this talk, I
+
+00:00:35.580 --> 00:00:37.330
+ wanted to include flitting notes as well, but it would take
+
+00:00:37.330 --> 00:00:40.000
+ a bit too long. So I said, let's not do it.
+
+00:00:40.000 --> 00:00:43.980
+ I'm going to add a link here to my .files in the section
+
+00:00:43.980 --> 00:00:48.350
+ for flitting notes. But I can very quickly share my screen
+
+00:00:48.350 --> 00:00:52.970
+ for a moment and show you something about it. So give me a
+
+00:00:52.970 --> 00:00:54.000
+ moment.
+
+00:00:54.000 --> 00:01:00.000
+ Yes, you can do this.
+
+00:01:00.000 --> 00:01:05.000
+ Okay. So you see the screen now, I think?
+
+00:01:05.000 --> 00:01:08.000
+ Yes, I can see it.
+
+00:01:08.000 --> 00:01:13.590
+ So I have a key binding which opens my daily note. I have
+
+00:01:13.590 --> 00:01:17.490
+ some notes from other talks in EmacsConf and talks that I'm
+
+00:01:17.490 --> 00:01:21.400
+ going to miss due to the two tracks. Don't mind them. So I
+
+00:01:21.400 --> 00:01:28.000
+ write, for example, flitting note.
+
+00:01:28.000 --> 00:01:31.890
+ And I have a command down here which will automatically
+
+00:01:31.890 --> 00:01:35.760
+ give it a to do value. So let's say, for example, I'm
+
+00:01:35.760 --> 00:01:40.000
+ crossing it. It adds a tag to the current projects node,
+
+00:01:40.000 --> 00:01:44.840
+ which is essentially a node I have for things I want to do
+
+00:01:44.840 --> 00:01:46.000
+ right now.
+
+00:01:46.000 --> 00:01:52.590
+ It makes it an org-rem node. And then I can write something
+
+00:01:52.590 --> 00:01:59.360
+ here, blah, blah, blah. And if I go on org-rem node find,
+
+00:01:59.360 --> 00:02:04.000
+ actually, I need to save it first. It will appear here.
+
+00:02:04.000 --> 00:02:10.720
+ And then once I say it's done, it is not a node anymore. It
+
+00:02:10.720 --> 00:02:16.470
+ is removed here. This allows me to archive things. I can
+
+00:02:16.470 --> 00:02:21.320
+ stop the sharing now. This allows me to archive flitting
+
+00:02:21.320 --> 00:02:22.000
+ notes.
+
+00:02:22.000 --> 00:02:26.860
+ So I don't need -- because flitting notes are not something
+
+00:02:26.860 --> 00:02:31.740
+ that needs to remain my shell custom. I want them for some
+
+00:02:31.740 --> 00:02:34.000
+ point and then deleting them.
+
+00:02:34.000 --> 00:02:38.140
+ And this is done with org-journal and not org-rem-dailys
+
+00:02:38.140 --> 00:02:41.960
+ because with org-journal I can have this -- I make it a
+
+00:02:41.960 --> 00:02:45.000
+ node and then I remove it from a node.
+
+00:02:45.000 --> 00:02:48.620
+ While I don't think you can do that with org-rem-dailys,
+
+00:02:48.620 --> 00:02:52.020
+ the code for all of this is in the section I pasted on the
+
+00:02:52.020 --> 00:02:57.000
+ etherpad. And if you have any questions, you can email me.
+
+00:02:57.000 --> 00:03:11.240
+ >> Okay. >> Sorry, just to specify, all the contact
+
+00:03:11.240 --> 00:03:11.560
+ information will be available on the talk page. So be it
+
+00:03:11.560 --> 00:03:12.020
+ the email to Vidianos, also the pads, the recording,
+
+00:03:12.020 --> 00:03:14.590
+ everything will be available after the conference as soon
+
+00:03:14.590 --> 00:03:16.000
+ as we have the bandwidth for this.
+
+00:03:16.000 --> 00:03:18.950
+ So that's where you'll be able to find contact information.
+
+00:03:18.950 --> 00:03:21.000
+ Okay. You can keep going, Vidianos. Sorry for the inter
+
+00:03:21.000 --> 00:03:21.000
+ruption.
+
+00:03:21.000 --> 00:03:25.630
+ >> Okay. So the second question is if it works for PDFs
+
+00:03:25.630 --> 00:03:31.400
+ only or Word and Excel or EPUB, websites, CWW and YouTube.
+
+00:03:31.400 --> 00:03:37.520
+ So I'm not sure. Give me a moment to look at OrgNotor and
+
+00:03:37.520 --> 00:03:41.400
+ see if it says -- because I said I didn't remember. Use it
+
+00:03:41.400 --> 00:03:43.000
+ with PDFs typically.
+
+00:03:43.000 --> 00:03:48.370
+ >> Yes. From the top of my mind, I think OrgNotor works
+
+00:03:48.370 --> 00:03:53.580
+ with EPUB file via the package that is managed I think by
+
+00:03:53.580 --> 00:03:57.250
+ -- was it by Wasamasa? I can't remember actually now. But
+
+00:03:57.250 --> 00:03:59.000
+ at some point it was managed by Wasamasa.
+
+00:03:59.000 --> 00:04:07.550
+ He was probably watching right now and probably yelling at
+
+00:04:07.550 --> 00:04:16.000
+ me in the background. So I'll keep you posted on this. But
+
+00:04:16.000 --> 00:04:16.000
+ yes, the OrgNotor allows you mostly to take notes on PDF
+
+00:04:16.000 --> 00:04:16.000
+ via PDFView, but it also allows you to take notes on EPUB.
+
+00:04:16.000 --> 00:04:16.000
+ And they're working relatively well.
+
+00:04:16.000 --> 00:04:19.000
+ But as for the other -- yeah, go on, Vidianos.
+
+00:04:19.000 --> 00:04:22.840
+ >> I opened OrgNotor and it says it also is compatible with
+
+00:04:22.840 --> 00:04:27.000
+ DocView for Office, so Word, Excel and things like that.
+
+00:04:27.000 --> 00:04:30.430
+ >> Yeah. And otherwise, if you really want to take notes on
+
+00:04:30.430 --> 00:04:33.760
+ such documents, you can probably use either OrgConvert or
+
+00:04:33.760 --> 00:04:37.210
+ Pandoc to generate a document that would be editable within
+
+00:04:37.210 --> 00:04:40.200
+ OrgNotor. It shouldn't be too difficult to do so. And
+
+00:04:40.200 --> 00:04:43.400
+ usually it's mostly PDFs when you're working on research
+
+00:04:43.400 --> 00:04:45.000
+ stuff or stuff like this.
+
+00:04:45.000 --> 00:04:47.110
+ Anyway, sorry for interrupting. This is a topic very dear
+
+00:04:47.110 --> 00:04:49.570
+ to my heart as well because as you know, I have worked a
+
+00:04:49.570 --> 00:04:52.000
+ little bit in OrgGram and OrgNotor especially.
+
+00:04:52.000 --> 00:04:58.560
+ >> Yeah. So I think you should be able to do Word, Excel
+
+00:04:58.560 --> 00:05:03.000
+ and EPUB. I don't think it works with websites and it
+
+00:05:03.000 --> 00:05:07.240
+ definitely doesn't work with videos. Not sure if there's
+
+00:05:07.240 --> 00:05:09.000
+ other solutions for those.
+
+00:05:09.000 --> 00:05:11.950
+ >> I believe there is one. Sorry, I keep inserting myself
+
+00:05:11.950 --> 00:05:15.070
+ into the discussion. This is a very interesting topic. I
+
+00:05:15.070 --> 00:05:18.290
+ think Alfred Papa developed an Org package to capture a
+
+00:05:18.290 --> 00:05:21.570
+ webpage. So it's like an OrgCapture, you know, Org protocol
+
+00:05:21.570 --> 00:05:24.000
+ that allows you to capture stuff from your browser.
+
+00:05:24.000 --> 00:05:27.410
+ It allows you to capture a page and basically Pandocs the
+
+00:05:27.410 --> 00:05:31.050
+ results into an HTML, sorry, it Pandocs from HTML to an Org
+
+00:05:31.050 --> 00:05:34.860
+ document with a structure and a hierarchy. And this way you
+
+00:05:34.860 --> 00:05:38.030
+ can actually take notes on the documents and just have all
+
+00:05:38.030 --> 00:05:41.000
+ the features you would expect in an Org document.
+
+00:05:41.000 --> 00:05:49.460
+ >> I'll shut up now. This is your talk, not mine. If I
+
+00:05:49.460 --> 00:05:58.280
+ really wanted to talk about this, I should have made a talk
+
+00:05:58.280 --> 00:06:00.000
+. Anyway, back to you.
+
+00:06:00.000 --> 00:06:04.160
+ >> Okay. So next one. I used Take Notes on PDF with OrgNot
+
+00:06:04.160 --> 00:06:08.500
+er, but Zotero PDF Reader is also very nice. So, okay. Yeah,
+
+00:06:08.500 --> 00:06:12.280
+ I have seen the Zotero PDF Reader. It does look nice as
+
+00:06:12.280 --> 00:06:16.000
+ well, I would agree, but I have two problems with it.
+
+00:06:16.000 --> 00:06:21.310
+ One, Emacs key bindings don't work, and two, it's not Emacs
+
+00:06:21.310 --> 00:06:26.330
+. Basically, I think it's nice, but I want to use things
+
+00:06:26.330 --> 00:06:31.790
+ that are outside Emacs for as little as possible. And I use
+
+00:06:31.790 --> 00:06:36.310
+ it there because I haven't found a way in Emacs to save the
+
+00:06:36.310 --> 00:06:41.000
+ article somewhere and download the PDF automatically.
+
+00:06:41.000 --> 00:06:46.170
+ I know there is DOI Utils, which was mentioned by RC a few
+
+00:06:46.170 --> 00:06:51.610
+ moments ago as well, but it hasn't worked perfectly for me
+
+00:06:51.610 --> 00:06:56.730
+ in the past when I tried it, so I use Zotero for that, but
+
+00:06:56.730 --> 00:07:01.900
+ I wouldn't use it for the PDF Reader as well because I want
+
+00:07:01.900 --> 00:07:04.000
+ to use it in Emacs.
+
+00:07:04.000 --> 00:07:07.590
+ Next one. Thanks for saying that it was a great
+
+00:07:07.590 --> 00:07:12.500
+ presentation. My thoughts on the future of Zelle Casten. I
+
+00:07:12.500 --> 00:07:18.980
+ think Zelle Casten has a bright future, personally, because
+
+00:07:18.980 --> 00:07:24.000
+ it is plain text. Plain text will never go away, basically.
+
+00:07:24.000 --> 00:07:28.610
+ You will be able to use it forever, and also, Orgrom is
+
+00:07:28.610 --> 00:07:33.630
+ open source with a very vibrant community, so that won't go
+
+00:07:33.630 --> 00:07:39.640
+ away either anytime soon, I think. So, it probably has a
+
+00:07:39.640 --> 00:07:44.000
+ future, if you mean it that way.
+
+00:07:44.000 --> 00:07:49.480
+ And I think that, in general, it is a noting method that is
+
+00:07:49.480 --> 00:07:55.040
+ very efficient. I have used it for university the past few
+
+00:07:55.040 --> 00:08:01.300
+ years, and I have right now like 850 notes on it, and they
+
+00:08:01.300 --> 00:08:05.000
+ will probably only keep increasing.
+
+00:08:05.000 --> 00:08:11.250
+ So, I don't think it's going away. If you want to ask
+
+00:08:11.250 --> 00:08:16.000
+ anything else, we can talk more about it.
+
+00:08:16.000 --> 00:08:19.970
+ Actually, I do have something to add to this particular
+
+00:08:19.970 --> 00:08:24.010
+ point, because on the topic of Zelle Casten and how useful
+
+00:08:24.010 --> 00:08:27.470
+ it can be. Now, it's been a little while since Zelle Casten
+
+00:08:27.470 --> 00:08:32.630
+ really started exploding. I think in 2020, right when COVID
+
+00:08:32.630 --> 00:08:35.200
+ started, a lot of people started getting interested in Z
+
+00:08:35.200 --> 00:08:36.000
+elle Casten methods.
+
+00:08:36.000 --> 00:08:39.570
+ And ever since, we have a lot of software that were
+
+00:08:39.570 --> 00:08:43.940
+ released, including the ones we have in Orgrom. I'm going
+
+00:08:43.940 --> 00:08:47.940
+ to use Orgrom because it's the one I'm most familiar with
+
+00:08:47.940 --> 00:08:51.700
+ as a commentator, but we also have D-Notes by Prot and
+
+00:08:51.700 --> 00:08:54.000
+ other solutions as well.
+
+00:08:54.000 --> 00:08:58.310
+ And one thing that I'm currently working on, and a key area
+
+00:08:58.310 --> 00:09:02.240
+ of interest for me, is how do we use the concept of Zelle
+
+00:09:02.240 --> 00:09:06.700
+ Casten, a collection of notes. Generally, when you think of
+
+00:09:06.700 --> 00:09:10.280
+ Zelle Casten, it's a really individual collection of notes,
+
+00:09:10.280 --> 00:09:11.000
+ right?
+
+00:09:11.000 --> 00:09:14.550
+ It's something that you have, it's the stuff that you find
+
+00:09:14.550 --> 00:09:18.280
+ during your research, during the paper that you read. But
+
+00:09:18.280 --> 00:09:21.700
+ how about trying to have a slipbox for a group of people,
+
+00:09:21.700 --> 00:09:25.060
+ so that they could start sharing notes on research that
+
+00:09:25.060 --> 00:09:26.000
+ they do.
+
+00:09:26.000 --> 00:09:29.190
+ It wouldn't be the same thing as a personal slipbox, but
+
+00:09:29.190 --> 00:09:32.100
+ you can think of it as the knowledge bank for a group of
+
+00:09:32.100 --> 00:09:35.420
+ people, where they keep track of the concept that they use
+
+00:09:35.420 --> 00:09:38.810
+ within their organization, the patterns that they like to
+
+00:09:38.810 --> 00:09:41.000
+ use when they work together.
+
+00:09:41.000 --> 00:09:44.390
+ So, we actually wanted to do a talk this year on some of
+
+00:09:44.390 --> 00:09:47.960
+ those adjacent topics, but sadly, we were a little taken by
+
+00:09:47.960 --> 00:09:51.600
+ time, and you'll have to wait for next year. But I will
+
+00:09:51.600 --> 00:09:55.540
+ agree with you, Vidianos, there's a lot of very interesting
+
+00:09:55.540 --> 00:09:59.380
+ stuff abound for Zelle Casten method, and especially Zelle
+
+00:09:59.380 --> 00:10:01.000
+ Casten inside Emacs.
+
+00:10:01.000 --> 00:10:03.000
+ All right, back to you now.
+
+00:10:03.000 --> 00:10:06.850
+ Thanks for the additions, I like them as well, and I think
+
+00:10:06.850 --> 00:10:10.240
+ that what you said about collaboration, it would be very
+
+00:10:10.240 --> 00:10:12.000
+ interesting, really.
+
+00:10:12.000 --> 00:10:14.000
+ Great.
+
+00:10:14.000 --> 00:10:18.070
+ The only problem is having other people using the same
+
+00:10:18.070 --> 00:10:19.000
+ methods with you.
+
+00:10:19.000 --> 00:10:24.420
+ Sorry, Vidianos, I'm not sure if you asked me a question, I
+
+00:10:24.420 --> 00:10:29.740
+ was at a health, whispering my ear in the background at the
+
+00:10:29.740 --> 00:10:31.000
+ same time.
+
+00:10:31.000 --> 00:10:34.870
+ I just said that I really like the idea that you said about
+
+00:10:34.870 --> 00:10:36.000
+ collaboration.
+
+00:10:36.000 --> 00:10:38.830
+ Yeah, because it is really something that is missing when
+
+00:10:38.830 --> 00:10:42.200
+ you think about it. Like, the good thing about Emacs, and
+
+00:10:42.200 --> 00:10:44.900
+ the philosophy of Emacs generally, is that we have
+
+00:10:44.900 --> 00:10:48.390
+ different modes working together, and they do one thing, or
+
+00:10:48.390 --> 00:10:51.000
+ multiple things, and they do it very well.
+
+00:10:51.000 --> 00:10:54.890
+ We have org mode for editing structured documents, we have
+
+00:10:54.890 --> 00:10:58.200
+ maggots to manage repositories, we have calc to do
+
+00:10:58.200 --> 00:11:02.000
+ calculations with a polished notation and whatnot.
+
+00:11:02.000 --> 00:11:04.960
+ It feels like we have a great tool for collaboration,
+
+00:11:04.960 --> 00:11:08.050
+ editing a singular buffer, which is CRDT, which we've
+
+00:11:08.050 --> 00:11:10.000
+ already talked about before.
+
+00:11:10.000 --> 00:11:13.420
+ I'm not sure if we did have a presentation on Emacs about
+
+00:11:13.420 --> 00:11:17.130
+ CRDT. I think, if you're more interested in this, go back
+
+00:11:17.130 --> 00:11:20.410
+ to the talk I did last year with Joe Connelly and Noura El
+
+00:11:20.410 --> 00:11:24.000
+ Hassan on Emacs Research Group.
+
+00:11:24.000 --> 00:11:26.000
+ We did demonstrate what CRDT was.
+
+00:11:26.000 --> 00:11:28.890
+ So, we have a very good tool for working on a buffer, and
+
+00:11:28.890 --> 00:11:31.000
+ we have a very good way to take notes.
+
+00:11:31.000 --> 00:11:34.220
+ Why not try to combine the two tools, like Emacs is so good
+
+00:11:34.220 --> 00:11:36.660
+ at doing? We take one mode, we take another mode, we clash
+
+00:11:36.660 --> 00:11:38.580
+ them together and we do something very interesting with
+
+00:11:38.580 --> 00:11:39.000
+ them.
+
+00:11:39.000 --> 00:11:42.430
+ Well, we should probably be doing something similar with
+
+00:11:42.430 --> 00:11:46.140
+ note-taking, so that people can actually start building
+
+00:11:46.140 --> 00:11:47.000
+ notes together.
+
+00:11:47.000 --> 00:11:51.190
+ I think that would be a really key step in the future. But
+
+00:11:51.190 --> 00:11:54.330
+ anyway, I think I'm repeating myself a little bit, and I
+
+00:11:54.330 --> 00:11:57.000
+ don't want to say too much right now.
+
+00:11:57.000 --> 00:11:59.210
+ You'll see it in the future, it's coming month or coming
+
+00:11:59.210 --> 00:12:01.000
+ year, so you're not in a rush and flus.
+
+00:12:01.000 --> 00:12:03.000
+ Okay, Vityan, it's back to you now.
+
+00:12:03.000 --> 00:12:05.350
+ Okay, so how do you find a way to get a nice overview of
+
+00:12:05.350 --> 00:12:07.000
+ multiple notes to rearrange them?
+
+00:12:07.000 --> 00:12:09.790
+ Like, basically putting many small notes on another table
+
+00:12:09.790 --> 00:12:11.000
+ and rearranging them.
+
+00:12:11.000 --> 00:12:16.930
+ So, my initial idea when I tried to make Zettle Desk was to
+
+00:12:16.930 --> 00:12:20.000
+ get as close as possible to this.
+
+00:12:20.000 --> 00:12:22.800
+ Have a lot of small notes in my table and be able to
+
+00:12:22.800 --> 00:12:24.000
+ rearrange them.
+
+00:12:24.000 --> 00:12:29.000
+ Due to Org Mode being text, this is not exactly possible.
+
+00:12:29.000 --> 00:12:33.190
+ But I don't know if this question was before the third demo
+
+00:12:33.190 --> 00:12:34.000
+ or not.
+
+00:12:34.000 --> 00:12:39.870
+ What I showed in that demo, I think, to an extent, showed
+
+00:12:39.870 --> 00:12:42.000
+ what I do for rearranging.
+
+00:12:42.000 --> 00:12:47.720
+ You add all the things you want on the Zelda scratch buffer
+
+00:12:47.720 --> 00:12:50.000
+, and then rearrange them however you want.
+
+00:12:50.000 --> 00:12:56.000
+ So, that's as close as I have been able to get to that.
+
+00:12:56.000 --> 00:13:05.230
+ It's not perfect, but I think it is alright for being text,
+
+00:13:05.230 --> 00:13:11.000
+ which making it graphically would be hard, I think.
+
+00:13:11.000 --> 00:13:17.000
+ And the next one seems to be a follow-up on that question.
+
+00:13:17.000 --> 00:13:20.260
+ Yeah, it says it's difficult or impossible to do that. Yeah
+
+00:13:20.260 --> 00:13:21.000
+, I agree.
+
+00:13:21.000 --> 00:13:27.000
+ Okay.
+
+00:13:27.000 --> 00:13:33.560
+ So, this package that you say on the next one, on the next
+
+00:13:33.560 --> 00:13:39.000
+ question, I will check this link out.
+
+00:13:39.000 --> 00:13:44.840
+ It seems very interesting for writing your notes on a big
+
+00:13:44.840 --> 00:13:46.000
+ canvas.
+
+00:13:46.000 --> 00:13:50.230
+ I think it would definitely make sense for my workflow to
+
+00:13:50.230 --> 00:13:53.260
+ use something like this, if it is what I have understood
+
+00:13:53.260 --> 00:13:54.000
+ you mean it is.
+
+00:13:54.000 --> 00:13:59.000
+ I would love to try it. And we'll get back to you.
+
+00:13:59.000 --> 00:14:03.750
+ Whoever left that message, if you want to leave any contact
+
+00:14:03.750 --> 00:14:08.000
+ information or talk to me, I would love to get back to you
+
+00:14:08.000 --> 00:14:09.000
+ about this.
+
+00:14:09.000 --> 00:14:11.000
+ Because it looks very interesting.
+
+00:14:11.000 --> 00:14:14.810
+ Yes, so again, all the contact information will be
+
+00:14:14.810 --> 00:14:17.000
+ available on the talk page.
+
+00:14:17.000 --> 00:14:18.630
+ By the way, if you're worried about the lighting changes in
+
+00:14:18.630 --> 00:14:21.370
+ my place, it's just that sometimes I have a lot of light in
+
+00:14:21.370 --> 00:14:22.000
+ my face.
+
+00:14:22.000 --> 00:14:25.000
+ And then, when I'm a little tired, I do rest like this.
+
+00:14:25.000 --> 00:14:28.000
+ And it's very different, but it's still me. Don't worry
+
+00:14:28.000 --> 00:14:28.000
+ about it.
+
+00:14:28.000 --> 00:14:30.460
+ I'm not going to turn it off, because every time it's like
+
+00:14:30.460 --> 00:14:32.000
+ a flashbang going into my eyes.
+
+00:14:32.000 --> 00:14:35.240
+ So, if you want to talk to Vidyanos afterwards, maybe do
+
+00:14:35.240 --> 00:14:38.000
+ not leave your coordinates right into the pad.
+
+00:14:38.000 --> 00:14:41.000
+ Maybe get in touch with Vidyanos instead.
+
+00:14:41.000 --> 00:14:43.380
+ Those ads are going to be public eventually, and even
+
+00:14:43.380 --> 00:14:46.000
+ though we will be reviewing all the content within them,
+
+00:14:46.000 --> 00:14:49.000
+ it means that they will be open to people for a while.
+
+00:14:49.000 --> 00:14:52.000
+ So, maybe avoid putting personal information over there.
+
+00:14:52.000 --> 00:14:54.440
+ But otherwise, you'll be able to connect after the
+
+00:14:54.440 --> 00:14:57.590
+ conference relatively easily, and Vidyanos will be able to
+
+00:14:57.590 --> 00:14:58.000
+ follow up.
+
+00:14:58.000 --> 00:15:01.000
+ Or even just on the questions, whenever you have the time.
+
+00:15:01.000 --> 00:15:03.760
+ But it might take one or two weeks for the speakers to get
+
+00:15:03.760 --> 00:15:06.000
+ back to the questions you put into the pad.
+
+00:15:06.000 --> 00:15:09.000
+ We will be asking them frequently.
+
+00:15:09.000 --> 00:15:11.890
+ We do have this policy, as you know, with Emacs, of nudging
+
+00:15:11.890 --> 00:15:13.000
+ speakers to do something.
+
+00:15:13.000 --> 00:15:15.860
+ So, we will nudge speakers towards answering your questions
+
+00:15:15.860 --> 00:15:18.510
+, but it might take us about one or two weeks to get all the
+
+00:15:18.510 --> 00:15:19.000
+ answers.
+
+00:15:19.000 --> 00:15:22.000
+ I think we don't have any more questions currently.
+
+00:15:22.000 --> 00:15:24.000
+ There is one more.
+
+00:15:24.000 --> 00:15:26.000
+ Oh, there is one more. So, please take it.
+
+00:15:26.000 --> 00:15:29.800
+ Can we use Zettelkasten for coding too, especially when
+
+00:15:29.800 --> 00:15:32.000
+ using the IDs like Visual Studio and Excel?
+
+00:15:32.000 --> 00:15:38.080
+ So, I can't say for sure if you can use it, because I'm not
+
+00:15:38.080 --> 00:15:39.000
+ in coding.
+
+00:15:39.000 --> 00:15:44.000
+ The only language I know the best for coding is Emacs Lisp.
+
+00:15:44.000 --> 00:15:48.770
+ And the only other one I know is Matlab for doing
+
+00:15:48.770 --> 00:15:54.000
+ calculations, for example, for things in university.
+
+00:15:54.000 --> 00:15:59.000
+ But I think you should be able to do that.
+
+00:15:59.000 --> 00:16:03.600
+ If you look for Zettelkasten for coding, you will probably
+
+00:16:03.600 --> 00:16:06.000
+ find some resources for it.
+
+00:16:06.000 --> 00:16:14.000
+ I don't think it breaks the Zettelkasten principles.
+
+00:16:14.000 --> 00:16:21.000
+ You can make atomic nodes for coding concepts.
+
+00:16:21.000 --> 00:16:24.000
+ So, it should work, I believe.
+
+00:16:24.000 --> 00:16:26.000
+ Yeah, and I can actually confirm this.
+
+00:16:26.000 --> 00:16:31.150
+ I did share with you before in one of the previous Q&A how
+
+00:16:31.150 --> 00:16:33.390
+ we're taking notes on this little device right here to do
+
+00:16:33.390 --> 00:16:34.000
+ lead code exercises.
+
+00:16:34.000 --> 00:16:38.400
+ The thing about lead code exercises is that, well, lead
+
+00:16:38.400 --> 00:16:40.000
+ code, sorry, let's be more vague about it.
+
+00:16:40.000 --> 00:16:42.990
+ Lead code is a platform and not a free platform as well,
+
+00:16:42.990 --> 00:16:44.000
+ and I'm not advertising them.
+
+00:16:44.000 --> 00:16:46.700
+ But the concept of data structure and algorithm is really
+
+00:16:46.700 --> 00:16:48.000
+ important to programming.
+
+00:16:48.000 --> 00:16:53.260
+ And usually when you try to solve algorithmic problems, you
+
+00:16:53.260 --> 00:16:58.000
+ rely on a number of patterns that have been developed by...
+
+00:16:58.000 --> 00:17:01.260
+ Sorry, I get people telling me to my right here that, oh,
+
+00:17:01.260 --> 00:17:02.000
+ the sim is going down.
+
+00:17:02.000 --> 00:17:06.850
+ And so my stomach is falling into my body, just, oh, what
+
+00:17:06.850 --> 00:17:08.000
+ happened?
+
+00:17:08.000 --> 00:17:10.310
+ Anyway, going back to the point, we do rely on patterns and
+
+00:17:10.310 --> 00:17:13.000
+ identification of patterns within a problem.
+
+00:17:13.000 --> 00:17:17.130
+ So, as a result, it would be very much possible to create
+
+00:17:17.130 --> 00:17:20.000
+ separate nodes for all these patterns.
+
+00:17:20.000 --> 00:17:22.630
+ And you can have different exercises and say you have an
+
+00:17:22.630 --> 00:17:25.000
+ exercise that is using two different things.
+
+00:17:25.000 --> 00:17:29.000
+ It's using a tree pattern and it's using a depth search.
+
+00:17:29.000 --> 00:17:31.640
+ If neither of those two words make any sense to you, do not
+
+00:17:31.640 --> 00:17:35.100
+ worry and be grateful because this will haunt you at night
+
+00:17:35.100 --> 00:17:36.000
+ otherwise.
+
+00:17:36.000 --> 00:17:38.730
+ But it would be very, I think it would be a prime candidate
+
+00:17:38.730 --> 00:17:42.000
+ really for atomization and linking within a Zettelkasten.
+
+00:17:42.000 --> 00:17:44.780
+ Because it would make it so much easier to structure your
+
+00:17:44.780 --> 00:17:47.730
+ knowledge in a way that is organic rather than hierarchical
+
+00:17:47.730 --> 00:17:48.000
+.
+
+00:17:48.000 --> 00:17:52.030
+ So, yeah, this was a very good question and I'd be happy to
+
+00:17:52.030 --> 00:17:56.390
+ encourage the asker to try it on their own and maybe make a
+
+00:17:56.390 --> 00:17:58.000
+ presentation next year at the next EMACS Conf.
+
+00:17:58.000 --> 00:18:01.210
+ Vidyanos, before we continue, I just want to give up the
+
+00:18:01.210 --> 00:18:02.000
+ heads up.
+
+00:18:02.000 --> 00:18:05.230
+ So, we have opened the room currently. If you want to join
+
+00:18:05.230 --> 00:18:10.000
+ the room with Vidyanos, we have posted the link on ISC.
+
+00:18:10.000 --> 00:18:12.400
+ And if you go to the talk page of Vidyanos talk, you will
+
+00:18:12.400 --> 00:18:14.000
+ be able to join the room as well.
+
+00:18:14.000 --> 00:18:16.650
+ We did have quite a number of questions. So, feel free to
+
+00:18:16.650 --> 00:18:17.000
+ join.
+
+00:18:17.000 --> 00:18:19.530
+ In about four minutes, we'll need to move on to the next
+
+00:18:19.530 --> 00:18:20.000
+ talk.
+
+00:18:20.000 --> 00:18:23.000
+ But, well, actually, I give you about three more minutes.
+
+00:18:23.000 --> 00:18:26.000
+ Do we have any more questions on the pad, Vidyanos?
+
+00:18:26.000 --> 00:18:29.000
+ On the pad, no. I'm looking on IRC.
+
+00:18:29.000 --> 00:18:34.000
+ Someone says if Zeldas.dl will be available in Melpa.
+
+00:18:34.000 --> 00:18:39.000
+ It is on Melpa right now. You can find it.
+
+00:18:39.000 --> 00:18:44.390
+ Right. And you just have to -- sorry, my voice is getting
+
+00:18:44.390 --> 00:18:45.000
+ raspier.
+
+00:18:45.000 --> 00:18:47.680
+ It's only the first day of EMACS Conf. It's not even lunch
+
+00:18:47.680 --> 00:18:49.000
+ and I'm already losing my voice.
+
+00:18:49.000 --> 00:18:51.000
+ This is not booting well for the rest.
+
+00:18:51.000 --> 00:18:54.100
+ But, yeah, you should be able to find it pretty easily by
+
+00:18:54.100 --> 00:19:00.080
+ looking on doc.go for Melpa and space and zeldacaster.el,
+
+00:19:00.080 --> 00:19:01.000
+ the name of the package.
+
+00:19:01.000 --> 00:19:03.000
+ You'll be able to find it. And we can put it on the page.
+
+00:19:03.000 --> 00:19:04.600
+ I'm pretty sure it's already on your talk page, Vidyanos,
+
+00:19:04.600 --> 00:19:05.000
+ as well.
+
+00:19:05.000 --> 00:19:07.000
+ Yeah, it is on the talk page.
+
+00:19:07.000 --> 00:19:09.000
+ Yeah, you'll be able to find it really quickly.
+
+00:19:09.000 --> 00:19:11.000
+ So we have about two more minutes.
+
+00:19:11.000 --> 00:19:12.670
+ Did you see any other question that you'd like to answer as
+
+00:19:12.670 --> 00:19:13.000
+ well?
+
+00:19:13.000 --> 00:19:17.800
+ I'm scrolling on IRC since the talk started to see if there
+
+00:19:17.800 --> 00:19:19.000
+ is anything else.
+
+00:19:19.000 --> 00:19:21.000
+ I don't see anything else.
+
+00:19:21.000 --> 00:19:28.000
+ If anyone has a room here, I would love to continue.
+
+00:19:28.000 --> 00:19:33.000
+ If not, then I think we've already answered enough things.
+
+00:19:33.000 --> 00:19:38.000
+ Sure, I would concur. You have covered a lot of ground.
+
+00:19:38.000 --> 00:19:41.240
+ I am personally happy to be seeing so many talks about Zeld
+
+00:19:41.240 --> 00:19:42.000
+acaster.
+
+00:19:42.000 --> 00:19:44.430
+ It feels like I was a little bit of a forerunner at EMACS
+
+00:19:44.430 --> 00:19:46.000
+ Conf talking about Zeldacaster.
+
+00:19:46.000 --> 00:19:48.450
+ And now, we are two years later and we're still talking
+
+00:19:48.450 --> 00:19:49.000
+ about it.
+
+00:19:49.000 --> 00:19:51.170
+ I know a lot of people are getting a little tired of
+
+00:19:51.170 --> 00:19:53.000
+ hearing about Zeldacaster all the time.
+
+00:19:53.000 --> 00:19:59.050
+ But if you part all the communication, if you focus on what
+
+00:19:59.050 --> 00:20:00.000
+ it actually does,
+
+00:20:00.000 --> 00:20:03.000
+ and I keep saying it's just notes and it's just links,
+
+00:20:03.000 --> 00:20:05.000
+ it's actually quite amazing what you can do with it.
+
+00:20:05.000 --> 00:20:07.000
+ It's just a mental model, really.
+
+00:20:07.000 --> 00:20:11.690
+ So I would kind of use the, you know, sorry for the voxing
+
+00:20:11.690 --> 00:20:12.000
+ here.
+
+00:20:12.000 --> 00:20:16.460
+ But if you have been interested in Zeldacaster at some
+
+00:20:16.460 --> 00:20:17.000
+ point,
+
+00:20:17.000 --> 00:20:20.000
+ or if you are frustrated by all the talk about Zeldacaster,
+
+00:20:20.000 --> 00:20:22.000
+ that seems to be kind of like a cult at some point,
+
+00:20:22.000 --> 00:20:27.460
+ well, I would encourage you maybe to try, not necessarily
+
+00:20:27.460 --> 00:20:28.000
+ try it for yourself,
+
+00:20:28.000 --> 00:20:31.000
+ but try to understand really the simple stuff behind it.
+
+00:20:31.000 --> 00:20:34.340
+ Because honestly, there's nothing very revolutionary about
+
+00:20:34.340 --> 00:20:36.000
+ this note-taking method.
+
+00:20:36.000 --> 00:20:39.370
+ It's just that it used to be done with paper, and now it's
+
+00:20:39.370 --> 00:20:40.000
+ done with computers,
+
+00:20:40.000 --> 00:20:42.000
+ and it makes it a little more easier.
+
+00:20:42.000 --> 00:20:45.500
+ Personally, what I find the most helpful in this type of
+
+00:20:45.500 --> 00:20:48.000
+ note-taking is how organic everything feels.
+
+00:20:48.000 --> 00:20:50.650
+ You do not need to be thinking about the structure from the
+
+00:20:50.650 --> 00:20:51.000
+ get-go,
+
+00:20:51.000 --> 00:20:53.000
+ and this is extremely freeing.
+
+00:20:53.000 --> 00:20:56.000
+ OK, Vidyanos, we are about out of time.
+
+00:20:56.000 --> 00:20:58.240
+ Thank you so much for taking the time to answer the
+
+00:20:58.240 --> 00:20:59.000
+ questions.
+
+00:20:59.000 --> 00:21:01.690
+ We will be in touch in the future, and we'll be looking
+
+00:21:01.690 --> 00:21:04.000
+ forward to having more presentations about Zeldacaster,
+
+00:21:04.000 --> 00:21:08.000
+ and perhaps maybe one by you in the future.
+
+00:21:08.000 --> 00:21:11.000
+ So, well, thank you so much.
+
+00:21:11.000 --> 00:21:13.470
+ And, Vidyanos, I don't see anyone in the room, so feel free
+
+00:21:13.470 --> 00:21:15.000
+ to leave the room after we're done.
+
+00:21:15.000 --> 00:21:18.410
+ So in about one minute, we're going to go with the next
+
+00:21:18.410 --> 00:21:19.000
+ talk.
+
+00:21:19.000 --> 00:21:23.000
+ We might go a little bit quiet until the top of the minute.
+
+00:21:23.000 --> 00:21:26.000
+ I need to drink, and I need to rest my voice.
+
+00:21:26.000 --> 00:21:28.000
+ But in one minute, we'll be starting the next talk.
+
+00:21:28.000 --> 00:21:30.000
+ Vidyanos, thank you so much, and see you next time.
+
+00:21:30.000 --> 00:21:32.000
+ Bye.
+
+00:21:32.000 --> 00:21:35.000
+ (Break)
+
+00:21:37.000 --> 00:21:37.000
+
+
+00:21:37.000 --> 00:21:40.000
+ (Break)
+
+00:21:42.000 --> 00:21:42.000
+
+
+00:21:42.000 --> 00:21:45.000
+ (Break)
+
+00:21:47.000 --> 00:21:47.000
+
+
+00:21:47.000 --> 00:21:50.000
+ (Break)
+
+00:21:50.000 --> 00:21:53.000
+ (Break)
+
+00:21:55.000 --> 00:21:55.000
+
+
+00:21:55.000 --> 00:21:58.000
+ (Break)
+
+00:22:00.000 --> 00:22:00.000
+
+
+00:22:00.000 --> 00:22:03.000
+ (Break)
+
diff --git a/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt
new file mode 100644
index 00000000..2fa99c0c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main--chapters.vtt
@@ -0,0 +1,55 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:28.320
+My second brain
+
+00:00:28.320 --> 00:01:40.560
+Contents of the talk
+
+00:01:40.560 --> 00:02:35.200
+Bibliography management
+
+00:02:35.200 --> 00:03:04.960
+Creating literature notes: ivy-bibtex-edit-notes
+
+00:03:04.960 --> 00:04:40.160
+org-roam reference template
+
+00:04:40.160 --> 00:05:40.840
+Demo
+
+00:05:40.840 --> 00:06:44.240
+Annotating with org-noter
+
+00:06:44.240 --> 00:07:02.120
+Annotating in English
+
+00:07:02.120 --> 00:07:30.200
+Afterthoughts on an article
+
+00:07:30.200 --> 00:08:21.480
+Adding a note
+
+00:08:21.480 --> 00:09:01.680
+Creating permanent notes from reference material
+
+00:09:01.680 --> 00:09:21.520
+The organization problem
+
+00:09:21.520 --> 00:10:43.600
+zetteldesk.el
+
+00:10:43.600 --> 00:11:45.040
+The zetteldesk-desktop
+
+00:11:45.040 --> 00:12:09.840
+Filtering with ivy-bibtex
+
+00:12:09.840 --> 00:13:46.200
+Inserting literature
+
+00:13:46.200 --> 00:15:19.160
+Composing the final article
+
+00:15:19.160 --> 00:16:44.480
+Thanks
diff --git a/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt
new file mode 100644
index 00000000..6b098ba9
--- /dev/null
+++ b/2022/captions/emacsconf-2022-science--writing-and-organizing-literature-notes-for-scientific-writing--vidianos--main.vtt
@@ -0,0 +1,1153 @@
+WEBVTT captioned by hannah
+
+00:00:00.000 --> 00:00:02.039
+Hello everyone, I'm Vidianos.
+
+00:00:02.040 --> 00:00:03.079
+Today I'm going to show you
+
+00:00:03.080 --> 00:00:04.079
+how I write and organize
+
+00:00:04.080 --> 00:00:06.439
+my literature notes using Emacs.
+
+00:00:06.440 --> 00:00:08.719
+I take my notes using Zettelkasten,
+
+00:00:08.720 --> 00:00:11.079
+which you may or may not have heard.
+
+00:00:11.080 --> 00:00:13.839
+It is about taking small atomic notes
+
+00:00:13.840 --> 00:00:14.999
+and linking them one another
+
+00:00:15.000 --> 00:00:17.599
+to create your so-called second brain.
+
+00:00:17.600 --> 00:00:19.159
+Here is mine.
+
+00:00:19.160 --> 00:00:20.719
+This is a graph of all the notes
+
+00:00:20.720 --> 00:00:22.879
+I have accumulated the last few years.
+
+00:00:22.880 --> 00:00:25.199
+It has various types of notes,
+
+00:00:25.200 --> 00:00:25.959
+but we're mainly going to focus on
+
+00:00:25.960 --> 00:00:28.319
+literature notes today.
+
+00:00:28.320 --> 00:00:29.639
+Here are the contents of my talk.
+
+00:00:29.640 --> 00:00:30.439
+We're going to start
+
+00:00:30.440 --> 00:00:31.919
+with bibliography management,
+
+00:00:31.920 --> 00:00:33.319
+which is how I take bibliography
+
+00:00:33.320 --> 00:00:35.959
+from the web and import it to Emacs.
+
+00:00:35.960 --> 00:00:37.079
+Then we're going to talk about
+
+00:00:37.080 --> 00:00:38.879
+how I create literature notes
+
+00:00:38.880 --> 00:00:42.759
+using a custom org-roam-bibtex template I have.
+
+00:00:42.760 --> 00:00:43.919
+And after talking about that,
+
+00:00:43.920 --> 00:00:46.359
+we can talk about how I write literature notes,
+
+00:00:46.360 --> 00:00:48.239
+which is through annotating an article
+
+00:00:48.240 --> 00:00:51.319
+using org-noter. Org-noter is a package
+
+00:00:51.320 --> 00:00:53.439
+that allows you to annotate PDFs
+
+00:00:53.440 --> 00:00:54.999
+using the Org format
+
+00:00:55.000 --> 00:00:59.559
+and creates a supplementary Org file to your PDF.
+
+00:00:59.560 --> 00:01:00.879
+Then we're going to talk about
+
+00:01:00.880 --> 00:01:03.519
+adding the literature to your Zettelkasten,
+
+00:01:03.520 --> 00:01:06.279
+which is a simple but important topic,
+
+00:01:06.280 --> 00:01:08.599
+and how you can write permanent notes
+
+00:01:08.600 --> 00:01:11.719
+based on the info you obtain from this literature.
+
+00:01:11.720 --> 00:01:13.319
+Lastly, we're going to focus on
+
+00:01:13.320 --> 00:01:14.999
+the organization problem
+
+00:01:15.000 --> 00:01:17.719
+one might find when having a lot of literature
+
+00:01:17.720 --> 00:01:21.439
+for an assignment or an article or something,
+
+00:01:21.440 --> 00:01:22.959
+and how I have tried to solve this
+
+00:01:22.960 --> 00:01:24.839
+with my package Zetteldesk.
+
+00:01:24.840 --> 00:01:26.359
+This isn't the perfect solution,
+
+00:01:26.360 --> 00:01:29.799
+but it is what I have, and I really like it.
+
+00:01:29.800 --> 00:01:30.839
+Finally, we're going to talk about
+
+00:01:30.840 --> 00:01:33.559
+how to compose the final article
+
+00:01:33.560 --> 00:01:35.199
+that you want to produce
+
+00:01:35.200 --> 00:01:36.799
+using this literature
+
+00:01:36.800 --> 00:01:38.639
+with the technique described
+
+00:01:38.640 --> 00:01:40.559
+in the rest of this talk.
+
+00:01:40.560 --> 00:01:42.239
+So let's begin the talk
+
+00:01:42.240 --> 00:01:44.239
+with bibliography management.
+
+00:01:44.240 --> 00:01:47.239
+Zotero is the bibliography manager I use.
+
+00:01:47.240 --> 00:01:49.399
+It is very simple to store articles with it,
+
+00:01:49.400 --> 00:01:50.679
+and it exports to .bib,
+
+00:01:50.680 --> 00:01:52.079
+integrating with packages
+
+00:01:52.080 --> 00:01:54.959
+such as org-roam-bibtex and ivy-bibtex.
+
+00:01:54.960 --> 00:01:56.679
+When researching, I typically find
+
+00:01:56.680 --> 00:02:00.039
+a long list of articles from a search engine.
+
+00:02:00.040 --> 00:02:03.439
+I open the titles which have interesting titles
+
+00:02:03.440 --> 00:02:05.039
+through their abstracts
+
+00:02:05.040 --> 00:02:07.799
+and save to Zotero those whose abstracts
+
+00:02:07.800 --> 00:02:10.319
+are the most relevant to what I want.
+
+00:02:10.320 --> 00:02:11.799
+From these articles,
+
+00:02:11.800 --> 00:02:13.359
+I typically won't read all of them
+
+00:02:13.360 --> 00:02:14.519
+because they're a lot,
+
+00:02:14.520 --> 00:02:17.759
+but I will select a few,
+
+00:02:17.760 --> 00:02:21.639
+once I have collected as many as I want.
+
+00:02:21.640 --> 00:02:24.079
+Zotero acts as a way to store everything
+
+00:02:24.080 --> 00:02:25.479
+that might be interesting,
+
+00:02:25.480 --> 00:02:28.519
+while Emacs and my Zettelkasten
+
+00:02:28.520 --> 00:02:30.959
+stores everything that is definitely interesting,
+
+00:02:30.960 --> 00:02:35.199
+and I have read it already.
+
+00:02:35.200 --> 00:02:36.359
+And then we can move to
+
+00:02:36.360 --> 00:02:38.559
+how I create literature notes.
+
+00:02:38.560 --> 00:02:41.119
+I set the default action of ivy-bibtex
+
+00:02:41.120 --> 00:02:43.599
+to ivy-bibtex-edit-notes,
+
+00:02:43.600 --> 00:02:44.919
+which will prompt-- which
+
+00:02:44.920 --> 00:02:46.479
+with org-roam-bibtex-mode active,
+
+00:02:46.480 --> 00:02:48.839
+prompts you for an org-capture template
+
+00:02:48.840 --> 00:02:50.799
+when selecting something
+
+00:02:50.800 --> 00:02:52.319
+if the node doesn't exist,
+
+00:02:52.320 --> 00:02:54.959
+or takes you to the existing node.
+
+00:02:54.960 --> 00:02:58.439
+And obviously you need to have this here,
+
+00:02:58.440 --> 00:03:00.799
+to set the default action
+
+00:03:00.800 --> 00:03:02.599
+that was already there
+
+00:03:02.600 --> 00:03:04.959
+to a letter.
+
+00:03:04.960 --> 00:03:08.039
+Then we can move to my org-roam reference template,
+
+00:03:08.040 --> 00:03:11.159
+using org-roam-bibtex.
+
+00:03:11.160 --> 00:03:12.439
+This isn't so complicated,
+
+00:03:12.440 --> 00:03:14.119
+but it has some important stuff
+
+00:03:14.120 --> 00:03:14.879
+I want to highlight.
+
+00:03:14.880 --> 00:03:17.399
+Save it to the ref directory,
+
+00:03:17.400 --> 00:03:19.719
+so I can remember where it is,
+
+00:03:19.720 --> 00:03:23.559
+and it's classified as a literature note.
+
+00:03:23.560 --> 00:03:25.119
+The file name is the cite key,
+
+00:03:25.120 --> 00:03:27.759
+which is easy and small,
+
+00:03:27.760 --> 00:03:30.079
+but the title is the actual article's title.
+
+00:03:30.080 --> 00:03:32.319
+Give it a tag of the entry-type;
+
+00:03:32.320 --> 00:03:35.039
+this is typically "article,"
+
+00:03:35.040 --> 00:03:37.479
+but it's easy to sort things this way
+
+00:03:37.480 --> 00:03:41.399
+because not all literature notes are articles.
+
+00:03:41.400 --> 00:03:43.159
+And then give the keywords
+
+00:03:43.160 --> 00:03:47.359
+that are given by Zotero, because why not?
+
+00:03:47.360 --> 00:03:51.479
+Tags here are tags from Zettelkasten.
+
+00:03:51.480 --> 00:03:53.639
+These are the links to
+
+00:03:53.640 --> 00:03:55.359
+other files which are relevant,
+
+00:03:55.360 --> 00:03:58.079
+but its initialization is empty, obviously.
+
+00:03:58.080 --> 00:03:59.839
+And then this heading is where
+
+00:03:59.840 --> 00:04:00.839
+all the magic happens.
+
+00:04:00.840 --> 00:04:04.719
+The name is just not really so relevant;
+
+00:04:04.720 --> 00:04:07.559
+I just needed something that made sense.
+
+00:04:07.560 --> 00:04:10.399
+The properties are what matters,
+
+00:04:10.400 --> 00:04:12.239
+and mainly this one here.
+
+00:04:12.240 --> 00:04:18.879
+The ${file} attribute finds
+
+00:04:18.880 --> 00:04:24.799
+the file of this specific literature
+
+00:04:24.800 --> 00:04:27.519
+and makes sure that org-noter works
+
+00:04:27.520 --> 00:04:29.639
+by default here.
+
+00:04:29.640 --> 00:04:32.559
+As I'm going to show you in a moment,
+
+00:04:32.560 --> 00:04:34.599
+this way [of] initializing the literature note,
+
+00:04:34.600 --> 00:04:36.999
+org-noter works by default.
+
+00:04:37.000 --> 00:04:40.159
+That's all, basically, for the template.
+
+00:04:40.160 --> 00:04:42.759
+This is the point of the talk
+
+00:04:42.760 --> 00:04:44.039
+where we reach the first demo.
+
+00:04:44.040 --> 00:04:47.079
+This is about opening ivy-bibtex,
+
+00:04:47.080 --> 00:04:50.239
+selecting an article I want to annotate,
+
+00:04:50.240 --> 00:04:52.999
+initializing the literature note.
+
+00:04:53.000 --> 00:04:54.999
+We can see that everything
+
+00:04:55.000 --> 00:04:56.479
+is inserted in for me,
+
+00:04:56.480 --> 00:05:01.079
+and if I open org-noter on this heading,
+
+00:05:01.080 --> 00:05:03.759
+it opens the article, as expected.
+
+00:05:03.760 --> 00:05:06.199
+I can read the article,
+
+00:05:06.200 --> 00:05:08.439
+I can say I want to
+
+00:05:08.440 --> 00:05:10.720
+annotate something here.
+
+00:05:20.720 --> 00:05:24.119
+Obviously, annotation is not that simple as here,
+
+00:05:24.120 --> 00:05:26.479
+but I don't really have the time
+
+00:05:26.480 --> 00:05:28.599
+to actually annotate an article live.
+
+00:05:28.600 --> 00:05:34.039
+But you can keep going, and it's a good setup.
+
+00:05:34.040 --> 00:05:39.879
+Then close org-noter,
+
+00:05:39.880 --> 00:05:40.839
+and let's go presentation again.
+
+00:05:40.840 --> 00:05:44.359
+Moving on, this section is some stuff
+
+00:05:44.360 --> 00:05:45.799
+about my annotation process.
+
+00:05:45.800 --> 00:05:49.479
+As I said, there is not enough time for me
+
+00:05:49.480 --> 00:05:51.119
+to actually annotate an article live,
+
+00:05:51.120 --> 00:05:52.999
+but here are some things about it.
+
+00:05:53.000 --> 00:05:55.479
+First, is that I annotate with org-noter,
+
+00:05:55.480 --> 00:05:56.719
+which I absolutely love.
+
+00:05:56.720 --> 00:05:59.599
+It is great for annotations
+
+00:05:59.600 --> 00:06:02.519
+because you do them in org,
+
+00:06:02.520 --> 00:06:03.879
+which is an amazing format
+
+00:06:03.880 --> 00:06:05.879
+and gives you a lot of flexibility,
+
+00:06:05.880 --> 00:06:07.839
+such as adding to the Zettelkasten,
+
+00:06:07.840 --> 00:06:11.319
+being initialized by a capture template,
+
+00:06:11.320 --> 00:06:13.119
+and other things.
+
+00:06:13.120 --> 00:06:15.959
+But also, you don't need to look for
+
+00:06:15.960 --> 00:06:17.359
+the notes inside the PDF,
+
+00:06:17.360 --> 00:06:19.519
+which is a problem you can have
+
+00:06:19.520 --> 00:06:20.959
+if you annotate on the PDF,
+
+00:06:20.960 --> 00:06:23.079
+and it is very annoying in my opinion.
+
+00:06:23.080 --> 00:06:26.439
+So I prefer having these notes,
+
+00:06:26.440 --> 00:06:27.879
+and I can only focus on them,
+
+00:06:27.880 --> 00:06:29.759
+but I can also see where they refer.
+
+00:06:29.760 --> 00:06:33.199
+The other scenarios are not so good.
+
+00:06:33.200 --> 00:06:35.519
+Annotating on the PDF,
+
+00:06:35.520 --> 00:06:36.479
+you search for it,
+
+00:06:36.480 --> 00:06:41.199
+and if you don't know which section it refers to,
+
+00:06:41.200 --> 00:06:42.759
+then you need to look about it,
+
+00:06:42.760 --> 00:06:44.239
+and that is very tiring.
+
+00:06:44.240 --> 00:06:48.359
+Also, I am always annotating in English.
+
+00:06:48.360 --> 00:06:50.199
+This is not my mother tongue,
+
+00:06:50.200 --> 00:06:52.039
+but it helps me avoid
+
+00:06:52.040 --> 00:06:53.679
+the necessary mental overhead
+
+00:06:53.680 --> 00:06:55.199
+of translating while reading.
+
+00:06:55.200 --> 00:06:57.559
+I want to pay attention to what I read
+
+00:06:57.560 --> 00:06:59.679
+and not to translate stuff.
+
+00:06:59.680 --> 00:07:02.119
+I will translate later.
+
+00:07:02.120 --> 00:07:05.039
+And when finishing an article,
+
+00:07:05.040 --> 00:07:07.719
+I write a mini-abstract myself,
+
+00:07:07.720 --> 00:07:10.119
+which contains what I think about the article.
+
+00:07:10.120 --> 00:07:11.639
+It doesn't need to be much,
+
+00:07:11.640 --> 00:07:13.999
+it's usually like 3 or 4 paragraphs,
+
+00:07:14.000 --> 00:07:18.319
+and it shows things that are useful in the article,
+
+00:07:18.320 --> 00:07:21.159
+and what is mentioned that matters to me.
+
+00:07:21.160 --> 00:07:22.599
+So I can look back at it,
+
+00:07:22.600 --> 00:07:24.919
+and it is very easy for me to find
+
+00:07:24.920 --> 00:07:26.599
+what I got from this article,
+
+00:07:26.600 --> 00:07:30.199
+so where I will cite it on my actual project.
+
+00:07:30.200 --> 00:07:33.879
+Then last thing you need to do
+
+00:07:33.880 --> 00:07:35.479
+is add a note to your Zettelkasten.
+
+00:07:35.480 --> 00:07:38.039
+This is very easy due to it being in an org format.
+
+00:07:38.040 --> 00:07:41.799
+You can just have it in the org-roam directory,
+
+00:07:41.800 --> 00:07:43.639
+which it automatically goes to,
+
+00:07:43.640 --> 00:07:46.559
+and link it to other relevant notes,
+
+00:07:46.560 --> 00:07:48.519
+which is its index
+
+00:07:48.520 --> 00:07:50.559
+because everything in my Zettelkasten
+
+00:07:50.560 --> 00:07:51.719
+(at least) has an index,
+
+00:07:51.720 --> 00:07:54.519
+but also every other permanent note
+
+00:07:54.520 --> 00:07:56.759
+whose contents are in one way or another
+
+00:07:56.760 --> 00:07:58.079
+mentioned inside the article.
+
+00:07:58.080 --> 00:08:00.359
+This way the article is in a network with notes
+
+00:08:00.360 --> 00:08:02.039
+that are similar to it.
+
+00:08:02.040 --> 00:08:05.359
+Then we move on to the second demo,
+
+00:08:05.360 --> 00:08:08.039
+which is about a full-fledged literature note.
+
+00:08:08.040 --> 00:08:11.119
+We can go on org-roam-node-find,
+
+00:08:11.120 --> 00:08:13.159
+search for references,
+
+00:08:13.160 --> 00:08:15.559
+go to this, and you can see
+
+00:08:15.560 --> 00:08:17.759
+it is linked to other notes.
+
+00:08:17.760 --> 00:08:20.039
+And here is the mini-abstract,
+
+00:08:20.040 --> 00:08:21.479
+and here are my notes on it.
+
+00:08:21.480 --> 00:08:27.519
+The last thing you need to do
+
+00:08:27.520 --> 00:08:29.119
+when creating a literature note,
+
+00:08:29.120 --> 00:08:31.319
+is obviously create permanent notes
+
+00:08:31.320 --> 00:08:32.279
+based on what you read.
+
+00:08:32.280 --> 00:08:35.679
+If you never create these literature notes,
+
+00:08:35.680 --> 00:08:37.679
+you will never get new information.
+
+00:08:37.680 --> 00:08:40.439
+So for your Zettelkasten to grow,
+
+00:08:40.440 --> 00:08:42.359
+you need to create such notes.
+
+00:08:42.360 --> 00:08:45.879
+This means that the subject you are researching
+
+00:08:45.880 --> 00:08:47.799
+is not just literature notes
+
+00:08:47.800 --> 00:08:50.279
+but has well-structured permanent notes,
+
+00:08:50.280 --> 00:08:52.799
+which is what you will actually read.
+
+00:08:52.800 --> 00:08:55.159
+You typically only read literature notes
+
+00:08:55.160 --> 00:08:57.159
+to see what gets cited where.
+
+00:08:57.160 --> 00:08:58.759
+What you will mostly read
+
+00:08:58.760 --> 00:08:59.839
+is these permanent notes
+
+00:08:59.840 --> 00:09:01.679
+that you create from this knowledge.
+
+00:09:01.680 --> 00:09:05.239
+So finally we are at the last part of the talk,
+
+00:09:05.240 --> 00:09:07.359
+which is about organizing literature notes.
+
+00:09:07.360 --> 00:09:09.559
+And this is in my opinion
+
+00:09:09.560 --> 00:09:10.879
+the most interesting part
+
+00:09:10.880 --> 00:09:12.199
+because it is very unique.
+
+00:09:12.200 --> 00:09:14.719
+It uses a package I wrote myself,
+
+00:09:14.720 --> 00:09:18.319
+and it doesn't have as much usage
+
+00:09:18.320 --> 00:09:21.519
+as the rest of the things I described so far.
+
+00:09:21.520 --> 00:09:24.799
+So what is the problem you might find?
+
+00:09:24.800 --> 00:09:27.959
+Indeed, if you read a lot of things,
+
+00:09:27.960 --> 00:09:30.959
+you have a large collection of notes,
+
+00:09:30.960 --> 00:09:33.919
+and it's not the only thing you will think about.
+
+00:09:33.920 --> 00:09:36.079
+However, you do need to
+
+00:09:36.080 --> 00:09:37.799
+justify everything with citations,
+
+00:09:37.800 --> 00:09:39.879
+so you need to remember everything
+
+00:09:39.880 --> 00:09:41.119
+you read in these notes.
+
+00:09:41.120 --> 00:09:43.519
+You have done a lot of work,
+
+00:09:43.520 --> 00:09:45.919
+but there is still a lot for you
+
+00:09:45.920 --> 00:09:47.319
+to reach your final manuscript.
+
+00:09:47.320 --> 00:09:50.359
+Except if there was a handy little way
+
+00:09:50.360 --> 00:09:52.879
+to combine everything
+
+00:09:52.880 --> 00:09:55.879
+and sort it in a very easy way.
+
+00:09:55.880 --> 00:09:56.959
+Well, there is,
+
+00:09:56.960 --> 00:10:00.119
+and I think it came out pretty well.
+
+00:10:00.120 --> 00:10:01.799
+It's zetteldesk.el.
+
+00:10:01.800 --> 00:10:05.039
+It was inspired by this quote here
+
+00:10:05.040 --> 00:10:06.479
+from How to Take Smart Notes.
+
+00:10:06.480 --> 00:10:09.799
+Sönke Ahrens here talked about a desktop,
+
+00:10:09.800 --> 00:10:13.079
+which you have all the literature
+
+00:10:13.080 --> 00:10:16.239
+you want in that desktop,
+
+00:10:16.240 --> 00:10:20.079
+and you try to bring it in order.
+
+00:10:20.080 --> 00:10:22.599
+And by doing that,
+
+00:10:22.600 --> 00:10:24.839
+you can improve your ideas
+
+00:10:24.840 --> 00:10:27.519
+and have a structure
+
+00:10:27.520 --> 00:10:30.919
+so that your manuscript will then be
+
+00:10:30.920 --> 00:10:33.879
+very, very easy to write.
+
+00:10:33.880 --> 00:10:36.279
+And as I say here, in trying to do this,
+
+00:10:36.280 --> 00:10:38.919
+I made something much more general
+
+00:10:38.920 --> 00:10:41.559
+than it needed to be, so yeah,
+
+00:10:41.560 --> 00:10:43.599
+you can use it for many other things.
+
+00:10:43.600 --> 00:10:46.959
+But before I show you some things about it,
+
+00:10:46.960 --> 00:10:49.879
+I want to introduce you to what a desktop is.
+
+00:10:49.880 --> 00:10:53.159
+It's essentially a collection of the knowledge
+
+00:10:53.160 --> 00:10:54.839
+you want to be able to see.
+
+00:10:54.840 --> 00:10:57.999
+You add things to your Zetteldesk,
+
+00:10:58.000 --> 00:11:01.679
+and using filter functions,
+
+00:11:01.680 --> 00:11:04.919
+you only see these notes and nothing else,
+
+00:11:04.920 --> 00:11:07.359
+which in my opinion is very handy.
+
+00:11:07.360 --> 00:11:10.319
+So having said that,
+
+00:11:10.320 --> 00:11:12.479
+we can see these things in action
+
+00:11:12.480 --> 00:11:14.399
+for the final demo of the talk.
+
+00:11:14.400 --> 00:11:15.839
+This is the third one.
+
+00:11:15.840 --> 00:11:20.879
+I will go to an index file of mine.
+
+00:11:20.880 --> 00:11:21.959
+This is 3D printing,
+
+00:11:21.960 --> 00:11:23.479
+an assignment I had last semester.
+
+00:11:23.480 --> 00:11:27.039
+And this has 28 backlinks,
+
+00:11:27.040 --> 00:11:30.399
+so a lot of things that I looked at
+
+00:11:30.400 --> 00:11:31.799
+for this assignment.
+
+00:11:31.800 --> 00:11:33.519
+I can say I want to add
+
+00:11:33.520 --> 00:11:35.799
+the current note's backlinks to the Zetteldesk,
+
+00:11:35.800 --> 00:11:38.239
+and now I have a filtered version
+
+00:11:38.240 --> 00:11:40.119
+of org-roam-node-find defined,
+
+00:11:40.120 --> 00:11:41.999
+which only lists these 29 notes.
+
+00:11:42.000 --> 00:11:45.039
+Very nice, right?
+
+00:11:45.040 --> 00:11:49.159
+I can also filter just the literature notes,
+
+00:11:49.160 --> 00:11:55.999
+which can also use other UIs beside org-roam,
+
+00:11:56.000 --> 00:11:57.439
+such as, for example,
+
+00:11:57.440 --> 00:12:00.039
+one I use a lot is the ivy-bibtex command.
+
+00:12:00.040 --> 00:12:03.239
+This takes a lot of time,
+
+00:12:03.240 --> 00:12:04.599
+much longer than the org-roam one,
+
+00:12:04.600 --> 00:12:06.479
+but has them in this UI,
+
+00:12:06.480 --> 00:12:09.839
+which in a lot of cases is more useful for me.
+
+00:12:09.840 --> 00:12:15.719
+The other very important thing is inserting these.
+
+00:12:15.720 --> 00:12:19.999
+For example, say I want to insert a permanent note,
+
+00:12:20.000 --> 00:12:21.759
+such as this.
+
+00:12:21.760 --> 00:12:25.399
+Its title will become a top-level heading,
+
+00:12:25.400 --> 00:12:29.319
+and everything else will be inserted as expected.
+
+00:12:29.320 --> 00:12:35.399
+But the most important thing for us
+
+00:12:35.400 --> 00:12:37.159
+is inserting literature, right?
+
+00:12:37.160 --> 00:12:39.519
+This is done with this command,
+
+00:12:39.520 --> 00:12:42.719
+and let's say I want to insert this.
+
+00:12:42.720 --> 00:12:48.239
+The title again becomes a heading,
+
+00:12:48.240 --> 00:12:50.839
+and this is the article title also.
+
+00:12:50.840 --> 00:12:53.039
+I store the cite key here,
+
+00:12:53.040 --> 00:12:56.319
+and everything else about it is also here.
+
+00:12:56.320 --> 00:12:58.239
+And I can add others,
+
+00:12:58.240 --> 00:13:01.199
+for example, this and this.
+
+00:13:01.200 --> 00:13:09.039
+And we have all of them here.
+
+00:13:09.040 --> 00:13:11.279
+I see it says this is the basic,
+
+00:13:11.280 --> 00:13:12.799
+so let's put it at the top.
+
+00:13:12.800 --> 00:13:18.839
+And then maybe I want to put this last.
+
+00:13:18.840 --> 00:13:24.159
+And this way, you can sort things,
+
+00:13:24.160 --> 00:13:26.319
+and typically, on the other side,
+
+00:13:26.320 --> 00:13:27.719
+I have a manuscript,
+
+00:13:27.720 --> 00:13:29.999
+and I look at what order
+
+00:13:30.000 --> 00:13:31.159
+I want to have things in
+
+00:13:31.160 --> 00:13:34.799
+and sort the articles and the permanent notes
+
+00:13:34.800 --> 00:13:38.359
+in a way so that each section can have
+
+00:13:38.360 --> 00:13:41.799
+its own citations and its own notes,
+
+00:13:41.800 --> 00:13:46.199
+which makes writing, again, very easy, in my opinion.
+
+00:13:46.200 --> 00:13:53.719
+Finally, let's go to composing the final article.
+
+00:13:53.720 --> 00:13:57.279
+This is our goal: we wrote and organized
+
+00:13:57.280 --> 00:13:58.359
+all these literature notes
+
+00:13:58.360 --> 00:14:00.399
+to put them in your final project.
+
+00:14:00.400 --> 00:14:01.879
+This might be an assignment
+
+00:14:01.880 --> 00:14:04.439
+or an actual scientific article.
+
+00:14:04.440 --> 00:14:07.479
+It is apparent that you have done
+
+00:14:07.480 --> 00:14:09.079
+a lot of work for this so far,
+
+00:14:09.080 --> 00:14:12.279
+but you don't need to do a lot more.
+
+00:14:12.280 --> 00:14:14.079
+In my opinion, this is the easiest part
+
+00:14:14.080 --> 00:14:15.519
+of the whole workflow.
+
+00:14:15.520 --> 00:14:19.279
+People consider final article composition hard,
+
+00:14:19.280 --> 00:14:21.239
+but if you've done all these steps,
+
+00:14:21.240 --> 00:14:23.439
+you already have everything you want
+
+00:14:23.440 --> 00:14:25.639
+to add in the article from your notes.
+
+00:14:25.640 --> 00:14:27.719
+It's already there,
+
+00:14:27.720 --> 00:14:30.759
+a lot of things are copy-pasted,
+
+00:14:30.760 --> 00:14:34.039
+it's all in a coherent order,
+
+00:14:34.040 --> 00:14:38.439
+connections are to an extent already there,
+
+00:14:38.440 --> 00:14:41.599
+and you know what citation goes where,
+
+00:14:41.600 --> 00:14:44.199
+so you can justify everything you write.
+
+00:14:44.200 --> 00:14:46.799
+The actual draft isn't there,
+
+00:14:46.800 --> 00:14:48.519
+but it is very easy
+
+00:14:48.520 --> 00:14:52.599
+because now you just write things as you see them
+
+00:14:52.600 --> 00:14:54.439
+in your desktop and connect them.
+
+00:14:54.440 --> 00:14:56.959
+Connections are basic--
+
+00:14:56.960 --> 00:14:59.439
+connections and making the article good, obviously,
+
+00:14:59.440 --> 00:15:02.399
+are basically the only thing you need to worry,
+
+00:15:02.400 --> 00:15:05.919
+but those are very important
+
+00:15:05.920 --> 00:15:09.039
+because others will only see the final manuscript,
+
+00:15:09.040 --> 00:15:11.079
+so if that's not good,
+
+00:15:11.080 --> 00:15:14.079
+then the whole assignment is not good, obviously.
+
+00:15:14.080 --> 00:15:17.519
+So it's not like your work is done,
+
+00:15:17.520 --> 00:15:19.159
+it's just very easy.
+
+00:15:19.160 --> 00:15:23.279
+And with that, I hope you liked my talk
+
+00:15:23.280 --> 00:15:25.519
+because it is coming to an end now.
+
+00:15:25.520 --> 00:15:27.919
+I want to thank you for your time;
+
+00:15:27.920 --> 00:15:29.679
+I hope you enjoyed it.
+
+00:15:29.680 --> 00:15:32.519
+You can feel free to email me at this address;
+
+00:15:32.520 --> 00:15:35.639
+it has also been on every slide since the beginning.
+
+00:15:35.640 --> 00:15:40.239
+I also have the GitHub for zetteldesk.el here,
+
+00:15:40.240 --> 00:15:42.519
+and I will be available for questions.
+
+00:15:42.520 --> 00:15:44.999
+I will be viewing both the pad and the IRC
+
+00:15:45.000 --> 00:15:49.159
+and will do a live Q&A after this. See you.
+
+00:15:49.160 --> 00:15:51.279
+Actually, before I go,
+
+00:15:51.280 --> 00:15:54.199
+let's show you the GitHub for zetteldesk.el.
+
+00:15:54.200 --> 00:15:57.119
+Here's the README; if you're interested on it,
+
+00:15:57.120 --> 00:15:58.519
+you can see more about it,
+
+00:15:58.520 --> 00:16:02.559
+and also I have a very in-depth wiki about it
+
+00:16:02.560 --> 00:16:06.519
+with 11 pages, and talking about everything
+
+00:16:06.520 --> 00:16:08.079
+that happens here.
+
+00:16:08.080 --> 00:16:11.759
+A lot of what we discussed is in this section
+
+00:16:11.760 --> 00:16:12.919
+about literature notes.
+
+00:16:12.920 --> 00:16:17.199
+These documents go a lot more in-depth
+
+00:16:17.200 --> 00:16:22.799
+in how Zetteldesk works, and also how to use it,
+
+00:16:22.800 --> 00:16:27.719
+so if you're interested, feel free to read them,
+
+00:16:27.720 --> 00:16:30.239
+and if you have any problems,
+
+00:16:30.240 --> 00:16:31.839
+you can open an issue about it;
+
+00:16:31.840 --> 00:16:44.480
+I will be very active. Thank you.
diff --git a/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt
new file mode 100644
index 00000000..8391419c
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--answers.vtt
@@ -0,0 +1,1535 @@
+WEBVTT
+
+00:00:02.000 --> 00:00:02.000
+
+
+00:00:02.000 --> 00:00:05.780
+ All right. I think we're live. Thank you, Andrew, for the
+
+00:00:05.780 --> 00:00:06.480
+ great talk.
+
+00:00:06.480 --> 00:00:09.040
+ Folks, if you'd like to ask your questions, please post
+
+00:00:09.040 --> 00:00:11.280
+ them on the pad. And at some point
+
+00:00:11.280 --> 00:00:13.340
+ in like a minute or two, we'll also open this big blue
+
+00:00:13.340 --> 00:00:14.560
+ button room if you'd like to
+
+00:00:14.560 --> 00:00:17.480
+ join here directly and ask questions here. Take it away,
+
+00:00:17.480 --> 00:00:18.000
+ Andrew.
+
+00:00:18.000 --> 00:00:25.200
+ Yeah, thanks. So should I be reading the questions from the
+
+00:00:25.200 --> 00:00:26.880
+ pad? Yeah.
+
+00:00:26.880 --> 00:00:28.400
+ Yeah, that would be great.
+
+00:00:29.040 --> 00:00:34.760
+ OK, so I see there's a question about is this built into Em
+
+00:00:34.760 --> 00:00:37.440
+acs? I guess that refers to SQLite.
+
+00:00:37.440 --> 00:00:41.630
+ And is it possible to have multiple schemas, multiple
+
+00:00:41.630 --> 00:00:43.840
+ databases? Yes, you could do all that
+
+00:00:43.840 --> 00:00:48.270
+ with Emacs 29. SQLite is built in. You can open up multiple
+
+00:00:48.270 --> 00:00:50.000
+ databases simultaneously and do just
+
+00:00:50.000 --> 00:00:53.460
+ the normal things that you can do with databases. You can
+
+00:00:53.460 --> 00:00:54.640
+ create whatever tables you want.
+
+00:00:55.440 --> 00:01:00.720
+ You can create-- you can have transactions. So it's pretty
+
+00:01:00.720 --> 00:01:04.000
+ full featured. With SQLite,
+
+00:01:04.000 --> 00:01:08.270
+ there's also a notion of additions. You could kind of
+
+00:01:08.270 --> 00:01:10.880
+ compile new things into it. And I'm not
+
+00:01:10.880 --> 00:01:14.560
+ exactly sure to the extent that that is possible as well.
+
+00:01:14.560 --> 00:01:16.400
+ So it's like how full featured of a
+
+00:01:16.400 --> 00:01:19.540
+ SQLite is it? I'm not sure. But the basic stuff, you can
+
+00:01:19.540 --> 00:01:21.680
+ certainly do. And that basic stuff is
+
+00:01:21.680 --> 00:01:26.860
+ fantastic. Next question is, what about collaborative
+
+00:01:26.860 --> 00:01:29.920
+ editing with this? Can you
+
+00:01:29.920 --> 00:01:35.070
+ have multiple computers with multiple Emacs with org mode?
+
+00:01:35.070 --> 00:01:37.840
+ I think it sort of depends. Yes,
+
+00:01:37.840 --> 00:01:41.640
+ I mean, databases are fantastic for having multiple users
+
+00:01:41.640 --> 00:01:44.080
+ doing multiple things at the same time.
+
+00:01:44.080 --> 00:01:48.990
+ And they're really designed for this use case. So I would
+
+00:01:48.990 --> 00:01:51.760
+ say, yes, you could have multiple
+
+00:01:51.760 --> 00:01:56.810
+ editing of the database, multiple editing, whereas you see
+
+00:01:56.810 --> 00:02:04.160
+ some [AUDIO OUT] probably not the best
+
+00:02:04.160 --> 00:02:06.830
+ solution. I suspect it might be possible, but I wouldn't
+
+00:02:06.830 --> 00:02:08.720
+ want to try it. I think it's better for,
+
+00:02:08.720 --> 00:02:12.660
+ like, oh, you can have multiple processes, multiple users,
+
+00:02:12.660 --> 00:02:14.400
+ perhaps contributing to the
+
+00:02:14.400 --> 00:02:17.610
+ same database. And you're growing the database, but not
+
+00:02:17.610 --> 00:02:20.080
+ such tight synchronous interactivity that
+
+00:02:20.080 --> 00:02:24.520
+ I think you might be imagining here. What about using this
+
+00:02:24.520 --> 00:02:26.880
+ on multiple computers? How do you
+
+00:02:26.880 --> 00:02:31.140
+ synchronize your data? I don't know. I need to figure that
+
+00:02:31.140 --> 00:02:33.040
+ out. I think there's a-- like,
+
+00:02:33.040 --> 00:02:36.470
+ yes, you can synchronize your database in the same [AUDIO
+
+00:02:36.470 --> 00:02:38.320
+ OUT] Emacs doesn't have any great
+
+00:02:38.320 --> 00:02:43.000
+ solutions for this. That is, like, when-- let's say I want
+
+00:02:43.000 --> 00:02:45.680
+ to synchronize the things I'm editing
+
+00:02:45.680 --> 00:02:49.280
+ on Emacs with my phone. There's all sorts of various
+
+00:02:49.280 --> 00:02:52.320
+ solutions. You could use Dropbox, Google
+
+00:02:52.320 --> 00:02:56.930
+ Drive, these kinds of things. The database makes that a
+
+00:02:56.930 --> 00:02:59.600
+ little bit harder in the sense that it's
+
+00:02:59.600 --> 00:03:04.400
+ one giant database. I suspect there are interesting ways to
+
+00:03:04.400 --> 00:03:06.560
+ do this, but I haven't explored this area
+
+00:03:06.560 --> 00:03:09.180
+ yet. I think it's a great question, though, and I would
+
+00:03:09.180 --> 00:03:10.800
+ like to investigate this further.
+
+00:03:10.800 --> 00:03:16.640
+ Are you planning to further-- this is a new other question.
+
+00:03:16.640 --> 00:03:18.720
+ Are you planning to further develop EKG?
+
+00:03:18.720 --> 00:03:22.330
+ It's highly [AUDIO OUT] me, and I do prefer SQLite over
+
+00:03:22.330 --> 00:03:23.920
+ Text. Thank you for buying into
+
+00:03:25.200 --> 00:03:29.280
+ the vision. I really like to hear that. Yeah, I am
+
+00:03:29.280 --> 00:03:32.080
+ personally using EKG. I am developing it.
+
+00:03:32.080 --> 00:03:36.940
+ I don't think it's ready for general use yet. I'd like to
+
+00:03:36.940 --> 00:03:39.680
+ get it to a state where it is ready
+
+00:03:39.680 --> 00:03:43.410
+ for general use probably by the end of the month. I think I
+
+00:03:43.410 --> 00:03:45.600
+'ll have a lot of time. There's a pretty
+
+00:03:45.600 --> 00:03:50.500
+ slow month. So that would be really nice. I've just added a
+
+00:03:50.500 --> 00:03:52.160
+ bunch of stuff to it.
+
+00:03:53.360 --> 00:03:55.970
+ I'm exploring. I think the difficult thing is not
+
+00:03:55.970 --> 00:03:58.000
+ necessarily to make it production,
+
+00:03:58.000 --> 00:04:01.800
+ like to make it stable and everything like that and to do
+
+00:04:01.800 --> 00:04:04.320
+ all the developer things that you want
+
+00:04:04.320 --> 00:04:09.380
+ to see in the state of the art era, but really, it's a
+
+00:04:09.380 --> 00:04:12.240
+ different model of how to have notes.
+
+00:04:12.240 --> 00:04:16.860
+ I'm still thinking about some of these fundamental concepts
+
+00:04:16.860 --> 00:04:18.080
+. It took me a long
+
+00:04:18.080 --> 00:04:22.030
+ time to iterate on various designs before I came up with EK
+
+00:04:22.030 --> 00:04:24.240
+G, which I think is [AUDIO OUT]
+
+00:04:24.240 --> 00:04:27.200
+ and so we're going to really see how this goes. But yes,
+
+00:04:27.200 --> 00:04:29.920
+ look for it soon. I'll probably announce it
+
+00:04:29.920 --> 00:04:39.410
+ and maybe on email. And then I will make it available
+
+00:04:39.410 --> 00:04:40.960
+ probably maybe on
+
+00:04:42.000 --> 00:04:46.780
+ new alpha is what I would like to do. Is it possible to
+
+00:04:46.780 --> 00:04:47.760
+ combine the
+
+00:04:47.760 --> 00:04:51.610
+ triples database with some custom tables in the same SQLite
+
+00:04:51.610 --> 00:04:56.240
+ file? Yes. I'm sorry. Let me continue
+
+00:04:56.240 --> 00:04:59.670
+ reading. You need to build a log table next to the triples
+
+00:04:59.670 --> 00:05:02.080
+ table or a quick query of event data.
+
+00:05:02.080 --> 00:05:04.270
+ Yeah, you certainly could do that. And I've been thinking
+
+00:05:04.270 --> 00:05:04.720
+ of adding,
+
+00:05:05.520 --> 00:05:09.210
+ like, just having a record of changes might be an
+
+00:05:09.210 --> 00:05:12.720
+ interesting thing. But yeah, it's just one table
+
+00:05:12.720 --> 00:05:17.840
+ and you really could use this one table called triples, the
+
+00:05:17.840 --> 00:05:22.000
+ triples table, in any other database
+
+00:05:22.000 --> 00:05:24.230
+ or with any other database. It's kind of designed to be its
+
+00:05:24.230 --> 00:05:26.080
+ own database though. But yeah, you could
+
+00:05:26.080 --> 00:05:28.500
+ certainly add things to the side and I can imagine people
+
+00:05:28.500 --> 00:05:29.840
+ writing extensions that do
+
+00:05:30.560 --> 00:05:34.000
+ add some tables to the side to do whatever. It's just that
+
+00:05:34.000 --> 00:05:37.680
+ I think you want to be careful because
+
+00:05:37.680 --> 00:05:42.660
+ that once you start doing that, you might want to, you don
+
+00:05:42.660 --> 00:05:45.040
+'t want to kind of duplicate information or
+
+00:05:45.040 --> 00:05:47.490
+ start having things go out of sync. It's kind of nice just
+
+00:05:47.490 --> 00:05:49.600
+ to have one kind of data. But I think
+
+00:05:49.600 --> 00:05:52.090
+ in certain circumstances, like the kind you're thinking
+
+00:05:52.090 --> 00:05:54.320
+ about, it'd be appropriate. Yeah, so
+
+00:05:54.320 --> 00:06:00.010
+ seems like a good idea. And then I see this final question
+
+00:06:00.010 --> 00:06:02.800
+ here, final for now. What are your
+
+00:06:02.800 --> 00:06:05.270
+ thoughts on adding a timestamp attribute to triple so that
+
+00:06:05.270 --> 00:06:07.280
+ the database becomes append-only and by
+
+00:06:07.280 --> 00:06:10.570
+ default you return the latest fact for a subject-object
+
+00:06:10.570 --> 00:06:13.360
+ pair? Oh, really interesting question.
+
+00:06:13.360 --> 00:06:19.560
+ Let's just say I haven't thought of that and I'll have to
+
+00:06:19.560 --> 00:06:21.680
+ think about it. I don't think,
+
+00:06:21.680 --> 00:06:26.110
+ I haven't seen other triples databases do this. I'd be
+
+00:06:26.110 --> 00:06:28.000
+ interested in what you thought
+
+00:06:28.000 --> 00:06:33.610
+ would be some of the, what you thought might be some of the
+
+00:06:33.610 --> 00:06:34.960
+ interesting
+
+00:06:34.960 --> 00:06:39.440
+ things that come out of this. Yes, you can maybe go back in
+
+00:06:39.440 --> 00:06:41.760
+ time, which is nice,
+
+00:06:41.760 --> 00:06:45.620
+ but then it seems hard to do things like deletes. I guess
+
+00:06:45.620 --> 00:06:48.000
+ you could have tombstones or something
+
+00:06:48.000 --> 00:06:51.110
+ like that, but it becomes a little bit more complicated.
+
+00:06:51.110 --> 00:06:52.880
+ And also just one thing is like,
+
+00:06:52.880 --> 00:06:55.390
+ these kind of databases, I didn't really talk about this in
+
+00:06:55.390 --> 00:06:57.120
+ the talk, but they take up a little
+
+00:06:57.120 --> 00:06:59.870
+ bit of room and I'm a little bit reluctant to have them
+
+00:06:59.870 --> 00:07:01.760
+ even more kind of heavyweight.
+
+00:07:01.760 --> 00:07:05.380
+ On the other hand, perhaps this would go well with the
+
+00:07:05.380 --> 00:07:07.680
+ question about synchronization. If you
+
+00:07:07.680 --> 00:07:11.840
+ were to do as you suggest and have timestamped triples,
+
+00:07:11.840 --> 00:07:14.080
+ synchronization actually becomes pretty
+
+00:07:14.080 --> 00:07:18.110
+ easy. So definitely an interesting thought that I'll have
+
+00:07:18.110 --> 00:07:19.600
+ to think a little bit more about. I
+
+00:07:19.600 --> 00:07:23.970
+ would love to solve the synchronization problem. All right.
+
+00:07:23.970 --> 00:07:29.520
+ I don't see any other, oh yeah,
+
+00:07:29.520 --> 00:07:33.740
+ I don't see any other questions, but you can ask on this,
+
+00:07:33.740 --> 00:07:38.160
+ on the big blue button or type in any
+
+00:07:38.160 --> 00:07:42.730
+ other questions. Otherwise I think we might be done. Cool.
+
+00:07:42.730 --> 00:07:45.280
+ And I will add that. I think we still
+
+00:07:45.280 --> 00:07:48.590
+ have about like, I guess, 15 minutes or so of live Q&A talk
+
+00:07:48.590 --> 00:07:52.320
+ for this talk on stream. If there are no
+
+00:07:52.320 --> 00:07:54.790
+ questions, you're welcome to cut it short, but otherwise we
+
+00:07:54.790 --> 00:07:56.320
+ have plenty of time. So yeah, if
+
+00:07:56.320 --> 00:07:59.910
+ people want to get more questions in, please do. I'm just
+
+00:07:59.910 --> 00:08:01.680
+ going to sit back and wait for the
+
+00:08:01.680 --> 00:08:06.000
+ questions to roll in then. Sounds good. Thank you.
+
+00:08:06.000 --> 00:08:35.920
+ All right. I see another question pop up.
+
+00:08:37.040 --> 00:08:37.040
+
+
+00:08:37.040 --> 00:08:41.400
+ With EKG, what about views like org-roam-node-mindmap-views
+
+00:08:41.400 --> 00:08:44.080
+? Yeah. I personally have
+
+00:08:44.080 --> 00:08:47.280
+ not found those views to be super helpful, but I know
+
+00:08:47.280 --> 00:08:49.680
+ people like them a lot. I don't see any
+
+00:08:49.680 --> 00:08:52.800
+ reason why you couldn't do this. It just would be a
+
+00:08:52.800 --> 00:08:56.000
+ slightly different implementation. Like this
+
+00:08:56.000 --> 00:09:02.940
+ stuff forms a graph. You can do whatever you, you know, you
+
+00:09:02.940 --> 00:09:05.920
+ could easily transform it like that same
+
+00:09:05.920 --> 00:09:09.560
+ org-roam UI. You just have to have like another sort of
+
+00:09:09.560 --> 00:09:12.160
+ translation layer basically to kind of
+
+00:09:12.160 --> 00:09:16.450
+ like figure out how to deal with the stuff in EKG or really
+
+00:09:16.450 --> 00:09:19.520
+ anything with triples. Like fundamentally
+
+00:09:19.520 --> 00:09:23.240
+ it's a graph database, so it lends itself naturally to
+
+00:09:23.240 --> 00:09:25.680
+ things that you're going to be doing,
+
+00:09:25.680 --> 00:09:30.080
+ that anything you're going to be doing with the triples
+
+00:09:30.080 --> 00:09:30.800
+ library.
+
+00:09:32.400 --> 00:09:32.400
+
+
+00:09:32.400 --> 00:09:52.480
+ [silence]
+
+00:09:52.480 --> 00:09:46.220
+ I see another question. Can ordinary Lisp data types, Lisp
+
+00:09:46.220 --> 00:09:59.440
+ symbols, etc. be stored in the
+
+00:09:59.440 --> 00:10:04.760
+ database? Yes, they can. In fact, it's primarily like if
+
+00:10:04.760 --> 00:10:07.120
+ you don't specify anything, it kind of
+
+00:10:07.120 --> 00:10:10.900
+ defaults to a list. That's sort of, I'm not exactly sure
+
+00:10:10.900 --> 00:10:13.520
+ that's the right design choice, but that's
+
+00:10:13.520 --> 00:10:19.230
+ kind of, it seems like a lot of the times it, this kind of
+
+00:10:19.230 --> 00:10:24.000
+ makes sense. Like what if I just added
+
+00:10:24.000 --> 00:10:27.000
+ like a title, I think, if I remember. I did add a title,
+
+00:10:27.000 --> 00:10:29.360
+ but I'm trying to remember. If I just added
+
+00:10:29.360 --> 00:10:33.770
+ the notion of like having a title to EKG and I believe that
+
+00:10:33.770 --> 00:10:36.240
+'s a list. Because you think about it,
+
+00:10:36.240 --> 00:10:39.160
+ you could maybe have alternate titles or multiple titles.
+
+00:10:39.160 --> 00:10:40.880
+ So these are ordered lists and so it kind
+
+00:10:40.880 --> 00:10:44.380
+ of stores it. So basically what happens is you store in the
+
+00:10:44.380 --> 00:10:46.560
+ list of like, but each list item is
+
+00:10:46.560 --> 00:10:49.910
+ a separate row in the table and it has, we call them tri
+
+00:10:49.910 --> 00:10:52.880
+ples, but there's actually one more column
+
+00:10:52.880 --> 00:10:54.720
+ that I don't talk about a lot because it just confuses the
+
+00:10:54.720 --> 00:10:56.160
+ story. But in this case it's relevant
+
+00:10:56.160 --> 00:10:59.040
+ because there you just say what the index is of the item
+
+00:10:59.040 --> 00:11:01.120
+ that you're doing it. So like you'd be
+
+00:11:01.120 --> 00:11:09.150
+ subject and then the predicate would be title in a sense.
+
+00:11:09.150 --> 00:11:12.400
+ And then title one and then like,
+
+00:11:12.400 --> 00:11:15.860
+ okay, that's index one on the fourth column. And then same
+
+00:11:15.860 --> 00:11:17.200
+ thing with the other items.
+
+00:11:17.840 --> 00:11:24.090
+ You can store symbols, SQLite and Emac SQL allow you to
+
+00:11:24.090 --> 00:11:27.920
+ sort of kind of, well, Emac SQL kind of
+
+00:11:27.920 --> 00:11:31.130
+ naturally lets you store lots of different things. And SQL
+
+00:11:31.130 --> 00:11:33.840
+ite, I kind of had to do something that
+
+00:11:33.840 --> 00:11:39.790
+ was very similar to Emac SQL. Emac SQL, in SQL, you have to
+
+00:11:39.790 --> 00:11:43.120
+ just, in your database, it basically
+
+00:11:43.120 --> 00:11:47.000
+ has to be string. Like almost everything besides the predic
+
+00:11:47.000 --> 00:11:49.120
+ates, like the object has to be a string
+
+00:11:49.120 --> 00:11:52.250
+ because it could really be anything. And the subject has to
+
+00:11:52.250 --> 00:11:53.840
+ be a string because it could be
+
+00:11:53.840 --> 00:12:00.490
+ anything. And because of that, we kind of have to make sure
+
+00:12:00.490 --> 00:12:04.080
+ that we kind of have to just store
+
+00:12:04.080 --> 00:12:06.840
+ things in a certain way. Like symbols are just strings and
+
+00:12:06.840 --> 00:12:10.720
+ lists. You could even have a list,
+
+00:12:12.640 --> 00:12:17.810
+ you could have really any list expression as a subject,
+
+00:12:17.810 --> 00:12:21.600
+ right? But it gets just written to a
+
+00:12:21.600 --> 00:12:27.720
+ string and then it gets, when it gets read, it basically,
+
+00:12:27.720 --> 00:12:30.960
+ if it's just a string, it gets read
+
+00:12:30.960 --> 00:12:36.370
+ basically as a list symbol or expression. And if it's a
+
+00:12:36.370 --> 00:12:39.840
+ string, it's a string with a string inside,
+
+00:12:39.840 --> 00:12:44.130
+ that is like the string actually has quotes on either end.
+
+00:12:44.130 --> 00:12:46.000
+ Then we say it's actually a string.
+
+00:12:46.000 --> 00:12:48.770
+ That's how kind of the internal implementation works. And
+
+00:12:48.770 --> 00:12:50.320
+ that's what Emac SQL does as well.
+
+00:12:50.320 --> 00:12:55.040
+ For those who are not familiar, Emac SQL is like this other
+
+00:12:55.040 --> 00:12:58.560
+ way to kind of interact with SQL in
+
+00:12:58.560 --> 00:13:02.210
+ your databases and it works well with SQLite and allows you
+
+00:13:02.210 --> 00:13:04.400
+ to do things like store numbers and
+
+00:13:05.600 --> 00:13:08.960
+ lists as well. And it does this exact same thing. So we try
+
+00:13:08.960 --> 00:13:10.320
+ to keep compatibility.
+
+00:13:10.320 --> 00:13:18.910
+ So you could start a database in Emacs 28 using Emacs SQL
+
+00:13:18.910 --> 00:13:23.440
+ and then you could read it with Emacs 29
+
+00:13:23.440 --> 00:13:27.430
+ using the built in SQLite. That's the hope. I mean, I have
+
+00:13:27.430 --> 00:13:28.720
+ tests, but I don't think anyone
+
+00:13:28.720 --> 00:13:35.050
+ has actually tried to do that exact thing yet. Let's see.
+
+00:13:35.050 --> 00:13:39.040
+ Are there any other new questions?
+
+00:13:39.040 --> 00:13:44.240
+ Oh, there are some. Beyond note taking, what kind of
+
+00:13:44.240 --> 00:13:45.360
+ packages do you
+
+00:13:45.360 --> 00:13:49.680
+ think would benefit from a triple library? I think,
+
+00:13:49.680 --> 00:13:53.830
+ I mean, I think it's generally just an easy way to store
+
+00:13:53.830 --> 00:13:54.880
+ things. So
+
+00:13:56.800 --> 00:14:03.200
+ anything in which you, think of packages that have to store
+
+00:14:03.200 --> 00:14:03.440
+ like
+
+00:14:03.440 --> 00:14:09.440
+ list expressions on the side. Like for example, like BBDB,
+
+00:14:09.440 --> 00:14:11.200
+ if you've used that,
+
+00:14:11.200 --> 00:14:14.110
+ it's just a, it is a database. It's the big brother
+
+00:14:14.110 --> 00:14:17.200
+ database. It's not in a database because
+
+00:14:17.200 --> 00:14:19.890
+ it was written before. Like there was an easy way to use
+
+00:14:19.890 --> 00:14:22.480
+ databases in Emacs. Like that should,
+
+00:14:22.480 --> 00:14:24.640
+ that could definitely, like you don't need the triples
+
+00:14:24.640 --> 00:14:26.160
+ library, but you could easily do this
+
+00:14:26.160 --> 00:14:31.120
+ in the triples library. And I would kind of think triples,
+
+00:14:31.120 --> 00:14:33.120
+ you know, just takes care of a lot of
+
+00:14:33.120 --> 00:14:37.280
+ things and gives a little option over everything. So I mean
+
+00:14:37.280 --> 00:14:39.760
+, there's all sorts of things like,
+
+00:14:39.760 --> 00:14:42.210
+ as I, as I kind of demoed like bookmarks, like why are book
+
+00:14:42.210 --> 00:14:43.920
+marks not in the database? They should be.
+
+00:14:43.920 --> 00:14:48.150
+ So I think if you just look around and look at all these,
+
+00:14:48.150 --> 00:14:50.640
+ all these things as,
+
+00:14:51.280 --> 00:14:55.680
+ as just, just dumping, dumping list expressions to a file,
+
+00:14:55.680 --> 00:14:57.440
+ those probably
+
+00:14:57.440 --> 00:15:01.870
+ SQLite and, and, you know, maybe triples would be a useful
+
+00:15:01.870 --> 00:15:03.200
+ way to do that.
+
+00:15:03.200 --> 00:15:08.720
+ Are you, another question, are you trying to PIM? I think
+
+00:15:08.720 --> 00:15:11.120
+ that means personal information management
+
+00:15:11.120 --> 00:15:16.160
+ with EKG. And what information do you want to manage? I'm
+
+00:15:16.160 --> 00:15:17.120
+ kind of wondering
+
+00:15:18.720 --> 00:15:21.400
+ how I, what I want to do, but like, as I just said in the
+
+00:15:21.400 --> 00:15:23.440
+ previous question, like, I think
+
+00:15:23.440 --> 00:15:26.960
+ you should be storing everything. Yeah. Like libraries,
+
+00:15:26.960 --> 00:15:28.880
+ like, yeah, actually, yeah. BBBB,
+
+00:15:28.880 --> 00:15:32.180
+ you can store contacts and email addresses. And I would
+
+00:15:32.180 --> 00:15:34.320
+ like to, you know, why, if you're storing
+
+00:15:34.320 --> 00:15:37.110
+ that, then it's kind of natural, like, oh, well, you know,
+
+00:15:37.110 --> 00:15:38.880
+ sometimes I want to have a annotation.
+
+00:15:38.880 --> 00:15:41.380
+ I want to write something about this person and, you know,
+
+00:15:41.380 --> 00:15:44.000
+ maybe I want to have something and have,
+
+00:15:46.400 --> 00:15:48.930
+ you know, maybe I want to tag this person. Maybe I want to,
+
+00:15:48.930 --> 00:15:53.200
+ maybe I want to have notes that refer
+
+00:15:53.200 --> 00:15:55.700
+ to this person. So like, it all starts to look like one
+
+00:15:55.700 --> 00:15:57.280
+ giant database when I, when you kind
+
+00:15:57.280 --> 00:16:01.120
+ of think about it a lot, which is kind of why in a, if you
+
+00:16:01.120 --> 00:16:04.800
+ look at the develop, develop branch of
+
+00:16:04.800 --> 00:16:08.290
+ triples, I, I'm work, I think what's going to be in the
+
+00:16:08.290 --> 00:16:10.400
+ next version is, is going to be a
+
+00:16:10.400 --> 00:16:14.110
+ standardized place to, to have a database. That is, you can
+
+00:16:14.110 --> 00:16:17.360
+ just connect to a, to a, the standard
+
+00:16:17.360 --> 00:16:19.360
+ database and you don't have to worry about where the
+
+00:16:19.360 --> 00:16:21.280
+ database is. We'll keep track of that for you.
+
+00:16:21.280 --> 00:16:27.540
+ And, and then everything should be working very easily and
+
+00:16:27.540 --> 00:16:30.320
+ like allow this kind of collaborative
+
+00:16:30.320 --> 00:16:32.770
+ use of, of these things. So like, yeah, it could be a
+
+00:16:32.770 --> 00:16:34.720
+ personal information manager that has all
+
+00:16:34.720 --> 00:16:37.330
+ sorts of information because I think that's what people
+
+00:16:37.330 --> 00:16:39.440
+ tend to use Emacs for is that, you know,
+
+00:16:39.440 --> 00:16:43.610
+ I have my own notes, my own contacts, my own tasks, you
+
+00:16:43.610 --> 00:16:46.080
+ know, why aren't tasks in, tasks should
+
+00:16:46.080 --> 00:16:49.820
+ also perhaps be in, in, in the database. Like, yeah, it's
+
+00:16:49.820 --> 00:16:52.000
+ kind of, org mode is completely awesome,
+
+00:16:52.000 --> 00:16:56.110
+ like really incredible. And it's, it's nice to mix to do's
+
+00:16:56.110 --> 00:16:58.480
+ with things with text, but sometimes
+
+00:16:58.480 --> 00:17:01.850
+ maybe you just want to do's that are not with text and
+
+00:17:01.850 --> 00:17:04.160
+ maybe those could be also in the database.
+
+00:17:04.160 --> 00:17:06.050
+ I don't know. It's just things I, things I'm thinking about
+
+00:17:06.050 --> 00:17:07.200
+. I'm not sure how far I want to
+
+00:17:07.200 --> 00:17:12.160
+ take that. Another question. What about using other
+
+00:17:12.160 --> 00:17:16.000
+ database programs like Postgres, MonoDB?
+
+00:17:16.000 --> 00:17:27.550
+ You, so I think you could, yes, you could do that. I don't
+
+00:17:27.550 --> 00:17:29.920
+ see it's a, I don't know why you,
+
+00:17:29.920 --> 00:17:32.720
+ I don't know if there's any advantage to doing this. Like
+
+00:17:32.720 --> 00:17:35.280
+ SQLite is kind of nice because it is
+
+00:17:35.280 --> 00:17:38.490
+ light. It is kind of, it is built into Emacs and we don't
+
+00:17:38.490 --> 00:17:39.760
+ really need anything incredibly
+
+00:17:39.760 --> 00:17:42.210
+ sophisticated here. Just having a database is like such a
+
+00:17:42.210 --> 00:17:43.680
+ higher level of sophistication than
+
+00:17:43.680 --> 00:17:47.500
+ what we've been doing in Emacs are so far. Then you know, I
+
+00:17:47.500 --> 00:17:50.000
+ think the other stuff might be overkill,
+
+00:17:50.000 --> 00:17:52.800
+ but I see no reason why it wouldn't work. I just don't
+
+00:17:52.800 --> 00:17:54.640
+ really see if there's really any big
+
+00:17:54.640 --> 00:18:00.620
+ advantages. What is your preferred reference to underscan
+
+00:18:00.620 --> 00:18:04.960
+ triples graph DBs? To sort of think
+
+00:18:04.960 --> 00:18:07.330
+ about better schema design? Oh, that's a really awesome
+
+00:18:07.330 --> 00:18:12.480
+ question. And I would, I don't, I don't
+
+00:18:12.480 --> 00:18:15.570
+ think I can answer that immediately. I kind of know all
+
+00:18:15.570 --> 00:18:17.520
+ this stuff from talking to people
+
+00:18:17.520 --> 00:18:21.730
+ basically, instead of like reading things. And like in my
+
+00:18:21.730 --> 00:18:25.040
+ work, I use these triples. That is,
+
+00:18:25.040 --> 00:18:28.100
+ that's kind of like, you know, I kind of work on a
+
+00:18:28.100 --> 00:18:30.560
+ knowledge graph. So I just have a, from,
+
+00:18:30.560 --> 00:18:35.860
+ you know, working knowledge of how these things work. So,
+
+00:18:35.860 --> 00:18:38.400
+ but it is an awesome question that let
+
+00:18:38.400 --> 00:18:41.530
+ me, let me look into it after I kind of finished this and I
+
+00:18:41.530 --> 00:18:43.440
+'ll, I'll try to fill it in, in the,
+
+00:18:43.440 --> 00:18:47.210
+ in the either pad that is connected to this talk. So thank
+
+00:18:47.210 --> 00:18:49.200
+ you for that great question.
+
+00:18:49.200 --> 00:18:53.960
+ So another question, will it slow down with the growth of a
+
+00:18:53.960 --> 00:18:56.960
+ database? Yeah, I need to do
+
+00:18:56.960 --> 00:19:00.040
+ tests about this. Cause I'd like to see like how much, how
+
+00:19:00.040 --> 00:19:01.360
+ much the database blows up,
+
+00:19:01.360 --> 00:19:05.120
+ how much it slows down for sure. Triples is not the most
+
+00:19:05.120 --> 00:19:07.360
+ efficient way. It's not even close
+
+00:19:07.360 --> 00:19:10.650
+ to being a greatly efficient way to store data for doing
+
+00:19:10.650 --> 00:19:13.120
+ any arbitrary things. But what it is,
+
+00:19:13.120 --> 00:19:17.510
+ it you're trading off standardization, which is, so you get
+
+00:19:17.510 --> 00:19:19.600
+ standardization, but you lose,
+
+00:19:19.600 --> 00:19:24.880
+ you lose the power of getting things in one SQL expression.
+
+00:19:24.880 --> 00:19:26.480
+ So you often have to kind of like do
+
+00:19:26.480 --> 00:19:31.400
+ a bunch of round trips and that's slow. However, I I'm
+
+00:19:31.400 --> 00:19:36.320
+ using this now. I have a bunch of data
+
+00:19:36.320 --> 00:19:40.440
+ and you know, quite a bit. I've, I kind of poured it over
+
+00:19:40.440 --> 00:19:42.720
+ my old org Rome to, to EKG.
+
+00:19:42.720 --> 00:19:45.860
+ And you know, I've been accumulating stuff in our room for
+
+00:19:45.860 --> 00:19:47.920
+ like, you know, two years now,
+
+00:19:47.920 --> 00:19:52.510
+ and it's pretty big, but it's very fast, really just no, no
+
+00:19:52.510 --> 00:19:55.200
+ problems at all. So yes, I'm sure
+
+00:19:55.200 --> 00:20:00.750
+ that there is a, a size in which it's too big to be fast.
+
+00:20:00.750 --> 00:20:04.400
+ But I haven't hit it. And I suspect for
+
+00:20:04.400 --> 00:20:09.230
+ most ordinary uses of, of, of Emacs, I doubt other people
+
+00:20:09.230 --> 00:20:12.160
+ will hit it as well. I mean, it's kind of
+
+00:20:12.160 --> 00:20:14.380
+ similar to, you know, when people think about org Rome and
+
+00:20:14.380 --> 00:20:15.760
+ things like, well, you know, you're
+
+00:20:15.760 --> 00:20:17.980
+ storing everything in one database, like how many notes
+
+00:20:17.980 --> 00:20:19.520
+ could have possibly hold, like that's also
+
+00:20:19.520 --> 00:20:25.980
+ going to get slow. Right. So yeah, it's, it's I think these
+
+00:20:25.980 --> 00:20:29.760
+ limits exist, but people tend not to
+
+00:20:29.760 --> 00:20:32.480
+ hit them and it's like, yes, this is going to get slow, but
+
+00:20:32.480 --> 00:20:34.320
+ it'll certainly do better. I think that
+
+00:20:34.320 --> 00:20:38.850
+ files in the file system. What are the, here's another
+
+00:20:38.850 --> 00:20:41.920
+ question. What are your thoughts on
+
+00:20:41.920 --> 00:20:47.130
+ allowing for a true graph DB backend? Whatever the current
+
+00:20:47.130 --> 00:20:50.480
+ best free software alternative to Neo4j
+
+00:20:50.480 --> 00:20:54.710
+ is, I guess. Okay. Great question. I've actually, yeah, I
+
+00:20:54.710 --> 00:20:57.360
+ actually used graph databases and several
+
+00:20:57.360 --> 00:21:00.580
+ companies I used to work for and you know, but we always
+
+00:21:00.580 --> 00:21:03.040
+ ended up switching to SQL. I like it's,
+
+00:21:03.040 --> 00:21:08.000
+ it's I can't, it's just at least for serious applications,
+
+00:21:08.000 --> 00:21:10.080
+ they tended to be slow and
+
+00:21:10.880 --> 00:21:14.310
+ lend themselves to a use that was not, that was very iter
+
+00:21:14.310 --> 00:21:16.480
+ative and not very well thought out.
+
+00:21:16.480 --> 00:21:23.880
+ So however, I don't think it's as I said, with the last
+
+00:21:23.880 --> 00:21:28.720
+ question for the way people want to,
+
+00:21:28.720 --> 00:21:31.090
+ you know, the kind of data I think Emacs users will want, I
+
+00:21:31.090 --> 00:21:32.480
+ think a graph database would work
+
+00:21:32.480 --> 00:21:36.610
+ quite well. I don't know if there would be like, what are
+
+00:21:36.610 --> 00:21:38.720
+ the advantages over triples
+
+00:21:38.720 --> 00:21:41.700
+ aside from sort of just a more, you don't have to kind of
+
+00:21:41.700 --> 00:21:43.440
+ even deal with the SQL layer, but like,
+
+00:21:43.440 --> 00:21:46.040
+ I'm kind of, I'm kind of building, you know, with triples,
+
+00:21:46.040 --> 00:21:47.760
+ we're sort of like, don't even worry about
+
+00:21:47.760 --> 00:21:50.220
+ what the layer is, right? It's just, you don't even have to
+
+00:21:50.220 --> 00:21:51.920
+ worry about SQL if you're just using
+
+00:21:51.920 --> 00:21:57.040
+ kind of the normal functionality. So you can yeah. So, you
+
+00:21:57.040 --> 00:22:00.160
+ know, maybe there are interesting
+
+00:22:00.160 --> 00:22:02.670
+ implications for using a graph database, but I can't really
+
+00:22:02.670 --> 00:22:03.680
+ think of any right now.
+
+00:22:03.680 --> 00:22:09.910
+ It's a good question though. Thank you. - And I'll quickly
+
+00:22:09.910 --> 00:22:10.880
+ add that we have about,
+
+00:22:10.880 --> 00:22:14.850
+ I think two more minutes ish on this live stream. And then
+
+00:22:14.850 --> 00:22:17.120
+ folks are welcome to either join here for
+
+00:22:17.120 --> 00:22:19.560
+ continuing the Q and A or keep posting questions on the pad
+
+00:22:19.560 --> 00:22:21.040
+ and you can continue here in this room
+
+00:22:21.040 --> 00:22:24.000
+ after the stream moves on. - Okay. In that case, I'll,
+
+00:22:24.000 --> 00:22:28.320
+ I will stick around until I don't get any more questions
+
+00:22:28.320 --> 00:22:30.080
+ for a few minutes, then I'll probably
+
+00:22:31.200 --> 00:22:33.440
+ log off. - Sounds great. Thank you.
+
+00:22:33.440 --> 00:22:35.440
+ - Yeah.
+
+00:22:58.960 --> 00:23:02.640
+ - I'm hungry. Did I get writing and recording this? So I
+
+00:23:02.640 --> 00:23:06.560
+ actually did a month ago. So like,
+
+00:23:06.560 --> 00:23:10.530
+ I don't even, I hardly even remember what it was, what that
+
+00:23:10.530 --> 00:23:12.160
+ time was like, but yes, it's,
+
+00:23:12.160 --> 00:23:14.480
+ it took a long time. These things, you know, these
+
+00:23:14.480 --> 00:23:16.480
+ recordings are a little bit challenging. And in
+
+00:23:16.480 --> 00:23:18.780
+ fact, I only kind of screwed up in several instances of the
+
+00:23:18.780 --> 00:23:20.240
+ recording. And like, I just,
+
+00:23:20.240 --> 00:23:22.240
+ I just don't have energy to kind of keep redoing. It's like
+
+00:23:22.240 --> 00:23:23.760
+, it's a long recording. It's also,
+
+00:23:23.760 --> 00:23:26.000
+ I think I chopped it up into three bits. I'm not sure if it
+
+00:23:26.000 --> 00:23:27.600
+ was that, is that obvious, but like,
+
+00:23:27.600 --> 00:23:31.860
+ I guess, notes for people doing future sessions, it's like,
+
+00:23:31.860 --> 00:23:35.680
+ make sure you have natural pauses that
+
+00:23:35.680 --> 00:23:39.860
+ you can sort of just like record a segment because
+
+00:23:39.860 --> 00:23:42.880
+ something would inevitably go wrong. And then like,
+
+00:23:42.880 --> 00:23:45.200
+ if you're trying to repeat a 20 minute talk, it just takes
+
+00:23:45.200 --> 00:23:48.720
+ forever. Yes. Oh yeah. The recipes.
+
+00:23:48.720 --> 00:23:54.230
+ That's right. Yeah. I, well, yes, I'm glad you enjoyed the
+
+00:23:54.230 --> 00:23:56.480
+ recipe. This is great. You put the
+
+00:23:56.480 --> 00:23:59.800
+ recipes in there. Like one thing that I think is, is useful
+
+00:23:59.800 --> 00:24:01.840
+ for, you know, regardless of what
+
+00:24:01.840 --> 00:24:06.110
+ thing you're using in org-roam or EKG or whatever, you know
+
+00:24:06.110 --> 00:24:08.240
+, when you're making a recipe,
+
+00:24:08.240 --> 00:24:11.230
+ you know, record in your daily diary, like, you know, when
+
+00:24:11.230 --> 00:24:12.800
+ you, what you did it, if it worked,
+
+00:24:12.800 --> 00:24:16.160
+ like what, what, you know, what adjustments you had to make
+
+00:24:16.160 --> 00:24:17.760
+, how it turned out, how it could be
+
+00:24:17.760 --> 00:24:21.320
+ better. Then like, if it's linked to the recipe, then you
+
+00:24:21.320 --> 00:24:23.040
+ have a kind of a record of like, oh,
+
+00:24:23.040 --> 00:24:25.720
+ these are, you know, not just the recipe, but like your
+
+00:24:25.720 --> 00:24:27.840
+ experiences making the recipe. I think
+
+00:24:27.840 --> 00:24:32.140
+ it's really powerful because then you can see how, you know
+
+00:24:32.140 --> 00:24:34.480
+, you can kind of refine, refine and
+
+00:24:34.480 --> 00:24:37.030
+ refine. It's really hard to do this in other ways. Like if
+
+00:24:37.030 --> 00:24:38.640
+ just, you're just using your memory,
+
+00:24:38.640 --> 00:24:40.730
+ you're, you're kind of like, well, it's, I can't remember
+
+00:24:40.730 --> 00:24:42.000
+ what I did the last time I made this
+
+00:24:42.000 --> 00:24:45.940
+ recipe, but like, you know, it seems a little bit extreme,
+
+00:24:45.940 --> 00:24:48.240
+ but I think it's quite useful to use
+
+00:24:48.240 --> 00:25:01.720
+ these note-taking applications for this use case. Okay. I
+
+00:25:01.720 --> 00:25:03.440
+ think the stream has moved on, but again,
+
+00:25:03.440 --> 00:25:05.620
+ you're all welcome to stay here and continue to Q&A as long
+
+00:25:05.620 --> 00:25:06.720
+ as there are any questions.
+
+00:25:06.720 --> 00:25:13.440
+ Thank you for your moderation.
+
+00:25:15.120 --> 00:25:19.920
+ Cheers. Happy to. Thanks for the great talk.
+
+00:25:21.200 --> 00:25:21.200
+
+
+00:25:21.200 --> 00:25:23.200
+ [end of transcript]
+
+00:25:46.080 --> 00:25:49.120
+ While I see if there's any more questions, I'm going to
+
+00:25:49.120 --> 00:25:50.320
+ fill in, I think not, not all
+
+00:25:50.320 --> 00:25:52.710
+ the replies are filled in. So I'm going to start filling in
+
+00:25:52.710 --> 00:25:53.200
+ this, you know,
+
+00:25:53.200 --> 00:25:56.240
+ the pad that's associated with this.
+
+00:25:56.400 --> 00:25:56.400
+
+
+00:25:56.400 --> 00:25:58.400
+ [end of transcript]
+
+00:26:00.160 --> 00:26:00.160
+
+
+00:26:00.160 --> 00:26:00.560
+ Okay.
+
+00:26:02.560 --> 00:26:02.560
+
+
+00:26:02.560 --> 00:26:04.560
+ [end of transcript]
+
+00:26:04.560 --> 00:26:14.560
+ Okay.
+
+00:26:16.560 --> 00:26:16.560
+
+
+00:26:16.560 --> 00:26:18.560
+ [end of transcript]
+
+00:26:20.560 --> 00:26:20.560
+
+
+00:26:20.560 --> 00:26:20.560
+ Okay.
+
+00:26:22.560 --> 00:26:22.560
+
+
+00:26:22.560 --> 00:26:22.560
+ Okay.
+
+00:26:24.560 --> 00:26:24.560
+
+
+00:26:24.560 --> 00:26:24.560
+ Okay.
+
+00:26:26.560 --> 00:26:26.560
+
+
+00:26:26.560 --> 00:26:26.560
+ Okay.
+
+00:26:28.560 --> 00:26:28.560
+
+
+00:26:28.560 --> 00:26:28.560
+ Okay.
+
+00:26:30.560 --> 00:26:30.560
+
+
+00:26:30.560 --> 00:26:30.560
+ Okay.
+
+00:26:32.560 --> 00:26:32.560
+
+
+00:26:32.560 --> 00:26:32.560
+ Okay.
+
+00:26:34.560 --> 00:26:34.560
+
+
+00:26:34.560 --> 00:26:34.560
+ Okay.
+
+00:26:36.560 --> 00:26:36.560
+
+
+00:26:36.560 --> 00:26:36.560
+ Okay.
+
+00:26:36.560 --> 00:26:46.560
+ Okay.
+
+00:26:46.560 --> 00:26:56.560
+ Okay.
+
+00:26:56.560 --> 00:27:06.560
+ Okay.
+
+00:27:06.560 --> 00:27:16.560
+ Okay.
+
+00:27:16.560 --> 00:27:26.560
+ Okay.
+
+00:27:26.560 --> 00:27:36.560
+ Okay.
+
+00:27:36.560 --> 00:27:46.560
+ Okay.
+
+00:27:46.560 --> 00:27:56.560
+ Okay.
+
+00:27:56.560 --> 00:28:06.560
+ Okay.
+
+00:28:06.560 --> 00:28:16.560
+ Okay.
+
+00:28:16.560 --> 00:28:26.560
+ Okay.
+
+00:28:26.560 --> 00:28:36.560
+ Okay.
+
+00:28:36.560 --> 00:28:46.560
+ Okay.
+
+00:28:46.560 --> 00:28:56.560
+ Okay.
+
+00:28:56.560 --> 00:29:06.560
+ Okay.
+
+00:29:06.560 --> 00:29:16.560
+ Okay.
+
+00:29:16.560 --> 00:29:26.560
+ Okay.
+
+00:29:26.560 --> 00:29:36.560
+ Okay.
+
+00:29:36.560 --> 00:29:46.560
+ Okay.
+
+00:29:46.560 --> 00:29:56.560
+ Okay.
+
+00:29:56.560 --> 00:30:06.560
+ Okay.
+
+00:30:06.560 --> 00:30:16.560
+ Okay.
+
+00:30:16.560 --> 00:30:26.560
+ Okay.
+
+00:30:26.560 --> 00:30:30.560
+ All right. I, there's no one here and I don't like any
+
+00:30:30.560 --> 00:30:35.360
+ other questions. So I am going to log out. Thank you
+
+00:30:35.360 --> 00:30:36.560
+ everyone for your questions.
+
+00:30:36.560 --> 00:30:38.560
+ [end of transcript]
+
+00:30:40.560 --> 00:30:40.560
+
+
diff --git a/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt
new file mode 100644
index 00000000..c5caa435
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main--chapters.vtt
@@ -0,0 +1,38 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:56.220
+Introduction
+
+00:00:56.220 --> 00:02:29.869
+Why SQLite
+
+00:02:29.870 --> 00:04:50.208
+The triples package
+
+00:04:50.209 --> 00:07:40.740
+Exercise: Emacs bookmarks
+
+00:07:40.740 --> 00:09:31.365
+Creating bookmarks
+
+00:09:31.366 --> 00:11:10.033
+Retrieving bookmarks
+
+00:11:10.034 --> 00:13:59.380
+Backlinks
+
+00:13:59.380 --> 00:15:57.007
+Extensible entities
+
+00:15:57.008 --> 00:18:12.771
+EKG package
+
+00:18:12.772 --> 00:19:43.780
+The code
+
+00:19:43.780 --> 00:20:52.146
+Renaming tags
+
+00:20:52.147 --> 00:21:17.660
+Conclusion
diff --git a/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt
new file mode 100644
index 00000000..4c3792aa
--- /dev/null
+++ b/2022/captions/emacsconf-2022-sqlite--using-sqlite-as-a-data-source-a-framework-and-an-example--andrew-hyatt--main.vtt
@@ -0,0 +1,1309 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:08.555
+Hello. I'm Andrew Hyatt. I've been working on Emacs,
+
+00:00:08.556 --> 00:00:10.539
+with Emacs, and to some extent
+
+00:00:10.540 --> 00:00:15.272
+on Emacs for a while. I've written the WebSockets library
+
+00:00:15.273 --> 00:00:20.045
+and Emacs calc tutorials. I've enjoyed use of
+
+00:00:20.046 --> 00:00:24.640
+many of everyone's incredible packages.
+
+00:00:24.640 --> 00:00:27.132
+So my thesis for this talk, why I'm giving this talk,
+
+00:00:27.133 --> 00:00:29.060
+is that I'm interested in SQLite.
+
+00:00:29.061 --> 00:00:34.953
+I think we should be exploring SQLite for applications
+
+00:00:34.954 --> 00:00:37.482
+in ways I think the community has shied away from.
+
+00:00:37.483 --> 00:00:41.950
+I'd like to introduce the triples package as a way,
+
+00:00:41.951 --> 00:00:47.664
+both easy and with interesting functionality,
+
+00:00:47.665 --> 00:00:49.153
+that will allow us to build extensible databases
+
+00:00:49.154 --> 00:00:52.582
+in a way that is, I think,
+
+00:00:52.583 --> 00:00:56.220
+a little bit unusual and perhaps compelling, I hope.
+
+00:00:56.220 --> 00:00:59.226
+So first of all, why SQLite?
+
+00:00:59.227 --> 00:01:06.080
+Why is this good? Well, SQLite is now built into Emacs.
+
+00:01:06.080 --> 00:01:12.216
+So you get a few things out of this when you use it for data.
+
+00:01:12.217 --> 00:01:14.580
+First of all, it's a database.
+
+00:01:14.580 --> 00:01:16.369
+It's extremely good for data, of course.
+
+00:01:16.370 --> 00:01:19.918
+There's a simplicity to data manipulation
+
+00:01:19.919 --> 00:01:22.027
+using a database, compared to data manipulation,
+
+00:01:22.028 --> 00:01:25.196
+that is, manipulating data in a text file.
+
+00:01:25.197 --> 00:01:31.033
+Text files are really not built for data.
+
+00:01:31.034 --> 00:01:33.140
+So when typically when you need to do this,
+
+00:01:33.140 --> 00:01:35.026
+like I know Org Mode is--
+
+00:01:35.027 --> 00:01:38.116
+which I'm a huge, huge Org Mode fan--
+
+00:01:38.117 --> 00:01:41.044
+it's all about sort of data in text.
+
+00:01:41.045 --> 00:01:45.375
+It does work, but you certainly would be
+
+00:01:45.376 --> 00:01:47.360
+hard pressed to make sweeping changes
+
+00:01:47.360 --> 00:01:51.953
+to your database that is represented in text.
+
+00:01:51.954 --> 00:01:53.060
+It's just not well suited for this sort of thing.
+
+00:01:53.061 --> 00:01:54.963
+It would take a long time,
+
+00:01:54.964 --> 00:02:00.220
+where the speed of SQL is incredibly impressive.
+
+00:02:00.220 --> 00:02:04.429
+I think certainly Emacs is not known
+
+00:02:04.430 --> 00:02:06.752
+for being extremely speedy.
+
+00:02:06.753 --> 00:02:11.905
+I think the overuse of text
+
+00:02:11.906 --> 00:02:14.613
+is part of this. Of course, text and using text,
+
+00:02:14.614 --> 00:02:18.467
+using files has awesome advantages as well.
+
+00:02:18.468 --> 00:02:20.510
+I'm really here to talk about
+
+00:02:20.511 --> 00:02:22.717
+the other side of the coin, right?
+
+00:02:22.718 --> 00:02:23.961
+Everyone can judge
+
+00:02:23.962 --> 00:02:24.645
+those advantages and disadvantages
+
+00:02:24.646 --> 00:02:25.416
+and make their own trade-offs,
+
+00:02:25.417 --> 00:02:26.020
+but I want to kind of
+
+00:02:26.021 --> 00:02:29.869
+make the pitch for SQLite.
+
+00:02:29.870 --> 00:02:32.860
+So let's talk about the triples package.
+
+00:02:32.860 --> 00:02:35.488
+The triples package is a package
+
+00:02:35.489 --> 00:02:40.419
+that is designed to give you a very generic schema.
+
+00:02:40.420 --> 00:02:42.005
+You don't have to do,
+
+00:02:42.006 --> 00:02:43.291
+for most of the common operations,
+
+00:02:43.292 --> 00:02:45.516
+you don't have to write SQL yourself.
+
+00:02:45.517 --> 00:02:47.924
+A lot of stuff is built in
+
+00:02:47.925 --> 00:02:51.035
+and is based on a very generic schema.
+
+00:02:51.036 --> 00:02:53.840
+That is, it's a single table.
+
+00:02:53.840 --> 00:02:55.229
+That table has, of course, fixed schema.
+
+00:02:55.230 --> 00:02:57.478
+It basically has three columns.
+
+00:02:57.479 --> 00:03:00.867
+It actually has four columns.
+
+00:03:00.868 --> 00:03:01.193
+In this talk, I'm not going to get into
+
+00:03:01.194 --> 00:03:04.123
+the fourth column and why, but it's useful.
+
+00:03:04.124 --> 00:03:07.710
+So the three columns are subject, predicate,
+
+00:03:07.711 --> 00:03:10.361
+and object. This is what it's related to
+
+00:03:10.362 --> 00:03:13.908
+what we call an RDF format.
+
+00:03:13.909 --> 00:03:17.139
+These things basically describe a link.
+
+00:03:17.140 --> 00:03:20.007
+The link is from the subject to the object.
+
+00:03:20.008 --> 00:03:23.955
+The link type is a predicate.
+
+00:03:23.956 --> 00:03:26.085
+That sounds overly theoretical,
+
+00:03:26.086 --> 00:03:28.032
+but the point is that you can describe
+
+00:03:28.033 --> 00:03:32.005
+a lot of things with this format.
+
+00:03:32.006 --> 00:03:33.329
+You probably describe everything with it.
+
+00:03:33.330 --> 00:03:39.226
+It's very simple because the schema is fixed.
+
+00:03:39.227 --> 00:03:42.773
+It's only this kind of data. That means
+
+00:03:42.774 --> 00:03:44.140
+for your application, you define a schema
+
+00:03:44.140 --> 00:03:47.326
+in subject, predicate, object format.
+
+00:03:47.327 --> 00:03:50.072
+That defines what data you can use,
+
+00:03:50.073 --> 00:03:56.069
+what types there are, what properties they have,
+
+00:03:56.070 --> 00:03:57.214
+how you can use the system,
+
+00:03:57.215 --> 00:04:01.006
+and what is legal to do. And this is stored as data.
+
+00:04:01.007 --> 00:04:03.890
+I think as Lisp people,
+
+00:04:03.891 --> 00:04:07.540
+I think we're all very onboard
+
+00:04:07.540 --> 00:04:13.912
+with the fact that you have a simple way
+
+00:04:13.913 --> 00:04:17.660
+to express everything, and you don't have these
+
+00:04:17.660 --> 00:04:18.924
+two systems. In this way,
+
+00:04:18.925 --> 00:04:20.871
+you don't have to have code as a system.
+
+00:04:20.872 --> 00:04:24.825
+Do you have to load code to use the triples package
+
+00:04:24.826 --> 00:04:27.916
+to make sure your schema is obeyed?
+
+00:04:27.917 --> 00:04:35.213
+No, it's all just built in to this database.
+
+00:04:35.214 --> 00:04:37.036
+I'll describe this. As I said,
+
+00:04:37.037 --> 00:04:39.860
+it's a little bit abstract right now,
+
+00:04:39.860 --> 00:04:42.048
+but it will become a lot clearer
+
+00:04:42.049 --> 00:04:46.778
+when we go through an example,
+
+00:04:46.779 --> 00:04:50.208
+which we're going to do now.
+
+00:04:50.209 --> 00:04:56.660
+As an exercise, let's create Emacs bookmarks,
+
+00:04:56.660 --> 00:04:57.345
+which basically are three things:
+
+00:04:57.346 --> 00:05:01.038
+a name, a file, and an annotation.
+
+00:05:01.039 --> 00:05:02.364
+I may be missing out on functionality.
+
+00:05:02.365 --> 00:05:04.772
+Of course, everything in Emacs,
+
+00:05:04.773 --> 00:05:05.140
+everything has lots and lots of functionality,
+
+00:05:05.140 --> 00:05:08.049
+but let's just start with this simple thing.
+
+00:05:08.050 --> 00:05:11.100
+First of all, we're going to open up a database.
+
+00:05:11.100 --> 00:05:12.103
+Pretty simple.
+
+00:05:12.104 --> 00:05:15.014
+I think there's nothing to explain there.
+
+00:05:15.015 --> 00:05:19.106
+But here on this line that I'm on right now,
+
+00:05:19.107 --> 00:05:21.432
+we are saying, okay, there's going to be
+
+00:05:21.433 --> 00:05:24.839
+a type called bookmark.
+
+00:05:24.840 --> 00:05:26.826
+It's going to have the following properties.
+
+00:05:26.827 --> 00:05:29.178
+First, a file, which is unique and a string.
+
+00:05:29.179 --> 00:05:31.764
+The second is an annotation,
+
+00:05:31.765 --> 00:05:34.317
+which is again unique and a string.
+
+00:05:34.318 --> 00:05:37.864
+Then we're going to have another type called named.
+
+00:05:37.865 --> 00:05:39.808
+First of all, why is it named as part of bookmark?
+
+00:05:39.809 --> 00:05:45.562
+As I'll get into, it's interesting
+
+00:05:45.563 --> 00:05:48.511
+when you start sharing this database
+
+00:05:48.512 --> 00:05:51.365
+with other things, not just bookmarks, but other types.
+
+00:05:51.366 --> 00:05:54.616
+Bookmarks are very similar to many other things
+
+00:05:54.617 --> 00:05:56.723
+that you might want to expand into.
+
+00:05:56.724 --> 00:05:57.086
+Those other things have names,
+
+00:05:57.087 --> 00:05:58.269
+but they're not bookmarks.
+
+00:05:58.270 --> 00:06:04.123
+It's nice to separate these concerns out
+
+00:06:04.124 --> 00:06:08.372
+and just have another type called named,
+
+00:06:08.373 --> 00:06:12.780
+which just basically has a name.
+
+00:06:12.780 --> 00:06:15.746
+We can execute this.
+
+00:06:15.747 --> 00:06:21.798
+It's not interesting to look at these.
+
+00:06:21.440 --> 00:06:25.907
+that is not all that useful for anything,
+
+00:06:21.799 --> 00:06:21.439
+It outputs something
+
+00:06:25.908 --> 00:06:28.014
+but that's okay. What's done is, actually,
+
+00:06:28.015 --> 00:06:32.262
+it's created a database
+
+00:06:32.263 --> 00:06:34.045
+and it's populated it with the schema.
+
+00:06:34.046 --> 00:06:41.478
+We can look at this.
+
+00:06:41.479 --> 00:06:43.602
+We won't go through all of this
+
+00:06:43.603 --> 00:06:44.188
+because it's a little bit too much
+
+00:06:44.189 --> 00:06:46.036
+for a short presentation like this,
+
+00:06:46.037 --> 00:06:48.185
+but you could see that there's something here
+
+00:06:48.186 --> 00:06:52.500
+that's like, oh, we have a subject bookmark.
+
+00:06:52.500 --> 00:06:56.031
+We have a property base/type.
+
+00:06:56.032 --> 00:06:58.878
+That just means that there's a property
+
+00:06:58.879 --> 00:07:00.562
+that's defined by the base.
+
+00:07:00.563 --> 00:07:02.248
+This means this is from the triples package itself.
+
+00:07:02.249 --> 00:07:08.940
+It's not some other package.
+
+00:07:08.940 --> 00:07:11.525
+Third is, what is the type of this object?
+
+00:07:11.526 --> 00:07:17.060
+It's a schema. This thing could be many types.
+
+00:07:17.060 --> 00:07:19.150
+As I said, if you have a--
+
+00:07:19.151 --> 00:07:20.235
+we haven't seen an example yet,
+
+00:07:20.236 --> 00:07:21.100
+but if you have a bookmark,
+
+00:07:21.100 --> 00:07:23.686
+it's going to have a name type
+
+00:07:23.687 --> 00:07:25.694
+and a bookmark type.
+
+00:07:25.695 --> 00:07:26.719
+Everything is multi-typed
+
+00:07:26.720 --> 00:07:28.146
+and that's kind of a feature
+
+00:07:28.147 --> 00:07:32.137
+of this kind of storage system.
+
+00:07:32.138 --> 00:07:33.140
+I'm not going to go through everything,
+
+00:07:33.140 --> 00:07:35.865
+but you can see it's all there in triples,
+
+00:07:35.866 --> 00:07:40.740
+the whole schema, everything we just did.
+
+00:07:40.740 --> 00:07:42.645
+Let's create a bookmark. Again,
+
+00:07:42.646 --> 00:07:46.997
+we're going to connect to our database
+
+00:07:46.998 --> 00:07:49.246
+and we're going to basically set
+
+00:07:49.247 --> 00:07:52.552
+an entire subject.
+
+00:07:52.553 --> 00:07:54.239
+The subject is, it's basically like an entity.
+
+00:07:54.240 --> 00:07:56.105
+We're going to define a whole entity
+
+00:07:56.106 --> 00:08:00.676
+or you could refer to it as an object.
+
+00:08:00.677 --> 00:08:03.909
+That's a perfectly fine way to look at it, I think.
+
+00:08:03.910 --> 00:08:04.356
+It's going to have some identifier.
+
+00:08:04.357 --> 00:08:06.723
+That identifier could be anything.
+
+00:08:06.724 --> 00:08:07.431
+It doesn't have to be a string.
+
+00:08:07.432 --> 00:08:09.260
+It could really be anything, but we're going
+
+00:08:09.260 --> 00:08:11.369
+to give it a string called emacs-init.
+
+00:08:11.370 --> 00:08:13.298
+It does not matter what this identifier is,
+
+00:08:13.299 --> 00:08:17.808
+at least for our purposes.
+
+00:08:17.809 --> 00:08:19.914
+It does matter when you're linking to it,
+
+00:08:19.915 --> 00:08:22.263
+but I think nothing that I'm about to show you.
+
+00:08:22.264 --> 00:08:25.830
+This could truly be anything
+
+00:08:25.831 --> 00:08:28.180
+because it has a separate name.
+
+00:08:28.180 --> 00:08:32.131
+I'm giving it a name here, which is init.
+
+00:08:32.133 --> 00:08:34.917
+I'm just specifying the named type here
+
+00:08:34.918 --> 00:08:38.047
+and I'm specifying the bookmark type here
+
+00:08:38.048 --> 00:08:43.219
+and its values. We're going to do that.
+
+00:08:43.220 --> 00:08:47.769
+Now, if we look, we see everything we saw before,
+
+00:08:47.770 --> 00:08:52.246
+but now we have subject emacs-init.
+
+00:08:52.247 --> 00:08:55.973
+It has a type and it's named.
+
+00:08:55.974 --> 00:08:57.220
+We also see the same thing two lines down.
+
+00:08:57.220 --> 00:08:58.264
+This type is also a bookmark,
+
+00:08:58.265 --> 00:09:02.819
+but the name is init in the named/name,
+
+00:09:02.820 --> 00:09:05.966
+which is like the type is name, named,
+
+00:09:05.967 --> 00:09:08.752
+and the property is name. It's init.
+
+00:09:08.753 --> 00:09:12.661
+As you can see, this is just
+
+00:09:12.662 --> 00:09:16.331
+how everything looks.
+
+00:09:16.332 --> 00:09:18.356
+It's pretty straightforward
+
+00:09:18.357 --> 00:09:19.318
+and you can retrieve it.
+
+00:09:19.319 --> 00:09:21.603
+Now, we're looking at the database,
+
+00:09:21.604 --> 00:09:22.689
+but you don't really have to
+
+00:09:22.690 --> 00:09:23.218
+look at the database for... In fact,
+
+00:09:23.219 --> 00:09:24.222
+I think we're done looking
+
+00:09:24.223 --> 00:09:25.105
+at the triples format,
+
+00:09:25.106 --> 00:09:29.718
+because I think it's very simple.
+
+00:09:29.719 --> 00:09:31.365
+You've already got the hang of it, I think.
+
+00:09:31.366 --> 00:09:33.069
+Let's retrieve that just to make sure, yes,
+
+00:09:33.070 --> 00:09:37.980
+we can retrieve it.
+
+00:09:37.981 --> 00:09:38.247
+We're going to retrieve it and say, okay,
+
+00:09:38.248 --> 00:09:43.286
+what do we get when we load the emacs-init subject?
+
+00:09:43.287 --> 00:09:48.697
+Well, we get a plist of all of its properties,
+
+00:09:48.698 --> 00:09:55.630
+which then you can use in your application.
+
+00:09:55.631 --> 00:09:57.455
+There's many more ways to retrieve
+
+00:09:57.456 --> 00:09:59.379
+and there's many more ways to save.
+
+00:09:59.380 --> 00:10:01.904
+In fact, I think the way I did it here
+
+00:10:01.905 --> 00:10:04.015
+with set subject is probably not
+
+00:10:04.016 --> 00:10:06.781
+the right way to do it most of the time.
+
+00:10:06.782 --> 00:10:08.127
+It's usually because it'll erase everything.
+
+00:10:08.128 --> 00:10:13.740
+It's only really to be used when
+
+00:10:13.740 --> 00:10:15.710
+you're sure you control all the data,
+
+00:10:15.711 --> 00:10:16.399
+but you're never sure because there could be
+
+00:10:16.400 --> 00:10:19.610
+other packages that are also using this database,
+
+00:10:19.611 --> 00:10:20.695
+they could have their own data.
+
+00:10:20.696 --> 00:10:21.342
+You don't want to erase
+
+00:10:21.343 --> 00:10:25.014
+all the other Emacs init subject data.
+
+00:10:25.015 --> 00:10:27.699
+In this case, we did because
+
+00:10:27.700 --> 00:10:30.810
+we are confident it was a new entity,
+
+00:10:30.811 --> 00:10:31.335
+but in most cases, the right thing to do is
+
+00:10:31.336 --> 00:10:34.289
+just set it by type. Just say,
+
+00:10:34.290 --> 00:10:36.676
+we're just going to set the bookmark type,
+
+00:10:36.677 --> 00:10:37.222
+which is... The properties are this,
+
+00:10:37.223 --> 00:10:38.104
+and then the name type
+
+00:10:38.105 --> 00:10:42.814
+and the properties are that.
+
+00:10:42.815 --> 00:10:44.900
+That's a way that you could do things.
+
+00:10:44.900 --> 00:10:48.526
+There's also many retrieval types.
+
+00:10:48.527 --> 00:10:53.755
+The retrieval types:
+
+00:10:53.756 --> 00:10:56.403
+you can retrieve by a number of different ways,
+
+00:10:56.404 --> 00:10:58.869
+which I'm not going to get into,
+
+00:10:58.870 --> 00:11:01.241
+but you can read about in either the source
+
+00:11:01.242 --> 00:11:10.033
+or the readme in the package.
+
+00:11:10.034 --> 00:11:14.539
+We have backlinks as well.
+
+00:11:14.540 --> 00:11:15.862
+Let me explain what backlinks are.
+
+00:11:15.863 --> 00:11:17.172
+There's another feature of the triples.
+
+00:11:17.173 --> 00:11:19.860
+As I mentioned, these things
+
+00:11:19.861 --> 00:11:21.849
+can be thought about as links,
+
+00:11:21.850 --> 00:11:23.797
+but what could be a link in one direction
+
+00:11:23.798 --> 00:11:25.804
+could also be a link in the other direction,
+
+00:11:25.805 --> 00:11:28.395
+and we basically get this for free.
+
+00:11:28.396 --> 00:11:33.807
+Here's an example where we are again
+
+00:11:33.808 --> 00:11:35.752
+connecting toward bookmark. Here we're going to
+
+00:11:35.753 --> 00:11:38.223
+add a new type called tagged.
+
+00:11:38.224 --> 00:11:41.613
+We're going to give everything in tags.
+
+00:11:41.614 --> 00:11:45.524
+Here we're saying, okay, there's a type called tagged
+
+00:11:45.525 --> 00:11:49.234
+and it has a property called tags.
+
+00:11:49.235 --> 00:11:52.060
+This is not unique, so it's a list basically.
+
+00:11:52.060 --> 00:11:54.326
+It's a list of string.
+
+00:11:54.327 --> 00:11:58.675
+There also is a type called tag.
+
+00:11:58.676 --> 00:12:01.402
+This is for things that are tags themselves.
+
+00:12:01.403 --> 00:12:06.127
+Then it has a type called numbers
+
+00:12:06.128 --> 00:12:18.003
+and it has what we call a virtual reversed property.
+
+00:12:18.004 --> 00:12:21.075
+It's virtual because it's not actually stored.
+
+00:12:21.076 --> 00:12:23.741
+We just compute it by reversing
+
+00:12:23.742 --> 00:12:24.306
+the subject and the object.
+
+00:12:24.307 --> 00:12:29.260
+This is on tagged tags. When we query this,
+
+00:12:29.260 --> 00:12:32.006
+we can just say, okay,
+
+00:12:32.007 --> 00:12:33.268
+what are all the subjects
+
+00:12:33.269 --> 00:12:38.859
+that have tagged tags of me, the tag?
+
+00:12:38.860 --> 00:12:39.365
+In fact, let me demonstrate that for you.
+
+00:12:39.366 --> 00:12:42.139
+We're going to set the type on emacs-init.
+
+00:12:42.140 --> 00:12:45.070
+We're going to add the "tagged" type.
+
+00:12:45.071 --> 00:12:47.017
+This is the alternate way of setting data
+
+00:12:47.018 --> 00:12:48.740
+that I mentioned.
+
+00:12:48.740 --> 00:12:49.924
+This won't erase anything else.
+
+00:12:49.925 --> 00:12:51.752
+We're just adding something here.
+
+00:12:51.753 --> 00:12:54.742
+We're adding this type "tagged"
+
+00:12:54.743 --> 00:12:59.953
+to our previous bookmark emacs-init.
+
+00:12:59.954 --> 00:13:01.058
+We're going to add emacs and config
+
+00:13:01.059 --> 00:13:06.866
+as the tags. We're going to then
+
+00:13:06.867 --> 00:13:11.095
+set emacs as a tag and config as a tag.
+
+00:13:11.096 --> 00:13:15.385
+That just lets us have this virtual property.
+
+00:13:15.386 --> 00:13:16.389
+You have to do something.
+
+00:13:16.390 --> 00:13:18.733
+You can't get it out of thin air.
+
+00:13:18.734 --> 00:13:23.426
+The design decision we've made is:
+
+00:13:23.427 --> 00:13:25.508
+you at least need to tag it
+
+00:13:25.509 --> 00:13:32.660
+before you get the free property.
+
+00:13:32.660 --> 00:13:35.631
+What you should see... Let's try it out.
+
+00:13:35.632 --> 00:13:36.037
+We got the subject config,
+
+00:13:36.038 --> 00:13:37.261
+which we've set no data on.
+
+00:13:37.262 --> 00:13:40.668
+You can tell we're not sending any data.
+
+00:13:40.669 --> 00:13:44.820
+If I get that subject, the result is that
+
+00:13:44.821 --> 00:13:46.068
+it says its members are emacs-init.
+
+00:13:46.069 --> 00:13:49.878
+That's what a virtual reverse property.
+
+00:13:49.879 --> 00:13:53.606
+As we tag more things, this just
+
+00:13:53.607 --> 00:13:55.151
+continues to work because it's just doing
+
+00:13:55.152 --> 00:13:59.380
+a SQL query here.
+
+00:13:59.380 --> 00:14:01.985
+Besides showing off the backlinks function,
+
+00:14:01.986 --> 00:14:04.175
+this also shows off the general way
+
+00:14:04.176 --> 00:14:07.863
+you can have extensible entities.
+
+00:14:07.864 --> 00:14:09.391
+That is, it's possible that someone writes
+
+00:14:09.392 --> 00:14:13.062
+a bookmarks package that stores everything
+
+00:14:13.063 --> 00:14:18.054
+in a database, in the triples database,
+
+00:14:18.055 --> 00:14:21.521
+but then someone else can come and say,
+
+00:14:21.522 --> 00:14:23.590
+okay, I'm going to define my own types
+
+00:14:23.591 --> 00:14:25.739
+that's meant to work with this database,
+
+00:14:25.740 --> 00:14:28.507
+just like someone could do what I did here,
+
+00:14:28.508 --> 00:14:30.874
+just to add simple tagging.
+
+00:14:30.875 --> 00:14:32.900
+It's very easy to do.
+
+00:14:32.901 --> 00:14:35.931
+This stuff is not that easy to do otherwise.
+
+00:14:35.932 --> 00:14:38.961
+To do this in Lisp, I would say it's a little awkward.
+
+00:14:38.962 --> 00:14:42.673
+With databases, again, it's not only possible,
+
+00:14:42.674 --> 00:14:43.498
+it's relatively trivial,
+
+00:14:43.499 --> 00:14:49.828
+especially with this kind of database.
+
+00:14:49.829 --> 00:14:53.056
+The benefit is it's super easy to work with.
+
+00:14:53.057 --> 00:14:56.041
+With this kind of generic database,
+
+00:14:56.042 --> 00:15:00.311
+the drawback is it's not all that efficient
+
+00:15:00.312 --> 00:15:04.381
+as a special purpose table
+
+00:15:04.382 --> 00:15:06.191
+that is really built for efficiencies.
+
+00:15:06.192 --> 00:15:08.820
+A lot of times you have to do multiple lookups
+
+00:15:08.820 --> 00:15:09.442
+and things like that.
+
+00:15:09.443 --> 00:15:11.985
+Again, it's a trade-off for various things.
+
+00:15:11.986 --> 00:15:19.900
+As you can see, this is like
+
+00:15:19.901 --> 00:15:22.066
+one database for everything.
+
+00:15:22.067 --> 00:15:29.178
+That means that we don't have to all
+
+00:15:29.179 --> 00:15:31.944
+contribute to one giant database.
+
+00:15:31.945 --> 00:15:33.052
+All the packages that use triples,
+
+00:15:33.053 --> 00:15:35.180
+it doesn't have to be one database,
+
+00:15:35.180 --> 00:15:37.086
+but it's cool if it does.
+
+00:15:37.087 --> 00:15:39.393
+I don't know what I want to happen
+
+00:15:39.394 --> 00:15:41.220
+or what I expect to happen,
+
+00:15:41.220 --> 00:15:43.068
+but I think an interesting property is that
+
+00:15:43.069 --> 00:15:45.400
+this is a way for lots of data to live together
+
+00:15:45.400 --> 00:15:49.606
+and build off each other in ways that I think
+
+00:15:49.607 --> 00:15:55.780
+are hard to do with other forms of table layouts
+
+00:15:55.780 --> 00:15:57.007
+and things like that.
+
+00:15:57.008 --> 00:15:59.653
+Let's talk about a use of it,
+
+00:15:59.654 --> 00:16:02.643
+which is the EKG package.
+
+00:16:02.644 --> 00:16:04.589
+The EKG package is something I've written
+
+00:16:04.590 --> 00:16:07.780
+to demonstrate the triples library
+
+00:16:07.780 --> 00:16:09.409
+and use it for something I think is interesting,
+
+00:16:09.410 --> 00:16:12.420
+which is personal knowledge management systems
+
+00:16:12.420 --> 00:16:14.384
+of the same type, of the same genre
+
+00:16:14.385 --> 00:16:15.286
+that Org Roam is,
+
+00:16:15.287 --> 00:16:18.433
+but with different design decisions.
+
+00:16:18.434 --> 00:16:26.531
+I'll show it in action for a little bit.
+
+00:16:26.532 --> 00:16:28.359
+Let's just look at... it's all tag-based,
+
+00:16:28.360 --> 00:16:30.185
+same kind of tags we saw before
+
+00:16:30.186 --> 00:16:32.232
+when we were playing around
+
+00:16:32.233 --> 00:16:35.560
+with the bookmarks example application,
+
+00:16:35.224 --> 00:16:37.475
+What I want to show is: I can look at a tag.
+
+00:16:35.560 --> 00:16:35.223
+but everything here is...
+
+00:16:37.476 --> 00:16:40.287
+I could see notes with that tag.
+
+00:16:40.288 --> 00:16:42.632
+Everything you see here is in the database,
+
+00:16:42.633 --> 00:16:43.198
+no files involved.
+
+00:16:43.199 --> 00:16:46.404
+All of this is just a thing
+
+00:16:46.405 --> 00:16:49.390
+that's an entire object, the entire string.
+
+00:16:49.391 --> 00:16:56.081
+It works. It has tags.
+
+00:16:56.082 --> 00:16:59.229
+You can see not only this tag,
+
+00:16:59.230 --> 00:17:01.354
+but all the other tags associated with it
+
+00:17:01.355 --> 00:17:04.860
+and their notes.
+
+00:17:04.860 --> 00:17:10.255
+It's kind of an interesting way to do things.
+
+00:17:10.256 --> 00:17:12.260
+When you capture it, I think it's interesting.
+
+00:17:12.260 --> 00:17:22.275
+There's a lot of interesting design elements here.
+
+00:17:22.276 --> 00:17:25.819
+This tags thing is not part of the buffer.
+
+00:17:25.819 --> 00:17:28.751
+It's not like Org Roam.
+
+00:17:28.752 --> 00:17:29.116
+You see here in this other tags,
+
+00:17:29.117 --> 00:17:31.924
+these are things I've imported from Org Roam.
+
+00:17:31.925 --> 00:17:32.230
+This is why they look like they do.
+
+00:17:32.231 --> 00:17:34.020
+They have their own titles because
+
+00:17:34.020 --> 00:17:37.889
+I just wrote them all in Org Roam.
+
+00:17:37.890 --> 00:17:39.457
+What it looks like, really, for these notes
+
+00:17:39.458 --> 00:17:41.023
+is that it's just text.
+
+00:17:41.024 --> 00:17:44.615
+You really don't have to bother with this metadata.
+
+00:17:44.616 --> 00:17:46.282
+If I want another tag like pancakes,
+
+00:17:46.283 --> 00:17:53.654
+I can just add it here. Again, these tags
+
+00:17:53.655 --> 00:17:56.740
+will turn into data, triple data.
+
+00:17:56.740 --> 00:17:59.825
+The text is just a triple date[??] as well,
+
+00:17:59.826 --> 00:18:01.969
+but different to triple data.
+
+00:18:01.970 --> 00:18:08.362
+All these things are like that.
+
+00:18:08.363 --> 00:18:12.771
+You can open up any of these things, et cetera.
+
+00:18:12.772 --> 00:18:16.682
+I think the interesting thing here
+
+00:18:16.683 --> 00:18:22.596
+is to see the code. It's not super interesting
+
+00:18:22.597 --> 00:18:23.980
+to look at code for too long,
+
+00:18:23.980 --> 00:18:26.991
+but we don't have that long.
+
+00:18:26.992 --> 00:18:27.654
+Whenever we connect--
+
+00:18:27.655 --> 00:18:28.819
+I just want to point out a few things.
+
+00:18:28.820 --> 00:18:29.205
+Whenever we connect, we have a schema.
+
+00:18:29.206 --> 00:18:31.175
+We just do this. Every time we connect,
+
+00:18:31.176 --> 00:18:33.163
+we just make sure it has the right schema.
+
+00:18:33.164 --> 00:18:36.314
+This way, the user is up to date.
+
+00:18:36.315 --> 00:18:38.300
+This schema just looks exactly like
+
+00:18:38.301 --> 00:18:41.687
+stuff I showed you in the triples
+
+00:18:41.688 --> 00:18:43.532
+when we were looking at bookmarks.
+
+00:18:43.533 --> 00:18:45.100
+It's not complicated.
+
+00:18:45.100 --> 00:18:48.210
+I even have stuff here with people
+
+00:18:48.211 --> 00:18:51.538
+to use this as a person database.
+
+00:18:51.539 --> 00:18:52.104
+I haven't figured out how I'm going to use this yet,
+
+00:18:52.105 --> 00:18:54.273
+but you can see just to do this,
+
+00:18:54.274 --> 00:19:01.913
+it's really trivial and it's pretty easy.
+
+00:19:01.914 --> 00:19:02.498
+Let's show a few other things,
+
+00:19:02.499 --> 00:19:05.844
+like getting all the tags.
+
+00:19:05.845 --> 00:19:07.990
+Here, we could just say,
+
+00:19:07.991 --> 00:19:10.379
+let's get the subjects of type tag.
+
+00:19:10.380 --> 00:19:12.902
+We have all the triples,
+
+00:19:12.903 --> 00:19:15.849
+all the ones that are of type tag,
+
+00:19:15.850 --> 00:19:18.777
+all the things that have a subject.
+
+00:19:18.778 --> 00:19:22.145
+All the subjects that have links,
+
+00:19:22.146 --> 00:19:28.337
+that have this type, this tag in it,
+
+00:19:28.338 --> 00:19:30.660
+we can return them all.
+
+00:19:30.426 --> 00:19:32.674
+of all these objects.
+
+00:19:30.660 --> 00:19:30.425
+Basically, it just gives you a list
+
+00:19:32.675 --> 00:19:33.243
+Again, you can think of these things as objects.
+
+00:19:33.244 --> 00:19:35.433
+All the objects of type tag,
+
+00:19:35.434 --> 00:19:37.320
+we'll just get them all. Super, super simple.
+
+00:19:37.321 --> 00:19:39.585
+Triples gives you this functionality
+
+00:19:39.586 --> 00:19:43.780
+out of the box. It's not that complicated.
+
+00:19:43.780 --> 00:19:45.167
+What I would like to show,
+
+00:19:45.168 --> 00:19:49.518
+and that shows my thesis for this whole talk,
+
+00:19:49.519 --> 00:19:52.785
+is this rename tag. Now, think about
+
+00:19:52.786 --> 00:19:54.150
+how you would rename a tag in Org Roam
+
+00:19:54.151 --> 00:20:03.013
+or anything where the tag is part of the files.
+
+00:20:03.014 --> 00:20:05.280
+It's like how you would re-tag everything
+
+00:20:05.280 --> 00:20:09.869
+in Org Mode. It's complicated and error-prone
+
+00:20:09.870 --> 00:20:12.556
+and slow. This is anything,
+
+00:20:12.557 --> 00:20:14.763
+this is instantaneous and super easy.
+
+00:20:14.764 --> 00:20:17.255
+Look, that's it. There's not that many places
+
+00:20:17.256 --> 00:20:19.540
+for an error to live here.
+
+00:20:19.540 --> 00:20:21.507
+One thing I would like to point out
+
+00:20:21.508 --> 00:20:23.337
+is that we are doing direct,
+
+00:20:23.338 --> 00:20:24.320
+not everything has to go through
+
+00:20:24.321 --> 00:20:28.292
+the triples package. Maybe it should,
+
+00:20:28.293 --> 00:20:31.660
+but the triples package is a fixed format,
+
+00:20:31.660 --> 00:20:33.906
+which is why it's okay--
+
+00:20:33.907 --> 00:20:34.069
+whether it's a good idea, I'm not sure,
+
+00:20:34.070 --> 00:20:39.863
+but it's okay for client packages
+
+00:20:39.864 --> 00:20:42.833
+to just directly manipulate the tables.
+
+00:20:42.834 --> 00:20:43.937
+Here, we're just doing it just to
+
+00:20:43.938 --> 00:20:45.265
+update all the tags
+
+00:20:45.266 --> 00:20:47.891
+and then remove and set types
+
+00:20:47.892 --> 00:20:49.119
+so that the correct thing happens.
+
+00:20:49.120 --> 00:20:52.146
+As you can see, it's super, super simple.
+
+00:20:52.147 --> 00:20:55.374
+I think this proves my thesis about
+
+00:20:55.375 --> 00:21:01.526
+the advantages of applications with SQLite.
+
+00:21:01.527 --> 00:21:02.430
+Thank you for listening.
+
+00:21:02.431 --> 00:21:05.876
+I hope this puts ideas in your minds
+
+00:21:05.877 --> 00:21:09.827
+about taking advantage of this functionality.
+
+00:21:09.828 --> 00:21:11.935
+I hope to see more things
+
+00:21:11.936 --> 00:21:12.180
+using the triples library
+
+00:21:12.180 --> 00:21:16.017
+or otherwise that take advantage of this.
+
+00:21:16.018 --> 00:21:17.660
+Thank you for your time.
diff --git a/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt b/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt
new file mode 100644
index 00000000..ba390789
--- /dev/null
+++ b/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main--chapters.vtt
@@ -0,0 +1,68 @@
+WEBVTT
+
+
+00:00:00.000 --> 00:00:26.039
+Introduction
+
+00:00:26.040 --> 00:01:54.359
+The 2020 Emacs User Survey
+
+00:01:54.360 --> 00:03:18.559
+The design of the survey
+
+00:03:18.560 --> 00:04:01.020
+Survey frameworks
+
+00:04:01.021 --> 00:05:40.199
+Writing a new survey framework in Julia
+
+00:05:40.200 --> 00:06:50.559
+In practice
+
+00:06:50.560 --> 00:07:39.599
+Results
+
+00:07:39.600 --> 00:09:11.159
+Going forward
+
+00:09:11.160 --> 00:11:16.999
+Responses
+
+00:11:17.000 --> 00:12:32.279
+Geography
+
+00:12:32.280 --> 00:14:04.439
+Gender
+
+00:14:04.440 --> 00:16:11.319
+Occupations
+
+00:16:11.320 --> 00:17:02.439
+Free and open source software
+
+00:17:02.440 --> 00:17:56.359
+Emacs versions
+
+00:17:56.360 --> 00:19:25.799
+Languages
+
+00:19:25.800 --> 00:20:03.399
+Prose
+
+00:20:03.400 --> 00:21:04.919
+Packages
+
+00:21:04.920 --> 00:21:38.439
+Documentation
+
+00:21:38.440 --> 00:22:44.199
+Moving forward
+
+00:22:44.200 --> 00:23:26.199
+Time
+
+00:23:26.200 --> 00:24:25.199
+How long the survey is open for
+
+00:24:25.200 --> 00:25:36.960
+Plan going forward
diff --git a/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt b/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt
new file mode 100644
index 00000000..62844b3d
--- /dev/null
+++ b/2022/captions/emacsconf-2022-survey--results-of-the-2022-emacs-survey--timothy--main.vtt
@@ -0,0 +1,1614 @@
+WEBVTT captioned by sachac
+
+NOTE Introduction
+
+00:00:00.000 --> 00:00:06.839
+Hello everyone and thanks for tuning in. I'm Timothy,
+
+00:00:06.840 --> 00:00:08.559
+and in this talk, we'll be going over
+
+00:00:08.560 --> 00:00:11.342
+the 2022 Emacs User Survey.
+
+00:00:11.970 --> 00:00:15.078
+Since this is the first time we're discussing this,
+
+00:00:15.079 --> 00:00:18.399
+we'll be going over the survey itself a bit,
+
+00:00:18.400 --> 00:00:21.199
+how it's being put together and run,
+
+00:00:21.200 --> 00:00:24.199
+and then we'll have a little taste of the results
+
+00:00:24.200 --> 00:00:26.039
+with more analysis to be published in the future.
+
+NOTE The 2020 Emacs User Survey
+
+00:00:26.040 --> 00:00:32.399
+To start with though, a bit of background.
+
+00:00:32.400 --> 00:00:36.679
+So in 2020, we had an Emacs User Survey
+
+00:00:36.680 --> 00:00:38.839
+run by Adrien Brochard.
+
+00:00:38.840 --> 00:00:41.359
+Now this is, to the best of my knowledge,
+
+00:00:41.360 --> 00:00:45.559
+the first time that a large-scale Emacs User Survey
+
+00:00:45.560 --> 00:00:48.039
+has actually been run.
+
+00:00:48.040 --> 00:00:50.439
+About 7,000 people responded to the survey,
+
+00:00:50.440 --> 00:00:53.239
+so in many respects, it was quite successful.
+
+00:00:53.240 --> 00:00:56.519
+And what's significant about this is that
+
+00:00:56.520 --> 00:00:57.679
+with this being the first time
+
+00:00:57.680 --> 00:00:59.999
+that a large-scale survey has been run,
+
+00:01:00.000 --> 00:01:01.719
+it actually provided some insight
+
+00:01:01.720 --> 00:01:06.719
+into questions about how the community is using Emacs
+
+00:01:06.720 --> 00:01:09.959
+that allow for much better guesses
+
+00:01:09.960 --> 00:01:15.359
+than just speculation based on the small number of people
+
+00:01:15.360 --> 00:01:16.919
+who respond on the mailing list usually.
+
+00:01:16.920 --> 00:01:24.879
+So, why are we doing another survey? Well, to start with,
+
+00:01:24.880 --> 00:01:28.799
+in order to get the most value out of an Emacs User Survey,
+
+00:01:28.800 --> 00:01:32.519
+it's quite helpful if the information in it is recent.
+
+00:01:32.520 --> 00:01:35.439
+Furthermore, we can actually get some more value
+
+00:01:35.440 --> 00:01:38.039
+if we can examine trends,
+
+00:01:38.040 --> 00:01:41.199
+shifts in the way that people are using Emacs,
+
+00:01:41.200 --> 00:01:42.919
+where the pain points lie,
+
+00:01:42.920 --> 00:01:45.479
+what people are enjoying the most, etc.
+
+00:01:45.480 --> 00:01:46.520
+So in both of these respects,
+
+00:01:46.521 --> 00:01:49.599
+it's to our benefit if the survey
+
+00:01:49.600 --> 00:01:51.519
+is actually a regular event,
+
+00:01:51.520 --> 00:01:54.359
+instead of just something that's run once.
+
+NOTE The design of the survey
+
+00:01:54.360 --> 00:01:57.159
+Now, with this in mind,
+
+00:01:57.160 --> 00:02:00.959
+we ran the 2022 Emacs User Survey with the plan
+
+00:02:00.960 --> 00:02:05.079
+that this will actually become an annual event.
+
+00:02:05.080 --> 00:02:08.999
+In the design of the survey, there are a few goals here.
+
+00:02:09.000 --> 00:02:11.520
+The main one is of the user community.
+
+00:02:11.521 --> 00:02:14.520
+Now, user community is a rather nebulous phrase.
+
+00:02:14.521 --> 00:02:17.520
+In this case, what's meant in particular
+
+00:02:17.521 --> 00:02:21.020
+is value in questions, for example,
+
+00:02:21.021 --> 00:02:23.839
+things like pain points with Emacs,
+
+00:02:23.840 --> 00:02:27.119
+which versions people are using,
+
+00:02:27.120 --> 00:02:30.239
+which capabilities people are making the most use of,
+
+00:02:30.240 --> 00:02:34.519
+which could potentially be helpful to both emacs-devel
+
+00:02:34.520 --> 00:02:36.520
+but also our collection of Emacs package maintainers
+
+00:02:36.521 --> 00:02:38.020
+and the whole community.
+
+00:02:38.021 --> 00:02:40.799
+Actually, I think going beyond just the packages,
+
+00:02:40.800 --> 00:02:46.039
+we've also got the people who develop tutorials, guides,
+
+00:02:46.040 --> 00:02:49.279
+and all of that sort of surrounding activity,
+
+00:02:49.280 --> 00:02:51.020
+which can benefit from a clear understanding
+
+00:02:51.021 --> 00:02:56.020
+of how Emacs users use Emacs.
+
+00:02:56.021 --> 00:02:58.519
+Separately to that,
+
+00:02:58.520 --> 00:03:01.639
+I think as an Emacs user myself,
+
+00:03:01.640 --> 00:03:02.839
+that it's rather interesting to see
+
+00:03:02.840 --> 00:03:04.479
+how other people are using Emacs
+
+00:03:04.480 --> 00:03:07.079
+and what their experience is. So yes, basically,
+
+00:03:07.080 --> 00:03:08.559
+you've got utility and interest
+
+00:03:08.560 --> 00:03:10.719
+as the two separate driving factors
+
+00:03:10.720 --> 00:03:14.020
+as we try to pick questions, which actually can give us
+
+00:03:14.021 --> 00:03:16.520
+all of this without taking up too much
+
+00:03:16.521 --> 00:03:18.559
+of the respondents time.
+
+NOTE Survey frameworks
+
+00:03:18.560 --> 00:03:24.399
+Now, last time in 2020, the Emacs survey that Adrien ran
+
+00:03:24.400 --> 00:03:27.079
+used, I think Google Forms, if I recall correctly,
+
+00:03:27.080 --> 00:03:28.799
+with an option to send in responses manually.
+
+00:03:28.800 --> 00:03:33.159
+This worked, but it's not great,
+
+00:03:33.160 --> 00:03:35.079
+particularly given that this is for a survey
+
+00:03:35.080 --> 00:03:37.199
+being run in an ardently FOSS community.
+
+00:03:37.200 --> 00:03:38.959
+Ideally, we actually want
+
+00:03:38.960 --> 00:03:40.799
+to find a survey framework
+
+00:03:40.800 --> 00:03:44.319
+that respects the priorities of users, is open source,
+
+00:03:44.320 --> 00:03:46.359
+ideally free and open source,
+
+00:03:46.360 --> 00:03:49.999
+and is a relatively pleasant experience.
+
+00:03:50.000 --> 00:03:53.079
+Unfortunately, looking at available options,
+
+00:03:53.080 --> 00:03:56.879
+it seems that one always has to compromise on at least one,
+
+00:03:56.880 --> 00:03:58.020
+if not all of those criteria,
+
+00:03:58.021 --> 00:04:01.020
+which is quite far from ideal.
+
+NOTE Writing a new survey framework in Julia
+
+00:04:01.021 --> 00:04:04.359
+So what's the obvious solution?
+
+00:04:04.360 --> 00:04:06.639
+Okay, we should just write a new survey framework.
+
+00:04:06.640 --> 00:04:10.679
+Obviously, this is easier said than done.
+
+00:04:10.680 --> 00:04:12.239
+But around a year ago,
+
+00:04:12.240 --> 00:04:13.639
+I actually started doing exactly this.
+
+00:04:13.640 --> 00:04:17.679
+I've used the programming language Julia quite a bit
+
+00:04:17.680 --> 00:04:21.020
+on a day to day basis. And there just so happens to be
+
+00:04:21.021 --> 00:04:23.199
+a web framework for that called Genie.
+
+00:04:23.200 --> 00:04:24.719
+So I thought I'd give it a shot.
+
+00:04:24.720 --> 00:04:26.559
+And well, here we are today.
+
+00:04:26.560 --> 00:04:28.479
+I ended up putting something together,
+
+00:04:28.480 --> 00:04:34.279
+which could take a set of questions written in Julia
+
+00:04:34.280 --> 00:04:35.839
+and using a survey library,
+
+00:04:35.840 --> 00:04:38.799
+actually pass that into this helpful structure
+
+00:04:38.800 --> 00:04:44.119
+and then construct HTML forms based on that,
+
+00:04:44.120 --> 00:04:47.020
+and ingest results from the HTML forms,
+
+00:04:47.021 --> 00:04:48.520
+and just sort of handle that altogether.
+
+00:04:48.521 --> 00:04:52.439
+Now, all of this ends up being fed into an SQLite DB.
+
+00:04:52.440 --> 00:04:55.159
+So everything's there, even part responses.
+
+00:04:55.160 --> 00:04:57.599
+One of the goals with the actual design of this has been
+
+00:04:57.600 --> 00:05:01.119
+to just minimize what's actually done on the client side.
+
+00:05:01.120 --> 00:05:05.559
+So that means JavaScript, cookies, the whole lot.
+
+00:05:05.560 --> 00:05:08.759
+Basically, as far as this could reasonably be taken,
+
+00:05:08.760 --> 00:05:14.599
+we've just got static HTML being shoved to the user,
+
+00:05:14.600 --> 00:05:16.719
+or respondent rather. And then we just
+
+00:05:16.720 --> 00:05:18.519
+take an HTTP post request back
+
+00:05:18.520 --> 00:05:20.919
+and update the results that way.
+
+00:05:20.920 --> 00:05:24.239
+Now by doing things like actually paging the survey,
+
+00:05:24.240 --> 00:05:26.559
+we can allow for incremental saving of results
+
+00:05:26.560 --> 00:05:30.559
+and a few other niceties while essentially preserving
+
+00:05:30.560 --> 00:05:36.319
+an experience that doesn't really require any data
+
+00:05:36.320 --> 00:05:37.319
+of any particular capabilities, which is sort of
+
+00:05:37.320 --> 00:05:40.199
+a nice, clean, minimal experience as far as I'm concerned.
+
+NOTE In practice
+
+00:05:40.200 --> 00:05:45.679
+So how does this actually look like in practice?
+
+00:05:45.680 --> 00:05:48.119
+Well, one of the nice things about this is
+
+00:05:48.120 --> 00:05:51.479
+because the question itself is written in Julia,
+
+00:05:51.480 --> 00:05:54.279
+we can get some nice features like custom validators
+
+00:05:54.280 --> 00:05:57.919
+and other fancy behavior and directly specify
+
+00:05:57.920 --> 00:06:01.119
+how we actually want questions to be registered
+
+00:06:01.120 --> 00:06:04.439
+in the database. So here we have, for example,
+
+00:06:04.440 --> 00:06:06.679
+two questions we had from this email survey.
+
+00:06:06.680 --> 00:06:09.959
+One is a multi-select. Another one is just putting in
+
+00:06:09.960 --> 00:06:14.399
+the number of years people have used Emacs for.
+
+00:06:14.400 --> 00:06:16.159
+I think this gives a brief overview of the capabilities.
+
+00:06:16.160 --> 00:06:19.599
+One of the things I'd like to draw particular attention
+
+00:06:19.600 --> 00:06:20.759
+to here is in the multi-select,
+
+00:06:20.760 --> 00:06:22.199
+you'll see an array of options,
+
+00:06:22.200 --> 00:06:24.319
+the first one of which actually maps for different value
+
+00:06:24.320 --> 00:06:25.879
+to be stored for convenience.
+
+00:06:25.880 --> 00:06:29.119
+And then the final one is a special one, :other,
+
+00:06:29.120 --> 00:06:30.359
+and you can see that's a bit different to the rest
+
+00:06:30.360 --> 00:06:32.599
+where it's got that colon function,
+
+00:06:32.600 --> 00:06:33.719
+it's a symbol, not a string.
+
+00:06:33.720 --> 00:06:37.639
+And this is quite a nice one because the way
+
+00:06:37.640 --> 00:06:39.279
+that this framework's been designed,
+
+00:06:39.280 --> 00:06:41.759
+when we have an :other value like that,
+
+00:06:41.760 --> 00:06:44.199
+instead of it just being a sort of tick box "Other",
+
+00:06:44.200 --> 00:06:47.199
+it actually provides the option to write
+
+00:06:47.200 --> 00:06:50.559
+your own different response to all of the above.
+
+NOTE Results
+
+00:06:50.560 --> 00:06:55.319
+Okay, so at the very end, we've now got
+
+00:06:55.320 --> 00:06:58.519
+a completely FOSS survey framework, rather nice.
+
+00:06:58.520 --> 00:07:00.020
+So the set of what were these...
+
+00:07:00.021 --> 00:07:01.119
+Decent array of input types.
+
+00:07:01.120 --> 00:07:02.639
+It would be nice to expand, but at the moment
+
+00:07:02.640 --> 00:07:04.599
+I think we could just about describe it as a rich set.
+
+00:07:04.600 --> 00:07:07.159
+Zero JavaScript required, but a little bit useful
+
+00:07:07.160 --> 00:07:08.079
+for progressive enhancement.
+
+00:07:08.080 --> 00:07:12.759
+As demonstrated, we can get some fancy validation going on.
+
+00:07:12.760 --> 00:07:16.679
+And then because we've got the results
+
+00:07:16.680 --> 00:07:18.559
+tied into this quite nicely,
+
+00:07:18.560 --> 00:07:20.999
+we can actually have them available live
+
+00:07:21.000 --> 00:07:22.999
+and in quite a number of formats.
+
+00:07:23.000 --> 00:07:25.439
+I'm not sure how much you saw in the architecture diagram,
+
+00:07:25.440 --> 00:07:27.079
+but we've got all sorts of things here.
+
+00:07:27.080 --> 00:07:29.679
+CSV, TSV, plain text, JSON,
+
+00:07:29.680 --> 00:07:32.119
+just grab a copy of the SQLite database,
+
+00:07:32.120 --> 00:07:33.319
+but only the relevant bits.
+
+00:07:33.320 --> 00:07:35.879
+Or something called JLD2,
+
+00:07:35.880 --> 00:07:37.999
+which preserves a lot of type information
+
+00:07:38.000 --> 00:07:39.599
+and a few other nice things.
+
+NOTE Going forward
+
+00:07:39.600 --> 00:07:43.799
+Now, what are we going to do going forward from here?
+
+00:07:43.800 --> 00:07:46.159
+Well, there are a few minor issues here.
+
+00:07:46.160 --> 00:07:48.599
+For example, there's a memory leak issue which is going on,
+
+00:07:48.600 --> 00:07:51.839
+resulting in the service being restarted,
+
+00:07:51.840 --> 00:07:54.519
+I think every day or two, while the survey was running.
+
+00:07:54.520 --> 00:07:56.159
+I actually have the suspicion
+
+00:07:56.160 --> 00:07:57.639
+that that's largely responsible for
+
+00:07:57.640 --> 00:08:01.479
+about 1% of respondents, which is about 75 people,
+
+00:08:01.480 --> 00:08:04.399
+who described the survey experience as not great.
+
+00:08:04.400 --> 00:08:08.199
+Overall though, the feedback has been quite positive.
+
+00:08:08.200 --> 00:08:09.919
+There's been some detailed written feedback,
+
+00:08:09.920 --> 00:08:12.799
+but just from the quick great/okay/not great options,
+
+00:08:12.800 --> 00:08:14.839
+we had about two-thirds of people saying
+
+00:08:14.840 --> 00:08:16.839
+that the user experience was great,
+
+00:08:16.840 --> 00:08:19.199
+which is really nice to hear the first time being run.
+
+00:08:19.200 --> 00:08:22.839
+A few other things would be nice to add, for example,
+
+00:08:22.840 --> 00:08:25.759
+in future control flow. By this, I mean
+
+00:08:25.760 --> 00:08:27.879
+the option to present different questions
+
+00:08:27.880 --> 00:08:28.999
+based on previous answers
+
+00:08:29.000 --> 00:08:31.199
+would be quite nice to streamline the experience.
+
+00:08:31.200 --> 00:08:33.519
+For example, having a set of questions
+
+00:08:33.520 --> 00:08:37.239
+for first-time respondents or people who are involved
+
+00:08:37.240 --> 00:08:42.239
+in the packaging side of things
+
+00:08:42.240 --> 00:08:45.079
+without actually cluttering the experience
+
+00:08:45.080 --> 00:08:46.039
+for everybody else. That'd be quite nice.
+
+00:08:46.040 --> 00:08:48.599
+Further to this, all of this,
+
+00:08:48.600 --> 00:08:51.879
+I think on top of the standard web interface,
+
+00:08:51.880 --> 00:08:53.599
+it'd be quite nice to actually write a server API.
+
+00:08:53.600 --> 00:08:55.520
+And the particular reason why I mentioned this
+
+00:08:55.521 --> 00:08:58.020
+is because this could potentially allow for
+
+00:08:58.021 --> 00:09:00.359
+basically an Emacs survey package.
+
+00:09:00.360 --> 00:09:03.039
+I mean, we already use Emacs for so many things,
+
+00:09:03.040 --> 00:09:05.519
+might as well fill the survey out from within it as well.
+
+00:09:05.520 --> 00:09:11.159
+Okay, so this is how the survey has been conducted.
+
+NOTE Responses
+
+00:09:11.160 --> 00:09:13.679
+Now, what are the responses look like?
+
+00:09:13.680 --> 00:09:16.039
+Now, at this stage, I was actually hoping
+
+00:09:16.040 --> 00:09:18.919
+to get into some somewhat sophisticated analysis
+
+00:09:18.920 --> 00:09:22.599
+because there's quite a bit that you can dig out
+
+00:09:22.600 --> 00:09:24.239
+of the data responses that we've received.
+
+00:09:24.240 --> 00:09:27.879
+However, unfortunately, I've been much more limited on time
+
+00:09:27.880 --> 00:09:30.039
+than I'd hoped for, so that's going to have to come later.
+
+00:09:30.040 --> 00:09:33.559
+For now, we're just going to take a bit of a peek
+
+00:09:33.560 --> 00:09:35.959
+at some of the really basic answers.
+
+00:09:35.960 --> 00:09:38.239
+Well, it's not even really analysis.
+
+00:09:38.240 --> 00:09:40.239
+Expect to see lots of pie charts, basically.
+
+00:09:40.240 --> 00:09:42.999
+But there's still a bit of interest there,
+
+00:09:43.000 --> 00:09:44.359
+so we'll go through a bit of that
+
+00:09:44.360 --> 00:09:47.119
+and just give a bit of a tease
+
+00:09:47.120 --> 00:09:50.319
+as to what might come in the future.
+
+00:09:50.320 --> 00:09:51.919
+So to sum up for starters,
+
+00:09:51.920 --> 00:09:55.079
+we've had about 6,500 responses.
+
+00:09:55.080 --> 00:09:58.359
+It is worth noting that a thousand of those are partials,
+
+00:09:58.360 --> 00:10:02.199
+so people who gave up on the survey partway through.
+
+00:10:02.200 --> 00:10:05.399
+Given that the 2020 survey had about 7000 responses,
+
+00:10:05.400 --> 00:10:06.999
+I'll tell you we're basically on par here.
+
+00:10:07.000 --> 00:10:10.399
+This ran over a month and interestingly,
+
+00:10:10.400 --> 00:10:12.239
+about half of these respondents
+
+00:10:12.240 --> 00:10:13.799
+did not participate in the 2020 survey.
+
+00:10:13.800 --> 00:10:16.199
+I think at this point,
+
+00:10:16.200 --> 00:10:17.679
+it's not really clear what to make of that.
+
+00:10:17.680 --> 00:10:21.359
+There's been a two-year gap between the surveys.
+
+00:10:21.360 --> 00:10:25.159
+It's been done, well, it's been done quite differently,
+
+00:10:25.160 --> 00:10:29.639
+and yes, there's not enough, really, to say.
+
+00:10:29.640 --> 00:10:31.999
+What could be interesting though is actually,
+
+00:10:32.000 --> 00:10:33.839
+once this starts running regularly,
+
+00:10:33.840 --> 00:10:36.799
+we can see whether there's regular churn
+
+00:10:36.800 --> 00:10:38.520
+in the survey respondents,
+
+00:10:38.521 --> 00:10:40.020
+or if we have a consistent core
+
+00:10:40.021 --> 00:10:42.020
+with people who respond each year,
+
+00:10:42.021 --> 00:10:46.159
+and then just people who come by every now and then and go,
+
+00:10:46.160 --> 00:10:47.759
+"Oh, why not respond to this year's survey?"
+
+00:10:47.760 --> 00:10:51.479
+But we're going to have to wait a bit to actually see
+
+00:10:51.480 --> 00:10:52.759
+how people treat the survey.
+
+00:10:52.760 --> 00:10:57.519
+Now these responses came from quite a wide range of places
+
+00:10:57.520 --> 00:11:02.519
+we've got 115 nations represented here. Collectively,
+
+00:11:02.520 --> 00:11:04.039
+these ones have spent about a thousand hours
+
+00:11:04.040 --> 00:11:06.959
+giving us information. So I think, if nothing else,
+
+00:11:06.960 --> 00:11:10.479
+just from the effort that people have put into
+
+00:11:10.480 --> 00:11:12.879
+actually giving us useful data to work with,
+
+00:11:12.880 --> 00:11:13.599
+it's worth giving at least a good effort
+
+00:11:13.600 --> 00:11:15.999
+to actually trying to extract some value
+
+00:11:16.000 --> 00:11:16.999
+out of these responses.
+
+NOTE Geography
+
+00:11:17.000 --> 00:11:20.879
+Now, overall we found a lot of responses came from America,
+
+00:11:20.880 --> 00:11:23.199
+no surprises there, but as mentioned,
+
+00:11:23.200 --> 00:11:24.020
+we've got a good mix around the globe.
+
+00:11:24.021 --> 00:11:29.159
+The usual suspects for the rest of the responses,
+
+00:11:29.160 --> 00:11:33.279
+a whole bunch in Europe, a whole bunch around Asia,
+
+00:11:33.280 --> 00:11:36.799
+a bit in Australasia as well and yes,
+
+00:11:36.800 --> 00:11:38.959
+there's nothing particularly surprising here,
+
+00:11:38.960 --> 00:11:41.399
+there's a lot of inline expectations.
+
+00:11:41.400 --> 00:11:42.839
+What I find a bit more interesting, though,
+
+00:11:42.840 --> 00:11:45.359
+is if we actually normalise
+
+00:11:45.360 --> 00:11:48.079
+the number of responses from each nation
+
+00:11:48.080 --> 00:11:50.079
+by the population of said nations,
+
+00:11:50.080 --> 00:11:54.239
+essentially giving a popularity of Emacs
+
+00:11:54.240 --> 00:11:57.359
+or at least of Emacs early respondents for each nation,
+
+00:11:57.360 --> 00:12:00.919
+we end up finding that Europe, particularly Scandinavia,
+
+00:12:00.920 --> 00:12:02.199
+becomes a bit of a hotspot.
+
+00:12:02.200 --> 00:12:04.519
+So I'm not sure what's going on
+
+00:12:04.520 --> 00:12:07.319
+in Sweden, Finland and Norway,
+
+00:12:07.320 --> 00:12:10.919
+but it seems to be particularly popular around there.
+
+00:12:10.920 --> 00:12:14.199
+It's also worth noting that we now find
+
+00:12:14.200 --> 00:12:18.319
+that the proportion of respondents
+
+00:12:18.320 --> 00:12:21.799
+in countries like America, Canada, Australia
+
+00:12:21.800 --> 00:12:24.039
+and most of Europe actually becomes
+
+00:12:24.040 --> 00:12:26.399
+quite comparable with each other,
+
+00:12:26.400 --> 00:12:30.239
+which yes, once again, sort of lines up
+
+00:12:30.240 --> 00:12:32.279
+with these responses, expectations from the last slide.
+
+NOTE Gender
+
+00:12:32.280 --> 00:12:36.279
+Okay, getting into some of the other
+
+00:12:36.280 --> 00:12:38.599
+demographic information.
+
+00:12:38.600 --> 00:12:40.319
+The demographic information was new to this survey.
+
+00:12:40.320 --> 00:12:44.479
+In the 2020 survey, people were asked what they think
+
+00:12:44.480 --> 00:12:47.199
+of being asked about some demographic information
+
+00:12:47.200 --> 00:12:50.199
+in a future survey, and the overwhelming response is, "Sure,
+
+00:12:50.200 --> 00:12:52.759
+I don't really mind." And so that's what we've done here.
+
+00:12:52.760 --> 00:12:56.279
+One of the ones of somewhat interest
+
+00:12:56.280 --> 00:12:59.759
+is the age gender breakdown. So we expect Emacs
+
+00:12:59.760 --> 00:13:03.119
+to be used predominantly among people in software
+
+00:13:03.120 --> 00:13:05.839
+and programming and within the industry,
+
+00:13:05.840 --> 00:13:08.599
+I think it's quite widely documented
+
+00:13:08.600 --> 00:13:14.520
+to have about a sort of 75-25%, roughly, split
+
+00:13:14.521 --> 00:13:14.759
+between male and female.
+
+00:13:14.760 --> 00:13:19.359
+Interestingly, in Emacs,
+
+00:13:19.360 --> 00:13:22.879
+it's a much more aggressively-biased result.
+
+00:13:22.880 --> 00:13:28.679
+So we had about 96% of respondents are male
+
+00:13:28.680 --> 00:13:34.559
+with just 4% for the rest. Interestingly, though,
+
+00:13:34.560 --> 00:13:35.359
+if we look at the young respondents,
+
+00:13:35.360 --> 00:13:41.719
+say for example, under 25, we go from 96% male to 88%.
+
+00:13:41.720 --> 00:13:46.119
+So it's fair to say that the young respondents are
+
+00:13:46.120 --> 00:13:49.199
+in this respect, a somewhat more diverse group.
+
+00:13:49.200 --> 00:13:52.399
+Hopefully, as future surveys go on,
+
+00:13:52.400 --> 00:13:54.399
+we'll see this continue not die off
+
+00:13:54.400 --> 00:13:58.719
+to the sort of well, at this point,
+
+00:13:58.720 --> 00:14:02.919
+it's more like 99% if you look at the older ages.
+
+00:14:02.920 --> 00:14:04.439
+But we'll see.
+
+NOTE Occupations
+
+00:14:04.440 --> 00:14:07.919
+Occupations was an interesting slide as well.
+
+00:14:07.920 --> 00:14:09.399
+Interesting question as well.
+
+00:14:09.400 --> 00:14:11.559
+We've got the usual suspects here. I mean,
+
+00:14:11.560 --> 00:14:15.079
+it's a text editor, well, Lisp machine
+
+00:14:15.080 --> 00:14:17.639
+masquerading as a text editor, mainly used for programming,
+
+00:14:17.640 --> 00:14:20.639
+and so we expect lots of software development
+
+00:14:20.640 --> 00:14:23.519
+and that sort of thing. But that's only about
+
+00:14:23.520 --> 00:14:25.399
+just over half of the responses.
+
+00:14:25.400 --> 00:14:28.679
+We've got a huge chunk from academia,
+
+00:14:28.680 --> 00:14:29.999
+and then really just an odd bag
+
+00:14:30.000 --> 00:14:30.879
+of all sorts of other things,
+
+00:14:30.880 --> 00:14:33.079
+including things which you wouldn't really associate
+
+00:14:33.080 --> 00:14:35.359
+with programming and software at all.
+
+00:14:35.360 --> 00:14:39.639
+Things like creative writing, publishing, legal, yes.
+
+00:14:39.640 --> 00:14:41.719
+And then you've got this chunk of Other,
+
+00:14:41.720 --> 00:14:43.239
+which is I think here is
+
+00:14:43.240 --> 00:14:46.679
+the fourth most popular option here.
+
+00:14:46.680 --> 00:14:49.399
+And what we have here is about 500 different responses
+
+00:14:49.400 --> 00:14:51.839
+from a huge range of activities.
+
+00:14:51.840 --> 00:14:54.359
+It's really quite interesting to read things like
+
+00:14:54.360 --> 00:14:56.919
+I think, things like "naval officer",
+
+00:14:56.920 --> 00:15:01.319
+and just... All sorts of surprising occupations for Emacs.
+
+00:15:01.320 --> 00:15:04.799
+And I think this is a particular area
+
+00:15:04.800 --> 00:15:10.199
+because I imagine compared to other code editors,
+
+00:15:10.200 --> 00:15:13.879
+sort of your VS Code, remember like
+
+00:15:13.880 --> 00:15:18.959
+that Emacs may have a particularly diverse set
+
+00:15:18.960 --> 00:15:23.599
+of industry occupations represented in its users.
+
+00:15:23.600 --> 00:15:28.359
+Now, if you look at where the response actually came from,
+
+00:15:28.360 --> 00:15:31.039
+we've got the usual suspects up top,
+
+00:15:31.040 --> 00:15:33.959
+Hacker News and r/emacs.
+
+00:15:33.960 --> 00:15:40.119
+But then we actually get a much more graduated breakdown
+
+00:15:40.120 --> 00:15:43.679
+than in the 2020 survey.
+
+00:15:43.680 --> 00:15:46.279
+We do think familiar results here like IRC, Telegram,
+
+00:15:46.280 --> 00:15:48.639
+Emacs China, and Twitter.
+
+00:15:48.640 --> 00:15:50.839
+But now you've got a few new entries,
+
+00:15:50.840 --> 00:15:53.519
+things like the Fediverse, Discourse, Matrix,
+
+00:15:53.520 --> 00:15:56.119
+which didn't pop up previously.
+
+00:15:56.120 --> 00:15:59.079
+So I think this is yes, quite a nice sign in terms of
+
+00:15:59.080 --> 00:16:02.520
+actually hitting a wide range
+
+00:16:02.521 --> 00:16:05.999
+of pockets of Emacs users across different platforms,
+
+00:16:06.000 --> 00:16:10.319
+which bodes well for the potential representiveness
+
+00:16:10.320 --> 00:16:11.319
+of this survey.
+
+NOTE Free and open source software
+
+00:16:11.320 --> 00:16:15.119
+Unsurprisingly, if we're talking about Emacs
+
+00:16:15.120 --> 00:16:17.919
+and particularly people who are quite engaged in it,
+
+00:16:17.920 --> 00:16:19.679
+which are the respondents to this survey,
+
+00:16:19.680 --> 00:16:25.359
+we find that we also get quite a high degree of care
+
+00:16:25.360 --> 00:16:27.479
+for free and open source software.
+
+00:16:27.480 --> 00:16:30.519
+So if you have a look here,
+
+00:16:30.520 --> 00:16:35.279
+only about a quarter of users
+
+00:16:35.280 --> 00:16:39.799
+didn't express a strong preference towards FOSS software.
+
+00:16:39.800 --> 00:16:43.759
+In fact, we had over a quarter saying that
+
+00:16:43.760 --> 00:16:49.239
+they would accept significant or even any compromise
+
+00:16:49.240 --> 00:16:52.199
+to use a FOSS user software
+
+00:16:52.200 --> 00:16:55.759
+over a proprietary alternative,
+
+00:16:55.760 --> 00:16:59.679
+which given the nature of Emacs,
+
+00:16:59.680 --> 00:17:00.639
+not terribly surprising,
+
+00:17:00.640 --> 00:17:02.439
+but a strong showing nonetheless.
+
+NOTE Emacs versions
+
+00:17:02.440 --> 00:17:05.599
+Now, let's start getting to things
+
+00:17:05.600 --> 00:17:07.719
+which are actually useful for
+
+00:17:07.720 --> 00:17:11.479
+potential Emacs development and packaging.
+
+00:17:11.480 --> 00:17:13.599
+If you're thinking about supporting Emacs versions,
+
+00:17:13.600 --> 00:17:16.599
+it looks like you can do fantastically well
+
+00:17:16.600 --> 00:17:20.639
+in terms of hitting most users if you support Emacs 27+.
+
+00:17:20.640 --> 00:17:23.159
+That hits about 96% of respondents.
+
+00:17:23.160 --> 00:17:26.199
+Interestingly though, you can actually make an argument
+
+00:17:26.200 --> 00:17:27.119
+for being even more aggressive.
+
+00:17:27.120 --> 00:17:30.319
+I mean, if you have a look at Emacs 28+,
+
+00:17:30.320 --> 00:17:32.359
+that's still over three quarters of respondents.
+
+00:17:32.360 --> 00:17:35.799
+We've got, at this point, a quarter
+
+00:17:35.800 --> 00:17:37.279
+using the unreleased HEAD version,
+
+00:17:37.280 --> 00:17:40.159
+even though it's getting close to release.
+
+00:17:40.160 --> 00:17:43.039
+Obviously here, as stated, we're hitting
+
+00:17:43.040 --> 00:17:44.599
+a sort of more engaged with the community
+
+00:17:44.600 --> 00:17:47.799
+subset of Emacs users, but still,
+
+00:17:47.800 --> 00:17:49.879
+I think it's interesting to see that
+
+00:17:49.880 --> 00:17:52.639
+with Emacs's increasingly frequent update schedule,
+
+00:17:52.640 --> 00:17:54.999
+that users are actually picking up those updates
+
+00:17:55.000 --> 00:17:56.359
+quite promptly as they roll out.
+
+NOTE Languages
+
+00:17:56.360 --> 00:18:02.079
+Continuing on with how people actually use Emacs: languages.
+
+00:18:02.080 --> 00:18:05.199
+We've got the usual suspects here: lots of Python,
+
+00:18:05.200 --> 00:18:08.959
+quite a bit of JavaScript and C, lots of shell.
+
+00:18:08.960 --> 00:18:11.879
+What I find quite interesting though is
+
+00:18:11.880 --> 00:18:12.799
+if we actually bring in
+
+00:18:12.800 --> 00:18:16.719
+the 2020 Stack Overflow language usage survey data,
+
+00:18:16.720 --> 00:18:19.239
+and that maps quite well
+
+00:18:19.240 --> 00:18:20.079
+to the array of language options we provided here.
+
+00:18:20.080 --> 00:18:21.199
+They had a general Lisp option,
+
+00:18:21.200 --> 00:18:23.919
+which I've folded into Common Lisp
+
+00:18:23.920 --> 00:18:26.919
+since they listed Clojure separately.
+
+00:18:26.920 --> 00:18:29.679
+I think that seems like a fairly safe bet.
+
+00:18:29.680 --> 00:18:31.919
+But other than that, the only languages that we missed
+
+00:18:31.920 --> 00:18:35.839
+are Scheme and Elisp.
+
+00:18:35.840 --> 00:18:37.879
+What we can do is we can look at
+
+00:18:37.880 --> 00:18:41.199
+the relative popularity of different languages
+
+00:18:41.200 --> 00:18:44.519
+from our Emacs user survey compared to Stack Overflows.
+
+00:18:44.520 --> 00:18:48.319
+What do we find? Well, Clojure and Common Lisp
+
+00:18:48.320 --> 00:18:51.639
+far above the rest, I imagine in no small part due to
+
+00:18:51.640 --> 00:18:54.959
+the fantastic SLIME and Cider packages.
+
+00:18:54.960 --> 00:18:59.559
+Following that, we see Haskell being particularly prominent,
+
+00:18:59.560 --> 00:19:00.639
+and then a collection of other languages,
+
+00:19:00.640 --> 00:19:06.199
+your Erlang, Elixir, Julia, Perl and the rest.
+
+00:19:06.200 --> 00:19:10.959
+And then lastly, if we have a look at the ones
+
+00:19:10.960 --> 00:19:13.439
+which have significantly diminished popularity
+
+00:19:13.440 --> 00:19:17.719
+compared to Stack Overflow, we end up with, I think,
+
+00:19:17.720 --> 00:19:20.159
+what I could probably cast as more enterprising languages.
+
+00:19:20.160 --> 00:19:25.799
+Things like C#, Java, Typescript and the like.
+
+NOTE Prose
+
+00:19:25.800 --> 00:19:31.559
+So, that's interesting. Now, earlier
+
+00:19:31.560 --> 00:19:33.239
+when we were looking at the split of Emacs users,
+
+00:19:33.240 --> 00:19:37.239
+we found that we actually had a fair few
+
+00:19:37.240 --> 00:19:42.199
+in more creative areas, like writing and publishing.
+
+00:19:42.200 --> 00:19:44.479
+So if looking at prose, we'd expect a decent chunk
+
+00:19:44.480 --> 00:19:47.039
+to be using Emacs for prose, but it's actually more
+
+00:19:47.040 --> 00:19:48.719
+than just a little bit, it's a little slice.
+
+00:19:48.720 --> 00:19:50.599
+We've got a whopping about a third of users
+
+00:19:50.600 --> 00:19:54.719
+saying they frequently use Emacs for writing prose.
+
+00:19:54.720 --> 00:19:55.999
+I'd imagine that the availability
+
+00:19:56.000 --> 00:19:57.799
+of things like Org mode and AUCTeX
+
+00:19:57.800 --> 00:20:03.399
+probably help like this.
+
+NOTE Packages
+
+00:20:03.400 --> 00:20:05.119
+Moving on to other packages, or more packages,
+
+00:20:05.120 --> 00:20:08.879
+we've actually got a very similar split here
+
+00:20:08.880 --> 00:20:13.199
+to the 2020 survey. Org has seen a bit of a growth
+
+00:20:13.200 --> 00:20:16.039
+in popularity. We've got some new arrivals here as well.
+
+00:20:16.040 --> 00:20:18.479
+For example, Vertico has popped onto the scene
+
+00:20:18.480 --> 00:20:21.279
+and overtaken Ivy here, along with
+
+00:20:21.280 --> 00:20:24.519
+a few other new packages like Consult.
+
+00:20:24.520 --> 00:20:27.599
+Other than that, quite comparable.
+
+00:20:27.600 --> 00:20:29.999
+What's rather interesting, though, I find here is that
+
+00:20:30.000 --> 00:20:33.719
+when you have people who listed a small number of packages,
+
+00:20:33.720 --> 00:20:39.439
+they actually predominantly listed packages
+
+00:20:39.440 --> 00:20:41.319
+other than the most common set.
+
+00:20:41.320 --> 00:20:43.959
+So if we have a lot of people who only listed one package,
+
+00:20:43.960 --> 00:20:48.959
+basically two-thirds of that,
+
+00:20:48.960 --> 00:20:51.479
+or actually three-quarters of those responses
+
+00:20:51.480 --> 00:20:53.879
+were saying other packages,
+
+00:20:53.880 --> 00:20:56.279
+despite the fact that overall packages
+
+00:20:56.280 --> 00:20:58.599
+other than the highlighted selection here
+
+00:20:58.600 --> 00:21:01.399
+only constitute a quarter of responses.
+
+00:21:01.400 --> 00:21:04.919
+So there might be something a bit more to look at there.
+
+NOTE Documentation
+
+00:21:04.920 --> 00:21:07.799
+Now when people are using packages,
+
+00:21:07.800 --> 00:21:11.039
+we also asked what types of documentation
+
+00:21:11.040 --> 00:21:14.399
+people would like to see more of on package READMEs.
+
+00:21:14.400 --> 00:21:17.159
+Basically we've got a big mix here.
+
+00:21:17.160 --> 00:21:20.079
+It seems like generally people are interested in
+
+00:21:20.080 --> 00:21:23.839
+seeing more in various forms, whether it be tutorials,
+
+00:21:23.840 --> 00:21:29.479
+overviews, screenshots, comparisons, or clips and videos.
+
+00:21:29.480 --> 00:21:32.919
+So full READMEs with a lot of context
+
+00:21:32.920 --> 00:21:38.439
+seem to be quite desirable from this.
+
+NOTE Moving forward
+
+00:21:38.440 --> 00:21:42.359
+Now moving forward, what are we going to do?
+
+00:21:42.360 --> 00:21:45.039
+So 800 people gave some detailed feedback on the survey.
+
+00:21:45.040 --> 00:21:47.759
+That's quite nice. I'm going to be taking a good read
+
+00:21:47.760 --> 00:21:50.799
+of all of those responses and use that
+
+00:21:50.800 --> 00:21:55.639
+to improve the process and also the set of questions.
+
+00:21:55.640 --> 00:22:00.759
+Now all of you can also give some feedback on the questions,
+
+00:22:00.760 --> 00:22:02.679
+both that you found most useful in this survey,
+
+00:22:02.680 --> 00:22:04.799
+ones that you think might not add much value,
+
+00:22:04.800 --> 00:22:07.039
+and/or new questions
+
+00:22:07.040 --> 00:22:08.359
+that you think might be a good addition.
+
+00:22:08.360 --> 00:22:11.119
+Once I've done a bit more analysis,
+
+00:22:11.120 --> 00:22:13.119
+particularly the more sophisticated analysis
+
+00:22:13.120 --> 00:22:17.159
+which I'm planning, which will probably come out actually
+
+00:22:17.160 --> 00:22:18.719
+maybe in the first quarter of next year,
+
+00:22:18.720 --> 00:22:22.919
+we can see which questions there seem to have provided
+
+00:22:22.920 --> 00:22:25.039
+the most interesting or surprising results
+
+00:22:25.040 --> 00:22:26.559
+and those are probably worth keeping.
+
+00:22:26.560 --> 00:22:31.959
+Lastly, once we actually have an API
+
+00:22:31.960 --> 00:22:33.279
+and potentially even an Emacs package,
+
+00:22:33.280 --> 00:22:36.159
+we could automate a large number of the questions,
+
+00:22:36.160 --> 00:22:38.999
+things like Emacs version, set of packages used,
+
+00:22:39.000 --> 00:22:41.039
+and that could just streamline the experience
+
+00:22:41.040 --> 00:22:42.279
+of actually filling out the survey,
+
+00:22:42.280 --> 00:22:44.199
+make it a bit more frictionless.
+
+NOTE Time
+
+00:22:44.200 --> 00:22:47.319
+Now talking of the question of questions,
+
+00:22:47.320 --> 00:22:49.319
+a quick survey is a good survey.
+
+00:22:49.320 --> 00:22:52.959
+If we're asking people to dedicate their time
+
+00:22:52.960 --> 00:22:56.279
+to fill out this, it's good to try to get as much value
+
+00:22:56.280 --> 00:22:59.759
+without asking them to donate much of their time.
+
+00:22:59.760 --> 00:23:02.399
+How has the survey done in this respect?
+
+00:23:02.400 --> 00:23:04.119
+I'm actually very happy with how it's done.
+
+00:23:04.120 --> 00:23:06.639
+We get a few comments from the feedback saying
+
+00:23:06.640 --> 00:23:07.759
+that it was a bit of a long side,
+
+00:23:07.760 --> 00:23:10.759
+but the median time was about 12 minutes,
+
+00:23:10.760 --> 00:23:13.759
+which doesn't seem too bad, and most commonly
+
+00:23:13.760 --> 00:23:16.399
+we saw people completing it in about 8 minutes.
+
+00:23:16.400 --> 00:23:18.879
+For a once-per-year survey,
+
+00:23:18.880 --> 00:23:20.519
+I think this seems fairly reasonable.
+
+00:23:20.520 --> 00:23:24.279
+Getting closer to a 5-10 minute range would be nice,
+
+00:23:24.280 --> 00:23:26.199
+but this isn't far off.
+
+NOTE How long the survey is open for
+
+00:23:26.200 --> 00:23:30.879
+Lastly, we're also going to be considering
+
+00:23:30.880 --> 00:23:32.719
+how long the survey is open for.
+
+00:23:32.720 --> 00:23:36.719
+So from the initial opening date,
+
+00:23:36.720 --> 00:23:38.479
+what we have here is a plot of
+
+00:23:38.480 --> 00:23:41.919
+the page which people ended up on
+
+00:23:41.920 --> 00:23:43.399
+and when they started the survey.
+
+00:23:43.400 --> 00:23:46.759
+So what we can see is a huge spike in the first few days.
+
+00:23:46.760 --> 00:23:50.239
+I've just realised that this plot
+
+00:23:50.240 --> 00:23:53.399
+is actually labelled incorrectly.
+
+00:23:53.400 --> 00:23:55.679
+Please disregard the minutes to complete the survey.
+
+00:23:55.680 --> 00:23:58.839
+This should be days after survey opening
+
+00:23:58.840 --> 00:24:01.519
+that a response is actually submitted.
+
+00:24:01.520 --> 00:24:05.399
+And what we have here is a big spike
+
+00:24:05.400 --> 00:24:08.679
+in popularity in the first week basically,
+
+00:24:08.680 --> 00:24:10.599
+and then it trickles down
+
+00:24:10.600 --> 00:24:11.959
+to a fairly consistent level after that.
+
+00:24:11.960 --> 00:24:15.839
+I'm about to publish a last call for survey responses,
+
+00:24:15.840 --> 00:24:18.279
+so I'll see if any final bump happens,
+
+00:24:18.280 --> 00:24:20.039
+but this indicates that we can probably just
+
+00:24:20.040 --> 00:24:23.079
+have the survey open for a week or two
+
+00:24:23.080 --> 00:24:25.199
+and that should be sufficient.
+
+NOTE Plan going forward
+
+00:24:25.200 --> 00:24:30.839
+Alright, so what's the general plan going forwards?
+
+00:24:30.840 --> 00:24:35.639
+Well, as stated earlier, the idea is to run this annually
+
+00:24:35.640 --> 00:24:38.399
+and then consistently improve the questions,
+
+00:24:38.400 --> 00:24:41.039
+the experience, and the analysis that's done.
+
+00:24:41.040 --> 00:24:43.559
+This year has been the hardest by far
+
+00:24:43.560 --> 00:24:45.839
+because a lot had to be set up from scratch.
+
+00:24:45.840 --> 00:24:50.159
+The hope is that moving on from here,
+
+00:24:50.160 --> 00:24:51.799
+a lot of it can be reused.
+
+00:24:51.800 --> 00:24:54.039
+For example, with my comments about
+
+00:24:54.040 --> 00:24:56.439
+more sophisticated analysis being down the line,
+
+00:24:56.440 --> 00:24:58.439
+once that's all worked out,
+
+00:24:58.440 --> 00:25:00.719
+as long as nothing changes too drastically,
+
+00:25:00.720 --> 00:25:03.559
+we should be able to reuse a lot of that work
+
+00:25:03.560 --> 00:25:05.759
+quite easily in future years.
+
+00:25:05.760 --> 00:25:08.599
+Alright, that's it for now.
+
+00:25:08.600 --> 00:25:11.879
+Hopefully, you've found this an interesting peek
+
+00:25:11.880 --> 00:25:13.359
+into how the survey is operated
+
+00:25:13.360 --> 00:25:15.319
+and some of the initial results,
+
+00:25:15.320 --> 00:25:18.919
+and hopefully, I'll see you around next year
+
+00:25:18.920 --> 00:25:36.960
+for the 2023 survey. Thanks for listening.
diff --git a/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt b/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt
new file mode 100644
index 00000000..20e7c3c7
--- /dev/null
+++ b/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main--chapters.vtt
@@ -0,0 +1,40 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:08.200
+Opening
+
+00:00:24.201 --> 00:00:50.280
+Introduction to Tree-sitter
+
+00:00:50.280 --> 00:01:37.040
+Querying Tree-sitter tree
+
+00:01:37.040 --> 00:02:15.640
+Syntax highlighting
+
+00:02:15.640 --> 00:03:47.120
+Custom syntax highlighting
+
+00:03:47.120 --> 00:05:48.760
+Text objects
+
+00:05:48.760 --> 00:06:20.480
+Code folding
+
+00:06:20.480 --> 00:08:10.480
+Navigating config files
+
+00:08:10.480 --> 00:08:21.560
+Navigating code
+
+00:08:21.560 --> 00:09:31.520
+Intelligent templates
+
+00:09:31.520 --> 00:09:59.080
+Structural editing
+
+00:09:59.080 --> 00:10:26.240
+tree-sitter-save-excursion
+
+00:10:26.240 --> 00:11:03.880
+The future
diff --git a/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt b/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt
new file mode 100644
index 00000000..576f1eaf
--- /dev/null
+++ b/2022/captions/emacsconf-2022-treesitter--treesitter-beyond-syntax-highlighting--abin-simon--main.vtt
@@ -0,0 +1,727 @@
+WEBVTT captioned by sachac
+
+00:00:00.000 --> 00:00:03.240
+Hey everyone, my name is Abin Simon
+
+00:00:03.240 --> 00:00:05.080
+and this talk is about "Tree-sitter:
+
+00:00:05.080 --> 00:00:08.200
+Beyond Syntax Highlighting."
+
+00:00:08.200 --> 00:00:10.720
+For those who are not aware of what Tree-sitter is,
+
+00:00:10.720 --> 00:00:11.720
+let me give you a quick intro.
+
+00:00:11.720 --> 00:00:17.120
+Tree-sitter, at its core, is a parser generator tool
+
+00:00:17.120 --> 00:00:19.440
+and an incremental parsing library.
+
+00:00:19.440 --> 00:00:22.000
+What it essentially means is that it gives you
+
+00:00:22.000 --> 00:00:23.154
+an always up-to-date
+
+00:00:23.155 --> 00:00:24.200
+AST [abstract syntax tree] of your code.
+
+00:00:24.200 --> 00:00:27.960
+In the current Emacs frame, what you see to the right
+
+00:00:27.960 --> 00:00:30.840
+is the AST tree produced by Tree-sitter
+
+00:00:30.840 --> 00:00:33.560
+of the code that is on the left.
+
+00:00:33.560 --> 00:00:37.000
+For example, if you go to this "if" statement,
+
+00:00:37.000 --> 00:00:38.840
+you can see it goes here.
+
+00:00:38.840 --> 00:00:41.440
+It is also really good at handling errors.
+
+00:00:41.440 --> 00:00:44.400
+For example, if I were to delete this [if statement],
+
+00:00:44.400 --> 00:00:47.960
+it still parses out a tree as much as it can,
+
+00:00:47.960 --> 00:00:50.280
+but with an error node.
+
+00:00:50.280 --> 00:00:51.760
+Now let's see how we can query the tree
+
+00:00:51.760 --> 00:00:54.440
+to get the information that we need.
+
+00:00:54.440 --> 00:01:01.480
+Let's first try to get all the identifiers in the buffer.
+
+00:01:01.480 --> 00:01:04.000
+It highlights all the identifiers in the buffer,
+
+00:01:04.000 --> 00:01:05.440
+but let's say we want to get something
+
+00:01:05.440 --> 00:01:07.280
+a little more precise.
+
+00:01:07.280 --> 00:01:10.400
+Let's say we wanted to get this "i" here.
+
+00:01:10.400 --> 00:01:13.280
+This, in our case, would be this identifier
+
+00:01:13.280 --> 00:01:15.200
+inside this assignment expression
+
+00:01:15.200 --> 00:01:27.320
+inside this "for" statement.
+
+00:01:27.320 --> 00:01:29.920
+We can write it out like this.
+
+00:01:29.920 --> 00:01:31.880
+I hope this gives you a basic idea
+
+00:01:31.880 --> 00:01:34.480
+of how Tree-sitter works and how you can query
+
+00:01:34.480 --> 00:01:37.040
+to get the information that you need.
+
+00:01:37.040 --> 00:01:39.520
+First of all, let's see how Tree-sitter can help us
+
+00:01:39.520 --> 00:01:41.880
+with syntax highlighting.
+
+00:01:41.880 --> 00:01:46.480
+This is the default syntax highlighting by Emacs for SQL.
+
+00:01:46.480 --> 00:01:52.000
+Now let's see how Tree-sitter helps.
+
+00:01:52.000 --> 00:01:54.240
+This is the syntax highlighting in Emacs
+
+00:01:54.240 --> 00:01:56.760
+which Tree-sitter enabled.
+
+00:01:56.760 --> 00:01:58.240
+You'll see that we're able to target
+
+00:01:58.240 --> 00:02:01.240
+a lot more things and highlight them.
+
+00:02:01.240 --> 00:02:03.138
+That said, you don't always have to
+
+00:02:03.139 --> 00:02:04.200
+highlight everything.
+
+00:02:04.200 --> 00:02:15.640
+I personally prefer a much simpler theme.
+
+00:02:15.640 --> 00:02:17.880
+Now let's see how Tree-sitter helps you simplify
+
+00:02:17.880 --> 00:02:20.920
+adding custom syntax highlighting to your code.
+
+00:02:20.920 --> 00:02:22.200
+This is a Python file which has
+
+00:02:22.200 --> 00:02:25.640
+a class and a few member functions.
+
+00:02:25.640 --> 00:02:27.680
+Anyone who has used Python will know that
+
+00:02:27.680 --> 00:02:32.040
+the "self" keyword, while it is passed in as an argument,
+
+00:02:32.040 --> 00:02:34.240
+it has more meaning than that.
+
+00:02:34.240 --> 00:02:35.480
+Let's see if you can use Tree-sitter
+
+00:02:35.480 --> 00:02:38.720
+to highlight just the "self" keyword.
+
+00:02:38.720 --> 00:02:40.400
+If you look at the Tree-sitter tree,
+
+00:02:40.400 --> 00:02:43.120
+you can see that this is the first identifier
+
+00:02:43.120 --> 00:02:45.520
+in the list of parameters for a function definition.
+
+00:02:45.520 --> 00:02:55.480
+This is how you would query for the first identifier
+
+00:02:55.480 --> 00:02:59.320
+inside parameters inside a function definition.
+
+00:02:59.320 --> 00:03:02.520
+Now, if you see here, it also matches "cls",
+
+00:03:02.520 --> 00:03:11.360
+but let's restrict it to match just "self".
+
+00:03:11.360 --> 00:03:14.200
+Now we have a Tree-sitter query that identifies
+
+00:03:14.200 --> 00:03:16.960
+the first argument to the function definition
+
+00:03:16.960 --> 00:03:19.640
+and is also called "self".
+
+00:03:19.640 --> 00:03:22.520
+We can use this to apply custom highlighting onto this.
+
+00:03:22.520 --> 00:03:25.000
+This is pretty much all the code
+
+00:03:25.000 --> 00:03:26.520
+that you'll need to do this.
+
+00:03:26.520 --> 00:03:29.240
+The first block here is essentially to say to
+
+00:03:29.240 --> 00:03:32.160
+Tree-sitter to highlight anything with python.self
+
+00:03:32.160 --> 00:03:35.720
+with the face of custom-set.
+
+00:03:35.720 --> 00:03:37.520
+Now the second block here essentially is
+
+00:03:37.520 --> 00:03:39.800
+how we match for that.
+
+00:03:39.800 --> 00:03:41.800
+Now if you go back into a Python buffer
+
+00:03:41.800 --> 00:03:44.680
+and re-enable python-mode, we'll see that "self"
+
+00:03:44.680 --> 00:03:47.120
+is highlighted differently.
+
+00:03:47.120 --> 00:03:48.880
+How about creating text objects?
+
+00:03:48.880 --> 00:03:50.440
+Tree-sitter can help there too.
+
+00:03:50.440 --> 00:03:53.080
+For those who don't know, text objects
+
+00:03:53.080 --> 00:03:54.440
+is an idea that comes from Vim,
+
+00:03:54.440 --> 00:03:57.760
+and you can do things like select word,
+
+00:03:57.760 --> 00:04:00.520
+delete word, things like that.
+
+00:04:00.520 --> 00:04:06.200
+There are other text objects like line and paragraph.
+
+00:04:06.200 --> 00:04:09.000
+For each text object, you can have operations
+
+00:04:09.000 --> 00:04:09.760
+that are defined on them.
+
+00:04:09.760 --> 00:04:13.600
+For example, delete, copy, select, comment,
+
+00:04:13.600 --> 00:04:16.400
+all of these are operations that you can do.
+
+00:04:16.400 --> 00:04:19.400
+Let's try and use Tree-sitter to add more text objects.
+
+00:04:19.400 --> 00:04:20.560
+This is a plugin that I wrote
+
+00:04:20.560 --> 00:04:25.000
+which lets you add more text objects into Emacs.
+
+00:04:25.000 --> 00:04:27.880
+It helps you code aware text objects
+
+00:04:27.880 --> 00:04:31.880
+like functions, conditionals, loops, and such.
+
+00:04:31.880 --> 00:04:34.360
+Let's see an example scenario of how
+
+00:04:34.360 --> 00:04:35.920
+something like this could come in handy.
+
+00:04:35.920 --> 00:04:39.280
+For example, I can select inside this condition
+
+00:04:39.280 --> 00:04:42.960
+or inside this function and do things like that.
+
+00:04:42.960 --> 00:04:44.520
+Let's say I want to take this conditional,
+
+00:04:44.520 --> 00:04:47.160
+move to the next function, and create it here.
+
+00:04:47.160 --> 00:04:49.640
+What I would do is something like
+
+00:04:49.640 --> 00:04:52.320
+delete the conditional, move to the next function,
+
+00:04:52.320 --> 00:04:56.240
+create a conditional there, and paste.
+
+00:04:56.240 --> 00:04:57.160
+Let's try another example.
+
+00:04:57.160 --> 00:05:01.360
+Let's say I want to take this and move it to the end.
+
+00:05:01.360 --> 00:05:02.960
+If I had to do it without text objects,
+
+00:05:02.960 --> 00:05:06.800
+I'd probably have to go back to the previous comma,
+
+00:05:06.800 --> 00:05:10.440
+delete till next comma, find the closing bracket,
+
+00:05:10.440 --> 00:05:11.880
+and paste before.
+
+00:05:11.880 --> 00:05:14.040
+That works, but let's see
+
+00:05:14.040 --> 00:05:16.520
+how Tree-sitter can simplify it.
+
+00:05:16.520 --> 00:05:19.240
+With Tree-sitter, I can say delete the argument,
+
+00:05:19.240 --> 00:05:22.880
+go to the end of the next argument, and then paste.
+
+00:05:22.880 --> 00:05:25.280
+Tree-sitter essentially helps Emacs
+
+00:05:25.280 --> 00:05:27.240
+understand the code better semantically.
+
+00:05:27.240 --> 00:05:29.600
+Here is yet another use case.
+
+00:05:29.600 --> 00:05:31.480
+I work at a remote company,
+
+00:05:31.480 --> 00:05:33.440
+and I often find myself being in a call
+
+00:05:33.440 --> 00:05:35.400
+with my teammates, explaining the code to them.
+
+00:05:35.400 --> 00:05:38.000
+And one thing that really comes in handy
+
+00:05:38.000 --> 00:05:39.760
+is the narrowing capability of Emacs.
+
+00:05:39.760 --> 00:05:43.040
+Specifically, the fancy-narrow package.
+
+00:05:43.040 --> 00:05:44.840
+I use it to narrow just the function,
+
+00:05:44.840 --> 00:05:48.760
+or I could narrow to the conditional.
+
+00:05:48.760 --> 00:05:51.520
+Next to the end, the list would be code folding.
+
+00:05:51.520 --> 00:05:54.480
+This is a package which uses Tree-sitter
+
+00:05:54.480 --> 00:05:57.560
+to improve the code folding functionalities of Emacs.
+
+00:05:57.560 --> 00:06:00.200
+Code folding has always been this thing
+
+00:06:00.200 --> 00:06:02.280
+that I've had a love-hate relationship with.
+
+00:06:02.280 --> 00:06:04.280
+It usually works most of the time,
+
+00:06:04.280 --> 00:06:06.960
+but then fails if the indentation is wrong
+
+00:06:06.960 --> 00:06:09.160
+or we do something weird with the arguments.
+
+00:06:09.160 --> 00:06:11.680
+But now with Tree-sitter in the mix,
+
+00:06:11.680 --> 00:06:12.720
+it's a lot more precise.
+
+00:06:12.720 --> 00:06:17.040
+I can fold comments, I can fold functions,
+
+00:06:17.040 --> 00:06:20.480
+I can fold conditionals. You get the idea.
+
+00:06:20.480 --> 00:06:23.840
+I work with Kubernetes, which means I end up
+
+00:06:23.840 --> 00:06:28.080
+having to write and read a lot of YAML files.
+
+00:06:28.080 --> 00:06:31.840
+And navigating big YAML files is a mess.
+
+00:06:31.840 --> 00:06:35.760
+The two main problems are figuring out where I am,
+
+00:06:35.760 --> 00:06:38.760
+and two, navigating to where I want to be.
+
+00:06:38.760 --> 00:06:41.760
+Let's see how Tree-sitter can help us with both of this.
+
+00:06:41.760 --> 00:06:43.840
+This is an example YAML file.
+
+00:06:43.840 --> 00:06:47.080
+To be precise, this is the values file
+
+00:06:47.080 --> 00:06:48.640
+of the Redis helm chart.
+
+00:06:48.640 --> 00:06:52.240
+I'm somewhere in the file on tag under image,
+
+00:06:52.240 --> 00:06:54.880
+but I don't know what this tag is for.
+
+00:06:54.880 --> 00:06:57.240
+But with the help of Tree-sitter,
+
+00:06:57.240 --> 00:06:59.160
+I've been able to add this information
+
+00:06:59.160 --> 00:07:00.440
+into my header line.
+
+00:07:00.440 --> 00:07:02.960
+If you see in the header line,
+
+00:07:02.960 --> 00:07:05.880
+you'll see that I'm under sentinel.image.
+
+00:07:05.880 --> 00:07:08.800
+Now let's see how this helps with navigation.
+
+00:07:08.800 --> 00:07:12.680
+Let's say I want to enable persistence on master node.
+
+00:07:12.680 --> 00:07:18.200
+So with the help of Tree-sitter,
+
+00:07:18.200 --> 00:07:20.400
+I was able to enumerate every field
+
+00:07:20.400 --> 00:07:22.200
+that is available in this YAML file,
+
+00:07:22.200 --> 00:07:24.520
+and I can pass that information onto imenu,
+
+00:07:24.520 --> 00:07:28.040
+which I can then use to go to exactly where I want to.
+
+00:07:28.040 --> 00:07:30.000
+Also, since we're not dealing with
+
+00:07:30.000 --> 00:07:32.600
+any language specific constructs,
+
+00:07:32.600 --> 00:07:34.040
+this is very easy to extend to
+
+00:07:34.040 --> 00:07:35.760
+other similar languages
+
+00:07:35.760 --> 00:07:37.440
+or config files in this case.
+
+00:07:37.440 --> 00:07:39.520
+So for example, this is a JSON file,
+
+00:07:39.520 --> 00:07:44.800
+and I can navigate to location or project.
+
+00:07:44.800 --> 00:07:48.320
+And just like in YAML, it shows me where I'm at.
+
+00:07:48.320 --> 00:07:49.920
+I'm in projects.name,
+
+00:07:49.920 --> 00:07:52.880
+or I'm inside projects.highlights.
+
+00:07:52.880 --> 00:07:55.600
+Or how about Nix?
+
+00:07:55.600 --> 00:07:57.480
+This is my home.nix file.
+
+00:07:57.480 --> 00:08:01.040
+Again, I can search for services,
+
+00:08:01.040 --> 00:08:04.640
+and this lists me all the services that I've enabled.
+
+00:08:04.640 --> 00:08:06.720
+How about just services.description?
+
+00:08:06.720 --> 00:08:08.160
+So this is all the services
+
+00:08:08.160 --> 00:08:10.480
+that I've enabled and have descriptions.
+
+00:08:10.480 --> 00:08:12.720
+Now that we have seen this for config files,
+
+00:08:12.720 --> 00:08:15.040
+let's see how similar things apply for code.
+
+00:08:15.040 --> 00:08:16.760
+Just like in config files,
+
+00:08:16.760 --> 00:08:18.680
+I can see which function I'm under,
+
+00:08:18.680 --> 00:08:21.560
+and if I go to the next function, it changes.
+
+00:08:21.560 --> 00:08:23.960
+Okay, here is something really awesome.
+
+00:08:23.960 --> 00:08:26.600
+This is probably one of my favorites,
+
+00:08:26.600 --> 00:08:30.400
+and one of the things that actually made me understand
+
+00:08:30.400 --> 00:08:34.080
+how powerful Tree-sitter is, and got me into it.
+
+00:08:34.080 --> 00:08:35.680
+I work with a lot of Go code,
+
+00:08:35.680 --> 00:08:38.840
+and anyone who has worked with Go will tell you
+
+00:08:38.840 --> 00:08:41.040
+how repetitive it is handling errors.
+
+00:08:41.040 --> 00:08:42.800
+For those who don't write Go,
+
+00:08:42.800 --> 00:08:45.200
+let me give you a rough idea of what I'm talking about.
+
+00:08:45.200 --> 00:08:47.000
+If you want to bubble up the error,
+
+00:08:47.000 --> 00:08:49.920
+the way you would do it is just to return the error
+
+00:08:49.920 --> 00:08:51.400
+to the function that called it.
+
+00:08:51.400 --> 00:08:55.720
+Over here, you can either return nil or an empty value,
+
+00:08:55.720 --> 00:08:57.640
+and at the end, you return error.
+
+00:08:57.640 --> 00:09:00.200
+Let's try and use Tree-sitter to do this.
+
+00:09:00.200 --> 00:09:03.120
+Using the help of Tree-sitter, let's make Emacs
+
+00:09:03.120 --> 00:09:06.421
+go back, figure out what the return arguments are,
+
+00:09:06.422 --> 00:09:08.240
+figure out what their default values are,
+
+00:09:08.240 --> 00:09:11.480
+and automatically fill in the return statement.
+
+00:09:11.480 --> 00:09:13.040
+It would look something like this.
+
+00:09:13.040 --> 00:09:16.120
+In my case, it filled in the complete form,
+
+00:09:16.120 --> 00:09:18.320
+it figured out what the return arguments are,
+
+00:09:18.320 --> 00:09:19.320
+what their types are,
+
+00:09:19.320 --> 00:09:20.960
+and what their default values are,
+
+00:09:20.960 --> 00:09:22.800
+and filled out the entire return.
+
+00:09:22.800 --> 00:09:24.760
+And since this is a template,
+
+00:09:24.760 --> 00:09:27.720
+I can go to the next function, do the same thing,
+
+00:09:27.720 --> 00:09:29.560
+next function, do the same thing,
+
+00:09:29.560 --> 00:09:31.520
+next function, do the same thing.
+
+00:09:31.520 --> 00:09:34.360
+Here is a really fascinating use case of Tree-sitter,
+
+00:09:34.360 --> 00:09:36.320
+structural editing.
+
+00:09:36.320 --> 00:09:38.200
+You might be aware of plugins like paredit,
+
+00:09:38.200 --> 00:09:40.280
+which seems to "know" your code.
+
+00:09:40.280 --> 00:09:42.520
+This sort of takes it onto another level.
+
+00:09:42.520 --> 00:09:46.040
+It is in its early stages, but what this lets you do
+
+00:09:46.040 --> 00:09:48.920
+is completely treat your code as an AST,
+
+00:09:48.920 --> 00:09:52.000
+and edit as if it's a tree instead of characters.
+
+00:09:52.000 --> 00:09:54.640
+I am not going to go much in depth into it,
+
+00:09:54.640 --> 00:09:57.000
+but if you're interested, there is a talk
+
+00:09:57.000 --> 00:09:59.080
+from last year's EmacsConf around it.
+
+00:09:59.080 --> 00:10:02.320
+I'm just going to end this with one last tiny thing
+
+00:10:02.320 --> 00:10:04.920
+that I found in the tree-sitter-extras package.
+
+00:10:04.920 --> 00:10:07.600
+It's this tiny macro called tree-sitter-save-excursion.
+
+00:10:07.600 --> 00:10:11.240
+It works pretty much like save-excursion, but better.
+
+00:10:11.240 --> 00:10:13.400
+It uses the Tree-sitter syntax tree
+
+00:10:13.400 --> 00:10:14.800
+instead of just the code
+
+00:10:14.800 --> 00:10:16.720
+to figure out where to restore the position.
+
+00:10:16.720 --> 00:10:20.200
+My main use case for this was with code formatters.
+
+00:10:20.200 --> 00:10:22.080
+Since the code moves around a lot
+
+00:10:22.080 --> 00:10:23.160
+when it gets formatted,
+
+00:10:23.160 --> 00:10:25.000
+save-excursion was completely useless,
+
+00:10:25.000 --> 00:10:26.240
+but this came in handy.
+
+00:10:26.240 --> 00:10:28.120
+I'll just leave you off with
+
+00:10:28.120 --> 00:10:31.120
+what the future of Tree-sitter looks like for Emacs.
+
+00:10:31.120 --> 00:10:33.760
+So far, every Tree-sitter related feature
+
+00:10:33.760 --> 00:10:36.040
+that I've talked about is powered by this library.
+
+00:10:36.040 --> 00:10:42.320
+But there is talk about Tree-sitter coming into the core.
+
+00:10:42.320 --> 00:10:45.840
+It will most probably be landing in Emacs 29,
+
+00:10:45.840 --> 00:10:48.720
+and if you want to check out the work on Tree-sitter
+
+00:10:48.720 --> 00:10:51.200
+in core Emacs, you can check out
+
+00:10:51.200 --> 00:10:52.920
+the features/tree-sitter branch.
+
+00:10:52.920 --> 00:10:56.640
+You'll probably see more and more features and packages
+
+00:10:56.640 --> 00:10:59.640
+relying upon Tree-sitter, and even major modes
+
+00:10:59.640 --> 00:11:01.560
+being powered by Tree-sitter.
+
+00:11:01.560 --> 00:11:03.880
+And that's a wrap from me. Thank you.
diff --git a/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt
new file mode 100644
index 00000000..87f60bd6
--- /dev/null
+++ b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--answers.vtt
@@ -0,0 +1,2153 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.600
+ going to start recording. All right. Thanks, Michael, for
+
+00:00:03.600 --> 00:00:05.040
+ the great talk. So
+
+00:00:05.040 --> 00:00:09.070
+ the Q&A is live now. Folks can ask questions on IRC or the
+
+00:00:09.070 --> 00:00:10.440
+ pad. And then
+
+00:00:10.440 --> 00:00:12.660
+ at some later point, we'll also open up this PDB room
+
+00:00:12.660 --> 00:00:13.860
+ itself for people to join
+
+00:00:13.860 --> 00:00:16.310
+ and ask their questions here if they want. Michael, take it
+
+00:00:16.310 --> 00:00:16.720
+ away.
+
+00:00:16.720 --> 00:00:21.470
+ Okay, I will start with the first question of etherpad is
+
+00:00:21.470 --> 00:00:22.600
+ are you using
+
+00:00:22.600 --> 00:00:28.920
+ this as it as a replacement of x ex WM? No, not yet. But I
+
+00:00:28.920 --> 00:00:33.040
+'m planning to. I'm a
+
+00:00:33.040 --> 00:00:39.700
+ I use x WM since many years like for my main computing
+
+00:00:39.700 --> 00:00:42.400
+ environment with Emacs.
+
+00:00:42.400 --> 00:00:47.530
+ And I would love to have a replacement and Wayland. I'm not
+
+00:00:47.530 --> 00:00:49.120
+ actually that sure
+
+00:00:49.120 --> 00:00:54.390
+ if that needed. But I plan on using it. It's not finished.
+
+00:00:54.390 --> 00:00:55.760
+ So is this testable?
+
+00:00:55.760 --> 00:01:04.660
+ Yes, it is testable. I have gonna provide you the code. At
+
+00:01:04.660 --> 00:01:05.960
+ the end of the
+
+00:01:05.960 --> 00:01:10.180
+ video, there was a link to my site, but there's no site yet
+
+00:01:10.180 --> 00:01:12.160
+. I bought this URL a
+
+00:01:12.160 --> 00:01:16.520
+ year ago, and that's a good reason to put something on
+
+00:01:16.520 --> 00:01:18.040
+ there. So wait a few
+
+00:01:18.040 --> 00:01:22.250
+ days and you can download a git repository. At least that's
+
+00:01:22.250 --> 00:01:23.640
+ the plan. And
+
+00:01:23.640 --> 00:01:26.710
+ then you can test it. Input handling is still missing, as I
+
+00:01:26.710 --> 00:01:30.560
+ said. Yes, that makes
+
+00:01:30.560 --> 00:01:36.390
+ it a bit rough. So the input is only guided by where the
+
+00:01:36.390 --> 00:01:39.560
+ mouse pointer is. And
+
+00:01:39.560 --> 00:01:43.770
+ it's missing in the C part in the C server part. But if
+
+00:01:43.770 --> 00:01:45.160
+ this is in there, I
+
+00:01:45.160 --> 00:01:49.450
+ think you can use it as a replacement. So it's testable,
+
+00:01:49.450 --> 00:01:50.240
+ and it's not a
+
+00:01:50.240 --> 00:01:54.140
+ replacement yet. Have you considered contributing to Emacs
+
+00:01:54.140 --> 00:01:55.080
+ cores? The next
+
+00:01:55.080 --> 00:02:00.590
+ question? Yes. Is it a general question? If I would like to
+
+00:02:00.590 --> 00:02:03.680
+ do that? Yeah, I got
+
+00:02:03.680 --> 00:02:07.560
+ quite a lot into Emacs core in the last year because I did
+
+00:02:07.560 --> 00:02:08.800
+ language work with
+
+00:02:08.800 --> 00:02:13.030
+ Lisp and really nerded out and got to know the core. So I
+
+00:02:13.030 --> 00:02:15.360
+ like it. Why not? If
+
+00:02:15.360 --> 00:02:18.980
+ it's a more specific question, if I would like to
+
+00:02:18.980 --> 00:02:20.840
+ contribute the Wayland
+
+00:02:20.840 --> 00:02:24.810
+ support to Emacs core, then I'm not that sure if it belongs
+
+00:02:24.810 --> 00:02:27.160
+ there. Like at first,
+
+00:02:27.160 --> 00:02:29.660
+ I thought, of course, you have to put it in the core. It's
+
+00:02:29.660 --> 00:02:30.520
+ C. It has to work
+
+00:02:30.520 --> 00:02:35.120
+ together. But after I looked into it a little bit more, how
+
+00:02:35.120 --> 00:02:36.280
+ to do a Wayland
+
+00:02:36.280 --> 00:02:39.270
+ compositor with Emacs, I found out, okay, there's this Way
+
+00:02:39.270 --> 00:02:40.280
+land protocol and
+
+00:02:40.280 --> 00:02:43.970
+ all the programs that are working together in a Wayland
+
+00:02:43.970 --> 00:02:45.560
+ desktop, they talk
+
+00:02:45.560 --> 00:02:51.150
+ in this protocol. And when I got Emacs to talk with the Way
+
+00:02:51.150 --> 00:02:53.320
+land protocol, it
+
+00:02:53.320 --> 00:02:57.200
+ was solved. And that is in the library, because it's an
+
+00:02:57.200 --> 00:02:58.920
+ asynchronous process,
+
+00:02:58.920 --> 00:03:02.440
+ like a network connection. And Emacs has an event loop that
+
+00:03:02.440 --> 00:03:05.560
+ listens to
+
+00:03:06.480 --> 00:03:06.480
+
+
+00:03:06.480 --> 00:03:09.490
+ messages on the network. So it's integrated into the Emacs
+
+00:03:09.490 --> 00:03:10.360
+ core. You
+
+00:03:10.360 --> 00:03:13.870
+ don't have to do anything more. But where it gets
+
+00:03:13.870 --> 00:03:15.920
+ interesting, again, is this
+
+00:03:15.920 --> 00:03:21.900
+ idea I had, maybe we could use it for more in Emacs. Emacs
+
+00:03:21.900 --> 00:03:23.840
+ is fundamentally
+
+00:03:23.840 --> 00:03:26.740
+ about drawing buffers to a screen and not fundamentally.
+
+00:03:26.740 --> 00:03:27.720
+ But the part that's
+
+00:03:27.720 --> 00:03:30.800
+ not a Lisp machine, the graphical part, it's drawing buff
+
+00:03:30.800 --> 00:03:32.000
+ers to a screen and you
+
+00:03:32.000 --> 00:03:36.060
+ have to composite these buffers somehow. And now we're
+
+00:03:36.060 --> 00:03:38.400
+ using different desktop
+
+00:03:38.400 --> 00:03:43.640
+ toolkits like GTK on the Linux. And maybe we don't have to,
+
+00:03:43.640 --> 00:03:45.000
+ we can just draw
+
+00:03:45.000 --> 00:03:49.980
+ pixel buffers, like draw into a pixel buffer. Like, I don't
+
+00:03:49.980 --> 00:03:50.880
+ know, what do we
+
+00:03:50.880 --> 00:03:55.640
+ use for rendering? I forgot, Cairo or something. And this
+
+00:03:55.640 --> 00:03:56.760
+ could just write
+
+00:03:56.760 --> 00:03:59.770
+ into a pixel buffer. So now we arranged, and Emacs is
+
+00:03:59.770 --> 00:04:01.080
+ already a window manager.
+
+00:04:01.080 --> 00:04:03.970
+ So it's not that difficult to implement a window manager
+
+00:04:03.970 --> 00:04:05.320
+ with Emacs because Emacs
+
+00:04:05.320 --> 00:04:11.060
+ is a window manager, pretty good one, I think. And no, I
+
+00:04:11.060 --> 00:04:13.040
+ just lost a little bit
+
+00:04:13.040 --> 00:04:16.670
+ more train of thought. But so far to contributing to the
+
+00:04:16.670 --> 00:04:17.960
+ core and we could do
+
+00:04:17.960 --> 00:04:20.840
+ more with it. So next question.
+
+00:04:20.840 --> 00:04:23.960
+ - One thing, Michael, quickly. Sorry. Yeah, it would be
+
+00:04:23.960 --> 00:04:25.200
+ great if you could also
+
+00:04:25.200 --> 00:04:27.510
+ repeat the questions for the stream before you answer them.
+
+00:04:27.510 --> 00:04:28.040
+ That would be
+
+00:04:28.040 --> 00:04:28.440
+ awesome.
+
+00:04:28.440 --> 00:04:30.120
+ - I will do that.
+
+00:04:30.120 --> 00:04:30.920
+ - Thank you.
+
+00:04:32.600 --> 00:04:32.600
+
+
+00:04:32.600 --> 00:04:36.260
+ Question. Is this valent compositor in Emacs? What
+
+00:04:36.260 --> 00:04:39.040
+ different with XReparent in
+
+00:04:39.040 --> 00:04:45.290
+ X11? Okay, this is a little bit difficult for me to
+
+00:04:45.290 --> 00:04:48.520
+ understand, but I answered
+
+00:04:48.520 --> 00:04:53.550
+ anyway. So first, is this a valent compositor in Emacs? I
+
+00:04:53.550 --> 00:04:54.840
+ would say no,
+
+00:04:54.840 --> 00:04:58.870
+ because the Emacs doesn't do the valent compositoring. I
+
+00:04:58.870 --> 00:05:00.440
+ first planned to do it
+
+00:05:00.440 --> 00:05:03.130
+ like this, but it doesn't work out like this because you
+
+00:05:03.130 --> 00:05:06.120
+ have to handle file
+
+00:05:06.120 --> 00:05:10.120
+ descriptors and Emacs can't handle file descriptors except
+
+00:05:10.120 --> 00:05:11.480
+ you go down to the C
+
+00:05:11.480 --> 00:05:19.930
+ part. So no, it's not. It's a C, a WL roots valent compos
+
+00:05:19.930 --> 00:05:22.840
+itor that talks to
+
+00:05:22.840 --> 00:05:29.290
+ Emacs and Emacs is, it's just like a helper compositor. Em
+
+00:05:29.290 --> 00:05:31.160
+acs says where to
+
+00:05:31.160 --> 00:05:34.380
+ put the windows. It's the window manager. And in the future
+
+00:05:34.380 --> 00:05:35.360
+, where to put the
+
+00:05:35.360 --> 00:05:40.170
+ inputs so that you can insert Emacs into the input stream
+
+00:05:40.170 --> 00:05:43.320
+ like XWM does it. Okay,
+
+00:05:43.320 --> 00:05:49.070
+ then what different with XReparent in X11? I don't actually
+
+00:05:49.070 --> 00:05:51.000
+ know what XReparent
+
+00:05:51.000 --> 00:05:55.150
+ is, so I'm sorry. I have to skip this one. How would
+
+00:05:55.150 --> 00:05:57.000
+ multiple monitors be
+
+00:05:57.000 --> 00:05:59.990
+ handled? Separate frames? Yes, separate frames. This is
+
+00:05:59.990 --> 00:06:01.160
+ already testable. It's
+
+00:06:01.160 --> 00:06:08.540
+ implemented. As soon as a new monitor crops up, the Emacs
+
+00:06:08.540 --> 00:06:10.320
+ is, the valent
+
+00:06:10.320 --> 00:06:15.490
+ protocol informs about a new output event and Emacs then
+
+00:06:15.490 --> 00:06:17.000
+ pops up a new frame
+
+00:06:17.000 --> 00:06:22.240
+ on this output. And depending on how usable you want to
+
+00:06:22.240 --> 00:06:24.760
+ have it, you can just,
+
+00:06:24.760 --> 00:06:27.160
+ there could be a menu like where do you want the output? Do
+
+00:06:27.160 --> 00:06:27.840
+ you want to have a
+
+00:06:27.840 --> 00:06:30.230
+ screen on it or something like that? And then you have
+
+00:06:30.230 --> 00:06:31.480
+ output handling. Output
+
+00:06:31.480 --> 00:06:35.100
+ handling is already working. So separate frames, one per
+
+00:06:35.100 --> 00:06:37.480
+ output because that's
+
+00:06:37.480 --> 00:06:41.010
+ the Emacs analog. You have windows, you have frames, frames
+
+00:06:41.010 --> 00:06:42.760
+ are like monitors.
+
+00:06:42.760 --> 00:06:45.800
+ And the special thing about valent outputs is they don't
+
+00:06:45.800 --> 00:06:46.600
+ have to be a whole
+
+00:06:46.600 --> 00:06:49.980
+ monitor or hardware device. They can also be like a normal
+
+00:06:49.980 --> 00:06:52.840
+ frame. Next question
+
+00:06:52.840 --> 00:06:57.440
+ is, could you make it so you can restart Emacs without
+
+00:06:57.440 --> 00:06:59.400
+ logging out or switch to
+
+00:06:59.400 --> 00:07:02.640
+ non-Emacs buffer while Emacs is blocking? These are the
+
+00:07:02.640 --> 00:07:05.080
+ biggest issues with XWM.
+
+00:07:05.080 --> 00:07:13.240
+ While Emacs is blocking. Okay, I have to think about this a
+
+00:07:13.240 --> 00:07:14.760
+ little bit
+
+00:07:16.120 --> 00:07:19.270
+ because right now I have a problem with restarting and the
+
+00:07:19.270 --> 00:07:20.600
+ code I wrote. Emacs
+
+00:07:20.600 --> 00:07:25.340
+ starts the valent server and then starts to talk to it, the
+
+00:07:25.340 --> 00:07:28.520
+ server to Emacs. And
+
+00:07:28.520 --> 00:07:33.070
+ as soon as the server terminates, Emacs terminates. Because
+
+00:07:33.070 --> 00:07:34.680
+ GTK has this feature
+
+00:07:34.680 --> 00:07:38.550
+ and it's a bug since several years and they know it, but
+
+00:07:38.550 --> 00:07:39.880
+ apparently it's a
+
+00:07:39.880 --> 00:07:44.830
+ feature, not a bug. So as soon as a valent GTK window
+
+00:07:44.830 --> 00:07:47.000
+ terminates, it terminates
+
+00:07:47.000 --> 00:07:51.420
+ its process. That means if there's an Emacs frame on valent
+
+00:07:51.420 --> 00:07:52.440
+ and the frame is
+
+00:07:52.440 --> 00:07:57.610
+ powered by GTK as Emacs currently does it, valent termin
+
+00:07:57.610 --> 00:07:59.560
+ates the frame, Emacs
+
+00:07:59.560 --> 00:08:02.870
+ gets terminated, whole thing is terminated. Well, normally
+
+00:08:02.870 --> 00:08:03.480
+ you would like
+
+00:08:03.480 --> 00:08:06.500
+ something that like Emacs terminal frame, and then you pop
+
+00:08:06.500 --> 00:08:07.640
+ open valent buffer
+
+00:08:07.640 --> 00:08:10.160
+ or something like that. And it's just a long running Emacs
+
+00:08:10.160 --> 00:08:11.640
+ session, but that's
+
+00:08:11.640 --> 00:08:16.670
+ a blocker right now and it's GTK's fault. But we already
+
+00:08:16.670 --> 00:08:18.040
+ know the other
+
+00:08:18.040 --> 00:08:22.220
+ bug we have since years. And so I don't think this one is
+
+00:08:22.220 --> 00:08:23.640
+ resolved either.
+
+00:08:23.640 --> 00:08:29.040
+ So what does mean or switch to non-Emacs buffers while Em
+
+00:08:29.040 --> 00:08:31.000
+acs is blocking? No,
+
+00:08:31.000 --> 00:08:35.090
+ you can't. Okay. Now you can't do this because Emacs does
+
+00:08:35.090 --> 00:08:36.200
+ the window managing
+
+00:08:36.200 --> 00:08:43.700
+ as in EXWM. So there's a new window or you want to switch a
+
+00:08:43.700 --> 00:08:45.960
+ window. So it has
+
+00:08:45.960 --> 00:08:50.640
+ to go through Emacs. Emacs gets a request for new window or
+
+00:08:50.640 --> 00:08:52.280
+ Emacs just says layout
+
+00:08:52.280 --> 00:08:55.820
+ this window at this point. And if Emacs as it's single
+
+00:08:55.820 --> 00:08:58.200
+ threaded is blocked, it
+
+00:08:58.200 --> 00:09:05.830
+ can't issue this layout request. So yeah, that's not going
+
+00:09:05.830 --> 00:09:09.320
+ to work out as long
+
+00:09:09.320 --> 00:09:17.190
+ as Emacs is just single threaded. Next question. Did this
+
+00:09:17.190 --> 00:09:19.400
+ project can implement
+
+00:09:19.400 --> 00:09:23.680
+ mirror of buffer for Emacs different window? Okay. I think
+
+00:09:23.680 --> 00:09:25.320
+ I got this question.
+
+00:09:27.320 --> 00:09:31.810
+ Can you, okay. In Emacs normally you know how buffers work.
+
+00:09:31.810 --> 00:09:32.760
+ Like you have one
+
+00:09:32.760 --> 00:09:35.420
+ buffer, you split it, you have two buffers, but it's the
+
+00:09:35.420 --> 00:09:37.000
+ same buffer. Then you can
+
+00:09:37.000 --> 00:09:39.320
+ take one of the buffers and look at another place in this
+
+00:09:39.320 --> 00:09:42.360
+ buffer. You can't do
+
+00:09:42.360 --> 00:09:45.930
+ this with Emacs buffers, but you can't do it like an EXWM.
+
+00:09:45.930 --> 00:09:47.080
+ You can't do it with
+
+00:09:47.080 --> 00:09:50.980
+ the X windows because there's only one view on the X
+
+00:09:50.980 --> 00:09:54.440
+ windows. So now the special
+
+00:09:54.440 --> 00:09:57.790
+ thing with Valent, you can have multiple views on the same
+
+00:09:57.790 --> 00:10:00.040
+ window. And when I got
+
+00:10:00.040 --> 00:10:03.210
+ to implement this idea, I was, yeah, of course I'm going to
+
+00:10:03.210 --> 00:10:04.440
+ do multiple views,
+
+00:10:04.440 --> 00:10:09.710
+ same window as Emacs does it. And I had it implemented. And
+
+00:10:09.710 --> 00:10:11.560
+ then I found out, no,
+
+00:10:11.560 --> 00:10:16.660
+ this is not going to work. Because a window has always one
+
+00:10:16.660 --> 00:10:18.920
+ size. Like you can't,
+
+00:10:18.920 --> 00:10:23.000
+ if you have a video open, you can't just tell it, make it
+
+00:10:23.000 --> 00:10:24.680
+ this size. Or if you have
+
+00:10:24.680 --> 00:10:29.080
+ a web browser open and you can't have different sizes. So
+
+00:10:29.080 --> 00:10:32.360
+ it's in principle, it's
+
+00:10:32.360 --> 00:10:37.910
+ comfortable with the Emacs model. Like the normal desktop
+
+00:10:37.910 --> 00:10:39.640
+ model doesn't work with Emacs. So
+
+00:10:39.640 --> 00:10:44.200
+ no, this still doesn't work. You can do a hack. I tried it.
+
+00:10:44.200 --> 00:10:45.320
+ You have like one big
+
+00:10:45.320 --> 00:10:48.750
+ window that you have other windows and you scale them or
+
+00:10:48.750 --> 00:10:50.600
+ you crop them, but this isn't
+
+00:10:50.600 --> 00:10:54.890
+ well supported in WL roots. And also it doesn't make a lot
+
+00:10:54.890 --> 00:10:57.720
+ of sense actually. So I scrapped it
+
+00:10:57.720 --> 00:11:02.030
+ and there's just one view. Okay. So just one view because
+
+00:11:02.030 --> 00:11:04.280
+ it doesn't make a lot of sense to have
+
+00:11:04.280 --> 00:11:08.120
+ multiple views. How does this next question, how does the
+
+00:11:08.120 --> 00:11:10.840
+ single threaded, threaded affects
+
+00:11:10.840 --> 00:11:16.470
+ the project? Yeah. And so far as it does affect any Emacs
+
+00:11:16.470 --> 00:11:19.640
+ package, like it's not a special
+
+00:11:19.640 --> 00:11:25.400
+ problem, not a, not a actual problem. Like the only, only,
+
+00:11:25.400 --> 00:11:26.480
+ um, um,
+
+00:11:26.480 --> 00:11:32.850
+ there's just one thing where Emacs could block, uh, the
+
+00:11:32.850 --> 00:11:35.720
+ other windows. It's when the other window
+
+00:11:35.720 --> 00:11:39.730
+ requests a layout, like there's a new program that opened a
+
+00:11:39.730 --> 00:11:42.760
+ window or another window opened
+
+00:11:42.760 --> 00:11:46.840
+ and Emacs is blocking and can't service this new surface
+
+00:11:46.840 --> 00:11:49.400
+ request. So you won't see anything,
+
+00:11:49.400 --> 00:11:53.620
+ but except from that, um, if you see the window Emacs hangs
+
+00:11:53.620 --> 00:11:57.320
+ like with the EXWVM, you just can use
+
+00:11:57.320 --> 00:12:00.790
+ the other program because it's not coupled to Emacs in any
+
+00:12:00.790 --> 00:12:02.120
+ significant way.
+
+00:12:03.720 --> 00:12:08.190
+ Um, and the good thing is, and that's the short side remark
+
+00:12:08.190 --> 00:12:11.240
+. If you want to go further than our
+
+00:12:11.240 --> 00:12:14.000
+ single threaded thing, it's like, I think we, we have a
+
+00:12:14.000 --> 00:12:16.200
+ talk somewhere in this conference, like,
+
+00:12:16.200 --> 00:12:21.420
+ um, how Emacs was always async and is it, is async and Em
+
+00:12:21.420 --> 00:12:24.200
+acs is async. Well, we have async
+
+00:12:24.200 --> 00:12:27.670
+ processes. We have callbacks, we have network processes we
+
+00:12:27.670 --> 00:12:29.800
+ can use asynchronously. And I think
+
+00:12:29.800 --> 00:12:33.820
+ that's the way forward for Emacs to don't be blocking, like
+
+00:12:33.820 --> 00:12:35.800
+ have worker threads, something
+
+00:12:35.800 --> 00:12:40.140
+ like this and have a main thing because it's one big muddle
+
+00:12:40.140 --> 00:12:43.160
+ of muddle of code. I don't think you
+
+00:12:43.160 --> 00:12:49.280
+ can just separate it. So, but we could lean more into these
+
+00:12:49.280 --> 00:12:53.320
+ helpers and workers like Node.js does
+
+00:12:53.320 --> 00:12:57.950
+ it or something like that. So next question is this
+
+00:12:57.950 --> 00:13:01.800
+ technology. I have a short matter question.
+
+00:13:01.800 --> 00:13:08.200
+ Do I have to stop or can I answer all the questions? Um,
+
+00:13:08.200 --> 00:13:09.880
+ yeah, I think we can go on for now.
+
+00:13:09.880 --> 00:13:13.420
+ And, um, the BBB room is also open for anyone who does want
+
+00:13:13.420 --> 00:13:15.720
+ to join here to ask questions directly,
+
+00:13:15.720 --> 00:13:18.420
+ um, in case the stream moves on. But I think this is our
+
+00:13:18.420 --> 00:13:20.280
+ last talk on the Dev track before the launch
+
+00:13:20.280 --> 00:13:22.850
+ break. So yeah, you should be good. Ah, nice. I don't need
+
+00:13:22.850 --> 00:13:24.520
+ a lunch break because, uh, uh,
+
+00:13:24.520 --> 00:13:32.110
+ in Europe it's already like the next meal. Right. So, um,
+
+00:13:32.110 --> 00:13:34.760
+ next question is this technology
+
+00:13:34.760 --> 00:13:38.840
+ need right? Valence server. Can it works with GNOME 3?
+
+00:13:38.840 --> 00:13:42.760
+ Actually, yes, it needs to write a
+
+00:13:42.760 --> 00:13:47.490
+ valence server because valence needs a valence server. And,
+
+00:13:47.490 --> 00:13:49.320
+ uh, just for you, what does the
+
+00:13:49.320 --> 00:13:53.900
+ server actually do? The server does, um, for example, it is
+
+00:13:53.900 --> 00:13:55.880
+ the compositor. The valence
+
+00:13:55.880 --> 00:13:58.680
+ compositor is part of the valence compositor. It's like
+
+00:13:58.680 --> 00:14:00.360
+ difficult naming they had there.
+
+00:14:00.360 --> 00:14:04.320
+ And it does a merging of, of windows. You have, um, you
+
+00:14:04.320 --> 00:14:06.760
+ have an application and it draws a window.
+
+00:14:06.760 --> 00:14:09.730
+ So you give it a pixel buffer, the application draws in
+
+00:14:09.730 --> 00:14:11.560
+ this pixel buffer, and then you put it
+
+00:14:11.560 --> 00:14:16.310
+ on the screen and compositor this other surfaces that are
+
+00:14:16.310 --> 00:14:19.560
+ on the screen. And, um, you have to look
+
+00:14:19.560 --> 00:14:22.320
+ into the frame rate you want to have and stuff like that.
+
+00:14:22.320 --> 00:14:24.360
+ So it's really low level stuff. It's,
+
+00:14:24.360 --> 00:14:28.020
+ it's, um, that's the thing the valence compositor does. And
+
+00:14:28.020 --> 00:14:30.200
+ it does input handling like lip input,
+
+00:14:30.200 --> 00:14:33.760
+ and then it receives something and routes it to this
+
+00:14:33.760 --> 00:14:37.320
+ surface of that surface, or I think shell
+
+00:14:37.320 --> 00:14:41.340
+ it's called. It's a shell that reserves the input. Okay.
+
+00:14:41.340 --> 00:14:44.760
+ Can it work with GNOME 3? Yes,
+
+00:14:44.760 --> 00:14:47.930
+ maybe. I don't know how open they are and if you can
+
+00:14:47.930 --> 00:14:50.600
+ integrate it, but I don't think that's,
+
+00:14:50.600 --> 00:14:55.520
+ that's a good direction because what do you want to build?
+
+00:14:55.520 --> 00:15:00.040
+ So, ah, just one thing since Emacs can
+
+00:15:00.040 --> 00:15:04.130
+ talk valence and is a normal valence client with the
+
+00:15:04.130 --> 00:15:07.880
+ library I wrote, it can take, can talk to any
+
+00:15:07.880 --> 00:15:13.520
+ other valence program and maybe you can do something useful
+
+00:15:13.520 --> 00:15:16.520
+ with GNOME 3 and Emacs as a
+
+00:15:16.520 --> 00:15:19.500
+ valence client. Like you can automate parts of your desktop
+
+00:15:19.500 --> 00:15:21.720
+ or something like that. Um, yeah,
+
+00:15:21.720 --> 00:15:25.850
+ that would be a possibility. Good. I'm going now to the
+
+00:15:25.850 --> 00:15:28.200
+ next question that is, could there be an
+
+00:15:28.200 --> 00:15:31.940
+ Emacs valence server and just connect with Emacs client?
+
+00:15:31.940 --> 00:15:36.600
+ Cool. I named my thing Emacs valence
+
+00:15:36.600 --> 00:15:42.050
+ server. So there is already an Emacs valence server. Um,
+
+00:15:42.050 --> 00:15:44.600
+ connect with Emacs client.
+
+00:15:44.600 --> 00:15:50.600
+ I don't actually get the question, but I think, um, yes, of
+
+00:15:50.600 --> 00:15:53.080
+ course you have an Emacs running.
+
+00:15:53.080 --> 00:15:56.070
+ It doesn't have to be an Emacs valence server because Emacs
+
+00:15:56.070 --> 00:15:56.920
+ is multi-display
+
+00:15:56.920 --> 00:16:01.090
+ and then you can just pop open the windows in valence or
+
+00:16:01.090 --> 00:16:04.360
+ something like this. Next question is
+
+00:16:04.360 --> 00:16:07.650
+ when you share your code, could you provide the equivalent
+
+00:16:07.650 --> 00:16:10.040
+ of an X session script for those who
+
+00:16:10.040 --> 00:16:17.920
+ are on XWM and want to test? Yes, I can, because it's my
+
+00:16:17.920 --> 00:16:21.720
+ goal is to have it run like this for
+
+00:16:21.720 --> 00:16:24.660
+ myself. But when I share the code in the coming days, as I
+
+00:16:24.660 --> 00:16:29.640
+'m planning, no, you won't run it like
+
+00:16:29.640 --> 00:16:33.910
+ this because it's not that polished yet. So a startup is a
+
+00:16:33.910 --> 00:16:36.360
+ little bit more involved and I
+
+00:16:36.360 --> 00:16:41.030
+ haven't researched all the ways you can make it polished,
+
+00:16:41.030 --> 00:16:44.600
+ but it's on the roadmap. So stay tuned.
+
+00:16:46.520 --> 00:16:51.220
+ The next question is, I have a demo to show this Emacs val
+
+00:16:51.220 --> 00:16:52.520
+ence compositor,
+
+00:16:52.520 --> 00:16:56.900
+ even if buggy now, just curious. Yes, there is a demo. Like
+
+00:16:56.900 --> 00:16:59.480
+ you just watched one in the video. It
+
+00:16:59.480 --> 00:17:06.370
+ was the compositor running. It did the compositing of the
+
+00:17:06.370 --> 00:17:11.080
+ video I made. And the other demo is the
+
+00:17:11.080 --> 00:17:16.980
+ code I'm planning to release. The code right now is working
+
+00:17:16.980 --> 00:17:21.960
+, but there's some documentation also,
+
+00:17:21.960 --> 00:17:26.510
+ but it's not finished. So have fun digging in there, but
+
+00:17:26.510 --> 00:17:29.400
+ don't expect anything like hyper
+
+00:17:29.400 --> 00:17:33.690
+ polished or something like this. More, yeah, I'm looking
+
+00:17:33.690 --> 00:17:36.680
+ for feedback and ideas and where to take
+
+00:17:36.680 --> 00:17:42.260
+ this thing. Now we're going to get to buffer mirroring. So
+
+00:17:42.260 --> 00:17:44.760
+ next question is, so the current
+
+00:17:44.760 --> 00:17:47.950
+ limitation is that buffer mirroring doesn't respect
+
+00:17:47.950 --> 00:17:50.360
+ different widths or heights. Yeah,
+
+00:17:50.360 --> 00:17:53.530
+ the limitation is fundamentally if you have a normal
+
+00:17:53.530 --> 00:17:55.800
+ desktop window, look at your browser
+
+00:17:55.800 --> 00:17:59.980
+ or your video player, just watching me, you are just
+
+00:17:59.980 --> 00:18:04.600
+ watching me. It just has one size. You can't
+
+00:18:04.600 --> 00:18:08.570
+ say, please make yourself this size and this size and show
+
+00:18:08.570 --> 00:18:12.040
+ me two different parts of your site or
+
+00:18:12.040 --> 00:18:17.520
+ that doesn't work. It's not thought like this. So you can
+
+00:18:17.520 --> 00:18:20.680
+ hack something up that you have like
+
+00:18:20.680 --> 00:18:24.300
+ a big window and then you show a little crop part of it and
+
+00:18:24.300 --> 00:18:26.760
+ another buffer. This does actually work,
+
+00:18:27.560 --> 00:18:32.940
+ but just a little site or like if you want to do something
+
+00:18:32.940 --> 00:18:38.680
+ like this, be prepared. WL roots doesn't,
+
+00:18:38.680 --> 00:18:43.740
+ okay. So a Wayland server or compositor has to do its own
+
+00:18:43.740 --> 00:18:47.880
+ compositing. That means it has to
+
+00:18:47.880 --> 00:18:51.590
+ composite the different buffers or pixel buffer it has in
+
+00:18:51.590 --> 00:18:53.880
+ one pixel buffer and put it on the output.
+
+00:18:55.000 --> 00:18:59.600
+ That means you have to do that yourself. And there's a
+
+00:18:59.600 --> 00:19:01.960
+ helper to do this in WL roots.
+
+00:19:01.960 --> 00:19:07.410
+ This is WLR scene as it's called. And it does this for you.
+
+00:19:07.410 --> 00:19:09.720
+ You build a scene tree and does
+
+00:19:09.720 --> 00:19:14.510
+ damage tracking so it doesn't repaint everything. It saves
+
+00:19:14.510 --> 00:19:16.920
+ battery and it's a lot of work to do this
+
+00:19:16.920 --> 00:19:21.710
+ and it's ready there. But what is missing in this helper is
+
+00:19:21.710 --> 00:19:24.920
+ cropping and resizing. So right now you
+
+00:19:24.920 --> 00:19:28.700
+ can't crop and you can't resize. And I would say this is
+
+00:19:28.700 --> 00:19:31.240
+ the main blocker for using the thing I
+
+00:19:31.240 --> 00:19:38.100
+ built, Wayland compositor is you can't crop windows. And if
+
+00:19:38.100 --> 00:19:42.920
+ you, maybe you use MP4 like the
+
+00:19:42.920 --> 00:19:48.310
+ video player, it doesn't respect what you tell it, what the
+
+00:19:48.310 --> 00:19:51.480
+ size it should get. It just, it keeps its
+
+00:19:51.480 --> 00:19:55.400
+ aspect ratio and then just respects and either width or
+
+00:19:55.400 --> 00:19:58.280
+ height, but not both if they don't fit.
+
+00:19:58.280 --> 00:20:01.790
+ So you want to fit it in a buffer and then it's stay, it's
+
+00:20:01.790 --> 00:20:04.360
+ overflows the buffer a little bit. You
+
+00:20:04.360 --> 00:20:09.200
+ can see it in the talk video. In my talk, I posted like the
+
+00:20:09.200 --> 00:20:11.720
+ little camera picture of me is not always
+
+00:20:11.720 --> 00:20:15.550
+ there where it should be. It's over the mode line or
+
+00:20:15.550 --> 00:20:18.680
+ something like that. And yeah, there needs to
+
+00:20:18.680 --> 00:20:25.180
+ be some cropping. XWVM does cropping. It crops. You can try
+
+00:20:25.180 --> 00:20:28.920
+ it out. If someone of you is a XWM
+
+00:20:28.920 --> 00:20:39.560
+ user, he can do a full screen video MP4 video, and then
+
+00:20:39.560 --> 00:20:42.200
+ just split right. And then you'll see
+
+00:20:42.200 --> 00:20:46.990
+ just half the video screen because it's no cropped, but the
+
+00:20:46.990 --> 00:20:49.320
+ video player in the background
+
+00:20:49.320 --> 00:20:55.480
+ still sends the full screen. Okay. So much for this topic.
+
+00:20:55.480 --> 00:20:59.420
+ Ah, okay. And if you want to do cropping, you have to do
+
+00:20:59.420 --> 00:21:03.720
+ your own compositor. I asked the real W
+
+00:21:05.080 --> 00:21:09.870
+ WL roots. Sorry. That's this W is complicated for me. I
+
+00:21:09.870 --> 00:21:16.120
+ asked the WL roots developers on their IRC
+
+00:21:16.120 --> 00:21:19.450
+ channel and they told me, yes, we wanted to have this. We
+
+00:21:19.450 --> 00:21:21.400
+ have an issue open, but it's not
+
+00:21:21.400 --> 00:21:24.870
+ implemented and you have to do it yourself. And yes,
+
+00:21:24.870 --> 00:21:27.320
+ whoever wants us has to do it himself. And
+
+00:21:27.320 --> 00:21:32.180
+ that's a lot of work in C. Okay. I'll jump in quickly at
+
+00:21:32.180 --> 00:21:33.800
+ one thing. Yeah. I think we were about
+
+00:21:33.800 --> 00:21:36.040
+ like two minutes break, sorry, two minutes away from our
+
+00:21:36.040 --> 00:21:38.840
+ lunch break. At which point I think the
+
+00:21:38.840 --> 00:21:42.160
+ stream will be moving on or will be stopped, but this BQB
+
+00:21:42.160 --> 00:21:44.600
+ room will be open. So yeah, Michael and
+
+00:21:44.600 --> 00:21:47.250
+ anyone else who is participating in the Q&A, you're more
+
+00:21:47.250 --> 00:21:49.160
+ than welcome to stay here and continue the
+
+00:21:49.160 --> 00:21:55.160
+ question and answer. Okay. Thank you for this announcement.
+
+00:21:55.160 --> 00:21:59.960
+ Yeah. I would like to keep answering
+
+00:21:59.960 --> 00:22:05.570
+ questions and maybe yeah, until there's no more interest or
+
+00:22:05.570 --> 00:22:08.200
+ I am hungry too, but I don't need a
+
+00:22:08.200 --> 00:22:12.600
+ lunch as I already. Yep. Okay. Sounds great. Yep. So yeah,
+
+00:22:12.600 --> 00:22:14.840
+ the stream will probably be cut off in
+
+00:22:14.840 --> 00:22:17.940
+ about a minute or so, but yeah, this room will be open and
+
+00:22:17.940 --> 00:22:20.040
+ you and others will be able to stay here
+
+00:22:20.040 --> 00:22:25.160
+ and keep asking and answering questions. Okay. Thanks.
+
+00:22:25.160 --> 00:22:29.720
+ Thank you. Then let's go on to the next
+
+00:22:29.720 --> 00:22:48.790
+ question. I just scrolled. I forgot my place. Okay. Could
+
+00:22:48.790 --> 00:22:51.000
+ you use some of the packages with
+
+00:22:51.000 --> 00:22:54.920
+ other Wayland compositors? Probably not all of it's way KDE
+
+00:22:54.920 --> 00:22:57.160
+, Rivergnome. Yes, you can. And thank
+
+00:22:57.160 --> 00:23:01.680
+ you for this idea because I already, I didn't think of this
+
+00:23:01.680 --> 00:23:04.440
+ before. You can use it because you
+
+00:23:04.440 --> 00:23:07.620
+ can talk to them. Like you can talk to Wayland protocols.
+
+00:23:07.620 --> 00:23:09.560
+ You can have a look at them. There's
+
+00:23:09.560 --> 00:23:14.830
+ like the core protocol of Wayland is in the core repository
+
+00:23:14.830 --> 00:23:18.120
+ of the Wayland project. And there's a
+
+00:23:18.120 --> 00:23:21.680
+ Wayland protocols repository. They have like three tier
+
+00:23:21.680 --> 00:23:23.720
+ staging, experimental and stable,
+
+00:23:23.720 --> 00:23:26.900
+ almost nothing in Wayland is stable. So be prepared for
+
+00:23:26.900 --> 00:23:28.920
+ some changes in the future, I think.
+
+00:23:28.920 --> 00:23:35.700
+ And you can talk to these protocols. They are not that
+
+00:23:35.700 --> 00:23:39.800
+ difficult, but some things are already a bit
+
+00:23:39.800 --> 00:23:43.370
+ too complicated. Like you have to take output and then to
+
+00:23:43.370 --> 00:23:45.640
+ get the actual width or something like
+
+00:23:45.640 --> 00:23:49.630
+ this, you have to request another output. And this one
+
+00:23:49.630 --> 00:23:52.600
+ talks to you and the other output says, okay,
+
+00:23:52.600 --> 00:23:55.050
+ I'm done or something like this. Some things are a little
+
+00:23:55.050 --> 00:23:58.680
+ bit difficult, but it's quite readable
+
+00:23:58.680 --> 00:24:03.520
+ and understandable and you can do scripting Sway, but I don
+
+00:24:03.520 --> 00:24:06.120
+'t have a lot of experience there because
+
+00:24:06.120 --> 00:24:11.930
+ like I'm an XWM user. I do it in Emacs. I'm staying on X. I
+
+00:24:11.930 --> 00:24:14.520
+ had Sway several years ago,
+
+00:24:14.520 --> 00:24:18.110
+ but only a short time. So I'm not that knowledgeable. The
+
+00:24:18.110 --> 00:24:20.040
+ next question is,
+
+00:24:20.760 --> 00:24:26.170
+ will Wayland support reach feature parity with XWM in the
+
+00:24:26.170 --> 00:24:29.560
+ future? Will there be other trade-offs?
+
+00:24:29.560 --> 00:24:35.830
+ No, it won't. Okay. But don't think, it's not something
+
+00:24:35.830 --> 00:24:38.760
+ usable because I don't think all the
+
+00:24:38.760 --> 00:24:45.530
+ features in the EXWM is needed. I want to work spaces as I
+
+00:24:45.530 --> 00:24:49.320
+ said in the talk, because yeah,
+
+00:24:49.320 --> 00:24:53.460
+ Emacs does work spaces and I won't do this, but I will do
+
+00:24:53.460 --> 00:24:58.200
+ everything. Like what's my plan with
+
+00:24:58.200 --> 00:25:01.690
+ this thing? It's like the two use cases I already alluded
+
+00:25:01.690 --> 00:25:06.280
+ to in the video. The first is you have a
+
+00:25:06.280 --> 00:25:11.030
+ Wayland surface and you show it inside an Emacs buffer or
+
+00:25:11.030 --> 00:25:13.160
+ an Emacs window. So you have a kind of
+
+00:25:13.160 --> 00:25:22.510
+ Wayland buffer, I'm calling it. That's the thing EXWM does.
+
+00:25:22.510 --> 00:25:26.600
+ And I think, yeah, it should reach
+
+00:25:26.600 --> 00:25:30.710
+ feature parity with it. It also has output management and
+
+00:25:30.710 --> 00:25:32.600
+ like the input handling,
+
+00:25:32.600 --> 00:25:37.700
+ there's like the simulation keys and I don't know what else
+
+00:25:37.700 --> 00:25:41.080
+, but actually I don't have a solution
+
+00:25:41.080 --> 00:25:46.060
+ yet for the input handling. It's a thing I haven't looked
+
+00:25:46.060 --> 00:25:49.480
+ that much into. Will there be other
+
+00:25:49.480 --> 00:25:53.660
+ trade-offs? Yeah, most certainly there are always trade-
+
+00:25:53.660 --> 00:25:56.200
+offs, but I can't tell you which.
+
+00:25:56.200 --> 00:26:00.920
+ So the next question is, what is the biggest difference
+
+00:26:00.920 --> 00:26:01.880
+ between X,
+
+00:26:01.880 --> 00:26:07.000
+ Org and Wayland that you have found? Okay, what's the
+
+00:26:07.000 --> 00:26:10.360
+ biggest difference?
+
+00:26:10.360 --> 00:26:18.970
+ Don't know actually, don't know. First of all, I'm not that
+
+00:26:18.970 --> 00:26:23.320
+ knowledgeable in X, Org. I used it,
+
+00:26:23.320 --> 00:26:28.150
+ but I have no more programs in X Window Manager. I haven't
+
+00:26:28.150 --> 00:26:30.520
+ looked a lot into it, except
+
+00:26:31.400 --> 00:26:37.380
+ WEM, I looked into the code, into Elisp code and how it
+
+00:26:37.380 --> 00:26:39.880
+ does the communication and
+
+00:26:39.880 --> 00:26:46.750
+ took inspiration of course. Yeah, big difference is you don
+
+00:26:46.750 --> 00:26:50.120
+'t have one monolithic server. Like you
+
+00:26:50.120 --> 00:26:54.390
+ have one X, Org server and in Wayland you have lots of
+
+00:26:54.390 --> 00:26:57.800
+ servers like GNOME has one, KDE has one,
+
+00:26:58.760 --> 00:27:02.510
+ then WL roots is another approach, Swae has an
+
+00:27:02.510 --> 00:27:05.480
+ implementation in WL roots and so on.
+
+00:27:05.480 --> 00:27:10.350
+ So now it's the last question I find in my path is, did you
+
+00:27:10.350 --> 00:27:13.880
+ know EAF? Yes, I know. Of course,
+
+00:27:13.880 --> 00:27:17.000
+ like I think we have a talk. We have a talk. We had talks
+
+00:27:17.000 --> 00:27:21.400
+ and I never used it. I'm sorry.
+
+00:27:22.440 --> 00:27:29.400
+ Maybe it's interesting. It's Python. I don't do a lot of
+
+00:27:29.400 --> 00:27:31.640
+ Python and
+
+00:27:31.640 --> 00:27:37.220
+ similar use case. It's like, I think it's embedded X
+
+00:27:37.220 --> 00:27:40.200
+ widgets. Please correct me if I'm wrong.
+
+00:27:40.200 --> 00:27:47.450
+ Yeah, that's all I can say to this topic. But I think like
+
+00:27:47.450 --> 00:27:49.800
+ any application framework,
+
+00:27:49.800 --> 00:27:53.920
+ you can want to do an Emacs or stuff like that will mesh
+
+00:27:53.920 --> 00:27:57.240
+ really good with Emacs compositor that
+
+00:27:57.240 --> 00:28:02.650
+ is integrated or like almost integrated in Emacs because
+
+00:28:02.650 --> 00:28:05.640
+ now you can use this to do your application
+
+00:28:05.640 --> 00:28:10.070
+ framework and paint the windows in Emacs. And I think maybe
+
+00:28:10.070 --> 00:28:12.440
+ we can come back to the reparenting
+
+00:28:12.440 --> 00:28:18.450
+ X thing, which I don't really understand. So I don't know
+
+00:28:18.450 --> 00:28:21.560
+ exactly how X does the X widgets, like
+
+00:28:21.560 --> 00:28:28.190
+ no idea. But I think we can do something similar with Way
+
+00:28:28.190 --> 00:28:31.960
+land. Like we can just embed the little
+
+00:28:31.960 --> 00:28:36.710
+ Wayland surfaces in an Emacs buffer. And that's a thing I
+
+00:28:36.710 --> 00:28:40.440
+ wanted to get a discussion started.
+
+00:28:40.440 --> 00:28:45.950
+ Someone, yeah, maybe someone has an idea. Maybe someone is
+
+00:28:45.950 --> 00:28:49.000
+ already deep down in Emacs internals
+
+00:28:49.000 --> 00:28:54.620
+ and knows how these displays stuff works like image display
+
+00:28:54.620 --> 00:28:57.880
+, X widget display, and so on.
+
+00:28:57.880 --> 00:29:03.290
+ And maybe this person or someone else has an idea how we
+
+00:29:03.290 --> 00:29:05.640
+ could do the Wayland surfaces.
+
+00:29:05.640 --> 00:29:09.280
+ Right now it's just Emacs receives a request for new
+
+00:29:09.280 --> 00:29:13.160
+ surface. Okay. You open a new program.
+
+00:29:13.160 --> 00:29:16.430
+ The program says to the Wayland server, "Hey, I'm here. I
+
+00:29:16.430 --> 00:29:19.480
+ want to have surface." Wayland server
+
+00:29:19.480 --> 00:29:24.750
+ gives it the surface and says to Emacs, "Hey, here's a new
+
+00:29:24.750 --> 00:29:27.880
+ surface. You can lay it out." And
+
+00:29:27.880 --> 00:29:31.080
+ Emacs then can lay it out or not, however it likes.
+
+00:29:31.080 --> 00:29:33.480
+ Normally the default path I choose is
+
+00:29:33.480 --> 00:29:38.490
+ Emacs bundles, the surface with a buffer. And if the buffer
+
+00:29:38.490 --> 00:29:40.600
+ is shown, it shows the surface.
+
+00:29:40.600 --> 00:29:43.690
+ And otherwise it's just hidden. But you can do whatever you
+
+00:29:43.690 --> 00:29:45.800
+ want with the surface. You just
+
+00:29:45.800 --> 00:29:49.050
+ have to say, please put it at this coordinate and this
+
+00:29:49.050 --> 00:29:52.280
+ width and this height. So you can put it in
+
+00:29:52.280 --> 00:29:54.980
+ a buffer and you can scroll it in a buffer. But this
+
+00:29:54.980 --> 00:29:57.560
+ integration, how to put something in a buffer
+
+00:29:57.560 --> 00:30:00.060
+ and scroll it there. I don't know how to do it. And I don't
+
+00:30:00.060 --> 00:30:02.920
+ know how to do it. It should be like
+
+00:30:02.920 --> 00:30:06.070
+ a good solution. I don't know how to do it. Maybe someone
+
+00:30:06.070 --> 00:30:10.040
+ of you has an idea. I'm finished with the
+
+00:30:10.040 --> 00:30:17.190
+ questions of the path. I haven't had a look in IRC because
+
+00:30:17.190 --> 00:30:20.600
+ yes, I was busy talking.
+
+00:30:20.600 --> 00:30:27.910
+ I can either like browse through the IRC if you want, or
+
+00:30:27.910 --> 00:30:31.480
+ maybe someone wants to say something or
+
+00:30:31.480 --> 00:30:36.410
+ have a look. Ah, thank you. I already answered the IRC
+
+00:30:36.410 --> 00:30:39.880
+ questions. So yes, I'm finished.
+
+00:30:39.880 --> 00:30:47.720
+ I still see some people in the room. Yeah. Maybe someone,
+
+00:30:47.720 --> 00:30:49.880
+ if you have an idea or wants to use it.
+
+00:30:49.880 --> 00:30:58.330
+ I don't know how fast I will have it in a usable state. It
+
+00:30:58.330 --> 00:30:58.840
+'s like,
+
+00:31:01.080 --> 00:31:05.200
+ at first I just wanted to do this presentation and show to
+
+00:31:05.200 --> 00:31:09.400
+ you the possibility. I already read
+
+00:31:09.400 --> 00:31:13.400
+ in the internet some places like Emacs, Devel, Mailindus
+
+00:31:13.400 --> 00:31:16.120
+ that was one time and other places that
+
+00:31:16.120 --> 00:31:20.080
+ other people's had the same, other person had the same
+
+00:31:20.080 --> 00:31:25.800
+ ideas. But I was thinking just to lay out
+
+00:31:25.800 --> 00:31:29.740
+ the general idea to you. And then I thought, okay, do an
+
+00:31:29.740 --> 00:31:32.200
+ experiment, show if it works. And the
+
+00:31:32.200 --> 00:31:35.870
+ experiments spun a little bit. It worked. And so I got
+
+00:31:35.870 --> 00:31:40.520
+ further and now I have an almost usable thing,
+
+00:31:40.520 --> 00:31:46.990
+ but I already spent like a month with it. So we'll take
+
+00:31:46.990 --> 00:31:49.640
+ some more time to finish.
+
+00:31:52.840 --> 00:31:59.040
+ Yeah. Thanks that you think, Gary, that you think it's, you
+
+00:31:59.040 --> 00:32:03.800
+ are happy to test it. Thank you.
+
+00:32:03.800 --> 00:32:08.870
+ I would like to have it like a little bit more flexible
+
+00:32:08.870 --> 00:32:11.240
+ than the X solutions, because
+
+00:32:11.240 --> 00:32:16.880
+ as I told you can have it nested, like you have a normal Em
+
+00:32:16.880 --> 00:32:20.760
+acs and you can just do the embedding
+
+00:32:20.760 --> 00:32:24.710
+ and the embedded surfaces. And so in a normal Emacs and you
+
+00:32:24.710 --> 00:32:27.400
+ don't have to give Emacs the whole
+
+00:32:27.400 --> 00:32:35.080
+ desktop. So you don't have to do XWM. You can just have a
+
+00:32:35.080 --> 00:32:39.080
+ normal Emacs window and have all the goodies
+
+00:32:39.080 --> 00:32:45.770
+ and features there. Okay. Again, the code will be available
+
+00:32:45.770 --> 00:32:49.080
+ on my site. I can post you the link,
+
+00:32:49.080 --> 00:32:54.330
+ but there's nothing there yet. Oh, wait a few days. I was
+
+00:32:54.330 --> 00:32:57.480
+ thinking of doing it this weekend,
+
+00:32:57.480 --> 00:33:03.190
+ but it's EmacsConf and I want to listen to your ideas and
+
+00:33:03.190 --> 00:33:06.360
+ participate and don't do coding instead.
+
+00:33:06.360 --> 00:33:15.080
+ This is the link. I could put it on another code forge, but
+
+00:33:15.080 --> 00:33:18.120
+ I want to do something
+
+00:33:19.880 --> 00:33:19.880
+
+
+00:33:19.880 --> 00:33:26.340
+ myself instead. I have a landing page. If I put it in my
+
+00:33:26.340 --> 00:33:29.320
+ browser, it's just,
+
+00:33:29.320 --> 00:33:35.840
+ yeah, no connection possible. It's not configured. It's
+
+00:33:35.840 --> 00:33:39.080
+ just bought, wait a few days.
+
+00:33:42.120 --> 00:33:46.520
+ Okay. Short question for the room. Does anyone know someone
+
+00:33:46.520 --> 00:33:48.280
+ else working on stuff like this?
+
+00:33:48.280 --> 00:34:05.250
+ Because if, please let them know so we can team up and don
+
+00:34:05.250 --> 00:34:06.840
+'t do it twice.
+
+00:34:11.800 --> 00:34:14.440
+ I had a lot of fun with the Emacs part of the code. I like
+
+00:34:14.440 --> 00:34:17.640
+ coding in Elisp in general,
+
+00:34:17.640 --> 00:34:22.480
+ but it's not that much fun to work on the C side. It's
+
+00:34:22.480 --> 00:34:26.520
+ complex and prone to break.
+
+00:34:26.520 --> 00:34:32.360
+ So don't mind collaborating.
+
+00:34:41.560 --> 00:34:45.960
+ Why the sad face?
+
+00:34:45.960 --> 00:34:56.920
+ Yes, I know the lack of active development.
+
+00:35:02.920 --> 00:35:09.400
+ Okay. Because yeah, so no problem. You can't know anyone or
+
+00:35:09.400 --> 00:35:10.120
+ a lot of,
+
+00:35:10.120 --> 00:35:15.280
+ like, it's a good thing. So I got to start it and I wanted
+
+00:35:15.280 --> 00:35:16.200
+ to start,
+
+00:35:16.200 --> 00:35:24.260
+ you know, people quitting the XW. I don't have problems yet
+
+00:35:24.260 --> 00:35:26.120
+. It's not that I started
+
+00:35:26.120 --> 00:35:28.720
+ implementing this because I thought, ah, it's not working
+
+00:35:28.720 --> 00:35:30.840
+ anymore. I need something new. It's like,
+
+00:35:30.840 --> 00:35:37.680
+ it's works fine. I just did it because I thought, well, why
+
+00:35:37.680 --> 00:35:39.720
+ not do something new? And because it
+
+00:35:39.720 --> 00:35:45.180
+ opens new possibilities, which weren't there before, or at
+
+00:35:45.180 --> 00:35:47.320
+ least I didn't know of them.
+
+00:35:47.320 --> 00:35:58.920
+ Okay. How could I put this? Okay. If it's ready for no, as
+
+00:35:58.920 --> 00:36:00.440
+ I will promote it. If it's
+
+00:36:00.440 --> 00:36:06.030
+ ready for normal usement, like you can just install it and
+
+00:36:06.030 --> 00:36:09.480
+ use it for an everyday driver
+
+00:36:09.480 --> 00:36:12.150
+ and have you do it. You would X session file and can just
+
+00:36:12.150 --> 00:36:14.840
+ start it up. It won't be an X session
+
+00:36:14.840 --> 00:36:18.660
+ file because that's X and that's a thing of the past and,
+
+00:36:18.660 --> 00:36:20.200
+ but something similar.
+
+00:36:20.200 --> 00:36:26.320
+ I could imagine posting, like, I don't know, he makes lists
+
+00:36:26.320 --> 00:36:28.280
+, Reddit, something like this, but
+
+00:36:29.160 --> 00:36:33.240
+ until then, like the code I will release now, it's just
+
+00:36:33.240 --> 00:36:34.200
+ experimental and
+
+00:36:34.200 --> 00:36:41.710
+ it's for the people who want to get involved and, or want
+
+00:36:41.710 --> 00:36:43.320
+ to do their own thing with it,
+
+00:36:43.320 --> 00:36:48.130
+ use the client to automate sway or so for them. It's really
+
+00:36:48.130 --> 00:36:49.640
+ interesting.
+
+00:36:50.200 --> 00:36:50.200
+
+
+00:36:50.200 --> 00:37:00.200
+ [inaudible]
+
+00:37:00.200 --> 00:37:02.760
+ Yes, I know. Like you,
+
+00:37:02.760 --> 00:42:20.290
+ okay, this sway.el, I have to look at it, but I don't think
+
+00:42:20.290 --> 00:37:15.000
+ now is a good idea.
+
+00:37:17.160 --> 00:37:21.680
+ Maybe something useful there. Thank you, PlasmaStrike and G
+
+00:37:21.680 --> 00:37:22.520
+argiola.
+
+00:37:22.520 --> 00:37:28.450
+ Yes, people are moving and Valent is the future. That's the
+
+00:37:28.450 --> 00:37:30.680
+ point I wanted to say. Like, I think
+
+00:37:30.680 --> 00:37:36.840
+ you can stay on X, like in the future, but it's not gonna
+
+00:37:36.840 --> 00:37:38.760
+ get that much development and
+
+00:37:38.760 --> 00:37:42.520
+ sooner or later, like there will be new features and you
+
+00:37:42.520 --> 00:37:44.200
+ won't have it in the old one and stuff
+
+00:37:44.200 --> 00:37:48.690
+ like that. And for Emacs to be viable as a window manager
+
+00:37:48.690 --> 00:37:51.560
+ in this whole computing environment, or as
+
+00:37:51.560 --> 00:37:56.810
+ I said, a Lispy Linux desktop, I think it needs to have
+
+00:37:56.810 --> 00:37:59.000
+ this Valent capability and
+
+00:37:59.000 --> 00:38:08.680
+ that's the way for it to get it.
+
+00:38:09.960 --> 00:38:09.960
+
+
+00:38:09.960 --> 00:38:21.960
+ [inaudible]
+
+00:38:21.960 --> 00:38:28.510
+ I'm just reading the IRC log and someone wrote, I was
+
+00:38:28.510 --> 00:38:32.600
+ amazed to see the video inside Emacs.
+
+00:38:32.600 --> 00:38:44.280
+ Thank you. That was meant to be amazing. Yeah, thank you.
+
+00:38:45.560 --> 00:38:45.560
+
+
+00:38:45.560 --> 00:38:45.640
+ [inaudible]
+
+00:38:46.920 --> 00:38:46.920
+
+
+00:38:46.920 --> 00:38:47.000
+ [inaudible]
+
+00:38:48.280 --> 00:38:48.280
+
+
+00:38:48.280 --> 00:38:48.360
+ [inaudible]
+
+00:38:49.640 --> 00:38:49.640
+
+
+00:38:49.640 --> 00:38:49.720
+ [inaudible]
+
+00:38:51.000 --> 00:38:51.000
+
+
+00:38:51.000 --> 00:38:51.080
+ [inaudible]
+
+00:38:52.080 --> 00:38:52.240
+ [inaudible]
+
+00:38:52.240 --> 00:38:52.400
+ [inaudible]
+
+00:38:52.400 --> 00:38:52.480
+ [inaudible]
+
+00:38:52.480 --> 00:38:52.640
+ [inaudible]
+
+00:38:52.640 --> 00:38:52.720
+ [inaudible]
+
+00:38:52.720 --> 00:38:52.800
+ [inaudible]
+
+00:38:52.800 --> 00:38:52.880
+ [inaudible]
+
+00:38:52.880 --> 00:38:52.960
+ [inaudible]
+
+00:38:52.960 --> 00:38:53.040
+ [inaudible]
+
+00:38:53.040 --> 00:38:53.120
+ [inaudible]
+
+00:38:53.120 --> 00:38:53.200
+ [inaudible]
+
+00:38:53.200 --> 00:38:53.200
+ [inaudible]
+
+00:38:53.200 --> 00:38:53.280
+ [inaudible]
+
+00:38:53.280 --> 00:38:53.360
+ [inaudible]
+
+00:38:53.360 --> 00:38:53.440
+ [inaudible]
+
+00:38:53.440 --> 00:38:53.520
+ [inaudible]
+
+00:38:53.520 --> 00:38:53.600
+ [inaudible]
+
+00:38:53.600 --> 00:38:53.680
+ [inaudible]
+
+00:38:53.680 --> 00:38:53.760
+ [inaudible]
+
+00:38:53.760 --> 00:38:53.840
+ [inaudible]
+
+00:38:53.840 --> 00:38:53.920
+ [inaudible]
+
+00:38:53.920 --> 00:38:54.000
+ [inaudible]
+
+00:38:54.000 --> 00:38:54.080
+ [inaudible]
+
+00:38:54.080 --> 00:38:54.160
+ [inaudible]
+
+00:38:54.160 --> 00:38:54.160
+ [inaudible]
+
+00:38:54.160 --> 00:38:54.240
+ [inaudible]
+
+00:38:54.240 --> 00:38:54.240
+ [inaudible]
+
+00:38:54.240 --> 00:38:54.320
+ [inaudible]
+
+00:38:54.320 --> 00:38:54.400
+ [inaudible]
+
+00:38:54.400 --> 00:38:54.480
+ [inaudible]
+
+00:38:54.480 --> 00:38:54.560
+ [inaudible]
+
+00:38:54.560 --> 00:38:54.640
+ [inaudible]
+
+00:38:54.640 --> 00:38:54.640
+ [inaudible]
+
+00:38:54.640 --> 00:38:54.720
+ [inaudible]
+
+00:38:54.720 --> 00:38:54.720
+ [inaudible]
+
+00:38:54.720 --> 00:38:54.800
+ [inaudible]
+
+00:38:54.800 --> 00:38:54.880
+ [inaudible]
+
+00:38:54.880 --> 00:38:54.960
+ [inaudible]
+
+00:38:54.960 --> 00:38:55.040
+ [inaudible]
+
+00:38:55.040 --> 00:38:55.120
+ [inaudible]
+
+00:38:55.120 --> 00:39:20.000
+ [inaudible]
+
+00:39:20.000 --> 00:39:20.080
+ [inaudible]
+
+00:39:20.080 --> 00:39:20.160
+ [inaudible]
+
+00:39:20.160 --> 00:39:20.240
+ [inaudible]
+
+00:39:20.800 --> 00:39:20.800
+
+
+00:39:20.800 --> 00:39:25.920
+ Okay, Emax could already do. I'm just reading the IRC
+
+00:39:25.920 --> 00:39:46.400
+ because I don't know what else to say right now.
+
+00:39:46.400 --> 00:39:57.040
+ [inaudible]
+
+00:39:57.040 --> 00:40:00.880
+ Yeah, it's nice to see so many people saying thank you and
+
+00:40:00.880 --> 00:40:07.600
+ at least I read it like two times now. So yeah, I'm pleased
+
+00:40:07.600 --> 00:40:10.160
+ to see this and the interest in
+
+00:40:10.160 --> 00:40:16.400
+ gender.
+
+00:40:16.400 --> 00:40:26.640
+ [inaudible]
+
+00:40:26.640 --> 00:40:38.640
+ [inaudible]
+
+00:40:38.640 --> 00:40:49.370
+ Okay, I see there's still some people typing and it's a lot
+
+00:40:49.370 --> 00:40:52.240
+ of more thank yous and yeah,
+
+00:40:52.240 --> 00:41:00.980
+ thank you. I'm pleased and I will publish stuff like if it
+
+00:41:00.980 --> 00:41:06.320
+'s usable. I want to use it myself,
+
+00:41:06.320 --> 00:41:13.410
+ so if you're in luck, you can use it too. And let's see, I
+
+00:41:13.410 --> 00:41:18.160
+ think I wrap up this Q&A here and
+
+00:41:18.160 --> 00:41:22.780
+ yeah, thank you for the discussion, for your questions and
+
+00:41:22.780 --> 00:41:27.280
+ your interest and have a nice rest
+
+00:41:27.280 --> 00:41:48.950
+ of EmaxConf. Yeah, bye. I'm just going to leave the room or
+
+00:41:48.950 --> 00:41:51.760
+ microphone or go back to EmaxConf.
+
+00:41:55.360 --> 00:41:56.480
+ Sounds good. Thanks again.
+
+00:41:56.480 --> 00:42:00.320
+ Ah, you're still there.
+
+00:42:00.320 --> 00:42:03.760
+ Hey, yeah, I just got back for a second.
+
+00:42:03.760 --> 00:42:05.380
+ Okay.
+
+00:42:05.380 --> 00:42:08.960
+ Yeah, just wanted to say thanks for the great talk and I'll
+
+00:42:08.960 --> 00:42:10.720
+ definitely be watching it and the Q&A.
+
+00:42:10.720 --> 00:42:13.280
+ And yeah, it's very exciting stuff.
+
+00:42:13.280 --> 00:42:17.350
+ Yeah, thank you. I got the feedback now. It's exciting. I
+
+00:42:17.350 --> 00:42:20.400
+ think so too. So yeah,
+
+00:42:20.400 --> 00:42:24.160
+ have a nice time at EmaxConf and see you next time. Bye.
+
+00:42:24.160 --> 00:42:27.920
+ Thank you. You as well. See you around. Bye.
+
+00:42:27.920 --> 00:42:28.420
+ Bye.
+
+00:42:30.420 --> 00:42:30.420
+
+
+00:42:30.420 --> 00:42:30.920
+ Bye.
+
+00:42:32.920 --> 00:42:32.920
+
+
+00:42:32.920 --> 00:42:33.420
+ Bye.
+
+00:42:35.420 --> 00:42:35.420
+
+
+00:42:35.420 --> 00:42:35.920
+ Bye.
+
+00:42:37.920 --> 00:42:37.920
+
+
+00:42:37.920 --> 00:42:38.420
+ Bye.
+
+00:42:38.420 --> 00:42:46.420
+ Bye.
+
diff --git a/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt
new file mode 100644
index 00000000..34eeb842
--- /dev/null
+++ b/2022/captions/emacsconf-2022-wayland--emacs-should-become-a-wayland-compositor--michael-bauer--main.vtt
@@ -0,0 +1,471 @@
+WEBVTT captioned by bhavin192
+
+NOTE Introduction
+
+00:00.000 --> 00:08.000
+Hello EmacsConf and hello fellow Emacs fans.
+
+00:08.000 --> 00:10.920
+My name is Michael Bauer, and I'm from Germany.
+
+00:10.920 --> 00:00:13.440
+I'm gonna talk to you about "Why and how Emacs
+
+00:00:13.440 --> 00:00:17.200
+should become a Wayland compositor."
+
+00:17.200 --> 00:21.740
+And it already kinda is a Wayland compositor.
+
+00:21.740 --> 00:25.000
+This talk is composed by Wayland and Emacs.
+
+00:25.000 --> 00:00:26.840
+If I'm talking about a Wayland compositor
+
+00:00:26.840 --> 00:00:29.360
+or Emacs as Wayland compositor,
+
+00:00:29.360 --> 00:00:30.440
+I mean it in the sense that
+
+00:00:30.440 --> 00:00:36.000
+EXWM is an X window manager. I hope you know EXWM.
+
+NOTE Why
+
+00:36.000 --> 00:41.000
+So, why?
+
+00:41.000 --> 00:00:44.120
+Emacs can do Wayland now, that was a stopper
+
+00:00:44.120 --> 00:00:49.000
+before, and now it's solved with `pgtk` branch.
+
+00:49.000 --> 00:00:53.240
+It makes the Emacs toolbox bigger,
+
+00:00:53.240 --> 00:00:55.000
+which is always a good thing.
+
+00:55.000 --> 00:00:58.440
+And the cool thing about Wayland, which is not
+
+00:00:58.440 --> 00:01:02.280
+possible under X is, it can run standalone
+
+00:01:02.280 --> 00:01:06.840
+on the Linux kernel interface, or nested under X,
+
+00:01:06.840 --> 00:01:07.120
+or even nested under Wayland.
+
+01:09.000 --> 00:01:13.840
+The compositor features of Emacs doesn't mean
+
+00:01:13.840 --> 00:01:16.960
+it has to take over the whole output.
+
+00:01:16.960 --> 00:01:20.560
+It can use them, even if it's just like
+
+00:01:20.560 --> 00:01:23.080
+a normal window or normal program.
+
+01:23.000 --> 00:01:25.120
+And last reason is,
+
+00:01:25.120 --> 00:01:27.240
+I want to keep living inside Emacs
+
+00:01:27.240 --> 00:01:31.000
+and Wayland is the future, apparently.
+
+NOTE EXWM use case
+
+01:31.000 --> 01:35.000
+EXWM use case is the first use case.
+
+01:35.000 --> 00:01:38.400
+You take a Wayland surface and put it inside
+
+00:01:38.400 --> 00:01:41.520
+an Emacs window. You see it right below.
+
+00:01:41.520 --> 00:01:45.880
+The video of me is a Wayland surface,
+
+00:01:45.880 --> 00:01:50.000
+and it's inside an Emacs window managed by Emacs.
+
+01:50.000 --> 00:01:53.480
+Emacs does the input, and the clipboard handling,
+
+00:01:53.480 --> 00:01:59.000
+and can insert itself here, and do great things.
+
+01:59.000 --> 00:02:03.200
+And it's a possibility to Lispify the Linux desktop,
+
+00:02:03.200 --> 00:02:08.000
+as Emacs Lispifies the command line.
+
+NOTE XWidget use case
+
+02:08.000 --> 00:02:12.960
+The other use case is the XWidget use case.
+
+00:02:12.960 --> 00:02:17.000
+I don't know if you know XWidgets.
+
+02:17.000 --> 00:02:19.720
+It's embedded X windows inside Emacs.
+
+00:02:19.720 --> 00:02:24.000
+There's a web browser available in Emacs.
+
+02:24.000 --> 00:02:27.520
+With Wayland, you could embed anything that can
+
+00:02:27.520 --> 00:02:32.000
+create a Wayland surface like video, web, or 3D.
+
+02:32.000 --> 00:02:34.880
+Think OpenGL, something like
+
+00:02:34.880 --> 00:02:38.000
+EmacsGL would be possible.
+
+02:38.000 --> 02:46.000
+And we wouldn't have just images like we have so far.
+
+NOTE How
+
+02:46.000 --> 00:02:50.560
+So, how to implement this Wayland compositor?
+
+00:02:50.560 --> 00:02:52.560
+I'm going to tell you how I did it,
+
+00:02:52.560 --> 00:02:57.000
+or I did this demo I'm showing you right now.
+
+02:57.000 --> 00:03:00.680
+First of all, how does Wayland work?
+
+00:03:00.680 --> 00:03:04.000
+Wayland is a protocol in XML.
+
+03:04.000 --> 00:03:11.120
+It's a server and client, and they share a set of
+
+00:03:11.120 --> 00:03:13.960
+objects, and the objects have methods.
+
+00:03:13.960 --> 00:03:16.120
+They are specified in the protocol,
+
+00:03:16.120 --> 00:03:24.080
+and Wayland also says how the server
+
+00:03:24.080 --> 00:03:25.720
+and client talk to each other.
+
+00:03:25.720 --> 00:03:33.440
+First blocker for Emacs becoming a Wayland
+
+00:03:33.440 --> 00:03:37.000
+compositor is that Emacs and Wayland both have
+
+00:03:37.000 --> 00:03:41.880
+their own event loop, and you can't merge them too.
+
+00:03:41.880 --> 00:03:45.800
+But you don't have to merge them
+
+00:03:45.800 --> 00:03:48.000
+because you can just make Emacs speak Wayland.
+
+03:48.000 --> 00:03:50.040
+So, Emacs becomes a Wayland client,
+
+00:03:50.040 --> 00:03:53.000
+and there's an extra server Emacs is talking to.
+
+03:53.000 --> 00:03:59.160
+So, we need a minimal Wayland server that does all
+
+00:03:59.160 --> 00:04:03.000
+the stuff Emacs can't do and do the rest in Emacs.
+
+04:03.000 --> 00:04:07.800
+---The minimal Wayland server, I did it in wlroots.
+
+00:04:07.800 --> 00:04:13.040
+That's the library behind Sway. I think it's
+
+00:04:13.040 --> 00:04:20.000
+the Wayland library to do stuff like this.
+
+04:20.000 --> 04:26.000
+I implemented four different things to make it work.
+
+04:26.000 --> 00:04:30.680
+It's these three letter acronyms on the left.
+
+00:04:30.680 --> 00:04:34.520
+It's Emacs, Wayland, and then it's a server,
+
+00:04:34.520 --> 00:04:38.000
+a client, a protocol, and buffers.
+
+04:38.000 --> 04:44.000
+The server is written in C and it's mostly tinywl.
+
+04:44.000 --> 00:04:46.280
+It's the example of wlroots,
+
+00:04:46.280 --> 00:04:52.000
+and it's around 1000 lines of code.
+
+04:52.000 --> 00:04:54.960
+ewc, the Wayland client in Emacs,
+
+00:04:54.960 --> 00:04:58.560
+is the thing I'm most proud of.
+
+00:04:58.560 --> 00:05:02.120
+It's 300 lines of code, and it is a
+
+00:05:02.120 --> 00:05:08.000
+fully featured Wayland client in Emacs.
+
+05:08.000 --> 00:05:11.640
+With this, Emacs can speak Wayland,
+
+00:05:11.640 --> 00:05:18.000
+and then I implemented Emacs Wayland protocol.
+
+05:18.000 --> 00:05:21.280
+It more or less allows Emacs to become a Wayland
+
+00:05:21.280 --> 00:05:24.640
+window manager, so it's not actually the compositor.
+
+00:05:24.640 --> 00:05:27.680
+The compositor stays in C, but Emacs is
+
+00:05:27.680 --> 00:05:31.000
+now a Wayland window manager!
+
+05:31.000 --> 00:05:34.520
+And the last thing is Emacs Wayland buffers.
+
+00:05:34.520 --> 00:05:35.880
+It's the window manager part.
+
+00:05:35.880 --> 00:05:38.440
+It's around 500 lines of code,
+
+00:05:38.440 --> 00:05:41.680
+and it does the buffer management inside
+
+00:05:41.680 --> 00:05:45.680
+Emacs windows, or floating right like you see me
+
+00:05:45.680 --> 00:05:48.000
+now floating on the right.
+
+05:48.000 --> 00:05:51.000
+It works, but it is still buggy,
+
+00:05:51.000 --> 00:05:54.320
+and it is also missing input handling,
+
+00:05:54.320 --> 00:06:01.000
+so there's more code to come for this to work.
+
+NOTE Caveats
+
+06:01.000 --> 06:05.000
+Some caveats about this approach.
+
+06:05.000 --> 00:06:09.640
+wlroots is around 60 kilo LoCs (Line of Code)
+
+00:06:09.640 --> 00:06:12.000
+and in active development.
+
+06:12.000 --> 00:06:16.640
+They have like a slogan 60 kilo locs of code
+
+00:06:16.640 --> 00:06:19.760
+you had to write anyway to make a Wayland
+
+00:06:19.760 --> 00:06:22.520
+compositor. And no, you don't have to write it.
+
+00:06:22.520 --> 00:06:25.840
+But I still remember when it was like 50 kilo locs,
+
+00:06:25.840 --> 00:06:29.680
+and now it's 60. And it's like a moving target.
+
+00:06:29.680 --> 00:06:32.480
+I think it could be quite a lot of work
+
+00:06:32.480 --> 00:06:34.000
+to keep up with it.
+
+06:34.000 --> 06:41.000
+Yeah, it could be quite a bit of work.
+
+06:41.000 --> 06:46.000
+Some windows don't like to keep the aspect ratios.
+
+06:46.000 --> 00:06:49.560
+You tell them and you have to crop them.
+
+00:06:49.560 --> 00:06:53.000
+And the interface I use in wlroots for doing this,
+
+06:53.000 --> 00:06:57.280
+`wlr_scene`, can't do cropping yet,
+
+00:06:57.280 --> 00:07:01.000
+so this doesn't work.
+
+07:01.000 --> 00:07:03.240
+Another problem is with GTK.
+
+00:07:03.240 --> 00:07:03.280
+Once Wayland is enabled and it stays on.
+
+07:11.000 --> 00:07:12.560
+This doesn't make sense.
+
+00:07:12.560 --> 00:07:15.000
+Okay, if you kill the Wayland server,
+
+00:07:15.000 --> 00:07:18.000
+GTK kills Emacs, that's not a good thing.
+
+07:18.000 --> 00:07:21.000
+And it's still a bit of work and fussing needed
+
+00:07:21.000 --> 00:07:23.640
+to get this to work reliably.
+
+00:07:23.640 --> 00:07:26.000
+It's quite buggy right now.
+
+NOTE Call to action
+
+07:26.000 --> 07:30.000
+And that brings me to my call to action.
+
+07:30.000 --> 00:07:34.440
+I think making Emacs Wayland capable is
+
+00:07:34.440 --> 00:07:39.000
+a further step to make an Emacs OS.
+
+07:39.000 --> 00:07:41.360
+It gains output and input handling.
+
+00:07:41.360 --> 00:07:44.120
+Output handling is already there,
+
+00:07:44.120 --> 00:07:45.760
+input handling is still missing,
+
+00:07:45.760 --> 00:07:49.720
+but Emacs can manage monitors, outputs,
+
+00:07:49.720 --> 00:07:53.040
+different frames if it's like nested,
+
+00:07:53.040 --> 00:07:57.080
+And inputs, keyboards, simulation keys,
+
+00:07:57.080 --> 00:07:58.000
+stuff like that.
+
+07:58.000 --> 08:02.000
+We could use it in more ways for Emacs display, maybe.
+
+08:02.000 --> 00:08:05.720
+Wayland just manages simple pixel buffers,
+
+00:08:05.720 --> 00:08:09.000
+so it's a protocol for managing pixel buffers.
+
+08:09.000 --> 00:08:12.560
+And in a sense, we could go back to
+
+00:08:12.560 --> 00:08:15.560
+the old X ways and maybe even ditch GTK.
+
+00:08:15.560 --> 00:08:18.000
+I don't know, but why need it?
+
+08:18.000 --> 00:08:20.600
+We can composite without it.
+
+00:08:20.600 --> 00:08:27.000
+Let's make buffer menus, buffer world, buffer.
+
+08:27.000 --> 00:08:29.040
+Emacs Wayland protocol, like I did it,
+
+00:08:29.040 --> 00:08:34.040
+allows a very concise design, and it allows
+
+00:08:34.040 --> 00:08:38.000
+to improve on the EXWM code base.
+
+08:38.000 --> 00:08:41.840
+And I wrote KISS style because EXWM has
+
+00:08:41.840 --> 00:08:45.000
+workspace management integrated.
+
+08:45.000 --> 00:08:50.600
+I don't think that's needed, like Emacs does it.
+
+00:08:50.600 --> 00:08:53.640
+Why do you have to do something extra?
+
+00:08:53.640 --> 00:08:56.000
+So why do it?
+
+08:56.000 --> 00:09:00.040
+To finish the call to action,
+
+00:09:00.040 --> 00:09:03.280
+if this is the thing you want to see in Emacs,
+
+00:09:03.280 --> 00:09:06.600
+maybe you want to get involved, have some ideas,
+
+00:09:06.600 --> 00:09:10.000
+so we could discuss it.
+
+09:10.000 --> 00:09:14.960
+I'm looking forward to discuss with you
+
+00:09:14.960 --> 00:09:21.000
+and hear your questions and ideas.
+
+09:21.000 --> 00:09:24.200
+I want to say a big thank you to the
+
+00:09:24.200 --> 00:09:26.600
+organizers of EmacsConf and the other speakers
+
+00:09:26.600 --> 00:09:29.000
+for making this event possible.
+
+09:29.000 --> 09:39.000
+Thank you, and see you.
diff --git a/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt
new file mode 100644
index 00000000..e26d08e8
--- /dev/null
+++ b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers--chapters.vtt
@@ -0,0 +1,23 @@
+WEBVTT captioned by Sebastian
+
+
+00:00:00.000 --> 00:01:23.674
+Introduction
+
+00:01:23.774 --> 00:02:38.882
+Q1 - Does it become unwieldy due to the interaction of the edit org-source to use org-mode and the virtual linear programming as the project becomes larger?
+
+00:02:38.982 --> 00:03:16.080
+Q2 - I want to take a look at the files used in your demo, are they somewhere online?
+
+00:03:16.080 --> 00:04:54.960
+Digression - some explanations about the background dinosaur :D
+
+00:04:54.960 --> 00:05:49.640
+Information about org-entry-get
+
+00:05:49.640 --> 00:13:32.960
+Are workflows as they are in your life closely tied to particular projects or are they general workflows? - Long discussion about the workflow!
+
+00:13:32.960 --> 00:17:54.440
+Wrapping up
diff --git a/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt
new file mode 100644
index 00000000..407cc711
--- /dev/null
+++ b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--answers.vtt
@@ -0,0 +1,893 @@
+WEBVTT
+
+00:00:00.000 --> 00:00:03.760
+ Okay, hi everyone. Yeah, sorry George, I'm just going to
+
+00:00:03.760 --> 00:00:06.520
+ introduce you a little bit.
+
+00:00:06.520 --> 00:00:10.500
+ For context, generally when I arrive on a BBB room, I have
+
+00:00:10.500 --> 00:00:11.880
+ a little bit of time to chat
+
+00:00:11.880 --> 00:00:14.810
+ with the speaker, but right now I made it right on time and
+
+00:00:14.810 --> 00:00:16.040
+ I barely had time to say
+
+00:00:16.040 --> 00:00:19.190
+ hi to George, but I will do it live. Hi George, how are you
+
+00:00:19.190 --> 00:00:19.720
+ doing?
+
+00:00:19.720 --> 00:00:26.330
+ Hello! No, doing well. I do think some of the content in
+
+00:00:26.330 --> 00:00:28.520
+ the etherpad got overridden.
+
+00:00:28.520 --> 00:00:33.520
+ Like I was typing out a whole bunch of different stuff with
+
+00:00:33.520 --> 00:00:36.320
+ other workflows to develop, but
+
+00:00:36.320 --> 00:00:40.330
+ I will try to find where that went. Yeah, so George,
+
+00:00:40.330 --> 00:00:41.640
+ nothing is lost. Don't worry
+
+00:00:41.640 --> 00:00:47.260
+ about this, we will get it back to you. I believe it's my
+
+00:00:47.260 --> 00:00:49.760
+ fault. I looked at the pad
+
+00:00:49.760 --> 00:00:51.920
+ and I said, "Oh, this is not a question, this is a pad."
+
+00:00:51.920 --> 00:00:53.800
+ And I think one of my Helvan
+
+00:00:53.800 --> 00:00:56.060
+ helps in the background said, "Oh yeah, I'm just going to
+
+00:00:56.060 --> 00:00:57.400
+ wipe this all out." But don't
+
+00:00:57.400 --> 00:01:00.360
+ worry, it's still in the history and we'll be able to find
+
+00:01:00.360 --> 00:01:01.600
+ all the code you had.
+
+00:01:01.600 --> 00:01:07.310
+ Cool, we'll find it. Yeah, so... So George, I'm just going
+
+00:01:07.310 --> 00:01:08.240
+ to... Sorry, this
+
+00:01:08.240 --> 00:01:11.940
+ is my task, to give you some context otherwise. Do you have
+
+00:01:11.940 --> 00:01:13.840
+ the pad open in front of you?
+
+00:01:13.840 --> 00:01:18.030
+ I do, yeah. I have the pad open. Would you be able to take
+
+00:01:18.030 --> 00:01:19.000
+ questions from there?
+
+00:01:19.000 --> 00:01:23.630
+ Yeah, so we can take questions from here. I think we've
+
+00:01:23.630 --> 00:01:26.240
+ already answered a bunch. So
+
+00:01:26.240 --> 00:01:30.060
+ one of the ones that's in there right now is, "Does it
+
+00:01:30.060 --> 00:01:32.720
+ become unwieldy due to the indirection
+
+00:01:32.720 --> 00:01:36.000
+ of the edit org source to use org mode and the virtual
+
+00:01:36.000 --> 00:01:37.880
+ linear programming as the project
+
+00:01:37.880 --> 00:01:44.250
+ becomes larger?" It can. So I generally use it for... I
+
+00:01:44.250 --> 00:01:47.160
+ find parts of the project that
+
+00:01:47.160 --> 00:01:53.390
+ are more useful for it and to be dropping in. So like on a
+
+00:01:53.390 --> 00:01:56.400
+ large project, when I'm working
+
+00:01:56.400 --> 00:02:01.200
+ with other people, I do not use it as much because you need
+
+00:02:01.200 --> 00:02:03.680
+ to actually be able to modify
+
+00:02:03.680 --> 00:02:08.480
+ the code. However, I just recently found out about a
+
+00:02:08.480 --> 00:02:11.160
+ feature called detangle, which is
+
+00:02:11.160 --> 00:02:15.060
+ the inverse of the tangle where as long as there's certain
+
+00:02:15.060 --> 00:02:17.120
+ tokens emitted into your file,
+
+00:02:17.120 --> 00:02:20.110
+ you'll be able to take the file and re-update back into the
+
+00:02:20.110 --> 00:02:21.960
+ linear programming document,
+
+00:02:21.960 --> 00:02:24.840
+ which is kind of mind-blowing as a feature. I have not had
+
+00:02:24.840 --> 00:02:26.280
+ a chance to experiment with
+
+00:02:26.280 --> 00:02:34.170
+ it yet though, and I think that could work really, really
+
+00:02:34.170 --> 00:02:35.920
+ well. Thanks for restoring
+
+00:02:35.920 --> 00:02:41.090
+ the stuff I was putting in. "I want to take a look at the
+
+00:02:41.090 --> 00:02:42.880
+ files used in your demo. Are
+
+00:02:42.880 --> 00:02:47.420
+ they somewhere online?" So I dropped the stuff I used for
+
+00:02:47.420 --> 00:02:51.720
+ the Arduino stuff. Now, caveat
+
+00:02:51.720 --> 00:02:55.220
+ with that, I was figuring out the workflows as I did it. So
+
+00:02:55.220 --> 00:02:57.320
+ there's like a readme of...
+
+00:02:57.320 --> 00:03:02.110
+ I was both figuring out Arduino and workflows. So the
+
+00:03:02.110 --> 00:03:05.400
+ initial readme has a bunch of projects
+
+00:03:05.400 --> 00:03:08.270
+ as I kind of did them one by one. So the workflow becomes
+
+00:03:08.270 --> 00:03:10.240
+ more mature the further down the list
+
+00:03:10.240 --> 00:03:16.080
+ you are. The ones earlier on are just copy-pasting a lot.
+
+00:03:16.080 --> 00:03:21.600
+ Do we have any other questions? This
+
+00:03:21.600 --> 00:03:25.590
+ is not the same shirt. You noticed. Also, the room's been
+
+00:03:25.590 --> 00:03:27.440
+ rearranged because my wife
+
+00:03:27.440 --> 00:03:30.640
+ made me move everything.
+
+00:03:30.640 --> 00:03:33.350
+ That's fine. Don't worry about it. It looks fine in the
+
+00:03:33.350 --> 00:03:35.000
+ background. I was implying that
+
+00:03:35.000 --> 00:03:37.290
+ you know the seven mistake game, trying to see what changed
+
+00:03:37.290 --> 00:03:38.360
+ in the background. I was
+
+00:03:38.360 --> 00:03:40.330
+ very interested though in some of the stuff that I was
+
+00:03:40.330 --> 00:03:41.720
+ seeing, including this dinner in
+
+00:03:41.720 --> 00:03:42.720
+ the background.
+
+00:03:42.720 --> 00:03:50.080
+ Yeah. Yeah, yeah. Yeah. There you go. There. It's my five-
+
+00:03:50.080 --> 00:03:54.560
+year-old's birthday party in
+
+00:03:54.560 --> 00:04:00.030
+ the summer. And it's been far more useful as a video
+
+00:04:00.030 --> 00:04:03.680
+ background than a bunch of five-year-olds
+
+00:04:03.680 --> 00:04:04.680
+ were impressed with it.
+
+00:04:04.680 --> 00:04:08.350
+ Yeah. Sorry. I do have to... It begs a question though,
+
+00:04:08.350 --> 00:04:10.760
+ which is it's a fairly large structure
+
+00:04:10.760 --> 00:04:14.080
+ to be made by a five-year-old. Like it is several five-
+
+00:04:14.080 --> 00:04:15.240
+years-old tall.
+
+00:04:15.240 --> 00:04:19.950
+ Yeah. Well, the idea was I wanted them to be able to fit
+
+00:04:19.950 --> 00:04:23.160
+ them. But it didn't quite work.
+
+00:04:23.160 --> 00:04:25.370
+ Yeah. It definitely feels like the mouth would be able to
+
+00:04:25.370 --> 00:04:26.680
+ fit a five-year-old. Yeah. So I
+
+00:04:26.680 --> 00:04:28.730
+ think we're good. We might want to get back on track. Sorry
+
+00:04:28.730 --> 00:04:29.400
+ for getting distracted by
+
+00:04:29.400 --> 00:04:32.680
+ this menacing presence in the background.
+
+00:04:32.680 --> 00:04:36.090
+ I had not heard of org-transclusion. I should look into
+
+00:04:36.090 --> 00:04:41.400
+ this. I'm waiting for the next one
+
+00:04:41.400 --> 00:04:47.800
+ to get typed up. I'll post a couple more things that...
+
+00:04:47.800 --> 00:04:54.960
+ Here. Into the chat. So a couple...
+
+00:04:54.960 --> 00:05:00.430
+ I mentioned in the chat that first of all, that org-entry-
+
+00:05:00.430 --> 00:05:03.480
+get thing to be able to...
+
+00:05:03.480 --> 00:05:07.660
+ So you could put properties into... You could put variables
+
+00:05:07.660 --> 00:05:09.480
+ into properties on your org
+
+00:05:09.480 --> 00:05:13.200
+ outline and then have them be referenced is really, really,
+
+00:05:13.200 --> 00:05:15.600
+ really powerful. Because especially
+
+00:05:15.600 --> 00:05:19.470
+ because you can call into blocks from other parts of the
+
+00:05:19.470 --> 00:05:22.400
+ outline. You can basically...
+
+00:05:22.400 --> 00:05:25.050
+ You know how... I don't know if anyone here does React. But
+
+00:05:25.050 --> 00:05:26.360
+ there's something that's very
+
+00:05:26.360 --> 00:05:29.640
+ powerful that happens because you could do... You kind of
+
+00:05:29.640 --> 00:05:31.240
+ have dynamic scoping over the
+
+00:05:31.240 --> 00:05:35.940
+ DOM tree. And you get a similar type of power that you get
+
+00:05:35.940 --> 00:05:38.760
+ with React contexts in org mode.
+
+00:05:38.760 --> 00:05:41.540
+ Because you have variables that you could set depending on
+
+00:05:41.540 --> 00:05:42.800
+ what's the closest point
+
+00:05:42.800 --> 00:05:48.570
+ in the outline tree is. And then have defaults cascade
+
+00:05:48.570 --> 00:05:49.640
+ upwards.
+
+00:05:49.640 --> 00:05:57.160
+ Let's see. Are workflows as they are in your life closely
+
+00:05:57.160 --> 00:06:01.400
+ tied to particular projects?
+
+00:06:01.400 --> 00:06:05.600
+ Or are they general workflows? So I think there's general
+
+00:06:05.600 --> 00:06:09.040
+ ones. Like repository source
+
+00:06:09.040 --> 00:06:12.820
+ code analysis that I've gone to and used over and over
+
+00:06:12.820 --> 00:06:16.120
+ again. So I mentioned down below
+
+00:06:16.120 --> 00:06:24.200
+ Codemod and JORS. That's a pretty common trick I use to...
+
+00:06:24.200 --> 00:06:25.480
+ Like just when I sit down with
+
+00:06:25.480 --> 00:06:28.770
+ a project to analyze its history. Make a movie of how it
+
+00:06:28.770 --> 00:06:30.480
+ plays out. And a lot of that is
+
+00:06:30.480 --> 00:06:35.820
+ very... It's easiest to orchestrate in org. So here
+
+00:06:35.820 --> 00:06:39.640
+ actually I'll drop... I'll drop one
+
+00:06:39.640 --> 00:06:44.560
+ right at the top of the other cool workflows. Here's an
+
+00:06:44.560 --> 00:06:48.840
+ example of something I did... I
+
+00:06:48.840 --> 00:06:54.080
+ don't want that to... We'll figure out how to make that not
+
+00:06:54.080 --> 00:06:57.240
+ be... There we go.
+
+00:06:57.240 --> 00:07:02.870
+ So here's an example I did where it was like... I'll clean
+
+00:07:02.870 --> 00:07:05.880
+ that up a little bit. But where
+
+00:07:05.880 --> 00:07:13.400
+ you basically are using org. Within org you use Codemod.
+
+00:07:13.400 --> 00:07:14.320
+ Here's the thing. This stuff
+
+00:07:14.320 --> 00:07:18.050
+ is hard to do if you can't just write about it and say this
+
+00:07:18.050 --> 00:07:19.960
+ is what I'm trying to do.
+
+00:07:19.960 --> 00:07:23.000
+ And talk about it in prose. Because you're doing things
+
+00:07:23.000 --> 00:07:24.600
+ like analysis and you have to
+
+00:07:24.600 --> 00:07:28.990
+ have it all ready in front of mind. And if you don't have
+
+00:07:28.990 --> 00:07:31.400
+ that... And if you have...
+
+00:07:31.400 --> 00:07:33.980
+ You just have an empty document. You can type into whatever
+
+00:07:33.980 --> 00:07:35.560
+. You can type what you're trying
+
+00:07:35.560 --> 00:07:39.690
+ to do. And then figure out how to do it in terms of these
+
+00:07:39.690 --> 00:07:40.520
+ blocks.
+
+00:07:40.520 --> 00:07:43.970
+ So for example, this is pretty generic and something I end
+
+00:07:43.970 --> 00:07:45.600
+ up going to a lot. Where you
+
+00:07:45.600 --> 00:07:49.520
+ use something like Codemod to basically run analysis on
+
+00:07:49.520 --> 00:07:52.480
+ like... Well, what sort of stuff
+
+00:07:52.480 --> 00:07:55.590
+ does... Or I guess that first one's not even Codemod. That
+
+00:07:55.590 --> 00:07:58.320
+ first one's just Git log analysis.
+
+00:07:58.320 --> 00:08:02.730
+ What sort of stuff has a person done? What files have they
+
+00:08:02.730 --> 00:08:04.200
+ touched? And then like...
+
+00:08:04.200 --> 00:08:06.380
+ Okay. I don't want to see the full list of the files. I
+
+00:08:06.380 --> 00:08:07.640
+ just want to get an idea of what
+
+00:08:07.640 --> 00:08:12.750
+ areas they've worked. So really take the first few director
+
+00:08:12.750 --> 00:08:14.640
+ies of there. And just emit that
+
+00:08:14.640 --> 00:08:18.770
+ out to the screen. And now I can kind of go by each author
+
+00:08:18.770 --> 00:08:20.240
+ and figure that out. And then
+
+00:08:20.240 --> 00:08:24.220
+ the next example is me using the Codemod project to do
+
+00:08:24.220 --> 00:08:28.720
+ something like... Well, what's... Let's
+
+00:08:28.720 --> 00:08:32.070
+ look at coupling. So whenever one file within this project
+
+00:08:32.070 --> 00:08:33.200
+ changes, what other files are
+
+00:08:33.200 --> 00:08:36.090
+ likely to change? Oh, and I don't care about test files.
+
+00:08:36.090 --> 00:08:37.760
+ And I don't care about doc files.
+
+00:08:37.760 --> 00:08:40.440
+ And I don't care about package log or whatever. And then
+
+00:08:40.440 --> 00:08:42.680
+ again, you get that analysis. It's
+
+00:08:42.680 --> 00:08:43.680
+ very useful.
+
+00:08:43.680 --> 00:08:46.190
+ - Sorry, George. Interjecting real quickly to say two
+
+00:08:46.190 --> 00:08:47.880
+ things. First, we have opened the
+
+00:08:47.880 --> 00:08:51.260
+ Q&A if you want to join and ask questions to George or...
+
+00:08:51.260 --> 00:08:52.560
+ Just like I'm doing right
+
+00:08:52.560 --> 00:08:55.810
+ now. And also, George, I am a little lost. You are the
+
+00:08:55.810 --> 00:08:57.880
+ green collar on the bad, right?
+
+00:08:57.880 --> 00:09:04.240
+ - I am the what? Oh, I am now the... Yes, I am the green
+
+00:09:04.240 --> 00:09:05.480
+ collar.
+
+00:09:05.480 --> 00:09:07.200
+ - Okay. So I've lost...
+
+00:09:07.200 --> 00:09:11.000
+ - No, you're the green collar. I am now... Goodness.
+
+00:09:11.000 --> 00:09:13.770
+ - Okay. Can you tell me at which time you were? Because I
+
+00:09:13.770 --> 00:09:15.120
+ was a little lost in the bad
+
+00:09:15.120 --> 00:09:16.520
+ on what you were commenting on right now.
+
+00:09:16.520 --> 00:09:19.600
+ - Okay. Yeah, yeah, yeah. That was... I'm purple collar now
+
+00:09:19.600 --> 00:09:20.920
+. So that first block under
+
+00:09:20.920 --> 00:09:24.000
+ other cool workflows is what I just put in there.
+
+00:09:24.000 --> 00:09:26.280
+ - Okay. Cool. It is on screen now.
+
+00:09:26.280 --> 00:09:29.480
+ - Yeah, yeah, yeah. And then there's a question, possibly
+
+00:09:29.480 --> 00:09:31.320
+ weak understanding here, but why
+
+00:09:31.320 --> 00:09:36.930
+ direct use of Tangle versus Org Babel? So take something
+
+00:09:36.930 --> 00:09:40.160
+ like Arduino CLI. That is running
+
+00:09:40.160 --> 00:09:44.810
+ at the file system level. Well, okay, no. Arduino CLI works
+
+00:09:44.810 --> 00:09:46.360
+ with the file system. You're
+
+00:09:46.360 --> 00:09:51.010
+ telling it, "Here are some files. Go do some stuff with
+
+00:09:51.010 --> 00:09:55.480
+ those files." So in order to do
+
+00:09:55.480 --> 00:09:59.560
+ that at the... And you have to have a specific type of file
+
+00:09:59.560 --> 00:10:01.640
+ system. So in order to do that
+
+00:10:01.640 --> 00:10:05.280
+ directly in Org Babel, I'd have to write an Org Babel
+
+00:10:05.280 --> 00:10:07.840
+ extension, which are not super easy
+
+00:10:07.840 --> 00:10:11.450
+ to write, that kind of writes files into a temp directory
+
+00:10:11.450 --> 00:10:13.320
+ in a certain format, blah,
+
+00:10:13.320 --> 00:10:16.720
+ blah, blah, which is hard. What's a lot easier is just tell
+
+00:10:16.720 --> 00:10:18.600
+ Tangle to just dump the file
+
+00:10:18.600 --> 00:10:22.020
+ and have a file watcher running. And whenever it happens,
+
+00:10:22.020 --> 00:10:24.120
+ it just deploys to an Arduino,
+
+00:10:24.120 --> 00:10:33.630
+ for example. Yeah, so it's basically a way of integrating
+
+00:10:33.630 --> 00:10:35.120
+ with things that require the
+
+00:10:35.120 --> 00:10:36.120
+ file system.
+
+00:10:36.120 --> 00:10:41.650
+ - Sorry, George, was there a question for me? I'm not sure
+
+00:10:41.650 --> 00:10:43.160
+ I was...
+
+00:10:43.160 --> 00:10:46.240
+ - Oh, no, no, no, no, no. I think that was the answer to
+
+00:10:46.240 --> 00:10:48.120
+ the question. I'm now looking
+
+00:10:48.120 --> 00:10:49.120
+ to see if there's...
+
+00:10:49.120 --> 00:10:50.120
+ - Okay, sorry.
+
+00:10:50.120 --> 00:10:51.120
+ - Yeah, we have more questions.
+
+00:10:51.120 --> 00:10:55.050
+ - Also, George, to give you a little bit of a heads up, we
+
+00:10:55.050 --> 00:10:57.240
+ have opened the Q&A right now,
+
+00:10:57.240 --> 00:11:00.830
+ and people should be able to join. But we only have about
+
+00:11:00.830 --> 00:11:02.640
+ three more minutes until we
+
+00:11:02.640 --> 00:11:06.260
+ need to go on a little bit of a break. So feel free to
+
+00:11:06.260 --> 00:11:08.480
+ answer as many questions on the
+
+00:11:08.480 --> 00:11:11.500
+ pad as possible. I don't see anyone in the chat, on BBB
+
+00:11:11.500 --> 00:11:13.240
+ right now, so questions on the
+
+00:11:13.240 --> 00:11:14.240
+ pad.
+
+00:11:14.240 --> 00:11:20.400
+ - Yeah, so I'll just put a couple more things. I'm a big
+
+00:11:20.400 --> 00:11:24.720
+ fan of plant QML, and I will regularly
+
+00:11:24.720 --> 00:11:30.750
+ use plant QML to do both architecture diagrams and wire
+
+00:11:30.750 --> 00:11:34.800
+frames using their salt language for
+
+00:11:34.800 --> 00:11:37.850
+ mockups. So I'll write an entire technical document being
+
+00:11:37.850 --> 00:11:39.160
+ like, "Here's what we should
+
+00:11:39.160 --> 00:11:42.250
+ do," and be putting stuff directly in it. People see it,
+
+00:11:42.250 --> 00:11:45.040
+ and they're like, "Oh, mockup's
+
+00:11:45.040 --> 00:11:50.990
+ great." Not directly about... Oh, TreeSitter integration,
+
+00:11:50.990 --> 00:11:53.600
+ because you can now use TreeSitter.
+
+00:11:53.600 --> 00:11:57.110
+ So you can use TreeSitter to analyze other code files. So
+
+00:11:57.110 --> 00:11:59.080
+ for example, I recently wrote
+
+00:11:59.080 --> 00:12:03.210
+ a little TreeSitter script that would pop open a TypeScript
+
+00:12:03.210 --> 00:12:05.200
+ file, analyze all the exports,
+
+00:12:05.200 --> 00:12:08.420
+ and grab everything that's exported along with its .com and
+
+00:12:08.420 --> 00:12:10.000
+ just dump it into my document
+
+00:12:10.000 --> 00:12:14.780
+ so I can review it and update it just by with a keystroke
+
+00:12:14.780 --> 00:12:18.160
+ as that file evolves. And just
+
+00:12:18.160 --> 00:12:23.820
+ an honorable mention, I would say I recently found out Org-
+
+00:12:23.820 --> 00:12:25.720
+Rome UI. So if you're an Org-Rome
+
+00:12:25.720 --> 00:12:29.050
+ user, that's an awesome visualization where it starts a
+
+00:12:29.050 --> 00:12:30.720
+ server and shows you a little
+
+00:12:30.720 --> 00:12:35.370
+ web page with everything visualized. And just in terms of
+
+00:12:35.370 --> 00:12:38.720
+... It's nice and cool and useful,
+
+00:12:38.720 --> 00:12:42.690
+ but it's also a great politics hack where you start a new
+
+00:12:42.690 --> 00:12:44.680
+ job or a team, and then you
+
+00:12:44.680 --> 00:12:47.670
+ spend a month, a week taking your notes. So you have 80
+
+00:12:47.670 --> 00:12:49.080
+ notes or something like that,
+
+00:12:49.080 --> 00:12:50.800
+ because they're a little bit... And then at the end of the
+
+00:12:50.800 --> 00:12:51.760
+ week, you do your one-on-one
+
+00:12:51.760 --> 00:12:54.560
+ with your manager. You're like, "Here's the visualization
+
+00:12:54.560 --> 00:12:56.360
+ and everything," and your jaw
+
+00:12:56.360 --> 00:12:57.360
+ drops. Yes.
+
+00:12:57.360 --> 00:13:00.750
+ It is. It is amazing. Org-Rome UI is amazing. I'm a little
+
+00:13:00.750 --> 00:13:02.480
+ biased, so I won't talk too much
+
+00:13:02.480 --> 00:13:04.500
+ about it because people in the know will know that I've
+
+00:13:04.500 --> 00:13:06.040
+ actually helped with the development
+
+00:13:06.040 --> 00:13:08.700
+ of Org-Rome. But yes, Org-Rome UI is so great. I also
+
+00:13:08.700 --> 00:13:11.000
+ worked in a team where we were presenting
+
+00:13:11.000 --> 00:13:14.930
+ Org-Rome and Org-Rome UI to people who had no idea of what
+
+00:13:14.930 --> 00:13:16.840
+ was Emacs or Org-Mode, but
+
+00:13:16.840 --> 00:13:21.420
+ they could see atoms and they could see them being linked.
+
+00:13:21.420 --> 00:13:24.160
+ It was so amazing. It just works.
+
+00:13:24.160 --> 00:13:26.320
+ It's great when things just work.
+
+00:13:26.320 --> 00:13:27.320
+ Yeah.
+
+00:13:27.320 --> 00:13:31.120
+ All right, George. Any last thing you'd like to say to the
+
+00:13:31.120 --> 00:13:32.960
+ stream before we wrap up?
+
+00:13:32.960 --> 00:13:36.980
+ Nope. Put more workflows in the document if you have any
+
+00:13:36.980 --> 00:13:38.320
+ other ideas too.
+
+00:13:38.320 --> 00:13:41.440
+ Cool. Amazing. We'll be on the lookout for this. So George,
+
+00:13:41.440 --> 00:13:42.440
+ thank you so much for your
+
+00:13:42.440 --> 00:13:45.640
+ presentation and for your questions, and we will see you
+
+00:13:45.640 --> 00:13:46.760
+ later probably.
+
+00:13:46.760 --> 00:13:47.760
+ Thank you. Bye-bye.
+
+00:13:47.760 --> 00:13:48.760
+ Bye-bye.
+
+00:13:48.760 --> 00:13:58.820
+ I'm still there. See you in a bit, folks. Oh, sorry. Sorry.
+
+00:13:58.820 --> 00:14:00.920
+ I'm panicking. Give me
+
+00:14:00.920 --> 00:14:08.300
+ a second. Sure. You saw me whisper right now. We will be
+
+00:14:08.300 --> 00:14:09.640
+ going on a little bit of a break
+
+00:14:09.640 --> 00:14:14.960
+ right now. The next talk will be due in about 10 minutes.
+
+00:14:14.960 --> 00:14:18.200
+ So at 35 of the current hour,
+
+00:14:18.200 --> 00:14:21.450
+ we will be reconvening on Gen for the next talk. So see you
+
+00:14:21.450 --> 00:14:23.560
+ in a bit and enjoy the break.
+
+00:14:23.560 --> 00:14:29.160
+ You are currently the only person in this conference.
+
+00:14:29.160 --> 00:14:41.310
+ Give me just a second. I'll put some music for the break.
+
+00:14:41.310 --> 00:14:45.240
+ Right now I'm doing too many
+
+00:14:45.240 --> 00:14:47.140
+ things at the same time. So we will have to wait a little
+
+00:14:47.140 --> 00:14:48.280
+ bit for everything to work.
+
+00:14:48.280 --> 00:14:50.340
+ I'll put the music on first so that you have something nice
+
+00:14:50.340 --> 00:14:51.560
+ to listen to, which is Shoshin
+
+00:14:51.560 --> 00:15:04.440
+ Music the Lloyd.
+
+00:15:04.440 --> 00:15:20.440
+ (Music)
+
+00:15:20.440 --> 00:15:40.440
+ (Music)
+
+00:15:40.440 --> 00:16:00.440
+ (Music)
+
+00:16:00.440 --> 00:16:20.440
+ (Music)
+
+00:16:20.440 --> 00:16:40.440
+ (Music)
+
+00:16:40.440 --> 00:17:00.440
+ (Music)
+
+00:17:00.440 --> 00:17:20.440
+ (Music)
+
+00:17:20.440 --> 00:17:40.440
+ (Music)
+
+00:17:40.440 --> 00:17:54.440
+ (Music)
+
diff --git a/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt
new file mode 100644
index 00000000..d3302b79
--- /dev/null
+++ b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main--chapters.vtt
@@ -0,0 +1,77 @@
+WEBVTT
+
+1
+00:00:00.000 --> 00:00:53.960
+Introduction
+
+21
+00:00:53.960 --> 00:02:30.200
+The future
+
+60
+00:02:30.200 --> 00:03:15.680
+Org development workflows
+
+78
+00:03:15.680 --> 00:04:54.600
+Taking notes
+
+109
+00:04:54.600 --> 00:06:10.680
+org-capture templates
+
+132
+00:06:10.680 --> 00:06:49.160
+Building up a dashboard
+
+146
+00:06:49.160 --> 00:07:45.680
+org-store-links
+
+164
+00:07:45.680 --> 00:08:21.480
+Formatting
+
+174
+00:08:21.480 --> 00:08:52.200
+Pasting code
+
+184
+00:08:52.200 --> 00:10:04.960
+Git
+
+202
+00:10:04.960 --> 00:11:29.040
+async-shell-command
+
+226
+00:11:29.040 --> 00:13:47.840
+Literate programming and tangling
+
+272
+00:13:47.840 --> 00:14:36.400
+Noweb
+
+290
+00:14:36.400 --> 00:16:04.480
+Running commands
+
+316
+00:16:04.480 --> 00:16:43.600
+Buttons
+
+327
+00:16:43.600 --> 00:18:04.800
+Workspaces
+
+353
+00:18:04.800 --> 00:18:36.000
+dash
+
+366
+00:18:36.000 --> 00:19:29.920
+Header arguments
+
+386
+00:19:29.920 --> 00:20:26.920
+Conclusion
diff --git a/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt
new file mode 100644
index 00000000..58d88b2f
--- /dev/null
+++ b/2022/captions/emacsconf-2022-workflows--org-workflows-for-developers--george-mauer--main.vtt
@@ -0,0 +1,1309 @@
+WEBVTT captioned by bhavin192
+
+00:00:00.000 --> 00:00:04.600
+Hello. Welcome to my first ever EmacsConf talk.
+
+00:00:04.600 --> 00:00:06.360
+This is really exciting for me.
+
+00:00:06.360 --> 00:00:08.600
+I've done lots of conferences,
+
+00:00:08.600 --> 00:00:12.800
+but rarely ones this technical and this nerdy.
+
+00:00:12.800 --> 00:00:13.508
+I also feel like
+
+00:00:13.508 --> 00:00:15.040
+I have something interesting to share.
+
+00:00:15.040 --> 00:00:18.680
+I come to Emacs relatively late in my career,
+
+00:00:18.680 --> 00:00:20.920
+only about six years ago,
+
+00:00:20.920 --> 00:00:22.880
+but I've been absolutely amazed
+
+00:00:22.880 --> 00:00:25.800
+at the innovation and commitment of the community
+
+00:00:25.800 --> 00:00:28.200
+to do things their own way.
+
+00:00:28.200 --> 00:00:30.120
+Oftentimes, these become things
+
+00:00:30.120 --> 00:00:33.880
+that are not readily available anywhere else.
+
+00:00:33.880 --> 00:00:35.307
+So, as I've been using Emacs
+
+00:00:35.307 --> 00:00:37.160
+(and Org mode specifically)
+
+00:00:37.160 --> 00:00:39.600
+a great deal in my day-to-day workflows,
+
+00:00:39.600 --> 00:00:41.520
+I've been leaning more and more into
+
+00:00:41.520 --> 00:00:43.607
+some of these tips and tricks.
+
+00:00:43.607 --> 00:00:46.680
+I find that there is almost every day
+
+00:00:46.680 --> 00:00:48.120
+that I discover some useful tweak
+
+00:00:48.120 --> 00:00:50.760
+that can make my development better.
+
+00:00:50.760 --> 00:00:53.960
+I want to share them with you now.
+
+00:00:53.960 --> 00:00:54.874
+[Future George]: Hey, hold on!
+
+00:00:54.874 --> 00:00:56.200
+Who are you?
+
+00:00:56.200 --> 00:01:00.400
+[Future George]: I'm you from the future!
+
+00:01:00.400 --> 00:01:02.480
+Oh, nice. How good.
+
+00:01:02.480 --> 00:01:05.240
+No, I'm you from, like, a month from now.
+
+00:01:05.240 --> 00:01:08.440
+Look, you know how these talks are pre-recorded,
+
+00:01:08.440 --> 00:01:10.760
+and you know how you've spent the last two years
+
+00:01:10.760 --> 00:01:12.400
+criticizing conference speakers
+
+00:01:12.400 --> 00:01:14.000
+for trying to do the same old thing
+
+00:01:14.000 --> 00:01:15.120
+and not creatively adapting
+
+00:01:15.120 --> 00:01:17.440
+to the online conference medium?
+
+00:01:17.440 --> 00:01:20.520
+Well, you are recording this back in November.
+
+00:01:20.520 --> 00:01:23.160
+I'm in December when everyone is watching this
+
+00:01:23.160 --> 00:01:24.720
+for the first time.
+
+00:01:24.720 --> 00:01:27.120
+That is something we can do now.
+
+00:01:27.120 --> 00:01:29.640
+[George]: Okay, so this is a gimmick.
+
+00:01:29.640 --> 00:01:32.880
+Cool! And I see you still haven't figured out
+
+00:01:32.880 --> 00:01:35.440
+how to remove backgrounds with OBS.
+
+00:01:35.440 --> 00:01:37.240
+[Future George]: Oh my god! It's such a pain,
+
+00:01:37.240 --> 00:01:40.360
+I have to get a plugin or something.
+
+00:01:40.360 --> 00:01:42.760
+So, yes, it's kind of a gimmick,
+
+00:01:42.760 --> 00:01:44.920
+but I also have a cool point.
+
+00:01:44.920 --> 00:01:46.200
+You know, how you just said
+
+00:01:46.200 --> 00:01:48.840
+that you discover something new every day?
+
+00:01:48.840 --> 00:01:49.920
+Well, your talk isn't that long,
+
+00:01:49.920 --> 00:01:52.720
+and I found a bunch of cool new workflow synths.
+
+00:01:52.720 --> 00:01:55.920
+[George]: Oh, okay, that makes sense.
+
+00:01:55.920 --> 00:01:58.360
+I'm starting a new job in the intervening time.
+
+00:01:58.360 --> 00:01:59.720
+[Future George]: Exactly!
+
+00:01:59.720 --> 00:02:02.440
+So, I have more stuff I want to add.
+
+00:02:02.440 --> 00:02:03.740
+[George]: Oh, and I bet that
+
+00:02:03.740 --> 00:02:05.960
+once we set the ground rules,
+
+00:02:05.960 --> 00:02:07.136
+the audience might have
+
+00:02:07.136 --> 00:02:08.960
+some of their own suggestions.
+
+00:02:08.960 --> 00:02:11.160
+That is a good idea.
+
+00:02:11.160 --> 00:02:11.960
+Okay, go away now.
+
+00:02:11.960 --> 00:02:13.574
+[Future George]: Fine, but
+
+00:02:13.574 --> 00:02:15.240
+aren't you gonna explain the dino?
+
+00:02:15.240 --> 00:02:18.800
+[George]: This is EmacsConf, dude.
+
+00:02:18.800 --> 00:02:20.320
+You think a dinosaur built out of
+
+00:02:20.320 --> 00:02:22.160
+boxes and old dishwasher parts
+
+00:02:22.160 --> 00:02:24.207
+is the weirdest background thing we'll see?
+
+00:02:24.207 --> 00:02:27.880
+[Both making dinosaur roaring sound: ROAAAAR!]
+
+00:02:27.880 --> 00:02:30.200
+Okay, bye now.
+
+00:02:30.200 --> 00:02:33.160
+Hey everyone, you heard the idea.
+
+00:02:33.160 --> 00:02:35.000
+This is going to be a thinly-veiled attempt
+
+00:02:35.000 --> 00:02:36.940
+to show you stuff about
+
+00:02:36.940 --> 00:02:38.760
+Emacs and Org mode, specifically,
+
+00:02:38.760 --> 00:02:41.560
+that I think is super cool and immediately useful
+
+00:02:41.560 --> 00:02:43.600
+while you're doing development.
+
+00:02:43.600 --> 00:02:46.720
+Let's define the scope of Org development workflow
+
+00:02:46.720 --> 00:02:49.000
+as something specific you do with Org mode
+
+00:02:49.000 --> 00:02:50.800
+that helps in certain common
+
+00:02:50.800 --> 00:02:52.880
+development related activities.
+
+00:02:52.880 --> 00:02:54.560
+Now, tie-dye me from the future said
+
+00:02:54.560 --> 00:02:56.960
+he's got some more ideas
+
+00:02:56.960 --> 00:02:58.840
+beyond what I'm presenting here.
+
+00:02:58.840 --> 00:03:01.960
+I'm sure many of you have ideas as well.
+
+00:03:01.960 --> 00:03:07.960
+So, we're going to share a collaborative document,
+
+00:03:07.960 --> 00:03:10.120
+and let's all as we're listening to this
+
+00:03:10.120 --> 00:03:11.440
+be talking, and chatting, and entering
+
+00:03:11.440 --> 00:03:13.240
+our own ideas and workflows,
+
+00:03:13.240 --> 00:03:15.680
+so that we can learn and improve together.
+
+00:03:15.680 --> 00:03:17.960
+And now with that, let's begin.
+
+00:03:17.960 --> 00:03:20.280
+I've got a ton of ground to cover,
+
+00:03:20.280 --> 00:03:23.480
+and I want to start by talking about note-taking.
+
+00:03:23.480 --> 00:03:25.720
+Shrink down! [transition]
+
+00:03:25.720 --> 00:03:30.074
+Note-taking is incredibly important.
+
+00:03:30.074 --> 00:03:33.600
+We can't keep all this stuff in our heads.
+
+00:03:33.600 --> 00:03:36.640
+So, for example, I find myself with
+
+00:03:36.640 --> 00:03:41.760
+the need to learn about the solid project.
+
+00:03:41.760 --> 00:03:44.520
+This right here is the solid project,
+
+00:03:44.520 --> 00:03:47.320
+and I want to play around with it.
+
+00:03:47.320 --> 00:03:50.920
+I am going to start by creating a note for it.
+
+00:03:50.920 --> 00:03:53.360
+Now, one of the things that I want to do
+
+00:03:53.360 --> 00:03:57.240
+is explore one of their tutorials.
+
+00:03:57.240 --> 00:03:58.960
+That's the site I just saw.
+
+00:03:58.960 --> 00:04:03.720
+I can go ahead and create a note for myself.
+
+00:04:03.720 --> 00:04:10.280
+Right, "Solid React Example",
+
+00:04:10.280 --> 00:04:12.120
+and maybe a set of stuff ending on there.
+
+00:04:12.120 --> 00:04:14.240
+I'm going to clone this project,
+
+00:04:14.240 --> 00:04:15.720
+which I've already done,
+
+00:04:15.720 --> 00:04:18.360
+and I can pull it up right here.
+
+00:04:18.360 --> 00:04:22.280
+So, I can pull it up right here,
+
+00:04:22.280 --> 00:04:24.440
+and I can now start to explore it.
+
+00:04:24.440 --> 00:04:26.440
+So, for example, this code base sounds…,
+
+00:04:26.440 --> 00:04:27.080
+it seems interesting.
+
+00:04:27.080 --> 00:04:28.996
+I'm going to want to
+
+00:04:28.996 --> 00:04:31.520
+store a link to this in my code.
+
+00:04:31.520 --> 00:04:34.840
+I'm going to run `org-store-link`,
+
+00:04:34.840 --> 00:04:37.960
+and I can come in here and say,
+
+00:04:37.960 --> 00:04:48.280
+let's explore structure. Local link,
+
+00:04:48.280 --> 00:04:50.640
+and here I'm going to put that right there.
+
+00:04:50.640 --> 00:04:52.960
+Now, at any given time I can come into this note
+
+00:04:52.960 --> 00:04:54.600
+and be thrown right into the structure.
+
+00:04:54.600 --> 00:04:58.880
+I want to go and now start investigating the code,
+
+00:04:58.880 --> 00:05:02.474
+but before doing that
+
+00:05:02.474 --> 00:05:08.280
+I'm going to take an extra step
+
+00:05:08.280 --> 00:05:13.560
+and customize the Org capture system.
+
+00:05:13.560 --> 00:05:16.297
+I'm going to create a playground node here,
+
+00:05:16.297 --> 00:05:17.320
+where I can do whatever.
+
+00:05:17.320 --> 00:05:20.680
+Now, what does this template do?
+
+00:05:20.680 --> 00:05:22.960
+Well, it's just going to create a new template.
+
+00:05:22.960 --> 00:05:24.640
+And whenever I hit the s key,
+
+00:05:24.640 --> 00:05:31.680
+it is going to go ahead and add a new heading
+
+00:05:31.680 --> 00:05:36.280
+to which I will enter,
+
+00:05:36.280 --> 00:05:38.326
+and it's going to grab a link
+
+00:05:38.326 --> 00:05:39.720
+to wherever I'm pointing at,
+
+00:05:39.720 --> 00:05:41.760
+and any highlighted code
+
+00:05:41.760 --> 00:05:44.560
+will also be inserted into a source block,
+
+00:05:44.560 --> 00:05:49.407
+and eventually, drop my cursor
+
+00:05:49.407 --> 00:05:52.107
+where I can work on it.
+
+00:05:52.107 --> 00:05:55.000
+So, we can grab our template,
+
+00:05:55.000 --> 00:05:57.400
+and the one thing I'm going to need to add it here
+
+00:05:57.400 --> 00:05:59.360
+is to say what file this goes to.
+
+00:05:59.360 --> 00:06:03.760
+I'm going to copy the name of this file,
+
+00:06:03.760 --> 00:06:08.040
+and put it right in there.
+
+00:06:08.040 --> 00:06:10.680
+I'm going to go ahead now run this template.
+
+00:06:10.680 --> 00:06:14.400
+Now, we can explore our code.
+
+00:06:14.400 --> 00:06:16.440
+For example, I can look in the server,
+
+00:06:16.440 --> 00:06:18.400
+and say, "Oh yeah, this slide looks interesting.
+
+00:06:18.400 --> 00:06:21.040
+Go ahead and capture that."
+
+00:06:21.040 --> 00:06:23.800
+There you see our template.
+
+00:06:23.800 --> 00:06:26.000
+You see, yeah, this is Next.js app,
+
+00:06:26.000 --> 00:06:29.320
+and you can see it got added right in here
+
+00:06:29.320 --> 00:06:33.080
+right next to my other code.
+
+00:06:33.080 --> 00:06:34.640
+So, that's interesting.
+
+00:06:34.640 --> 00:06:36.920
+I can always go ahead and click that link,
+
+00:06:36.920 --> 00:06:40.560
+and get thrown directly to where in the code I was.
+
+00:06:40.560 --> 00:06:43.240
+I'm kind of building up my own dashboard
+
+00:06:43.240 --> 00:06:45.040
+as I explore this project
+
+00:06:45.040 --> 00:06:49.160
+of interesting points within the project.
+
+00:06:49.160 --> 00:06:52.440
+One of the things I noticed here
+
+00:06:52.440 --> 00:06:57.440
+by looking at the file structure is that
+
+00:06:57.440 --> 00:07:02.040
+there is an area for certificates.
+
+00:07:02.040 --> 00:07:05.625
+That's a little unusual, so we'll make a note
+
+00:07:05.625 --> 00:07:08.007
+of that by again running `org-store-link`.
+
+00:07:08.007 --> 00:07:12.707
+This comes with certificates,
+
+00:07:12.707 --> 00:07:18.007
+so we'll put that there.
+
+00:07:18.007 --> 00:07:21.607
+One of the good standbys is,
+
+00:07:21.607 --> 00:07:23.540
+just to use our regular shell commands.
+
+00:07:23.540 --> 00:07:26.774
+So, we will go ahead and say,
+
+00:07:26.774 --> 00:07:29.807
+the default directory for this is our project.
+
+00:07:29.807 --> 00:07:31.640
+And we can go ahead and say,
+
+00:07:31.640 --> 00:07:38.520
+`cat certificates/localhost.key`,
+
+00:07:38.520 --> 00:07:43.760
+and then we'll output the first five lines of it,
+
+00:07:43.760 --> 00:07:45.848
+just to make sure it's a regular certificate.
+
+00:07:45.848 --> 00:07:49.360
+Now, notice this got broken up a little bit.
+
+00:07:49.360 --> 00:07:51.720
+This is due to Emacs auto formatting.
+
+00:07:51.720 --> 00:07:55.866
+We can come in here, and tell it to
+
+00:07:55.866 --> 00:07:57.400
+format it as code,
+
+00:07:57.400 --> 00:07:59.880
+which will be the same as this block right here.
+
+00:07:59.880 --> 00:08:02.320
+Now, there are other options available.
+
+00:08:02.320 --> 00:08:05.453
+If, for example, we don't want [it]
+
+00:08:05.453 --> 00:08:06.480
+to be a shell block,
+
+00:08:06.480 --> 00:08:09.560
+we wanted a Python block for some reason,
+
+00:08:09.560 --> 00:08:15.320
+we do `:wrap src python`, and execute that,
+
+00:08:15.320 --> 00:08:18.440
+and it's now wrapped as a Python block,
+
+00:08:18.440 --> 00:08:21.480
+but I like it as a shell.
+
+00:08:21.480 --> 00:08:24.240
+Let's, for example, go down into pages here
+
+00:08:24.240 --> 00:08:25.800
+and look at this document file.
+
+00:08:25.800 --> 00:08:29.160
+We're saying, "Okay. Well, this looks interesting
+
+00:08:29.160 --> 00:08:32.474
+maybe highlight that," and we'll go ahead
+
+00:08:32.474 --> 00:08:36.240
+and capture that template
+
+00:08:36.240 --> 00:08:39.400
+and say, grab all this code and paste it in here.
+
+00:08:39.400 --> 00:08:42.440
+Now, there is a bug at the moment,
+
+00:08:42.440 --> 00:08:46.280
+where if you highlight more than one lines of code,
+
+00:08:46.280 --> 00:08:50.760
+the link will not work, and that honestly
+
+00:08:50.760 --> 00:08:54.540
+might be something I look into fixing.
+
+00:08:54.540 --> 00:08:57.507
+One of the things that might be useful here
+
+00:08:57.507 --> 00:08:59.274
+would be to check out
+
+00:08:59.274 --> 00:09:02.107
+how this file has evolved over time.
+
+00:09:02.107 --> 00:09:05.340
+To do that, I'm going to use Magit.
+
+00:09:05.340 --> 00:09:09.640
+I'll pull up a log.
+
+00:09:09.640 --> 00:09:11.400
+Look, there's only a single change.
+
+00:09:11.400 --> 00:09:13.040
+I'm going to run a command
+
+00:09:13.040 --> 00:09:16.840
+called `orgit-store-link`,
+
+00:09:16.840 --> 00:09:22.174
+and now I can come in here and say,
+
+00:09:22.174 --> 00:09:26.207
+"It's only changed once."
+
+00:09:26.207 --> 00:09:30.274
+Go ahead and insert that link.
+
+00:09:30.507 --> 00:09:33.340
+Now, this file…
+
+00:09:33.340 --> 00:09:32.960
+the arguments here are kind of weird,
+
+00:09:35.800 --> 00:09:38.520
+and in fact, if I click this,
+
+00:09:38.520 --> 00:09:42.040
+it will actually go to the full log of that branch.
+
+00:09:42.040 --> 00:09:45.760
+However, we can fix that pretty easily.
+
+00:09:45.760 --> 00:09:49.120
+Grab the path of our file,
+
+00:09:49.120 --> 00:09:53.874
+and this right here is really just the arguments
+
+00:09:53.874 --> 00:09:56.280
+that are passed into the log command.
+
+00:09:56.280 --> 00:09:58.880
+So, here we go, we put that in there,
+
+00:09:58.880 --> 00:10:04.960
+and there we go. We get the full file history.
+
+00:10:04.960 --> 00:10:09.280
+Now, I want to actually build the program.
+
+00:10:09.280 --> 00:10:16.520
+So, "Build the app."
+
+00:10:16.520 --> 00:10:18.800
+Now, I could of course run it as a shell, right.
+
+00:10:18.800 --> 00:10:22.560
+`npm ci`. The problem with that is that
+
+00:10:22.560 --> 00:10:26.400
+Emacs is single-threaded. So, if I were to do that,
+
+00:10:26.400 --> 00:10:30.400
+the entire time while it was running,
+
+00:10:30.400 --> 00:10:33.120
+it would be locking out my Emacs.
+
+00:10:33.120 --> 00:10:35.740
+Additionally, I might not actually want
+
+00:10:35.740 --> 00:10:38.707
+all that scroll--`npm ci` produces a lot of it--
+
+00:10:38.707 --> 00:10:40.080
+actually in my document.
+
+00:10:40.080 --> 00:10:43.840
+So instead, what we could do is
+
+00:10:43.840 --> 00:10:46.800
+use an Emacs Lisp function,
+
+00:10:46.800 --> 00:10:49.640
+and it's called `async-shell-command`.
+
+00:10:49.640 --> 00:10:52.880
+And when you run something in async-shell-command,
+
+00:10:52.880 --> 00:10:58.007
+it's going to a comint buffer with a process
+
+00:10:58.007 --> 00:11:00.107
+attached to it, and run it in there.
+
+00:11:00.107 --> 00:11:04.907
+I will need to set the directory here first,
+
+00:11:04.907 --> 00:11:07.560
+and since, again, this is going to be
+
+00:11:07.560 --> 00:11:08.960
+opening up in a new buffer.
+
+00:11:08.960 --> 00:11:09.960
+I don't need to see that.
+
+00:11:09.960 --> 00:11:11.407
+I'm going to run it.
+
+00:11:11.407 --> 00:11:13.680
+And what's going to happen is
+
+00:11:13.680 --> 00:11:17.120
+this is actually not going to work.
+
+00:11:17.120 --> 00:11:18.160
+And it doesn't work,
+
+00:11:18.160 --> 00:11:20.320
+Not for any particular reason I can control.
+
+00:11:20.320 --> 00:11:24.880
+It's unfortunately that the repo is broken,
+
+00:11:24.880 --> 00:11:26.307
+but that is a totally valid
+
+00:11:26.307 --> 00:11:29.040
+result of our investigation.
+
+00:11:29.040 --> 00:11:33.107
+One of the things that I really love
+
+00:11:33.107 --> 00:11:37.640
+to do with Org mode is to actually use it for
+
+00:11:37.640 --> 00:11:38.240
+literate programming,
+
+00:11:38.240 --> 00:11:43.080
+because Org mode has a pretty capable
+
+00:11:43.080 --> 00:11:46.000
+code generation facility built into it.
+
+00:11:46.000 --> 00:11:47.440
+It's called tangling.
+
+00:11:47.440 --> 00:11:51.720
+So, if I go ahead and take my document...
+
+00:11:51.720 --> 00:11:54.107
+This is for a little Arduino project,
+
+00:11:54.107 --> 00:11:56.907
+where I was figuring out to spin things around
+
+00:11:56.907 --> 00:12:00.074
+using an old Roomba motor.
+
+00:12:00.074 --> 00:12:05.280
+I can go ahead and write a script like this,
+
+00:12:05.280 --> 00:12:09.400
+and then notice, I use the tangle variable
+
+00:12:09.400 --> 00:12:11.520
+that is just going to determine
+
+00:12:11.520 --> 00:12:13.560
+where that file gets written
+
+00:12:13.560 --> 00:12:17.680
+when we call the command `org-babel-tangle`.
+
+00:12:17.680 --> 00:12:20.080
+So, if I go ahead and run this,
+
+00:12:20.080 --> 00:12:21.800
+you can see down in the minibuffer,
+
+00:12:21.800 --> 00:12:23.040
+it's going to write to
+
+00:12:23.040 --> 00:12:26.707
+`/tmp/go-batsy-playground/go-batsy-playground.ino`.
+
+00:12:26.707 --> 00:12:27.840
+That's where this right here would write,
+
+00:12:29.240 --> 00:12:33.480
+and then I could run commands on it.
+
+00:12:33.480 --> 00:12:36.574
+Then I want to start being able to use this
+
+00:12:36.574 --> 00:12:38.600
+to build out a program.
+
+00:12:38.600 --> 00:12:42.000
+I'm going ahead and writing in prose
+
+00:12:42.000 --> 00:12:43.440
+and interspersing it with code.
+
+00:12:43.440 --> 00:12:47.160
+So, it's the inverse of code,
+
+00:12:47.160 --> 00:12:49.374
+in which you intersperse comments, [here]
+
+00:12:49.374 --> 00:12:51.640
+you write prose, and then you intersperse code
+
+00:12:51.640 --> 00:12:54.920
+where as needed.
+
+00:12:54.920 --> 00:12:58.120
+Tangle is implicitly defined up at the higher level
+
+00:12:58.120 --> 00:12:59.640
+in this property block right here,
+
+00:12:59.640 --> 00:13:02.600
+which I will talk about in a little bit.
+
+00:13:02.600 --> 00:13:04.720
+But if you want to see what properties
+
+00:13:04.720 --> 00:13:07.400
+are available at any given time,
+
+00:13:07.400 --> 00:13:10.140
+you can hit `org-babel-view-src-block-info`
+
+00:13:10.140 --> 00:13:14.274
+right there, and you can see that tangle is enabled.
+
+00:13:14.274 --> 00:13:16.440
+All of these blocks have the exact same tangle.
+
+00:13:16.440 --> 00:13:20.800
+If I run and see what it is, it's just going to
+
+00:13:20.800 --> 00:13:23.680
+write to this directory to `go-batsy.ino`.
+
+00:13:23.680 --> 00:13:28.920
+`org-babel-tangle` is going to go ahead
+
+00:13:28.920 --> 00:13:30.640
+and tangle all these source code blocks,
+
+00:13:30.640 --> 00:13:33.174
+and I can go ahead and look at my file
+
+00:13:33.174 --> 00:13:34.440
+and here it is.
+
+00:13:34.440 --> 00:13:36.240
+This is the full Arduino file
+
+00:13:36.240 --> 00:13:37.360
+that was generated from there.
+
+00:13:37.360 --> 00:13:40.807
+I start writing code here,
+
+00:13:40.807 --> 00:13:43.320
+and I'm basically doing it in a prose way.
+
+00:13:43.320 --> 00:13:44.640
+As I'm thinking about it,
+
+00:13:44.640 --> 00:13:46.080
+I write down what I'm going to do.
+
+00:13:46.080 --> 00:13:49.240
+Now these braces, we haven't seen these before.
+
+00:13:49.240 --> 00:13:50.440
+This is an aspect of Org called `noweb`,
+
+00:13:52.680 --> 00:13:55.374
+which again is not too much of a
+
+00:13:55.374 --> 00:13:56.400
+templating system too.
+
+00:13:56.400 --> 00:13:58.960
+But it does one thing, which is insert code,
+
+00:13:58.960 --> 00:14:00.200
+which turns out to be enough.
+
+00:14:00.200 --> 00:14:03.640
+So, this right here basically says,
+
+00:14:03.640 --> 00:14:08.507
+take that block with that exact name
+
+00:14:08.507 --> 00:14:09.960
+and just insert here.
+
+00:14:09.960 --> 00:14:13.760
+If you want to see exactly what a block expands to,
+
+00:14:13.760 --> 00:14:15.160
+you're going to come in here.
+
+00:14:15.160 --> 00:14:18.320
+You're going to run `org-babel-expand-src-block`,
+
+00:14:18.320 --> 00:14:21.000
+and there we go. That's what this block expands to.
+
+00:14:21.000 --> 00:14:22.080
+That's what all those places
+
+00:14:22.080 --> 00:14:24.807
+of this little bits and pieces expand to.
+
+00:14:24.807 --> 00:14:26.120
+So, that becomes really useful, and notice
+
+00:14:28.120 --> 00:14:29.960
+basically we just take these little blocks
+
+00:14:29.960 --> 00:14:32.520
+that are not going to be tangled directly
+
+00:14:32.520 --> 00:14:33.920
+but it will be in this other block.
+
+00:14:33.920 --> 00:14:38.074
+And we turn off their tangling.
+
+00:14:38.074 --> 00:14:40.680
+Now that you have some sort of tangling,
+
+00:14:40.680 --> 00:14:42.880
+you want to be able to interact with those files
+
+00:14:42.880 --> 00:14:46.707
+that are written to that directory.
+
+00:14:46.707 --> 00:14:48.960
+So, right here I have an area
+
+00:14:48.960 --> 00:14:52.760
+where I can do things like run a compiler.
+
+00:14:52.760 --> 00:14:55.160
+Now what does that compiler do?
+
+00:14:55.160 --> 00:14:57.840
+Well, this right here references
+
+00:14:57.841 --> 00:15:01.874
+a source code block that appears in another Org file.
+
+00:15:01.874 --> 00:15:04.520
+And I find that when doing these sort of things
+
+00:15:04.520 --> 00:15:06.007
+it can be useful to have a little
+
+00:15:06.007 --> 00:15:08.000
+utility Org directory.
+
+00:15:08.000 --> 00:15:10.374
+So, here it is, `org/ci.org`.
+
+00:15:10.374 --> 00:15:11.640
+This is just part of my repo.
+
+00:15:11.640 --> 00:15:14.140
+We open up, and here we go.
+
+00:15:14.140 --> 00:15:15.200
+I have a compile function.
+
+00:15:15.200 --> 00:15:18.360
+Basically, it's doing some stuff
+
+00:15:18.360 --> 00:15:20.480
+to clean up things correctly.
+
+00:15:20.480 --> 00:15:23.520
+But then using that same `async-shell-command`
+
+00:15:23.520 --> 00:15:26.280
+to open things up and a new buffer.
+
+00:15:26.280 --> 00:15:28.674
+In this case, named after
+
+00:15:28.674 --> 00:15:31.200
+whatever heading it was under.
+
+00:15:31.200 --> 00:15:35.160
+And then we're going to go ahead and inside of it
+
+00:15:35.160 --> 00:15:39.874
+run Arduino CLI command to compile,
+
+00:15:39.874 --> 00:15:43.560
+and pass that into `watchexec`.
+
+00:15:43.560 --> 00:15:46.120
+which is a little Rust program
+
+00:15:46.120 --> 00:15:49.520
+that watches inode[??] files for any changes,
+
+00:15:49.520 --> 00:15:51.240
+and when they detect them, we will run this.
+
+00:15:51.240 --> 00:15:56.160
+If I were to, for example, add a line here,
+
+00:15:56.160 --> 00:15:59.360
+and now run `org-babel-tangle`,
+
+00:15:59.360 --> 00:16:02.400
+you can see watchexec immediately
+
+00:16:02.400 --> 00:16:04.480
+picks it up and restarts it.
+
+00:16:04.480 --> 00:16:07.474
+Now it's kind of a pain to remember
+
+00:16:07.475 --> 00:16:09.680
+to run `org-babel-tangle` all the time.
+
+00:16:09.680 --> 00:16:13.807
+So, I can come here and click this button.
+
+00:16:13.807 --> 00:16:17.040
+It asks me to execute it there.
+
+00:16:17.040 --> 00:16:18.280
+And what does that do?
+
+00:16:18.280 --> 00:16:23.280
+Here you go. It's just a very simple hyperlink,
+
+00:16:23.280 --> 00:16:25.600
+but to the Elisp protocol.
+
+00:16:25.600 --> 00:16:30.600
+The Elisp protocol just adds a hook that says,
+
+00:16:30.600 --> 00:16:35.107
+whenever a document is saved, run `org-babel-tangle`.
+
+00:16:35.107 --> 00:16:37.600
+And now that I've run that, I can go ahead,
+
+00:16:37.600 --> 00:16:39.307
+come in here, and delete that.
+
+00:16:39.307 --> 00:16:42.340
+And look at that. It tangles automatically for me.
+
+00:16:42.340 --> 00:16:45.040
+Because I don't want to actually have this
+
+00:16:45.040 --> 00:16:49.480
+playground script tangle to my real file,
+
+00:16:49.480 --> 00:16:51.440
+I need this concept of
+
+00:16:51.440 --> 00:16:52.760
+some sort of workspace directory.
+
+00:16:52.760 --> 00:16:54.880
+And a workspace directory
+
+00:16:54.880 --> 00:16:58.280
+what I really want is a variable that is tied to
+
+00:16:58.280 --> 00:17:02.674
+where in my document hierarchy this appears.
+
+00:17:02.674 --> 00:17:06.680
+I want a dynamically scoped variable
+
+00:17:06.680 --> 00:17:08.240
+that's scoped to my document.
+
+00:17:08.240 --> 00:17:12.560
+And you can do that. For example, in this case,
+
+00:17:12.560 --> 00:17:15.280
+I have in my properties
+
+00:17:15.280 --> 00:17:20.080
+a key value declared `workspace-directory`,
+
+00:17:20.080 --> 00:17:22.080
+[it] goes into a temp directory.
+
+00:17:22.080 --> 00:17:24.480
+And here, by running `org-get-entry`
+
+00:17:24.480 --> 00:17:25.800
+starting at the current point,
+
+00:17:25.800 --> 00:17:27.507
+find `workspace-directory`
+
+00:17:27.507 --> 00:17:28.760
+with a second parameter 1.
+
+00:17:28.760 --> 00:17:31.520
+You can see down in the minibuffer,
+
+00:17:31.520 --> 00:17:37.174
+goes to `/tmp/go-batsy-playground/`.
+
+00:17:37.174 --> 00:17:39.720
+This right here is going to override
+
+00:17:42.040 --> 00:17:44.307
+the `workspace-directory` at the top level,
+
+00:17:44.307 --> 00:17:47.607
+which is dot. Dot means here.
+
+00:17:47.607 --> 00:17:48.880
+That's what makes sure
+
+00:17:48.880 --> 00:17:50.680
+that the rest of these tangle to
+
+00:17:50.680 --> 00:17:54.560
+that go-batsy file right relevant to here.
+
+00:17:54.560 --> 00:17:55.740
+And that does mean that we need
+
+00:17:55.740 --> 00:17:58.207
+a little bit more complex thing here.
+
+00:17:58.207 --> 00:18:01.760
+So, we're saying go ahead and `org-entry-get`
+
+00:18:01.760 --> 00:18:04.800
+the `workspace-directory`.
+
+00:18:04.800 --> 00:18:06.807
+If anyone hasn't seen this syntax,
+
+00:18:06.807 --> 00:18:16.040
+this dash arrow is from the dash.el library,
+
+00:18:16.040 --> 00:18:19.240
+which is basically a big library of all
+
+00:18:19.240 --> 00:18:20.940
+the utility functions that you wish
+
+00:18:20.940 --> 00:18:22.880
+Emacs Lisp had. They're well-named.
+
+00:18:22.880 --> 00:18:24.480
+I highly, highly recommend it.
+
+00:18:24.480 --> 00:18:26.080
+This is the threading operator.
+
+00:18:26.080 --> 00:18:28.200
+So, we're just basically taking it,
+
+00:18:28.200 --> 00:18:29.760
+getting the `workspace-directory`,
+
+00:18:29.760 --> 00:18:32.307
+if it happens to be dot, then we're just going to
+
+00:18:32.307 --> 00:18:33.320
+return the current directory,
+
+00:18:33.320 --> 00:18:36.000
+otherwise whatever directory said.
+
+00:18:36.000 --> 00:18:39.240
+And then I want to just take a moment
+
+00:18:39.240 --> 00:18:41.280
+and look at the rest of this structure.
+
+00:18:41.280 --> 00:18:43.080
+So, `workspace-directory` we talked about.
+
+00:18:43.080 --> 00:18:46.774
+`header-args` if you noticed, none of my
+
+00:18:46.774 --> 00:18:48.707
+code blocks for the most part
+
+00:18:48.707 --> 00:18:50.840
+have any header arguments.
+
+00:18:50.840 --> 00:18:53.174
+You can drop the `header-args` property,
+
+00:18:53.174 --> 00:18:55.607
+which is going to be header arguments
+
+00:18:55.607 --> 00:18:57.840
+that are added automatically
+
+00:18:57.840 --> 00:19:03.407
+to all source code blocks under this heading.
+
+00:19:03.407 --> 00:19:05.407
+`header-args+`. Well,
+
+00:19:05.407 --> 00:19:06.540
+sometimes you don't want to type…
+
+00:19:06.540 --> 00:19:07.507
+you have a bunch of args,
+
+00:19:07.507 --> 00:19:08.240
+you don't want to type them out
+
+00:19:08.240 --> 00:19:09.440
+in this one big line.
+
+00:19:09.440 --> 00:19:11.040
+So, you basically are adding a new header-arg
+
+00:19:13.320 --> 00:19:15.407
+to the existing list of header.
+
+00:19:15.407 --> 00:19:18.160
+And then you can have header-args that are specific
+
+00:19:18.160 --> 00:19:20.440
+to certain languages, like, for example,
+
+00:19:20.440 --> 00:19:21.560
+this `default-directory` var is going to be set
+
+00:19:23.720 --> 00:19:25.200
+for all Emacs Lisps.
+
+00:19:25.200 --> 00:19:29.574
+And for all Arduinos, evaluation will be disabled,
+
+00:19:29.574 --> 00:19:32.440
+and tangling will be automatically enabled.
+
+00:19:32.440 --> 00:19:35.307
+These are just some of the workflows that become
+
+00:19:35.307 --> 00:19:38.320
+useful when you're actually doing the coding.
+
+00:19:38.320 --> 00:19:41.374
+[Future George]: Oh, hello again!
+
+00:19:41.374 --> 00:19:45.307
+Me from the six months from now.
+
+00:19:45.307 --> 00:19:49.107
+[George]: Cool.
+
+00:19:49.107 --> 00:19:51.000
+[Future George]: The talk got over, people liked it,
+
+00:19:51.000 --> 00:19:53.040
+thought the pacing was all over the place.
+
+00:19:53.040 --> 00:19:56.360
+[George]: Yeah, I had to cut two thirds of it,
+
+00:19:56.360 --> 00:19:59.800
+going to be filling in those gaps in the Etherpad.
+
+00:19:59.800 --> 00:20:03.520
+[Future George]: And the editing was uneven, at best.
+
+00:20:03.520 --> 00:20:05.507
+[George]: I got way better at it
+
+00:20:05.507 --> 00:20:06.680
+as I worked on it, didn't I?
+
+00:20:06.680 --> 00:20:09.960
+Kdenlive is pretty cool.
+
+00:20:09.960 --> 00:20:13.540
+But yeah, I wanted to take a shot at
+
+00:20:13.540 --> 00:20:16.040
+something different, and I figured if anyone can
+
+00:20:16.040 --> 00:20:17.760
+appreciate trying something different,
+
+00:20:17.760 --> 00:20:20.120
+it's EmacsConf, right?
+
+00:20:20.120 --> 00:20:21.520
+I hope people found it useful.
+
+00:20:21.520 --> 00:20:22.600
+[Future George]: Yeah, some did.
+
+00:20:22.600 --> 00:20:26.920
+Oh, I should tell you about the coming Orca war.